diff --git a/Extras/vectormathlibrary/doc/Vector_Math_Library-Overview.pdf b/Extras/vectormathlibrary/doc/Vector_Math_Library-Overview.pdf new file mode 100644 index 000000000..8ac1928ce Binary files /dev/null and b/Extras/vectormathlibrary/doc/Vector_Math_Library-Overview.pdf differ diff --git a/Extras/vectormathlibrary/doc/Vector_Math_Library_C-Reference.pdf b/Extras/vectormathlibrary/doc/Vector_Math_Library_C-Reference.pdf new file mode 100644 index 000000000..f864f476a --- /dev/null +++ b/Extras/vectormathlibrary/doc/Vector_Math_Library_C-Reference.pdf @@ -0,0 +1,19966 @@ +%PDF-1.5 % +8582 0 obj<> endobj +xref +8582 1415 +0000000016 00000 n +0000038775 00000 n +0000038912 00000 n +0000029180 00000 n +0000039039 00000 n +0000039176 00000 n +0000039292 00000 n +0000039769 00000 n +0000040024 00000 n +0000040102 00000 n +0000040494 00000 n +0000041060 00000 n +0000041309 00000 n +0000041795 00000 n +0000042053 00000 n +0000070697 00000 n +0000102588 00000 n +0000128358 00000 n +0000128418 00000 n +0000128598 00000 n +0000128801 00000 n +0000128972 00000 n +0000129109 00000 n +0000129247 00000 n +0000129464 00000 n +0000129601 00000 n +0000129736 00000 n +0000129955 00000 n +0000130093 00000 n +0000130228 00000 n +0000130446 00000 n +0000130567 00000 n +0000130688 00000 n +0000130896 00000 n +0000131033 00000 n +0000131158 00000 n +0000131375 00000 n +0000131511 00000 n +0000131633 00000 n +0000131851 00000 n +0000131988 00000 n +0000132111 00000 n +0000132295 00000 n +0000132425 00000 n +0000132557 00000 n +0000132777 00000 n +0000132908 00000 n +0000133038 00000 n +0000133256 00000 n +0000133386 00000 n +0000133516 00000 n +0000133733 00000 n +0000133848 00000 n +0000133962 00000 n +0000134169 00000 n +0000134300 00000 n +0000134416 00000 n +0000134633 00000 n +0000134763 00000 n +0000134881 00000 n +0000135099 00000 n +0000135231 00000 n +0000135347 00000 n +0000135534 00000 n +0000135666 00000 n +0000135801 00000 n +0000135984 00000 n +0000136116 00000 n +0000136247 00000 n +0000136431 00000 n +0000136563 00000 n +0000136693 00000 n +0000136879 00000 n +0000136996 00000 n +0000137112 00000 n +0000137329 00000 n +0000137462 00000 n +0000137580 00000 n +0000137763 00000 n +0000137895 00000 n +0000138014 00000 n +0000138199 00000 n +0000138331 00000 n +0000138450 00000 n +0000138638 00000 n +0000138766 00000 n +0000138894 00000 n +0000139077 00000 n +0000139204 00000 n +0000139328 00000 n +0000139512 00000 n +0000139639 00000 n +0000139764 00000 n +0000139947 00000 n +0000140057 00000 n +0000140167 00000 n +0000140383 00000 n +0000140510 00000 n +0000140622 00000 n +0000140806 00000 n +0000140932 00000 n +0000141045 00000 n +0000141229 00000 n +0000141356 00000 n +0000141469 00000 n +0000141687 00000 n +0000141810 00000 n +0000141933 00000 n +0000142070 00000 n +0000142213 00000 n +0000142343 00000 n +0000142478 00000 n +0000142615 00000 n +0000142741 00000 n +0000142887 00000 n +0000143023 00000 n +0000143174 00000 n +0000143317 00000 n +0000143450 00000 n +0000143578 00000 n +0000143706 00000 n +0000143834 00000 n +0000143968 00000 n +0000144101 00000 n +0000144239 00000 n +0000144377 00000 n +0000144523 00000 n +0000144656 00000 n +0000144800 00000 n +0000144933 00000 n +0000145065 00000 n +0000145196 00000 n +0000145334 00000 n +0000145460 00000 n +0000145600 00000 n +0000145740 00000 n +0000145875 00000 n +0000146015 00000 n +0000146150 00000 n +0000146288 00000 n +0000146428 00000 n +0000146566 00000 n +0000146714 00000 n +0000146855 00000 n +0000147004 00000 n +0000147146 00000 n +0000147291 00000 n +0000147419 00000 n +0000147557 00000 n +0000147692 00000 n +0000147821 00000 n +0000147949 00000 n +0000148077 00000 n +0000148211 00000 n +0000148343 00000 n +0000148471 00000 n +0000148612 00000 n +0000148761 00000 n +0000148905 00000 n +0000149035 00000 n +0000149185 00000 n +0000149314 00000 n +0000149445 00000 n +0000149572 00000 n +0000149698 00000 n +0000149849 00000 n +0000149992 00000 n +0000150122 00000 n +0000150251 00000 n +0000150379 00000 n +0000150511 00000 n +0000150639 00000 n +0000150767 00000 n +0000150901 00000 n +0000151034 00000 n +0000151172 00000 n +0000151311 00000 n +0000151455 00000 n +0000151599 00000 n +0000151731 00000 n +0000151862 00000 n +0000151992 00000 n +0000152130 00000 n +0000152256 00000 n +0000152396 00000 n +0000152536 00000 n +0000152670 00000 n +0000152811 00000 n +0000152946 00000 n +0000153084 00000 n +0000153224 00000 n +0000153363 00000 n +0000153502 00000 n +0000153654 00000 n +0000153796 00000 n +0000153944 00000 n +0000154082 00000 n +0000154222 00000 n +0000154369 00000 n +0000154511 00000 n +0000154640 00000 n +0000154778 00000 n +0000154910 00000 n +0000155039 00000 n +0000155167 00000 n +0000155299 00000 n +0000155427 00000 n +0000155555 00000 n +0000155689 00000 n +0000155822 00000 n +0000155949 00000 n +0000156089 00000 n +0000156239 00000 n +0000156367 00000 n +0000156493 00000 n +0000156623 00000 n +0000156749 00000 n +0000156895 00000 n +0000157031 00000 n +0000157181 00000 n +0000157323 00000 n +0000157452 00000 n +0000157581 00000 n +0000157710 00000 n +0000157844 00000 n +0000157977 00000 n +0000158107 00000 n +0000158252 00000 n +0000158398 00000 n +0000158538 00000 n +0000158670 00000 n +0000158801 00000 n +0000158952 00000 n +0000159093 00000 n +0000159233 00000 n +0000159368 00000 n +0000159509 00000 n +0000159643 00000 n +0000159784 00000 n +0000159933 00000 n +0000160080 00000 n +0000160222 00000 n +0000160366 00000 n +0000160494 00000 n +0000160623 00000 n +0000160752 00000 n +0000160880 00000 n +0000161014 00000 n +0000161146 00000 n +0000161287 00000 n +0000161442 00000 n +0000161576 00000 n +0000161725 00000 n +0000161853 00000 n +0000162004 00000 n +0000162132 00000 n +0000162262 00000 n +0000162390 00000 n +0000162518 00000 n +0000162644 00000 n +0000162770 00000 n +0000162900 00000 n +0000163026 00000 n +0000163152 00000 n +0000163284 00000 n +0000163414 00000 n +0000163551 00000 n +0000163687 00000 n +0000163817 00000 n +0000163947 00000 n +0000164075 00000 n +0000164212 00000 n +0000164338 00000 n +0000164464 00000 n +0000164588 00000 n +0000164732 00000 n +0000164878 00000 n +0000165022 00000 n +0000165172 00000 n +0000165320 00000 n +0000165464 00000 n +0000165602 00000 n +0000165752 00000 n +0000165899 00000 n +0000166038 00000 n +0000166184 00000 n +0000166324 00000 n +0000166450 00000 n +0000166582 00000 n +0000166708 00000 n +0000166834 00000 n +0000166964 00000 n +0000167090 00000 n +0000167217 00000 n +0000167350 00000 n +0000167481 00000 n +0000167605 00000 n +0000167731 00000 n +0000167857 00000 n +0000167983 00000 n +0000168115 00000 n +0000168249 00000 n +0000168383 00000 n +0000168517 00000 n +0000168651 00000 n +0000168783 00000 n +0000168915 00000 n +0000169054 00000 n +0000169186 00000 n +0000169317 00000 n +0000169463 00000 n +0000169589 00000 n +0000169721 00000 n +0000169862 00000 n +0000169988 00000 n +0000170126 00000 n +0000170276 00000 n +0000170422 00000 n +0000170568 00000 n +0000170714 00000 n +0000170861 00000 n +0000171014 00000 n +0000171158 00000 n +0000171308 00000 n +0000171446 00000 n +0000171590 00000 n +0000171724 00000 n +0000171856 00000 n +0000171990 00000 n +0000172127 00000 n +0000172261 00000 n +0000172397 00000 n +0000172529 00000 n +0000172672 00000 n +0000172804 00000 n +0000172946 00000 n +0000173072 00000 n +0000173200 00000 n +0000173342 00000 n +0000173491 00000 n +0000173624 00000 n +0000173759 00000 n +0000173894 00000 n +0000174028 00000 n +0000174162 00000 n +0000174296 00000 n +0000174430 00000 n +0000174562 00000 n +0000174700 00000 n +0000174834 00000 n +0000174964 00000 n +0000175108 00000 n +0000175253 00000 n +0000175380 00000 n +0000175510 00000 n +0000175640 00000 n +0000175770 00000 n +0000175911 00000 n +0000176041 00000 n +0000176168 00000 n +0000176319 00000 n +0000176457 00000 n +0000176608 00000 n +0000176756 00000 n +0000176902 00000 n +0000177051 00000 n +0000177198 00000 n +0000177350 00000 n +0000177500 00000 n +0000177653 00000 n +0000177794 00000 n +0000177939 00000 n +0000178081 00000 n +0000178222 00000 n +0000178372 00000 n +0000178515 00000 n +0000178659 00000 n +0000178804 00000 n +0000178938 00000 n +0000179080 00000 n +0000179229 00000 n +0000179361 00000 n +0000179495 00000 n +0000179629 00000 n +0000179764 00000 n +0000179898 00000 n +0000180034 00000 n +0000180166 00000 n +0000180309 00000 n +0000180438 00000 n +0000180583 00000 n +0000180730 00000 n +0000180856 00000 n +0000181004 00000 n +0000181137 00000 n +0000181272 00000 n +0000181407 00000 n +0000181541 00000 n +0000181676 00000 n +0000181811 00000 n +0000181943 00000 n +0000182076 00000 n +0000182208 00000 n +0000182338 00000 n +0000182482 00000 n +0000182627 00000 n +0000182757 00000 n +0000182897 00000 n +0000183027 00000 n +0000183153 00000 n +0000183303 00000 n +0000183441 00000 n +0000183591 00000 n +0000183739 00000 n +0000183886 00000 n +0000184035 00000 n +0000184182 00000 n +0000184336 00000 n +0000184480 00000 n +0000184630 00000 n +0000184773 00000 n +0000184918 00000 n +0000185063 00000 n +0000185198 00000 n +0000185342 00000 n +0000185492 00000 n +0000185624 00000 n +0000185758 00000 n +0000185892 00000 n +0000186026 00000 n +0000186160 00000 n +0000186294 00000 n +0000186426 00000 n +0000186554 00000 n +0000186696 00000 n +0000186829 00000 n +0000186982 00000 n +0000187139 00000 n +0000187287 00000 n +0000187424 00000 n +0000187559 00000 n +0000187694 00000 n +0000187829 00000 n +0000187969 00000 n +0000188108 00000 n +0000188252 00000 n +0000188396 00000 n +0000188546 00000 n +0000188685 00000 n +0000188837 00000 n +0000188975 00000 n +0000189115 00000 n +0000189251 00000 n +0000189395 00000 n +0000189527 00000 n +0000189673 00000 n +0000189821 00000 n +0000189961 00000 n +0000190107 00000 n +0000190247 00000 n +0000190392 00000 n +0000190538 00000 n +0000190683 00000 n +0000190837 00000 n +0000190985 00000 n +0000191138 00000 n +0000191288 00000 n +0000191446 00000 n +0000191598 00000 n +0000191732 00000 n +0000191879 00000 n +0000192017 00000 n +0000192154 00000 n +0000192288 00000 n +0000192424 00000 n +0000192564 00000 n +0000192704 00000 n +0000192836 00000 n +0000192982 00000 n +0000193138 00000 n +0000193286 00000 n +0000193424 00000 n +0000193582 00000 n +0000193718 00000 n +0000193855 00000 n +0000193987 00000 n +0000194119 00000 n +0000194275 00000 n +0000194424 00000 n +0000194560 00000 n +0000194695 00000 n +0000194831 00000 n +0000194970 00000 n +0000195104 00000 n +0000195239 00000 n +0000195379 00000 n +0000195518 00000 n +0000195662 00000 n +0000195807 00000 n +0000195958 00000 n +0000196109 00000 n +0000196249 00000 n +0000196385 00000 n +0000196522 00000 n +0000196666 00000 n +0000196799 00000 n +0000196947 00000 n +0000197093 00000 n +0000197233 00000 n +0000197381 00000 n +0000197522 00000 n +0000197669 00000 n +0000197813 00000 n +0000197959 00000 n +0000198104 00000 n +0000198263 00000 n +0000198410 00000 n +0000198564 00000 n +0000198709 00000 n +0000198857 00000 n +0000199009 00000 n +0000199158 00000 n +0000199308 00000 n +0000199444 00000 n +0000199589 00000 n +0000199729 00000 n +0000199863 00000 n +0000200000 00000 n +0000200139 00000 n +0000200273 00000 n +0000200407 00000 n +0000200547 00000 n +0000200687 00000 n +0000200821 00000 n +0000200970 00000 n +0000201126 00000 n +0000201260 00000 n +0000201392 00000 n +0000201529 00000 n +0000201662 00000 n +0000201815 00000 n +0000201973 00000 n +0000202121 00000 n +0000202256 00000 n +0000202391 00000 n +0000202525 00000 n +0000202666 00000 n +0000202804 00000 n +0000202941 00000 n +0000203092 00000 n +0000203242 00000 n +0000203388 00000 n +0000203527 00000 n +0000203663 00000 n +0000203819 00000 n +0000203965 00000 n +0000204111 00000 n +0000204251 00000 n +0000204398 00000 n +0000204539 00000 n +0000204685 00000 n +0000204840 00000 n +0000204993 00000 n +0000205142 00000 n +0000205292 00000 n +0000205443 00000 n +0000205577 00000 n +0000205711 00000 n +0000205845 00000 n +0000205979 00000 n +0000206119 00000 n +0000206259 00000 n +0000206405 00000 n +0000206566 00000 n +0000206707 00000 n +0000206861 00000 n +0000206995 00000 n +0000207152 00000 n +0000207287 00000 n +0000207424 00000 n +0000207558 00000 n +0000207693 00000 n +0000207825 00000 n +0000207959 00000 n +0000208095 00000 n +0000208227 00000 n +0000208359 00000 n +0000208497 00000 n +0000208635 00000 n +0000208780 00000 n +0000208922 00000 n +0000209059 00000 n +0000209196 00000 n +0000209331 00000 n +0000209473 00000 n +0000209605 00000 n +0000209735 00000 n +0000209866 00000 n +0000210017 00000 n +0000210168 00000 n +0000210318 00000 n +0000210475 00000 n +0000210631 00000 n +0000210781 00000 n +0000210926 00000 n +0000211084 00000 n +0000211237 00000 n +0000211382 00000 n +0000211532 00000 n +0000211678 00000 n +0000211828 00000 n +0000211960 00000 n +0000212096 00000 n +0000212229 00000 n +0000212361 00000 n +0000212497 00000 n +0000212631 00000 n +0000212763 00000 n +0000212902 00000 n +0000213042 00000 n +0000213174 00000 n +0000213307 00000 n +0000213441 00000 n +0000213573 00000 n +0000213711 00000 n +0000213853 00000 n +0000213993 00000 n +0000214133 00000 n +0000214274 00000 n +0000214413 00000 n +0000214552 00000 n +0000214696 00000 n +0000214836 00000 n +0000214972 00000 n +0000215125 00000 n +0000215257 00000 n +0000215393 00000 n +0000215539 00000 n +0000215673 00000 n +0000215818 00000 n +0000215974 00000 n +0000216127 00000 n +0000216280 00000 n +0000216432 00000 n +0000216587 00000 n +0000216746 00000 n +0000216896 00000 n +0000217050 00000 n +0000217194 00000 n +0000217345 00000 n +0000217494 00000 n +0000217646 00000 n +0000217788 00000 n +0000217929 00000 n +0000218070 00000 n +0000218210 00000 n +0000218353 00000 n +0000218495 00000 n +0000218633 00000 n +0000218774 00000 n +0000218922 00000 n +0000219057 00000 n +0000219205 00000 n +0000219337 00000 n +0000219470 00000 n +0000219619 00000 n +0000219775 00000 n +0000219914 00000 n +0000220055 00000 n +0000220195 00000 n +0000220335 00000 n +0000220475 00000 n +0000220617 00000 n +0000220757 00000 n +0000220896 00000 n +0000221041 00000 n +0000221179 00000 n +0000221315 00000 n +0000221466 00000 n +0000221618 00000 n +0000221750 00000 n +0000221886 00000 n +0000222023 00000 n +0000222160 00000 n +0000222308 00000 n +0000222444 00000 n +0000222576 00000 n +0000222732 00000 n +0000222878 00000 n +0000223035 00000 n +0000223188 00000 n +0000223342 00000 n +0000223495 00000 n +0000223647 00000 n +0000223805 00000 n +0000223962 00000 n +0000224123 00000 n +0000224269 00000 n +0000224421 00000 n +0000224570 00000 n +0000224717 00000 n +0000224873 00000 n +0000225024 00000 n +0000225174 00000 n +0000225324 00000 n +0000225472 00000 n +0000225623 00000 n +0000225763 00000 n +0000225912 00000 n +0000226066 00000 n +0000226205 00000 n +0000226346 00000 n +0000226487 00000 n +0000226629 00000 n +0000226769 00000 n +0000226909 00000 n +0000227049 00000 n +0000227189 00000 n +0000227337 00000 n +0000227471 00000 n +0000227620 00000 n +0000227772 00000 n +0000227904 00000 n +0000228058 00000 n +0000228197 00000 n +0000228338 00000 n +0000228479 00000 n +0000228619 00000 n +0000228759 00000 n +0000228900 00000 n +0000229038 00000 n +0000229177 00000 n +0000229316 00000 n +0000229452 00000 n +0000229604 00000 n +0000229755 00000 n +0000229892 00000 n +0000230038 00000 n +0000230178 00000 n +0000230312 00000 n +0000230468 00000 n +0000230613 00000 n +0000230770 00000 n +0000230922 00000 n +0000231074 00000 n +0000231228 00000 n +0000231381 00000 n +0000231541 00000 n +0000231691 00000 n +0000231846 00000 n +0000231996 00000 n +0000232146 00000 n +0000232296 00000 n +0000232446 00000 n +0000232597 00000 n +0000232738 00000 n +0000232887 00000 n +0000233041 00000 n +0000233180 00000 n +0000233320 00000 n +0000233461 00000 n +0000233604 00000 n +0000233745 00000 n +0000233886 00000 n +0000234024 00000 n +0000234164 00000 n +0000234298 00000 n +0000234447 00000 n +0000234577 00000 n +0000234727 00000 n +0000234867 00000 n +0000235022 00000 n +0000235169 00000 n +0000235305 00000 n +0000235438 00000 n +0000235571 00000 n +0000235703 00000 n +0000235842 00000 n +0000235979 00000 n +0000236122 00000 n +0000236264 00000 n +0000236413 00000 n +0000236549 00000 n +0000236698 00000 n +0000236836 00000 n +0000236972 00000 n +0000237107 00000 n +0000237250 00000 n +0000237380 00000 n +0000237525 00000 n +0000237672 00000 n +0000237810 00000 n +0000237954 00000 n +0000238094 00000 n +0000238236 00000 n +0000238378 00000 n +0000238521 00000 n +0000238674 00000 n +0000238819 00000 n +0000238969 00000 n +0000239115 00000 n +0000239265 00000 n +0000239398 00000 n +0000239540 00000 n +0000239676 00000 n +0000239808 00000 n +0000239941 00000 n +0000240073 00000 n +0000240212 00000 n +0000240350 00000 n +0000240480 00000 n +0000240625 00000 n +0000240777 00000 n +0000240923 00000 n +0000241060 00000 n +0000241215 00000 n +0000241349 00000 n +0000241479 00000 n +0000241609 00000 n +0000241764 00000 n +0000241910 00000 n +0000242045 00000 n +0000242177 00000 n +0000242309 00000 n +0000242446 00000 n +0000242580 00000 n +0000242712 00000 n +0000242851 00000 n +0000242988 00000 n +0000243130 00000 n +0000243272 00000 n +0000243421 00000 n +0000243570 00000 n +0000243706 00000 n +0000243840 00000 n +0000243975 00000 n +0000244121 00000 n +0000244252 00000 n +0000244396 00000 n +0000244541 00000 n +0000244679 00000 n +0000244823 00000 n +0000244961 00000 n +0000245103 00000 n +0000245245 00000 n +0000245390 00000 n +0000245535 00000 n +0000245692 00000 n +0000245836 00000 n +0000245989 00000 n +0000246131 00000 n +0000246275 00000 n +0000246427 00000 n +0000246573 00000 n +0000246705 00000 n +0000246848 00000 n +0000246984 00000 n +0000247116 00000 n +0000247248 00000 n +0000247385 00000 n +0000247517 00000 n +0000247649 00000 n +0000247787 00000 n +0000247923 00000 n +0000248053 00000 n +0000248198 00000 n +0000248353 00000 n +0000248483 00000 n +0000248617 00000 n +0000248747 00000 n +0000248897 00000 n +0000249040 00000 n +0000249194 00000 n +0000249341 00000 n +0000249475 00000 n +0000249609 00000 n +0000249741 00000 n +0000249879 00000 n +0000250015 00000 n +0000250151 00000 n +0000250300 00000 n +0000250451 00000 n +0000250596 00000 n +0000250733 00000 n +0000250868 00000 n +0000251022 00000 n +0000251167 00000 n +0000251313 00000 n +0000251451 00000 n +0000251595 00000 n +0000251733 00000 n +0000251878 00000 n +0000252030 00000 n +0000252180 00000 n +0000252326 00000 n +0000252475 00000 n +0000252607 00000 n +0000252739 00000 n +0000252872 00000 n +0000253004 00000 n +0000253142 00000 n +0000253278 00000 n +0000253423 00000 n +0000253581 00000 n +0000253719 00000 n +0000253872 00000 n +0000254004 00000 n +0000254158 00000 n +0000254292 00000 n +0000254426 00000 n +0000254558 00000 n +0000254688 00000 n +0000254818 00000 n +0000254953 00000 n +0000255083 00000 n +0000255213 00000 n +0000255351 00000 n +0000255485 00000 n +0000255626 00000 n +0000255767 00000 n +0000255903 00000 n +0000256038 00000 n +0000256170 00000 n +0000256310 00000 n +0000256440 00000 n +0000256568 00000 n +0000256696 00000 n +0000256844 00000 n +0000256993 00000 n +0000257143 00000 n +0000257299 00000 n +0000257452 00000 n +0000257599 00000 n +0000257743 00000 n +0000257897 00000 n +0000258048 00000 n +0000258190 00000 n +0000258340 00000 n +0000258487 00000 n +0000258618 00000 n +0000258754 00000 n +0000258885 00000 n +0000259015 00000 n +0000259149 00000 n +0000259279 00000 n +0000259409 00000 n +0000259547 00000 n +0000259681 00000 n +0000259809 00000 n +0000259940 00000 n +0000260070 00000 n +0000260207 00000 n +0000260345 00000 n +0000260483 00000 n +0000260621 00000 n +0000260760 00000 n +0000260900 00000 n +0000261037 00000 n +0000261179 00000 n +0000261315 00000 n +0000261449 00000 n +0000261598 00000 n +0000261728 00000 n +0000261862 00000 n +0000262006 00000 n +0000262138 00000 n +0000262282 00000 n +0000262436 00000 n +0000262586 00000 n +0000262737 00000 n +0000262887 00000 n +0000263037 00000 n +0000263194 00000 n +0000263342 00000 n +0000263494 00000 n +0000263636 00000 n +0000263784 00000 n +0000263922 00000 n +0000264059 00000 n +0000264200 00000 n +0000264338 00000 n +0000264476 00000 n +0000264615 00000 n +0000264755 00000 n +0000264901 00000 n +0000265048 00000 n +0000265178 00000 n +0000265308 00000 n +0000265454 00000 n +0000265606 00000 n +0000265743 00000 n +0000265881 00000 n +0000266017 00000 n +0000266155 00000 n +0000266294 00000 n +0000266435 00000 n +0000266573 00000 n +0000266709 00000 n +0000266851 00000 n +0000266987 00000 n +0000267122 00000 n +0000267270 00000 n +0000267418 00000 n +0000267549 00000 n +0000267685 00000 n +0000267820 00000 n +0000267955 00000 n +0000268100 00000 n +0000268237 00000 n +0000268368 00000 n +0000268522 00000 n +0000268666 00000 n +0000268822 00000 n +0000268972 00000 n +0000269123 00000 n +0000269273 00000 n +0000269425 00000 n +0000269583 00000 n +0000269737 00000 n +0000269894 00000 n +0000270039 00000 n +0000270190 00000 n +0000270337 00000 n +0000270481 00000 n +0000270634 00000 n +0000270780 00000 n +0000270928 00000 n +0000271076 00000 n +0000271215 00000 n +0000271363 00000 n +0000271515 00000 n +0000271652 00000 n +0000271791 00000 n +0000271927 00000 n +0000272066 00000 n +0000272205 00000 n +0000272343 00000 n +0000272481 00000 n +0000272628 00000 n +0000272774 00000 n +0000272927 00000 n +0000273057 00000 n +0000273211 00000 n +0000273347 00000 n +0000273485 00000 n +0000273621 00000 n +0000273761 00000 n +0000273899 00000 n +0000274037 00000 n +0000274176 00000 n +0000274314 00000 n +0000274450 00000 n +0000274585 00000 n +0000274733 00000 n +0000274881 00000 n +0000275015 00000 n +0000275159 00000 n +0000275293 00000 n +0000275423 00000 n +0000275577 00000 n +0000275720 00000 n +0000275874 00000 n +0000276025 00000 n +0000276175 00000 n +0000276326 00000 n +0000276478 00000 n +0000276634 00000 n +0000276783 00000 n +0000276937 00000 n +0000277084 00000 n +0000277233 00000 n +0000277382 00000 n +0000277521 00000 n +0000277667 00000 n +0000277819 00000 n +0000277955 00000 n +0000278093 00000 n +0000278229 00000 n +0000278367 00000 n +0000278506 00000 n +0000278645 00000 n +0000278783 00000 n +0000278929 00000 n +0000279065 00000 n +0000279222 00000 n +0000279382 00000 n +0000279535 00000 n +0000279675 00000 n +0000279814 00000 n +0000279953 00000 n +0000280091 00000 n +0000280236 00000 n +0000280378 00000 n +0000280529 00000 n +0000280678 00000 n +0000280832 00000 n +0000280975 00000 n +0000281130 00000 n +0000281272 00000 n +0000281413 00000 n +0000281554 00000 n +0000281702 00000 n +0000281839 00000 n +0000281989 00000 n +0000282139 00000 n +0000282283 00000 n +0000282434 00000 n +0000282579 00000 n +0000282729 00000 n +0000282877 00000 n +0000283028 00000 n +0000283188 00000 n +0000283338 00000 n +0000283496 00000 n +0000283649 00000 n +0000283804 00000 n +0000283960 00000 n +0000284098 00000 n +0000284247 00000 n +0000284390 00000 n +0000284528 00000 n +0000284666 00000 n +0000284804 00000 n +0000284949 00000 n +0000285093 00000 n +0000285229 00000 n +0000285380 00000 n +0000285539 00000 n +0000285691 00000 n +0000285832 00000 n +0000285993 00000 n +0000286136 00000 n +0000286272 00000 n +0000286409 00000 n +0000286569 00000 n +0000286722 00000 n +0000286862 00000 n +0000287003 00000 n +0000287141 00000 n +0000287283 00000 n +0000287422 00000 n +0000287561 00000 n +0000287705 00000 n +0000287848 00000 n +0000287996 00000 n +0000288144 00000 n +0000288299 00000 n +0000288454 00000 n +0000288597 00000 n +0000288737 00000 n +0000288877 00000 n +0000289027 00000 n +0000289163 00000 n +0000289314 00000 n +0000289464 00000 n +0000289608 00000 n +0000289759 00000 n +0000289903 00000 n +0000290054 00000 n +0000290202 00000 n +0000290351 00000 n +0000290499 00000 n +0000290662 00000 n +0000290812 00000 n +0000290971 00000 n +0000291120 00000 n +0000291272 00000 n +0000291428 00000 n +0000291580 00000 n +0000291736 00000 n +0000291875 00000 n +0000292024 00000 n +0000292169 00000 n +0000292307 00000 n +0000292446 00000 n +0000292588 00000 n +0000292726 00000 n +0000292864 00000 n +0000293009 00000 n +0000293153 00000 n +0000293289 00000 n +0000293439 00000 n +0000293600 00000 n +0000293737 00000 n +0000293877 00000 n +0000294013 00000 n +0000294170 00000 n +0000294331 00000 n +0000294483 00000 n +0000294622 00000 n +0000294760 00000 n +0000294900 00000 n +0000295044 00000 n +0000295187 00000 n +0000295327 00000 n +0000295484 00000 n +0000295638 00000 n +0000295788 00000 n +0000295931 00000 n +0000296072 00000 n +0000296232 00000 n +0000296382 00000 n +0000296533 00000 n +0000296680 00000 n +0000296830 00000 n +0000296975 00000 n +0000297127 00000 n +0000297286 00000 n +0000297442 00000 n +0000297594 00000 n +0000297753 00000 n +0000297907 00000 n +0000298046 00000 n +0000298185 00000 n +0000298325 00000 n +0000298463 00000 n +0000298610 00000 n +0000298756 00000 n +0000298907 00000 n +0000299071 00000 n +0000299215 00000 n +0000299374 00000 n +0000299512 00000 n +0000299675 00000 n +0000299815 00000 n +0000299954 00000 n +0000300092 00000 n +0000300228 00000 n +0000300365 00000 n +0000300506 00000 n +0000300644 00000 n +0000300781 00000 n +0000300924 00000 n +0000301065 00000 n +0000301212 00000 n +0000301359 00000 n +0000301501 00000 n +0000301642 00000 n +0000301780 00000 n +0000301926 00000 n +0000302064 00000 n +0000302199 00000 n +0000302334 00000 n +0000302488 00000 n +0000302643 00000 n +0000302798 00000 n +0000302961 00000 n +0000303121 00000 n +0000303273 00000 n +0000303422 00000 n +0000303585 00000 n +0000303741 00000 n +0000303893 00000 n +0000304047 00000 n +0000304199 00000 n +0000304352 00000 n +0000304488 00000 n +0000304629 00000 n +0000304766 00000 n +0000304902 00000 n +0000305043 00000 n +0000305180 00000 n +0000305316 00000 n +0000305458 00000 n +0000305600 00000 n +0000305736 00000 n +0000305872 00000 n +0000306008 00000 n +0000306151 00000 n +0000306296 00000 n +0000306439 00000 n +0000306583 00000 n +0000306728 00000 n +0000306874 00000 n +0000307017 00000 n +0000307165 00000 n +0000307308 00000 n +0000307449 00000 n +0000307605 00000 n +0000307741 00000 n +0000307881 00000 n +0000308031 00000 n +0000308170 00000 n +0000308318 00000 n +0000308480 00000 n +0000308638 00000 n +0000308794 00000 n +0000308951 00000 n +0000309109 00000 n +0000309272 00000 n +0000309428 00000 n +0000309590 00000 n +0000309740 00000 n +0000309895 00000 n +0000310048 00000 n +0000310203 00000 n +0000310349 00000 n +0000310491 00000 n +0000310635 00000 n +0000310778 00000 n +0000310923 00000 n +0000311067 00000 n +0000311212 00000 n +0000311357 00000 n +0000311509 00000 n +0000311663 00000 n +0000311799 00000 n +0000311935 00000 n +0000312087 00000 n +0000312245 00000 n +0000312388 00000 n +0000312532 00000 n +0000312674 00000 n +0000312818 00000 n +0000312962 00000 n +0000313107 00000 n +0000313252 00000 n +0000313394 00000 n +0000313543 00000 n +0000313685 00000 n +0000313825 00000 n +0000313980 00000 n +0000314136 00000 n +0000314272 00000 n +0000314412 00000 n +0000314553 00000 n +0000314695 00000 n +0000314847 00000 n +0000314988 00000 n +0000315125 00000 n +0000315285 00000 n +0000315433 00000 n +0000315595 00000 n +0000315752 00000 n +0000315910 00000 n +0000316067 00000 n +0000316223 00000 n +0000316387 00000 n +0000316551 00000 n +0000316714 00000 n +0000316865 00000 n +0000317020 00000 n +0000317174 00000 n +0000317326 00000 n +0000317485 00000 n +0000317638 00000 n +0000317793 00000 n +0000317949 00000 n +0000318101 00000 n +0000318255 00000 n +0000318400 00000 n +0000318554 00000 n +0000318714 00000 n +0000318857 00000 n +0000319003 00000 n +0000319146 00000 n +0000319291 00000 n +0000319435 00000 n +0000319580 00000 n +0000319726 00000 n +0000319870 00000 n +0000320022 00000 n +0000320178 00000 n +0000320336 00000 n +0000320472 00000 n +0000320631 00000 n +0000320775 00000 n +0000320919 00000 n +0000321062 00000 n +0000321207 00000 n +0000321352 00000 n +0000321496 00000 n +0000321640 00000 n +0000321784 00000 n +0000321926 00000 n +0000322067 00000 n +0000322222 00000 n +0000322376 00000 n +0000322517 00000 n +0000322668 00000 n +0000322808 00000 n +0000322945 00000 n +0000323105 00000 n +0000323253 00000 n +0000323414 00000 n +0000323571 00000 n +0000323727 00000 n +0000323884 00000 n +0000324040 00000 n +0000324203 00000 n +0000324358 00000 n +0000324516 00000 n +0000324668 00000 n +0000324822 00000 n +0000324976 00000 n +0000325129 00000 n +0000325283 00000 n +0000325427 00000 n +0000325580 00000 n +0000325740 00000 n +0000325883 00000 n +0000326029 00000 n +0000326172 00000 n +0000326316 00000 n +0000326460 00000 n +0000326605 00000 n +0000326750 00000 n +0000326895 00000 n +0000327047 00000 n +0000327164 00000 n +0000327280 00000 n +0000327411 00000 n +0000327547 00000 n +0000327672 00000 n +0000327800 00000 n +trailer +<<00860e4ccbc16e4f9ed5f86e480df5c2>]>> +startxref +0 +%%EOF + +8585 0 obj<>stream +Yd~ZL kv2u:8 %/Aĵ)2b +;lgmmn#/wˍ6 %Mu;;7v@CرؖתI"H"?R~[!hix}. Q?KIL^uMm׊@t7PktjobޅsD|c+WC󹪳UԬB}3QSInmb(<^/tؙPƊPt*Ny۝z.i {#^<4+L \Ԡ/%$"6[U&@9G'SjFf,#Hru!I +{.ƪ=B{z˽ +fmכ04l*r /ܗ.d7>:EɎDF޲\+|׾C:͏ +N_U Dmb>KI &2ܻ#=a799>f0C]X|k1{i47Q{  ZJ%1/k!Hm%|1N͌8Gs&k&+LSI4WAe"+('";zx3Q _Zօ=*DϓPα6MnC}[K.h u_K䩯&"?Kcne<@?pU,WiƭFDn<(쨉5ywc a` aæ +f);W6@</I"ҁݡ%MH)*aGX$Xv\IѾ'BxCGՁ +L)j࡬c;Ը]` ;F\Em7;h43 +Œ|K_B"޴h+͡iXTUX=`r<2seM1PCr3u]Fйa/h@{Wk7K\\BC&wbk7;v,hVշ5sȴ"v%ƋEʀYMЊs dC3/hS .kN#eb4|Bj}'W Y,<\*@SN/eS\AiU7yIҌ]ZG_7a}?5' .Cp5?KH6-a d)f& Ǝ.5z'yS6ZAݼqb ? % n!uvz"]qSIs`D$z* ׂʸ\]jlGmӀ( Ehco pnzOo[n6K5?'d8[ݗptC}*L:eKj)#g㒵:dQỶ`Vk(g9qhuUȥeê \"*p pd띅ĔH^fU?&Pd^͜WEQ4/~guZv]́YV fY48˽^}g"^?ƅa2 FA^6$e1;gX2Sf'1Z@4f,N1 a |SJ%bFKp^uUWd47cadרV=OkS~J} /m8q"z#2Q8E)h +}!ṡ.2Nt zUO_Kg_ly8z3VxVAԮza)iYrSWxFnU7ķwKA#:T4%0LA"wSy(lưZe@1FF{,A-:Ut?*eI;d$A6׉a7|IWN3g[$3ɺ}q)?]W}Ꞧ&Zw7z^ dCRh}Y8PU+X9(Ype_)T!UahFx;18<:sSwVZ5s3ucjs2+c_Jz 1k:ԔD[ TLi  +mn]Z}@5* PU&Ɉ A( xW8f(%S_y6asP_ jt}NgJu~ x}'zeh&?ECi[yUK lӍ")L_C Q`3s!Lc>zW?7 9+fu,B?A kljC:̿a?(rC=mb>o0wwcVN!t\fЬ %d60eC 3"#^s$=1X(]ņAq#@.5n*ªiQyϮҾ ˌ?w&dX\"X[+څxD vX)=NSIΠcPA2_oZ'jiH'ALN1VvCԱgkMFZsZ42l43%šرukGem3ݜniss)C}k>>C£ &+NCPՌW/^h..)Iž" `Z( >uNͰf'Ez 8J =gbL~h Z.}t'bMnJpre I(} +R+8ϵ7j9%>Ŷ\Զ6rwN-fc$nt:Ȍ .YQ֨e<#&0]4aŚ1N p -._vj9j՘W ]_IMg}yH<>G1PL;" xR3kTAY/Plp7?/pa %4/D9`0cGފ BIá;aM}B޻I۠"X= w7`2;@E-v.qJ&H70DEG\ UQjw躄q'rXRvImcF0 L樶=X#'VOd +ӇTòyX٧-QeYN9 И|2|p5Km 6m<;U>ϭ5>CPmONh"ǎLP쏈b5!H +EJFu=Qwl`Rߒ_ao8ٴ fA_p/#E!p-¿'֊Ǿkn~Y԰ +Vf$w6,N]2"kyQyzzǤrnmoN#vg˲)fr +J#ݝxVKϋxrCO ]< ]!;ExK4m'NYPuxݢ=Ý꣩sS]Bx"(kZ;9'*1Nnui$–UƷMRڬ ph]܍>/6OTa2 }_' r7!,6Yk\2q<8!߁ X'R@aS\_J3Dmݔ0N*ݘtߪ)&!;IrL㝦 mZx`ܓ\󽨻4[dĖYe:.ި//bQg*P?^˦l47ᑺ9ylx ͚ qcGE,i;πF #=OyɢLܦO&\H-G}ZOùD+؊˾ot/!m5^h֔h 9x9e/j$;Hq&K)ۯU5VwC# +9s=.SvpED1PƁL4xˇz[>xQe#hTu(;l~~1_dN{l022̜ĚBQڱpn\l~+G9c@qD)}ֽIy?y$ 3?х>_1s'&r!S +&k橯9pcV0$HkyS|44}h\~jP!oζ/ř&Y ZB+ ;#G'gR @B]xO*Gs$l"bž)Q`O wneVE/Alӵ`91GvsL~ >. yì-#pk!bmsPg6_,_Ò7r_&.8s }v8x]4"SF ;^}0γP>M7ޘ\ז=!K ݉ck=~۽*Y5.wq0HEUϽC[-h0c0ƕZ'v&Vܧ +Ü 5m/m{wTa`svzK^/3S_2s5u__ϐN$)+y$@#pw|V0}Em*K26N1z}Zaep d 껇~;ys@gt ;|hOS)e`@ +TH(cs7]_I< Pܬ"_%`\fϼY@$t?0]: c*OTO%F f_nӭ|nfHoC%7@,Gs&E-TfX-+ŀe*{\˾9Yd:@ˎ7 @e5S)gEzkhuaJd%gަh1Vt#Ox}8c*P>22Y!̃qWt!qU'-j).n&)HS㺝8UP4f#)sjzB\:7꺍!bbJmD(QX\\#2elIb/f|+WȸS57SELS!KaZ];UZN$ ҫ/qtjύi'4\нѭaў;Fl*vc-:ʼSb\p _ݐWٸ[igdtIX"j{$ +"LX9Wki2sS#)F=E5Xׇ?o`yK|Q>BeS-{~S?WA4'/QjG9SМ-HִT,X鉃L|l(Z'hXz^LUYg +;r`>x-EsUB0Nȩ @xt#tPiBiqS8:1t #.c8$r!W]Sסp"\ތK')Q?1Mbg4 teZ=+j-y27r}){{zKmRktr,VV.ݤԝ!T!2=TwEPY2 ++.roM˽iE1 +!:;ȭ96`"iJ0YVfnl {%ӥۛ?q="v(IRɗ:g0[Nuܒ 6qA@cĕ=quxLQr^j\5u  +jmnQ% 2'K +ֺōnz#rVs?DGiKHJtdk'wc˸9ۼ݉81efR)4vsb9aVҽgcn΅2'7>*QJlb4dB.ya&]_}:=FI~`Lv* 0,FH)TA]2J/|ՁHC,,v[gfbwK1 6ؚeK,۱)ԟw_H-yV{œMStЍDr- Lnco_Rs\ewz݊J(ך.Cwe8꒖M/+KF64pf}2VK(0lWct-^Ƨ A_iedSx=͋h,3f +֜QU+ȼ+1L߫A1[8J]4Y8M lI޲Y׸F@s.\NHzH;8U@!BE{ +jYKӬ틔 +9{!m="4B#!p\ĔI=^9CYS*DJe(өWQglB 29!L{WWZH"S12! +H$#.z8FltYS 't,Bq1'֜(K +~m!7K>&}"˽نCuגQt~N[6Ns~pW:}[72@:`'x;ha <҆RX2KoEUP)q3.f 7(&Pj:5 + ل ,15$ gLZ{"IS¥)I~/FXx/w#e^J2Mz%(V[N'0* ʋ R3=c1Ա0bXO*`"IKVȟoӕlj_%'g"la(tc<=;=BrlKr󴞙["@.#Ë[Vec8hN#aEKi.d\دR`Dd4B9:.%(,tfW䥕9f%톸jYBΧϖ!VX|(3licO1ci60 l2D暴 [2Z~ ,`N,̒ nd/Y/ Q0AOT}!ā~)=@ݒZzz5v\=Ǔ)FYIˉ19\N>|S |), `U :8)hV1ֺک}#]%-&wqG;&Mt@Kf=_oUH EkkŠ u +eoU-J 5gʔF'[ `(][E Vc9TY +8/ς'´+E%;/R|A2ǓBdy rK@vYOC5;5wQڏ[_nrKNS~ZT`(E{b̓Z#[#9.Hu +Uh{'55 &cƘuR*g_u<\i32!=yg ߬":-8. ){4oNy~fY+: +dnouhipJ'BnWַmi![NMze:P4B,gool FR7i@n2M&ΖQH/Bq5n{BsaPxlXZdSSV{-Ve"Au6VmvLFyv4h#N*q +/ !hG2W ]Ea፶cg0=)M$6pc-nS1wQwE@Z ջxrIH!3vrkrLH[ ,cȎ-qjr&N?pR^gp$T> endobj 8584 0 obj<> endobj 8586 0 obj<> endobj 8587 0 obj<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8588 0 obj<> endobj 8589 0 obj<> endobj 8590 0 obj<> endobj 8591 0 obj<>stream +zZuKo&F(Wkb>b4{Jqx:ܜKFHY.HH;spUMc;3_/$nҏ51| S t+e9Zz/tn9OI(ˋf-:0.[54`_fJE!:,7֩zIass *нG !qsC L Lc@\ nwR +ݢ k@먕.`lDL4ST^*wwxPIp~j_-?MkVFK +endstream endobj 8592 0 obj<> endobj 8593 0 obj<> endobj 8594 0 obj<> endobj 8595 0 obj<> endobj 8596 0 obj<>stream +.X6u)ӻkUCĕg|C*$0!uzIJ'.~pf!~v&y{Rt>rfiG^~M(g1U s!M !`m-}CQ($w6U0!^o8چ̥51v8|wws it7Hf w΅8PJ +5Ǎ"-B%\@PjCBwJD#ԡ咓)϶7vdL (.+1d=-H.x\?GWjN:`?i<{ajxYXN_H:‹Hcun0`4;Qd69 +DU4]wv ۹ţWsqi<Ƙٛ{OzW%> +){n| <ǧg$Y@-fUێ6eR/SSx{ +zx/]_ăKdo, wӑ%=bV,B~Hk!N!ovVQt[s]xWD"g̮eul1P`l5 +1,NBvKjxF {zdܹ#T8olqڨZo\讇2X!8ʬt)زILd# A$4׺b8t/xoGEބ=f}_ z+X +s@*7/%PRP70IKkr5t E9)..~1ӌր~(SzmTPP$5ܜ@{;?t(StwrZ`P q;\`$MRDX|}52ɯgm۟ B4/i6ЯgrE$|F3'S;`MOS1QF];q T"/"Vfy-nc4`X}7 ń,eO]3?YGG73i^K(zNm's/U=>w}CeV ࣚڇUM5c0% 3 zEm~PNM!h6yRxSvz-\7wksrη Os~C_Z8ϯk`.0a0))kƔP](vY6D vP77(6 +Pr@}8ZulmF޼TS͛ \0. }Z۝AFLXE≤=G1uf%J1 ﵡ e1BeY%LAP!́$T4ZsGBT\]l={IwGP !{Q*!XAk/`׃47+KrEv{i{Ӌ)fR-?'GCL.NY]G[ !@^3&.Һ<;r¿Dc7O׸cU +y+Bz?A +P8,hb5"uCo& i! %Ma&D:۵(Y,eNNQBsNVh*hr~[F?x^"˃rV٫D[ٌw$m$Fk W+lƾ̬xVFEu-zhnT!wn0Mmԟscy,92/[ R$$}=*߫Pو-Id3m8VJIa϶h\0fOёCx+&v8~ۈE$lB6pj: ++בJ,t{\ rf^E8[ oO08{mäyjvopvI=&;n@" |*A?^6&<%23U(T4z*L΀vGIdž;q㭮n8' l[kD.]ʤ|k"#m<Q!0Aөx3gz{zB"S@?; F,[ 1QsjG@Z'JR8,80Ƶ2rSvHJjl~u,x75l-fVhٴH*S aK?Y"0$cc(1 6\Im}C}F$ZvEG:RD0ezʀؚO v ϽeuϻFdPm'd5֢?woSx}C~_?Oc5vWm_ܷONC"}LZƗ/2q()D+(%wl;wK?a{3G. < 2*Q|;3ݓLw␒Z='R/@:dbkz myGԘ AZ}ҷ0ZӯaK#s6i5/3/0vk"Y>QY@=~K~jnaop1L&%SN4 Hny;sJ$7Gp0nyU9 P5/jMˠY) )q*<53a_£BxŤ.'+ fB^v1SC<\^á@[jGFSOָ? Q|!.gdzOy:s@ۮ`q%6kD`l:EtBXV6U +'@ -jLU"gf )pzi77OMASٹ.bLy;v/ZE""vd⧐. C ]:&[H"AF퀙3*{/D }|'6jV_hSBuSOt*c&a%TC1nϹZWՏu ,P\UJ%.v\tg5"vbJ#c|J #岋46g0TpTKۆ;-XMnjX.!SA'ܓ[r1L&gյv;|Ǚ諹ׇv]]<HzB w}w{t=t7 !}'>iih1us%??p&6೓am'LjǛTZFI5ş0- f5JuNXϬzvFK+jP`jx +kG S5i):$ b38h/eSuOˋ_+g~' +WW  [q{}Y Z)(3+Ox}䧐r 4rALsiQ4^Nl\ȀުGx ŧe|~d2ǦD?|dy59qoᢑ*K&ĻO\DWL{iJt2Gwcq>];fz)`}(EY s"z}{6[? NjתmjBz1->n;/G 2]Z9j/E3lÛNW+%4/JM2![F7lY҆@:WUGSGpI!NyjmlVW.kt$q+F%GYGKva!<14 i^OH)ugis2%l֎2JP8F\Ht-gfb )@cfy@.”؟u``Ws #s |,…dp +kP%]jߍLIJNx6wɨ[x}-摉1q(>M{o9#I9m@7ʢlXU)})'>fGZ2MJR햌V#&ȼ)ckc5Vs޷!-:6~HzhQ`B,®UU= {@[œxB>ю 2Jl8\C24kG-Me"#P\0v]yu}fLG;P^4A$ џNjXeg`rDs&@l# ŎQ*o`‡(PX㾏vBI\"qZk pwyj iduCEO +_zh,Fp:Ͱ$L=sPY]+;Q-jk8ѕvܾF "3M ˰B4°#ooѺ!SP=JׯNHΙ߸w\h$2%bH{0ӯhΝlڻWlbSWƺ4RD$QFX6%\Mn.P;]@!"U`@96LQٗ6sh(_=īGuslxZ5kΚ S L>,U 5Ѵ#C3{}A%~ڰ.3 ChvM%:KKܖ5J.?2qJlb 2-wj[5uѱJ<+!uD.zFamox/; eZ4=y,R0M'G6Θxv^8-Ty1"k^ZI瞛O1m606qYم;!-oغYZ/j[?O6 -^ҭ +H5/İ.f(9 L*ބydmm]é՗ݎ=n) ES8K-,w 7\~ _![(y*`zg큢|\/6[nz4@9vȽ,nb>|Gv{_NK) vI~R" Q=CP]:b#;/pFƟ{dHّT<ɷ >ڕeÄ?6~!ԄΐdDqXVzIc7Qg}W}Y)gӷ/xE0Lp723$47s/!kcCXRLmN͟|bb]L?܀}<ɳkuv'uhz*FgNSNKB7SPw z*r7O9_>1R\ˎx8 2b^\n`I |nij3Mnۻ_լʒ7tᜁál>U=OU/' ĺ:eP0ۮX# ^8] +BKW#$9U~=Ir?2lO}k*{ PyYfiT78Ǩlnx &W!ptZoMn[G{Mx1lb Z$HqϿZRmF9$mx @Սy-e}0|33fԿA.\jwhԫP%n՜‡gzz_p|?NbVJ1b+0(GuUDTXq$}OBDD] T_xnl>ם*\=DP cl$y~P?:1% QM1y@X-]}wbkPʯ>`ǺJXVFwm?ㆸߚl`8h"hV& 0G,B>[p(0B? +s. $vنqFgfښ,KHIs ثtR H vX+yB5C:΂)VƲUs4;e<t1"/Ӡoi &Uu-e+n6rҏS<k5)}FE@gcfHjmf70%2 NRG~7񛘜3I KlQS m5EYD0nsS.$T3gJ0C|v>G I2J=f:X l#Mb=K^u P,䎃Pܪûn=&VVz8-RK>N` +W#73l!Y9ZrBR/Ic& j[t2OHJw/ i 5Rzlq)t_T%l!I(XKg,iw?vLzD|Ng\5ZXJG{5futK&:#rn)Q[JͯAHw|gSScĻDݔ^T,54L9 sˠ„1}h`g"|cNZj^5ڐrd5#ǵNB^զA+{AWޟtY/5 HVcO bʷ +'㣿ziP5ZA=Q.iJVЭ; [v&TJCDC7N붥Lơ)6NT{[&<>,a(* +FN5]kiVYh6Pm ǎIpo2_1ݎ˅DS',>5{T/DuƩZ y~&Bfʠqj#u>FQQG!UO6bз͟nOfUF妬㓰ZݯBNl[5+jP≉ \ #$|NKr$=?\n)/|N'H1z6#,=!ۃ3*w(y 0Mdڮ >|dVfywÿ!]8_Z'&UW^2BD6n76QvrH޻ 'ynX'L},' _HBҗ>$qNj>:nY6 ?g~+R+s6qB +wl7Vey +y.y[D V2u۞YmJ~l'}Ќ@ܫ>Gr+s. m``?>eKxUЂQ8%_$쐹:Xq4;+yۜH,+s;Yk_ݽШ=rhNT)6P$MZX.XWO+rB򶏗~!)J>ncB&Y +0EZDH[c9@5Nf4$) 9@J\%k̓C"Z+xGƨ9Lw6`т䰹thzýY︺F u@N.R<=F%}Ӫ{rHc8RI ʒyg!9-?pLPUAՃc[z J䬀/oO襖tLp{(ל \'O ;&"|X5_W3S|9TM:Rζu5YE7uGT˾cANGpkԡD<[X$J(c8YrT +*~Pk&[qHQ!K_\/cLg FzFZL[p|ɘE0Ey9u \Q m2x 9]O *#.TfT23\uN_K_b`C9޶ڗoZS=+-]&9x ,@˖D+ z.+Phl1PG٭2&'ZКcx5m&[!bK@ڐcw:gh4Rc6edb[g!UV19/ @؃zp/.h;k'JWY +KQNḇT$(#>w`y.:KDl ?!g֮jW>Nޱ$%32%YHVA@:]iYh; :Ar,YK>+W>jGs\ qH`7KlDH ^q&s"*G.[ :FuN)cn#aj-UVjT?\dß\Rm6y+^"MJ9b}}$.(SHUIpg(OpdGק9M4|Q߳ټTG_~KAn).Hr+NCͺ[ vgTJ-^] +*Yf$W=Mb@)<IH̬pVʥ|:n]yJK4Pbc+D   R[H w9ٵQlG2,Zl}:K;p'܌'J _0c7b{x]!-6٣c(Pc7>r1$Ωo]EhS`P;Y4#M}vOY)ZmpNgpbj[ރjt@ڨ:RoϮ4 &cE2U +H8يA\B]Cw:1]u-.bYƘFx)iV5x 2Kp]G0m$ ¼,.GD^Pyx8Yv$P;sS\lѷFyVii(~Urk@M"w!0'dGCXl!7-8H AQLrGrB)r_JuOG5הb5 +m'gMJgLM21c>d%xi<ުW`JznkdUwy"Dʳ}UFDC(fs8MF:j2zAmlxģ 5rxH ':' \*Dl +j=&7XX=VPa"F#|tƈ-X`NSG Ȫ4~]H% +r#g? +nܲ 0c1> ^aB2IW"P2.A=1Qg:c,M˱~m~P%Nma{X%P}tԈ:md.'d~en-}u^ }_%vU;UB@3\[ٽj,>Die?ECNz{ۣgYqV>"?ϐGmMQ q d/; bR#G/vADo5oX__sFW@`;ԵӁ5Toη2y*Ozytc+/ ζ!X@ N(ÙcOr +Iy5d; pɯz"f wR86b[KA2ጛYͮ)W%w> DbfPӎq#,J[KEe)%i>'b1g7,ѪV3W[}ӉAVڡ}A3X:,ݮX ~RXx8[H1AF#g#/ ww:N4c =جbƙBS;Rpf0bs qHDf0fk@-8Ǐ/7s5u(w𾆾MkIT|l, J$mMFEb*@%c:CMزШx,Cvh֠AG$M b>i4Z&co *B9`=eM[pv5QUn@qn@Gk=dN^ǰbBqnc0*`?I8)3Mlzf=J2Pt~McmQa0A~i+ tZsN W qCUm. ĒorĴY.^):,!ʍN? c1QQ,{1M&AB kv?8~ +; #pi-B5"t=cFgAPrk6wM3BGV| ^x~]r7޴6*@⽉Pڥn wmΏ6FY 2,&aҧU6£ S灓P ]j͔FsjojƗ\GS׭3K!ku|lطx y]E_\S{&2 B\n1:3L`9.ľZPs2 V*$rF}[ ֔4aeGlteu-:4^,hנa }W~\0T +֔^ +QȺ-J,W9wdE~zsƆ9-0|#ذJz:³G "6$.XY|Ӧ]ˇ+=ZTMm6u]rEVp!CϾ;j|T@ uj9+E =QR0RYӶr)n"&2żuyRbrn~P˜HR2v z9d\N!c+`AzYX͙A5`oJXOxPm^dm|j[K;~0Sq$. C@ 4Ӽܙ.s^ Hn&Lc W ,%B Hp 6,kTZ來-/%vT%_9 q_BS!İ@ 7׍<-;śx_-*0 Ut[`SZ!ŃeUY1₝strz%'|K2Hصkaw(Z#l!̲D'@/-/7Nw]!e2n(]l^ sYd-q x^D ":#'+R+Vx_1! +7wF N9pg*Vq1X6엞F3[SK4RL.!mL'tAVx>DhcD}h_ #՗[[tn+dž9v۹c{R\ۘ3UwUڄSᢖ![n#gb.؟? as=^bZ K/=W[򟗡NɄu]V@(>}<}pVV}slvT + "QߦS`q4c8X{&7TqwHy\ @*vʝ-Q.DԪf{-r(c0y7,rƵ{S޲6P(ʎmG/:7NP fs>5XI_g@'==oT﷒u"P2Pf] ԯv_2lt.#Sڣh_D闊K?ftNL>j?'Z0ݳ55.&O,0ՉȰ8"qƭHp _z +3MIhD^[6?P +:9:?> #WOrʒ,2 +zDLDS`EQ$b'چ7NȗBF1hB01օ^y"lڈT/)csHή8 +s*%F9$f0ZT+N3[By6оxװB郦#^9 q SI$]3O3vY=7UKa!D`%D6 T3gC{ŇM{˕z\ 窩&. ?/7rMmu(tluWGsjZo>_HjÒ+\S%@7>rFY@ 厫*QP}ՏRbJʮ8Yk.p'p}cWb>J0MacNedt\)z&|KLmɌ,ܩJg!5F'} ńFnNHcdcXf;xyyoN" U$a"0BEgIVK@gՆ0&[8<xfo t)P% :N/brt.Ԁz0XmZ*"A@\{ݺUFiHG,,]hG6k_mڬ'-5yz4tE~@<eD(KXl<)K/G|RY.[t[Jkyky7/Fh]h^ݑ_h%3sI >D<#j#Y^S⟳T+tF&Җl_{]*`MTLUcG7uPQb{9ԖVR\kڨPd^mQ|[OEI<-/>RPߡ-WF_q%c%Jݷ!D%xߪ2]6_w$8>biU.L"V#u5􏽶>wRq3S)y"+W[]!fG|[xcjnFms,R"ĔNU +,gLPMMƄ# +wrnHG=MJ*>2}nwbEѺTALY*ko^"]}[#a]sP[լem~+4'i ֱfAR+^r0q~1MCVpyLk٧_|dJZo)[4uR:vɓ6YDve&rh'`(Ç=[]V7H^}\? hÚn)iS4(pV Fea/)]LI+hrxٗqgZi!12 rq!ԭK5Єp%`44AIM˫˹ fn+\!ܤLJQIޘI1d#?iT:{89qY6][7L`ëg0yJYO@Xʽ%xq]tӕn6L&*K樌빂v=D&q -욛MZ$ V+oϺ5FJVF6-CP}9A"լ%]6fdn[*[} +<\okD(juOhu-p.n` )DDS.Qa^.0k *p2 !jgb?r]unAr )h +:="[ՖXŲnN$@wFBxvX s vIxâfY2ɗ6IF0gY)mo0P~C$ i8bD!-e|vByX[ȾQķ| +qnzs*s%I'X0V +v**őgy05: +lF(0ލOF#(@ 4shB&]N T`JVIP.Eğ ٛҔ~ys{KMrzu&sW[?W +8EkmX%V#[L͕{o9)53L, 6'Q89_PoyԄu::{}CEyoPI;$U !36gjpX%ޞ PNs@W:\3D麌Cje! +Wȭ-ޓ,zl^za+W?H Ɓ؊t51OpfVXf94~[Tڗo;h'iJ52`_4Dk׍J¨Ÿ+K4|;n|`G[lЂńo +{ЪvC{¦|FK(4#c.Gb^^/FRNrFut-TC1!o,11fJJRXvx7HKaS-OsyxLkѩ|b?~Ϝŕe U !wf/ 0aS9mhğ!dnƬ<׈9e~T_`2^ XrTʷ[﯉ft”Hq~^T +"tI6돐5ߡa+1CoOt?. -C!Z?fvE@};F#Gc*yp-*΍3䙧w)iU2c+Np3`(2[*S O˜X~I[rS3#J<-eZN+N4  ooaO:Qu7VϓoՆf(9yx3U C8.O38NU3Ukˢ+Xܝn&!{>Kv)m=/fnf :a5;Xb]7{IESȷJ4O @ ,35}Mjhel[3+ވWu*) u;& vZ(AC}3uXFgZpYٟcB "LuE\wOUj(zqcHyZNR90T ru +VJ,> W)w9#8.a|3Ҟkou¶yP`9x({'t˄f"/d謗#ڽYZ4QD*gx_ )F"\2[irJ_֔@1 4FAP\{@t|*suli5պf¼ Wpp? >8UX,y6 +%',ECZH0a@h5Q{!sΩYaB3[.;BDٲ1d&\uڜj.ϗg/Nf$Y;7DP= +#tA_[p9a#* !0|T2SbQ^)Lr/mğ$SEdՔj9.*~< ԡHE ;xgx#Xy +"l;evkJpO>MWNg Og睾5e¸${"<_70/)v;rN;M2+$^R/eU TѰ8Eaj$뱷^!X(Ʋ.r)ܟƉU떥|ƻI͐/,W+ eh2W/9D_E惻 rJ4H³е~c }p<nZh}zC=op ]܀oXʧBB'e1SS$]^go:%4Fl<^q${޾zt&F#,]~+q> _ 8ۻ\sSuibJs[si&d!iHi&2`qDulLG1T4@,c ZնM_-[pP\ +Ew|)vZ"FH0I$<4nXf֬^ϱlO‰pʖƨ^ ҽ[,*kvp(ukox`y:1&ڧf.GMwjy9:1 \\gg⫝kKLK[ըlF9.Mja)(׳&/?>v] ZMԾO,m:n^F!dϯ޳BBqkLjTBTj M7}DbnC^Jgȶhpe*dr]]ɒSxI;EYӼĘpo\l?t) e'vB=SԢ|] +' +-o& +꽴{P@;F GpuB>klRmFՓA"LZÓ"@փ~!KrC}YaK'[oi *cMg `EJO +5FNb~%_`[f\ V' B} +©n]`MeS{(R!%IÚZ+$l&zv}Nh6^_^>WUճ@G WeJ`Mxgƭ&8d#)x7)obI-h^D;ΑgE=z8|{$[*D;AiaزQonC̹"!pL8N$B G p6Me l2>~Ht +U>c7Nnʀz b +Ky%@ V 4lľwYKBCFbշ9~k<6"_d0Uփs J>/s,_\q87vEջye#߹!<9x]"(2fjY)AB/JےQ\om4|-2 DYqH/ v1xTFauE p@Z"rIQ}l->{"8~=w 6J&fm$~\I*SĚ[֪ARswR@= c3(0wқ+t@ϱJ΍)yi.T-Q\?.n75Q:M9o2p JɩYe-~r)$)Wzv6%:3!5&UϮz/v!ȴNuBJ 0H75ML Nt՜ʯ6eˎ"Eé.~٠G +520 9 L=]cWR$)o_B$?.ă9o0;5GG2?N>[!ݮҏەhdaު~%Z{ -hڜ<>p3z k;)0/ꄾJaENLS!H nn sFc*{7AЮo"E&Ⱥhbs̃y&o)vODD֢&D<aef&Oi~xEb X,)֥Gʥ&I>:g ߏ]J:vUc])Iˆ i$ qa\)*Gp)}SB'\ilF$:C𓚢^[]URۊce~E+ؒ\r&qEVm2ȝt1bmh4?G}8gfv0Ϋ\N#&M<7lx (i,iHR#h_S9ё9eg$ +c$? _>xh iH> P9yC9~Ŭprp:BO?Qq:mVߤm +jx) ¢T3i^`GA/|P6j b.9Emys#|Q~bmӚBx W+@Gn,Җh\U閤"xɄwcIr ڵ5gok_uG:"z4K6C=Zh7q[>FƋL#-w`Ta蘜@lbih| c3J;jYyv^%_CIk1xXلOae-wDM[1Z)g-`i$1O ^.rB@~qJvVYq8%P1~@+}mďN?9~cVہJơfW{bc.ۚ0?`v'KPRd[JLˮ2입Fn`ةemVvuM(WN0TCQV;S5 +J Ȉ_iOWwdXݫصz Y=_}Iזo 9w-1x6avqN2rK&IA-w $~;#RJ]Ie3˙6xbe]e}Ur];׾-6n:PE3$owƑtz`l1'zqA)FٷQU?>(P<٬}D0aS@QXb3J▾,kX/}>XgZ_ t[շ)W}MfgzgAњ(gUt/\'`j/霸,0p<"2&+GWH[nf ?-7H)E=h +9`uĜO>e A+VMTjO^X@ kL)I\L*4c̣̐"~QdcS0Қ9bTopm DM GaZ@fC#lE1n,F.zt"ƙ2)U1r~smmjˈS#u7֬ݘN{D1rU:u`9>qetZd fTim + 5RRU5#џq˧la' &1W+9:g5-7&@|}lH >!N:a#v|+lHƩmn}Pb?qg`oD,Θo`H|$~mw+҉p\fpb54ȰB{um%HHFSÇ:@7, a=jVԜV(M:>wˣ{QBދY>A xȟ鰇AC8 ~'c6wts71GB#?uI(ǠE}ɰ~ +Er1)\9RE{zqcfTC.4U=|Jpԑ> $z%BwS]+aSZimڋcX!iO*o, :Y* +[͹qbdᥲGҥґw<0Ds AESAKWu#`z%ؑþ}<@{Z #"DQkh0|4S_z?ri=@JiNp +Sw +VKCN*w7BTbS*d>p8HDLP2&0BRd/@:4NmiV[C4VfDU&)a9P"V^M@а &Us0RP jd +9wZLݟ +`7Ilw5Z &sg@!~wdo,+d$O ?jh#`Ѵ[i]$,Fylw/J/kٱr+é]hnBܘбc +N]e +3@]*;yR`!GpDLƚ3k.=oEbJ X/GJE^Tin@]9lv쐍',Q KoV=EXsJGfXJia.._,"+<zLe{j5QM2OCikr3ચ2ؖ&(P[z !G' Q۲g&{)+0fě{gB6(+<kĝ'9$Qg(aVF({y[]~qcdeON )<p.Pav<ce^zY~ ".z8F[f#WiKpYǼF)VsZ4?R6=_cqТLuypXPko8 f직:*,mo#F=?B\=)np-JM=1oyA@aGfHs"MXGIT'xro%U|:^b5qp杗I T-I8c:p\2!: `5c9@7 ɵi@ƒ,Q>ߔzm|)XQda7|\r'VzOq$鬧7)a(+=#cZ ȐP 2<<`Iu6#\t +Hi> gu0Kadu+GyI- IGf"ۀg]XYhU ֙`&@wpQĜGHg#܀Um$Hl(< $ 2cD>h< <+:װug]## trʥ +/pI8-N"jdSȔe? kZ2?5ˬxs[(җP ǚJY>Ya"ސQ埕Z R+ fK0L؊7|{e̢ MKιI_/w ?[.C<R4>QN`1!!߇& Ì.@k2IW#Z'Qu=d+B;ޢzcSYбhX$^/^==d{c~D:rFBI+ppݖ*Y0-h?aw w%KP@a=\/Wސ$x<]z"{ I_) +|$>|eloIvVMӯ+iӸ'ީ-2 @6q=!~#;Y<),vO 6  f${-Pv \wH^CZX*?e8 +CH{jDTfk4e*vis¸ͭaɣu+?9Ͻ.2HY*g<Tѝʥqt؊{#,2k{I8OBxx3V^vٔH]]'TNm'h,wb +kCu>!r|ѻCi-IJMyKPd>,>_!I{G2tx QV?6a#Wq!֕]8Ȟ7{3ЛRXKaxYf.- ;))t*y4>stream +g] WfYD0 ^rH[?Qح#qSWE>Hh@U+$i5=\uJ][БG%![0F2ڽfn!Yw݀TKDfrFppށ\iYדSw_,5G Bys3rI _Ia璵4_fϨl!:YU6X)rn)fi(΂w02ۏ8ݥ!f2S+rS&Є  ZtDwAɄVnhRROXR֫M4~}=x싻WYШh>Ǡ)4~ BmL g͞ C~ĴKBxStq[ѭv@K 3Dd=D,b, (pK.NU1s{oPd ,!ɒ'Shë\އ+ƻ_^Ǒ^T%FWH%"/OJ %̕4 +{oS{`TCPDpr*\]miYYOd*n[t?g\UeK\Ml}7}3tOwbeMS҅l'L̑p2!ȞG8 X1x53B>F}< +r>-À$}8EQP{1Ac#m{+>UFK4PB$bԤP+AݚǤ~՞2ۅc|t&% Wo>Dav5g\aY/ٗ[6-e!Xz`E^V4cRner*{3⹸.6ݖhRCm%ANH ZuMkY,[ٔ5_& +u:G}~saಀG\9[o E܃ȿSgqpB}>oӆ4f=alBzq {}=ʐW7>!"+]YZṏdUӘ +sq4>a'9JBV ̄QLj_o&p4 +="wc32pJcyOh0^k(ʃ?.Eκ{@uWaIBK;J 16("vc` ajZc~mM\2~+$);keBEO|H-Yg̡>QˠLE\g(aLK܄~J":TO ^jV.[W3KW"_-$x#j䝞mo[2acRP:K=q/X+.=Ě?-)oZU%'蕼,CV/!# +1*&.WbHT)zZOZ%_,D74(SY9͊b:/oNnr?) $2}'PD6>uXGm]8VL{Ɣۅq7XF,y;+ּ9 QQ +e3*>-y~I+1FxfҠZU7#}'#_|gqrH%IkrX*G>Y3KU¸Sf6{TؖmY8{4'#J}.h!KSh(^JWʽ2=ҡC]:6dȖ! 8ٯ=Px9!T9b榑N\ƈPL^̴b_Լ0&~e5JzLB|,e+'\O &!7?i#8\*>R~\vuIFf%h@bg:NCp>,aM@H@zA^0o|ו)<2a;?KS?lcL A{{=A7tY侌HQD4fG|E`$,t=P &52I/u[ϼ4<+ox~fQt B.C菆jNoczb> +VY +鐴1=]uK՝7a2p7߈9Q/o>Hs50>}lxsL*wò]+E*-=?T&GLp6 z\ YYi1&ש_ 5mgFZ6K4+ psSpb~ ZKqNW% C +3E M{P7ҡTx]Ͱoo|-T;[:%Yw *Xz'mvoÆM)gp`Į؅Љn_mI*m$ݠ ~`ι)!HO4ovҚ3KgYviW0#C'6ԧ _BUN+D~2uKĸg&Y\u:`;,8 ISJUciZ9+I [K hzEuikQP^@l"dVr;ӑ y^1@񌨧Du \qQXzsJ %!CW/Cۤn]K>QUڻgօ1 f:f6%J Ѝ.cy^vc똇j/ʨ{._7:7l޸Re3ߣAУ7}[BgFy"26wV0iѼ6KԎA$p!H'aQFBi`x!;ǥVO)QP*#zeD!UeJ@cG;ZLOPD07W.ݻx7@>hU<|υW'sb)_XHXh]G:@I<_xDU6u925~vUeل鴹^)oѶE6Boy)69mDVAO&|D͝!`iGdP:PYbiZJ/A !pϹ_ Աڕ!B$SF"W"KOkJ~VR 1Jmr7Ep1e!L5q]-&Ϯ-&W +SDg33#MZK#dn1ul\M>ŭ31d/gGx;c+ Y||}iyǯ^ +3ke |۝l[C lU%7+&Ȕ/qitʗ2k&%sܙ!e7 D]q\DEAt2ZU>Dw) tW-lRTP`jV^猕KcPS[8 ӘUºCf(Xy5~XM+FZѬ c#[Fu1[i(밃jt 8as3Ce)uC /ÛԚ/[KBBt']í(dq2-:sA145 b/IumꕥRF bn,~!9[̗|3f"9Z:\> .~/6-^R`Jf"ΔiלQlkl= =__yM`tk~Kީ0t|[VvwkNr%DVbi\ǗqeiHSYl,wNun T}fOk]+qG绡5#K ǖ'?_u4t=&,mY}LbyyyNd`.3A+Fb\X/C&t{s^.޶~'yu<ʹ܎(,rsꍂ= @X!f<j~ڛ&x3$I{-<洂Nˎ+)y%3:``-Jfv` +h/~Iv\I H+)#/{U +in/_:`;EF䋱pF*o2E? c15p=J[V +T )H0ŀȩ@ڴyYała\j1׺ r"<`E0> +-:5?{5BJ]P42Z㓠l5vuJfȂA7WAD%FCRhvYūm7P&Dy%L|6gp)Ox.tnW/'Lr`xձ k,ýres?E/= -uLtN>fwKթCz ϐcϢS8/peCn_K۟0h*gXy.31ߚ@A@[QϷ')tn$N$?8W< ]f!I Cяa1 :HХ(zy]%;ymk%Bbٓ/&9g$ yH9ygdhYZzMM ;b6Ҫ&y8]՞RW|y ҫ@{FGBXXɨg;%u[YQԸ ,(}Vbߵ1$I/UEn,HZ.ʉࢊoBj#v*+Ae2!R鳊>͞if[M kVFUv?Pc97N'8/M'&>8B47G wS /ܒ]Hs>׆A b? ?i~Qi܉m¢uzS'VQ?v4Iպl3X濌:.6C(6{6y;*&SiIv9K.E=2N.뵴z!%Ra4ޟ>1$Xp2hwx+P:}N3;)>\+}Mξs'ZҊt> |Agq Oafц@#ia'VA16``1,Sr gGȺ6 k(z*=+{ +DnsE6&XjTnwie{hoܞ5mJRBbY- [_ +5ROD)@'0JuޢۯVZ)k,C'NGa2L8޿d&t!ڞGřP]vD*sh-Ŋ1;{O޵D!]P_HA/&'h#%jE{g]X] cbs{} +N3=?Ma~ʒ$e %;H@w7puT9 -gLg):ee:B੝D΋&YaY'k>ZPvh؉Gʃ̝w/%qZSoº +G(EkE["dY^[ؿ2{0_ Z 2J]ݡB>pB`hb2!56=Qjbfܧ;OB(킾9B;Kp{U@ QLQ\ k_O*k-Ҫ?xuRP$OMB55.0f(uc6`#i53}̤Sƺ]( qyA T+ +#P%L g촛-0zeySG=pK=N;dbڼ'Q/JGHeK{Ji"(2)zIǥu*jccYR֤9\E*ilBCb(o_uG\Xvp0vbyr/$$׿') 8{,i]=X[kLPd{'<"͑``*xYG`O)lىM, &+HR[ _Y0b!zzJ`l ^BE'm /w_^>qҕHLj+!yiZi-]H!U4 ،tq\wUi-A5ܠuZֺ'ІIǖcj!E^WJmLaN){Ȼ3 D(*q(6ؘ;GkY2pwƔOgB~`'}:]pTve;5˭,nĭ6끩? h(9[zFor_Kw(*㤮6mdbK=k$34}0<:f@}yj+S_n  5$(5lN󝑻כd0@ ú [G?BN1z!_ԍϣ +q2MXX|͸уJ!NKu,D7lM$")F5TڸOF *ܭ배3kZrdG'6?ŵ*9RT)mD`~,SY= !l㣳Ƌ7aƞ=p z/ࢍ }&ƬQCmi {wsINfS򐅴.P荊Yڒɲc=]g]y-_7[ T'D{"JAeKJ Ŝ,"ri9%HW6z`Vۄ"{r[o!k: uh|q9\HT:Ծ0ȳMн@-W|&?B>P,~H:7nMmw&]R:1hD6Pg}X`^o}_kl Ͼ~$wT]3mVo吩0OF& Z"n3+w0sU{% ÷9*C5m~gQ`_~/t*rǵ ikDd=p>bOUY;>^ +SB߾w-5.S|=|^Í3u䝓Zg>![5gReUfMLw'(E%Uh OD!^=]`7]ocqpYZ%$g4ͯw+)364rq,\X ӎC-6UJ)*hK&e3F | .gp>&Kvӈj+mW4 v}-g] p7Ѯa24(~) f>LKY杊z%Uf[UF}߳.!ؒ,*d rub!)b1\<97GV\HSP:k'j{55%#Drj b-ݠy8]k@tbCb**(^MDiG1 ЄVDrD3&b)_3R/Uw6؝Ul/`鵎$Ĕ0=fƃHZ3YYp븯ׄf4ZNv p@LKj/,hCb"ƴstBq 1umJ|3aSYD}z͏|~O汀?{pm18$:̰,=?йuS:7U̡.vuUp1Q +T>'",S(bLJӽWFwbM(nE|dž\|g,iq-;( +~p{MnW*ZFԴp%6=.I+>45cut7A#-xr8!6BX7̫[smcALŅ|l>q|l}#Ot>O(GNoYsN6COlElgf}kO4l9F4rm!q4{}oHәxrw|Q2'X4fڼ!k M'sqaart olƙ"o#b}IVTωU@_`†ߞ<?i; ~i/EMN4ߌstU^ֶ~ZSi$T*YXk:Вg6]q_;NEMNt3s@Gwsmt`Kl[Hl:eҫN'f6iN 할#ƖI9UW;z+y EDpV6lԬlwaEm1gF}zzέ.(,{_uL{#}H_a.oɒksR')U!|z/@4Y(|*LCNAڣǷà&Ah+ϼ0|_UIr> Wq!6^hj;Ewyr0lce (~WNH-GM/CA\7c{TWC﫰oczqEGJ*ulXn7c^)0ڂ)\%)Jɺ'zh>&8f +#fG'C*(7<>3Oyk(JB]ףu͝wzD^ջ +U]5άWS@1(S{oݶCxoO*K˸Kh#Q%! =v[V:eO:$qo-Dز ?f-0|2%qŋD0Mqٰ!L<1w>guFF 0Y麹tG;ٌRKmk 1,ޔR#ԙU2~ ̿_:.(N?@/APܤ:瑠s7As򈊨XxoL[^egmt$hP$keQ/0etz&"*[#PG:JUSm9WւJdD`BA?E +3W%#eiډ)cĔ*6񗟇 + 0էNfV$Eq&qyu0T}/u⋵Ĺ>SIo?d|0ewV먹~6fZ![A(pi^o.vx@4V&¤i2uJKZARr0=)D gq9w^ s$>(6r߰jE" : ` dP&9NP"9R`]ղ,h5qkzى! *%< M+Ĥ*ۘCټ09 !gjt.W,8\t|uSGۈVE.rug\u@v?' Β&]10y:C~HY6RN{-c0wtȶ򐟬z+nW1xk?;SFۑ֍) <;Q +v)RWCk5Hԁ|Sfjˠob"DբPq$<btWPhPk8Ϗ`UGsR/h|2:,`-Kܺ"z̉GX+/B>$fܫ>FZZ]J>)[OF@݄u:Α:lPAMh~Y˙Šf25$v5|cǗ귑E>G?kX!hsHPur8?CJ ty/ $S#.W9AoU_\b2[ysIiEB兂PY$'.ܯǒYk*3v|謥dKߐC}+]ɧ,>\+ybD[?"STIВYהh3igA g`gX"l+j3㨨]OKmݺ5Adw74n$p"a/lFe]95d\,Ա݋;Mkd%]G_'; ł+C+ +3ጇq)1/͑@{RQTI1(̣( PBEpe2m.Sֱ]Rxe!ї r HsD,}!&m=Um|NL/̴UҜ^VpCB]׋0= ISU"?"# "57@J0kj?DM.e'ΜGm {+NѢ]*ovwo/2)^N^AʘC'.67 |Կ$oMTK{:45:bM-Iӭ_jedS߲Nt׭vHV 86j4x,?݅޽HYFf?B́aEo9;eX?Ѧohxf`9#/;7!7U$[ܢ#ۻ's^(촥12s%BM d8y RI슅t+e_ys[/lPPʎA.ݡ7YUtXw lHz^F;1_;71nWLb}D$5i$9t@rQ +XՔ.92{wX ++;`laԽS1!&oaО5銪ռAbL D72k0oVAѣ5Y#g"rϢ-}_8TYI%AJ #_Mc )= lic8!RYAց@Isx=~ *Jd`V M-<tAG#+ gw{&oHn/e׵?sG>.AԝB38F G vDqAv![0?cڧӽHۉǑHͿlIkE>@ζ; 7NW =M䩄f:-~v1tl95gĖ_eנ+ADtPaoVs&J}.d4,j|õ u+26^f9۴&yIο4KX*$u2sO.ǩ$=@ &ݠe5(Ц/wFHE0^fFI\l=vԺ{<0a4c\9!\Lba +7 Ջs¤ūEOC&#Ysv?NQ{nq68Gc@N$2gzdѵ /{2$E]j ",<C<6'M{z?Kk2h=NapI`pܿ Uu8(uE!XnRJt@|[w[Gq-mӧI㈯o"e>IM^jmUFfnx3o2tG_i_TUUe7۠P'9g7hdc YB0ױ= j껼MWٶid>o;;<~h6P *!oDia[;0+Z mm$(Ib?OJ6lf˅n%7K`ݱyWQxoձp1MuSp:UT }۠5k?#uaQBhD"r¨=\/ܤ@5>^CfVQbk{VW PoQ@B ԨIXOł:[P-92j[=A'NogW¯–=V!u>$0o׼ίxF^!a 9ɽ!}iReP +j&y[& HmLx޺bvce+!@Q!͊4[繊'^nB_ :V`/l> >i1~LI fPoג4 +XP3n=vI67ZU'e!ZZɛH,wK;1!^* ++ʐ ^ +Z]ۭ@?"WƵv1Cr&7dCN M~xEV߁q+< Fu݌&~A_r &ieqZO-mO[^2Sj CR 8U(ov< `o/L sG3Fv [euޞ WP@pilu3pQƕJ_rCo;T)3yCn@f#h+j|^HZQa9-@Zҙ, 8Nؾ-+pИF{pze =;p{K0* `k3Fq,7ZE 0$=4c>p3o>a*zx2_ >|Rۯ +a)w}FrY#2}1㓋ev!!pu*BCV5$O^Bm *xZI]b,Ljx~MF ڪgh e+ڊV`d$#w]re"X][yI[1<$E}vO~ᔔa2Q&s!ߌf×p1}"]^p&%M؅֠ʖ{2yLJ-2YZb; rZ5$˔C&YYh18=$ +i ny2XƇp#?kUzZ,L -Iҳoma[_RffRIdL,,ũ5u'J#p`dظC"wAWO;m+X}TW龖mE)N0}\9qBp2.cςO&EQ+D8 +gK7! tx%C+T|iOÝɱ\H<]і0zjCl|2H+aܟpR뾗fWIDJ؄[4'_5 궽CnIsBu 2 jSJ,Qݜz3XP^RY5XfCXpyْ~?!=F7l +(_/FkZz^," 5r] ȋ'IjQ=_U+1=T1+\dkp/J[ܘG*DDJR]҈zUnD0k%z/ė&Z(U@d3ǻ@FSD]B,56~f,h5'd`317H5yX&x^1ߙ=qEe?ַON8W GD'DOV.{VR|cxﹹiq:%{E|=|DT @"tG6v|o~4ߕ4+Ѷ]xD>peVYv56*<đoӂNr6%ףW Xz:pp8m:h] LƋ}2Iw%kC 꽆Ϩb˚/ :hp0}K(3Y8Ri[~)ZUŧz]c\.ƌA4K;L#1y8t"$@z:b=u5b[+Qtu 3ʹyO1\SZ!{5D+U`{ֺݢ +\ 7K*;!m`Uq܌ZAݵIE ؙ`(pm$:TPTa?#cNlFknݛѾOw}ި8_?I $lbCbC0DQx7H"J7yr[w"N E0S]p6ݐ\[6LO5',]B6bWVY$bypy'/"k쒋Lb bSޙHn*sf^IYT+擊'@zӘn q(CCMn'NycwC:^ʞ7GR9K,NٹO["gEXwu%+@5?ddKץi&WF-=TcUHrǬCBwa'w;N]9A?IPe|wˤ2"ȼ"Ls4 JFxHF%m@L_ +vJeQh)&x^v!&`i?N_D2vae %҅}p|bxlh<:oCnYq KwS3,\yNVh`*aad0^ʷ~&/$Yy($?gQNR/H<]kV\ C>X[Rpڂ17%0?R-)Z~6ZR. .qAGGyn_h0'^GW YT3D~hI2_W'4.;ۤ0 Ԝdk [YR6pc{H0wl5u'A$SwCu}7CBqD@>}uvV}@xp+yaX @8R,ǭO~2Dx2 %0{>kDL#գ(|l]l$ʹk-'w 2h+ B27~|ԓlF hOj 6KMRz)z|=N/[LXGG9/H'X%AS1#Cȑ\Cc:xX-Yz]P0܁ *[nBg0S }|:Hu 3U7$eM2Frț7(auοFb +c8"|Ē(zK!MOǿEq#8٨|u&^9'_loR^U zRsjݑW0rvNG~ֆ/b}$odם(z ^f,QVKٖ%FHZ/: 3e{j7y::Nc=[ߤp*%Dfag`pٖMjwb}_9Ƶ VM9 /)O]wNT4j6`MEiȞH| UWVh*ɩ0qOu_LtxߥZA#;I:5ӺDK9(jbr^uyӲZŸ=M}}nWM݄԰v +,qӸmn|lq4OLy`]2d_ZARcmInnO4mPL ;ʾX:`Wu. 7od%K[$9kik?v_ C5a%.'1 "љ8۾߯pP瑿aѽL O`Hw)*1筥qX2\Ld!y/R-Q*wv ԻmZ[$Xnv89ho#rty&.!},M'IΌ͏PL)+H@%ZKNffE׷m;4,fĿd-R]|Li4 b +J¤?޺_r+̩14hik,Q+@RfFf!,*E+тg|(*V.7J_ڎCtu@n8wQIK0+Ԅ!ո/ ?kR S,br}D1ޛַJR*9|Kڇ2U +CZW&ut|*F;CivEU4V@\9dљ^3?$j8bI%g6炆efPm5sc ϋE[6ѱ,> `s\CQK)a +W^KY7Cot 0q* ˭-\G LNB&cz?՜n>>R9iQ>d'&608쌻8FmJ=iHC4-P]p&|- /?\{RCƂ5r>x>JqcSv76No Hmfr?;w2Wh$iQ]fL +@$y+ +$j@`ᲢhP]'6 PK3<^s7VZT'-ɆЧ6%&P"Pھك( *~SM;\G{J9I@%a8ouVyZqn'~8Y Q$ѽ% +2ycv +tѯSZ$FhiUKw]F@9,O4@ӨI1v\O2fpIrJ8E|r<].+/Ȯ -k=R`"\;gr,Χ#uuȯ n[=sbY)w;@`m+0k3 ~U!,zco>dV2+G<=9)їθbTm`&rߩVͮ: +alۀ-#nW>TEzpZQ}b>`T9iRet:ިMdl.QHtB?`[vS\pc[-c;!a5}dl;`HIb$]k`k\I.k3\jQNhS߁Tei>VlԭWe:b<*\X4,]QLjJEeFAׇNڃ,$ouAWuqmqb觪-UyMtt8)YٰdB1FCƦn Z]Q'B2:^Ht,ũIaEeKAVG[c&f"F' N*=͛}_*^P0v'r=X?F$-dVC /eRL8u u'?A-ކH/KHNHuW;IQ]OS'RxD 2{}ψotP$l]_1A4&1Zy {y"oh2$ؿX#r%fc"2}ϻ6YWlᴔ[7B6 Hh)54(p2F2K3\'>(w2s\z$vn[B׬/{@!?ː-MӭbHbH$.piWKENj2QՆxruD2O#(kN/u^jIxjYJ7*d%]|ٔBg22^"㰁 ҋqNc?;K%u rj.~|*MƈTeڤdoɟ9v3Q:tHzlycO.dW=hELlg.:);.:X-NoLf?] +(Bȇ +1e19dxnDf;:nmkY ^؃#bM#׮,;~^ߦX5o}ޅgU\v1tL] #5@_%A"n`o׬S䪫P.V)rH!g)H~jaA_!ٿ;92AnSY LD:rR?H` y%6TlHU;< ǹ+&Obϙn`iig30[;̨(c_2vfAdNV ]=IB/F07ŀ[Mtl՛=^P5\Uˆ:fw(wb/*fvTAC3/Ut nEAB*L$$-|4ę +f%2uZ|hX\#7?}[SU:Q@YzHxxAF+g@Z;y.kfD$P5DH9tXFS \AbD쿘nw%zk=lV:B0})^v!A ݱzxwFJɹh2yW"5ѹaۼ[uX|SuJRTP2⤰{>`"V`؉F[9{pFv}-#&T ̟;ѐQE#?1wj9/>O\=} tMfccPNT4]\݅/ݿþKInLK3\,& N5Q6trat)X[$ٙPik O7m ?(.ݴ?D~&|DЀkg:hxO!G)^ޫKA)cϣZ PiCF1q Y QƒK?ျ=f SDHfn_+8Ɍ5|'㣨 +9@&CCFb2}&_ =n#zkrwΤpV`2wGxr/ =BygM՝he7y-yGRtpy__`46l< ֎*Ƃ-E0 1"0~_YgS]ݥɈaO! Q 败0~xv䎌$)n-PNDL j uABHحX"HwܖʴEza|V7EX<]Z 8fw6̣nT +V)xb共cdmM˖+BڨLl7^xv"F.1{rqdĘ'3W ZYQ$9C6n^n`kHkƶ?- +.F6ݎB/&6آMH; w,nB ^͢č1v{u+Xٍm̸S9V\%IZ]dli"7R*O%Hv@"gZzQk{:N\Lku?3?}\$!%n>a.\֘77xR4`Q9JTzL6R3+P_(hP9Dh`a56]k?Fς +3ݯ n(= sٿ r8עsu&]p=yٕ!H SsC0D2$u7OkH?TCW84?D{Z*4Xs(:ՆE,3z5FQ/'mrpIfVcUtmp"cv!.#i,5<-(+EKC"\`JC* h/"uy5eFg%Kf}2P?S f_O̴aV7b>g)hy]u`"i*@q%{%~Rmd֩8|Z b{2 3LM>! @xANcxP{11;D ðۉp^7bw?n7|)&}A=|JZHJ,^{_Ժ#Hv1ѩW[Ҙ+_]VTf!cF +X碼وmO0>ͰbC 'bJh&|re&fɸdqR?D!,𲢗`YbxЫ `+aWw1w Z$MA'ԙn… ҹbS y袁t@[(ؑ]eȩ*Ø_9b`+}N]`+Gt2@7 D P4 K;,ͥxfrd b!wFd$Q, +P伦NFk|╴l Z6BM/B|"#7& *W7PZ&+}wӛ}C9pAYbW$@qFrޘԷie%O;TqezVQ b_$"Dq V\bZG=y35`=T7í[į*pF j,u5 P=j(Ʊ5>0 Ek̕.awm {0n!SU/HPZu+V[/tƢgwш@HkCpN0 2F}NKjs`ÇV ˁf>`RgmY)oMZkN~fZz( $"LEZw}K`KppQ`uwVLL6KK7h?a@xu65 - TnV,<[¥.;FoI4|%n2/:-n%ܜr_~S?pDs G_?;y_YyC6FaB8&iK {Dd|/b^2M} 8h+PoNߔIx R^$(4?ߨISV<<<#Ig[ ҇2TgԺ5{MnV141ǟp<ţ$7A,=ef+l6W;'=HȾ^9&u ^T ,(G +n-wt[y ., AnWpCc|Ks;sOscƼ] $ +6#;eg((\2<`Fmlſ,[>:x#-8@ńn\sv^> +(IbVz}CO'ERMq IHtwL?"%rxِtzyaD 3z=[46=, e:޾|xWtO+asXrԃS^PAO+/bXˇ9.t_Rp +mV١KCE9d L"VeqLJJ#O&|$97ҥ|@W-ys e= +[`U%ֱ縃R^F[b2 +ŷWGȤ>vcF魧E;y +7S@WREWGX V7ן DBIFY;JlmykxZؔu&FHqĺaڀCg=O/de'F xL;|EYze:ļ ҶApFÎbzTeA~Nh!JbQ]c3f$FD| K+jy'kYے"`쮐]GN7F8NöJ' `]+&h_pn]ieB3a9r/\'͏|55}7U'7]!?S6; _x&I WCi9c\sYkJh"D߈97/^|?7JhM7NH ̄Ac |)~_330`lQ6ۅ gQX;k@aU^zW +K"Y$ywvY9^ +* +PvTnk>~ir?ĩ@Sd}$PTKf]~P`ך{~# ^<%dޥV[ټx{ɓikľAߍJay>^1Au[ {hz^Fb"~QYa;R왌ښ]U|F18ֈdyWt(Y#A?$s|YrcDe.-iu ;&X?6,DGU)dzoq #=ʁe'tɌV PLsA}DK믗9NdYX@u_FJL{kV|g/!a/-bY1mtGA t9. 9[ҰWQED?}YLY yhTů܇Z(Ѝ>ʮn_T'SaT0xmL3#Wlߖ,BWUyW(r{ h%lO )2swU2 A]{AVR3&tBStN^9uR2V}u1iLjKn@!UV|Z^~ZIIoѴ +ݝ/ƨ &2Ԅד^~PxU T'$8>9x3r;}%C#9QY ^7w(C)2[H ěaY1ވJИ0{{nj%gdC%Ӑ$W?bCmVVGX5'/BoKA,3Csg:t +<^oM +_Vg>Ԛpe|tyHm Jjr;q(ێ ([خLrhņ,|+-;k< +eP?FHIcѵ6Ռm45g>BLm?jƭH1Xgv +˦Ldm1h>4%a?+ߙfQL*cmr#O},yRKkCnPdn.Cڕ:w*8gbn6;Y'Oh$ H?:{ 3娒T ]M +y쉌tCEl2 +Xˁ|#G$ b| 0h~C&IPs H>E.UMv?Xh O7ed+r0C}42$DIE6 +JO|og{Gz]TnCNԈo:pg?ī;HJ9n{J:QO8T +YkCs?pٛ} +endstream endobj 8598 0 obj<>stream +Lrx|*TepjKl(zz3rv`NVC+ͻ )p}J>Qo3*[Eᐢ}z"Ե;C6̠w`ޭ-뜪bQ"2 yU[ 0IQxGn"z?ӱ1m鳻x߸|Pcְe%9C/IvU(䏁cg-c +*` vsIOGx1w) g6f^yY:&>;_ 8®uH!@yeӂ6O1 .2J5(oh漟je| 'Edb (*Ki8|}P26CVVgBwbjl!|KKtffd} !2Lc|jt9 +"GSN\x+HG5|{џx$`÷DȞa ۘJgo,_\I %<6CeZT[ɛ[ &N U;+(CBU&4: q{D.J +@wJ#o]ۘ)"JL=C`X{uFYpпf}3Aa\3ps!:8[g/cޅLk}2;*P1~f)Yf Tt2{$2 ̭pݟ5Xl!h2k7vűwUnl404uh3Ȟ6?R䨺39Vkt}%!_GW1m}I&AtU +E1vŖdDh.<\<4L֚HIW9*Ju.bHH=m}1)੧:) L&KHTGêTcYCU|b>?:(^oԚu@/SuVkQ-KV:3Өa~^ٓߨ@_*ܧ^ ,UTQG=x(]ޤD>w 쌛ZII?dqu;(k ^m*]= W%T+U/;[a41YvAbf5KS&On34SC@ᑣelZ`j[Lv k'=v~$aZph#3ښi>82 2HNc!/=,!o8YOb9Rm.d8Hfڨ Vį{G~zYaS U!K,NmTsi,I߀pI5_<_ܷ7ԍ/ɕő'f(/gE;<,,_k&g$_$RVr l֮zq}6EFEszV1r/jxe4){ ) +Ѥm#)X~X>nF.\B6-A)&#nNY*`B _:.7#lA!dG\@/7h_;F~bĶ% 40H-x2bn&qbC] r4fuDc  1.Z)>Mwv/'$0-cEԤtƃ-: +B@xpwz\P?ZZ(#-Og=ΐ:\(-̀>Ts/%gghiXΛbT n=%ZZn}5t]ڽ,y~W S+՜aUi"Ж>1)@{eIuEN!x#*c7wOEdL;w{qUY@4z +LjYX'C"*ٚ7eL'/gveZ7l@ʎ /ܣ]򯖞eR1JBbƗ1`Cd#fS6븴<1K n6[?L;r3%dw:+O!9-av_Qa@= +s<ںZ߻rk,wZB=ʑqf'CLhQԦDĤ/ib&Y(hnGtdJB w]{&+.Sp:+.#C=krQHd>]?@2sN6u{ +8Y|" dScp2S 7g+H7 &ꟁOos7mE@:ّW0Mױ6\\%)}r)ն ;Ar=v&kZVI8MΙ2@KޮAzi$n½h(EAnLi, +s~,zt+l phtLM{Yw\Ó DUxA RFB> ^VOw:4ܖ~VXȥdji U')U@/AwoK21%LC4L1eE.H$pY)Ik3}Jm.Kj*xYf`t,҉d1Ú$ke#+Č9'Ij݀Y9 Pux ',B\<']ߘ";tfx0]㩤KKjEWMh?a`.Z0:!yv BrRksO/~֦k 8ņP&d*KUO@#Nz%g2˲ 5^ݾV s0]Lǘda2m\rBM.)>7C]916Eg׋rMfӏdsm-~͒5nu? +3@YHö[Mu*L@ܜE-vvT5C_[>H<=#jP e> )lYh!oun5 @ qA 2eH<512|XxF^A- +\plV.d*3MgHbcw7H ;Cwx?fkr~ܸ~ +.wI昧k3-mߍzVBdr&ӈOpXŵ鋣ttb!wL#A0ᯕNF ڑ:YG1>rv%ѝHdk>/wl%Ħ,"T ^W8Y Hi_=ϙϲF! M_h[}uCɷw9m:-wt2"_>G `94}Lb$,6 \얿 PfDjP}GCG^c/dhEޱWnl~2aC|brWL[v Ȩ0`d1(]ٽkH`N0mnX=c\" ]g}ZBT"x/Sy.nծs B ([:n8 Ƕ2 ó_h%f4*CscPݰ2ejafk$ΙOad8~+2Σ>SQu&)'\81[* ߉ah_|`P(uok( )jTmXނ$͠*$yjVP-bD>gvG\ v7 07e+ZHWaϯ<gg\rRtrL!*,-^2 +Rc[A;l)wWiQ\+wETp򖪛%A6rŃJ'&B|pʲtO8#~j`V5{ ;M>Yf_vY8gV2S>+_DB/}uc w*6 O# +?s^ }A`d`v(IjQY0K}!Գ +Py┳jM!!e3J03kM &df ~n +Rιd툼!A^G!z0$#~V>G:|8&qԎ`:¥fIg8٥/CIrßmYK"x>zNc5lb#n{V=|. yF%[IFj`.wE*4Ӏ&αm &9d[YlR _#D}d>3~qlhz쵰/edaNqB󎝈yzIb(KAXUIZ +X{&^ԴØEE=⁰EFN٬ǕKPT]˳ߓczNJEiS: j('bgNѷRܫ҄o 9S{;RuUg+a;"-dM +ݸ]uPE,'Ġ+Ű&AG$.0ng:q<❇-H˴-B wr>!S&2*4?6oa"|1;"]%Xi:X( ~ R +r + +!onl;@"6ٗsc_$HQiْ*;hsTZBWf2?mm]}o|x66|>y9ct& +{5[Hwp= ^ܑ,@;ʰ4m֨m + oV,/}ZZ>̔㢻jf4,jJH KpgG7j/r"U(8#3Z0͇TTrhO=k+nZr\ʜP ů/W4V9~˅ +5`N/zʐ]W0 ]cWN:M-SX1O x5|mΟC+vBS86\ޘIE5ml&M!d<+>3MdWݰ(Y/Si(^7ˤq銝"+6>oʐ-跟(;Aewh~f_b O֧@_|9g'vB#16pkdJ&yPD]:$:~jәlݣvT`/`QNmhmw^X!LhBXcW_3fDSEW@t ɰ$&*qL+'9Y'g^R"󅼹,[[8>um*?ERm _Z$>kG=XH}3zs_a4*)MvK(lo+pTmg+Qv͓`9r6~#n-Ƒ*jD?e.m*5_C~n$~9vo65WfF b xn<ejA⩜Hlcp5(^!g+cLs:2(BMs>? m=B+O%\_Otފ"a8ߴ?.ڡZB\Kf$_=G-u}<o=1;rqK{(FV#;eo\29tV>ls(wܚ!DPWiӵ% P:/r(tgٹ\v*9qUPCԗ/ğy˛D*=eu&qlH!6(l}Ȑ="}7h-П +@wd ?E£ Yא;._1uߗbsyV69܇4TwŞЂ)9:el,M!=!f +-'I~cpRfWo]KD"cBwPZJY=tBpt wn Nmc:_ύPU!fB:5b4Xt5co&MCqp!t0\Ė%uB D;ZTngHLaGٛ*;#CO%aH[]L֧3uNDQA^8 * a50!)6{a٥rY0RZǸ*=JӐddP>፳$tėDn j.=$xN]+]| b \-D娈Ш1sycd* wg赇kjҠJ2;2Ǫ{ԮYXc-cꝸdS4eӀ>K/8(Kx )w> ^hO'I.V(Ʋ{ιr$/,xw4QtV%$Y {#AׂU8Iwq'sм-͝՝'oWx8ϧދGsLz1~s^Jb +6%tcLϡ0#vn:zG'.W|9ǔ1mw}w[Mʡ U + Aʯz~f/x٠Èbź$pFj}]t0"Ec 4)z)41b(UNOBz +.&@Q#QBI>@(&37N+*&?p-a=8[ׂ1 {t̫Y㌑,sM+!)#aY|5H&ee\ sz.ϙ"̓:7@l ZU^@, k +;sQ{N,7w;.U1zڥVC+w +62 +83GO)R^3Sʞ]LhN3W˧_B S$&(m;1z (5DnV]x=GPIeC5empveprL!DC`k+KD}^5pq޿N7\q22}L|qj%W-s]P/|>; +w™E98WNߕri}.pK_̴E琅I#lN蛞Q*Y[R7KT W_'V Fp[7su,.CsdYzgL o896P v_ twZ}ݲGUi=4s ^)fn?_']n1[ݮ\FT/jI6˰*/YּYFX0a`oE`. g1Hf=VgT +vuq +0.Fy/ X`Pز5Uk"wgƛDh3"+o/(@yjtƎ؇qq%*8#)cY#N=?08CcwU|0.jLI6 E>duVDlǁ +|co᪢+xK]2"ĿibAB[M  |+U tLl/ՠ .@"qdп|;k>i (, cibli쬔[̾KR)4|ymGly: ⿘m)rMԏ@ꦆ4(Akh|;2cNҸB$S/S:7:l"ikn텶+56vYr^^g;`N}wf.N漍.Z^Êr|%&fK6l혱%ɍc4SԉLi(bP+/GlOksNJz1o)z;;Ձ3wYߌZ3 +(Z㭓Pcz2_$Z^U+Ȍ*Ht$-胁}fV> jƟ0C*T"IbAeX|>Pᱳ6TKUE Cmxi?)n:<}6Wk&o^l"ȅ\i?H]:CBrhv]܂:^?(j-Cf]a 7ޮaDVW^u fr|9:Ax}Yuw={JҠwi* +HLlwpzM2v/['Bչ0L'oQ67`'5"J #4L_|ͮ{&B3:9D]Hf6,CQ|2`ҳb`RK +ʒvHn-׋B4a+zpef+f@&uIbU ޟ{Z~!At6*{Κf#dyj{6\$7Q2%Mwj}Bۥ> 4]w4/q8~x-`3M=v dNA!ͪXɦ:1Cpp +Q$ w>NSorXT`dZܿ??$ctn,prV7B>2ք:}ڱÛG2ɦ'=| 5`o2G [L!:μw_"ؗ쑽Ϡѵ97㉶Mӏ^Q:ulk&xĸOgSgTQM􏵉FHm|rHl-~}uir`0 : kX@ah !PzcS陀+2[A'l3 ucB@ʧUFh]fM+5pL5?KgDeq,2a$bdSc𞽟Ɓ*SxtCr=vo51Qi Ie1a Dlb( +s*BIv5hiխ={lr/8 v 2H6\q$suu2n +n,um*JKk؇>LYz9oUՉz?gv-[Ƣ_\Z8|b'NYՊ}$ACh AVس\WO˦(i;90aת=e\6q3:շup$,_C߀OP_nu'ZCK)2 M& 7 "͆,]Sfl9E +B'.OsOPڝi,6$K6@e7cP<}nXfGi=N8ŝym)Ü~;t`^|s`'K' 9>!$N, vBcN;)OL9+k|6A yC連[;6hI^HQЏ~}훐lOjJ]R/ukZ/z%P5 +iJz2ɧ>."I# XB@U(/y/#xՑ|ħ"VE(J5E苾>Ԓ4ڭLTƳ''qJ %lk\I`” fҟ@YLFM(p؇MLy?rX]mqmac1u<6q9Y]3ak(:?0ۯ곶99kl8R:թMUQ.$vֺţo'rFLgvŝkjA%4ۍC%VHe,pǾq[O )ReLkG'8"UlGxz= iOorSaי2b2 e<**T,si:xӂu-M +p' s$[VwiXj._(Am1eRdHv0MJ$jAZK̶~x +*v\}~ʫazk-{!c1F*FФf(٧`aTWap?!i4_)] f+!L9/(1$ob=qxhX|NߡIUƋ&Ie!eI[W_3d6mi$FL%ww2qQA^”m8z=_<n|4ڀbx2Ej[p W>~Ooj!LƸ{E=4-RtكӬٟwY \f pN^&;{pċi(T{)~\*uaoɁ*>- ڇ23Kxs{~~H}ޱNuwϹY앂ʠ hצTSGsASBwIs0Āmϒ",zJ-4dcuU,=VlHG_tP?Jg `7G{`Os(v'E4Uc?ERCBhho[3ҭ5 N/5dהּ/cH7< /k8!LQxo@drw%M +2%c u)p#yHvШLCm1Ǩb$҂Xe7=;]s5X,a4^sUW1 /JBy IgĒIdh C(f1~'\vEksoǪ=_i* n{C4wLz{eV +*kK `mJ{O,>g))=p ]flNĐaԋo%M/rjXĢc QCA h2hGBzPYaS{)ڍu#\ݐʃ$`t',V-ǝKP?s(lv?+ND4?o][xI>@Mt9R+&OH*g.rʛ =9-eI̵XĆeɔf +zD# W,&rVVc O_sZ,88RWB䀅{;hk첮D!dhڄp @J6 ŔP l0)] xlc=j$~+'z mR\N -cjE2V`'t’% 4<.ޫ-}b!pmT׼#|<.IL=fȶX։ӡ 9ǖO +;[u,)lwƦOD4Ƒkb/vW䝫(bQvVhŨ?VcTRb'=.82. +*h\ݷ9d &G*A +2NOQҎj[=]MD!a@zXK6DeWUyZϜlS}򠳱$ݟVkh^t\+ڮ =᪩ *BR |OF"êg" =Xԛqj!fL#K/~05qBl{5=GXo"a($WѬh<&pG<"eHo30 =4 /8@iQNUYI +=VĞbl#r$41DA&r&a*v4wͺدe{Iy+ jQ p}ؒ{׹YԱzu\k'ʍVd."=bVjMԜ%Z5 C8Ua8I ´yGw.4V}e9_ \DyD[B>>Wcg/ Kj<ؿ]]$#oZѓ.*iЧ*_[mB{ .V!Sa4b_nr+|T-ПPL[)`,LTV^x8:E6 ,jјT EU:Ob(&s+rhZiIzGkR7Qkwؽ} YHf~1ֈQ,JaWKk~ЮkW֢9p<9dፓ?mhB&=/V6wS{"LQN5DlQ{:`>YtaeAJݞ0(d`G޼UhGC{]!/t޼ӗ.2Z3qJWQjgo~a^tTL^u;jh8? ͑WË\_ d*~-{mW:mxj ;0kZ O)ờe[](3R+Gd|Ҿ ';ôDV"G-uo[_RRl~\w:g?J0wO]KE(J5m ?*'q{#dng*R'd{:}(zoK\FC֏Jx 4hL wnS1rvbHW4cDr^S NLW%)@:/`ޕ3Ml_[!CMPm4KwMsRm)J4+tW?ȿFA%jGf]A]vkgLrɎhyJEA/T\pBAfg3l8SjXP*(. 'bpr<20󩱶^~bחaI教\HIa4~_:HSF}l"Iÿc`\HnU!H=|E|֨DjS4G׎['8#{3\4U9Y jO%%ŽӾql% +PP_QKq3ƢA=,Jj x;k)Q@_YtSx/.ؼ.䐗UhO/O|VoMxxirtŞc"5x%#BR= 0. ~#bѬ\pJu)|T~kE$-c)huƏ ſz n#Đ u^eD +٢ ge} +)`rU+У^$Ś)]-8꬜Y9&|F^Gnna*ERTsq1ȶT9qNo!u} drGMHYǑ +InO@{Lb痷W."%S fpzcPsD\Pqnd5k"ʇ3ey~xdFWv5!6 srpuO(A|N1zdؿ dNgFģ:O)搑N1;t 11j.?5tlA׎PBbUIthNzMa#jqpieH5>TG&.H{rjbׇ PIy~ɻ6-~wo#ϑ`bʆ/sE#Ƈe$5un_U<ݖ͕դOA-+{ 4˞]󵺌~f|#g$6F:i y4Bo! VG70iJe}>; 5 +5 Y1?|xeegR Wܸd*gJ흆y0{$S.,좚&n:)u'0Y  G\!<`-;9f~l4kv :5 $(=ߙFݛu-!{f`='ZyԊɟ Y]Z~ØWNL$+e(K`UX8fŇ?* \7V;/<0\D/!v6HJI6>}.T;pC&21n]M=lPȎˁʿjVJw34jUv?_qBgOgN9ը2M,6wxs=#3?lr&|vl ^_0 dx>TtS;Ʊ’۴ItI)bx_.m<##|֖Fr0>oH2G۷Oy9gy(%oʶetBW:w`%SiVW|r5k;~+KL$$l(a6r)bܹlU.T4,p9H"k7Dm芄(zڨ.31(N?15{#|Z(V]*lzmK! _mm<#iFI tu< nA8Vgy6$iA~κkbj]VZJ:J6׫lwn,\0dl"ϭ, &l>QNC.7$ h^Rr1Zv^D(olU!$59jhy7Sjժ qEWo@sX^fD uiU c3@е{V ^mh} !>hbAϺ:yhs|hUE@ϫR/s6l;C0 *][ lz/Dԗ,!{/ȐL +O/X4 tߺDhi+"GEU9lrp ,kAk>nO"%g ,fe޽{@nC]l5Dꇖw#C'CR>!$PJ>Dɢ` -`[BùBt&;"(W{,/>XaTe^&\e*=3^+fB8S8#t5ΣFkO>j\-kL_O*GCdްF X#}+Da6=w{꾂3{o0X^);F/UdA<Pw/^.]$,J6goJ FLC93a.u.lœJ1уd] +oikcxSW@}i)Nx&]w 7jw3,U)bL:'(kU咯VN:;w@S^P1 pY=$VM"i M6k}`lm1Т.jqW!!?yqUAoB8hXm)& +h!+ ԼAt !ygB5ʩU%[t.̣(0'/dsӂ_mvt:m7B;`RSSZAQP ?V;b.?(P;Aw8_X&-%U"׷h7̙w3֓?8"hR+6׫ SMN2MHyDNCd|$<>flGL#F_ +0DN*,kg-Id޶ OZyN;ciGkQ-aORDZa.o񨎈9ΥJ| 1hZփ^fjl*hgϫUf BR|lLj!lMcg1FO B$Fy/bz%nݸk2Vk؝zyjfղ-jW C6E<:DT@r~WA#->,>hd{5J'xܿE|S{aA`Mp_QK'b㾟͜vKvs JNao |-ƎEk Yr=f+ +K"m$M`/lbw `)41Iqy1or} BXNh(̽A)r +qhzSHr~~/@dܑ(0q*T쿲50'7wu `H+5+Y%({*+v.O5n}ߎgzui=lR0*].R]zZR TNҸ=;Q +P-\:t.W^`b(.?$,ѣV* a3!N¬1C˕;bϤ"olu"QLM qxj d'`7Nu(F(\umXW{,tiңپfgiTB5t2Ťt-RMn2V[A36v;o`LLPV ei=KWlKh]^$<<ӠUwTWl64~Z[=W xs.\\?@ ':0c4|w<>vf- *1[#ir{WEML0=ev@Q;NgH]iBb' G^1xҲI"N gN[ ɫzA)u>vjsdKtw빀`tį:, XPKd[ip`?zՄ&lVZl.sYI$ ZS0*|OqO gOO N1xWک_U8&hEgCq0Ԉ>aҺl(Ӎ*!)P R^K0eR[߹e 0cz-`rs?P)K.v9=7V+lۀ4j>454"V6%3f$|b1U ڲ$zGq]]Xe "c%yCcri! oՃ_+'R)6KmB.1F<$=j:JF Gz&(x +c>T_ι_C;I$J6T@;8t%&uWc+eAM?Oi=8v̺܃A$av^lnYϜ\5-k Z%mcQvWnEf#~84hX'|8͂JBZ~҉҆oPFEGK\Fa g& a4dI?]9?ډD))]dnA 9dZ"^0.LV2\> ,k!`qkl2;ǔ 8e6|7 D$čگ[KP:s]t0^6/s{B=sd*$ uR7#gidjduL&91al"ja7X+biFTLob?@49DBb=neŊ +4*eŮKj9 HJ*aϱR޾=Ƒyq1E%4sﺴn"-$rZ<; Vq(K(Po ы3]_ronS~ґ8o(01&Y2Gx~҃71 jCJ6RIҘ5%\9#ә9iG4P3}Ľ>S1L8I\l1pޢ+~M >L?_}[:2*UA)Zƻx̶-gOU@?(_&s{=^ғC eSo?1p(E;Yo`*pD^ tgj OW,O8){Ģ& ˲hUw9a*&t/}Swn,wiT +SBHg waX]a{[ ߰ŜDJ +q/WS睺]5 +eK l]>L\OPft5D+.^؊1eL.7cݠ-29vBYSC |Ua=Y1-`Eϸ޳Ju[ %3^\! >W0«`JXL/ tW>É$t(sٜ 2):*lh/\J}$IH1,W^VKQg 5f VWgE1auqza1.AxTu>LAET9!j(mEWE)5" 1` Ԏy9 5Or4O1 %;M0xn + mpf* ;㢿#hlu*C~m{}1ebg5r;-9nFkFpO݀hTK[utkJ{̩cULޏuͩ(`жWahBe!E&4;Tf[̣;Y*JEYcywy"Mo/gfA9b~m$(SƦSef)!:>"3*dMI Bܲ|2]z;w֟$Gqb$ +Þ ϸ][ҫ&rC>P tc^5-a'e>&/rbw>IUvS .I](})Gӫ2[?EؤBC${P~Rfpzy珑2!OPX tK\3=vuV9fgub..ӯ MdFk`$z楣Q>ж}QSc/QQ_n111\ƶ +8h> endobj 8600 0 obj<HXug)>> endobj 8601 0 obj<> endobj 8602 0 obj<ȱwT\){>b\r'Hl')>> endobj 8603 0 obj<u$5Cxڲ/ZCw VN`E09)>> endobj 8604 0 obj<> endobj 8605 0 obj<> endobj 8606 0 obj<> endobj 8607 0 obj<> endobj 8608 0 obj<Ͷ _JO>P;]\ra{b|\r%3)>> endobj 8609 0 obj<> endobj 8610 0 obj<,`}< Vh)>> endobj 8611 0 obj<jrdb-C\(Ќy@ЧD%L3%hf3͞')>> endobj 8612 0 obj<> endobj 8613 0 obj<> endobj 8614 0 obj<> endobj 8615 0 obj<> endobj 8616 0 obj<> endobj 8617 0 obj<> endobj 8618 0 obj<> endobj 8619 0 obj<> endobj 8620 0 obj<Sh9G4t9!T7=f^hqj]hī\)v1_yUlst*glTY)>> endobj 8621 0 obj<> endobj 8622 0 obj<> endobj 8623 0 obj<> endobj 8624 0 obj<> endobj 8625 0 obj<> endobj 8626 0 obj<> endobj 8627 0 obj<> endobj 8628 0 obj<> endobj 8629 0 obj<> endobj 8630 0 obj<0`z$ܠWyf)>> endobj 8631 0 obj<> endobj 8632 0 obj<> endobj 8633 0 obj<> endobj 8634 0 obj<> endobj 8635 0 obj<> endobj 8636 0 obj<> endobj 8637 0 obj<> endobj 8638 0 obj<> endobj 8639 0 obj<> endobj 8640 0 obj<> endobj 8641 0 obj<N>3xZxU-Ddp_ʭ<7mĤH\)F)>> endobj 8642 0 obj<> endobj 8643 0 obj<> endobj 8644 0 obj<kJUNWM>m[)>> endobj 8645 0 obj<> endobj 8646 0 obj<> endobj 8647 0 obj<> endobj 8648 0 obj<> endobj 8649 0 obj<> endobj 8650 0 obj<> endobj 8651 0 obj<> endobj 8652 0 obj<> endobj 8653 0 obj<> endobj 8654 0 obj<> endobj 8655 0 obj<uYH2إ';#Ͷ)>> endobj 8656 0 obj<ѝÅr.X#z'+<-\rK< S{)>> endobj 8657 0 obj<> endobj 8658 0 obj<> endobj 8659 0 obj<> endobj 8660 0 obj<> endobj 8661 0 obj<> endobj 8662 0 obj<> endobj 8663 0 obj<> endobj 8664 0 obj<> endobj 8665 0 obj<> endobj 8666 0 obj< ],H!nk6 :$[\\\(Ӭv)>> endobj 8667 0 obj<> endobj 8668 0 obj<> endobj 8669 0 obj<> endobj 8670 0 obj<> endobj 8671 0 obj<> endobj 8672 0 obj<> endobj 8673 0 obj<> endobj 8674 0 obj<IUT6GDugW6qYSiR؊Cۜl)>> endobj 8675 0 obj<> endobj 8676 0 obj<> endobj 8677 0 obj<> endobj 8678 0 obj<IԔIJlS'~)>> endobj 8679 0 obj<> endobj 8680 0 obj<> endobj 8681 0 obj<> endobj 8682 0 obj<> endobj 8683 0 obj<> endobj 8684 0 obj<> endobj 8685 0 obj<> endobj 8686 0 obj<lfoJt\(>>7?V=o\rM``rk=95 I~9)>> endobj 8687 0 obj<> endobj 8688 0 obj<> endobj 8689 0 obj<> endobj 8690 0 obj<vev)>> endobj 8691 0 obj<> endobj 8692 0 obj<> endobj 8693 0 obj<> endobj 8694 0 obj<> endobj 8695 0 obj<> endobj 8696 0 obj<> endobj 8697 0 obj<> endobj 8698 0 obj</q -)>> endobj 8699 0 obj<> endobj 8700 0 obj<> endobj 8701 0 obj<> endobj 8702 0 obj<> endobj 8703 0 obj<> endobj 8704 0 obj<> endobj 8705 0 obj<> endobj 8706 0 obj<> endobj 8707 0 obj<> endobj 8708 0 obj<> endobj 8709 0 obj<> endobj 8710 0 obj<> endobj 8711 0 obj<> endobj 8712 0 obj<> endobj 8713 0 obj<> endobj 8714 0 obj<> endobj 8715 0 obj<> endobj 8716 0 obj<> endobj 8717 0 obj<> endobj 8718 0 obj<> endobj 8719 0 obj<> endobj 8720 0 obj<> endobj 8721 0 obj<> endobj 8722 0 obj<@߉X"穽Ӎ<)>> endobj 8723 0 obj<> endobj 8724 0 obj<> endobj 8725 0 obj<> endobj 8726 0 obj<> endobj 8727 0 obj<> endobj 8728 0 obj<> endobj 8729 0 obj<> endobj 8730 0 obj<> endobj 8731 0 obj<> endobj 8732 0 obj<> endobj 8733 0 obj<> endobj 8734 0 obj<> endobj 8735 0 obj<> endobj 8736 0 obj<> endobj 8737 0 obj<> endobj 8738 0 obj<> endobj 8739 0 obj<> endobj 8740 0 obj<> endobj 8741 0 obj<> endobj 8742 0 obj<> endobj 8743 0 obj<> endobj 8744 0 obj<> endobj 8745 0 obj<,U0|c2})>> endobj 8746 0 obj< >*j@8Xw)>> endobj 8747 0 obj<> endobj 8748 0 obj<> endobj 8749 0 obj<> endobj 8750 0 obj<> endobj 8751 0 obj<> endobj 8752 0 obj<A3*yy5 1?)>> endobj 8753 0 obj<> endobj 8754 0 obj<> endobj 8755 0 obj<> endobj 8756 0 obj<> endobj 8757 0 obj<> endobj 8758 0 obj<qr‡?i7@)>> endobj 8759 0 obj<> endobj 8760 0 obj<> endobj 8761 0 obj<> endobj 8762 0 obj<> endobj 8763 0 obj<> endobj 8764 0 obj<> endobj 8765 0 obj<> endobj 8766 0 obj<> endobj 8767 0 obj<i&Jߥ ZkCMoh)>> endobj 8768 0 obj<> endobj 8769 0 obj<> endobj 8770 0 obj<> endobj 8771 0 obj<> endobj 8772 0 obj<9auyiZ\n"u蘀)>> endobj 8773 0 obj<> endobj 8774 0 obj<kgBA)>> endobj 8775 0 obj<> endobj 8776 0 obj<> endobj 8777 0 obj<> endobj 8778 0 obj<> endobj 8779 0 obj<> endobj 8780 0 obj<> endobj 8781 0 obj<> endobj 8782 0 obj<> endobj 8783 0 obj<> endobj 8784 0 obj<> endobj 8785 0 obj<> endobj 8786 0 obj<> endobj 8787 0 obj<> endobj 8788 0 obj<> endobj 8789 0 obj<> endobj 8790 0 obj<> endobj 8791 0 obj<> endobj 8792 0 obj<> endobj 8793 0 obj<> endobj 8794 0 obj<> endobj 8795 0 obj<> endobj 8796 0 obj<P-7tZL)>> endobj 8797 0 obj<> endobj 8798 0 obj<> endobj 8799 0 obj<> endobj 8800 0 obj<> endobj 8801 0 obj<dqΗ2C`])>> endobj 8802 0 obj<> endobj 8803 0 obj<Ny:\)î7|J)>> endobj 8804 0 obj<> endobj 8805 0 obj<> endobj 8806 0 obj<> endobj 8807 0 obj<> endobj 8808 0 obj<8*!0A \)bBBi_0ZTs)>> endobj 8809 0 obj<> endobj 8810 0 obj<> endobj 8811 0 obj<> endobj 8812 0 obj<> endobj 8813 0 obj<> endobj 8814 0 obj<ks,YCۣ鯾|F|)>> endobj 8815 0 obj<> endobj 8816 0 obj< _\)щS/)>> endobj 8817 0 obj<> endobj 8818 0 obj<> endobj 8819 0 obj<> endobj 8820 0 obj<> endobj 8821 0 obj<> endobj 8822 0 obj<> endobj 8823 0 obj<t)>> endobj 8824 0 obj<> endobj 8825 0 obj<> endobj 8826 0 obj<> endobj 8827 0 obj<> endobj 8828 0 obj<> endobj 8829 0 obj<> endobj 8830 0 obj<> endobj 8831 0 obj<> endobj 8832 0 obj<> endobj 8833 0 obj<> endobj 8834 0 obj<> endobj 8835 0 obj<> endobj 8836 0 obj<> endobj 8837 0 obj<> endobj 8838 0 obj<> endobj 8839 0 obj<> endobj 8840 0 obj<Q)>> endobj 8841 0 obj<Z_Bl)>> endobj 8842 0 obj<>)>> endobj 8843 0 obj<> endobj 8844 0 obj<> endobj 8845 0 obj<> endobj 8846 0 obj<> endobj 8847 0 obj<> endobj 8848 0 obj<> endobj 8849 0 obj<> endobj 8850 0 obj<> endobj 8851 0 obj<> endobj 8852 0 obj<> endobj 8853 0 obj<> endobj 8854 0 obj<> endobj 8855 0 obj<> endobj 8856 0 obj<LPQRi;d bN)>> endobj 8857 0 obj<> endobj 8858 0 obj<> endobj 8859 0 obj<h ' {"Q @=l{G';k9'xe)>> endobj 8860 0 obj<> endobj 8861 0 obj<> endobj 8862 0 obj<> endobj 8863 0 obj<> endobj 8864 0 obj<> endobj 8865 0 obj<> endobj 8866 0 obj<> endobj 8867 0 obj<> endobj 8868 0 obj<> endobj 8869 0 obj<> endobj 8870 0 obj<> endobj 8871 0 obj<> endobj 8872 0 obj<]-1& |])>> endobj 8873 0 obj<> endobj 8874 0 obj<> endobj 8875 0 obj<> endobj 8876 0 obj<> endobj 8877 0 obj<> endobj 8878 0 obj<> endobj 8879 0 obj<> endobj 8880 0 obj<> endobj 8881 0 obj<> endobj 8882 0 obj<> endobj 8883 0 obj<> endobj 8884 0 obj<> endobj 8885 0 obj<> endobj 8886 0 obj<> endobj 8887 0 obj<> endobj 8888 0 obj<> endobj 8889 0 obj<> endobj 8890 0 obj<> endobj 8891 0 obj<> endobj 8892 0 obj<> endobj 8893 0 obj<N)>> endobj 8894 0 obj<> endobj 8895 0 obj<> endobj 8896 0 obj<> endobj 8897 0 obj<> endobj 8898 0 obj<> endobj 8899 0 obj<> endobj 8900 0 obj<> endobj 8901 0 obj<> endobj 8902 0 obj<> endobj 8903 0 obj<> endobj 8942 0 obj<> endobj 8943 0 obj<> endobj 8944 0 obj<> endobj 8945 0 obj<> endobj 8946 0 obj<> endobj 8947 0 obj<> endobj 8948 0 obj<> endobj 8949 0 obj<> endobj 8950 0 obj<> endobj 8951 0 obj<> endobj 8952 0 obj<> endobj 8953 0 obj<> endobj 8954 0 obj<> endobj 8955 0 obj<> endobj 8956 0 obj<> endobj 8957 0 obj<> endobj 8958 0 obj<> endobj 8959 0 obj<> endobj 8960 0 obj<> endobj 8961 0 obj<> endobj 8962 0 obj<> endobj 8963 0 obj<> endobj 8964 0 obj<> endobj 8965 0 obj<> endobj 8966 0 obj<> endobj 8967 0 obj<> endobj 8968 0 obj<> endobj 8969 0 obj<> endobj 8970 0 obj<> endobj 8971 0 obj<alA.%\n$\)\\R̎)>> endobj 8972 0 obj<> endobj 8973 0 obj<> endobj 8974 0 obj<.WV=UQ~Z*[E nn)>> endobj 8975 0 obj<> endobj 8976 0 obj<y>jMR\)<F 3)>> endobj 8977 0 obj<> endobj 8978 0 obj<> endobj 8979 0 obj<> endobj 8980 0 obj<> endobj 8981 0 obj<> endobj 8982 0 obj<> endobj 8983 0 obj<> endobj 8984 0 obj<> endobj 8985 0 obj<> endobj 8986 0 obj<> endobj 8987 0 obj<> endobj 8988 0 obj<> endobj 8989 0 obj<> endobj 8990 0 obj<> endobj 8991 0 obj<> endobj 8992 0 obj<> endobj 8993 0 obj<> endobj 8994 0 obj<`~)>> endobj 8995 0 obj<795I4\)bb'o?9;B)>> endobj 8996 0 obj<> endobj 8997 0 obj<> endobj 8998 0 obj<> endobj 8999 0 obj<;tcVNf> endobj 9000 0 obj<> endobj 9001 0 obj<> endobj 9002 0 obj<> endobj 9003 0 obj<> endobj 9004 0 obj<> endobj 9005 0 obj<> endobj 9006 0 obj<> endobj 9007 0 obj<> endobj 9008 0 obj<> endobj 9009 0 obj<> endobj 9010 0 obj<> endobj 9011 0 obj<> endobj 9012 0 obj<> endobj 9013 0 obj<> endobj 9014 0 obj<~GIkw{".)>> endobj 9015 0 obj<> endobj 9016 0 obj<> endobj 9017 0 obj<> endobj 9018 0 obj<0 2D;)>> endobj 9019 0 obj<> endobj 9020 0 obj<> endobj 9021 0 obj<> endobj 9022 0 obj<> endobj 9023 0 obj<> endobj 9024 0 obj<> endobj 9025 0 obj<> endobj 9026 0 obj<I{t&2o7rk)>> endobj 9027 0 obj<> endobj 9028 0 obj<> endobj 9029 0 obj<> endobj 9030 0 obj<\(>VijWIۘZ)>> endobj 9031 0 obj<> endobj 9032 0 obj<> endobj 9033 0 obj<> endobj 9034 0 obj<> endobj 9035 0 obj<> endobj 9036 0 obj<> endobj 9037 0 obj<> endobj 9038 0 obj<> endobj 9039 0 obj<> endobj 9040 0 obj<> endobj 9041 0 obj<> endobj 9042 0 obj<> endobj 9043 0 obj<> endobj 9044 0 obj<> endobj 9045 0 obj<> endobj 9046 0 obj<i$d/i)>> endobj 9047 0 obj<> endobj 9048 0 obj<> endobj 9049 0 obj<> endobj 9050 0 obj<> endobj 9051 0 obj<> endobj 9052 0 obj<> endobj 9053 0 obj<> endobj 9054 0 obj<> endobj 9055 0 obj<> endobj 9056 0 obj<> endobj 9057 0 obj<> endobj 9058 0 obj<> endobj 9059 0 obj<XVY<2䭎u+)>> endobj 9060 0 obj<> endobj 9061 0 obj<> endobj 9062 0 obj<> endobj 9063 0 obj<> endobj 9064 0 obj<> endobj 9065 0 obj<\r! L~4ϕ8ArAQ)>> endobj 9066 0 obj<> endobj 9067 0 obj<> endobj 9068 0 obj<> endobj 9069 0 obj<> endobj 9070 0 obj<> endobj 9071 0 obj<d=3)>> endobj 9072 0 obj<> endobj 9073 0 obj<> endobj 9074 0 obj<> endobj 9075 0 obj<> endobj 9076 0 obj<> endobj 9077 0 obj<> endobj 9078 0 obj<> endobj 9079 0 obj<> endobj 9080 0 obj<> endobj 9081 0 obj<> endobj 9082 0 obj<> endobj 9083 0 obj<> endobj 9084 0 obj<> endobj 9085 0 obj<> endobj 9086 0 obj<> endobj 9087 0 obj<> endobj 9088 0 obj<> endobj 9089 0 obj<> endobj 9090 0 obj<> endobj 9091 0 obj<> endobj 9092 0 obj<> endobj 9093 0 obj<> endobj 9094 0 obj<> endobj 9095 0 obj<> endobj 9096 0 obj<> endobj 9097 0 obj<~>c,䈻N\)8r8`)>> endobj 9098 0 obj<> endobj 9099 0 obj<> endobj 9100 0 obj<> endobj 9101 0 obj<> endobj 9102 0 obj<)>> endobj 9103 0 obj<> endobj 9104 0 obj<pl\n\r-9nqY៤3r)>> endobj 9105 0 obj<> endobj 9106 0 obj<> endobj 9107 0 obj<> endobj 9108 0 obj<> endobj 9109 0 obj<> endobj 9110 0 obj<> endobj 9111 0 obj<> endobj 9112 0 obj<> endobj 9113 0 obj<> endobj 9114 0 obj<> endobj 9115 0 obj<> endobj 9116 0 obj<> endobj 9117 0 obj<> endobj 9118 0 obj<> endobj 9119 0 obj<> endobj 9120 0 obj<> endobj 9121 0 obj<> endobj 9122 0 obj<> endobj 9123 0 obj<> endobj 9124 0 obj<> endobj 9125 0 obj<> endobj 9126 0 obj<> endobj 9127 0 obj<> endobj 9128 0 obj<> endobj 9129 0 obj<> endobj 9130 0 obj<> endobj 9131 0 obj<> endobj 9132 0 obj<> endobj 9133 0 obj<rA9&+M9M9)>> endobj 9134 0 obj<KRnu*40)>> endobj 9135 0 obj<σ ЗKB?ufQvrMW~2b#ɊknX'3"P1:)>> endobj 9136 0 obj<> endobj 9137 0 obj<> endobj 9138 0 obj<> endobj 9139 0 obj<> endobj 9140 0 obj<> endobj 9141 0 obj<> endobj 9142 0 obj<> endobj 9143 0 obj<X:ێm 0 Kg)>> endobj 9144 0 obj<> endobj 9145 0 obj<,=ro{)>> endobj 9146 0 obj<> endobj 9147 0 obj<> endobj 9148 0 obj<> endobj 9149 0 obj<> endobj 9150 0 obj<> endobj 9151 0 obj<> endobj 9152 0 obj<> endobj 9153 0 obj<e?0a7@2KEk[)>> endobj 9154 0 obj<> endobj 9155 0 obj<> endobj 9156 0 obj<-,wUs%&|kЄIʡqtqߞ)>> endobj 9157 0 obj<3 2G;)>> endobj 9158 0 obj<> endobj 9159 0 obj<> endobj 9160 0 obj<> endobj 9161 0 obj<> endobj 9162 0 obj<> endobj 9163 0 obj<> endobj 9164 0 obj<> endobj 9165 0 obj<> endobj 9166 0 obj<> endobj 9167 0 obj<> endobj 9168 0 obj<> endobj 9169 0 obj<> endobj 9170 0 obj<> endobj 9171 0 obj<lryE`BOӨl)>> endobj 9172 0 obj<> endobj 9173 0 obj<> endobj 9174 0 obj<> endobj 9175 0 obj<,Rκ?_"գ)>> endobj 9176 0 obj<> endobj 9177 0 obj<> endobj 9178 0 obj<> endobj 9179 0 obj<> endobj 9180 0 obj<_W{$mȔC+i,5 A)>> endobj 9181 0 obj<> endobj 9182 0 obj<> endobj 9183 0 obj<> endobj 9184 0 obj<> endobj 9185 0 obj<Z-:rB f)>> endobj 9186 0 obj<pH-,#&r\(NvE)>> endobj 9187 0 obj<> endobj 9188 0 obj<> endobj 9189 0 obj<> endobj 9190 0 obj<> endobj 9191 0 obj<> endobj 9192 0 obj<> endobj 9193 0 obj<> endobj 9194 0 obj<> endobj 9195 0 obj<> endobj 9196 0 obj<> endobj 9197 0 obj<> endobj 9198 0 obj<> endobj 9199 0 obj<> endobj 9200 0 obj<> endobj 9201 0 obj<)>> endobj 9202 0 obj<> endobj 9203 0 obj<> endobj 9204 0 obj<> endobj 9205 0 obj<> endobj 9206 0 obj<> endobj 9207 0 obj<> endobj 9208 0 obj<> endobj 9209 0 obj<9zIZ١)>> endobj 9210 0 obj<> endobj 9211 0 obj<> endobj 9212 0 obj<> endobj 9213 0 obj<> endobj 9214 0 obj<> endobj 9215 0 obj<> endobj 9216 0 obj<> endobj 9217 0 obj<LP܃Q7"=)>> endobj 9218 0 obj<> endobj 9219 0 obj<> endobj 9220 0 obj<> endobj 9221 0 obj<> endobj 9222 0 obj<> endobj 9223 0 obj<> endobj 9224 0 obj<> endobj 9225 0 obj<Q\\U3D}3,Ͽk\)s[-A4)>> endobj 9226 0 obj<> endobj 9227 0 obj<> endobj 9228 0 obj<> endobj 9229 0 obj<> endobj 9230 0 obj<> endobj 9231 0 obj<> endobj 9232 0 obj<> endobj 9233 0 obj<> endobj 9234 0 obj<> endobj 9235 0 obj<> endobj 9236 0 obj<> endobj 9237 0 obj<> endobj 9238 0 obj<> endobj 9239 0 obj<> endobj 9240 0 obj<> endobj 9241 0 obj<*T7"'Y`wF]չbq )>> endobj 9242 0 obj<> endobj 9243 0 obj<ж5MYZMމ{<Bsgyg)>> endobj 9244 0 obj<> endobj 9245 0 obj<> endobj 9246 0 obj<cN%z󊘿})>> endobj 9247 0 obj<> endobj 9248 0 obj<> endobj 9249 0 obj<> endobj 9250 0 obj<3^2Q}7l>GJ5>)>> endobj 9251 0 obj<> endobj 9252 0 obj<> endobj 9253 0 obj<> endobj 9254 0 obj<> endobj 9255 0 obj<> endobj 9256 0 obj<> endobj 9257 0 obj<> endobj 9258 0 obj<8ץN=hejPpشZ*{Zv)>> endobj 9259 0 obj<> endobj 9260 0 obj<> endobj 9261 0 obj<> endobj 9262 0 obj<> endobj 9263 0 obj<\)BJR)>> endobj 9264 0 obj<> endobj 9265 0 obj<> endobj 9266 0 obj<> endobj 9267 0 obj<> endobj 9268 0 obj<> endobj 9269 0 obj<> endobj 9270 0 obj<> endobj 9271 0 obj<> endobj 9272 0 obj<> endobj 9273 0 obj<> endobj 9274 0 obj<> endobj 9275 0 obj<Sϵ+#-ahIJ].~o)>> endobj 9276 0 obj<> endobj 9277 0 obj<> endobj 9278 0 obj<> endobj 9279 0 obj<> endobj 9280 0 obj<> endobj 9281 0 obj<> endobj 9282 0 obj<> endobj 9283 0 obj<\(> endobj 9284 0 obj<> endobj 9285 0 obj<> endobj 9286 0 obj<> endobj 9287 0 obj<> endobj 9288 0 obj<> endobj 9289 0 obj<> endobj 9290 0 obj<> endobj 9291 0 obj<\)b8PQ})>> endobj 9292 0 obj<> endobj 9293 0 obj<> endobj 9294 0 obj<> endobj 9295 0 obj<> endobj 9296 0 obj<BO}u/uv'VrpA?)>> endobj 9297 0 obj<> endobj 9298 0 obj<> endobj 9299 0 obj<-UAs`έ|'BL'BWz9)>> endobj 9300 0 obj<> endobj 9301 0 obj<)>> endobj 9302 0 obj<> endobj 9303 0 obj<> endobj 9304 0 obj<G'w&oÀ)>> endobj 9305 0 obj<> endobj 9306 0 obj<> endobj 9307 0 obj<> endobj 9308 0 obj<&$B} X΃s)>> endobj 9309 0 obj<> endobj 9310 0 obj<> endobj 9311 0 obj<> endobj 9312 0 obj<> endobj 9313 0 obj<> endobj 9314 0 obj<> endobj 9315 0 obj<> endobj 9316 0 obj<> endobj 9317 0 obj<^zFۡ<#\nv;O)>> endobj 9318 0 obj<ǫ.>:1C@XN{'r:BЭ)>> endobj 9319 0 obj<> endobj 9320 0 obj<C.\n\rvέu)>> endobj 9321 0 obj<> endobj 9322 0 obj<> endobj 9323 0 obj<> endobj 9324 0 obj<> endobj 9325 0 obj<> endobj 9326 0 obj<> endobj 9327 0 obj<י׌xk)>> endobj 9328 0 obj<> endobj 9329 0 obj<> endobj 9330 0 obj<> endobj 9331 0 obj<> endobj 9332 0 obj<> endobj 9333 0 obj<> endobj 9334 0 obj<> endobj 9335 0 obj<K3}N^\nS;)>> endobj 9336 0 obj<p)>> endobj 9337 0 obj<> endobj 9338 0 obj<> endobj 9339 0 obj<> endobj 9340 0 obj<> endobj 9341 0 obj<F܌)>> endobj 9342 0 obj<> endobj 9343 0 obj<> endobj 9344 0 obj<> endobj 9345 0 obj<> endobj 9346 0 obj<> endobj 9347 0 obj<> endobj 9348 0 obj<> endobj 9349 0 obj<> endobj 9350 0 obj<> endobj 9351 0 obj<> endobj 9352 0 obj<> endobj 9353 0 obj<> endobj 9354 0 obj<> endobj 9355 0 obj<> endobj 9356 0 obj<> endobj 9357 0 obj<> endobj 9358 0 obj<> endobj 9359 0 obj<> endobj 9360 0 obj<> endobj 9361 0 obj<> endobj 9362 0 obj<> endobj 9363 0 obj<> endobj 9364 0 obj<> endobj 9365 0 obj<> endobj 9366 0 obj<> endobj 9367 0 obj<> endobj 9368 0 obj<> endobj 9369 0 obj<> endobj 9370 0 obj<> endobj 9371 0 obj<> endobj 9372 0 obj<> endobj 9373 0 obj<> endobj 9374 0 obj<> endobj 9375 0 obj<> endobj 9376 0 obj<> endobj 9377 0 obj<> endobj 9378 0 obj<> endobj 9379 0 obj<> endobj 9380 0 obj<> endobj 9381 0 obj<> endobj 9382 0 obj<> endobj 9383 0 obj<> endobj 9384 0 obj<> endobj 9385 0 obj<> endobj 9386 0 obj<> endobj 9387 0 obj<> endobj 9388 0 obj< BmOhQe.,;g)>> endobj 9389 0 obj<> endobj 9390 0 obj<> endobj 9391 0 obj<> endobj 9392 0 obj<> endobj 9393 0 obj<> endobj 9394 0 obj<> endobj 9395 0 obj<> endobj 9396 0 obj<> endobj 9397 0 obj<> endobj 9398 0 obj<> endobj 9399 0 obj<> endobj 9400 0 obj<> endobj 9401 0 obj<> endobj 9402 0 obj<> endobj 9403 0 obj<> endobj 9404 0 obj<> endobj 9405 0 obj<> endobj 9406 0 obj<> endobj 9407 0 obj<88ŶfsDR)>> endobj 9408 0 obj<> endobj 9409 0 obj<nl&”@371n\({h)>> endobj 9410 0 obj<> endobj 9411 0 obj<> endobj 9412 0 obj<> endobj 9413 0 obj<> endobj 9414 0 obj<> endobj 9415 0 obj<> endobj 9416 0 obj<> endobj 9417 0 obj<> endobj 9418 0 obj<> endobj 9419 0 obj<> endobj 9420 0 obj<> endobj 9421 0 obj<pUXF'_ӃbI9k+mW3)>> endobj 9422 0 obj<> endobj 9423 0 obj<G 29^=̆)>> endobj 9424 0 obj<> endobj 9425 0 obj<> endobj 9426 0 obj<> endobj 9427 0 obj<> endobj 9428 0 obj<> endobj 9429 0 obj<> endobj 9430 0 obj<> endobj 9431 0 obj<> endobj 9432 0 obj<> endobj 9433 0 obj<> endobj 9434 0 obj<> endobj 9435 0 obj<> endobj 9436 0 obj<> endobj 9437 0 obj<> endobj 9438 0 obj<> endobj 9439 0 obj<> endobj 9440 0 obj<> endobj 9441 0 obj<> endobj 9442 0 obj<> endobj 9443 0 obj<> endobj 9444 0 obj<> endobj 9445 0 obj<> endobj 9446 0 obj<> endobj 9447 0 obj<> endobj 9448 0 obj<> endobj 9449 0 obj<> endobj 9450 0 obj<> endobj 9451 0 obj<> endobj 9452 0 obj<> endobj 9453 0 obj<> endobj 9454 0 obj<> endobj 9455 0 obj<> endobj 9456 0 obj<l\nIxF^L'շ͓BR\nj)>> endobj 9457 0 obj<> endobj 9458 0 obj<> endobj 9459 0 obj<> endobj 9460 0 obj<> endobj 9461 0 obj<> endobj 9462 0 obj<> endobj 9463 0 obj<> endobj 9464 0 obj<> endobj 9465 0 obj<> endobj 9466 0 obj<> endobj 9467 0 obj<> endobj 9468 0 obj<> endobj 9469 0 obj<> endobj 9470 0 obj<> endobj 9471 0 obj<<[P.>gDY^)>> endobj 9472 0 obj<> endobj 9473 0 obj<> endobj 9474 0 obj<> endobj 9475 0 obj<> endobj 9476 0 obj<> endobj 9477 0 obj<> endobj 9478 0 obj<> endobj 9479 0 obj<> endobj 9480 0 obj<> endobj 9481 0 obj<> endobj 9482 0 obj<> endobj 9483 0 obj<> endobj 9484 0 obj<> endobj 9485 0 obj<> endobj 9486 0 obj<> endobj 9487 0 obj<> endobj 9488 0 obj<> endobj 9489 0 obj<> endobj 9490 0 obj<> endobj 9491 0 obj<> endobj 9492 0 obj<> endobj 9493 0 obj<-)>> endobj 9494 0 obj<> endobj 9495 0 obj<> endobj 9496 0 obj<> endobj 9497 0 obj<> endobj 9498 0 obj<> endobj 9499 0 obj<> endobj 9500 0 obj<> endobj 9501 0 obj<> endobj 9502 0 obj<> endobj 9503 0 obj<> endobj 9504 0 obj<> endobj 9505 0 obj<)>> endobj 9506 0 obj<> endobj 9507 0 obj<6)>> endobj 9508 0 obj<@v3)>> endobj 9509 0 obj<{Chfkgǫڮi,{R?\r.$T9aJ)>> endobj 9510 0 obj<> endobj 9511 0 obj<> endobj 9512 0 obj<> endobj 9513 0 obj<> endobj 9514 0 obj<> endobj 9515 0 obj<> endobj 9516 0 obj<> endobj 9517 0 obj<> endobj 9518 0 obj<> endobj 9519 0 obj<> endobj 9520 0 obj<> endobj 9521 0 obj<> endobj 9522 0 obj<> endobj 9523 0 obj<> endobj 9524 0 obj<> endobj 9525 0 obj<> endobj 9526 0 obj<> endobj 9527 0 obj<> endobj 9528 0 obj<> endobj 9529 0 obj<> endobj 9530 0 obj<> endobj 9531 0 obj<> endobj 9532 0 obj<> endobj 9533 0 obj<> endobj 9534 0 obj<> endobj 9535 0 obj<> endobj 9536 0 obj<> endobj 9537 0 obj<> endobj 9538 0 obj<\r}$>E} 3#)>> endobj 9539 0 obj<> endobj 9540 0 obj<> endobj 9541 0 obj<> endobj 9542 0 obj<})>> endobj 9543 0 obj<> endobj 9544 0 obj<> endobj 9545 0 obj<> endobj 9546 0 obj<> endobj 9547 0 obj<> endobj 9548 0 obj<> endobj 9549 0 obj<GK)>> endobj 9550 0 obj<> endobj 9551 0 obj<> endobj 9552 0 obj<> endobj 9553 0 obj<> endobj 9554 0 obj<.)>> endobj 9555 0 obj<> endobj 9556 0 obj<> endobj 9557 0 obj<> endobj 9558 0 obj<> endobj 9559 0 obj<> endobj 9560 0 obj<> endobj 9561 0 obj<> endobj 9562 0 obj<> endobj 9563 0 obj<> endobj 9564 0 obj<> endobj 9565 0 obj<> endobj 9566 0 obj<> endobj 9567 0 obj<> endobj 9568 0 obj<> endobj 9569 0 obj<> endobj 9570 0 obj<> endobj 9571 0 obj<> endobj 9572 0 obj<> endobj 9573 0 obj<> endobj 9574 0 obj<> endobj 9575 0 obj<._=v)>> endobj 9576 0 obj<> endobj 9577 0 obj<> endobj 9578 0 obj<> endobj 9579 0 obj<> endobj 9580 0 obj<> endobj 9581 0 obj<> endobj 9582 0 obj<> endobj 9583 0 obj<> endobj 9584 0 obj<> endobj 9585 0 obj<> endobj 9586 0 obj<> endobj 9587 0 obj<> endobj 9588 0 obj<> endobj 9589 0 obj<> endobj 9590 0 obj<> endobj 9591 0 obj<> endobj 9592 0 obj<> endobj 9593 0 obj<> endobj 9594 0 obj<> endobj 9595 0 obj<> endobj 9596 0 obj<> endobj 9597 0 obj<> endobj 9598 0 obj<\))>> endobj 9599 0 obj<> endobj 9600 0 obj<> endobj 9601 0 obj<> endobj 9602 0 obj<> endobj 9603 0 obj<> endobj 9604 0 obj<X^vd?Og|`][>)>> endobj 9605 0 obj<uP:)>> endobj 9606 0 obj<> endobj 9607 0 obj<> endobj 9608 0 obj<> endobj 9609 0 obj<> endobj 9610 0 obj<> endobj 9611 0 obj<> endobj 9612 0 obj<> endobj 9613 0 obj<> endobj 9614 0 obj<> endobj 9615 0 obj<> endobj 9616 0 obj<> endobj 9617 0 obj<> endobj 9618 0 obj<> endobj 9619 0 obj<> endobj 9620 0 obj<> endobj 9621 0 obj<> endobj 9622 0 obj<> endobj 9623 0 obj<> endobj 9624 0 obj<> endobj 9625 0 obj<> endobj 9626 0 obj<> endobj 9627 0 obj<> endobj 9628 0 obj<> endobj 9629 0 obj<> endobj 9630 0 obj<> endobj 9631 0 obj<> endobj 9632 0 obj<> endobj 9633 0 obj<> endobj 9634 0 obj<> endobj 9635 0 obj<> endobj 9636 0 obj<> endobj 9637 0 obj<> endobj 9638 0 obj<> endobj 9639 0 obj<> endobj 9640 0 obj<> endobj 9641 0 obj<> endobj 9642 0 obj<> endobj 9643 0 obj<> endobj 9644 0 obj<> endobj 9645 0 obj<> endobj 9646 0 obj<> endobj 9647 0 obj<> endobj 9648 0 obj<> endobj 9649 0 obj<> endobj 9650 0 obj<> endobj 9651 0 obj<> endobj 9652 0 obj<> endobj 9653 0 obj<> endobj 9654 0 obj<> endobj 9655 0 obj<> endobj 9656 0 obj<> endobj 9657 0 obj<> endobj 9658 0 obj<> endobj 9659 0 obj<> endobj 9660 0 obj<> endobj 9661 0 obj<> endobj 9662 0 obj<> endobj 9663 0 obj<wJV=,)>> endobj 9664 0 obj<> endobj 9665 0 obj<> endobj 9666 0 obj<3Rp)>> endobj 9667 0 obj<UIS6dcZ̩dl)>> endobj 9668 0 obj<> endobj 9669 0 obj<> endobj 9670 0 obj<> endobj 9671 0 obj<ARBz )>> endobj 9672 0 obj<> endobj 9685 0 obj<EhT68_q; *2#)>> endobj 9686 0 obj<e)>> endobj 9687 0 obj<> endobj 9688 0 obj<8<)>> endobj 9689 0 obj<> endobj 9690 0 obj<> endobj 9691 0 obj<> endobj 9692 0 obj<> endobj 9693 0 obj<-BE!Cc5)>> endobj 9694 0 obj<> endobj 9695 0 obj<> endobj 9696 0 obj< 021#j]ۓ\nd4)>> endobj 9697 0 obj<9jFVC)>> endobj 9698 0 obj<> endobj 9699 0 obj<> endobj 9700 0 obj<> endobj 9701 0 obj<> endobj 9702 0 obj<> endobj 9703 0 obj<}]C"9>8fŭ{h_)>> endobj 9704 0 obj<> endobj 9705 0 obj<> endobj 9706 0 obj<> endobj 9707 0 obj<λऑW Њ.҂)>> endobj 9708 0 obj<> endobj 9709 0 obj<> endobj 9710 0 obj<> endobj 9711 0 obj<> endobj 9712 0 obj<,Z;\rZ\()>> endobj 9713 0 obj<> endobj 9714 0 obj<> endobj 9715 0 obj<bry e~Y/;qg檩N}L EFd)>> endobj 9716 0 obj<> endobj 9717 0 obj<> endobj 9718 0 obj<> endobj 9719 0 obj<> endobj 9720 0 obj<> endobj 9721 0 obj<> endobj 9722 0 obj<> endobj 9723 0 obj<> endobj 9724 0 obj<> endobj 9725 0 obj<> endobj 9726 0 obj<> endobj 9727 0 obj<|X ,\ṉ/x> endobj 9728 0 obj<sΆa~: ct<0ʿ>)>> endobj 9729 0 obj<}H\\9> CaP6)>> endobj 9730 0 obj<> endobj 9731 0 obj<_0"G|)>> endobj 9732 0 obj<> endobj 9733 0 obj<> endobj 9734 0 obj<w\)|JqYyzU)>> endobj 9735 0 obj<> endobj 9736 0 obj<> endobj 9737 0 obj<> endobj 9738 0 obj<> endobj 9739 0 obj<> endobj 9740 0 obj<> endobj 9741 0 obj<0>=R5u_L$E܌c_0~ѩBRybΤ)>> endobj 9742 0 obj<K %ΛW$')>> endobj 9743 0 obj<j.[<)>> endobj 9744 0 obj<> endobj 9745 0 obj<> endobj 9746 0 obj<> endobj 9747 0 obj<> endobj 9748 0 obj<> endobj 9749 0 obj<> endobj 9750 0 obj<\r)>> endobj 9751 0 obj<> endobj 9752 0 obj<> endobj 9753 0 obj<> endobj 9754 0 obj<> endobj 9755 0 obj< l7VXUJGEp:)>> endobj 9756 0 obj<> endobj 9757 0 obj<)>> endobj 9758 0 obj<> endobj 9759 0 obj<> endobj 9760 0 obj<nNLG>=)>> endobj 9761 0 obj<> endobj 9762 0 obj<> endobj 9763 0 obj<> endobj 9764 0 obj<> endobj 9765 0 obj<> endobj 9766 0 obj<> endobj 9767 0 obj<> endobj 9768 0 obj<p\\BJ )>> endobj 9769 0 obj<> endobj 9770 0 obj<> endobj 9771 0 obj<> endobj 9772 0 obj<qm\r')>> endobj 9773 0 obj<> endobj 9774 0 obj<> endobj 9775 0 obj<> endobj 9776 0 obj<> endobj 9777 0 obj<> endobj 9778 0 obj<> endobj 9779 0 obj<> endobj 9780 0 obj<> endobj 9781 0 obj<F$QmRsdfz92x@+-G25aTr9nS#)>> endobj 9782 0 obj<ȝQ MSDIyVhJIDo)>> endobj 9783 0 obj<> endobj 9784 0 obj<> endobj 9785 0 obj<> endobj 9786 0 obj<> endobj 9787 0 obj<> endobj 9788 0 obj<> endobj 9789 0 obj<> endobj 9790 0 obj<> endobj 9791 0 obj<> endobj 9792 0 obj<D3%Ak,)>> endobj 9793 0 obj<> endobj 9794 0 obj<> endobj 9795 0 obj<> endobj 9796 0 obj<> endobj 9797 0 obj<> endobj 9798 0 obj<`\r"s[Q> i3ܬ\r E> endobj 9799 0 obj<P\nJ$~)>> endobj 9800 0 obj<> endobj 9801 0 obj<⒤[&E%R)>> endobj 9802 0 obj<> endobj 9803 0 obj<> endobj 9804 0 obj<> endobj 9805 0 obj<> endobj 9806 0 obj<> endobj 9807 0 obj<ݷ"hP)>> endobj 9808 0 obj<> endobj 9809 0 obj<> endobj 9810 0 obj<q\)4<ǁ8*)>> endobj 9811 0 obj<ʹ\\)>> endobj 9812 0 obj<> endobj 9813 0 obj<> endobj 9814 0 obj<> endobj 9815 0 obj<> endobj 9816 0 obj<> endobj 9817 0 obj<> endobj 9818 0 obj<> endobj 9819 0 obj<> endobj 9820 0 obj<> endobj 9821 0 obj<\n^U\r¿d˦VSg9)>> endobj 9822 0 obj<+|ٖy)>> endobj 9823 0 obj<> endobj 9824 0 obj<> endobj 9825 0 obj<> endobj 9826 0 obj<> endobj 9827 0 obj<> endobj 9828 0 obj<> endobj 9829 0 obj<> endobj 9830 0 obj<> endobj 9831 0 obj<> endobj 9832 0 obj<> endobj 9833 0 obj<> endobj 9834 0 obj<> endobj 9835 0 obj<\(ߎѨT)>> endobj 9836 0 obj<> endobj 9837 0 obj<> endobj 9838 0 obj<> endobj 9839 0 obj<> endobj 9840 0 obj<> endobj 9841 0 obj<> endobj 9842 0 obj<> endobj 9843 0 obj<> endobj 9844 0 obj<> endobj 9845 0 obj<M;V5w%@xd8%{)>> endobj 9846 0 obj<\nbJ)>> endobj 9847 0 obj<> endobj 9852 0 obj<> endobj 9853 0 obj<> endobj 9854 0 obj<NB\r\(/ս'+$^a)>> endobj 9855 0 obj<> endobj 9856 0 obj<)>> endobj 9857 0 obj<> endobj 9858 0 obj<> endobj 9859 0 obj<> endobj 9860 0 obj<> endobj 9861 0 obj<Hۈd )>> endobj 9862 0 obj<> endobj 9863 0 obj<> endobj 9864 0 obj<> endobj 9865 0 obj<> endobj 9866 0 obj<> endobj 9867 0 obj<> endobj 9868 0 obj<> endobj 9869 0 obj<?|/)>> endobj 9870 0 obj<> endobj 9871 0 obj<> endobj 9872 0 obj<> endobj 9873 0 obj<> endobj 9874 0 obj<> endobj 9875 0 obj<\)z`JOX'NM᤹l)>> endobj 9876 0 obj<> endobj 9877 0 obj<> endobj 9878 0 obj<> endobj 9879 0 obj<> endobj 9880 0 obj<> endobj 9881 0 obj<> endobj 9882 0 obj<> endobj 9883 0 obj<)>> endobj 9884 0 obj<> endobj 9885 0 obj<> endobj 9886 0 obj<> endobj 9887 0 obj<> endobj 9888 0 obj<> endobj 9889 0 obj<> endobj 9890 0 obj<> endobj 9891 0 obj<> endobj 9892 0 obj<> endobj 9893 0 obj<> endobj 9894 0 obj<> endobj 9895 0 obj<> endobj 9896 0 obj<> endobj 9897 0 obj<ğTǖ~W+\n)>> endobj 9898 0 obj<> endobj 9899 0 obj<J:%P lR0f.+\r FlUJQ)>> endobj 9900 0 obj<> endobj 9901 0 obj<> endobj 9902 0 obj<> endobj 9903 0 obj< )>> endobj 9904 0 obj<> endobj 9905 0 obj<> endobj 9906 0 obj<> endobj 9907 0 obj<> endobj 9908 0 obj<> endobj 9909 0 obj<> endobj 9910 0 obj<ƛ eeZK]П&)>> endobj 9911 0 obj<U /Ɨ!:l>djO-JxR}xV j&GFq)>> endobj 9912 0 obj<J}Y⬻*pſ0HC| Nk)>> endobj 9913 0 obj<> endobj 9914 0 obj<> endobj 9915 0 obj<> endobj 9916 0 obj<> endobj 9917 0 obj<)>> endobj 9918 0 obj<> endobj 9919 0 obj<, *ӸVK9U\(q\\\\e@ZwŰ*v_d\(5٩j7Ӑ)>> endobj 9920 0 obj<> endobj 9921 0 obj<> endobj 9922 0 obj<> endobj 9923 0 obj<> endobj 9924 0 obj<> endobj 9925 0 obj<0)>> endobj 9926 0 obj<> endobj 9927 0 obj<> endobj 9928 0 obj<> endobj 9929 0 obj<> endobj 9930 0 obj<|; zPV7dpX|.?/'zB$ }x*"PNV)>> endobj 9931 0 obj<> endobj 9932 0 obj<> endobj 9933 0 obj<> endobj 9934 0 obj<> endobj 9935 0 obj<> endobj 9936 0 obj<> endobj 9937 0 obj<> endobj 9938 0 obj<jqZ_;df)>> endobj 9939 0 obj<> endobj 9940 0 obj<> endobj 9941 0 obj<K0}=P¢4ߞ"AO')>> endobj 9942 0 obj<wݶ?s9BGY)>> endobj 9943 0 obj<> endobj 9944 0 obj<> endobj 9945 0 obj<> endobj 9946 0 obj<> endobj 9947 0 obj<"a˭~\(Cm)>> endobj 9948 0 obj<> endobj 9949 0 obj<> endobj 9950 0 obj<> endobj 9951 0 obj<> endobj 9952 0 obj<> endobj 9953 0 obj<> endobj 9954 0 obj<> endobj 9955 0 obj<> endobj 9956 0 obj<> endobj 9957 0 obj<> endobj 9958 0 obj<> endobj 9959 0 obj<> endobj 9960 0 obj<Z;)>> endobj 9961 0 obj<05c^y"ߐl>0˹f)>> endobj 9962 0 obj<> endobj 9963 0 obj<^Ux/Pn,"{?bSsxi씭h[i)>> endobj 9964 0 obj<> endobj 9965 0 obj<psen368jF'i)>> endobj 9966 0 obj<> endobj 9967 0 obj<> endobj 9968 0 obj<> endobj 9969 0 obj<> endobj 9970 0 obj<> endobj 9971 0 obj<> endobj 9972 0 obj<> endobj 9973 0 obj<> endobj 9974 0 obj<> endobj 9975 0 obj<> endobj 9976 0 obj<> endobj 9977 0 obj<> endobj 9978 0 obj<> endobj 9979 0 obj<> endobj 9980 0 obj<> endobj 9981 0 obj<&Rw'@bahх\r P)>> endobj 9982 0 obj<> endobj 9983 0 obj<> endobj 9984 0 obj<> endobj 9985 0 obj<> endobj 9986 0 obj<> endobj 9987 0 obj<> endobj 9988 0 obj<> endobj 9989 0 obj<> endobj 9990 0 obj<> endobj 9991 0 obj<> endobj 9992 0 obj<> endobj 9993 0 obj<> endobj 9994 0 obj<> endobj 9995 0 obj<> endobj 9996 0 obj<> endobj 1 0 obj<> endobj 2 0 obj<> endobj 3 0 obj<> endobj 4 0 obj<> endobj 5 0 obj<> endobj 6 0 obj<> endobj 7 0 obj<> endobj 8 0 obj<> endobj 9 0 obj<> endobj 10 0 obj<> endobj 11 0 obj<> endobj 12 0 obj<> endobj 13 0 obj<> endobj 14 0 obj<> endobj 15 0 obj<> endobj 16 0 obj<> endobj 17 0 obj<> endobj 18 0 obj<> endobj 19 0 obj<> endobj 20 0 obj<> endobj 21 0 obj<> endobj 22 0 obj<> endobj 23 0 obj<> endobj 24 0 obj<> endobj 25 0 obj<> endobj 26 0 obj<> endobj 27 0 obj<> endobj 28 0 obj<> endobj 29 0 obj<> endobj 30 0 obj<> endobj 31 0 obj<> endobj 32 0 obj<> endobj 33 0 obj<> endobj 34 0 obj<> endobj 35 0 obj<> endobj 36 0 obj<> endobj 37 0 obj<> endobj 38 0 obj<> endobj 39 0 obj<> endobj 40 0 obj<> endobj 41 0 obj<> endobj 42 0 obj<> endobj 43 0 obj<> endobj 44 0 obj<> endobj 45 0 obj<> endobj 46 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 47 0 obj<>stream +JT!H솘n en|RmOeՄ-DJ`](HR=*Q:N& #~R;+A!k{( %@)gKVgnffGLR7:0&sbW(Z(@Aӡ摺{<`uԾ N[A&⿹%{:316@ua1vlKpnxٲOhddAՎ U8^!XU9fZW@l`/V7H(Aޛ)(˱p.SM}&3ΥKX Ř5oNhnڜ_>LcȝejX7#G sH=GH{4 o<]Q:w='֚g)aoJtΫ0OlKKʈhǬbH^*k \7,ژv)fPTJZRatU56~xK/ np}uwb;2eZ_0W6N8Trr$n0& u[$LXJPuʀ$:.DXˉ]*^;t%Ju_ʉyyEbjmrM(tA98Oh(o?eTM@"ᑖ -"ԛ.Fl(*̯3Ѵ.lDSȦ]~*Md&n{`Wepg&pKzOYxkMԁP*YCmf隧fFzʾ6`9s .oN`$(L.~wLmq EU}A'y ^ׅ5}43%xyO +,B72 M׎3OWƋbs{ow$gO\4=w uW]dG'|, $5 3%s]*B8rw`Il 5Sx6;g3* +X VuocZtg'1rH|X-l+wѤB։^a:m++FU`GtܹLS8:z\V6>< ?Xt& F z +]gg5\[. UOYejIiJY¦%uANП4p)$2CT!߼"5*n1x  !IVSR)S71>ϻuMq;biawl^b>'XKn*>Ub(K]:jaa8 +QUﰩGȳ{g8y ^UƂTZNLQc"Ve7.^<4DѬ }`fa ps`Px,^c.LTe}#8|Ed``K9evv!̌D(c9@$9_5pnGp|W! +#Fbx +endstream endobj 48 0 obj<> endobj 49 0 obj<> endobj 50 0 obj<> endobj 51 0 obj<> endobj 52 0 obj<> endobj 53 0 obj<> endobj 54 0 obj<> endobj 55 0 obj<> endobj 56 0 obj<> endobj 57 0 obj<> endobj 58 0 obj<> endobj 59 0 obj<> endobj 60 0 obj<> endobj 61 0 obj<> endobj 62 0 obj<> endobj 63 0 obj<> endobj 64 0 obj<> endobj 65 0 obj<> endobj 66 0 obj<> endobj 67 0 obj<> endobj 68 0 obj<> endobj 69 0 obj<> endobj 70 0 obj<> endobj 71 0 obj<> endobj 72 0 obj<> endobj 73 0 obj<> endobj 74 0 obj<> endobj 75 0 obj<> endobj 76 0 obj<> endobj 77 0 obj<> endobj 78 0 obj<> endobj 79 0 obj<> endobj 80 0 obj<> endobj 81 0 obj<> endobj 82 0 obj<> endobj 83 0 obj<> endobj 84 0 obj<> endobj 85 0 obj<> endobj 86 0 obj<> endobj 87 0 obj<> endobj 88 0 obj<> endobj 89 0 obj<> endobj 90 0 obj<> endobj 91 0 obj<> endobj 92 0 obj<> endobj 93 0 obj<> endobj 94 0 obj<> endobj 95 0 obj<> endobj 96 0 obj<> endobj 97 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 98 0 obj<>stream +=WsIR{z,G'k(F}+I 3Q!+0X ffyjw ccôޅNF(NtD ,$_)q"~ +a^S*%[ 6ɜ +2-pS&ӡy$hqU(hۿ/xG8. +[ A5jRJs "OS80 _OlSA%\Y'@J^%Fj+Frm?q$ `Qar4gyRn'\M򎒰gT1=³?ߩcJ%LGI=rPpS}> RVI0y7XlnVεqRCWvg?mB Q2( #GlGu,YDK.sI=e6^ ak|nIDFܚXi]rhA80jc(~&ƒ%.)BU{󶭙%^fHo 6*+OQ`$_U)no֟˱2;M}cEC|5S'SUSǽZ_Z4Z-P,-cynJeH׋iԤZV +PTJxbSLt}.:0*c)t=LIgjm _uԻ{`˘ +I[$R/R4Q<=@$a_1nλőN;zYJ. 6g VY4G7̞MVh߬1 +=e/;ϹKF9czO|5BtZ)RSNJȚ<,g#l9xˬ +*Dܙu9X)vyAT;<=ЙZ+YgX}"` z! 7dAq X2߹}m]bgGƑMAGAOj@T>ݑ RPR|XOA k*VA#r̬%&Z\M3x_@L й"Qpe6|(+ +$&@1-jND>ʞТzal8 9'H@ٮ]VJaO5l*z_bqCFtBg`nFQ/ +De mf x9^BmKƾI "u,Ԗ9ya HT>Xh @VUC:rӪi>^=lȗ&v8]w_< /E{.;MPŋx+`^qPRP #jڕ%(]2$)~s*'7f"-q;I~i-%vn}ҥ)w "EJ+ۄ=60ciQ_ @?ZVHYPܕMBswlXZE(!" i#DFꈖv K*1nkKI`oY`)6߉ /7fyOΈVAG=U_o~34(H~&VӑYI4ƀa#Ɗ? %[4fZ\bU@x3R砲U¸;=bG@$t~":I.:3`L'J.c8!ED->'Ûo@&̲߅Iuz+BPo>t_JNЂ;RZɭ$er7~*p{A6"g,t1@SL 4Fn)#ǺX3i*?;0_ui9;kt/yG>GZ?JJ !i(0lq5q %G1ȑG#*%j]NY פP՟z"-ҬkWYV8#֝眦mK:Ϟ$*oja Lm]Jhۭ LRPxy=Vh4 +endstream endobj 99 0 obj<> endobj 100 0 obj<> endobj 101 0 obj<> endobj 102 0 obj<> endobj 103 0 obj<> endobj 104 0 obj<> endobj 105 0 obj<> endobj 106 0 obj<> endobj 107 0 obj<> endobj 108 0 obj<> endobj 109 0 obj<> endobj 110 0 obj<> endobj 111 0 obj<> endobj 112 0 obj<> endobj 113 0 obj<> endobj 114 0 obj<> endobj 115 0 obj<> endobj 116 0 obj<> endobj 117 0 obj<> endobj 118 0 obj<> endobj 119 0 obj<> endobj 120 0 obj<> endobj 121 0 obj<> endobj 122 0 obj<> endobj 123 0 obj<> endobj 124 0 obj<> endobj 125 0 obj<> endobj 126 0 obj<> endobj 127 0 obj<> endobj 128 0 obj<> endobj 129 0 obj<> endobj 130 0 obj<> endobj 131 0 obj<> endobj 132 0 obj<> endobj 133 0 obj<> endobj 134 0 obj<> endobj 135 0 obj<> endobj 136 0 obj<> endobj 137 0 obj<> endobj 138 0 obj<> endobj 139 0 obj<> endobj 140 0 obj<> endobj 141 0 obj<> endobj 142 0 obj<> endobj 143 0 obj<> endobj 144 0 obj<> endobj 145 0 obj<> endobj 146 0 obj<> endobj 147 0 obj<> endobj 148 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 149 0 obj<>stream +MxKGKCσLD`Mz=捗]-(LnHK1uX:jL9LA려Ts4_ +rb +q3/j߳[%YFmeh]$-6'{Vx"tߍ~5;%T ǰؽׅX{`@=)<24}ZjlXzWlvf"r Ymiۘ;~W_7>uA"z_^'4U0rg,,FC>nkîRAaÄ(p@GuxrzZ?mrZHsF]e:TH'grH9sP7q+pz h7[.W[RkB'! JjB0;b+WF`{/rz<"a eʖgaO-mcBԔB|Ef}y1RPѱڄ$cB`05?V/ ;[{4NM$\ Bl y! $i,P>A~VL9i_FTI֋SSep>CxlUTLe jstؙؚ]AZL0:Vg#PB +KSf +AtbCQop)Nt^1L!3{-\S^vE ~6eu=4Ұ:+xq6y'/PSme6-7 +x˅iLrA柢=7)^0~%,G$4V81.1> Ij2m6@F<(㖄(lH ©d!6+̖pCq&}VLowK,.a:n^4L+Z $5=_=qp%Q\_21"+7(EN!pbC1u^@Z 2-N1NR[WI-r)v˒̊p>:TEI^['=(Ts"Avsb\'N 0ƞ0;p5_lE]X9 Jún?qdҞ0똠B'{f+SsD/3P3:86?0N/ j:|S^qVwWwDyd@2~ׄ4n5+%i*0c@ + tO: +=ZцUܜU eIXG ̤5> endobj 151 0 obj<> endobj 152 0 obj<> endobj 153 0 obj<> endobj 154 0 obj<> endobj 155 0 obj<> endobj 156 0 obj<> endobj 157 0 obj<> endobj 158 0 obj<> endobj 159 0 obj<> endobj 160 0 obj<> endobj 161 0 obj<> endobj 162 0 obj<> endobj 163 0 obj<> endobj 164 0 obj<> endobj 165 0 obj<> endobj 166 0 obj<> endobj 167 0 obj<> endobj 168 0 obj<> endobj 169 0 obj<> endobj 170 0 obj<> endobj 171 0 obj<> endobj 172 0 obj<> endobj 173 0 obj<> endobj 174 0 obj<> endobj 175 0 obj<> endobj 176 0 obj<> endobj 177 0 obj<> endobj 178 0 obj<> endobj 179 0 obj<> endobj 180 0 obj<> endobj 181 0 obj<> endobj 182 0 obj<> endobj 183 0 obj<> endobj 184 0 obj<> endobj 185 0 obj<> endobj 186 0 obj<> endobj 187 0 obj<> endobj 188 0 obj<> endobj 189 0 obj<> endobj 190 0 obj<> endobj 191 0 obj<> endobj 192 0 obj<> endobj 193 0 obj<> endobj 194 0 obj<> endobj 195 0 obj<> endobj 196 0 obj<> endobj 197 0 obj<> endobj 198 0 obj<> endobj 199 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 200 0 obj<>stream +"o:yn)醓vTo G4zބ[4X/XKR|K|0Yz2QD.-Sn 0'OG'lzd"H՜KSz1VX[ iũ0!;kgp\PLuNI륺S=kλ+_g-dF +DVh L"O.D1ܠuGA gIܚbjLC 8RI M\Mo9ʽ p-!vUq"Qq/F~c^|Fdr{Ru|)1n 2Yا1౛auO>x_ã~Ƈ<'_3:8i"] +DCm*mY"'ԌSKwhMJ%v\c.1tkkR;"7cqQ+đjiV΄炨tmХݒV2y(iVBѷV06bӘE6HEqtqyQVQ]U&^$gp9*?#au${>|Fkal!&xDk}tG}X2>E.ܕT]@d4^0hٌ/&w FEnPYL 'lQrOƏD` z.*λ bW>h[Xz3i:kSkn3yqIAkl9u`JRPEnGʄ˟e5H|~-Gp*׃ 23xkr#͌=hyX)q`O g Ycegcǀ r1Wn*Zp6VRl]~fR@1lk B\,kPz.hq$)` xn6Fj3!V8KcI1Ѹ?4 <,VO]xuߣh6 +{'VS2@gK6IZ]ZFcbxdP|,GP*}吣4[KtN`0 sc泖Tq<$h[g=4 tTN 47Y_ +I` +Q,QR zE@hٗ-`QMbÑ}^8خ7LdD6fTfU뼫|mL~p{u3'e^vƸ}^Xa/5γ ,;;;iU6ZsN)eF1c#pcd#XwPBT\^J:bJ!ctij7ן-${tM9&8[ ve$g8u^dPy~'uM.k#v:~U-HwLV1k[oXj4$`vqȆSɲճ l_S{&bhMR"aFI؆=]됰7 {z[W.-|&vd߮Z<3ˈn ȂFϤ\*C9=Y&43p1Am)dɈgwJEE:ko0ÿ[F$ubjʲ,§n!n-[l3SiTU|uŔ QʆxvcouPdAZa:Aɩ {jU8Bt+c{؃f(]y +й}^R pS4֔zG3ݗŀg2Rr31FҹRr,%:Gs[$rqv[&9- :Vpl(Gf.|#ȃƅX*[NCم_m`Zhe,,;LGuz|ǁ0^SO9?L'gᛴ[MOaP|fU,nkrWV:Bd%9R\݊On[+& (b hjS` ֦@f~M{c'c +,Dc4^ȱ2= , 6c /9k$Tw䱻qt-: +endstream endobj 201 0 obj<> endobj 202 0 obj<> endobj 203 0 obj<> endobj 204 0 obj<> endobj 205 0 obj<> endobj 206 0 obj<> endobj 207 0 obj<> endobj 208 0 obj<> endobj 209 0 obj<> endobj 210 0 obj<> endobj 211 0 obj<> endobj 212 0 obj<> endobj 213 0 obj<> endobj 214 0 obj<> endobj 215 0 obj<> endobj 216 0 obj<> endobj 217 0 obj<> endobj 218 0 obj<> endobj 219 0 obj<> endobj 220 0 obj<> endobj 221 0 obj<> endobj 222 0 obj<> endobj 223 0 obj<> endobj 224 0 obj<> endobj 225 0 obj<> endobj 226 0 obj<> endobj 227 0 obj<> endobj 228 0 obj<> endobj 229 0 obj<> endobj 230 0 obj<> endobj 231 0 obj<> endobj 232 0 obj<> endobj 233 0 obj<> endobj 234 0 obj<> endobj 235 0 obj<> endobj 236 0 obj<> endobj 237 0 obj<> endobj 238 0 obj<> endobj 239 0 obj<> endobj 240 0 obj<> endobj 241 0 obj<> endobj 242 0 obj<> endobj 243 0 obj<> endobj 244 0 obj<> endobj 245 0 obj<> endobj 246 0 obj<> endobj 247 0 obj<> endobj 248 0 obj<> endobj 249 0 obj<> endobj 250 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 251 0 obj<>stream +P\ ;9芜TzS^qxڤ?-6˖5H1K; |s؀-`hM*` ^" 0=6favtEp͙Jd)&0%$b,B[Ց ߨfܓdͥaM;P#`>׋F*-1rI*u +݂}6 }a$$ۼy!$뒩H=lKƃ% Gc3&[o!ҕi3o[ c hX8T֕IhRWsumhz vQoE)b?a44 SR_q_LnM؎V&;p2_gMFR\/:l>`*;S- 7:ђt,s +@'݌i Env} WBM㭦E` aDux*:2=%P6sg +P фO(o2qWӏEy".|NSA`YKKՈG֨bn(aڂkY'SbRXXri^+` bq&^,z4wPѾsm2|z~@NCu ieLIhGpuᲆ.ʼsm[qL\#"ts}\+4ppjIoT'=ʡ,I35ːF?c.|ɍF71Ev4i"h4@TPN0eDzeN^T\ ֧%# _@<< + /Qs9.YWDyj0bm[ &q){tƟsSz̨s~֫ ?!5H~l)0mI|",&#CL`[kIR.#X\Z:s)ނ8O>(mˬð@'g ! + $؈=˙w&2e,+)Zy8GkR((Z4n@(bnje;I:2U4(\[u:dӅ.hxel1K|FtKuD{G~%jn*ظzyR:)\n[pˇ.! ɖOzUxx5o"'O5@niHoё*!jIn8ooBO eY6ŀqJnHOkit@ +endstream endobj 252 0 obj<> endobj 253 0 obj<> endobj 254 0 obj<> endobj 255 0 obj<> endobj 256 0 obj<> endobj 257 0 obj<> endobj 258 0 obj<> endobj 259 0 obj<> endobj 260 0 obj<> endobj 261 0 obj<> endobj 262 0 obj<> endobj 263 0 obj<> endobj 264 0 obj<> endobj 265 0 obj<> endobj 266 0 obj<> endobj 267 0 obj<> endobj 268 0 obj<> endobj 269 0 obj<> endobj 270 0 obj<> endobj 271 0 obj<> endobj 272 0 obj<> endobj 273 0 obj<> endobj 274 0 obj<> endobj 275 0 obj<> endobj 276 0 obj<> endobj 277 0 obj<> endobj 278 0 obj<> endobj 279 0 obj<> endobj 280 0 obj<> endobj 281 0 obj<> endobj 282 0 obj<> endobj 283 0 obj<> endobj 284 0 obj<> endobj 285 0 obj<> endobj 286 0 obj<> endobj 287 0 obj<> endobj 288 0 obj<> endobj 289 0 obj<> endobj 290 0 obj<> endobj 291 0 obj<> endobj 292 0 obj<> endobj 293 0 obj<> endobj 294 0 obj<> endobj 295 0 obj<> endobj 296 0 obj<> endobj 297 0 obj<> endobj 298 0 obj<> endobj 299 0 obj<> endobj 300 0 obj<> endobj 301 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 302 0 obj<>stream +iuc',j7AtđZA}Uq><0' W,1೻Of9)#\%RNilnrm(;kChCU~BE01DUr ŝ۰W1VTvD-x|eQnDepsjwlZnY!6qR'GBpk0`t(^nIN{#+)\ҹ~sx`Ph;=}ag2p1r}:Cy߲/"װ +z Exo9Y |&wѝ dIh =e4S-mfBhdv[U$;Q (%aNg .$9u]z^_.㻨'әJ75$awt^n∈(J8O# /T ȉ6MV)o1LuiBg$o ';ymEe ^sTo1K0M V; p"rSõ`G-?ĕDa s5\tnR`!eG˒.!Š{P 0k@+:Zw5l[{]f1> BG0u/Xk8.P0癪[+#aq`-k 1A/>@r 1vk )r1~$ f˵E1߁k,RѤ|412\42~V+T13oJ45=52ƐbE9C8t֒Ƅ{Dʳ,Z1RGA;']BB(^>ɚ8} (9apZKׯ1"vݼ7@YSUDF9yX:;ÀatM”%ixb 4g+TB[BƼ U]ey`rGw>ԆVd44B0kcT_nphQ,'f|;Sr7Z#[J#DNxB jxلt)W]>޿4Hd?9hH#9op_`> endobj 304 0 obj<> endobj 305 0 obj<> endobj 306 0 obj<> endobj 307 0 obj<> endobj 308 0 obj<> endobj 309 0 obj<> endobj 310 0 obj<> endobj 311 0 obj<> endobj 312 0 obj<> endobj 313 0 obj<> endobj 314 0 obj<> endobj 315 0 obj<> endobj 316 0 obj<> endobj 317 0 obj<> endobj 318 0 obj<> endobj 319 0 obj<> endobj 320 0 obj<> endobj 321 0 obj<> endobj 322 0 obj<> endobj 323 0 obj<> endobj 324 0 obj<> endobj 325 0 obj<> endobj 326 0 obj<> endobj 327 0 obj<> endobj 328 0 obj<> endobj 329 0 obj<> endobj 330 0 obj<> endobj 331 0 obj<> endobj 332 0 obj<> endobj 333 0 obj<> endobj 334 0 obj<> endobj 335 0 obj<> endobj 336 0 obj<> endobj 337 0 obj<> endobj 338 0 obj<> endobj 339 0 obj<> endobj 340 0 obj<> endobj 341 0 obj<> endobj 342 0 obj<> endobj 343 0 obj<> endobj 344 0 obj<> endobj 345 0 obj<> endobj 346 0 obj<> endobj 347 0 obj<> endobj 348 0 obj<> endobj 349 0 obj<> endobj 350 0 obj<> endobj 351 0 obj<> endobj 352 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 353 0 obj<>stream +&$^ΐ":U/VLܒ=;KC͍¹{Qd#ydͦ;#2j}߯"LW~ d9$To]|{>;Fubb P@ӽOZTޗ[Qtn34L;ٔ"rۭNx*.W:Qn'Gꩥb*0KuPFg-^rgtqgؖL> +<79tC2I}NrCQa~Qx_s| mhQyc ^,83?#n`pW@w33e Q!{;#_"Bj +qF7"Eq# $,Ǵsɠ2=jNRCyn.ǤuNNkBR@ $Wg%YcͤA:tik +=ǎ*5ѕ\aB.l ߕVr)FCO:LKѨr]Y;OU}W\R0y#/2tVm[<<ŚY6r-3b<! JuKZy휤DX$6*0Ayץ $|Ksp84iVDNxSpj:aBL04?xjy +!Q׊!s;e7k(rЧOXL>54Xwg%mZEg+fk!\xEUb`DOܜ 8 +Y\*4{haeH}R0Y ~dû_vHBhǮ3TEp*7[̣y^-2(,uu~=,8\2 *N`T$}fd?朻ARdXQNI?%!+z5 +Zkś]lBbq7` +;ؾR>̨} Fu>6f/GډdښKua#/FiNhu:{Ԟ\\ixml ?@RDJ*^+yS;ΔӁ6肧 'Ohi3DŲ=X_(BaHܚtX^u +Ć:05gtf#DZ]XWߠX3}`[ƍš؆o@(L= FvHJjVuC 6EpC4>[+9XYV@ oB)ҮrN~2ʍ4L] 72t\)>^rlq_<(4+F[Z}qL޳C 'L ҋ"t)k)k"_%ФCGjnDg»st/f(Lrh9\|N ԊGM*)h> ]1/Ӆ6˫ yZ$(0 c /ln Cꪧ,Pm6 g*oAagc< 6nYVB1Fn-[1nj_K Zai%>v-I`R=.-!s0uΠf:ZlEgxqVI.5C_eCzz?zAL}1Nv$(fh>f[>,tHk[hla%Z:UۿUM";D-u=8nGiDϥA`Z:!0 R[ţD. +tf++{dW#yB@\02v>;A I o=BS1=/;UHr]qp5͗_lPH4 5oϔL%C{=fB.h\Mm g=:_O+#OE2P˄w&j9\}3ٜ@ `bY* jhO +&3oęF=2Z ,p|䎣n&u4; \ZcVi{88%&}lk"EզKt>%͞I{` c\CX>C>ڏ(aNԭd^4FNI0㗕TU $S@L$o7G6fNܪL!Y Nي] +endstream endobj 354 0 obj<> endobj 355 0 obj<> endobj 356 0 obj<> endobj 357 0 obj<> endobj 358 0 obj<> endobj 359 0 obj<> endobj 360 0 obj<> endobj 361 0 obj<> endobj 362 0 obj<> endobj 363 0 obj<> endobj 364 0 obj<> endobj 365 0 obj<> endobj 366 0 obj<> endobj 367 0 obj<> endobj 368 0 obj<> endobj 369 0 obj<> endobj 370 0 obj<> endobj 371 0 obj<> endobj 372 0 obj<> endobj 373 0 obj<> endobj 374 0 obj<> endobj 375 0 obj<> endobj 376 0 obj<> endobj 377 0 obj<> endobj 378 0 obj<> endobj 379 0 obj<> endobj 380 0 obj<> endobj 381 0 obj<> endobj 382 0 obj<> endobj 383 0 obj<> endobj 384 0 obj<> endobj 385 0 obj<> endobj 386 0 obj<> endobj 387 0 obj<> endobj 388 0 obj<> endobj 389 0 obj<> endobj 390 0 obj<> endobj 391 0 obj<> endobj 392 0 obj<> endobj 393 0 obj<> endobj 394 0 obj<> endobj 395 0 obj<> endobj 396 0 obj<> endobj 397 0 obj<> endobj 398 0 obj<> endobj 399 0 obj<> endobj 400 0 obj<> endobj 401 0 obj<> endobj 402 0 obj<> endobj 403 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 404 0 obj<>stream +ԍҕw+빜S , Je(d +y=g? "̛9 1+20\\hvj %Kڠ|BTl:2wp߮4LdmyO_ SԐv}Nw88\-ɚU3qNlP# LGby]{]d"KqڲA;/kL)_[S&ܑjuxY>.) J#"H2oWDj։VI@ Gfn >O$A(6Z 7 AІЍ6҃07t ^H &l*6nk` sO~,R0{؊g+L65,ޮclZ^o]w2PaVx mUC:ҺWN]"#ɐ쯢z Pّ T?5;kZ&NCBwg\t +N )7+(% nc.k}7~(Ϫaƺ j\,S2H7; 6Wဪ_X%I>Ü &gu_ +:(gSmqb= 6Jg\V%:& 3fȾ_6uPE z^v?JsB}* +s 7}ՅעcEҐ1j6zc*ⰼ0LpvQKpKϤϺ%(E"4t\'Z`.Bt~y3Odm +?\rJԳl72D',}kSw(#baV S(TѩpfLko\ɾ$Z?m&.EG;BT t`b`*k %}JX-XyD7/[^kFMSw@)ৌrQg+h~gy0ƓNĬ~׻h;̑3 C @mx;)lxp@8<љ_HX7LEˀf18"hw@#@kV{Y~sݖ [)Q+(u @)o۶sͰ!-۞M駪nZms+ާr!P({OvuD˯!7F$v\h*d r- .TnGI 1Q9mI w̿$YEs%S&=- 5baQI3vfz*f>|]X/duf\{iiyIm|X5ϻqn.֤BZ捰l,(,>p&f3}{Ʌ~GW{P=M .\`t6!͘z|L_CHhCz䭖^R|Eed,N}^p?YwǛy֮UGOnh-KSc~L2lp%,$-+;F[UǤs2@Xۊ2" 9hLK䈥 t]czbGi "1IiQ TqhYBRgKE<z6A!aCUV_ODE:ʨN?7E6Z,$Wf߳+q'AszhxզYѭyYۺmmO5PZg023jJf[N7c ! q%^.ER^,waqhCix^KbN`ǫA^11{e5/vvJi>:(_sU+a`QkpL :LzNWy4pe&UDOܚq 89W~gŰe'q> endobj 406 0 obj<> endobj 407 0 obj<> endobj 408 0 obj<> endobj 409 0 obj<> endobj 410 0 obj<> endobj 411 0 obj<> endobj 412 0 obj<> endobj 413 0 obj<> endobj 414 0 obj<> endobj 415 0 obj<> endobj 416 0 obj<> endobj 417 0 obj<> endobj 418 0 obj<> endobj 419 0 obj<> endobj 420 0 obj<> endobj 421 0 obj<> endobj 422 0 obj<> endobj 423 0 obj<> endobj 424 0 obj<> endobj 425 0 obj<> endobj 426 0 obj<> endobj 427 0 obj<> endobj 428 0 obj<> endobj 429 0 obj<> endobj 430 0 obj<> endobj 431 0 obj<> endobj 432 0 obj<> endobj 433 0 obj<> endobj 434 0 obj<> endobj 435 0 obj<> endobj 436 0 obj<> endobj 437 0 obj<> endobj 438 0 obj<> endobj 439 0 obj<> endobj 440 0 obj<> endobj 441 0 obj<> endobj 442 0 obj<> endobj 443 0 obj<> endobj 444 0 obj<> endobj 445 0 obj<> endobj 446 0 obj<> endobj 447 0 obj<> endobj 448 0 obj<> endobj 449 0 obj<> endobj 450 0 obj<> endobj 451 0 obj<> endobj 452 0 obj<> endobj 453 0 obj<> endobj 454 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 455 0 obj<>stream +Bۤ\ti?T6J}bBY9b?^ο +?̢E.`E--bJ\8v!2".>xYoʝe .dȐ]es;ݬmGiީ}mU]Mnggs*ns +!I-8[D}d}_{ch3v?r\cǪ ^ǍtMLך̵՟mrIY#%pX0VJ6@!;Ô;w٥ Wo[;f!˄_k"825Ɩx0O֖ggDBȅ0qOgي65>-ۏ\5>.g1;OYS!#+`rB.mx?nױn`lTdV,)Ni&> %G9'ng0)2vb\ܒoy4|S+RN`_1A߷;2HG[us- giʨ=AfFjdTS Q:Om|ӝ\Yo@nr(`O +p*۾Z\}~Sc$;7 QaαyeO t"a$Bc7D< qӔ0YFTn*^׭{ +"\/l{]6ʚF]S#K{8rȜc HGGs J56Lmhq0thPne,xn Mn8+bi?y޷p|Y9җnp&|XĐ'!yfECڬ͎Lv g"^ +endstream endobj 456 0 obj<> endobj 457 0 obj<> endobj 458 0 obj<> endobj 459 0 obj<> endobj 460 0 obj<> endobj 461 0 obj<> endobj 462 0 obj<> endobj 463 0 obj<> endobj 464 0 obj<> endobj 465 0 obj<> endobj 466 0 obj<> endobj 467 0 obj<> endobj 468 0 obj<> endobj 469 0 obj<> endobj 470 0 obj<> endobj 471 0 obj<> endobj 472 0 obj<> endobj 473 0 obj<> endobj 474 0 obj<> endobj 475 0 obj<> endobj 476 0 obj<> endobj 477 0 obj<> endobj 478 0 obj<> endobj 479 0 obj<> endobj 480 0 obj<> endobj 481 0 obj<> endobj 482 0 obj<> endobj 483 0 obj<> endobj 484 0 obj<> endobj 485 0 obj<> endobj 486 0 obj<> endobj 487 0 obj<> endobj 488 0 obj<> endobj 489 0 obj<> endobj 490 0 obj<> endobj 491 0 obj<> endobj 492 0 obj<> endobj 493 0 obj<> endobj 494 0 obj<> endobj 495 0 obj<> endobj 496 0 obj<> endobj 497 0 obj<> endobj 498 0 obj<> endobj 499 0 obj<> endobj 500 0 obj<> endobj 501 0 obj<> endobj 502 0 obj<> endobj 503 0 obj<> endobj 504 0 obj<> endobj 505 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 506 0 obj<>stream +P` + '})*k~L;ӅdZ-NS*1WLGɒ]<`1'G +(3=e'R Ϭ07#=)3rn=lVFhw2Z5 + fp>Z,Xz˂ 4NNR.& +YE7S8ɨ\ xJxuAht'/*fRGrߟєa!n9a3/nN3#/]*QJ{HΖ9~!ÉV vٲ_D &-U_v LLAMhP}r]G#t~d0-JЧ#icKsEaޕ[cC'k?0$FSXhg[|<%i$*X/矜`8U"RM ctJMelANΘ)h=ÔC̈C|r|e ` V-퀹p0RqK9bmh; kL[^NnHqS:,@{g+T_[=E]h02P2ⲌD^tqx̍`\HΡ.Bq|$$(Ǵ^ԁFWixkM]Dm+ZqM|埖uTT!-WOZ5XAx.DL 6J_(IE_mJ'Ez=(h2>۔⠘kAV#eo'.5$I}Hy&$UP J 28/d[nluq=g [)V0h45P\DQe#g「T#Q?z- 2 &)V32ND8%XAc#梋;}, {˭8e^PzWA}stj7E0kËFրz b:x9pDm%?3,B%I90l3 +G.+et9 LKyl7B;Y!C@WvHO.Z^BK3yh@ ,39ɛTK߂DOf 8rT% G]LRtmjoGKzt"uL8j3 y^S~n< XI߸IurrM +%_JjH&g.H!iʌ0I~+e=4{|1wn&eq9uz\Z8 LXV.#fRC3/uA{& H2*ħB#ӵfROFDAQ/֮ȓ&̉(;1_VAfA%<(o]A2^!;c~WhI07j`ԍ +tT/,OG>'H#n$.Pjc]f2C W[5Y4\6~K'D]#c\ -Z*x=/ʓ+A?7& F|$m7m[OotmW3efA(Q`MSOF|qOW7-1#s%~q< _ȉ$MzۨF,8cETsl:rKk>X +]U*ׄpjǚ蟕ov5̞e.pӭ`w?l>]Sj0odCPHɗN!F+Ja۰љԟ&7l(˻VXy3#汱+GK껡s^ i7VqUqt90X~zH +7(XГE<6$ +endstream endobj 507 0 obj<> endobj 508 0 obj<> endobj 509 0 obj<> endobj 510 0 obj<> endobj 511 0 obj<> endobj 512 0 obj<> endobj 513 0 obj<> endobj 514 0 obj<> endobj 515 0 obj<> endobj 516 0 obj<> endobj 517 0 obj<> endobj 518 0 obj<> endobj 519 0 obj<> endobj 520 0 obj<> endobj 521 0 obj<> endobj 522 0 obj<> endobj 523 0 obj<> endobj 524 0 obj<> endobj 525 0 obj<> endobj 526 0 obj<> endobj 527 0 obj<> endobj 528 0 obj<> endobj 529 0 obj<> endobj 530 0 obj<> endobj 531 0 obj<> endobj 532 0 obj<> endobj 533 0 obj<> endobj 534 0 obj<> endobj 535 0 obj<> endobj 536 0 obj<> endobj 537 0 obj<> endobj 538 0 obj<> endobj 539 0 obj<> endobj 540 0 obj<> endobj 541 0 obj<> endobj 542 0 obj<> endobj 543 0 obj<> endobj 544 0 obj<> endobj 545 0 obj<> endobj 546 0 obj<> endobj 547 0 obj<> endobj 548 0 obj<> endobj 549 0 obj<> endobj 550 0 obj<> endobj 551 0 obj<> endobj 552 0 obj<> endobj 553 0 obj<> endobj 554 0 obj<> endobj 555 0 obj<> endobj 556 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 557 0 obj<>stream +=L"Ff.b*V)3ؒŪ^]\f7ʧhE7&śp^zf/gȞ:Pjgz7Us6eϙxDIJFk .מCz<)I+iH7V ~`t;$l̰ Bn>mt3LNuqwɤ X 즬HBLj&MLROVp=4\\6.T:,0M]tOh#Л;{]z̽0*q:d7mq +I045^X''hЃN˅XHxCn ++Ic8"wkPϿrP`3xbNoņ\#V#< +C0ͽE~ fhUΠt%zUo_, DmK'>@ `\d͉NcX\$;j~hwijIjdd T+Nb(#UKYUfR1AAtoj+(~qNZ}MLCl-l vR/Dg~Dý*XTL׬'6 ~1gjTIڒRPEd dx!|"`[8Q;e[- $U4 *fWbG|edP#|_ljmr˷~aetcNiÎS9ga%=EA.cސ>:4w&gonuO& sZ*\R*`Ҍ?%KMSkt N=%[Z}"A 겧Fm3R^d?ߜBT '+l:v$ h(ZhXGXj{Ʒ5P>0{A.8?%18`(FBV6v˶Dߢ.MBޑηXBrY4wGiS N^Yn=_. "w|,[T(gdr%.4etȇ+@Mמ&~ +jo(L'RdH@6!j. +MFaH8rc)2K) 58(Ռ;ugIeA@3F'b6k<:9eBBk@Ibju}_&BPu\PbZS'( !DcSm'+ylVG/e{㿑C/BvrNP'FMey$T@?WqZj }ܕa}͍9cV[=9Y 5Eh^Onu&;JJ+LscY%)H\"FHA" .hEwUF.n1GZ@_%TultѢ~0Jh`/Mhgg G!=ty.ɍflFc-j᱕cpa# t]h3K0®[o\2e5TKnd +fu%ܤr +G~@g@g%/R䋆p]i/-2%֗"f\WZp3v6N at!AE䁑̞Yp +"+eHMuxBmTSӵ13 mou]-Z,;<"Jl7/0M 6;v"+Q"#n,cVs2v$4UWQ+ % ,킢{۪lT]|{S"+pQ_S3N =R~ U΍#CH}K4mlfhGI^aPͷ1:ki~aЂ,{#=, +endstream endobj 558 0 obj<> endobj 559 0 obj<> endobj 560 0 obj<> endobj 561 0 obj<> endobj 562 0 obj<> endobj 563 0 obj<> endobj 564 0 obj<> endobj 565 0 obj<> endobj 566 0 obj<> endobj 567 0 obj<> endobj 568 0 obj<> endobj 569 0 obj<> endobj 570 0 obj<> endobj 571 0 obj<> endobj 572 0 obj<> endobj 573 0 obj<> endobj 574 0 obj<> endobj 575 0 obj<> endobj 576 0 obj<> endobj 577 0 obj<> endobj 578 0 obj<> endobj 579 0 obj<> endobj 580 0 obj<> endobj 581 0 obj<> endobj 582 0 obj<> endobj 583 0 obj<> endobj 584 0 obj<> endobj 585 0 obj<> endobj 586 0 obj<> endobj 587 0 obj<> endobj 588 0 obj<> endobj 589 0 obj<> endobj 590 0 obj<> endobj 591 0 obj<> endobj 592 0 obj<> endobj 593 0 obj<> endobj 594 0 obj<> endobj 595 0 obj<> endobj 596 0 obj<> endobj 597 0 obj<> endobj 598 0 obj<> endobj 599 0 obj<> endobj 600 0 obj<> endobj 601 0 obj<> endobj 602 0 obj<> endobj 603 0 obj<> endobj 604 0 obj<> endobj 605 0 obj<> endobj 606 0 obj<> endobj 607 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 608 0 obj<>stream +&ė60 |9M\Wn9?;̡A͵2!Mbl_5 \i}hd,1ѿX [{ bXp'gI^ FN f5;Lfn4% q3^Wfu3#VzҌ4"NM?c@G;AEhǫ;lq WJF&*DJȊoL2t +.[z-$nx൛kD#TCtVL4utcMs~6R)$dk*>I MU9,BXǒXK#U`S]!e+S-3R H=*ѓtOzh+UO6&VlQRkY>>JGۄ"'^(07Cku gh*Nm39i:tV(-r|zr]@rn^@Ϭ`{ںZҀYjipOw+ke/"`ZRW'2 o<"4aMۮ.LX8/h7V6쨲 v*W!z3_$tdjFAsmDsvMr@{XP%ͼ˅O&︍cJUV, uthv]+%gFPr"f!_^sʈL/M>Jr?(E="d+& 8E3kP!DA`Ҹw|įvbII&L}˺wǹb{zQ֡yӼ) ]h E$,ױ6oG +aR0`n" V\u.} +8bm)+Ws懅{?>Ȩ%B2!|\\\xe;Od֜3pdb +)S(l$a`l$5_~ ~2D\HG'0!TS1N1F9_ǃ_x =-)*lq:? a ~[CXĨ#X YW /csU6~&=D\?6"aV#FX&t5(5kN;lr`#jqITc +~}۩  o1)2cly*AAK3xUYa.utdd+}Amp'v޾"cHZܞcCrD#ksd7b~u8e=Sf%DQv +$3 \|@H"W3 cB1ʾBI X= 2[ +WF~NviH]-H%er[Cj%IR~Ƿ[}Rly1|Q +=m5.:[9s U_  xhŠgKoFCgNc2m 1ApJK]yw5Myj9ʹg0 2n+\/Kl׸0'=ђo~ο0xNO[&/$pf䷙ +1Pܸ^UIvZ5bBM0V!Ы6֙:)P}p78H[f8#$/ +D6Lj\k|w-@Bn[5 σal]P3?2^YlxT6*'%h{up,~v]>DzZIJY^"l1cB1|FDC7DTԙrjA^t"j]zg1Hñ)e(P5F[eOr-0~n41sM E2|= NZXi^g+yٵs(‰9v"Tv}aV]/.lyœ)W-ٹ@4 %KƜQS/q+JM$?T?-p]) +endstream endobj 609 0 obj<> endobj 610 0 obj<> endobj 611 0 obj<> endobj 612 0 obj<> endobj 613 0 obj<> endobj 614 0 obj<> endobj 615 0 obj<> endobj 616 0 obj<> endobj 617 0 obj<> endobj 618 0 obj<> endobj 619 0 obj<> endobj 620 0 obj<> endobj 621 0 obj<> endobj 622 0 obj<> endobj 623 0 obj<> endobj 624 0 obj<> endobj 625 0 obj<> endobj 626 0 obj<> endobj 627 0 obj<> endobj 628 0 obj<> endobj 629 0 obj<> endobj 630 0 obj<> endobj 631 0 obj<> endobj 632 0 obj<> endobj 633 0 obj<> endobj 634 0 obj<> endobj 635 0 obj<> endobj 636 0 obj<> endobj 637 0 obj<> endobj 638 0 obj<> endobj 639 0 obj<> endobj 640 0 obj<> endobj 641 0 obj<> endobj 642 0 obj<> endobj 643 0 obj<> endobj 644 0 obj<> endobj 645 0 obj<> endobj 646 0 obj<> endobj 647 0 obj<> endobj 648 0 obj<> endobj 649 0 obj<> endobj 650 0 obj<> endobj 651 0 obj<> endobj 652 0 obj<> endobj 653 0 obj<> endobj 654 0 obj<> endobj 655 0 obj<> endobj 656 0 obj<> endobj 657 0 obj<> endobj 658 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 659 0 obj<>stream +VȘCh'<Z+qwXv"$^&?P_;Y Y*jiyK`9֛v֋B!ڶBgőC >%b +<՞|K2c᝘)OH8d]Im21qtUၒZC_'hxA8 /U ‹jPd/'djKlMɐqt0?R$e?9ng߶2hs}HU|RS)R!je+/K@S/ b;Bcj37݂Wc_ M"$gMv+ 'ڞJNr|A{Iv&ؖ05yЬ9b5|-M#A|DZ"X|\/!LnZ9[w{4tP!CB.pX4})1*C'C^[jkQ@wy?Ū(y>DG n5/ ְ)%c-jҎGK'1=VӺ~kʻ^ΏYOfi>\|Ɔaf:z({U>mt OEWm"}wv=ӨZ( .t@k<:Z9~FY+-bt;7WҒ#3, )ШП; +mdcڻm8 RmzP?dPZɝ;Z.TA_ P{ݴu~M"@ל3X{u |^<.ͣw]CVћQ]9>d 1U^r6~b$ GY[WgiJq/S 4>?à"-f`3FDVqzh˗/{z-sհ(OՉav3fpCl饵r3!fCo}H#YgvB82{h뢄Dfs0FDc3Y +5gðʵP*8a"Enm_cq>/[,.gڤ|OL*;nzwEcH%`I v/9霢?r}˺]_YU?GeR)oԧY Mč-zyq4;vgr +Eop& z + C\Vq;*;mO|vLνTYGZ-!?q@#qN .cQvB=#;C7{ zijdУ6%Fk5 ۴A.0P} CTYEn14&i +ҩ &>8n!>䡢2ܾ1O֧UR )[ԳLq`6*!ʊ +tД5~*8Dn7fͳV, A^]܁KӚ/F4cb'EW+[б &R*7yt{L=VX C%ۡ#%V޷XYi6+/bērÄAgI%NNT}pOeֵnbOf$yӠ, +endstream endobj 660 0 obj<> endobj 661 0 obj<> endobj 662 0 obj<> endobj 663 0 obj<> endobj 664 0 obj<> endobj 665 0 obj<> endobj 666 0 obj<> endobj 667 0 obj<> endobj 668 0 obj<> endobj 669 0 obj<> endobj 670 0 obj<> endobj 671 0 obj<> endobj 672 0 obj<> endobj 673 0 obj<> endobj 674 0 obj<> endobj 675 0 obj<> endobj 676 0 obj<> endobj 677 0 obj<> endobj 678 0 obj<> endobj 679 0 obj<> endobj 680 0 obj<> endobj 681 0 obj<> endobj 682 0 obj<> endobj 683 0 obj<> endobj 684 0 obj<> endobj 685 0 obj<> endobj 686 0 obj<> endobj 687 0 obj<> endobj 688 0 obj<> endobj 689 0 obj<> endobj 690 0 obj<> endobj 691 0 obj<> endobj 692 0 obj<> endobj 693 0 obj<> endobj 694 0 obj<> endobj 695 0 obj<> endobj 696 0 obj<> endobj 697 0 obj<> endobj 698 0 obj<> endobj 699 0 obj<> endobj 700 0 obj<> endobj 701 0 obj<> endobj 702 0 obj<> endobj 703 0 obj<> endobj 704 0 obj<> endobj 705 0 obj<> endobj 706 0 obj<> endobj 707 0 obj<> endobj 708 0 obj<> endobj 709 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 710 0 obj<>stream +2_4[oCʦ<\5hs9ے7[XX0^bhy[+qCԳiɦͮZcEи] ^1& >:Y"dSJCŸ ꕲϱ?a@w}MrN4FZ4G}3t ƃ %:G2e_AWOEˉyxOݐOBaJK!uKJ8|4/1؉|>KGcߊEX:1ԥˡ*FmЬsɧK=QKtI[ E#x(]EJZ(+17 7oƳsbGMvDȁ 䶇l +>G +J&K?*z +<T*gX7i\kۏeAH˝Y hf $.mNbT&Å%`䅆SX`HyV~O +endstream endobj 711 0 obj<> endobj 712 0 obj<> endobj 713 0 obj<> endobj 714 0 obj<> endobj 715 0 obj<> endobj 716 0 obj<> endobj 717 0 obj<> endobj 718 0 obj<> endobj 719 0 obj<> endobj 720 0 obj<> endobj 721 0 obj<> endobj 722 0 obj<> endobj 723 0 obj<> endobj 724 0 obj<> endobj 725 0 obj<> endobj 726 0 obj<> endobj 727 0 obj<> endobj 728 0 obj<> endobj 729 0 obj<> endobj 730 0 obj<> endobj 731 0 obj<> endobj 732 0 obj<> endobj 733 0 obj<> endobj 734 0 obj<> endobj 735 0 obj<> endobj 736 0 obj<> endobj 737 0 obj<> endobj 738 0 obj<> endobj 739 0 obj<> endobj 740 0 obj<> endobj 741 0 obj<> endobj 742 0 obj<> endobj 743 0 obj<> endobj 744 0 obj<> endobj 745 0 obj<> endobj 746 0 obj<> endobj 747 0 obj<> endobj 748 0 obj<> endobj 749 0 obj<> endobj 750 0 obj<> endobj 751 0 obj<> endobj 752 0 obj<> endobj 753 0 obj<> endobj 754 0 obj<> endobj 755 0 obj<> endobj 756 0 obj<> endobj 757 0 obj<> endobj 758 0 obj<> endobj 759 0 obj<> endobj 760 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 761 0 obj<>stream +imFQރهW";agh .ʝewubLڐ5PЦנXqFzܿ!a/ tN/V7of\^2 z Rr͘6_3Nɛ΂_ZϘ[~)+ +TZ_hJ]6">$]}A$^늭GD`FTvl5a^06r6J>bulPF$ ߤ^'V*ͧj|>5z31P2$&B|Hl0\x5MNy]u&% +Lw&b|Ejbw4,@*VGo 篋!CsYй7 p`R֖U2$8Qzʚnّ~́^NLrU'Jw*[v1*`Š:T%5GҎŰ0.F +`Fs +)o`IB (Z=z5\VGwG_vHbp &pʷ7 r8SmШ"F3lEW￙xxv{}t)Ћ _lu z]@og}0b5dCpxӔWZU6e2ڡ3cl'Q : ~nr/4ܼ*E<]nQ>`/{ 4: S$"0PU~Vo(2bL@o6S xlũM;; FV;5{^,Hql$ny1#^iA*ߒhIXϟgc^؏=ʈ;+Իp`cϹˎZ/"RNFUudaP?&ڔ/PG*݇3fF!1D2R/ۿ +'y6%N/ӈrK%yHJ}{Ruъ9/OlQ)F +q 7NQJjzT;qyO-Q&uvMjM,j.c_!AKs/3mrSGLqNTR-KEh?Ƚ%˕ +y\i:&[;;Zuuu@o˥:E۱>yTXMo5}G UY` j +))ີY|Se4ߧN}(r(b3[] +O,BQ1iLór|.fj hFB cIP~G%m1s$Z|fݠ#nzzk ܆M%$(AH6Y]Ɠ62OGM @봳׏EA@4pq_}e ^.ȈMXt~)İy=✆b%3d=Lڤ3̋?,+J|pq Ɂ惤1(#oL(P֥Q,0_olkq? xP[7MB,-;иr!>oQ ,.G-ֵxt^XpjD 3rcQ~-x#z-ǐ` ^GOwdܔ"][PA=@> endobj 763 0 obj<> endobj 764 0 obj<> endobj 765 0 obj<> endobj 766 0 obj<> endobj 767 0 obj<> endobj 768 0 obj<> endobj 769 0 obj<> endobj 770 0 obj<> endobj 771 0 obj<> endobj 772 0 obj<> endobj 773 0 obj<> endobj 774 0 obj<> endobj 775 0 obj<> endobj 776 0 obj<> endobj 777 0 obj<> endobj 778 0 obj<> endobj 779 0 obj<> endobj 780 0 obj<> endobj 781 0 obj<> endobj 782 0 obj<> endobj 783 0 obj<> endobj 784 0 obj<> endobj 785 0 obj<> endobj 786 0 obj<> endobj 787 0 obj<> endobj 788 0 obj<> endobj 789 0 obj<> endobj 790 0 obj<> endobj 791 0 obj<> endobj 792 0 obj<> endobj 793 0 obj<> endobj 794 0 obj<> endobj 795 0 obj<> endobj 796 0 obj<> endobj 797 0 obj<> endobj 798 0 obj<> endobj 799 0 obj<> endobj 800 0 obj<> endobj 801 0 obj<> endobj 802 0 obj<> endobj 803 0 obj<> endobj 804 0 obj<> endobj 805 0 obj<> endobj 806 0 obj<> endobj 807 0 obj<> endobj 808 0 obj<> endobj 809 0 obj<> endobj 810 0 obj<> endobj 811 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 812 0 obj<>stream +[l;v>z`v~p\BǓ\-nāI[ၔ㫮 ϒ)ԓP2_EdIaכ夲`:#J ?&;%.O/mHo6ʼn՚@8w@DC&`L1vti ?,M a[,'ϣUHcS+yzP5OP[8cHlx&EU<\{oER_V{\;0~*YAv"],Ԩlғ6dK +Hk8ο(5OTwePIZ >G&J % s[3k,n'W*f$+Ĉq'D7ӡfYԿt ?5쎦W^ ]z^\cr¦;)}4bd>m:r$y*l4H4v}q3]PX-G"[O(;6D+nuKزc[Z09L6$Zta*̟gs}To2g'Jkx7~Jǭ`'@~gކÈ6B)U>K-z9B,;c'_׬$,\u 2?'N4M[yfSkPAR/hy߅V>ԫŸ߶sSa9YJx0[~%td^v%gJS Z.X27  ];Gm +v‰`P¿ݷj`j |NzpA&3\EP Y}e9ʨDMd+%Qe܌.|D椛Tw ʛUk\+dOeaX(X>VNu1M^%0F{@kd$O1t)qRܳ)MBSy12 Z;s\< Rɨ< `Cnz-40v4 +39rJ1)XEt`3*&5t>4(1~67 O9^(=[ 4Y{7syV:M-ۏ9cK#B@[^8J>U“Ѽs5ղNn" +:0]W[γEyEjuzf@r*?wR6qSWIu`Ԅ$ G.cY ;gѥɛ)%Y, 2J%% } y`n +i +D#fhdM|:ZC.X2^|ᡜAKҠn}r3Q{ ~_c1n0*7 +T@&ď"@| c"Zj\TEiA$ƿ]W>74N(@;R$e +endstream endobj 813 0 obj<> endobj 814 0 obj<> endobj 815 0 obj<> endobj 816 0 obj<> endobj 817 0 obj<> endobj 818 0 obj<> endobj 819 0 obj<> endobj 820 0 obj<> endobj 821 0 obj<> endobj 822 0 obj<> endobj 823 0 obj<> endobj 824 0 obj<> endobj 825 0 obj<> endobj 826 0 obj<> endobj 827 0 obj<> endobj 828 0 obj<> endobj 829 0 obj<> endobj 830 0 obj<> endobj 831 0 obj<> endobj 832 0 obj<> endobj 833 0 obj<> endobj 834 0 obj<> endobj 835 0 obj<> endobj 836 0 obj<> endobj 837 0 obj<> endobj 838 0 obj<> endobj 839 0 obj<> endobj 840 0 obj<> endobj 841 0 obj<> endobj 842 0 obj<> endobj 843 0 obj<> endobj 844 0 obj<> endobj 845 0 obj<> endobj 846 0 obj<> endobj 847 0 obj<> endobj 848 0 obj<> endobj 849 0 obj<> endobj 850 0 obj<> endobj 851 0 obj<> endobj 852 0 obj<> endobj 853 0 obj<> endobj 854 0 obj<> endobj 855 0 obj<> endobj 856 0 obj<> endobj 857 0 obj<> endobj 858 0 obj<> endobj 859 0 obj<> endobj 860 0 obj<> endobj 861 0 obj<> endobj 862 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 863 0 obj<>stream +MQ<=İ;!6eVB/hz7b'\kBrm2gmz +·|,w#`"?7޽;#ZO l>ZeMA6m ;}1$G@OZ"'K!ć|ϟ']E:l?YVhϵ2Ϲ(dHBCo`W]h|aTܿUثdzs6`8tWfe@/YOn T=jMSH}2DܔB}bJ_+TAC 17|Y +%; X㦔 +6J\;|eI$gl T'K_T;ɥF\m?_Zyvpl9N 8eߙm9[A=:H7t 5h"â?)tNVCg=$Azq7h|tƓdRiuMS,uL#总-; j|1(fdNIzJZNGlخ0 G |.Q_w5qghKe\9X5 rPi- hr:I!_qmc?˾unD~X.GlquuZ+3" ^ NaDO< Òn>ֺ؁=X#iKcB ,hdYbUռ?>ѝmEJi[7(NS%QQڑ+JFYH䥗cK `2 -ԁ *F'%ƙS 5lu$d*#M4f=!oj_t %jX{ +Qfn-fI1LjynzbIZNJ6#b'c\r/'ْ,HYۥ zE \a2h1_`' A ՌR:ī16]4QJ6ޗ[MUn-x#,r2l Yb7^tQүz/9Y$w=ѐ5sSc!(qD٠UIv}C&Y5rtnT2վPHb*~NlI y)Ȟ[/(ٴt.EAw˳ +z&듂yN279LɂK *t%;cN" N:R6f_ +endstream endobj 864 0 obj<> endobj 865 0 obj<> endobj 866 0 obj<> endobj 867 0 obj<> endobj 868 0 obj<> endobj 869 0 obj<> endobj 870 0 obj<> endobj 871 0 obj<> endobj 872 0 obj<> endobj 873 0 obj<> endobj 874 0 obj<> endobj 875 0 obj<> endobj 876 0 obj<> endobj 877 0 obj<> endobj 878 0 obj<> endobj 879 0 obj<> endobj 880 0 obj<> endobj 881 0 obj<> endobj 882 0 obj<> endobj 883 0 obj<> endobj 884 0 obj<> endobj 885 0 obj<> endobj 886 0 obj<> endobj 887 0 obj<> endobj 888 0 obj<> endobj 889 0 obj<> endobj 890 0 obj<> endobj 891 0 obj<> endobj 892 0 obj<> endobj 893 0 obj<> endobj 894 0 obj<> endobj 895 0 obj<> endobj 896 0 obj<> endobj 897 0 obj<> endobj 898 0 obj<> endobj 899 0 obj<> endobj 900 0 obj<> endobj 901 0 obj<> endobj 902 0 obj<> endobj 903 0 obj<> endobj 904 0 obj<> endobj 905 0 obj<> endobj 906 0 obj<> endobj 907 0 obj<> endobj 908 0 obj<> endobj 909 0 obj<> endobj 910 0 obj<> endobj 911 0 obj<> endobj 912 0 obj<> endobj 913 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 914 0 obj<>stream +0#F^7d}9bpRD /}2Q2rp}8˒$wk(C-/^O]C:sij ݶk;)j3,W1oaJeA9nPʙM/N P +A ?=N" oVV-̣wDv4w[jpc̘iRj$D^MCp@{-=hwԝ䣔Af1I !cEجA T́h3 +B\ُu(fC2`[Z5N+W9jL(bZp|}mf9=(a\w*M ZRKφ)\c17wc)i 'ԕ׀#jt1uYPÄ6:zͮVlp4&%s|w!%mi#[mlF +O YgI +hðQP\?ADGVȋfN`Fڒ~Ib(j*!y7i̕|JRøV3^9_G&2/Mڀ@iǎR8{ў5}hIý~#WBZ_IE|P6|U7vD3ZCp6Eq'_~* k#i}{@`VJڅfsJ'v[;5OWoFo*xj/57սǪן:<ɽۈ$Jд+QN6'?N᳆EiZ[^@.D*Ž6YS`qNC: |5XJ̐ۄy~I@Lt}Iٵ Yw9$,طŦ(28C}X T ФҺ7ԛI[52DC|UzǑie0g\bP_0钘y~i9dgɹQܽA+\cO1 !@3-axE.R,+l.9$מP2=[1zbIf:0`j[-~aF'CG𫼀8a;G0Վ=E}`z&1_xN7uor +%z59>:K tx)cIР5㜟f*\&֕Q69e,Q嫨|ZOڮ;vNc{i)!Gb< !]'W\vժ\P9 j> endobj 916 0 obj<> endobj 917 0 obj<> endobj 918 0 obj<> endobj 919 0 obj<> endobj 920 0 obj<> endobj 921 0 obj<> endobj 922 0 obj<> endobj 923 0 obj<> endobj 924 0 obj<> endobj 925 0 obj<> endobj 926 0 obj<> endobj 927 0 obj<> endobj 928 0 obj<> endobj 929 0 obj<> endobj 930 0 obj<> endobj 931 0 obj<> endobj 932 0 obj<> endobj 933 0 obj<> endobj 934 0 obj<> endobj 935 0 obj<> endobj 936 0 obj<> endobj 937 0 obj<> endobj 938 0 obj<> endobj 939 0 obj<> endobj 940 0 obj<> endobj 941 0 obj<> endobj 942 0 obj<> endobj 943 0 obj<> endobj 944 0 obj<> endobj 945 0 obj<> endobj 946 0 obj<> endobj 947 0 obj<> endobj 948 0 obj<> endobj 949 0 obj<> endobj 950 0 obj<> endobj 951 0 obj<> endobj 952 0 obj<> endobj 953 0 obj<> endobj 954 0 obj<> endobj 955 0 obj<> endobj 956 0 obj<> endobj 957 0 obj<> endobj 958 0 obj<> endobj 959 0 obj<> endobj 960 0 obj<> endobj 961 0 obj<> endobj 962 0 obj<> endobj 963 0 obj<> endobj 964 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 965 0 obj<>stream +F]ulqV9D\L b^GZ\,>[6f"*~3| +FF =\{ymfGnKH=YpӦ7 ] Ifǹ ӊoqS|~ 4(Ŗ < %{@Dws8Bf=i;d&JU: cvԡGsي+'k +gMlLz%xieDԀR9f; )]~N^7\E_%PL#o)I@. qLXP`k8 KaiWd\F,18<Ǻ[e.v |f1Q?r4>vbɬiY#WiFP9}8c]W"ި&Z %] X-wHn絤zp|o:#yQ}+B؅$#&~!iH,d'i; +SԟߪGAGUӡFu:͇S嬽@"^P8!Kf +de"7}"QrU!QF;b&O۪vLɠ^G/ZM2|gUـ:#/|s"f.{:-N"sV^0xc(e瑦XbwhGd T8DHh֨Vב`O~[[MMnɴg$0Z+\ }>ֽo>-6_ƁSE7J37h, ,\/)(g(0A ;SOANOWZeNϔK-l(R7!IqtMu: b81^8.9cvS0~δ_$w7BDWAE_2x[pLru)\t!4|Yb\ +ae3. z|x +핅ۀ;[{|\1ιðY/TҎOsefAT~Rw2_4XAFKޯ~jgsTiB7 7ct ;ю7B 8tI&BNO z5ы}:B`,5Vמqtdf8_+"`O,Xp 7 -#0 ?FK%̵.!CXmX҇cىnƿe mLߪc_s= 0?V)a̗>J&w?>"S%'׌qPY+W#257{;82b뱑VQ,q 0H46M4 +ef/JVZD!J cf *,zF˗^hH%}ioA1Q֡^ ޔǂ^I]lԳu' K^vVy!| s۟*:.'̿htyFs_* rLC"o:omzYRh;Lf0EFZK(5}OiGOOU O`mV=ڌ١nUkl" !#"Bb{H\-(q@Tfi8.2iO\5PzG:%I'jCfpnW>?{K`b)s`` *haھg`; wib,'2[zf &.mKan? &d{~\ f8< P<ӛņAy`xeS[1\b,FWsoTq}D-G#E˵fO,mυ)2gfeC{W]8$}h`f:f2kv ZP@u@gmG<0,<["F0 +endstream endobj 966 0 obj<> endobj 967 0 obj<> endobj 968 0 obj<> endobj 969 0 obj<> endobj 970 0 obj<> endobj 971 0 obj<> endobj 972 0 obj<> endobj 973 0 obj<> endobj 974 0 obj<> endobj 975 0 obj<> endobj 976 0 obj<> endobj 977 0 obj<> endobj 978 0 obj<> endobj 979 0 obj<> endobj 980 0 obj<> endobj 981 0 obj<> endobj 982 0 obj<> endobj 983 0 obj<> endobj 984 0 obj<> endobj 985 0 obj<> endobj 986 0 obj<> endobj 987 0 obj<> endobj 988 0 obj<> endobj 989 0 obj<> endobj 990 0 obj<> endobj 991 0 obj<> endobj 992 0 obj<> endobj 993 0 obj<> endobj 994 0 obj<> endobj 995 0 obj<> endobj 996 0 obj<> endobj 997 0 obj<> endobj 998 0 obj<> endobj 999 0 obj<> endobj 1000 0 obj<> endobj 1001 0 obj<> endobj 1002 0 obj<> endobj 1003 0 obj<> endobj 1004 0 obj<> endobj 1005 0 obj<> endobj 1006 0 obj<> endobj 1007 0 obj<> endobj 1008 0 obj<> endobj 1009 0 obj<> endobj 1010 0 obj<> endobj 1011 0 obj<> endobj 1012 0 obj<> endobj 1013 0 obj<> endobj 1014 0 obj<> endobj 1015 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1016 0 obj<>stream + d>hl''@[sck/,r*lyzal й*ۯ񦶎$0ŧٻ[` B+,^e\:6rA[X45tXL\?PR}OɴXO(')Wosp%txhŸ}$`B!*sugK9-W16DJ߆>|rE3~Ȝ*%J`y8z.{ex3}KYiG5Mi0-I RJ/ڳQaLoRU +Ḣ)(:Y<*%?P;F2m,E1"M> 2NYа6=> OˢRQN|s6>^0j8|)ň8*/ ! nz6%h:pbfctQ}o1zKM^!:cm +ЂMq"-Ydi #=OIF3}oT! adcn*X qePn}HIJXꟺO1'NƂtYKZ.֧O>@bCMvL8N`k +һ62f O b=d[dZ +ۓq$|☺|G7%jϪIDmRx'buf f}kZ@xJ{@ÒSlYd0/$K.I7-%3Ix|J~LIH)`Ȕ8u "؉Ϙp.k:1Q ųDe7zc;d!˩>ѵ,ZiO?Y$4PB,3,-:y/2VJ}WMo?L| ǭ 0iL +endstream endobj 1017 0 obj<> endobj 1018 0 obj<> endobj 1019 0 obj<> endobj 1020 0 obj<> endobj 1021 0 obj<> endobj 1022 0 obj<> endobj 1023 0 obj<> endobj 1024 0 obj<> endobj 1025 0 obj<> endobj 1026 0 obj<> endobj 1027 0 obj<> endobj 1028 0 obj<> endobj 1029 0 obj<> endobj 1030 0 obj<> endobj 1031 0 obj<> endobj 1032 0 obj<> endobj 1033 0 obj<> endobj 1034 0 obj<> endobj 1035 0 obj<> endobj 1036 0 obj<> endobj 1037 0 obj<> endobj 1038 0 obj<> endobj 1039 0 obj<> endobj 1040 0 obj<> endobj 1041 0 obj<> endobj 1042 0 obj<> endobj 1043 0 obj<> endobj 1044 0 obj<> endobj 1045 0 obj<> endobj 1046 0 obj<> endobj 1047 0 obj<> endobj 1048 0 obj<> endobj 1049 0 obj<> endobj 1050 0 obj<> endobj 1051 0 obj<> endobj 1052 0 obj<> endobj 1053 0 obj<> endobj 1054 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<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1067 0 obj<>stream +ޣpɂQ c;[2B'z簒P[GΚ,[ͩ|#U2y ݁w9-OU:#^}An~N6lށPqОf5+eh$')UdFH^ݺ+| |_RWa nMD; \v~M z7ix`oÒrЪ(K"uvp*Ra{oON,:"e⏁v Xz/O7!yR<n}#ds6բLn,$,d*]*MvU@m^j>jT jV f7"$XWP,ԁZ"/q{~PY6 xzKŦVFPh6z,:x~7izGdy]o' \%o57'Zf3jHU6D:w!:doj}LD"gwW?ˌ#\U+1{d#O[%w5$NZxM 1${'dݖ:¼˜SGE\XWl$[dٌH ;A">߻^\vFև?9v羮"T=27~kSʟGhHO;~$ m_ǣAf  'XjR 4톻kĵWpI/ktUj!MJjsg+栉MƝjZ`qXpӆ`!}JJsD\L/=`Xd!9erQ$5EcC_c8[c4jI]ƂakQEX*^ޚ=29{{?XYAP8wXR]H0G~t-ꘇ\cЍ} ^A [D}[287>4^@^_P2=Vdh DX"jzpA@&Fnh?'ȐPQz>23NGdy +endstream endobj 1068 0 obj<> endobj 1069 0 obj<> endobj 1070 0 obj<> endobj 1071 0 obj<> endobj 1072 0 obj<> endobj 1073 0 obj<> endobj 1074 0 obj<> endobj 1075 0 obj<> endobj 1076 0 obj<> endobj 1077 0 obj<> endobj 1078 0 obj<> endobj 1079 0 obj<> endobj 1080 0 obj<> endobj 1081 0 obj<> endobj 1082 0 obj<> endobj 1083 0 obj<> endobj 1084 0 obj<> endobj 1085 0 obj<> endobj 1086 0 obj<> endobj 1087 0 obj<> endobj 1088 0 obj<> endobj 1089 0 obj<> endobj 1090 0 obj<> endobj 1091 0 obj<> endobj 1092 0 obj<> endobj 1093 0 obj<> endobj 1094 0 obj<> endobj 1095 0 obj<> endobj 1096 0 obj<> endobj 1097 0 obj<> endobj 1098 0 obj<> endobj 1099 0 obj<> endobj 1100 0 obj<> endobj 1101 0 obj<> endobj 1102 0 obj<> endobj 1103 0 obj<> endobj 1104 0 obj<> endobj 1105 0 obj<> endobj 1106 0 obj<> endobj 1107 0 obj<> endobj 1108 0 obj<> endobj 1109 0 obj<> endobj 1110 0 obj<> endobj 1111 0 obj<> endobj 1112 0 obj<> endobj 1113 0 obj<> endobj 1114 0 obj<> endobj 1115 0 obj<> endobj 1116 0 obj<> endobj 1117 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1118 0 obj<>stream +a9ZjP ?{v`]swmeվђHYP2^xyU ~+/6T&ˡNC)J'iZZ>8"1KHʼ33@mjX;x16C('hH9x6"%MJP,,k<?/bkfMҝ6fr\DKb…KaeO k65gUO lsb߲*%ߎw̎ߔvTj?UAig#llʢWh؟@3}L&|͹HC;)IS ~A *O ci@iJ]IfBSKM-7 z>X}6'B”qPMitFwpnϵ<9B^&SU|F +~/*|A [) VbŎAk.7b+\z9SQ9*T+vi?Vj)?aDY6Po_dc bRe w kE*`B"H%b m&zb_WԡDI1#zRܙ +Z4y`7!]v,YK?fnwhhWֿhWӞ[Š`-Y y@O;s9(#W&$9aznRa*g^ ?YHJ`k5&īdx2 {9Jke|DXn#IJš:U-cbj(r<>?c9.dVTF?,#}&Kʃ UAe~12 :\^έSoH lB҇3@_.H2x,s܋QpbC[2Ħzj(ew}7{9mv S MNe@oT<= Vm9I׳0 u +'GlO5z%xڙQGI3T<㠎Qj +TI}xׄKVR!8_{͒oGĄpe4E#>:Rp-iŋI(%C,w _RLJֿ)G54œ\p-ҭ(w[fɖ@KmGK^, /?H;եZt:juCkXu S@<vtMT*X"'jс5wDeFN$}r Iij5yG#J,˜2$kм@הh.uRW>h5i"v*Z2g&`"l*,^zaMr"/T!^j/OnrPG`5zQs9G տB*.w s (+-"Cӿ() ?Q|"T ?ɖb1*>9}`RsF]|vd6}eT@5%dM yvrߘ{oid>E)rϴWeh oA^Aqn8dbcB`4,tG6R-%Dlt]pS\ Cq Cx=U׬i'j-eE,٣ӭpG[24mm$_ZH\9N7%2=4 !d_y2tm:tilx2XU <L22gS%GU|bAvU|~_/l8(bRm ]pp%!0Z2zty3,)ˌv3<YjG_Qс5zĘq"@6.^g*-٩?|[WU9nj<@೮ŕ;L'ҩ?F PL85z)Uf + 9 k\Ke7GjBX%a3gȨk(){\~L'#~쨥Yix j +endstream endobj 1119 0 obj<> endobj 1120 0 obj<> endobj 1121 0 obj<> endobj 1122 0 obj<> endobj 1123 0 obj<> endobj 1124 0 obj<> endobj 1125 0 obj<> endobj 1126 0 obj<> endobj 1127 0 obj<> endobj 1128 0 obj<> endobj 1129 0 obj<> endobj 1130 0 obj<> endobj 1131 0 obj<> endobj 1132 0 obj<> endobj 1133 0 obj<> endobj 1134 0 obj<> endobj 1135 0 obj<> endobj 1136 0 obj<> endobj 1137 0 obj<> endobj 1138 0 obj<> endobj 1139 0 obj<> endobj 1140 0 obj<> endobj 1141 0 obj<> endobj 1142 0 obj<> endobj 1143 0 obj<> endobj 1144 0 obj<> endobj 1145 0 obj<> endobj 1146 0 obj<> endobj 1147 0 obj<> endobj 1148 0 obj<> endobj 1149 0 obj<> endobj 1150 0 obj<> endobj 1151 0 obj<> endobj 1152 0 obj<> endobj 1153 0 obj<> endobj 1154 0 obj<> endobj 1155 0 obj<> endobj 1156 0 obj<> endobj 1157 0 obj<> endobj 1158 0 obj<> endobj 1159 0 obj<> endobj 1160 0 obj<> endobj 1161 0 obj<> endobj 1162 0 obj<> endobj 1163 0 obj<> endobj 1164 0 obj<> endobj 1165 0 obj<> endobj 1166 0 obj<> endobj 1167 0 obj<> endobj 1168 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1169 0 obj<>stream +hٕͫILJKde-2nc8סGWV #A.^Apr \-im{@z*{|fhHPu(GӦFK?n kEzRnq +&һ(?ǍhԧAo  9`)ViEEL uP\W[Ze;$,0.fJ"`nJP7tӬ9n'PM]yR8T<.Mr)>9In^ +lgXzyobWt4L7QvD=e=k8-:gJh)ǩ^Y{Ȏ=Q\V 0[^/7}ο[]q%gg4>|cSάg#Ԭ&f"&**?<|o`ٓQ²A3W~zX%`>=3QP=a %uߕR5xa;1wX&Miw>g!zt *:ӯ"FQ,FoY8FOWڼ>ɶy +QLOv=pp; kn3|[tT qPRI5XV>h#dt#5`#Zk3gjJo [6m+wQ6ef0֓c5B\࢛Xr'g2Gaw,cjzRHp3``WƙKOpa/~j9sD`aEF2lrش $,^tB"*W9{<TxixW:*B@UhKOm\E7Nzфd>֋u R)P~k&PR,qt5UWeI'Wi/ +ETY֞~`]@-hI|NWa׺ +ܘ\!b9LA\5&ǃ/-!7+*7\&:1Uh(v~}Mij;ݚ`8Y{';UGǁ.Q0G_tfXdCm;f?6873;ݾ}R*ج@BH4 9#1/fm]jADu 7[Ou :IH!Nw[gu/8En8s40'4nẞJSO R-B>dB=ʩ +K3 |Q.^rufܵgtg8WADgoMMKYb,7oRB_2Vn{fr˝>OYUה#y:X%S{R/ eCMu %3{fno\9)l颯:qP[$5Qȼؑbc2#K%yʤG5*o+]<؂ʯxvqir SsV{h`O[̬d8HF}wfP5D(q)]Ri|ڒ虥!^^.#*hLQixc*8bPl@&DvCY7_S)Iҽ27#ݻ+_^ialb0)f #9*Rs᷅^_.Ġmz[>"V*Or3Q H/AN?넩7h#ndJuj%B+B\3I@lK|=`RY#3ωb.$mËS4{'SK ∉|q{9N9 1W bG>Q`aأsxaEQ*(ú:l8z>3l:79 +TQɫal o`$ bݰ+;r1N!M}Рs:P#v=3W8g3;Ar$X~5/=p֍θUYwgq{^cuQuY:sb(w +endstream endobj 1170 0 obj<> endobj 1171 0 obj<> endobj 1172 0 obj<> endobj 1173 0 obj<> endobj 1174 0 obj<> endobj 1175 0 obj<> endobj 1176 0 obj<> endobj 1177 0 obj<> endobj 1178 0 obj<> endobj 1179 0 obj<> endobj 1180 0 obj<> endobj 1181 0 obj<> endobj 1182 0 obj<> endobj 1183 0 obj<> endobj 1184 0 obj<> endobj 1185 0 obj<> endobj 1186 0 obj<> endobj 1187 0 obj<> endobj 1188 0 obj<> endobj 1189 0 obj<> endobj 1190 0 obj<> endobj 1191 0 obj<> endobj 1192 0 obj<> endobj 1193 0 obj<> endobj 1194 0 obj<> endobj 1195 0 obj<> endobj 1196 0 obj<> endobj 1197 0 obj<> endobj 1198 0 obj<> endobj 1199 0 obj<> endobj 1200 0 obj<> endobj 1201 0 obj<> endobj 1202 0 obj<> endobj 1203 0 obj<> endobj 1204 0 obj<> endobj 1205 0 obj<> endobj 1206 0 obj<> endobj 1207 0 obj<> endobj 1208 0 obj<> endobj 1209 0 obj<> endobj 1210 0 obj<> endobj 1211 0 obj<> endobj 1212 0 obj<> endobj 1213 0 obj<> endobj 1214 0 obj<> endobj 1215 0 obj<> endobj 1216 0 obj<> endobj 1217 0 obj<> endobj 1218 0 obj<> endobj 1219 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1220 0 obj<>stream +Rg#2FQY,5JAoS,IB]րtm!+L#uΎ^B˽Ek|da~w@˱T$7Q'P0ѱ"}r+Wvkq e{}Fr(I頲ΰNC0xK2'~O|[~?PE沖j8]!wyi@Tbo;WQJd?EءsEcᭈy>(!gW*q֢z ^25Y?CH $ +2\H{t=UJAeșe>e +-R{QRv*J{bXd✎#8iE(pf1;[ʦ |m)tzgA} 6&󅤸56Uk"T%a-QfOHݠ+cɄ?LtQ|Epsŭ~!46;uٛ-hS8[bgKgr3ixZN軮axkӑEգ^aOiG)Mc1SzûGZȬ7jC;EtѧHؔB~F hC>XYɠSxm & ,rB8lE&ro9.y3>`TڬTAB-ŢӉd[$3Xr'A!i3q|e)g[BUQKղx=^;04`|QPnfE阝;n)B*!l&;u7 =C񀇯@jZ61jh9k۾8&%sSs,큘d$+iZE}6|ѴcjI9A`^-X!Ng.CM Cx {'Z)?[񌣐qH5V_ Qi=AӜrPTz-R_%8nɃI+W!RZ=Y:;5z`"UF߁(i`|I< ߿X>kXɞPE|y+ *9Je~u9x<ͮ OJ0/Uԩ莦;֊<`V>˂{^^ +PJEVj`bn.ud$vV/Hsj[~(hQ =4ԮI:?8002~ ~ +r+ՙRe'ۿq\aJ $<gw󏫑}>TPoZ^yR2WgeZlFajbReFD]QsdrgOE--9 v(+OR/m(jZ NwY;.3ALUP#NܫK +`q] (Z%enTE^GzIbi+O؏{O9IPUroos15;[__9 +"Ϫ%eH jaF}-cd\(Uk:Խ"y*v#=:^qw4ANG^G^Wa68k]an!P2}W*P~CEJP!CD #_mA&eDQ6 0 =XԾv y_IeL ̗~RDn,x@"0膒ӇٯiH#2.|m[QgU.s-7xmJrd1wI)H".:vi y1B%G+ +1YM u>.Xߎ9 Ơ)R$ WzSJ.΂ll\eO];UɊ73ʶ}]|e_6PtD> endobj 1222 0 obj<> endobj 1223 0 obj<> endobj 1224 0 obj<> endobj 1225 0 obj<> endobj 1226 0 obj<> endobj 1227 0 obj<> endobj 1228 0 obj<> endobj 1229 0 obj<> endobj 1230 0 obj<> endobj 1231 0 obj<> endobj 1232 0 obj<> endobj 1233 0 obj<> endobj 1234 0 obj<> endobj 1235 0 obj<> endobj 1236 0 obj<> endobj 1237 0 obj<> endobj 1238 0 obj<> endobj 1239 0 obj<> endobj 1240 0 obj<> endobj 1241 0 obj<> endobj 1242 0 obj<> endobj 1243 0 obj<> endobj 1244 0 obj<> endobj 1245 0 obj<> endobj 1246 0 obj<> endobj 1247 0 obj<> endobj 1248 0 obj<> endobj 1249 0 obj<> endobj 1250 0 obj<> endobj 1251 0 obj<> endobj 1252 0 obj<> endobj 1253 0 obj<> endobj 1254 0 obj<> endobj 1255 0 obj<> endobj 1256 0 obj<> endobj 1257 0 obj<> endobj 1258 0 obj<> endobj 1259 0 obj<> endobj 1260 0 obj<> endobj 1261 0 obj<> endobj 1262 0 obj<> endobj 1263 0 obj<> endobj 1264 0 obj<> endobj 1265 0 obj<> endobj 1266 0 obj<> endobj 1267 0 obj<> endobj 1268 0 obj<> endobj 1269 0 obj<> endobj 1270 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1271 0 obj<>stream +qRͣ _tb`0p{{j[LG%/Gz5PcC>ur}PǺ[\n1V"DwaEۄA܄&;ê3T"Af< ϡ$^Ւ *=srjdFQt"xʎwtdF4qr#kD ~shFfvogPQVnR-;6o{{E6kZzP1VҶ/\\C֕t/Ծ,U!oj +]<=#}x?l)L T,ʒpιKIHxH?iwR#cQq/f7(ޟnx:!B(78TwvrŖ׮%SmqmSUjfﲪg(Fq|n.yHu(^5ӥu$3(h1;&q-Fά Mh xV9XjsG+;b [TiݚIT ~~N_]Rlx/98@(J.e׽;i?i6:PX σ7oD 3 p}Urp ]Gu8I}o4nR&1JX68~Dܟ7ӇI(ksmSpG_,R%8LP{ϸ* OѝVD>Zk9kL/Y^@z6t8Ġ(T8;x~||F( j9M:9'Yopk5 Aq|eU7O=1k^_ƒhF(Tl /G;lf&^c4 'JͶ0Tx>|V LVͤ8v72IͬU˽{*Y3 Ez+ڎVenh82tl +4r6; y{ӡZ f  Ԋql3[WڌVTg˚4_el4~.+_t[7G3+ݬ2=w $݊.Y`"HK^ y#pB__+Qu|e͈yIWW:VYET;AP0H{@Ӕ/,#3 +FZ{G~nkЪkS;,y8B7hwpm(#`5y- G_f[7&SRB2iÍwe%lNoҜgXSU9<!nti 8gy9 N1ȗ.0fHKO ٔ|b"2YLZ1),Q휛畫x88ÓU&e<ۈ9r#-0)tr4P#Qbr u5 v%WMb~Vo\-@U4a2+s󚝉 AyK~RlGdT=>펞#)iꎯnOíF}~"W+^+ӣ`a ײ13N{k n:6Gnr⇏w0 +s*voK֑2QIzr#Y%>gr1AoX;{ȅ!ӎȀ͖A,C(yrޫc$,ZܷL)L'{!%T*)GѢU\M/Eh=Gݯ$2,E-fznhHRMPlo75#١Mz!&xq/.\1K'.,\,KB˛S[`m`P$OYG j5, aZ$9]+@xnQ5. ,tײ*}Hb_P`a8iy;wDpK1osf\rwWԎQBfqWin/Tv] О6e@ٟ+6جo#ERhr Jr;!DI(hpo x!.姼V5rsI-'F(&y/NMV4?Ȋ VՑAe|4,SB U . =0~UNuPB&HK/&F;'#Y7/mE<"J%yӦP:?Trhd(wPV9[IyoyuSսr=Ї}FBd|a-e$jhOFu/mk +endstream endobj 1272 0 obj<> endobj 1273 0 obj<> endobj 1274 0 obj<> endobj 1275 0 obj<> endobj 1276 0 obj<> endobj 1277 0 obj<> endobj 1278 0 obj<> endobj 1279 0 obj<> endobj 1280 0 obj<> endobj 1281 0 obj<> endobj 1282 0 obj<> endobj 1283 0 obj<> endobj 1284 0 obj<> endobj 1285 0 obj<> endobj 1286 0 obj<> endobj 1287 0 obj<> endobj 1288 0 obj<> endobj 1289 0 obj<> endobj 1290 0 obj<> endobj 1291 0 obj<> endobj 1292 0 obj<> endobj 1293 0 obj<> endobj 1294 0 obj<> endobj 1295 0 obj<> endobj 1296 0 obj<> endobj 1297 0 obj<> endobj 1298 0 obj<> endobj 1299 0 obj<> endobj 1300 0 obj<> endobj 1301 0 obj<> endobj 1302 0 obj<> endobj 1303 0 obj<> endobj 1304 0 obj<> endobj 1305 0 obj<> endobj 1306 0 obj<> endobj 1307 0 obj<> endobj 1308 0 obj<> endobj 1309 0 obj<> endobj 1310 0 obj<> endobj 1311 0 obj<> endobj 1312 0 obj<> endobj 1313 0 obj<> endobj 1314 0 obj<> endobj 1315 0 obj<> endobj 1316 0 obj<> endobj 1317 0 obj<> endobj 1318 0 obj<> endobj 1319 0 obj<> endobj 1320 0 obj<> endobj 1321 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1322 0 obj<>stream +xY\f# :2E rro3UWѻ1rQu'&kc4MKy.cuħ^I[f^G/)*2~o$Ϋ֞ˆm +43N,zRNME85зn=*y5?K=]BybA?~3wJ{ Cߒs +]-٣ŏMyk=!/Y`;o&J7)wR r4zG܊Fhz_/ }"&Rq<WyQԺB-K90|J R4FJGO9ŽDxH,@!$a@&|c8=Yx>nt%=Gn%FB?R% T:$Ȳj kSx6:&PxM9r># ]%)혯MB-͵ANķ"]z@l;9>,:VMR^Wxş̀оJyGZ&LEC9w#ꧭ +%+ ?F_6"zsI p"L9(,^#Λ["uG<ӥ +$,4a&_XPbfɸ3X:v[bՎM阔xIBVh9I:}l{’T^Y'|ʺft@7F(wd3`{m-I{s"݄O(1G࠶z  +D/j(UԥAep:gj߱=׉ +5*K0wrM@Hd|䥵NZꉟ tݖ1ٓ ­Rk+#xKiRv8d>Yw_$Yr(՚Pꮳz|HyMg+Ro.(k1iH-x C" !̵v_8VK,;ZW.Dn^ahԦ;F(G-㴍@!91* %~6}074@QXk[>{EpkbfxrZ`⋉@ wrH_S3yNC_.wslsέiOS}"uH@& @tf;aZ ^?C!֏WA.[8~o%JB +OŒ0|U,{Y SK w|OX۔4D;m^B9MGZ@UҘB)#p{x]UC*jE˶cgC# KQ,&Bfҩm.X\7խ(ֻTpђ~}?jdMzfffl$FIO\($]^t߉%z bx,l׋wTraKQulRmKY;BZŭ cQEѭ"}WXH| [lkK&~P6L! x +endstream endobj 1323 0 obj<> endobj 1324 0 obj<> endobj 1325 0 obj<> endobj 1326 0 obj<> endobj 1327 0 obj<> endobj 1328 0 obj<> endobj 1329 0 obj<> endobj 1330 0 obj<> endobj 1331 0 obj<> endobj 1332 0 obj<> endobj 1333 0 obj<> endobj 1334 0 obj<> endobj 1335 0 obj<> endobj 1336 0 obj<> endobj 1337 0 obj<> endobj 1338 0 obj<> endobj 1339 0 obj<> endobj 1340 0 obj<> endobj 1341 0 obj<> endobj 1342 0 obj<> endobj 1343 0 obj<> endobj 1344 0 obj<> endobj 1345 0 obj<> endobj 1346 0 obj<> endobj 1347 0 obj<> endobj 1348 0 obj<> endobj 1349 0 obj<> endobj 1350 0 obj<> endobj 1351 0 obj<> endobj 1352 0 obj<> endobj 1353 0 obj<> endobj 1354 0 obj<> endobj 1355 0 obj<> endobj 1356 0 obj<> endobj 1357 0 obj<> endobj 1358 0 obj<> endobj 1359 0 obj<> endobj 1360 0 obj<> endobj 1361 0 obj<> endobj 1362 0 obj<> endobj 1363 0 obj<> endobj 1364 0 obj<> endobj 1365 0 obj<> endobj 1366 0 obj<> endobj 1367 0 obj<> endobj 1368 0 obj<> endobj 1369 0 obj<> endobj 1370 0 obj<> endobj 1371 0 obj<> endobj 1372 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1373 0 obj<>stream +8A3jA1C44"[tp9MGaM;cFSB[^Y4_`͂ԃ(_\W+x + ^:/xyT(.;u +{:nmKP!4\Õ+P;؟>M'FÑrl .6Ia[Ґ&xRĽUgN@6p7K/m +j0SۈY;?qbvatضGBP-LAͫ}c8 L4@wSso sW] ti~ eGT&kPyB:EX~[>wxd㗋J ZM +n^h hK9zJ3ӿSlyrw p@#*"lZkZE.׀ShYAE8y!<{Fޛv.n,dҠ7X0<88lcƴIZ*F1Q6MQbMĭ 1b4W@8arA<( @=mԔ\lHfq:&FWnSעOգQ.MuI*ZA b:,|>:CItן4eH/H_:ugBXyM潶vH9b27'?=jy?\GʅtV~1:NP>M\ *7f0F'΃rLF3__lXB,@33Wg=oI[i>,č uQUn>s,]ѺҁX謢?r2Q?hi~za X1L>,f}N!r ALW|^N4>*pFqRZ{ݔ>Y/zx*,r܅k_7-888K*Y+Ssl9K륀&۵ڌZ;QilaDd VR}fl ld2Fx~?}й>: R|$ |zFN~]Lf`bK3H@ P"P4 mhU3 2R+ :w0FT 3$׺}\:/r|j,Xh-1aDT*KXQzj:lr~C/t;@'Jȯh+ك[k9LcǧKF+RWjVǑ7J$7N#f}{.ئ7֌qManBx_Ji2Ƞ +y9 + y基pγ%C%U~Z; LJPlAESeWc=8O`WQۅ=ߟl65 :<Էn +cEFYd6Sz=bݮp(K}lDT/Pl:*YV8k[ܿU@"&ښ7+rJuV[BnK\D#F&ְU:r[5% Q4?F< ~G^i/4%>`B7@F60;NJx!Fjկlf(H0 ງ=b}.uyQ=rT]e"< X Cx0on̘y, ̳A"7Ml/꤃j҉qRM!> endobj 1375 0 obj<> endobj 1376 0 obj<> endobj 1377 0 obj<> endobj 1378 0 obj<> endobj 1379 0 obj<> endobj 1380 0 obj<> endobj 1381 0 obj<> endobj 1382 0 obj<> endobj 1383 0 obj<> endobj 1384 0 obj<> endobj 1385 0 obj<> endobj 1386 0 obj<> endobj 1387 0 obj<> endobj 1388 0 obj<> endobj 1389 0 obj<> endobj 1390 0 obj<> endobj 1391 0 obj<> endobj 1392 0 obj<> endobj 1393 0 obj<> endobj 1394 0 obj<> endobj 1395 0 obj<> endobj 1396 0 obj<> endobj 1397 0 obj<> endobj 1398 0 obj<> endobj 1399 0 obj<> endobj 1400 0 obj<> endobj 1401 0 obj<> endobj 1402 0 obj<> endobj 1403 0 obj<> endobj 1404 0 obj<> endobj 1405 0 obj<> endobj 1406 0 obj<> endobj 1407 0 obj<> endobj 1408 0 obj<> endobj 1409 0 obj<> endobj 1410 0 obj<> endobj 1411 0 obj<> endobj 1412 0 obj<> endobj 1413 0 obj<> endobj 1414 0 obj<> endobj 1415 0 obj<> endobj 1416 0 obj<> endobj 1417 0 obj<> endobj 1418 0 obj<> endobj 1419 0 obj<> endobj 1420 0 obj<> endobj 1421 0 obj<> endobj 1422 0 obj<> endobj 1423 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1424 0 obj<>stream +ڮ`tj@M`n9l'ƥL%bQL(d I9؆x_AʠS]TՅ{g0pw0Ah%cQ TXh;۳1t&n7NLt甏 TgoHL +:znp?MN ʑ[-_(GkOm'L\s  )$|o~`2Mg*L945yq_哉4 7N0㭥mZXJ\0Le+@2КvokZYeځ) GAz3ugc_/+1vE`ЄW`ڔ=(aעMfqلl>\ѓwR]/`7Vk *ª- ATP5JC_N+bKɴZt}MRV[y:DHS4>n?^*@]܇@jJԬ0KkpQI/]y(\C;cxY!8Y%8NEӬ75Y +3[%2ddH!X!iR,jsN_.Cd偞 u`6\WSisӗ-?Mh"<-55cÄ]ՂF`5R؛럸&Z2Ŋ gTG}Pp+B?~LxWjϺJr/dP#wy's.ҋ5[Ńu ު+nfQG#PAmQ'W6,"Ud_xl42'!ۖr\~zaV\P1nT*"siMtv- +~ wbl 4؟8(Zu=m?96~FFrn䙡zF.3͒%V=_C\IVuU_ۗA` #4bL)=ia҉tTjtC`MɃZN730 z.~ۈp_\X1 +-9`"j|i9sWsMYӺψL[ jD^wv=1v.Z9.WZ@ : Sԧ|ْr /̀ +Xy;j!3c>ἀ o_/-UP^UVӴr=)I3VmѬ"?iV֍44Dʇޟ߉J zA 4DosY/^PXh\*"wݑnL3 c6Ot`A\]b0Ma`Ś')/E ez޺!v˨BD'nh:!3wt~i +bTos?Xzd}Gy;ޡ(g +iS5'-d +i*VB?6l5u jHU'q)\dja(Hl&#>{ +; x8;Jj)R.JDS7rE"@PFɡV>0(\(\)Ƶ8q1# a' QyGaښp|zCkڐiX4/^}M9iLunh} {/Qa' 2pguĮPl/fZLEҿVp[jc*?[B$"" a5fs2&1_e5x`Ӕ."9@BN-"Pa&&.d&CD*q,]ݠᄋ +ZVC)y 97|rX2&G=0}k=#Ke%8PJBi[Qi<)('NomB_ܵ]LUJfwB@=Cs))/>S}U +endstream endobj 1425 0 obj<> endobj 1426 0 obj<> endobj 1427 0 obj<> endobj 1428 0 obj<> endobj 1429 0 obj<> endobj 1430 0 obj<> endobj 1431 0 obj<> endobj 1432 0 obj<> endobj 1433 0 obj<> endobj 1434 0 obj<> endobj 1435 0 obj<> endobj 1436 0 obj<> endobj 1437 0 obj<> endobj 1438 0 obj<> endobj 1439 0 obj<> endobj 1440 0 obj<> endobj 1441 0 obj<> endobj 1442 0 obj<> endobj 1443 0 obj<> endobj 1444 0 obj<> endobj 1445 0 obj<> endobj 1446 0 obj<> endobj 1447 0 obj<> endobj 1448 0 obj<> endobj 1449 0 obj<> endobj 1450 0 obj<> endobj 1451 0 obj<> endobj 1452 0 obj<> endobj 1453 0 obj<> endobj 1454 0 obj<> endobj 1455 0 obj<> endobj 1456 0 obj<> endobj 1457 0 obj<> endobj 1458 0 obj<> endobj 1459 0 obj<> endobj 1460 0 obj<> endobj 1461 0 obj<> endobj 1462 0 obj<> endobj 1463 0 obj<> endobj 1464 0 obj<> endobj 1465 0 obj<> endobj 1466 0 obj<> endobj 1467 0 obj<> endobj 1468 0 obj<> endobj 1469 0 obj<> endobj 1470 0 obj<> endobj 1471 0 obj<> endobj 1472 0 obj<> endobj 1473 0 obj<> endobj 1474 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1475 0 obj<>stream + +g1[ҳ[ڞC^J{L\GFkjFZBoC|+񙖂1oHF6׷TЊ&{u7B㽼xc>ť**ۣQp3i$5?;lZK .ߚp#MS@e&`"TN>.Z~"xc$fl6V~j<ltDTU ͻ4iĝR%bViW1`iRayS z5OE-f6zt EuKIߐ)vɜe5I +zC6폍PSHzIC.u Ok[{&KX4+H;w)$Zz4E}4X*@p]Y E4wkT*W]Ⱥ]HyC=j+AFp#mTվbj%|TkAP_i?6Հ%G q (NSZuM z(]}olF~]kLP1I,Ň1#HF_Sj ,a? 7bB*,2弪!c[>l]?&,,6zïIo/!VA+AăQL"6VlsS4GTfڷ4LUq)+:*䧟 \0%;Dol-zhY&sަo#ە_EJ>I:tзͭH>qa8z|D;5*Qk6c?&F6QM89W?T_$_Hb ٢PS]X IYhl#g4]!*^㔒RA$DP0Uc{+gH^HD$$^iAl܇u(^6X˙G{ēt/9GSN &,7 h{Lcv@_Kvb/' Ő|5KoV[BS?\$.)3ނxާ02,WoVLx+m-gKOg5L-AKZx=8:*7C?LT(ivݗղwcr> EP?k¨&orb.6 y`$eTԅ@eO%hnI x"7ذ1t&BLjI~IlV ^\ +/4W͆#BCԐGwe!ipE;|"WIcv:/A;#cA$ćnj ízVVjK+-%r' j#,ثJ?j|n#.v"l LO"Oѳ\Ip$3{]焧ߖkG#m1\2cZ-ViovVq{țb}P&ڜ> *5&\A j)]cJ r?W÷3Ȧ\PҚXǒ>e)V/RdӜdi R pPJvV 7zBPi5( Aur -'IB +2я9 (d|Ҙgګi%>X.*6OqrP u`Jw$ m +7h +Lzms05q>{Tf8+|~,:N}IE`4aDe3\]z{J_P5_:T$nuo6e2N aug,'@rJg\Cٸ26 +bJiY;W jN2v'qH. .8אKIÁ58m{ CBD9j.mVVjCVͲ7^&c<%:ݏKRE(aL{g+4B(M&2z)]:1! +endstream endobj 1476 0 obj<> endobj 1477 0 obj<> endobj 1478 0 obj<> endobj 1479 0 obj<> endobj 1480 0 obj<> endobj 1481 0 obj<> endobj 1482 0 obj<> endobj 1483 0 obj<> endobj 1484 0 obj<> endobj 1485 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1486 0 obj<>stream +鲗F.!i]pЈMpbJN$ ݙƧ %6aBl27ybE`.k HsvAK>Cv@Hj#r}I{k{~Yx"JFRJ_z̤oObYz4֓uN!]D"X#gN&EYt~QZIۙb?{.6\E ǹ3"~' |g8fU/YL;qp>Sn֬v1jBn~{ i@UG3I3^Rѝbݚr7_a>sѼjݦEK#%DZž]Vxc[=}>ܪbzZ!!HڧҘ*y 7v)^KzĢ2>r[}!lJ` VY'X9-z +7Ȱ&?ro_& ԋ$M͸ +endstream endobj 1487 0 obj<> endobj 1488 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1489 0 obj<>stream +//R3pj\4qLq+BaKLBSn'V(_tՌ)}{ aJ X>q+]y0 c D|Y|ލӱ1EE+W;GFj`)UEެŽi@[" * ]Q㕼UwaB}}[*Z8C%~eot'}xhM("cd^ @iyyZuF4cJR(x"Ζ+e?'ͪ=WNhI> endobj 1491 0 obj<> endobj 1492 0 obj<> endobj 1493 0 obj<> endobj 1494 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1495 0 obj<>stream +1}t @=xE!SX2*4O,䎴 W%WP+epR#+p$`(C r7DܭZQ1 C"]R*Wp +sL +cp^i=U:;H&z|PcJP9Dґ;m ?yޜd4/8s_*MB!w2,%xN~ p{PJ4 OI(a׻,?eHJk|qNYFyQU84*!=?"rKPE?d&eبVD;2Co+Ȇh%̼\??Uf͘oJ +pz&Lƻɢ7έ c2ڝLp5@dG`Qh;;⠂^H ./)c8=V?gek\AjnfYdl%l+6 fC_׬aj;]26v@<60ޕz|Fȡ@, ]@(VF)pWa) 5 +ؿ`{Nx8%)¢c3;tq7}]ES@p@IJLx&>ye0ز;|qwsKz +mk!N Qƴ]4>0|aWQN@hJ0GQEA8WjAdywS/mߍ5W,\)\ÿd[E 8^֑˭qwzm}NfF|Y~L3Xax=9iBHThev;[q:+$&^[Y3gW IЫ-C\"`?8b 4`sN[gCˍ%yn*lxJ #';b?0oԾWm Q5ٮ<݀Uty 'jt֨ecd߂ -:_J-^"_ȅ +endstream endobj 1496 0 obj<> endobj 1497 0 obj<> endobj 1498 0 obj<> endobj 1499 0 obj<> endobj 1500 0 obj<> endobj 1501 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1502 0 obj<>stream +}Y$q䲉J<8Ą=$Ȁ8|ʗ{&/\4E쐵B·I%m['*3L$Y NųX)M]_`ZJ^ C5.ҋFF1|.&zzQ^l9ЅfD6כ^gw4$_. nXspWƫ%Ѭy@3`keQGPP2zRٗQ(.:gݡh1ocگ`vfHLPD~qѐ9׏yvq[S7 -1\7H1]Èk+idm,콜K!xTEj<˱V(E–G0TH]Q3}hFX.)$3 i Q9uQ7DКבtv#LIWDEj%7G1M3?\ +endstream endobj 1503 0 obj<> endobj 1504 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1505 0 obj<>stream +N< Tx|6kcθ̓J[u\].rÂ1l! P?*lAa<=wUGL@=T5B/D# [&o)&R[+vJ J+8sѝ9R(P҃Ao/MEj[r8o$QQIʢʀ&\lZ뙥A[>աnp|d^l],tHēqk+-רyy'sPA?-㤆ZC +J0Vq=(bKS~xN迍9gw8 cRHQ F/QҨɵ b.Wr?@N +lZ闤& clq pP:!jݹ'F|>q$09$zg`A{=BQ4.X QެU1LqZ#+a>#ٝ~v ekS @Ȥk|ϐ`D_c]AYZųZRr=>Xl;hv+! +Jؒ[4TgS<ךZ u9PFTpBIX ĪWd9ӗa1ŃǾN +endstream endobj 1506 0 obj<> endobj 1507 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1508 0 obj<>stream +xJ +]NMB*{AS'3ehЌ(ed`71Ra賽-<颲Ndqs32<X1H8w}@0@ثsxf|/İ1'PyŤTm&=ܞU{f.b _ aV5I\\/Ck1G {k1DHdrDk aj^ ade?O КHԗtq +!$'##;) +~'ܲ?5)Q/ "α3"uYbE֚pz8@\! j(i<0sbj_xnZ ޠ&=C=  y Qb9? QJBl~ t5m(=}I'Z[Y: hz]E{wcƧM 3sL˓ +endstream endobj 1509 0 obj<> endobj 1510 0 obj<> endobj 1511 0 obj<> endobj 1512 0 obj<> endobj 1513 0 obj<> endobj 1514 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1515 0 obj<>stream +Qyr|B?|&/! 6.qn Ggӈ^ :ؙ [<lj ?ӄ|q10Io܈f%He,n{onǴzcۤϜR2O59eLEڝèۍ܋dB~8wc)ߏT Ocq)PL<^akcuΓg`ƺk_kM. ofSHYR'&8GUe!`y; f^E- + Ͽ [cbF ]4%Cs]\|oıbiZD# +Ė 7Z44:6+ԜRgV'I!z$u(B,> endobj 1517 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1518 0 obj<>stream +$!!6?xcZ/DI eKRք=蹊"N!EteyljL679ChsmtG LߗM,%мyso"65oZЕ}ea=}'vb c6:r@UYiPcs&j-ݕt #oàKpw=F@r.ivdGK/W9in`Xƚ8xSIH/Uږ} \ȇUk縇T#hA6yGȽ0@F΁jU(?rd ~=e1緔y6-&BIy_yҎ(6J 0z|:ǶӤhn2"x*S=K& 2o"P ī19j۸r )ֳJW$Z`S,f7J^o0a/: #92Ё^H +$-„)2Z]0/vMbw1t&)NSO)]8TZMi4s"meIkNEL:ؤ3p"N\ʢG5j'w +{ֺGxE>!WE,^!1YAc1KXjkο)H~Zi+q-%h Hi cv:$k#k-6rAjp={ 2P +"Qg-L ]kVey)n~GJPN!֮QV%FNu 1fQ3" uc#0lL",K^x/!/ \GGoZ~O8[E/HHZ +endstream endobj 1519 0 obj<> endobj 1520 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1521 0 obj<>stream +o4A,ֺCs1n RoK~#{1gUp'˚u?XITȒph1="qhQg)tռl7S=~\kU{DW`\?-J"TD-" ^/RMNl&0Nj+;*kt,R((jow[2/K=eܶB8|Hqg,xx 빒kūfL>%VRdͩ?5;ߘʙe>ɞNWٛfԣVm3y#xz4C1T%-M7'B%)+/G{ξi$~p+.5Ƭ3ٕ{`K^fǛPS7Xw-"d'vJ^ն̢:"$}ׅj% PNgXPVlT:k_L{|lTN=/Q{ȸUx-٠)-~B8ov%qMٚEe;pǗ43!<"̾iRC b*+]/mb῎" W/;]7}(9>5m~ ^"d'6,""qP`EuT#WV@p9>5x[ՊrעͲe'2H7uZ!~mO?3GV? +endstream endobj 1522 0 obj<> endobj 1523 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1524 0 obj<>stream +%qi/d"%+J8i$`Ys4-aT)STtzYgz?,6a8nП*-C+-b֌8A~W : +”: ׃ ɱ?^ND; +v+'R|دX{S6Bc2]~%C\e> endobj 1526 0 obj<> endobj 1527 0 obj<> endobj 1528 0 obj<> endobj 1529 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1530 0 obj<>stream +Gx Wzx²{>fp:;pp M5>:*czLšS$>CTdȦWoRfR`.h72mmJR]L?bY"tKwۜqCu_f|WF1x?`eq59+e),_D ;4]4I>kQ*xr~ii PwFCyU/:HffE u8m70u#7PAjM>^RrkX,m\HZ%E@aO( +Zt/lu Acw盙6j3n\7w$]:]tdp*;]PZJ7\S{B(b -ϫny3[vh+Aek4KB>229 ?d?j VűQ\MR'u]a3RƮ>wFPz4u5 ySmfd7 +rÏ3p.=W1+X{rdޘ-ߎW\s} ._܀s K޹%R&i9kp~\ U!qioO7dz#uGn͏n DZI1_h]t6Azl/2+!$ьnQq΂jh/`eK/NlCnYͭ ++4_ưnΈe k!>E+( ?u 1 !r;[ZnY2^0GAv$J}-l,<.f-y!BV"S_M?\ VqZ!J4Yq5,#[*Hya[T2+(97ҠZC/pD~zMW{3z\k,fĂٕ YmIU* +endstream endobj 1531 0 obj<> endobj 1532 0 obj<> endobj 1533 0 obj<> endobj 1534 0 obj<> endobj 1535 0 obj<> endobj 1536 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1537 0 obj<>stream +DkZ+9dն.acM"9) x5PQtKXf/#FPTM`an~TjoZ7?.2w%KXJO +Ad?(9 KGiܧwjhn!Fί:?ܳ-+edsqQ21e^gzy1Xߎ.pU}&<[=1~*qg(FEm~T&BG̺ik * "LEX2%&QHzz & ˄ +1V6[' +@}\T!qv3 }r5,+{x Tt]ΎT$^)g$7Cf!7#ȕ;>躪g^vd\OX⑎*j@W洹 N +-_2 fJmj)7HbSӁ]+O˘bRj hC]/~VwГ<\]h`ŮJl/]`Q5c̡ =ņ`n$(sӟ?3xً\-/hz$PMD9 sdo>Z>NaT'nsgУ{0Z[ť/;c}ݓXH<" +Cr3Q|3sag[DO DOPe'uS@BNM-wS ԵUD ]Xͺy/Yes ( :Ύt7i2Hҡ}7 6H\F z|M' 1U$0RB$Q@|C,|"FMӋNYj }0IshW +endstream endobj 1538 0 obj<> endobj 1539 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1540 0 obj<>stream +o,azˋc֒Čpd}APƒ>HKa@OQ;&xkO*DȗMVbO f+gTsVb'QϢ>NJ8Qff"Xdi9"8X60Tأ,Ns-#zgꚱNs oeؾa'G5gņ\gXRۍtrR*xZ{A+k!?]fHGP$ob +MfB0Yy%m+ך|נx RqK+w>G: Mh94qD*d swsfSn&lNO1x~/ZG:˳m춿GZL"auO:k R洯ɰͰ{Cdukp#'It1~;K/>P2Mt>wp=Ȍ6fYB]i&"xΐ?T+I~ȧ٭aBCC):<Q!gH&u7kkd"EP]a %i_ z:۽򸐀=N)n?fNy$ B]u<S=1d$iEVoH/R\X>ebSPsKȶ!$?V;=*:oq#QV3nN9|e( 9ÔF1,Zh +6WRgWE?uQ3 +Jr'a$irhU6_bh] $N +[#1Vkn(nŒ~/GjhCj_woǑ9CAQ2Sk=u$zjI$NC9H V|#"n@MNzU9k 1lIyl.4MZ"riL!Kp͍*S%bES +l٧([j`;X +endstream endobj 1541 0 obj<> endobj 1542 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1543 0 obj<>stream +:o ƻL UUkl6&\Iw,GGa`?z@x1+CޑT&vK$V  PzL ?lD ^N5Xԁ|+?/x +nVX/&clۛ`=[ +t>N\`f$`ܖ^}K!8h7O$ +6Ik&J^9IwUjp1H@o9X=@^IPѬ2vQRWyktбdߖdL7dINE;]֠O-|.R,iS +o8|T_%@ OGģ4Z/I0Ӭmle:n俥;+3H18Tg߯%ϽMd[ Ěd.L٬ 6LqiMQ.eI"nl/9op~Qp?-*Δwy#@xa$6YN ѕ`63ζކ$ 00䎠H8+6a<0.LnTj +5hKB> endobj 1545 0 obj<> endobj 1546 0 obj<> endobj 1547 0 obj<> endobj 1548 0 obj<> endobj 1549 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1550 0 obj<>stream +0S#bb*۸O.I"ҦvGjiD槪S!#.,-} (i)LeBhT3f{| Rδ]5'1Lj^vFOG-gԉRD9ZU'Wb07e{䔄X t-V;J +Z~2$uC/gʣмNR'팁\IuP+ה~ +ƍdH׾^k S}@̎Xwv2vA]+#.jl:JQ=0CuڗG 3^] У@6DJN]OPo?Uq;SB7A)! *KkA" ,p33{PR:ܢfQ/iGjhUx\壃>sfVʈ. %;wܙƾB@@dx_~6CõbnU_87lY'ߊqȰF|υ?zJZ6 лK5JRd&ZN3i3K_#f^Zg#w7#|Gy!+36Ih\ XM,ɶcVpyISG<-k6Kc&7P_= ‡II t7 +[մ6go\lWPh]R4zj۹|p0kc8!GLc#Wc13s'l.8 +endstream endobj 1551 0 obj<> endobj 1552 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1553 0 obj<>stream + S5w89ݪJ5߬@H'C Q^x5gwoul }'Ypezi SiB+ <9Ck7Դ,}6x\U7-.GS#4&mD&@roq( N1HYcCИ}d +VTBWCB&|).<;۬Y4 |m GmjA%d&ݭ +\jCĢcrGP}FY|zq܆bC#YTQx öfV\uAVgHh_hv@#GI$Tb\S opv04#npUs6<%| OpXu92 0(פzNqc]>QpJÍona an[hru,PsKg/_1f[ Jv39>K"ӞW裼0*P* (8~;5QTٓ^~i4?ht[dXghp9O\k?uٕƶ|xYЃb J(3k]b{!T%\z2T͗[ 761=gTj9z[mePN> x#HqPp//[걈Tx׿`BV:}xR!yq0_BbN`X/.69m^Cid>e=?(e"ꭕ-'-bL?8A-b:@NĄ<:8nw%*AjJXjf'lw%QFI/eBZnt,B3bt38+ނfx<ݳɢ;q+/1~TzZ >ʹ9`N6r׈|Vnrm~2xLzf/)@ )5Bl} !KNߡOWʎ +endstream endobj 1554 0 obj<> endobj 1555 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1556 0 obj<>stream +jLe]Ҵ)@}xZlmnC5'`vlq64SL:e|> 9';}kg?e=V˕`4qb`SPK<:磥D':/{nVPBYg<7Qh6\t,5Qx!^jB D(h9CaeT^27;* +۪0]8'@TNx[ [j=NB>T=wMi>h7t[7(#咚Ǎ<!jC^^{!hͻ{T%҈G]\\<ӎlѻ5fX|ʴ+(hLx>%9cVr1ryS Qڼ-Fjfh5xꀢ3il7`0,Vqb#OF@<< j1xBpWg"K2$l8y S+bh'M/ksG>u:yWaN4O>y$ՎwaF[afO)A|AGRZo }& NySt͆qTy;W Xڸo^!SiOtvA0y?SA 5ԄTYAQjTqE  + 1U;ݵp +b+3N`º=i0`{ ~:_jh)-v4,o͢m j @<4ׁH<p*ٷ G KaC}BٜuH0\pnN\$No&y]=Ɣc3|EToثo0_J7 MXR:m1 +-'pXԯX+D2F~b I#yE zE?J^M/a^R0GiKmȻxQCb%宅'$TyA\,r3-щA˯+3A34z +endstream endobj 1557 0 obj<> endobj 1558 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1559 0 obj<>stream +x 򒴐Buն 囓8UȺU^7B互FXNڙ~܅8zB 9ruWio3H+Axiv )H-5HщRte8Dyu,GA%Wtenyfp/F+]?fӍm6yv9z$K%)Lb> endobj 1561 0 obj<> endobj 1562 0 obj<> endobj 1563 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1564 0 obj<>stream +r9$gmuI4 dQˏ!O7c,+~zך]R<6/ywݧ3F3 &Ft ZTz?=ԛ봁 $*, z=6$d50ՆZqQ/nk([A+/fsas>O_b"JQK{Bc3dmƟ6VF{P),(.͐̇l~2qt]hc(p +"ى;$ٔU)ł4<Apa{ڥFEԗFꇽŠ2ьz4=hq^o;6\o-@]JmWޞn;뚎Oz/$ :,!I'G--N/b द8B:[JfB~F5ѕoʃZ~#uIcHOt[bT Tb":ܤTj +n/nR"Bޛ6Adk GyNO,ps/}#Lw-i+)w|][}P&YQ07c6vwM ~;s(IXG,7MeCj?uRe$$}R\XXDu}%x7hm70l3@9AB .4䈼"'k9SLXep;C;@([JooEc1asD@dey6*\~ }tުidsBеD~ú!7O*wrP\N*,o6nΊgqO@િ֖ p*~v`#қ2 @>€>d6 Aj}dW^?r]QB‰AWQ$5]jqL,#VJzF脞i|v,t@͛(o.HAlϴ({}yq  R-z˨jg*FafSbIv aY]cG853#ד%i{1^:.]oYr@ʅy4SzM}{@-m?Ƭ%c.6K  +endstream endobj 1565 0 obj<> endobj 1566 0 obj<> endobj 1567 0 obj<> endobj 1568 0 obj<> endobj 1569 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1570 0 obj<>stream +2/3R"NQyJ9Ix\[%*^Z}hF %M_g^2kO|(QmSdYG2O;ގm큹bNƀB>E }xWD9ך \,]}}q[%L}JM O:Hrؘl|h5 6{j?A8-1lB8{VsѪRرDR/lr'=/+7x$,9RPeSZ',UeC롸 yɽ&ʨć@rAN&s݃Tiu;:ȭR펷:_0G@*֠RTeӤFo&DnRu_Mb5>lzmO[hW:965{FޤpO+޴ƞ{<J$m]rt>4X`H[2BSݯ8 +תBO?Ez*s2%#Uf;W.5Fػ=[n9_oϸ)F8vpQd +jehF\b xH2qc(B?-2L#1SOuu+c3qT︟Kv/0TB]y=%F"VVjtVit<c*$JMEU`<6]-# m~5SxJaR03 +d7u5 #@'RY7=ăB=Og mf/6g +K&r&N*zWzĵq/jL4?ۚ9Φ? %sK>f.AAK儶!1=W{W[aYo Ͼ +endstream endobj 1571 0 obj<> endobj 1572 0 obj<> endobj 1573 0 obj<> endobj 1574 0 obj<> endobj 1575 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1576 0 obj<>stream +5۫TYudx\f˅`" +`N W7*4*­v'v"f- s:26L*1:iSpw%"*^zhOBWMY^=פ\pGm%t°խPy5yHYGvRc*'Z(|GV\LdS4#|ަ`AtߡY:] 8MK"4`a졀'bW8>uۧ5V>c0|UwLktT!K]{iE+ ug/V*p*O(*Ǔ[ (se)mx`(l\8"*o %7$=Bt3s ^F֪](UϿH\)iϹ"۫ЛG+s,-.O5YAg# 4+C]39Ff:tס,EFҬ+U4t|nrLqՇqDS س u}3R\.x]=&Y7JcR%B )1>h 3969ay``^7JœZ#q;a5B#2 {M@^\ƫ.|A;òЏDT6 zWmS4T0KQtź8!Ѻ/4 /xx|_G2jXI@yv%AW f#biBȯ"YfXE_vZRC3:\r>s #֮(u=N(Gپ3,O׬x%Ԭj,λ^o/U. ǟ1)/Axt;ZC (6% U=tw[Lrs,:Hڝ3`Htۍ(tZ9>ne,u]AY]wn%U xBmWōaJ‚Ij>W3}z/YѮ*"a\ˁ'c>]Z,3~%/ +endstream endobj 1577 0 obj<> endobj 1578 0 obj<> endobj 1579 0 obj<> endobj 1580 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1581 0 obj<>stream +F z3dWWE]xJYǯ8Ar h)üHyoFq }1OnSq4#on2=XASw׃4{'ssCs:T.zx29鿽Q [| +@6Ѩ/N_d /9Nqk+LH͝0<,+cd>Vm66=m/:K32T̼ Hel k#L9td-둡0m( mSaB93S+cvXv#ESJ QM#{s55{O["|_0wʴ?Ct,`oe%HOɽ!IaBQƄ us0o +sL{Eg 88vWip iΙ[#˪xmQdc+fu-_^~5'EX6 u~(6t#ܶR6T9TC^ Y!䷃Y5QJ +endstream endobj 1582 0 obj<> endobj 1583 0 obj<> endobj 1584 0 obj<> endobj 1585 0 obj<> endobj 1586 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1587 0 obj<>stream +pM$WG=7bgM=1"Ӟe܇ءkD@;hM*e"3 (3iH4P/46xv#7yMۓdw4VW|q>2ELZjI]=b,CZIvqԖu/$v$7#f3}{oI8[rADGL`ԡޤ 7 +Aockn8Ķ*Zm!L>$ @|<}>Z:irϳ>ʡL4ΏCQOq/>D7+Il"]YwpN8ijgG}LզՒ|k ie :|At]ܼW}Ax%Zhc4QȏrrK=i`> $f̠3~BP|ζn(_MzFl1vů8~kŇ}+t Ɲ #1+h£9 +Mn=D^+QK1dAKlޒ+SE:E0*f;əA@X||;ui֚`Q3#@SGel恢ɭq0L(s"ɟ.|_ľ[0y[> endobj 1589 0 obj<> endobj 1590 0 obj<> endobj 1591 0 obj<> endobj 1592 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1593 0 obj<>stream +KWVވdwP]Ӆ5MEHIW=tAny'֭nNqt2{ɻ.{G܅&ܖ=E +AX&p ~)QXQŸ~dQP4Tf~LҞژd"7 %chf]tZI8Q4c ÚO:Տ"(8oI:G:ՄC:ɟD'y@ P۽λ$7~'H' +Q-޿Kdh׵XNưwDG!Sc\G|DvP񐧐Η2NZ˨RP: k(ǹNi3&Ӣg4 ,3:V(q%_^k=Nr0ݬ)) gߟQER+4Alv)=K,ga/R\"ُ@#`mT#uk ?I. +9߫!4=qS7̖Lz!gs`Ř#P4gӍ Ў1(1d:YNO~ 7,@|-ϓOX-+2H}u]]UYઔk F{\II9C?w]qD՛2@umQXT?rqhqfdv5)u( d=u"܅  +endstream endobj 1594 0 obj<> endobj 1595 0 obj<> endobj 1596 0 obj<> endobj 1597 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1598 0 obj<>stream +<rF`}++d݀-< ayetfZދPq_:ZpQC{%m:[Y49C#Uwr0ᰲ_a ++ Z^DPoe XՒݻJו%'Xk,[QR{w7Eȼ$Zz#I MSVX]l@BMV243rZVEQt'=[MX L(d]j6!tSG!*/h>ˮh虹*c%})ϭ;łVyZ~:u`Wd| +>?a<ܸ3 >E @R@+q~KLp$OWs wDކ{@]߄!Xa~ֵjF-`۴I+m 04̖Rg +z +ZtsQczDkZ^)Uq?5|CؖwT p@Ѧ{mhMPT=-2SR%q6$n`J]7,k ^7O^I )mlb{\ ĨU,a+LY͸hBGCg쎇 {F\|Qb~ ĈJI +F3`{}c'ND5"9h#qGʰ uzle'95/$n0]xWЀH"?.wq0U K,8֎dK1~܋Bݻ.\NVq0沁J# YhdZ,y2yMSB\UuXnl@n..ceczkǹd8VT?rSml +,ctҸ|Rp¬6-Qm~ ۦ@*Q{כHc{!bc!PFֵݕ{feqkUj:\,'S ų53 ސ;YlʬY0vl]N +*L67O(/7&PuM> +endstream endobj 1599 0 obj<> endobj 1600 0 obj<> endobj 1601 0 obj<> endobj 1602 0 obj<> endobj 1603 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1604 0 obj<>stream +-g􀧮 ӊӭ=P6 G vQ੝S@oSqݯʞm2VDaiC `s1m38^u#v ˸ @L;Wcusl FBXtam/nm  )Z5`zVNj +tRlW}?nz~eVXdKi-=uz:1 +N׎*f|3 QxLIV^w~WXK[a9[2/a>G:a76CD f_ {6?Y)!V>) G@wή/sT36>_+D^ɖ/-o!g'ч'NWZa~{^&~fɦ;CZφp)BR\QRAD8if_>.Ҍ O eIw` [#p-n-{x-ۿT:wM$~>nl_x2- ʻܠCG&!562HE\[^@f,꿕 L8t)9snQ&gGNFQ~ݚ6!zcˋ2 d4x[\ĐԾW-KX̎fԋ{@b64=4?)KAdDKr~zϘ$/_BZQ6@:K LǶZՂ˴iBHcfrVB^p&QKn^Fd~v≧cŃE>U'"< E,h߽U&DY2 %-ψDZ?b5sLaej=,Xn"}<]\r!UMaf%_dy1j5fSqo7`I)' hom@ϻeh;}@IU+Qx7~#GcLW =ZgTn}XEUS4O}!ަS&^ӏL`u$Ҫ,Q CKZ J} D)sbfpK7|9ԇr~?t+=YP'K>b55R_ /wSBt'D fL2Vm 2ڄ@ճt!9'$]eV@&_-:hxğNAl<#K XNxx_t2D<-Frc +endstream endobj 1605 0 obj<> endobj 1606 0 obj<> endobj 1607 0 obj<> endobj 1608 0 obj<> endobj 1609 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1610 0 obj<>stream +Z Q a܅Z]h1%ĆGid1(W +Dg7IbL,)ЫVyAZQ.=;kyւaQK{pUtw˫Қ()%(Π؏nw7`O)hCsme?6(3)r%>L qKE`|B@5uFv'Er։ +D]աEFN {H&6O'r=z{{!);(Me]Sm ߺj/*9aCnc?").uxɦt'Lý20%!#L1 /&nRR5$ Ŋwt$5QUZմ"G+3|߿@%, DIܵ%tq +wc5@^s-,w _j:4aʹQo1\.9^aJj?VaF/oߓH蕈jjlS_5CӞsj[9boӺ̚c8_Hצi.y0+9]7=-]2nFP/aNvt&og`p=,>Sl^0d8Ł +:5w?s_ER@ᢱ.{SVju÷$$ye+E{4&}2w yh>\mCC.9|%ZobA |@%Gu}uB͈Y]FAk7xɉ +b_C[^^UU\;IP}J%N@@'@~Z(%U}e@ ?[a>IGLhiϑ }=ã6\-0;Is= +<0m&7n(oT +8 2C; azˡymց1;>j4i +endstream endobj 1611 0 obj<> endobj 1612 0 obj<> endobj 1613 0 obj<> endobj 1614 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1615 0 obj<>stream +jд +GwB1ܐYأQ Sa֗/ˉ-F*[7VOVcgL'_ƂjZRG@BCb4^d ZΛRYjx;u`zNq +Uc)d3[8&d_j̃j+x[w`\ +8bQrlU̱U>m4v'leHK7> endobj 1617 0 obj<> endobj 1618 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1619 0 obj<>stream +~AEF$ӅAuw%͑:9QC4A$5 +CVvn/1i^wմ -Kuf4~|",ZrWUTMfy䖜<7lmMv $Ye_ڷTŶGtҹءDi^ͫ+9Q!?Ğ6O!Ր|N7ؚO0#IA&DBKVdm󇔿k*tMIg;c% %ME)Bn־zrCXq +ˆ9+uQp7Gړ+S]ǰ)eJ.yRoo) ԒyBdؼIkxSmK6Xki`=*&OaUbfKlV?  $OmUidH$O?CB?`d {lrNTYVRD!DxY1d +)Yy: r'LxD^Jb4EfB{T +m 6S~$q>z-;XYw3\,+bnOO@؜uXC'x}`]z21= ϽC$e:Q%5-ML~!̠˓ƅ4=%2> endobj 1621 0 obj<> endobj 1622 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1623 0 obj<>stream +x{u9QoeQb[^52 =nF(o;ywҦhmf iBϮЇB.MHE(X 3 T[pgM&CCLwJT<ĀWK."eY6~RqPGu8]#jr7#(R ST(Ɖv[t,I*'sŨz5L2=D'+3{5ìvQ !JY._[c.3}GMIZ+$ ,޺'vBQXϘd&xO:M?tC$l\@%h%Ϥ/re)"T>Equ^(}Ǜm t眈+y +@. oFUmKppP9~Iv%:i kSa\ +g2XO{cLӥ)0=Ua8.&2J(l (㫏'10c8\*Hכ辈w'`7p\{CJ;Xx&bBozВ3RÃx!S"epAW;yˮpLo$16 )b,R,Q#B*83l3!$ˍlRB|)f [&M(:+:IxY@!;r#^oB!q"mWf#>hf%ÁeIEfYcC|x\i> J3 =ƥWQ7)ڽ݄~ $ `u6A8Ŗ($Oc:mpEs] kPԾ3>&_ܱ|bDkbkN|5 B!`v0plCu~SB|+(t +endstream endobj 1624 0 obj<> endobj 1625 0 obj<> endobj 1626 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1627 0 obj<>stream +e)2*?)xu3AvKm> +}(n,,qS!R#"Hɂ L,^W}Ԙ~rO+2ߴK:^ʵ0˜wݝ@j/b Й@?0V!2Rˁ3Zh12U&<ps8+ |2zLg[tsNr`R\\k.W"JFgL~͐p[ j  Ň[ITRI2,ouWlqAgM`N"B:L8K e6Ƣ +I}>X`8wJc1B{:v.}e]f=BzSz⡮1IÅǞ2H%OtWEX bU/̌ .kGYպuAІ?xҐpS"Y>ve _wP\#s|gd߷G>= ]81XkL9mvo+\L [ha;\{ ")IUkmh4[G + VT8_&}q׷n c<,[BŖ5U7wbQWLZhQ&Nd{J2`@2Vm"4fx*f;7TYdx +l}Ƃ@[Vc:G1Z3 +endstream endobj 1628 0 obj<> endobj 1629 0 obj<> endobj 1630 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1631 0 obj<>stream +]QP >x*kȧe~w.'*Ƿ`3 t75lnM5)-Qs㪇YJYiew'd]4%:t:AUBߴ|Dbx"s{ҴlUO= |-T$_,!O#z4zƹ,gԁ+ /`8虻gr`Jˬ$f~k.IS _wKKI(Axm q2_v} JQH: }؁QYό\La s3>f(b(c,:~dgd7w2bcmUC2X2ՐP5@©eh Y zJ$qӜb{}mcź +%65VGh\*RԤJ)X?q.ܶӞqj,>L[y sE&-l<^ƈI~1{ hpЦ0M> endobj 1633 0 obj<> endobj 1634 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1635 0 obj<>stream +hYGB@qzMc1]@ 饫*G$oɇf`b*Y&b,j6 dH"4P,BF{ȃ~ɍ>`_P˕K fIC%{!C2 C7"0pnw&YWM(2_xis;q^4h9J?KV/=A.KYsv1 9t=A<u$'+pD|2'>VS~S6/zC羂H~EYV [lҳŗA7#^|F@/A_>Q1[R@s4D͋k<7&`OrQ}[ KQ`Hl*c:C[}E>GhY_ =5c^MBjMJiˡudvQM Y0'Yɯԯ5B1`DA`OqAeh,%"H +^/ڒ;*.L˘?Cΰweht|ܓ~(eF\k^B9=p|rQ"'Z\ ;eA}NDk8'XZ̉-}J"zir?;URRҸ@c&>1 ?ɇB9Ec](Dw&83J+ +Z;3؋C84`CQ_9H}1jO;V7ce l#񽫐z!4dv +endstream endobj 1636 0 obj<> endobj 1637 0 obj<> endobj 1638 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1639 0 obj<>stream +>Q9c{f$R?M!Vsw$4(qZّF$An_Z "Rm?d[I K |RҊÒ#G]XX3á4R@A@p'=]\wwa5W9f ֚8@NB+=|&Ҭmon Ǩu)vdr´ϡʲRu|300h />SA{#`v|?J( 0\W0" +mٍZ}AO% ^AQ5A8$29u;5H%fI9UXMIV(aAEa*44kOMr$ϏgUkoW,O;pݓȻ,@>Wɏa +$ipW}.`k +u:fO&|("fiuT2,QHq.dG>9-ZM:(i%]}'%L]+טJFLcg;~VP2-H2_`82KaOմD_7TYbub1y*0 +endstream endobj 1640 0 obj<> endobj 1641 0 obj<> endobj 1642 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1643 0 obj<>stream +uT3pMR(DHBpl=Ĕ0wVE)Pk^er\inSs\J倥0{*߷R0ucl81d ,/ۈ ɇg*^+eϏcqvMM#݈c鑰4K+=W}ۍ +I\Yxeˈ=KLn D`Y gfg h78vYcjeDid8Lo4;~dƪGQâB|9uʩIq/7hR2 @>mp7q&9X[ `.}]8U3EM]Pup"9q uZ t<ۧztb&o}ν!sO@,?M ˙Yokū@w")0p70踛 &ДS8M.^T37#/8t_x=ZvOv6<Ԣwsպ:aRj47I +I2~&Bdf-|3/بE.ͽ !nְpAV˘i=HQvY;8Vyss7@A*C駵3:+ P=O&dKP8x44_U-K)*ؤʼ 3:8I N}{!P8~:+@y0t/ځGR(8lQwTeZ?tafoAqޏ4Nr%DJ5@'7V62kg _)au+ePF^UAEE +VӚnPUڥ|R3eyp(~,Q~FhN6N +endstream endobj 1644 0 obj<> endobj 1645 0 obj<> endobj 1646 0 obj<> endobj 1647 0 obj<> endobj 1648 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1649 0 obj<>stream +*U&hOXս#%JF8$_ה ha\5J`rC=SٴnSփ"]zn)ĖCR{qTc1ƭ>Yq춐ة0z":#HcGEΓ}Y<|d oWb%9;nZLs]וGG<4e//6#uCj*jR+ ̦@/%V?> mt6+ G:$Kz@v]K9)t5DK]~j??8cHC@f.w}?cІNtCZٴ30rh [Oe|b:h7#[ ɭۙ"R +qCܾ*S&d BC#W }mMDzZ||@ } #XC-O 8 Hֹ׀QzK7"Nƌ'zd.+ѯd~˖'`XM݆w"gPuQ]3P&kFRSQD}$1w|dǾNط~H$!kPޣuyTqgO$3x8%Řj_k #ARL +İ&31QR0>ߝ:ij$ì+egm礒σ*ڬNG[:sAx `$)%\_ h)pMsdԈٓT +endstream endobj 1650 0 obj<> endobj 1651 0 obj<> endobj 1652 0 obj<> endobj 1653 0 obj<> endobj 1654 0 obj<> endobj 1655 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1656 0 obj<>stream +a>09\**)8Oͪx6?%> $xn2(fRAu;SYٲa6j,P4V\:{@/zr甅U┙Y|`KGI=1w3i2,IB1Kcc\I(Θ ҿ?.Ka;s$jjzH Nun({B-&JIkdFzoNfᶓoZG[vj3]S,I +53ImlN'w +}1L&GQg<o ]gU<ʡs̨.UbCg?m?VFm<Ͼ; +(m[MikCܭU\E,74LL2 hkl|q=a(uM0T$\P(gyVj$K}44Eg5VAXRY)>lx +[ejy?NmˍeUYQnx'\+ ( |hg~:p`P¦^"?_>MѨt:yzҡҰ>0VE۸|k+R*KNZ;n-Ԭm'4KĤJP|9U3C5C[[Йc5 H,;qBHAd}DTDU|puq2P@8Qs"oZ[%Ymr#@#H_VbApJ^Xm\y1ÃT3}ÁHgVFx/cS\B\ec$TĠ`օP(`X}E3H<5$4O;s7) bEq6> endobj 1658 0 obj<> endobj 1659 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1660 0 obj<>stream +RBΉ'TxoK=da=DPhl_N:SM!Ҕl<~mLrXAR!* +sd[n-IqDGR2Ӌ$qXl9{uliVO|X#\x{QWj2TM$pxU&X dyQ4'hgx?Nk=7dtxh\za):*X n +r%ŕÇ26Vs+9@?yk81&oZ^_J^Tr1#@3oc5MmnNbdЏn[FN%r `[cጶL!9Ae[5cCz~PJ;:N5¨TNbjXXw΁M2@0N5S@Z"\1i稁WR=J{ՂOmH_d.|c>B>/X7ڞ濤{Dc6d}dz?ޑђ=i^J]y> endobj 1662 0 obj<> endobj 1663 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1664 0 obj<>stream +!pIAf{uoP2kbfF^,|bt\X+ 4,/X5[>8>㉃bU8\3bw*g9kkv (ki {~Cؗ)}l^D$/D!>d 1DƏZ+M8G'438cg:%obcj6?'=?ŶH&X)6vz}}+ˀ( #Wjjw *݃/JKcL<yYZh\?J|6_ yt +.jipņ h'md\DY}R@j~X3RKPuԢ>zH3A"TQ'|9A {pŧBbh~5I?VCeЃ$a-O&."4!^j%?6g3A%N)RcIn9T>@Reb+oB_ \xTtUmGjw/0Z\ rt +mIX +՚@|!J0D_Gwgcp+*ޖ ~X H3ZvZYo5v6y)~2y,{ǫ#s 1a֊[ +=&W#Jmܥu'߈>hGHXm*1Ǜwn[!>JMȿxh m.Uk0.>4՝yw?k9,Ye=mo$'wզݵ߭nsq{67z󰕹I!f#>T)U%D%a+Sj!T/ʞcdDϯH0WA3鸻kN$Qte) 9OIwCGBLp":5>Vw"⋠\`y? +endstream endobj 1665 0 obj<> endobj 1666 0 obj<> endobj 1667 0 obj<> endobj 1668 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1669 0 obj<>stream +ns@kaS½tIJP-8G}Oe24twQd2mś/.k$z(ƤPD2jΨe{sU(2c;t,4WD G%+<<<*;L4#XV~|JLFBQN1[ eCˣ[-PFnysVxZu:Sr Vϋ>):F;5C% ZZHϵeowx V1slH>rಉ?R̦y{mE'8+uk+~(w>!#L8)|KيG5{4w +en $3)gD>{JGF%c'MTB!N_?U1IՍ&~6V7 v'k"d`iS˶Pʝ/K|tkė\|%E\rbÈd#w?h5utW/va +BED&=8/pnKϵnnč禒l7ϰ~{\`}sKѲ,7.'oiLLkK~יqXѣR80~c .[0#8+8u<LWdb<Ӷ!LA"G퀯%Ύ r*,KK|7x\mCo~uE&#ۀbF-T^ Uh{I 2T}Y(r ur>bb}t( ,qҘ%T=5DW.-5y2,I'N\ +endstream endobj 1670 0 obj<> endobj 1671 0 obj<> endobj 1672 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1673 0 obj<>stream +Էlm\T]H~r@%k/B'1cta'G=3΃ ++9(aKaةÇo6UNsO!JFDwZ>g`7?_{[8eyfJB3=K<˧P.D^%ux2(R뙩Dqje$rՑߣE[le'f햜k^Z:boQ$|vCf Lnڋ#Nv D|]=ل88b6O-Jw]=!>*OZ8(`GqS=Г6y$; +rIs*i# q++2cՄ2z$F߿wJyU}Bzz]!WİIfܶL&ſ_~(GjOΦ]u'r 0O|~ ȆeJJt5[qB羿xv7tHi_)) *"kPnG= "SWv~As! Wo_FJ9F) bu&]+򘪽yg{[T͕-;,"“c42? v'1LUKLmZ̫ʣȬN^P*׌'KӘ¿Qg*7'dhKs9.)M|mW{YіLky?:r@ ԙvvʆK6 +x(xXmr ѴdڂmU+ qY6ibu +5Ox\=".R[;X*KLڄDq(@6Je|K1m ЩYb#)V`{n&CKCy<9"-VC5)5@,k819nDE`JG\'~n5!Ow.2c=d`'x?{& +endstream endobj 1674 0 obj<> endobj 1675 0 obj<> endobj 1676 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1677 0 obj<>stream +<~d&zᰊj_NoQY'eX^Ftwe e :֚$!Ò@^Z#4_IˀCPb`+9#ctGlFt&R{o~^W}ToB#آe&wcp1?d;@}'ڷPX|MZ&#qÿN eWlSl!<>_+D ~af]+d8etWPm^f_p͜,CV2Ӄ]d40]rEQTT$ME-?<{7hޓLÙdH DX#y7=Ie1NYs޼zMҺHw4/r2١}klJEgcd F#N߆;5%NXxX3аа.KQ*qDk87Q1ـ>#;nJAcf?yFL:h'erէ15 #K>>Pg"%!$\BZh&9OOOƸKXO4U2^dqy+$ 0<]@pqZڅS=5"arK"zP(kMJ1o,dAoVe ~%CH9y:]%Rrʩq +[JSSXf~d4h8Vu@@<\m X4)ky‘](xH^#Sp+'U")/MwKo"ӼujP7y!&y;^I=f9(C'LO : +'F +*WhY`1+QnۨybsiE6(3:27ױy?'?),!~ +endstream endobj 1678 0 obj<> endobj 1679 0 obj<> endobj 1680 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1681 0 obj<>stream +.̧cZ4yl^q[YRt( +,u(T}gpN +#:#`ޚv8 puT!@2ZFaqf(2x ~jQ#1 ®7Yd6aI6X`4g}}aJ2+._on)MтfRC>RE\E!Х;g?>8d(Lu %)($ݷ';i$`cP%2` +i y u߻Ij#٣& T{{a5f".v˟K~Ans-H._/~rWy/rv(n#~B࿦}S.Z+j?$K3ZZQbH_,:{D8v,?+K$ s%"9֬Rci!ZE;1zغ)̜cTa~iYږb0IU&"gjۊʔ\ hW&gR / +ݫ*8X;MJ܆L@7:(g֤- l!Ƥ{҉=]hP\͇fR_Ica_?`tA4 ^pZl6)z%6d+G&ɲ@Ŧ螬b"s01&>E-%{ Q@G +Q6X<9 +0ivb^Gdxc覩1,ܪ6\)Ajmrf%D8O +@=nM5|kW"s.uNb>yᤞ1<!'C*D +endstream endobj 1682 0 obj<> endobj 1683 0 obj<> endobj 1684 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1685 0 obj<>stream +3V#UyZlf4JqR?Vq|Oa4SFy ʁ;Ըs"cx$07 f ߸KQrT j7X}a}*Q9=hTĔ-Քk8=d>"ꄜhj@*•*kEk]vݸ6aIU̖NJlwf-}rOE\% ޾~w#Y~<Nk!5:26cMK +)-C r&TJ5#F='Y^S='p|b),6ٔQ 𱌘TqE!5AzC+[n<-˃ܨqGw(?JFVxA0T<${WgaBٗiqY(ji\D}iϼh,Qhq!wwpLw:Jy-bY zPǩGI\(r^mُ4}\Ws?l'a=Da KM҄OO߰4"ۃ8\sM]#T*X$-'V <4+W:@DfJBsgk\n4&1zL1zg/YH*9j1~ +EsUì*0V +l +&+f^eQ)0S>Հ1s1i7O8iDTЍϓg;o"FA&NIU;`F#Lo<7ҙIyd9ظʨW+ȍa2%}ِOЇ,m0+/?T(TRkhJ?0 xGzYPC[6XOw' .K~. +endstream endobj 1686 0 obj<> endobj 1687 0 obj<> endobj 1688 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1689 0 obj<>stream +\@n  e^ X"Z +ܱA{ĺҪ|GàwRHZP}%X7Gm -/{l3) ?o~SSWicU=w3) e8ϕ 4}ZZ2V.ar}M{_T ހm^6u۰V~(˕ߩ^x-lZbWJx!Nl +lP͙3wZVh@6-Y&&v + ES(x$rs ,֌9GFT i>-'6>d.A3 P0KJ=࣫8j C?~1M3g Gny2)KU?ƎbW3JGmoسRJu*Aý: HA,|8G +endstream endobj 1690 0 obj<> endobj 1691 0 obj<> endobj 1692 0 obj<> endobj 1693 0 obj<> endobj 1694 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1695 0 obj<>stream +L]#/ZG8ʭFB cT&NE֯U_hY̔/ , Ԇމw"u+rh҅ٿ n`KH8W"lkL2\1K1kŰCU*j"f;L ȑꖅHjZ޺j݃Vؿ Gj7 "L"-j~5yAyN檹r'P=^?]'t].]9] +hkMQ(ce*Gž4(W Yf͛`RZL+1HwieA[1Rgmcgҽ*R%\,>aCFz6CQMԂ'c7٢CB.h`i޿ 9P䂍~5 lxa) &8?e`ш$2i1 3_ɖ@c;[Y"dF͍FƘgq`֫s~c)'z;*kc"Hto9C 3;aggUy[:unQDBu"JjZ UAiJn -NEl.BGUi=A`Rߵ,,U~VenBEzPyؘGݮJ56mȸTګRkyN]QoroEz);pYyHƝӐC^C*@M)??}3]X.Ďi@M/, qc(8guQ3Y^/8+٤,3x}0*n5TXv ot..d<섺aK^EF +}% 6]XX?,7Z6 "t9ه)$+<רx=3NPg* _ -R??6~rO|#!N\9XE #_[na>Qw7x 8kolPn3`Ⱥc0d,EkYpq ;dEAٚ> +`ZFKA-' \jASSM +endstream endobj 1696 0 obj<> endobj 1697 0 obj<> endobj 1698 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1699 0 obj<>stream +nCr;M$^.Jpr|`%VѭฬD}Bt +O:v!.# x@L&ۤy10JkCyp",٣x~wtN:PseCaD4HLʘM`(5>P!UXjrZo~O-;6/w" #rzŲfbkȋI6u|b2_"1s.d>8,?Gylf+~k-?甤b Z!m q[3$^MXx(g:Vz X7@O 2VXػv8> endobj 1701 0 obj<> endobj 1702 0 obj<> endobj 1703 0 obj<> endobj 1704 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1705 0 obj<>stream +eE\L l*9PyLu1X}i H9Fbʓ=U`#g&O ES! aT#K$髖Y[2Ir>lm0\?ݧwa|#< +7^fq\ +{g΁.}}?m5Lk5Yg-aAm,w6~;}ex4m)%fEi:~H55__%i\5-9r7yHŇ.DLeo0FOAB ;8iA!Ϸ2$f&3d9Zt1Jd,2UӒlS,XvoߟŖIۋZEPwgu[ +ڮ/YC$]U_z4As.yKeIaxݴۗûHuWx7YԷN WV"HY0I'$3po:0U^HݥɅ-==itNp72Ƌ\DsdYw?kZAv@C~n:7e +:R?rV=yN0 OK*"Ch LiEVkBjIo3 ]tɲ}V(|d<3(/iy*R=L63y8蔌㷱&9YL;nvɑ2fSCpL_|;oyPiy@EA5V +,f=r!4M6TUZ!L~+|jh]&4[(y )/m,e +<_#y@v#L;x rNI T@)}QBg[qZUg.᪫-dmN{V!{s C)dV bâZ5G{#^.M3@~ 9]\˜p܈D[gW (}MMqm9a|P_ " 3a4Lh..dwR$d Ž=e-ϯGNΙ 9oW@|9b ~)uR*E!X9NV/fraV:qCZ2fj4Ia5Cl #/;UN%(f1!C 4Mۯ +endstream endobj 1706 0 obj<> endobj 1707 0 obj<> endobj 1708 0 obj<> endobj 1709 0 obj<> endobj 1710 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1711 0 obj<>stream +x@lSYs=Uoy܂afˮ7C%y{ݿPbC + cuR\BZ^;gO3wu~&K&PZgrtlj':v:|3eM[?L"J}98̶fk?;Q&ԘOwʅ[+1FE셴< +S<1ux@F>~(uQu] *81 b9(tWBʨ&Fq1cWchv*S;s ~w:B&ayt7u~- WԌ-. (R|wO\ܡ<2/i!!"%;2TPMs4=сeJ31B|x">aFkؘɃޗ1 o)sXa2MD'zʟ6nN{OY5kˡ7>-xG彍upHd؀*' Z8XҰ4Zs݉U[$$q=AU)SL`F(U[-1P6˒J FS} 6yn6PfŠ3ɯ',Ю%Q$K-R۴;|IX5^Ԅ <'O\޴bgԚB{EiO<=szb I5CG +K ~GUGc@P񍊕e + -2j<+ L,HO0EF1d䊘W(=`wup͓kDt PPxn +Oؙ#OcDփV,%7j(s5iq$^f>Q~iz+b87P99kտGʍN#A#Sb)1@/_S8}ĪjFdsS Hg]XնJkhpBYcg/Toh `Ξ>49KgGɺedipy)μ{  @f +endstream endobj 1712 0 obj<> endobj 1713 0 obj<> endobj 1714 0 obj<> endobj 1715 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1716 0 obj<>stream + s1o_P*G=*A,?9 kv*(ZJy 0I Zl0@rb܇^gvb.U:q5j"k:ܾSBR0047uAOM&,p^gPoK|w^f;OIC_MCS)UytׅHk4͸Zc"s4b Yw;pRq'Zz"TF/XWK) +ZF:%jZ(UɚXvF(M+}@ZNڑډBxh1[Gig{D4}q\r#%DT*`]pr236DJЂNM ;<,MgKW0Q IS}mƩ@R)|>lQ /t^qiRlzGZ0$AZ:sDdk7+YLLiqjݣC(!V3D8!&N+9ud$8/=MʯkKEUq-t>u ['q +endstream endobj 1717 0 obj<> endobj 1718 0 obj<> endobj 1719 0 obj<> endobj 1720 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1721 0 obj<>stream +'5U\ ( +Pߪg3OC#(hk"Vg>IQQΚx-dW޲\k&ĎMsޤ CWěkOr,1mH`»f~,p ۛ6K24$$!KX^/ydqa.%RkhZNhutoq7"yW@8IO3\Aߴ0sj!=~U yrSbd98Bg92%_'Kڈ$=ɼԋiK02QN/r{e(7,wЂ|ms N^ J*&$xo]NBðÑZ(#5 %/\5^Mh=O=:}M|K czgb^BEC2Rne `Fs@5 x=+8gDm1/ Pm]3"gF < W]K L`l͟!D:<>O[HxM/FpK51,mMjG-PP \oTrMuDFܩ(P n5 DbZn؝S͢P]de- !OX@Jp"[FaaUOaF%$en腟8mVޤlJ +)i<`0H^Ԁx?h"T$vSиgv,IG>."Cݏg|Uv WWKgxq2DHIMt@+1C̉U=Ճ# +S!L"Q)oJ$豽_ +endstream endobj 1722 0 obj<> endobj 1723 0 obj<> endobj 1724 0 obj<> endobj 1725 0 obj<> endobj 1726 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1727 0 obj<>stream +Xj@k#3Ǜb(VW=O¾` G=7kt/`bp1gEMlɒ^}^9"QB{mI=pt!Ru^ifz6R}{b)-B"OqIYM*~F#ը;Kǥa.+U;KȃD^88Fvܠ`>^TdӳGr2iVQ9 ǓJɲhlT@`T_Fm<Pyy&q"zꯉmLa9 4f,QC +̵͡&doe3BlaZ*2r֒O \+R?9Xs4pGٻn zC_(8 _*PPA4ZFP_m)" +˰RmMOA]8:`+M83h2T{$Gh~&M-< գ-$]ON<{+)+$VzLG* 5=b͖]?Ω.-|oD|j:ww޺mNa10U񯭁{Oдk"ާI]~ mBd'8{Lb=.cxߎTrYPq,bY,>ZCOpJkA ^zۋ/Tdеe:jRҩvoQ§[/7\bZ2iHaN`q +ABhb[ůU6E c/J6"\4D|p<˞$&ֿYyk^E}َ=)5ɷolF"4GY=Ҳ^Z`;Y+]{O5|h>Y"D¨bg,a@8 ut JGGvwQ =pGD4l!S@8Muj fD'₋I|$Ie(l@Čz^xE4$bv"JrhVfw)x4}?tu@9E25g^_W1)[& HP?r) +!> endobj 1729 0 obj<> endobj 1730 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1731 0 obj<>stream +qɝ>I +w2W)Ћt<$k;43-x0οY-}Vu,Of1jA3Cn`ѻ`BT4cc;~e 0I$trxRqmZl"HZ\){`B-]NՅu Nrg!v%owe[9usiYK0f波mqҍvԗGzf9nмe6c&B;Ga~H}ܓ G_ 6p5Y%7{k @EdhXiz^ES-Bڬ,IUZWR4aQqS X`ȷF%~?q3E pW*F)3%CR* +\oWƼ<1b y+Y zGFs݃G[}хOpe< ]a?0[ U /NAʄ#'靰2nQh=BԞ٣.B'n` Нy;{G5|~2uWZ+sCu /`?suo4 +9G<ޛи!" Wx0HJ1ڎԦwatI'@5J6 4gb,թvww2$m-Ճ^5S%3d[K@ˤ!+S=Gn049hcHiv4v1az <|MFcԳ6/:4_$zK\ĈG34{m5'c3 +3c4Lr LoyO&*#Q)YFqEZj07E`Ͳ'6|ߒ87a*xSIUV|!zRMDbf](%b-˸C +endstream endobj 1732 0 obj<> endobj 1733 0 obj<> endobj 1734 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1735 0 obj<>stream +ͱ![hq/2H~k +L^#Л?1.NKД [6F@I/(ءOQ4`/5M F4B2,b"Yq+؜pϪC2iBtyf4NM7sחpV_0ѝQ1V)sPU㼕ӯrc/ :-beҭoa/$;b BR·Jg /Ʈw&'@4Vx_-U3в7R%o!kF +Y?uFCL ˖dFg;dmVsYe;7Bw#M70:Do7A`iqr:sTor f9 +КW94U%ä `O{jNXm ͌0u~*lfEFSMb3e^hFSlF*G@R>x ylHH]Cv-K%#!<$+[gʦ"Nbfٟ ^-De`g)'8G.y]F6 Mt-k$R(#s]ߏ=銰ibˏonC< *\Osv@r5Fj: YJTM):(pLT"G{'[l+~ Db Xl*5j\9%9eclD2ί@j*+v3xOdW CeNQ)SC/>ǍOSFMi,}tuNsFxa^xit=bm)7B- +`490Oftj`%dut伛| لAV-OiO)EHR¶iL΀:tQUE)j3`b KhZ$kp! NyRJ +ِcm?<Q_Ǐ7a2AHE_$&,w_)g/#B‘88ʷߡv/CתMjz>-M򈓮xQ1]BEB$lMEOwk @%qL 'lӝ#ӑ# |ҀsCz=FmKV}30θk=j PAI~V +iGq")Д—$޾ε +endstream endobj 1736 0 obj<> endobj 1737 0 obj<> endobj 1738 0 obj<> endobj 1739 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1740 0 obj<>stream +"`s:$/N6&o"aPCVȟ F-okv4juD-%Ǟ}Q"^GgNNݪxtdSIZc i 'R.S/.%yJa8tR?kJmgZA/jCf+]8kfX+*m:DMp+x l-$sYxaF2c + (eLz(aq?:NZpO-z<#h0[Fh@'Xm9" {%D 2IhW1/_Sf~֖#9&!1>ȑk s1Gyj Yoµ$X;0gׄ#ju_e\;&Qh3\}en{;fb0FMu=5G"Ю*YKOHQikP0,޴.-ݱ] +SYV7ʓ!Uٝ'(W_X\SZ$r"lR#Ht.wRFfޓ,﹬=tҾDawl,3q8hίOxEi@Qc ]ViJErpBOZ<-O9F`?c-]Y# h5:tiW +^@6nH>fp䦌AȐ1U~`]فh㼦H 1{eg8;A1|3+nfJVߕA*md.IME$cjB::8 JeuZLD0PBD͸PGQ OhOjy\6:)GiediD-͵>ډƽ< g3/5hNfI47=DJߙ +B?_U+QʾEu(6ɷ*z3"%LSH[[w]/{_{ +endstream endobj 1741 0 obj<> endobj 1742 0 obj<> endobj 1743 0 obj<> endobj 1744 0 obj<> endobj 1745 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1746 0 obj<>stream +cuYzhuPmkZ f + " <pWRfufzsФGc%|#a1?J3 +OFI/={v>h-G "mTVUԂ;y}3 ~-tR?rIG}^#P +gYlےyȕw6*lE ?aFByM$Y<,x'=!e@J0SXW[Q}93! +Ԉv +݌xHy/"(G͎wk4L{b?vy[w=" ) N L@UFȌ̋4ُ6zO'段{<(>[v,gWsI.4[L e{wPbB E8IK?xdHzz8+7_[T4}$&aGk>avG`ʟ;#( ~ɧQ!O¬% 侍m"ZzČ*G#٣c.ݲ~i!S;å n8яN[P51ߑ6ޢ/+j~"1ϛWqM$GnxܲLnJ qB|y_txů Ul%=0> endobj 1748 0 obj<> endobj 1749 0 obj<> endobj 1750 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1751 0 obj<>stream +qɸ`ȅg?i-H=#8 blG=R6!eB|eH\%<%%x;+V̧ 6umfN86ҾPE]xo'T[L֟ݠLup+Z, P+iB ؓ~ZH J[jrRIoEOLL ̬S(^us6`7cu|V/!NēUۍh1 yփ./*Bt+ \"9IffJ犛USF|H5JS%uBGcc^v_wx;LX:nJ &6cMNtB$)^,ʹ͎|PG`cyOB Y’ * +YnH`7?fE@"X Z~2[%BIl?7'+ģh%0O7Z {!M1]@A +Jଃ x䟃raee|h"*]Cɭ(RXbu2Œ$DZAڸc1:H7S;d6i"EM2cz?8HeX<Q!Y0!鈥S8/ saSA%Kʦ6}K )e,̉`WZHj9 ܸuV _z{ :?79O4c=ːw@X@C٠I7X=(jHTA(YG|.QF2SoC -$/,D,ޮסNt/Vt(]Cp';$ cO6sqs_h-7pʦ%Y0L"aPC{܄"޲ +endstream endobj 1752 0 obj<> endobj 1753 0 obj<> endobj 1754 0 obj<> endobj 1755 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1756 0 obj<>stream +ij;ۙD<ߘ|zv~w p*xMܸ/gubXZy[R[f72p)0̭2Zmȓf*n&=cnf|\σX*tjDck_Ep04BW'Ϩ9ڰk)Es%jpjP߰$uҝЍ-e%Gv8*h +/pIZTd63นŴrL'I\TK3H.ε86pǣBރg!G V?K3 TI\ddM1&nzg.l> endobj 1758 0 obj<> endobj 1759 0 obj<> endobj 1760 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1761 0 obj<>stream +n^1An +Jsnɣ1=o4䵪0cWY<ս&XB.Db:{OwgU`k 48B2$mwnĽDg="C;rSlIpԈ{q +㫍bgҏX$G XU)b_\"¦dLp}g?8񉚿Ғ JotGU=AIq:(G+tfܥ<~h E62nޓo=[hl$+Z>Z̗QԯV +1(HHT' +eAt\}e¢l (~œDVu:q<;lT4&9>F4Af>;/,q{NeA1Ք0Iʥ>£P»k[PLpA [EoM*_~ <ޑD|y0*^U]ri1 :|qaC.Hu+_A:Qs"p+;lK>wpZ4uO$D)+1D_}Nr춀y`o/R G",Tv<hl!h8|pVoeS}C(c4 XRinAPGn6`}]mSIUɳOL>{ktFa_baAQrW?Keu Q"ȵ9sb.#hRN$Gܘ2>oo[E_3 >9y&T㵸 tͬv6[B -3V~57a29PyrU]O}E}U|*lJ+G.8euBl1KZë׿,g,th|Cmid G鬘R̀?J׍krm6؂|j<8 *Ʃl=>B ;yԸ}sd$s<6-R# !c98nlja%W[[GʦSv g>=`4p\S*紹m,:'x4 +L2B&8\z({5 M" *o9 +endstream endobj 1762 0 obj<> endobj 1763 0 obj<> endobj 1764 0 obj<> endobj 1765 0 obj<> endobj 1766 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1767 0 obj<>stream +GXCLWB4+-x7<\vjXjPePn߀=7X+Vs8s5 ߖAFw4v2/F9-w<7sfW.)^S7Hmp<\ +70ݶ8K_ V&>.8s֭Z7"bOtܸ~qytQ?#$!gv?9qzi8 +]~KL<{CaTe=7G%]]t&(+ J+t2]۱QlብBG),{P?yQX !t3 iA5Q:TyqJؚrp~Kfb0latBqlKM[Qeaz^״5jgJ[r]pv X+fEGqy/jV݇?E HnnP GɲKE'k")Rm_cvx䫉~yu?9Z;MI\/|&l@6׳ѤȏzN?8=Pެ$H>oҖ%ύ/މ+FŸ}9@e* #F +m,Za2t¬.874M %a}uް[ Ji(~iO8۽ρiS9bY{+fXMpq1Om=O۶/[hUY\( +sz|fs FŔ`>9,)'&#-QE!NuN"Zxuw]/£e +endstream endobj 1768 0 obj<> endobj 1769 0 obj<> endobj 1770 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1771 0 obj<>stream +͞ATdiz|^Y9nH^FrqͶ4h!}2-z3Q(J?-0V︀.eEIqV¯Umx{ +)@Xz%"RSX nďB31dR#osI:b1#?>9zWPN|߷HkqmUG_9U )wse bPp 6wL "|X^@M6'ևR$*Ϲ@rjVo.͑ yy)%"'9^$8&^lRnC~Ky}zw3[ןv!ϙ.n~ӓіxs‹wS$S u+$HR+j0::)Ȏ;%Xly =fّȍ܄j(}+*}z8.}_k. J&i +f˝y z4DK-|s?juq:RS!gV xrc46w]w,wOy^Rxΐ䠾܉pJ(p@QqII{I%Q +5~#hǁfj3G(փłmvGÅ_r$M}TS (ߔL^#Lm:I]򁓑w7;TjX1Ng &)Eٽ5xʻ?O[84D +h5BVTvʏ6d"Ύex@Qx՜vB/mݪ;_UL.%% $-7w"tJq/c&L\ԛ⽀A&:,Q|WCjq4~"t{Oj_[b'_}yZ5FGrYvAaqM̞ʧvyY'"[BXP]m[x %#i|8fIf  @ n%Ѿ4!*Y\hU;ڏ9/{ЄIpb#y߱i5q% +endstream endobj 1772 0 obj<> endobj 1773 0 obj<> endobj 1774 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1775 0 obj<>stream +vD3%D?FrR$MG2f? +Ѭ`\*^bVʸ+ ".wS]؈=>?l1C{39%w FBcHLz˸UIXg< +`|0$cr  O(A%5%,JEϞxai~avut}[Y[Z.S)SoKPRm2uCX~g˃!7 8^gPdlx[GITT% +W5ߔqA Oi ^Q! PTI;4vR8́=&LxκmyKF2*^b$AT3ʧԎrK_B)IS) >5)zO;L=o} 䩣ǽ e'fښ9q cW=g!V;w.2n!]V?pVpCQXɒlJ1 Z5 q+s +<<Oj=I6a{ËZ5 LtA@6#[`ӑ ~&I>ѭ`3ͮsb%yTj3 }of!tȫ( :S~_uXM,·CG:@'1CB;9+Nհ̹6O&M@hf Jv,g-]ONZ7 47*v!ÃTXrjG0ƙq{%B +:nmD-|CL+${}Gi(t3nĥoڿ\ PrnB e +5> endobj 1777 0 obj<> endobj 1778 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1779 0 obj<>stream +rɖ Qn9z4t9[ъ~&G*,"ٮU߽ p̻$$"й!.CXaz\S0VozC5i)r ~3|$)g2 +;͜{cRf xPwrp>_Be|ˌg6㧁hIY]q맷Gx[,lטvZ _*gQ7Ks%(s@ٲZ\)q!yhS3Fjg0qH|npf?wG<6ߔhh#eao0͡Dʃ iG⠎&cUĭ/EWq}; @LCвݺo^qvH5꓈~o"$(#RQ& +-h'#NcٟN GOe7o 0&Q+ ѐn(D0>A_WyxЇLJk 'W8& + ,ms\9f ԰5U9<ޙzB,b=KlgXi=S\U5eià  65%`0 =E.NC{|UܠJA0_kH*)$z&.Mɑ)h5 J MFvp!IvI=,GϹDR1lv7A'Y ι*-IUp.7|\(YH(؟m!A +endstream endobj 1780 0 obj<> endobj 1781 0 obj<> endobj 1782 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1783 0 obj<>stream +hPgn֐׉]Œ`Q9d}6;^&Q;R=V%#|"l,1]ʕX.Ɍ|>Qݚ0g |-NL_wv$R6ȏIgQR"tK1wdexN > endobj 1785 0 obj<> endobj 1786 0 obj<> endobj 1787 0 obj<> endobj 1788 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1789 0 obj<>stream +J}_rJ5Qoo=R\abƯ^TАz;ϊ1s2~ݜN3`'#TZ$v>eDcP>#rS;בC*MoriMP_* 'Q8OeNulwN gfquzTjLK@72G̉/rm70d fItI${E %֓Z^ҽT \ߊbr43ӘwdQ UQiFʿZa-5ڙFHXF7hr*LP;utgI!!H}sܕW@Dϧ/#ÃjG:(|Eu*yo/}73%Ri6F9#(aS8x2I\4خvMi-~sZ:h4%kЃqod|ЦVmh^P1ˣ,Fj n-Q hV r砘h0zg;Kxl^ߧ Lq󘺟ꅹ2gF~¨0Czt8:Rl <|PGL!Eu8Ev!L9qq+g_@+k~^"ߌ˼Ϗ!C$$B5-Ňӱ^4uҪ`3FvvF.3+r_0+ֿ5R+Β K9J\p/{'ZKw:iLz3<!0b`}i1%4 QL5(pwe?do: oÖTKH\Z?tbO0C gL̆A$ȾQ95JIaZM(s2UEC ְާ?!7?-z(}1;'dWh}WzZ;FϸzE_#idBRdJr_b')cTPG/ †GUM-HQ0qnjV6ԒYyNrΕ +endstream endobj 1790 0 obj<> endobj 1791 0 obj<> endobj 1792 0 obj<> endobj 1793 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1794 0 obj<>stream +nyof?qerq4/P#:츳N%,hIuEDƙ0W_deo t~| ^r-vrZKOI?^L86[hz}.':(eps$P[gMgH* +!)H#l#}#W~/ ++2fLgiϋ>/w"<ևXpwK Y\ @E˅r"| xީ|VʘQ F>9wHt:d";6bV >ǻ7F +v>iy4xQނVsɆX-tth4[ iSXD@]u V<ݔ0mIY" ^1A)VowY>g=~`1>@oEy-GlyVg'BkCzA:?GڪrsYڊLcxrZɱp{p:kGcMUVcO{WZkw~w.@Ѯ&HSK|3zKGx߰b sYi%02q:6Ij2|LjIs҈j}{qX+ 龓 +Rtq+Wb U@|>`7nTWC_w˽yWdǪ$*Xiqa'"ʩ4 h =aS;1M*:D1l%itI itOJXJ ͖]܂/^eOu(3ʴg1³7ZV5)E4CooˍMҤs p]I6}"x +އW'ހ5̲4CQÇ*$䣮T$ݴ^5S ϧ̍քnr_FG੖Rqb"Izm¼dR .? Dw{ 0 P@'9J.q^h,ho +N#ү_IG0L2終MRiBKY3<Ë1ZEH:Wž2+:J%_(w%kEXH)KS̿R +`†8-!XO>캵m4"*9rm/={WjD>)0Wq@r៩ќ=VZJ4 a]gÉEaX):bJ v43t:1bȥ&(xq:dai) m y\A\"{402WKŸLYhpizPFIѧ+fE)S +endstream endobj 1795 0 obj<> endobj 1796 0 obj<> endobj 1797 0 obj<> endobj 1798 0 obj<> endobj 1799 0 obj<> endobj 1800 0 obj<> endobj 1801 0 obj<> endobj 1802 0 obj<> endobj 1803 0 obj<> endobj 1804 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1805 0 obj<>stream +,l.39)=8#fӀVa$:Kz +RF] SF7 kUh)WH W| +C݆7䈑TnZBL(cU#}R5U\L ^"<1pyRfa /5Z8Ajltt@ +cd?d9dS< e38$E/:F0 D NZe"84ӽG@/+u ̈́mɡM&]L<ԇoqzJ]ҥ3u.o4\#ŘD?yu8` 9=B~19-٧I͹|ܡ +j-=+twv}*6G 5jPYqtr:/u=&][Pe n\w{ GpˁT:iڣ۴𳖄u3.kr˩W j8K<4 e\G]p$_r12}Y5;s,#?vL!0M @S,th*֕. LѸo4XUZ)P!*T{d͕8 K!e|hf6h<"֏b}'Jpvc&\/lb!UWZsRxŢSwW? G/:]?kz{K4X|lL5;bRLճꠎޕ ݁~Iewtzt˹1#M(0ldT̲:F*3#l}=W,DP}v<ʺK+V6'eB†TtTbpnP禧V|W l|%| +I}Hx݅ЉMf;%+ +=V_A1i6:(ƻfXx_ +x-p&fj>jzx&IMRjН>z<3,ސTWؿȸ&kw~LF`'7gov-6tن)]+^3(֑D|ciW90@z 1AKG1#]TV0{qc;ʚy}>>& I#;̫rjf] +{LJek1<$РXH +nt7B{W~5 !{&\69 _KfHeMBI.PW>7 +o9)᣼ iQi45'~V1hbe*Tdp*p?轏V2c_A3-rbܡCv4x[JV:[^OmGŅփbf"gS/>"UۙқO]ǓV_u.2g(NzMO^Z0lC<тqh d^0LezQ\eaU'݉ܤM +endstream endobj 1806 0 obj<> endobj 1807 0 obj<> endobj 1808 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1809 0 obj<>stream +gPj?;nKGV:S>8s9}X뚔T] ˅ Uif/M4A9/S~0+7Mq\hˠUf<O-TѤ6TI!NVN,3TQﶙ +GqK[d|aN#ӈƓj![jWGA-#dv<Pyx"2۝j_S,4zxg+Xh,07GyKWǤt!F_z WQ^,@ʠ`E%mo^O N2!OL']zzhIO_KCOhۂ1;4J԰fݸѯDlrqD5ɋgGrJDDv5>#^0$ÈM$$ -Ho5 [McgJĂ- +8*b9Y7ƳunG5}2 +`딖ݵyV'ǏK+p 1fUz Mgh hIbAc\)d~R0SQYE?1a~=-#B GٛBl#=. ױR +ri"nb`*[/S Y~ð1ȍ&S +y}7kC\Mf/0Lp:7}aIpE8QY k ++3mE}>Ȼ9in_Z(FP1} u$p.Kp&$73qJA"+2Y"Y$TZƵȔ{4.Gr,%5%Si.l= 4NuWGO6AlĉBha AH#($Β۶S214h;b"eAVK-Y S"(W!@,6=F`~[T)Kn*74|ui}Ve R*o_xU2S3Q}Oh+)4` ;'м",/dg=C8 HZOZiwSj`^Sol{3Zʹ-UP®UoB[Nj)A^7".ZOi$/[t~+V(y$ a`H}{ኤj6/H\d2 GcjYi;-(w? v<e5%\ɉK|}kbA6ӆ. |ӀŮ(x*fq-ĩ{ +endstream endobj 1810 0 obj<> endobj 1811 0 obj<> endobj 1812 0 obj<> endobj 1813 0 obj<> endobj 1814 0 obj<> endobj 1815 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1816 0 obj<>stream +R}&V +m*kB=@aK:ea16#$`8Y~3X U&Xļb :kFx0lhD [>sNa֤1]f\ERꘕf)Zӳf,q-1coHQnOh1 V7Eԣ5G\4j6").S3hŦL5?Aic '`~ʟ)|Xqjsϙd@BcRÑ{֒h9JW J4"` b cA++Bg6ԚJ-$NH=(fPQ̶Ptڷjwf(j.9mvrӖoו:< +>YFװ`6/+Y͆xR}I#Ǚ΃_kuQ=@."4(ʟE\)^dNH\)mSp>q_sd;jZ|҃!`'h_4dXXkoXgڪ,Xz`Yu͍ƫ"+*DXDqC0lZ<8kpjsݿaeXvKf߇pTy vA65jE.֋#[kXS`Ԛѭ%$J2g#ϲ4^=i9*@7_||ʕ4lusK +`%LEF]=~:)k/^riV}? +?@TAq<'oʢ4_/:ϫGE5t09AQLڰe`a ZI90D,Ȣ\կ`m"LzmG)v}Q ڷ_sH#QEW'5{ιa]C_t F +&vϓ=[:RQĚ^=H6oTx&2)mUqG<Ȃ^~w06 2pOS$$޷ZY'ZQ.2E j)T`le7Tra0`8pra{H 0M21/"_.k2We-Paۻrװm^Q0b{UlÎY5r|-Bag+m 4U4 +endstream endobj 1817 0 obj<> endobj 1818 0 obj<> endobj 1819 0 obj<> endobj 1820 0 obj<> endobj 1821 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1822 0 obj<>stream +60w7e뻏zxpXÁPI48Iy D"˴74K +l2+JXPQZJ VVkYPG:d%( +`M!A!.19GHOC[ְ"~mD-J5Lz3*ڐiH>_b߯+2O7xx1@iMwl;U_譽l-$Mvhg6:T"Ӥ3c[#b ~wpN:g"CTޗ> endobj 1824 0 obj<> endobj 1825 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1826 0 obj<>stream +(j|=9kQ8o)nv²)|GcT:Ee6'U0=YyG{0SQu5l຤z1&euZ*Y#k삑{ &J?=A YK`:Xjcj7BR8o\d.c o,\ r38geEhk^AllDybzT@N'^hV77}zM;up2ʅUqJ:zl}~صmcsWb|H0"vw\ivG-?mkx+djI|O+=rGM(djO Ѡ5Yʯ#wn0{K9nGaq$H.lGܧ%6M2ZUg\rv*(QFj2,f][[Ѓb^l1vftRxw + o ۬JecALl4MQֈ)Nܱɶ%`vXPa)ɓ!N67oq4K vvAqt\Q#ݑ-" ĂI>t1(eRxtc`4DHu&|cIXg`:'gI̫s-+|YyTD3o|VX>GDOx8L]Ja9~lnnzLFs`=L#ɜ:\k< +x,O#sB!W0a tF#Dp +u#hawT!D)-HaOhw+Afun] _eL17iFㄽxϰR_FyjPxS +endstream endobj 1827 0 obj<> endobj 1828 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1829 0 obj<>stream +^1J;x=:6&Ćx>2%I5?S6nl?#dSu,xȂS" bǙR92p9yY2^(\~ڛXs SlƩZ)Arajq(*c,a8K|r\2l<z 6CLۓ sH'U8NoZAn>?$Dbkևp*yzc؍NE(Z.A!Nڇ> endobj 1831 0 obj<> endobj 1832 0 obj<> endobj 1833 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1834 0 obj<>stream +j715ms]V_ ^H7D +?vp?,<#/.q\-׫Veu +b3_I[!\[apFAKw!?,W~И*<,+T֗Թ`ӷ8_` z +k[Hi&.r$N[)[n,.JD?&ԮD*.񢨏M745d 7{x#RghG_UY,3MU.1| sS8 +endstream endobj 1835 0 obj<> endobj 1836 0 obj<> endobj 1837 0 obj<> endobj 1838 0 obj<> endobj 1839 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1840 0 obj<>stream +JDYO\87Ĩ)QCϝD+x6iŌudWhrr0ع)i[n9!,oSPx`&|^; njLm_!`rk6sÕN t* bCh6 + + &fYoAAe|IgNQgC#U:kyV8!n "4v_i":Tx?PNu%?NA[hǵ`.zNPULxT kC׻GT$Z,aN +׭~x<6+QZH M \a9Oߠ ++rmQb-#=DuY/[#N +̔Xz tګ#եĮ#_bJD_/?*۴> ^Y*mcV(c}ԲT7{Ta7*'fEMa,.]s;IfV-ǽp2?}F܅$rBS@s_&dpkDAv C$X{b,S +W,w7r[~"=F*P;v &T7ZBMEDk]|)ȴ' V~ +endstream endobj 1841 0 obj<> endobj 1842 0 obj<> endobj 1843 0 obj<> endobj 1844 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1845 0 obj<>stream +{E{VeNT8|(mW>tF5?ܟ2s:֛j)»v(Lqܸ8=q\c`&ȀR݌ &x%Hm=# }FalFm֤;[J&Na^ 6Cokѭ>QN Ghts6  tޢH fMzE* n(Y1Ą^ERl#.~b` +Wѹv~w% jpԸ~}N=x4EoY2(UBes{AܻR +7w;P0@@i[ٙ 21Č1 kC`6'o,G=4,iOvՂSh<3_$\JW#]<$c~@IӌQB@֭;HsP_Ң)zț`3c܍O(hOd,<'J1=zf.  +endstream endobj 1846 0 obj<> endobj 1847 0 obj<> endobj 1848 0 obj<> endobj 1849 0 obj<> endobj 1850 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1851 0 obj<>stream +Eڇâ첄 x±)B'iE~wx"6* @nhPΰ{Z#PG2pᾮ/2w*bNά(6ZݠG8+><9yȘ S)fp"X2F@W;7oRjhN}P [+PKO4 +<Ăjd[1Q|,%I;[T_.IАﶋ(E6+@ Y'ʝVtɯ(AE " =O}p=3`Rr#"jw_5*;nbŃ;a%@q;ScmVmݻ}P~PXuq&ip}O*]ߤ%%s>ܤ))Vh6k94 !N7?SZ'tG\#aCYߏWI㋫=6S %ӰW(wnù=CWJN&@hWBl?(ƌȁLDAm5q߭C<җ0agw] }{WXe v7_HLgo^J-)|Rr4q3gfvIy%p$fd{ng_mf5nq+bs/Њ2`qEyD( lgPPrձ wfC䋯`hj8j]o8[9=a(@Dٰ:2Vk^ w:NSBl ! &Bbo1v/kqau<"6::'sU18m9"E_1Lv SI̡$~$q8 7pj +endstream endobj 1852 0 obj<> endobj 1853 0 obj<> endobj 1854 0 obj<> endobj 1855 0 obj<> endobj 1856 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1857 0 obj<>stream +k>3ؿ>qܷDj;!!,+DUAJJy4aEƊQGz6G (G)tjzbZgT۸?ĺAG 5C gHP +s00K;NBNl_7Y]U2a]~4zmŏS'R3Ves (;03hD}P-P2P?9z meuTu| a%d!1P_zpri2y[]@gկPܙS*U'ϸLu)0<'o%tS]Vl`%Z( +-# l~^:ECr4"\ 2Ab:X֧E@!*4xR6O"+DQj}m>;f 1.g8'mCjTfʝ/?龧?DXwPQNk{?[XoK.Wg]DDq?v7p3mx\I^w(7 Յn2h~.-EQ0Calp uL%%D42Y7}o˞X('<`^HOS-4hDPuŅ^Q k:b*r61ގ^b":j{2_}9ZR!>G)`fV*+ޅDgzB ԥtfpb~2l dCkTŠh6fX@8C&R mZxӖl} } +T5o*!7cdJɭJ~|1q(/a&wgɻTJUF i)^4a> endobj 1859 0 obj<> endobj 1860 0 obj<> endobj 1861 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1862 0 obj<>stream +K2wo?1w2K+DlŎ|7W )Q6Oj2X|,y^*vclVx1F =h\'U!ĜBcB/m _?Jӹr5 #A943`zi ![M:|vFZ\ uwSwLI3ߒ;7Q.ŷ{CB?ͪ0< nI"ǺKWZ|I7J? ІtͰx=Q%Ȳ3 +p 'jDݫl @H7 PJ}Hh{jǯy% ub`$!&~[)4tWs0{^8=ڙAzL|! bB~愇XR4R> endobj 1864 0 obj<> endobj 1865 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1866 0 obj<>stream +ozk&YpwHRBs5m=^_Y^YqE؍4 .ĸ~*5iUmf六:QowoR!K7ߑ;UI:a/I'f{Uƚ;E^beNZ|xNiomC(eCx^Y &+36MޙVyNJPUUݔ6:w_GJ)} ex{ibDp$gċbJ+1W*h_1ߛT8oEd=wY[fLɓ|c]Kq" o-Q\~,v Yp* [!jIܐz2MuoV} +p4x.>`)iϲ >p0su yRϤf ^UtJt xQdQ'& +3} 4 =*'00"]I0_31l{uBċݾJzfm:I n覞)c2@Zv&P͉L(ia]䐳3d"M׬NO+FYWLշU'eZ,*\19Ӳޱ6b@%7Erh٫yϦ3i~Ü≗?ڕp L)G8(8!jN luw|ĂwY:>4S`صj~@.D- +endstream endobj 1867 0 obj<> endobj 1868 0 obj<> endobj 1869 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1870 0 obj<>stream +X5P\O$5ZĐK/SB^HFgj9!X { Zte;{@`v$)MI1uO.Rd?oAR̨gAJ2 &viTK~U bH 9B!KZ2Ke|/&sKC+]b^vtl)^D<4i C}T  +noZֽ6R.'rK=NY,m趆4eX )AFkaE|^qB!n߁ yeOM~sB}yRǂX iF{l݉0\ +Dh'¥o$10ͽЀoJB=ɻ@#/n +Yu,N_3 ;qEm5aZ1][]8^|K+G<*vlY)?}qA~GBdjG$l&+g9~ +0s.SQDD|nh{sv-7r&K1BT֮V8q&P/3XAZ;8c7FUAt Μz'M .ѯbhS|2+R ъ +.+QR;G8H=y7)sVP!f/# &PO7JeO e"'rWgΆ?.l> endobj 1872 0 obj<> endobj 1873 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1874 0 obj<>stream +!/<~[p~@,"%DEٿ&,LMNu\moۀD:=Vۭ/y}!qF0h.:tr4` r#lF)]T1o'gf%4KH!6'] n*Wϼvy׬KF?O{sTYɷwei d 2! &O }b'-g5 3[S@c=jؙGw`8\mu[HA+>:l$gPϓ%Jr2~=q𾔒TӒ@K,qсc Q\ bCJ +}&˱@14Sв-&6Ni+6F%\5捖!̽>kqV=ʛ(-1L=CǢꨈRP9t_Ir|jCTO*}Ty_Vlur\2@d.-[p֌1uEၵyG.VɩYr{t}T\0/AXL@n8Nj-*|4wn:|Wj1 3\A*Mg%ySSWan +endstream endobj 1875 0 obj<> endobj 1876 0 obj<> endobj 1877 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1878 0 obj<>stream +FCrSKHgLi \lڶ4d]EJ4?:3Li" { =wlZnmevP""]orݍ2.,mˍGe?  /oX +B~N'~H NѪv5K7*ujv}ѩh0ER޵ 81I!mCBE[L41c-{UAcMjFo9sQ#>unUy\&(u<^:g5fFe!,]b1ݔn)3w*Qte!Qe.%EkEH֟apy~J54YN]oYZ2*-Gj,"b#/jx%҈`i15-ޅF!hi[oo\^+]4צNKث +QڶF-ԥ15e9*azD#}.\M>` +ôy)xqٴ,GbءH֪m󞈫fIeAH{mB-FtY!SѫXv^LWhd]CЉ[ +endstream endobj 1879 0 obj<> endobj 1880 0 obj<> endobj 1881 0 obj<> endobj 1882 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1883 0 obj<>stream +?52YzrKLOF+v:Qe:e$<@MQ*O u`F Б[*=^UJK-6{)cXi: b@@q}dX V-YE 4% hLKƆ};#IM[M1ʂsA0ד9[i}66c*7ǰa)v,^4A|ؿyEO0ؠG%sw4nvC4㘎: k8fdG-izn)_Zwkf4*5?Igλ`4@Kԍ>fqa\xNFy{4#OkJ۔T8Ā{Pz +\޺$B)XZ킺ln̄F:~X, 4V9 +L o{G-L9砗VoBzq[y"iɂ-$5PiPL8cOAXJ:),e: +/ .c^0p4MǨZ!'a]Й'utoyCw#0ab&i-`n,C˕Dtm7^{;omUoRW~dtWUcgNpKTRIҭ $x_%e{e/ ׇZX uƿerL^h6C3lD) s_v8zS<M%5QՙȵNmU,HlҼZ-3z_g_:9Rp0l/ I6V}1)rWpogB`yKj+S@MѻN̳| fטz3L5# ;WUB&3&s8JxJ;V \G~X_"1K6B VBr +. GE@W%NPp[x١S$rbLGKL81x#͕+]V7[!ưRz1 +endstream endobj 1884 0 obj<> endobj 1885 0 obj<> endobj 1886 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1887 0 obj<>stream +n1a`v",A\#S֩Kڈh1ӛ L[BfL`8Fm{D@?Bx=UՓt gI-!vU϶83?{,oh;P:P:T BYzBQ}R4gMga׊`_'Q1յLyɣxE?B\!@_b&[wspzr.MAI#Cl~,oFMdZ#h,T< +o"rڼj4 1rLN,mL3ܭdT׼^ +-Q0QqV0BB0kN=dҰUP$>r,LJTa^Y56^w{t)NUs#`mzNCu kj[C|I]̄QwlN[k{謷ō\V)t9s"rfkۙ ㈆[j99V>[UOj%hGf [ +8ss,2щpF8!/oQi:cKٚNQr3W>F6-id=J>Q&:-@ \Ȍ7x|q:1uftär~%fr|۔+%j\{ +lW@St:RPf*X:*^0`&e|%y"pigR@WbXR9ߎAii%+[ AIzu 2]H>"haxóydwG\ +endstream endobj 1888 0 obj<> endobj 1889 0 obj<> endobj 1890 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1891 0 obj<>stream +f[OGC}elCwW57c*Hգ=LYiXY\L9E,"˾gp|E;=z[a<=4$VIO&Α´t+!w̌pNOހ2n[bC^5v-Ǩ?$eMjBO->_U2{."tzRkfinwiv"S/C˹| ]͏7JǓPdvٖ ot8hEr$ kstKMۮB +#[[EEMyp~hԶ'!ҔB B+g)j\B7vKBrVfެl /ξÐV]=~XQze;->[fNL|b"Ff6@"m 8aƕ\@>1 \;˽+Ht.ހ*'زEHp#yzMj9aeN/**.BC¹40bkmЋ? +.=*ΰJeXVTE2TG2<+(qKww2i\6Q +mR^KƘm .h$Uw}≵{ *xQϠ0|۱Y1gHma=60%8Cd~ zM`IQ` ]kYd=Aq9F@d[H >F;B|f[㴆2$})XS#\_cÜ1O1F& ;(h%k cWloZCjE~";:7 +endstream endobj 1892 0 obj<> endobj 1893 0 obj<> endobj 1894 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1895 0 obj<>stream +|ă䈼`cc6La]D"c¤Sd)Nl,Eweph:& E86fYBVͶK832!i9ж*܉qav7vбSxS^"AHԢP4+x y8ReA7ZYVr9/sD^ ї8R); +R8@C|0N sSNI8u'PSx&q响gѥD"kdz]1hmZa)*=K$6\qCͧ o 8r=mRBQѬZZDuɳ'yȫuNFl{{jpCkU8EPFD%n;[M =oҬ V)97)gU`3iT[;cSՍxEq&W+3mE^ HsI+#,_Yo-c$J1Zbѳ +?z\kK=&%]RM/QmPO=Tᆀs, +8 Yfud`%ۋin*3DiwXK7FG;0 .Aаqʤn_Sbow +eX< (rމySͩUcX.LVPL? 0ȫqwr0E(PWKޡF3͙=YF'yØd`V֋ect̙5We떧`r_";k9p +ٴR +endstream endobj 1896 0 obj<> endobj 1897 0 obj<> endobj 1898 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1899 0 obj<>stream +R&szy2+1aɑpwĮ:VQೃ +?RlRԖtS%9x +Za(עV_њ UfpyPAklw)v 2:7'o+6pXŗoֺS9&!:GpN;A KDPEdlZ+Gۥ0PW7y[Źjo`1{J9hV RR~8,ڝ֪3@)J`}8A*6H4f=O}D'?%gM/Q3 SY3Ҽ_.qiclW$bzefØ,b>RXy Ou ºJ J@bTs'nqʄ&+,֠:{&sB)fg(sxy uDݙop|B_ɭ=\].Bք!U,!/MR!S^>ze8+5־.5}xvVދ}$һ&zw%J9~Kgr&_[Ub>^ 2-`GrM?^⊂uT<LFL41wojdeκĭq+:{D_%RӁWqˈ4`%)8+0uNu*5v8| VwZ5әRp5*>;c0 +:)鹼 񫔊 +L%C,(I,ؠŎÍ;4k={D:|(u7\HN&&ɢ_]U +~Qp &,@Snj'pnwHUGVxSjW9`q]eF_bC%`qH72A6P9 z +endstream endobj 1900 0 obj<> endobj 1901 0 obj<> endobj 1902 0 obj<> endobj 1903 0 obj<> endobj 1904 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1905 0 obj<>stream +8# !rMtv=GM!LC49Z%&SP#<^@R|r"l}҃~*~GW<0`KJldFOZB|Q٢KlLи)mRthVЃoTcD};Qzzy![!h862NGq'y,OX@ +Tâ[1V _ŌٸmdDlNT5MgD;29H&qѹTbn+ K :@NZIF'W\׽HaMjeM P'>ҙ )~ ;~J7 fc)(#=T7H3꾛l-_10Ӕuh5P`"=ngLr !D3Q/yU՛@?~Rb$*4]@v-!_]ޮYoaIbh=gJ +$D(2mmސ4$[=͌cȏz^7IV9ImEX7auQX\7^~KrWSm4Vzuw뺧;kk1Y.t$X*02a䐜}gG8B`gC}S cp3w:t6mn8 LRcГ)pRV"JP53snh1 .A{[&J{{w4>Kљs桄30[""]kzk2>ͮJ'ՀB@m5LC\+: xUeU"!c_}oR̃TG!_nGdzm[Si%b}[,(Y +sFG3|V`"W[D5/l[JR +)wC#_`4d*,=bBJo!3_ -!%>9FO>)MX͖s1Y:jy] ^} +Vq"-vxUfq5Ra>0FOPX^ĕ,'֧;-71FZO-)-Fz46KONcCQ%9)g<."\~!6T1ᱺ&4_? i}5FyǾථ@s⚬v搛XN +endstream endobj 1906 0 obj<> endobj 1907 0 obj<> endobj 1908 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1909 0 obj<>stream +yPg `3[S +H|Oدx$DHCc kdky{ +3ukYG< 8 lc3hhJ?SeGaD0QW +ڋ'P3D+ɥЦ!N.`p!eQ8^X clrj쩏z:bE~ƱW 4(xM(>7w6^Ćs +E" +D:ߋ$IHt#R]b sifr)fd[|dCRYWo*To뜥QtHaNS"NC%jϡ+@YhIvf +z`_iʰ)B?DВVOt`x*llw28Sa3G)=k%uf=K #:Ӣ̠> endobj 1911 0 obj<> endobj 1912 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1913 0 obj<>stream +`|PIK9esűáX(iT0Mi!Tzig[w0̉zzE:3>6NMa|ptzGK(. <z$~Z2lR`e9;a%Se݋ X *jXb%&!'7^P@ +\ n.2Hsu gz?ѦM$k9sq(nQ09e3Aأ񑷽"AN93#>@1[PCUgGjc([wJ.t}|l:+'|eCz]u/m{N14^].W%#ْ]7xdJQ`!E~A|.ۿrihGl2]ԑ؟=BND"pƵ_ZĔE@=6;M)|:< 1BEGz<|$J$=a7\%6D"\z/fʹfPJ XѐNd|-!0Vv# %:sctղCMRmtA17 `^f}'ȊK4HT1UM&P Ú `B9c<~*&/Umo@ J< 4_-(Ev)ύg8x\n%_פ _)({0No/R8LS@31wNt c1f?dW ݠ5 a~l;r-|Lj^ ч|j"x3ĨY鮽vғc&wDu'D'yA~$ +<!Me%J0QqV +|HV0J+~]/p&QqA-44 ^=eȉ`>B}G2SѮǃ2C@I׶ 5K"VGQU)J 4V/?:7Ȃk TY7:AME G!,ܐp͘]-d HVuQY4Wz/xJQ +Y +endstream endobj 1914 0 obj<> endobj 1915 0 obj<> endobj 1916 0 obj<> endobj 1917 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1918 0 obj<>stream +YU Bdu|:R?2EB0 CAV'TkHcTZ!ϻ+g caWHd ?ϳF +g4áU 7?vV8l9R~qȊ5dy%T_26oޠq?Fu(5åxK\4#N/ +@vXQ]"K$ka_^y7IOкЄkPɢ\a;fbQ+|҃re BG0)wib)l#W2iZ7k2CI> endobj 1920 0 obj<> endobj 1921 0 obj<> endobj 1922 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1923 0 obj<>stream +x^qc'a0tg(᜜p{( Kp{~Ӽ" ?4 +'z 7U?=Q=%X1 k9/7j=g bzŤ 6E-L_Yh~d^up!/gIU䈨]e?,fOrΣoSbL!P.M!F+sJ]'-3J.`y%Mn!4Te[6Q!ɍdU7CWl6#*;q63N941!oè:}e=/psGEl?AҬ+q|,!894 L>{̔]MJ櫐-Z8b[BQ h&0Z)1GȂ1F}yո lq3|Jβ%cPltwFRҠ:探^xH&yDBs>椒դ6\- 0skbb ;b;Z~EP3elzι}b]ҋ{#Qɾn:v`-< 19Yy+sdtW 6`t)#q5}b+i5 ,kZJB5dctL:$=FsTc޸z7.YgYk/Giˉwf ^eUI-RE@H$=ȨAH6MT |VD)vQeF +endstream endobj 1924 0 obj<> endobj 1925 0 obj<> endobj 1926 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1927 0 obj<>stream +QF1Nm7o˛5+{Mנ3{tbLV}3-GktpRMܢXckxa@Na&%; +d/_0yx̅Q.Ղf8.Mo +xujVB=a>Y׮_ ʷÌ8 7N3Y覞dM f1#4J zob㸭oOWm)&LϢT$_Fq8cŰͿ FW +qsYO@ye!0~UuųA!=R;) %(ƤDg +_nޛ2Lw>jpj1/ +T[s[.=b5o3 MVŸr/]盋f2ݏ[A|>od7I?A*y0]휗=G[>~Hs>Q&xmle%! WӌYbX]- ,ţIoYV|((JcQR¬BΙH,Ю |;`{))xۖ2-9w1=:hh|$Cmvjg}ݦ&wg/dzC*|c7k, ̖ +JA/vhdVv+@Y_x5ss(U~48 <%Cb7&&Faȫ6wqɪ *=L>D{R9H i3d+t@=]%W}YQJبL9 kYrK^ͨ &2@kGwBA NSw͋FpWTD"-T>8E@73h//>z4}`̓r+{``jPz^ }Ɗ>Y0[$++Ͽp4Ug܅>[VE1е1]f.@hWɾ!D +endstream endobj 1928 0 obj<> endobj 1929 0 obj<> endobj 1930 0 obj<> endobj 1931 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1932 0 obj<>stream +`w[׈Y7~vm߽Rp-dkԫ(Z7 !PWsOgZW֏CBK-˗"oR;ҶȠmt.b<~( 6V]Fق؊L ˈbӦL7(~ouX6hF&#p+,U$k-sl7!ƣ )JRsnta +|fˏdҬM9K="0[sUoJijT7R]q.ylΨ= -9+k早R'ۧWCJ\?ڃN&@kq'Akɩ}`U>=^y:>*k|Qh'k<u?^:x@*cDZU ޝ&&$:}=D ,;kacZW鑜:wlx@o!4X \2$MnO]9+Ů)5CCl0EyG{USr5Ԇb.dNpfYF\aQ/iQm t"6*4h.D۩*RlRVW O0 z[gK7Ht X59Aӓ%]aT꫅p"_Q9#{!Pf$^&Ӓ/`(] +IFKcn,ZP+O!)30Q> endobj 1934 0 obj<> endobj 1935 0 obj<> endobj 1936 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1937 0 obj<>stream +eYcx@Z֯7ǁzDSS(d?@+PfѿrãflÇ E([Ռiy%pdc۸v HŎHO6?P8phxW+uzOAC|b͝~z|(5q]""V6dj| + 44;2QQX@8Y iζH_UGVTAYA $6wy I`6M 0KP`g^%zZd9TMʻBҍ.6^EPPWOW5 7|҃LQ;Aކc cE N2,z\(2.8 +GFȱZ!0mvttghm_ vmq/k,`%[䙱TYh'qﯭs>z,͔,6<œ"P}g8P_ + ?]Tq{{V4Rnm[Wu> %ۘ<ba"g$lF/|+kI}X${ YSo4z< n^nK|{,rN,Ui`=pQTHҔ +فvՐy{收[_-[6o|y'! oGK"غaM |fAcME}NKx yr m7Z^{i=iq~k<1Y9F<4e/eMЬ3ğΘŞFT۬^KeI}T ]bU9'oźET $Ww'a[3BDҋޠ*+cȂZW]a[-k>5[j1zKU' +endstream endobj 1938 0 obj<> endobj 1939 0 obj<> endobj 1940 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1941 0 obj<>stream +YE!M%0ѷ16^jlA) *Hm]..D mGz^i +m1~ZU?a8Z!+!/׃7,kz&ߦK™ jl~xi0toQb^[cF!ok EӰ]CAxL}QiLK̬Su?A<܂ZJ0ovUƇz n,"쌗J)A4nqv% $(5to[gscLGI\/!sN4sĹV]/E6 eD6֝܀,nyH0$yW:Q#xhN׫j}BAbiyy-yv]nAtK)_>z/B?@C`o +CrF |i XAxv-PE{!W)iR&CPyS $:' OS.)@ĿCߐU 1oDA{B1HD#eR)/Q +t5~xT DٯNIi'쀥>eCN1!mbumsVKiNA5/rǒ˧']V_{Y z{ ,x pb@埈OfJˍV򒎨$R )6PSvVdUsBPx?'TiPn +"Y}&Fm$5|L#oq-5PMR(uZOHg3w#Ǡt\ oBH.#K]emɤ垾O +endstream endobj 1942 0 obj<> endobj 1943 0 obj<> endobj 1944 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1945 0 obj<>stream +J]&W4|pK e{w&؊DQsk`٩帯3tG^&#HS! h=oOa(Z"Ar46d9J7%SG*J*S>blAlQU/N/n[6nV$x+ i,)$: Ţwp6ɇPm|y:u!aƔkTk=r'I\SBlACW}0ӱ:|<{7r K9>yo?e UpɿT,mliY l|]ˋԒV;w!P/Z")A$7z me$y*~`͗Y'&.QECra>6i1)UCHKdCC]B~w2߃"[iT򜶰q%D=-nv?/eL% 6%| tpȐ߭Cv=8tGDv8\TCFo&Y8O @  +?a7DU|ikJv6!mhM1`Ā ]@ e:BG|o-I:T:pPdXEML<:Woȍ쌂-H=8dNt2I'Pὥ1@7m:1,d|hS5+sˣkpk}m׸ > endobj 1947 0 obj<> endobj 1948 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1949 0 obj<>stream +Dn˖%iQW­y dvmZ2LW!i~& DVl,*O(v%f ҇ .Gi.N,ʪ.F3qݺU`cs)b+v/꒩ +AG* -D$J%esDƔWD5Ed*>}+uآ ,+G?wl3_5tA:[jGn_#奧.TN-n0z݊{Uzs + )gak1 љ=pc2&i5/Ռޯ!Mu Ex +GAVz++>-al8qq߂G)D2)<=ΡA ]}Es) @m L^B\ڡ;MtFJ nCAa$UARʿ5w>qVO=6˨1:ӛ)jYњv +BU +<Y,"*U=ǧayە}|$>kúc=5Og+Z<ύ-$P{[yS!DAWǃd|fA7{VAJd!ZFIUP*DoK+{we߹,)^AjPҿw/H`՜BV7[>dh> ռc) +endstream endobj 1950 0 obj<> endobj 1951 0 obj<> endobj 1952 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1953 0 obj<>stream +BojBet3V:xk6hAxk wfu>'9r+l:⹦K҃>B"H/:qx*@`O@{jC.?鯁Xփ*A2,9&#:2 :q-؛f8IAeyp"Ru.O8u/A2B ^ ى i*OgOŮ)PM'MG \}L|fd (_BGQGd. cp TuAR:Z8ʈCk֑gYo -:y6MJ eӿܮ`Z+1h"tO]y&՗Pt-yt> endobj 1955 0 obj<> endobj 1956 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1957 0 obj<>stream +d G| 01E`cYGob\sa?)Q"-;ya@Lr"z@Sb,}⓴_C<\(RR<60B"`hSqh Ç4J1 ]M2۪c;'F)6|"8B O^ zFuC(-0t?WG뇰(2a& +?RV9nCPs@ԅ +7^g[ +p[i6+g{' v+jyeO0ftNM.3CCߙJ\9yp3Ԁv3lDh|!ϥiEO}`^u]RAHYƗ0Z<3b"\Jd5P3 L ! J.*OR(td)[d%0r/3.7c@K0j=p:DH tWafIu3Vq +YnΒX.4*X;i.8z.VQ׆݉ۿnՉyO0dUjTTՕ^zQʺr2ʊ4qlc?o˱V`}41[8 +%{[rEsRZdkW])[yo/ѿl[Lc|kB>o1j6U"J  i)fxWزuѳ `;U׼ ih!=lsr9]գC3ƃ '=|[Yr3YHJb:.{n)a*Rʭl\-mNߔ4uËhbO ;o} j<8pGV'NYeyܜ3x"E[ moh;r3p{c>_so::]>6JuKg}3!G>2 +endstream endobj 1958 0 obj<> endobj 1959 0 obj<> endobj 1960 0 obj<> endobj 1961 0 obj<> endobj 1962 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1963 0 obj<>stream +Ŝ˱Ñ|.ޘk7A +} +ı`Q(BnHWfe0Pˈt9-@FޤO}ra¿u_ۦ6rm,沮ijny.a6vS2IQٵ1v \ iJ5qOD)' Sp`0絠Sȹ(_Hߜ4;cޮFTX2Y-$AxФ?㘙("0uD[vFKl\;׽dBotEN,+VgC/]dP@eV֝h>J":tަ 2M&ԴjFUc k!=Iae6LL57oK³Az h I"׫#|qē$ia`Ϸ/yRo[qҸyk 3ã{ܛ}$ ,o㴳.XZ&9KE$ L\KDͬij7.U٪AfSp%eXyW#i͛O=Ʉ9,",rWo&8!]N9vhzĮa5 v~l +endstream endobj 1964 0 obj<> endobj 1965 0 obj<> endobj 1966 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1967 0 obj<>stream +{kX{ta--b ?ut\Wz>\(ٸ5I]#e~kaeQ5\n~rC&sA G&/#=ʨizu{z%<~sU[k Zv 7y"d)dK26_m*WH!T}STi钛$c\<^GB0nd/Vc7: =3N\wQxB&{7^g IÅ(5Da%fz곺>K͎^@X$[WiSȷH? +<$ " ,AtH*[ϩ NBïFI_Kw 4q7N>@bJZ{%7bi,djeRC5J$GaN;0U[wp"RZۑgdf7:"p'L:ųXNP׶yʱ8C`cE<x L{S@\u8!sAZ(9l,W[ +7lANś5 NZ ZN9ZBO%S1SHC[kf. cU1e2*בY+/A'M <+.2 +nK|)|h NȆW5*F8Cxoiw(`4sQ> g6x&^^'bRew'?`4ThCNG"[ +24܃3u{;~V ' O^F ̽ι 9Wy4T&bcՓK[  A9ٞ6c"9d;ǟ$zPh7M2b0+DO +0r9e;SIOld<ԦZpvsCqhk3[*c| +endstream endobj 1968 0 obj<> endobj 1969 0 obj<> endobj 1970 0 obj<> endobj 1971 0 obj<> endobj 1972 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1973 0 obj<>stream +ov6iOr}j$WIe34)|DLD: KK}aHѵ;?P.S9MM]@5 1soK|L@oh=؊fǔ<{zo=mkoT1ݼOљSTu`O?f/Js[}3﹛f=`] ZkfXȺy8^0h߆tKD8@Q&bi0Gv`zVFpg\X|R/T{ۄa<+}TJNjL:O-:LnQ@'l o*R:7A* |Bd{rHr#BjNI3M#|1qTjQFR=Aum fpKOQX(V#Z'nL \G=ʠ珰QKrӊD|{.FSp|^=vC/&5.D\M"JcU#u9$LFDOG{"Eh'0퓾[+ݼ/ϟg[\&(pT{}^{ + Dgiތҕҏ2 Ǩ$+!zC>%4:x/]MakZ?@SI$:`W G@%c8MW46rتȔPI HLZnɕk)+Ίzї`$1yűDg$+V:Z0nuۂlZ(3jB¤ysNvmʶ:;r T 6e` a:{ KWJ`i|B#a?쇃j1[P UT^j"5S >vxSi:es:Cp|őh.Ks.B#6hN fMZ=BWo% o&$ +endstream endobj 1974 0 obj<> endobj 1975 0 obj<> endobj 1976 0 obj<> endobj 1977 0 obj<> endobj 1978 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1979 0 obj<>stream +HB*Qxe@ԜQD 4 `n]G΍80f:_U^$w"(9^dj`HBʓe=]Oe ^]1K,bH1ȟsN;w{u%73iŦ^87F?R-ɫǁ8-ZD0@/1|}# lNO㊶`gh:zh H:cE&~wVt8%tDjWeNhcv:GX*"tcog(Y]ZhvTٕ>t&ΔwOǶ&~eMyim܏>lET `%z ? F!kӅLYzc~Urj &W:e Cr67z +Ӊm&e)jۯ;p:P/"<̜d@2w -76~_J *%OUΠ7'c1Eȃ;M+'tDĊ!&|rv)F͹ xۡbiQe6 h?\_^n8;M +?.Ū>ut+K[Zg#YBc_M~ҍu+>:! +^ĝ0NÁ(I\XBnjq2} +in;#}ڙ@BP0)Lm#${dI pe~n,NzM܇n}1:MX꼨k,R<(ȈRЍd!5{NX0Ð"0c5 nD9Qrv{t{ל]Q%,eAV. ]\mİVu-'ÆIA0uN^('fhY9Ր&G'k0,UHan)7q}Ya1 +kC`{e[:upJqqLs{q_K]h0-0o%aʎR41!:#O}J6FY=s7d+Ӑʚcm~' Or]DB> endobj 1981 0 obj<> endobj 1982 0 obj<> endobj 1983 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1984 0 obj<>stream +N+)!|:Cr͢$^ŁyaHsX/9>i5Ɏ_wmNGSVir@_1R4'f؉<|R tP"n]uIM;ˤ+.MyNcG!w@a'm(Xn@Ihc˿Y8j)1{=q2up?NLrm]NsS|o@e|@M0r`!iܳr(|[BuHE γD] 9p( j[6N:q.Q1 6l8U +vfS:! 9*Ѝ*NZ6?I,^AL˘n/ؔ瞾 (UXVKje奺è//ɢ |BqtA~:eW4Eۢ6\7N3O>Z(%lGFV39\`fMeaRb-Ϫω6Jy# *)[sY)9Q]!N`_t#$iVh$*ywK8"I9_]^SFu(]CZsg֪Cp/A.CyQ~*]oaӝO1ƅPJМFb]2ĒF+T'/sң#yn60aC&-h S-T{xgP He*\dc90n.K1qgG[)sk(?^@8[-W ?=Ht`Ff6Us+ 43WP +dHBtPE΄4.?DVVѺ*ԥiM^B7NQ79UI@TZKE%FWcA5] I¾J +B|.{iQ"9Wwf /A@kmQ4Eޮ*H +endstream endobj 1985 0 obj<> endobj 1986 0 obj<> endobj 1987 0 obj<> endobj 1988 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1989 0 obj<>stream +/<ꂫ[҇`C hO=j-g;|0y 7Jѵe$[u| II6Uz,U#!tRo׳OO"7F+s#b7AG~r~,OlpcKGe.~)(Tu#KT*Q?E1F{=B2.#1asP\SV5﷓ WH"!Ś$T;_0$,`ge^v0b1*Ft.Eg(;u}D@L5GkԓV$= ȵŷ[S  + ixM`CW .%kJQgı;ڕ^\Nhȸ쉗OVM(jIω\fRt*giƒY K)ThƌկAԡQ鸢4̽˾g ö#&EKb缛{$2^R$p2ֶ~KћO>}䀕;4(ϯ{:ܘ!IKxS:4 m)c0/2k10 0㄃,]K~"NU/BUD 9hv};p C E':GS[Jg˧%~5.CȔ5d@rZ3y3e-QD\%%p 3- 렛8V%7$f޾%NPu'fiaG~Lӟ#ALGU.ZP[K>Q sY+:<ȫ9l} +GPQ̑Oe%mbဗ`I63A*U`vLsc4YkvTwBߍ!~;+ݼX%RP0WQKϮŠd?!$NX4yo xT Cptl? +endstream endobj 1990 0 obj<> endobj 1991 0 obj<> endobj 1992 0 obj<> endobj 1993 0 obj<> endobj 1994 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1995 0 obj<>stream +-^QsȌss/I9LM"D +! +Xt܉~C k\EM +l;z H.[."qPy6po@W4Q5Q>cu`,t>LbQ vޡdwT^D|%oz62XC଑Ş,1h%'pr" rvg?~O{tm.C8kpDBc9TF 9w] +ɠtF4STh$kj6(> +b-\"a/c\Ca=k^uzƸ2EeF7YmH w;S5|́iWŻ%!.ф)Zv,kїUMl}WXē(X€.+7hw{%U`'S Djڻn@}i=JӌeRU@Kc$ Fg 'u?n%6?E"=blKLpZ桲)s#d5fIݼ$vTZ2-sIsa4w)̡͟) z^rlL0a_dhϞ%Fflf.('T8LJ5~tjNq8>-HC nleeuB~0kY_+6Yx!:3h7Y _KNY1$5+F$N !ݪ -g cTՎ:H*.{oUrMWn`)&ox6FA p^fZLl p +\W\6 ڜ3f1~@Dei,nLifx9 +endstream endobj 1996 0 obj<> endobj 1997 0 obj<> endobj 1998 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1999 0 obj<>stream +fM30-ʱ>i qv%$+ ag<F>*Q,yO3@|U)&79XvNF\p p:o23{c-P aeKya  BIuB4mO /fd9ZaM +~ݒգXLs*Rq5V0,%,fUւrOTCuQ xPou:.(ZZA<Z )-U>F^3ԄW$)rfEa":#FF‡rC^yNJbZ /5Êݠ/"z)G$cHF}X>40K= zHUz7p)?|o! +SS΄={LJ/4`ckWS<-Uw֓#qJ~|Џ\5=cZq-s!"UK9>L,MCfo\#Kcm_dEJs6W8'eNv5i? KeJa/C 倁U\ȁJ"Zh^3ZRݮ)!Gr~UN(ԸQ Ɠ'l>@ԋ!2]sZդY-,gUp|< H ('ůVUtUڴPJt_ىp"M@1uѵbL3R%`k/S#= ![mȆKACG=vmMӟޔ`ouP{]}_ +&OlJmHKXa8ұXL +.6Z$idm y`9y _%8_ L5!_ >D~ӔI] N/Ç vGSR<X+MOހ;}a*6E8$h+(Og]CduTk1N +U/L:]g+'HZQ# +H +endstream endobj 2000 0 obj<> endobj 2001 0 obj<> endobj 2002 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2003 0 obj<>stream +.`}-ς2oZ Y*kAj%0y."FomW,`[uԱ>YBDcK-N_''mf*1sԺw y]g̭q\E ɵW !fP!"wW$6N%U@w7.A#3ܣߪ}˛h_Epj꧈yF#]8%%:dX +!_ n7_~Nc(EF~.âo@ +~_܊bU7?}MŅn6iP7I/I +.$UZHX5VL`$R:%5C:qD7F;z6tߨq2w~Jg+a|J#\ H%!/>J1gxZ ȝmgb LgY VPKT致< `-)(g27ner泌!a"klyMINid⾓H:9NziRŗk>E RgBK^HQAN-Zd N=M {umK#JA3P˵umrQEfl'84#wk s\?:J#ҫ0c>CՔ  }26 +endstream endobj 2004 0 obj<> endobj 2005 0 obj<> endobj 2006 0 obj<> endobj 2007 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2008 0 obj<>stream +A>? iY.gC-7B_ZZd!R.wW/!2`40v1R 5TKZI̎:4夾 1\r0VĒlbn5^xdL:_P=HOG_9ϫ{5 0V:x 2V? q.9_zky-@ +endstream endobj 2009 0 obj<> endobj 2010 0 obj<> endobj 2011 0 obj<> endobj 2012 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2013 0 obj<>stream +j$?jo{G(2T{cXXO^1օ{6(iߞX --hrf2K0X(He$*lK ^;o$15i(5C~ds$.%[}TOd4Q8QcdS7)#C_J[2gV{f?㶺<4Ҷ*lx;0 +[喝 G`MūwX`sxјr|/ +js^G`;}igUI5vނha v2|=WsyF7."4_C\ak {'df@ї4qM\ɡ<2؃FRjZu0eZ- Ҋ0 VR@/hc7\N_;Kk\75G/6mm2Ɓ A)`F"u\gCsC'X#y/Ҏ)YhLY']iP ϪΩKf^=y1Fyb5>[=d7İV Y3%ы 0>0d+l #c#R[7L&MLkIA([j_ua5k6B8c(\) A%pӴXp+`+2 rsppF;*:+ATU(F!ԅ ):TNS5I?D/(1e:|+AOՄJC]?򔿗#dhN5vNBraiw#8MJj4JYBmb95nQF8Y'379 > endobj 2015 0 obj<> endobj 2016 0 obj<> endobj 2017 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2018 0 obj<>stream + +9d>pĨmÏYD!]|pw<+˖ xW5ѥh6=!`~I<1̚}>`Zrf3 `r_xȎ Ui^Br 4cX7Hw^orUZS-3fa2gׇ; PF^8fO >ZsA !5Ҳ;c85LNyVNql}夌ϸ;>drWaG#g D:ϬI(a$:Č /s_h _-ۊHCqVrbêתg4JI e Qҗ1`S}Ψ؜UeъyU2_䦱N L>єTYm w(]w)e:DJ8r4W.4Bp$f K,h$}+ٚi> endobj 2020 0 obj<> endobj 2021 0 obj<> endobj 2022 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2023 0 obj<>stream +O@j/y h4m]dΓk>F:5-sc'Ǘ&wU I1}'%wddF×?qj} إl7Z+g-5RF+4ƭztp‡Qǟ)+/cp{BE\8?cɜp+0Gu"$JreY"?ĦxM\5^Kgf-5ݽ.\KU4#NÊˉAO6 4A05W1){(`Q*F@h > +/VkHݮ({f'/5&$&C|!~L*d3zNDUWnrfF8s蒖Xvɱ{"7+:3U W: bdW3Τ'9+dF)/IǢf(ԣ9'OR5:Fw 1aq/Ɋ- pl\o+d578AOVk..jmPYaYt5[?h]ON❎'wB'΄'t#آFixo c %BIo: J%& W&x?1^ON#Ͷdir URrv~Y, O?\HkVBH.^Dƪ*nIFaFT7Z%˄_vfv1U?\k`?7g7em4 cj[&yC\%WMٷM8:>PD_싞ftLZj " f!: }⽧tJJɍ~3[2$_=X5rKHj> endobj 2025 0 obj<> endobj 2026 0 obj<> endobj 2027 0 obj<> endobj 2028 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2029 0 obj<>stream +C`7U39fb"+-[oGW%^k=hxz6dQD?G%ʇ!})',oob+- GbcGY)s&sr]lu^9bZT8D&}z.CVQ ˙ bRsg(9C lԽbCT,%-HBQPm(/hk3Y_>dZ><5؏\?'+,pHľG٪l>T`H\d3!ѱƫVWO*qjBw+nk+grQZ~1dLq_*JY&񶠸|2DCYZ8`Rļ&`%$\]&d:?m%ɟp^\B j0uS5kKZ׷U9?ʅooQes쌒5_z*vm~0"߈k{v'p,vn.ZAuRJȽiƼ=+ɠm)k 6*BE07d<ژm t_|Cٮ/;8MÞfu=x˝~XQ V54zF#Biyf!kP)POWKR ?Sjz"o<ߵ4ύ2e٢ie|&Ry UjU+yN\S]6B߀AA좞$@571No{&mV(H)Y$ج| r1N ~3a6҆Ջuwu u0DSe[B}Pڶ P;:{S@pɐJTɃy#Kv|T˴f^q{]:n;lyP PBJ-+뿒Tov`H VY&ꭱeS3R]Z]+K1:C}Gbn.<v4.LUߪAJk *(@3j6G7D p y㷇YEh;@b/? N@]8 y+a%SA@T(S1ӵM%:ۭa l#4&e:,G/Uh3y~%:W &GE#[|gKsPs˭@*Y +endstream endobj 2030 0 obj<> endobj 2031 0 obj<> endobj 2032 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2033 0 obj<>stream +q!XMJ&Y0[En$׵hvN&࠷ю;P +-`(4`ϡDk̪ݺ_GZ} +ST7 n`)~횄um"U:='spi "#'FlGrEF U +E%}\F*7ވr̺pD\J<++#پF>ຂrT:w0Ht'?DmT:nƯ>X +qïR,3y!uB>飻ԽL~yBBJbҩ asֆ2BAK]/@L89 IH G¶;,oia%vS Pf$KO&/wDj#.~[} <4=z 9[~ ߑQDN @cG _/k}\ؔMr-ؾDF*[#A$"|}ѤAFH4y,J:3y3ėQw&?C +l)eTĻKD(@1U7 +endstream endobj 2034 0 obj<> endobj 2035 0 obj<> endobj 2036 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2037 0 obj<>stream +;Ƴ7 +]×לg1Bndjn}gTJ;tpX+trF PVn.9(XJ4A[nc(S %Z;rj7 KCƳdhRUl{=!kv7s<7({Qw&UMfC6>H<'Lc0bMAڝwv1!t6b*gV"/Yo&]ݾrL+&aVu*k ZM}qiF0cXكdVt'sa`~#:=<Т"\ +@dy!eS o"%h˷@ +`h!F/ZYq^AyE_S'$s\LT#W6%Dpt{'Oa$H?4mjV"҆ǯ"CJ*A4r3V?5~@PN,AXWG@hkL|R0aT"$7uVyɒN45d+ ӷ, +endstream endobj 2038 0 obj<> endobj 2039 0 obj<> endobj 2040 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2041 0 obj<>stream +cٍ6oZ?X}15{0o/@OҴ9=(zɛZ(hX`["Yl͠,5,&a +DXX}ؾ; BÒX͒3` +i5ͭ7Np+er&£@ˬJl>!ޮ"wbi,ge|Z ^pƬܔ g4Q-R=t!wk_F+j=x?QvHqd~!}ȟ:1̓S1b!daI@zk?y,ng"KDg#ٙ4"h`Qh4N Y{ +ImY}cBAp$zYc @=I³A~,Ԏ64ҴvਂƸ|[x=súQ&[ vˈ"6FHhf f+@Dgt$ܐ~ʌ3GŒP6d`ʱ\`h"ebԒanrh:O R5A'mX&OIq`J}&7^&z.m#=>Ҷ>n~r Itx녥鷳2'.p4t\t}+ԢK}N8!FU}- df3͆>4ϘN0qn!l'Mב7HV$*# +endstream endobj 2042 0 obj<> endobj 2043 0 obj<> endobj 2044 0 obj<> endobj 2045 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2046 0 obj<>stream +ŔԁܫSGx)P7FQ[b H۩ݚ=L.$%My溅y @|31ƒf8KGڬ.̈7HK_IV"" vIY&o=_9% GIggv^Z>֛ az)nw[z:EFx3(Ҟ~Hm*P$(B3m~ Rq,8̃lo7|[Tif#]"Bn"lԽmmEş][q*83Ljcּ ]4_ͥ2Bh wDTp;h[<؃-VI] "{gbT5W⋼+.}qn0ǐQ +)f~pNMdBS&5Mq=;&VzE}l>[>0hծ+PuCRY@qC.S=OMMt4UdpMi+1 ۹sq1~d.P}R{=u)0 MT[Ǹ..es4o榼 +'@|+_ ~owz_䔝?/ly`i=TuUSrͤ7cL kO&|H{Jt6*8Zf}3^IWs1ʔɈ??QU!L+Ƣr3LV˨4J +U4zLn|ژ ѕIq\8騤O#gB>T lUM8TSHBX?4z"zA~3F,o"VzϨ<&lƋs++a)}߷/6zg9V +'> ՘>NKX~2 ߈5VTyܳG%|Y%o&Uщ'ni  +endstream endobj 2047 0 obj<> endobj 2048 0 obj<> endobj 2049 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2050 0 obj<>stream +j[m+>^Iw^4N`#²dߝx8e&"o\- 숺F4*u(f糋ϮR}tdH +s TTWh{`~ ii_p͸oK=Þtxv5e290ޢjg7G7z:[2q,%#GtT4fE.弤 AybƯu}ܿ]sf⨤wR`ܼ_^KK{kYRWO{Cާg| >4s.c@i;5by?ЖaAG*,ƆL0gB4\- ['+k6*zRH kkN*d}D:X`]]J'͊t8rx 6Og⣨zz'ݟ x^#P(1aYNJ>Nx_klַLD&P>j-n+^eZשIa ]/_TJH6LapyM`K\ .RkEnCqn8Y9 &1@m|魮)VDȎ{9  +endstream endobj 2051 0 obj<> endobj 2052 0 obj<> endobj 2053 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2054 0 obj<>stream + <6`tÞ͇R/DVG5a7raaKsWEiLLjgFXq(5! v0 } 4AFXܜ{6akdNtRD |Lz'v%%2`h•3m6'.ѫW*oXq 'n!UowhsYԐIT_g E63w> 3žKzGTPv̼AjמbZ`=?3>VE_>8h%ڨP7jrZ'b.?EQ$.ctǞV 9oQJCxHՒ{b +uЕw(ee̍k|Smzr$ɋ9qGMv]8Mv2FO3oаeUΛᕆ$l_>&hԤscD [J gxzyE6<Q_SØs4ϲ) GG +u%<ȇJ \@#}qBa,H@]mp@ә8<"}DqsEW*y(R?O797LJĵ,^o QaxgC2e" @; +),%#GT3kWzn"ӻJZrXf%dr.D:A瞡!n.&YO@~&Wˀ8[Y\WjY {}imsJ >om:&#.У}%g> zs#'} +endstream endobj 2055 0 obj<> endobj 2056 0 obj<> endobj 2057 0 obj<> endobj 2058 0 obj<> endobj 2059 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2060 0 obj<>stream +whX39 H5!M ױE8Dm!ujw4ͬ  BⵅNbDG$h B*`b~h5ZI=Ưj ,F傺>ƣƄ| V7Njf]/2iSgJOn@-&o|ǃ5,E ȱ(~-生m, +zW\8hL8{~[7jdbQu~BX%?JY5ݛ*Ô&]bB7fCf?ؼW[tC8Q~Y>b)ՠav|b;BHrIOzD=cs-;:(tDyPsA +^@t>5uð3;lׄ[SBn +tKKJÝNىYwȐGW62Q,B;#ZN#k=~qfnf{/XPHX . ".!6n]`q0;Pg\ ^_br~RkfO&z#̖Guz 0֐ +j qJ/? *gh`|DrbߔL'EU÷.VuZА|б-7LhT@3R ]UTwUI׶Eh5ҾnfLVtVЯ닩pj\G{9+ʚ@w!?P=eOGkJLѐ>,0i,:BklFpZ3OA\0abJH9Û~ެseЏrcT9_i2hVd0fY c,i"Iԯo7GJ9T}~"7m ȀBYf5GIA[Ɋi.\Z]qL7m>r@XBe122mz}W=zva_)JuOQ  \r +Ew} ,JAM[Uf-ؽ,A562c&9@菃]ۜEl3$"s<],4J5RTAn4f<b9hԔ9ٞL$͹f>"2kn[e5 +ޯkPE2 Xa>_/&tTs1bnyݰ6wXϟek*f" |wx-~νjf5P(+3izR]װ>^(_͆BV}8JÅ&k88\6yTnvαt +nDj== +endstream endobj 2061 0 obj<> endobj 2062 0 obj<> endobj 2063 0 obj<> endobj 2064 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2065 0 obj<>stream +Xώ[u29;;%`Cݘ۔MT``6d>4cD3)<ؒʰu`+d,,0`+>]H]J^;C(̙k'7+sЁbRI3E O,cıqOt \i[)rZ(`)1}IƗ@axm-_i'( 'X +mHؽr +i_s i0U3xO&js9"g }XD' l1ݗxvʸ.$:&: +_D}f=32aė F $&:>u}Tn EZFa`tÃη nU+BjI܄6*~: G;WgSbcA tv;C|@l68;(Jei &")H-|6}}AFtb4t+s&2zi~O#=+4עy=8E[$%`4ET1w3aD4 K#%h+ildS$U_~aRE ,[]h\ʻiY:]>\mgClM仓U16G/Ro Z} S۫|74r񙝡kD:XG$e'k>0i^ +qj4iNos) CVM 1󥀃 ~w3^D\ROyXטfWJ\T"2'Ĥ з{ C|;ӵZ4fqMA<I~daBr3xGT-SYY] +=KkKh}tSs?2]( O.΂ć"b>!vABWϢTYOx?*+5Dq+Xj%WRZNmAdj wWS)j$eҊS~),6eV: ~Vw.bA +o}VlF]sAeDxQ4]uԺ,cmn0Hَ.VUr#[.C(}h+oHZ]1 tdWaPWb!VPj#T0q߁}\rVԳ}G:7=L#.eȱtqtdtz^Ѷ喜{rlĦ;E4;ڇ {S5)z;(V<ُA3}=0]N42B\f\C +endstream endobj 2066 0 obj<> endobj 2067 0 obj<> endobj 2068 0 obj<> endobj 2069 0 obj<> endobj 2070 0 obj<> endobj 2071 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2072 0 obj<>stream +y(? +m^`<[9 +ܔ 1]G,2 Bm_79kJts %]1V%~iF˽EӬx=-Nh@Up4G ZQK2{qjji[b5ȲTv_Mz|ciSyk1l]m9l^"9JSSK%/橅eh(i llY:}6R_U1%qJ؛BჃ2tL +%'Hk/WE%^/ ETv+3VzWfx?'j64H{i^[>[Pp^;·D,W-HL]PCM]$$U{(i'dem˨ M +,Y@ igBӉun4|tmVE +we{/>.:uX|&E(/#+9Wt*q$ y$+vO;,7$`x}N!NqHBe>μ\FMUD ZĩXW3"ڇH߂Mi擗^hMxeY^Sp`2O+2HFodϸ83g3E$ypg$]*'DEYN`dx*_ĥ?JQ*é);͒tXI7&U`3 kf*_U'׽<&866 jHu#k>Y꺬ӾCΛs:wkXB_"۠5t7]Wt{Q)? cǹƺ@JmIXOOKTR"LiFN7mc㐓._ea AN@_tϚ s1]2?^ض4ǗGu@1w (JZ1{Dh$cEÄ> +A(62V-~ɽx#GuT#&m_t!k,.x/j ^z$s +endstream endobj 2073 0 obj<> endobj 2074 0 obj<> endobj 2075 0 obj<> endobj 2076 0 obj<> endobj 2077 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2078 0 obj<>stream +4-h&?ꡟ[B$ns--rd荐38ۍ5= [KBG"tc|+r{h׀'\^7_yWh)ΞY"ar⏜ǯwT +CBeKY :L= +p4)>5V 0lʵPlE`&sWuV'-NQQ ^OFd:v, `RJ5Q?N&>NvyXkFH(v@Zw^L߿QKуOB̓렏qLUZÑƋ{_t?`$@{\9ewG?8Luh;vR0px/WdmlNDIg+[=d~}; ~~81dŗlE$ :iB1cąsTɦ}1}(vd5tw3eL ֍]E2& ]ܙ6}̻r~qXx:ʍk=ΘL'[s?Xrvn!R|Hjm2kXnQ#[]l|D9,h#N*R"E8Oq,e~āoXMrղNw G@y>!ֹ3?l&\c&>?I&T? +} +$ ![Ϩ 1Ykk ~a%5ةdF^CY|)F^*I> +endstream endobj 2079 0 obj<> endobj 2080 0 obj<> endobj 2081 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2082 0 obj<>stream +Iv43o[vAQ-!u~ɷQD=o9뵡=0}A6HݻsLZa*dIsPoTOiA#S_ 89\7zLˤmY0gjKᤱ!C&Gw5J6{Ө9Hޝ5ل҂~7= zYd\ mF@=0SZhx҃[@RǮT0P_8Ki7;Ѩl6u45UӗD,“PȜ4ȐLnE =m4a<_쩇&B [ۘT-Dn-ܡ(`%F<Ĭ-x{q!.O| +FL`Aa+CЛHGuͪ gfhna"M`84SR<'ub:k.#L.KQGgW_1' +Cl&\>p,G`x#z(^F kVyEPH칩 @*'Lug&+d*\H1̦TǾ˛$Kk>rn3@BT@+YAJY:K鿘1^owO0K4b&riT7U| m~Z [Y> endobj 2084 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2085 0 obj<>stream +*Q6=+96ySf +-iRΌ]{㻢eMxe6|Wzg^]A-- +628u #_Yd8l+źxðxh0?U,LR_nN;G03~+$ߌw@F=YI7ʿЃ-K`U;E XRr8ݓ$680#oTuzc** vzL;c<0")uF46 9G-}~@sF*Qb^?͹'FV<]*9gS*'w|1 ";10"?DIZD2Io +endstream endobj 2086 0 obj<> endobj 2087 0 obj<> endobj 2088 0 obj<> endobj 2089 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2090 0 obj<>stream +gF_:{ 8DBJQgi ;RIJ* k,Y.C ɺu| -5q|&f|klm +ٲ +NQܨE{:~6Lx5jki{˵cϐ߯tda&/H*\Q-2tf!&G;ih䗈$lfP;=+ ft3Z_6gZlՍFڭ;nN@y)FcMj"J9TCH.W;Vuyi.m&ȃ_D^^Ĭ(j^]bes-o4'9Zc_tlNE2A˒RQ'B3"$rTډ ӕIc ɖn 7o7Oj3s8$^U,MXzNδ?#zPn{f'ND˞?gWDnA[pK0Gz5Aݱo,2Yc^q \g< !28j)dlR^%@7JCZo'ŻN-pVQǢu]A A9i% \n8򸖏QaFΉu> endobj 2092 0 obj<> endobj 2093 0 obj<> endobj 2094 0 obj<> endobj 2095 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2096 0 obj<>stream +¥g+c@?}Vɒ<+'bX+i.Sx`;`!ZW2yzY4h)p<d-dlYhrpkxnNc +$*/"PO8[qe?I +)v~ڀmt'EAdS ,wӇJ|r*ii~ELڗO*@fI#ǎK?/hZ7:iIŝ`|6\"c=2n?]ۡ'8ñ`j"wT2Ecpn>đG >-FbsiRD072\ՌF U,#ĖX"XF%X,/36/ν)[ ";m僆tcheiEQQ̘?_ hqvMs` 89;Q#+2uYA!4ѣGPST[n$xaVI]V|Ɨ@Rq" 8_|}Ăr4Sa&| q#In|((XAc;mF/4- 6ݐw٪ "e\J +< dg*9_Bsjr?m`ǨM40`;]z +!+įh.zVàKW`7At@P7n[@oax߄4KWf}*סPoewx^J[/3 VfxJ!@8 4ۑP+,"9^4@M8|{M?!v|Z`>>LnV +sa.k(j30hGoZ:c(71̍p",TY փr 숒1ןԋ5xK:t1#%7Z] \OIⱳ +endstream endobj 2097 0 obj<> endobj 2098 0 obj<> endobj 2099 0 obj<> endobj 2100 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2101 0 obj<>stream +#@7<̪A'M ~`)ѶD5Hwl?o +s-'ȹ.~A/nX 5L?\2 +!83o2}k/dY^uo[#/K< p8R$F܄muGwyUW"ܷ0P:^|}#:^x&-i(ǂp'듫(/(*dNK/*CkYZaYJƶAM'&-O{v5s+> +Mծ -t<Hᡍ& ۬/w2(ib9wߣF` xKt* Cvj-j^i0'Hg_ +J"o1G)sm1ЙTC0oX3MUx vx.\1Q4xL +(f7jن.ju +~)x[,_>{E.tnAL +N YlBK*7_s$/.$zBZhyDnt)UeL9:riogSmZrЅdQ'fz灲1qsCye2?CL/jDLnj&clqXlO8 (%-vPA'\>sۙjX7)hH'5>wퟣ3+$W'B m1.ĐC&%C0UWsi5d HqK]7F{J+!݅^\!{#-FRە:99&u2#(cY/Dk:N ɻjKIdYa:7=ГC޲VL9b^f+f RopKŃi&"e*'l铑ݑKrm8f?hvEYUgA:$.&F +endstream endobj 2102 0 obj<> endobj 2103 0 obj<> endobj 2104 0 obj<> endobj 2105 0 obj<> endobj 2106 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2107 0 obj<>stream +5+iU5'<3@.I4!| + 2t[7)<)6B"Qq-50ʴ_} xW{g;/(,%U$`zQ%]V34P_|eHu׍*-oyPt -P"J1 o}Pǣ(@0r|nJmZB}98ONR˷lH.r(?jP*-h[hyl"3Ԍ-Sc3P+ hgPN߿$SɿBw\8CŒW Ht*߾z3 ܒLloT-{74u`6^KNLi04ioUQrN.]$V zj=&)r`GO#xA_>}ڽS8;հu岲:u a$`i& ;D%QK l95o7 +endstream endobj 2108 0 obj<> endobj 2109 0 obj<> endobj 2110 0 obj<> endobj 2111 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2112 0 obj<>stream +䖯l +/*7<a4/tW{slnp+<9^l$0cÓ"I1LP-CQ-ddP ZAhUFwQ]J1C smLntG|9G  !2XQcf6}ܢg;\K'z"Q&7*o; s[))/Ł-to};c, +^l<Xń'Miv|ӎ7Q6daD9fQXa uYCó̏b+\9‡-7I3}M +wB|"Udq,J&xj&o&md edS4mg~C$gn !\Q +@hDJHTi̱Zxovu͛V"ݚʂ~s^)d¹X5N_5qtdšީA=2yZVi*\Hy~ͧYӇeq3'+/h1? +endstream endobj 2113 0 obj<> endobj 2114 0 obj<> endobj 2115 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2116 0 obj<>stream +}!%- gA>N( v0?ڌg7\3:!Sq5'{Zf`/M _oF))*cjHx# A<{}v:fC=LjjYwo_-)h}oh3eY8TG=-#HXח' ^9պA 9Kocд֤J{ThneE,0^mbnY jJ%8 ^]FE&h4b^P ͏Reؙ֖֯~L]P/;Rc&M+K *:|cxx@N p أ_QZ,!{K˰ٚOx1Ŋv2ƱmY: S7INr B +endstream endobj 2117 0 obj<> endobj 2118 0 obj<> endobj 2119 0 obj<> endobj 2120 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2121 0 obj<>stream +I)/TkDNEW1MQ^(. Y}vZCT Tܲq}جVQ}=yub^\,ݵXdpJ%3+$:; |nx7J3ۉfE?GYkcbQ8v%. wNJv%DHYVLg6F>%Mg2?> endobj 2123 0 obj<> endobj 2124 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2125 0 obj<>stream +_^<2 e$[eܛa5Zy~ +>u^)z?߈quo{dBZȥC3>q24sM5  &+!=+>!ځ x^X7l&D ^t< ].edH@ZK>2Z]@Q\A.Ƕ>L"g~uŒq]1E +=vG9W3+ +C#Vk  R┿<4~Oa[ӞckD ~ $PjiCnF~H㏿*# \}@eO(JnMHݰrMjkum|_s0ō -3J-,ߎfvqP`B#RAPt!"-ȐDѥGĮDETR +""+m L:>`՞1 >B\qN $2qO(1rܲ(7=ΫmZًfD`]oB`KZB+kh}F^Q%uڧ[bdz4]Q! SAR=81LUٷi/тW>HVECc *-fJ-z1_ ٷ9 60+e@:PCgk{I&XI#'w縆ptPeL]!n3ǢSZhսݿQ!0w.lU؛RJ!Hٽ#07r@Hg[^N' ۣRnJ;W5P!~1]j3{dNӒ:6"p2lG?.k;u*}D/rwGewK+4}}0w!y}~ڔ +K?qT_cγq*zЂ7?h1Gc(1<| IvOF +endstream endobj 2126 0 obj<> endobj 2127 0 obj<> endobj 2128 0 obj<> endobj 2129 0 obj<> endobj 2130 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2131 0 obj<>stream +4+rPxX3p 7h%D윴=Nl'bi{IcaDDh>wV?gN+BMN<;$\n?3QB &\V2OEدׇ=JUWƆ(r`~ԅsE~'$>ߑdj#4/ׄ(30M%~t.*=$jȚA\GԡhZssCrثljKGg#XV}䒛ٖ?,2f7w٦dlWi=E0` 1g1.$,I0m tR)i\v[C otKfہ&as>AEvۦ5diE#3*#K5OƇ{pPfn+JbhV`aBj$T| +nkrzٵd3^'g<{/t*0XO, X`fƇt. +jI[08zv`dJaUE MDJQru!%n1VFox\(sF7A ʁ) 1< +[rţkL' 1:$U}x.'Kҗ;TaT%#N_?N&ӨhQ(bb8DSo%FLXMwdcL wXʤy(vs4@]܇ݱ%lMҐF@ 7Y˚>?R@2ݍ[b%̛Kma2Dg?h10k<[Zlݝ8DglNAxMʠ,7ty j@q=+Ri[o6]ZdT_aAo" !NHI}Emr"~F.-Y\MUʵEɍbVE;~QnbeGZQj4-ry߲E3B=yfK!R +(=c&ܭJ82ۄ@kvg9S88 +G3f'cvƊ{|'L ֳzW4o kqd"t^rȯQ=]UŅx̏$-6Z`%E"K^"qMGW=8[Ԁ +endstream endobj 2132 0 obj<> endobj 2133 0 obj<> endobj 2134 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2135 0 obj<>stream +5=ɑ638% T-yku\X ]#N :J7$ "HóNQ5\z =~JRY%ҦJ+d״Q=A =UΧyL?ƫLMU~^&KqJ= i- a#yfxj(~@_Co,s3FRvݶ:PЫ0%wWه+Uّ$ԍZI?ʴu:%fٻv)ؠpm'K\u8ݟbx`$z{3 (i=yDk_, [ F(#GʂPKSyOǻD l9\S_bPQĜ\&sg* K> endobj 2137 0 obj<> endobj 2138 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2139 0 obj<>stream +EKV^moc[ hpΗcIbcrFfkwO$eo~Eh2N>~aq|GK^C289RF88Cf83m(N4|/o_I;|d0Y"̫!ЄoeYJN8x`-ĉY 9 ,R `&,I\D褶lĿ;f?F=fy}8lf #pgEQH?Pc"JD&iƧ"9f#NϜ~6R`#!7!\nAUHWܡ,bt@hTJZY_nxP@O$鴓U{"7չC$+Iڢꁉ`$f1$e!dDHdy;u,BA& ]r c=c H跎HNJ0ԧS\PU9+r~' $a$N TߡS) p.`,v8vRxl 7X{7,@iN +<0;*!oP{h*J +;IF^r2?c2mWߡ\ Gc6h/@ ^a\Pɓ.xϏ&Gu2bXHkȎ 0Qv2bp?=B.[np)ObDY R}jŀCZk}s?šk~yOr߶j#+%#xI?5k}hfwJoV TΉ$NW7}Ңa,F9qx# s kSua}gk&[(~Q^89A:'U^~Wg22> endobj 2141 0 obj<> endobj 2142 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2143 0 obj<>stream +8F"=9''9p#SlHm +ԄS-q~U6Q+9+;x8^C?vSԧ4Ǔ +mەX;>^H{PC4^w|PaJ%鷲~Aъ)Ę*?j_CJ33]VBnj;Z]) Orw&r ES^g,{k)/bΉcj=WUuRV; ƾZar{ +kOa5ފUc6U̲N<,/a~*jz69$cRV4_ӫ'r:Tb~s|ac9x jgJ0? RERm_%'P( +THwStO7OX ?N!I|(M XyɷgOa*kMAR TDfU* +m t?;⑇N1j9'IM[Xk>|*E }svD>/t48&Zѐ [:˷,ꊚjdٴSLf{FXeAGԺ`uxf=l!?2k#>MR&G2d{w' ?54 Ƣ^GSn( 2 2> endobj 2145 0 obj<> endobj 2146 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2147 0 obj<>stream +F.<0qQo\,g%l9yK d%XqT{?< MgjXDMuK='g RPo؃+3wgpҊ6%#̰k5k.Yme|5a]%p`Qz:|3.^S 8|jɟcس5}hO/HLhoٔ*s +S~eWܱp܄}+_\[l"oNf7m!0l0V)>ybXm a'Wܲ>rQ2מ}|% WFhAj :XF&q*nraT7\6,&ui +/h +IV?nI +ayzЙ@ϒ ES!;v.Z _#;lOHh5un4CY\58=&]w!ciӜD)wWq׽]gtfYB@ ЙkGqmRCL v]s+YO +m. #-<""P;,͂ǧOѻ4`z~ujaeQߓM5ӱ=}lfUi1Ex gmqBarOӴYKu]BU;iӋՑ DX{a9eV3`shtÍ&HKssE'tOW!ޭۼ)} ]UL**Q|ҵB NYM ~6_&M K|p``uQC(yя%e2}# Kf+~~8 BHG !0f}|~6`8-**Xt/tvS!n٩i^_>+H聟\> endobj 2149 0 obj<> endobj 2150 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2151 0 obj<>stream +QIea̙?ˁNb*͠h! +Od-g" +۸+u$ 5,Ё6tqjg_`W + -r]u]!ǣ$T֖$i0EQӺm{ݓHI;MOZWwΡgQx0k;K33DAmFKoe-@Kл3LȕyfngIsru?gs9 ܴr +* 1K8`Ƽ(ʰ{E yD>4ˍ,<b/txk0@A}s~MI L'%0jV5B!rt. +] l14MdEAVq}U6;82<ٖl6ՒZ XӞrc>esspR :uk}B ƛBZA++T1'Sbɩ)s( +4d&JSMj4uusuHڄBn"SDgӮĥjY+\{!8 +endstream endobj 2152 0 obj<> endobj 2153 0 obj<> endobj 2154 0 obj<> endobj 2155 0 obj<> endobj 2156 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2157 0 obj<>stream +n]Q +:fݓ߷vn%)kE2[lInzڵklU/g/]]H4Y>8 Q[%'i6kvD e.}1; wN/ŎɺBnDSŕ&-cm\ v/iP o4xtn9PE0vw}H@q 1Ԙ16ܦ!_rѵQPzȩ HPex240|3[(%8\P] @?ޤR"=QK*a_Yr|BUx1LlMcS-Ӫt7*#7:k<,jVdߢ$ce8D4].fɦбOV$[wY5M]DBSP LW_q= ~53DkBO)p PCAݖC JCB2 tdǎ>Mμ=$X:ABŘk< ͓=)thfDJiD;il?T+""ghU .׬' ޖM0599gID 6RZjTX5>Ͻ`ےQ:/ dqmxJq {^{f#yɁ<~#DAN +̅BMHTfPCH0`qKTBG[n@#O唇ɫkTU9 P՚)pMZd$,+gǮ$n<+v&Y:?2?͋ Y b +6;&h=h s<}J;֜:L No%_ԏ.Aḏ_7A(+^|E!5Ju7g8s*saXK㲓 u\Lti.DrQo u3P^0MAYjatMY(f+w#,ta}B,.ܷBs2lz[znq^iOJ;K*=9bUq`4tbocC7cO9͘>y5Z24?r3@C +endstream endobj 2158 0 obj<> endobj 2159 0 obj<> endobj 2160 0 obj<> endobj 2161 0 obj<> endobj 2162 0 obj<> endobj 2163 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2164 0 obj<>stream +Y׏;y{ᛈ G~X}{u0S Ea6"1$^#KTR. }܄T e@( C(ߓbB#¿)`sC5 | 7?-/1BHu*_@gycXxw#NLz@wXM]6[]&Т0|m/g BB}ceu`D?㺦ZjvhgdABa0٦hrY6nY# G 'hEZZ::u*iȞYms/f#Z1%a BsboՈq5U977Ly]lfxNOS[݊a} +ԅ1DuAsNNbܑH 9@E{p33lɕ!M McG*@j3ݣq((i3Orj. +^ƹ%tdG&t mp!e:a̎wYP)%.BXW4&M'ݘ; |5V"Kw<#[Pl]9s~߻[62hM5].4_&>X*$NJ!Wn|beߐ"dڈ`ҦrrS'Ո=!/Yyx9A)?l'Qrkl7YOw:ҝRlBkv/kVkKB;?kR@&[ru>n;3?H~T(^uPf +endstream endobj 2165 0 obj<> endobj 2166 0 obj<> endobj 2167 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2168 0 obj<>stream +9GMS+)P6-AL"8oEr[LnCs QRp}ì+sb N rK3Fc9[.0:"5 +НʑJY_5aZܦGSsaIVZ#s%]{O EwHta&E^Vxrwu- M4JZ2nO$&s8P;ŧ7E>#ᵚЗVryw~+McQu6]Z6i͘Qx4Ffn~83TC+4170O5龵L3iLz pMo'T'(7 +?jZ3В6 3HV䒄*s)r?Q}\ bfZ0գkE YO`JlV7e#1dX>=zs&mV &8"< kSE]6",J\ ًT36Cڡ#V[fۮu+|j]Ɉqӆ Ahf,(QH~0VE"L; Q==kY!J=eYL?16RglcLsHar$( +5cz;هn>@'U;a@vߞ}]KO΂쑓_1xxG֌ԳէR zb.qX-WQۖ8!IX3$F:d/ nOJZ1sBԶG 0FO;!u]لJqc0f,擮--!FW1 +endstream endobj 2169 0 obj<> endobj 2170 0 obj<> endobj 2171 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2172 0 obj<>stream +-LiVq\G;^o-5`#5ǯ9R݀Á2dpĭ70dInlMSnE17SGW/\mZ;'Is|&ZadYe4( P Ov3Dz?c. &`c2IvvΤ[XȢݢ,9%$gˑ :vr& JJ(DX0P2p67Ϭ5'SI'l8ː"$8HЈN%CFC.ILK%6iqQLl>A9-HQň_a1Ӗ]{E{M ڄ-]lGn!Ɂv \:46ș{^ip84yM$iK`>K.>Q9 +⋞m&jzWit{(?Xf>E8?HA4e͊Uڹpj4]~04rMlө*,1PJV͕R){~1bxJ:.mё .2l[W;FQ;> endobj 2174 0 obj<> endobj 2175 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2176 0 obj<>stream +E݂ۜ {d8 =|6NkgaK]iuQ!#\LbޑtN3b`܇Iu,^E۾kDHCn'ŝfMv4FpB\= ZqXQi-Nx)P"E> +_{ YV">7hmgbZjiV5J6 |HM}6Nc\Z^6J3{ݰ3`(#%H,+KaY}c4c!ZFd54]L)u]v!,5 aCIbsd[@[!.,OY}nWOOzi^0ŭ"ZpSi=(]nij PX}@8|$y>L9Ї)~^IYgo˙F L[//Y Ubbl%7e(a ꢄA΅19nJX6xP q5 +5 s3mNOןW-uSUIų!OP:F볥*^̱j?,+/ ?qSH3s( "\f=!gƭP5^+ӈrf,G ZTFpϷaHCzͬ|uݦ竰 ώT4jQx 닀}Ms<[ `=*3sKd֭Y$^L q 77Ubw)C'b`y(Z61f0%Y0fCX FceuG8 U`I?ar|e0 Iagt0Y6k'aPZr6 y5? eM˘''% +uD6SPT$_llw~TRWԖހ'ew ˕畲&K1ED)&ă[&ӏ?VwcRi(Q.Je$o8 +endstream endobj 2177 0 obj<> endobj 2178 0 obj<> endobj 2179 0 obj<> endobj 2180 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2181 0 obj<>stream +G-aRz +rE |Xi?K7 `( ~$޸׺(iZ(, EU?#a=?.]j4а߬~c0k!LDԿwO=T".deLW!Ok@pM,a?Y3JГ'xx2F>ilbIBR}Jrkd߯pbrr0\n}V)ް@H_BL̻%Ϧm5lijiRi,v뱫`Ŏ4Kyr&RBbtp@X9N6uK:S$}'QuGz`;WꧣҗT +$H +WFVD0.]=SZN!oDu)FtDgGaFG($dmϡl`vO qVqzQ&'z򝊽/nl}JZ +4lIv q9ԕHSؽqO+' +üܔ#${%y/-&sS{q (O=(?Ho+֬d0a.*&@&vI|_YeNy > endobj 2183 0 obj<> endobj 2184 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2185 0 obj<>stream +t@ eeC=6ѓU~i|x%~r`Mc=wEGW_O:O!߁c8rXTcah-U +>`Lѐ R~: 9&"=<ӶeJA<t ײ @%KaD~W-DSDžZbO&@Zrjʮfkݗrb!|/`7;\9`B$1>y)+8c˯J"' Pߡ6^> +)7oxW62'hT~JBG/[F.=c1&lxM옧l2n6{8a22_+Lc7lm#UOT /]52 cv21XY~E읿Q<*\?|&S!&k{PO#'ϑe^݄gc%׈![ yD \Y(ii˿ l~Z67 C926T3C1v=%T]TZ]bX?Awn2G#9TWq>Tō]? {rb%HfՅ}Zq7pVI)٘uqᇡ INMX@ + Jz҉(gL3-nNoBX`Sp ,usϠfps#V4rg@~*#\e7idS_7}L$f7xEʳt _^ml=],yE xjؽ(C0 K}MCuk#p2{&_[) жkzgRAO֜*dPUéyx*x?}\-\F~aۿ(ӃȫF +endstream endobj 2186 0 obj<> endobj 2187 0 obj<> endobj 2188 0 obj<> endobj 2189 0 obj<> endobj 2190 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2191 0 obj<>stream +Yo~7_*C? &[Iw;MHФQ0]Q 'W 60n"XޱoO@:ޟ̑2q3;z] NsK~Ѯ$ 3C{H :sBY?w~GrQ9]ɘԔEbCtBxj7LǼKK`XBt9В8 oZ +Nvq\zi["%xy^NUJ䟒. +vG.oe2z[Yr/(iyXn$iO|2f0^*#qpQcr;1: Q))ق}嶊"ƛV蚊MCaE;# Ȟ[fۙܶ/HBNvj\A5~PNi)!Dr58^Z*Y<إ +dInAlX=(34p]+1r X$Ef>qIn6}.Dhce HpF|y VB0ƺZ2z=_W<)± +|}D+Ϊ K¾} + +azw1fo&p`W> endobj 2193 0 obj<> endobj 2194 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2195 0 obj<>stream +*ͣp]R~ +-#n`&N7&Oܯ֭' ,iw]PҴ 56eXb_,Dcuq%<jf78Sɝjr.P.:h +_3@8aW',]>Z<7fZ}†Si4IfnkDAlR"^~řɽ>ۦi=Gnw'dT/OULviv'%yM̋b&/Ŀ}~Af/,+$yraN]o?ȎME/p_V-ոxWƽi]Z-Sd^J^`|Gѽr#rABj 3h9DlIb*mx ,4ɣJ+'F]J4ji`̛ir0=kW U|7{bJ?͗tXv콲%Xy+ӆEgQB,ɍ6T D!CL~iSc +IBDih:e IQeख1 NcT#cBˏ6NooZ' ئ4 3.aBb' vXX6ȖʔD@Q;7ȷq8&]* &%(̧ rJKLvQVvEȀ;Ey'tɓ %PkmrZi{|Rh +endstream endobj 2196 0 obj<> endobj 2197 0 obj<> endobj 2198 0 obj<> endobj 2199 0 obj<> endobj 2200 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2201 0 obj<>stream ++oh%!i$a!"=|M$ϩ +qŜ ļYrHҾO=y 5hru5;f%j:$\zOl%+tL:RD OG-;=@Iw.a_SAXi9WV +Ԩq546}ݾT DO5Mci?nӊHʪê.ZFSbۍ4t<4awmxpV}u\<҃ˤkjVk)q|"{C3zmCuэ2<*4̾Im vroszXo]>s9ڸ]+QfnCqqp =Vt %dߖ ug + +sv:KG^E"h@7h`v§'hVaNNicp +|~<^91T-y~=^Gif7lh_8uπz' F.:t̛k|jQJlP_͒_Rk"is͛6`:H iMvl*A0:[Q{f7"@ȃ#PN\> +"r3@w+P 4OAp<-uƿ(".<(<=>Ъ|Ɯ +g5֖|hȍ +, |'Pߋ1^t3BY& |i+nrhM +$F@t* +~Cl4m,V +mw⢩6ԅf "/NS= lw:Zlw#8F譞ACZ?D! +.a[(XK[6l:IqP[3t0+yM.4 矟 +!C +eo[;#]͇`zz0#;ċZa&ʤS2v]yb4M=SƁE2ALİ1urspcGu vXJlמ/x+D]_% [QǁOŽ2Nwɶ]p|t78AN?SItJ$soԮjFUV9 +[*y hںN(7jv'=b:hI4wg;UOsc|{+GbMM܈0א*=x1tg,~ݭ;\(dH}D +J{MGŻ#د +endstream endobj 2202 0 obj<> endobj 2203 0 obj<> endobj 2204 0 obj<> endobj 2205 0 obj<> endobj 2206 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2207 0 obj<>stream +$MLþ\'vi%4f}ڣZ=8ۑ^Da?Xrvjdw_4 ~b+2hÀa4ox/aN JP(Io:#2k}+` y;WѽJ?xl&mITIyT,it8j'fyȨon9(B463ZVjI˯FP?Aֱa Oۑ B Gwh߿@StMTrM9Gu> #,kU&ZcbN= UyMTKɓuZ)7^?7jR ]h@DE΁X5`=0?ENazo]4/]hm)L Uޅ0"a OvX!W%む2%|#YKD>_EOg| ^9 2EMHi)2ݪLLĿSԢ_HfhV g+AS\'_rUd=31*hw$o9kTU> 6 ӥ"DS[n e3̗': /"5|=OEGR1o0n?t8kSAIž;v9jgp^@}&,L;>zj3HZz@Bhޯ*\* \ޕHf}E/"~v? .3۟\N'wۮpˢ7(S9Y]=r k%JkGzL~7$榾Wj:H=> endobj 2209 0 obj<> endobj 2210 0 obj<> endobj 2211 0 obj<> endobj 2212 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2213 0 obj<>stream +qmvL~K(!O5h«N/˝W0ԝ'qF{wN&vxWn0H9 Lm@%W]J+3"Hj:ŸF(\beowtM]$02Jz" DsIQWZUOa'ESOzO֫zٲXoৃ\uZXUF=n9+J7ڪaB|Fr31b3=rZS+Gqen8%h&  gjvPwbj&-!g+Und֜Bkh.VSda: F9c9i,k +)iF7ǂQA@( ,5VŢAPԃ,",ϵaO'BٟnC5##_ԐKaI=mm ~7oHDkz3YlUt7Yg״X1u-iʹ De:f!󫥀Hl:w h]lBTٗA+DipIlueat1ScT{@ ?EV1ڜCHF/y o)9S +6e)?_s:9jIwǜT#f6VKӏV]eE$oX*M[&]:zGr+vHN׀ƺQcJ1UHl+r!b ,%_@>B g~\L mjRl=M z*2 IQ ;4|s> endobj 2215 0 obj<> endobj 2216 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2217 0 obj<>stream +6GcSϽ63,lB!B'W*g{ioTT!M`f#Itdy G o"@O|"VL|2a[1`4gP N_\5R'd͗,1ncUĥq3 +&k [gdF?\ pi$MG_D EySٿgkg2[4a~i8n#0 O3bbcUCB8y=O&iV]o…pomNy*xq=?[ [gGt{Z<[d2/?;nUcC&+2#=1x8 r?c~>oHSփ&^Xwԋ@(7M>?N +ݿ|I+h$Wg,gs蜓Hc_|uKgԼ3gPrpYKxlk`x*_|Qy54)+vyd+ a%oNbkH:t+jD3mU(͋lh5^ob H&N}FN*8v1CФBÁ2%❋e` b o_N0Z؆OqSbxV}7J&~fAMzQH҈CYg!٫N c0X͠ %#2WW\<, E^ +g@j*~͉RzXmZQzt5i3h(<KF=&0"\ > endobj 2219 0 obj<> endobj 2220 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2221 0 obj<>stream +v[[% +YQDL;U++w0qNQ +nn.@IкBy{\GR}aswk4DbטoR@Y+χe*7p҄TWn,87/ a`S;\)vAKf}zMZ{l1kpqo쎎<]䫵UY+A}E\sFx^KB<'n?mdw^{C1t3yƏ` !d#O1% +D*6\Ipď +(swXS(W}ܡ>w>,WkM"~)XS2d"rĿ&6hT (MѸ®ٙT <˕exKIk&u|XF'!6aCy2'Yp|lYĒ4unͺ}f@H8/.0iȄҍ^m6; ф&;`֛yϹ$$!:[i޴hgɻ=vsѐ cEa;f{~Cڊ_@l2im+sXC!4ё}Qڔ* A +ypjO%SV X(z[db^ +k7x`+ N- <=賙w}\=|.)uK(;<)X 4DS7Ʊp)Da[3{o ]LNtDͧhWC^7kFǎ6"oIqq`k6:w-mcP52S;gX t֞e~^[e^HLV~CSIo2aZXD+X߶~ĆꅈQ$*' + HC"$tU#g~Ԥկ%=VyRS)"+ˡ*q$Q$! Kk w0߶,| [{.sP<K,xZ?C"ȬX^V\ w +7=F-j6vk˜[Zټ"5%|3j޷ +WS0jHSk,v,ᐞ>6䀉1W> &iՐt|8 +endstream endobj 2222 0 obj<> endobj 2223 0 obj<> endobj 2224 0 obj<> endobj 2225 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2226 0 obj<>stream +ަlhpwcYu\+V5kd8x _hNgj絈A=X0voskw!R7Jɝ\t_R& )?3FxE?Uw&[ ~ޣ竮OMpC&'<$5kS +FhuH"L-x,#iWZuk>~Wj@'uxٗv״RnǚL: p0Vj<e7<#nggÉ{?dhk׌ !ѫJ%BTe ,!O~0lQvVGyɑO\upYX2|#?}h,he{sLP☼K NU{>´jPM~&XnSA!Y`^I׎cQ*A63P|[ +BA&]//t,[ ≼YqGWV+-A;y;gЉ ^M=ZM*708Ɉ']M\]T_w^]̷ Aގo٥v8z\|Hʂ-w_Ŝ7O١N}͍:1W1pXHƏ+~swUy6}3LaAEkk}7.G R5fw}02 [U"Ki$rq1ܳ& 7>=Nj޿BNMa;~V[c>B97P˿Dٸ!a/AU#ލXGjwX}47hV]gr 9ġa6 L:J;Xys6\B$60Zc +endstream endobj 2227 0 obj<> endobj 2228 0 obj<> endobj 2229 0 obj<> endobj 2230 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2231 0 obj<>stream +TPuPxAmQȂ:-i( F(:Ǟh* '~c׵Gn OmplZgh71ט_КsF6;F ]W;azvx~ "<9B}CXV?5lH(NauŒB(DK@ 4CL{@ Nqb*^Y}N &eA/r^6$u\hEca'!YVgp̑Rt:u>5i+`|EcӀ"uV~.R~"u (iG;`/W~yfI1S?}BKv[ꆁat(nnHByQ=><})RɢFk CI [fz=qs뷓;ǔBG$xںA Wx11! +E &6V?C%EɝpQBڡik;ͨJTw,`;2 /=u +M_ec99u=Ns@:v+ Hgpvjo"%_r2m'+lQ. |l9HL~wRO:-'ڛA(߸&a:VOpm~zP;t[Qel -.kh CYoR+gjwN)fk cBBF?Yi4UMR L X.$پvɓ4w0FͶí +~qQdoAϓ"ݻfd +endstream endobj 2232 0 obj<> endobj 2233 0 obj<> endobj 2234 0 obj<> endobj 2235 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2236 0 obj<>stream +`:EGIh6co G[R i+ c1'lhCؘiU\t;. _7> X%*u?>~p`/V)v/9)z } F)&Ӊx?C7Ga;J;jl@%2oQ@/o8bM(LˋRҤtjXEpJh +^f9h@kGCRvvsƿqJNAa3›)3GKL~JKq#BS0a0U6O ߌvqW{A{Uї\Q~u{w&vy%h*!!DTCR ľM"x:9:ND4}oEp#.2OVD=V)Op.J99#?&݈oBuj]yǷޫ*Bl_4.z +Gjf 9GNb~\Ќ3y?UHv[{4,(IKOpxœ{{XO .4}agQ 7HSݡzh`Ue5CMSq% +Ϭ0,eU^Z)h6:0(p Wo(@0ml6b=/~6=j-S=LM +Y܆(+cyB.*>`%Xs2Bۧ3n: B61> WϽmsHC/?r>0ŕo+1 uCşB|)ʳ +?*C%M=1ٱ4u';1^y -@eeg^X#&w%s#ǽ58Ws2:j(s=0hmz p/P7%g0_a,?.Rl*Gqdy#Ru#-z+ևׯƯT7 JF.bs s)1d?f]R5FWldw@ +?|>󍮍Z 򫠠.W,2lmR踦 hua(5G X +endstream endobj 2237 0 obj<> endobj 2238 0 obj<> endobj 2239 0 obj<> endobj 2240 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2241 0 obj<>stream +mmq71_Ѷvm!xCĵvyIoשV.  c[I_:IlA`/|Y `I11NrڳXh3Ĵi&]f BEy +Rg1(AElgÃ*a;5fMS!T|,DƊgh5ŋ0_  Y65jmÇHC_k*xAYHYB*}s^y\)q"qP$qJKv% T[yun&e6P| VJ"{w Hyxo%tW?_a᱘6ƜGU2@a +0-5bHېS~TKRx/Q:Črϔ(א?յr IlGEDP%)=vsNe|ό ߒr&4 +ހ܄MV2B:IY#}I38!ӯ>~F5,]$ Z[ԭi^cS;C +qX> endobj 2243 0 obj<> endobj 2244 0 obj<> endobj 2245 0 obj<> endobj 2246 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2247 0 obj<>stream +h@x)}kP+Ø5O!.X}LȣR3YN8;~:I$ViA@B?%xV)GUMr[-G`އHY}g~gȇKj|`4W 'Bl;XJS0~7@R1њOH\GQ}rx'%^6ɫ,ڊ$Bl7*_~șHk;y"n_W@K!۳u9HRȑ[kf叵 )J_;_kyS=cGl6 Y_?1ēJ):QA͔v`0V%n 7zQT#@- <ꢮ&aW2n8P^HFA RF F=]*?fV+JBhqM>@[k{-3S~gM)s-0{&4<OhQμ`რ³/Ny>xop]F,XSGhyN̄ia*`dxSa\È=`=)R1?"F|8r̗\LYAv\o=%e ?1XK>Dpz,NEdA RyE>seOc.^Q,a;IU7?ޜ&5|-Uޚ7_ B?b NzðEA`qlm Hʴ0.SdS +y梅6%g|dww3rRrwn–Riׁcˮi,(cW%.?81CF{ +fuyp,կ'G51^-XZ'"tY`¤&[ڬС Rqc_MmTKPnѣLeMdFFjfs}Δ;G*ߎw.;~>1d8K=,-pBB(۪M,8rCPbΝ%襱.=ZO›x0 6njڶ|vlBɧ6IzMc?nN"h*AuLl(mh $@^([(̷IE MS¤ +BJszeıB\ePD*wQBi[Uڐ[A&9xP߫^J,ܰ]P#-5NwoͳҭYd=erT$e:2jc&,X(cQt0iT Adb2\qS@?+fߞMљe6m<0q؀ƣ[M WA(E:P-c+k'!o^CN" +endstream endobj 2248 0 obj<> endobj 2249 0 obj<> endobj 2250 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2251 0 obj<>stream +?9Jdx;IHG0b%MmD=zc{٩[नUG+MLݿwn3)2`3"P\Kl[@zMm S.}bO/ }ڟ_^9L*|:{CTknH'/hԾ-Շ{(MGaZbq{ NwdI09[uw @(4ǰ@t a5#.h3 _ߥ]1oXUP\'H +B>4LA$dU4ɤvܑHJ ܞA12oC6.M̑_! cy:lyqIi(w .;ǚ3 +$,?{kivoce^ф8jpb3 (t$&&/J(s1!ueaRPOLԪct&и}Y8H';~njT U!p!=.K\->ff1=_+Cr ](!&Cwb +>MGFQL|_e.t{HE(ZBw;ÇE( ̙K\ +m o9;bҮpe=LO%m:bn"80zۚR{\\d-}|{V ZGw?}nkEQ&3)+52SLh:&]|S-@;@E5 v/!RM= PO^Q\q&qP u괸QCZT./޲ZYK`ƚ]Oƨ9&Gx *ji6FvAD(~xF(YLmCj"|)H *#atxL׎GpB'GH70(c={܋I¾ :vw7y׀ltZ|';iY n5Uz=zqŒLDi:b%l5f~8}Dm#V=~#s뗳mtp{x0$tjh9ܻ\ԫ6qaǡfp+̟h\l(i.7lt5$Q'塘g6R(1*b +endstream endobj 2252 0 obj<> endobj 2253 0 obj<> endobj 2254 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2255 0 obj<>stream +YQ5eHl;vcT&hBo߉J}ȱ/*J+~Lv +@|iFe Q yRI3bBTW}ۮׇo; .s[)}p݉m 8<0.ኑqeY&$) |$^JȌl +`J-n{Ϫ*V[@xDP5 vGU|Mkm NM/A>\ m-8Ȟ {H`b͌(m//.wDrn"?bP!IӫO?.sG2orDtsKO9nS DM4t3`lX=]RA#y`-#%1y]l*<6'5SZ~{oL4rKw*Kg-> endobj 2257 0 obj<> endobj 2258 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2259 0 obj<>stream +;ְRƒ΁2A /諀f>)AnZVtKP)![Ov3*s<;^ÝtZL D;wŎqq[9s]qs,!+}b}O]sj/ (,$@+dkP4k +p'kb>K +CI/p%)]0P69Lq뇽Xib]`6Yv^B/HBѡV PgSi1FQx/god܂鋥mH|h"iZ>L ~8~Q [o] O%UrSxpju~!GVgJ<èc:p=jȶ\_SȰXJ⠱ѽD,8X%֐4ulQ0-|2;zPS0B>kҺhf4w%8DRfD3BfK+ˇY=JK S ̮ 1=7C#yN0C%^?~fV\Ĺ՚o6Ly,ID'"d BQOb-e;]9e\C1v /0-gR-3yj`B ;u8fVj!nMC +1MJp֍8 ݪ$sAZ~0o87X8nμV,#'HLtRqEH៦UXGiC255Ng?`qBƒ!g*=ܰ,v!"j!Vg@e 'P"%vk =_MaSQd~(w-&vgRBt1:;B_ɮPYܛ-ӢQᡷ`#hqZ!Wh%p]&^ݬSz5-Thףl0@yn+v=2S} ZgvKO>&]p6QaAWJלvk &:,- +InC삡E4M8 +endstream endobj 2260 0 obj<> endobj 2261 0 obj<> endobj 2262 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2263 0 obj<>stream +l&-F#OW.{%bָYΔbwx*3N #I5y3!-p@2$H2f@T0l;.z w7p, -rl|w {kε;| ΘryF[Z?"?=-*`)ĬʁN!"d NSUeܓs%(wv}ft83AneŌuIY\5fH3)#㳈D +,Wi:D&|j8 W=DuXZK/LJ#Իbp0" }fJsu&(:np"3X0aZaԝ'ɔRY ; zZ~ 8rg1/ee._]w\yǗpƐN ~&kbɎ5y,Wӱ7 W&O$P8 ɜA-ˤM(qLo<Ǧ {HkMļ _&$]a}ӆ?LHf4TYfySQSc|&?"G5ui:BrU+dmL++bQI2°H$L Y!ܴ?mr-$IbL>_j¿qV?[7mpX6-6o@9n#ɔK9xE-`>CfH,lwuKH gªU; 02/FEcls-LD OV |!|pa)peFl)KXOpd6e.5BbD +F9ޞƤ^_΀o8 + +endstream endobj 2264 0 obj<> endobj 2265 0 obj<> endobj 2266 0 obj<> endobj 2267 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2268 0 obj<>stream +V|;2 +Q }gH,aqwsh׍@%Y{[,f , 2\iC33~i<*&|RC-Is/p݃0a(&0S#55fD`XTn Ãre%Ox L%'[̩D|8;xau?8Wl2?QUON"0ʁ4Di +c1@HM񊤹|#cO\UA;z Na˾d}({3-p_7SiPڼNgV*c4Z0]YCM`ӹdE"S0|L Hd4)(hR4J ۪Y ]\@g_Tc@f+G#{V69RNDAk/Z2V B@$'+B/ZcY=~ K4BRٙ4{\a<G0)! NY\ x!Cu/v{']ŮPf&7,($Z")yI l]3!+^HTrnoK!28JIX+HO6À&|4XqW",x_NzeR@Q5^Q\ wӽwqTMmTV +MX +%⥄JOza!) &3pU1JHv{Qل>F]*Dag͏q@_i#MYǥX>. %d#_J/%q~WhYXo?L;S\ +endstream endobj 2269 0 obj<> endobj 2270 0 obj<> endobj 2271 0 obj<> endobj 2272 0 obj<> endobj 2273 0 obj<> endobj 2274 0 obj<> endobj 2275 0 obj<> endobj 2276 0 obj<> endobj 2277 0 obj<> endobj 2278 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2279 0 obj<>stream +p]ktaʢi?Z@V&77د~Gsf] j_x]8Ne} ^$kXRsb|{9Bvdή$w7C)'^+LKosMj<|I=5"MGKyozcEC4X_̳=ќےBL\lRsP,T`Nd,d{Ty_[)L0SY6`va"}[fAin*R WCHj{!!h6%5pFy !A]|zhY1fr \7 ٦9|Ƹ7;U@F'χ48/rЙ I5rA[:R}@m~'|EOTspOtO2|ʊŰ.C`J</qu*+-u#:\eĤ 3<5%GPŊZ&-h~CXph6&H8@ѭMfqg8z0(,&dw;j6W2۠@#6|?67l:2Pg~Rqs/xOP5~I>}I9hR P3(.T&>j:yro61D0 ֽN*?Ix6U\- Tc Nv9pԿQFam|bK䖥M`XճLRf'h7kZ.Z-2k?B+l6 ɊK&:U&oW&jTSj⚚Y (7 &wU8Y1P.ҀІI_qnˆqr-~ +ª{U`f +Y,~إ|l(S,+&-XAN̍!lt6ڤTm˜EL\=뎎UG;ơgQQE`'yDVj199*wP*E%13Z@"Ӣ):zN;]o(=rmӚ \> E.sdKkfPLDޔEkI%i;sDLr> endobj 2281 0 obj<> endobj 2282 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2283 0 obj<>stream +l)Dڪi׮2wRlY]M1XՃ70B~k3wKqL=!9F@Gn_’~w]q-'-ȸ}JEt 1S~ⰾvp>(׀}.x玳>b"䆴vˇ=y[-BLM:o< D4*-#P͂rY *C>k9I#/тR!8T*v +3I>)GE7Q+5YIl4xB [>o|1TZ-5{n}n"\|td{ŵ~lQmU>KWOWJe:mwѢ^lܡrK f?Ra3qPDk-)cEQtxhiR$?y "ȭ%ի'^)pTGŢ|j#읫=W'MP}7 54;Ygj⥿$q_W䚻gRg﫜5*QЍ+ՙ!Ѿ'Мz`#Rl4> x fݵ+K?ycRR*Ja~eIU2tn Wq؁)X[{m1@jdNצJNTB'&oH.`Ɇ'V~RZ%Jp)n=]wW=\?7:qqHI)$ʥ`_Ӝ%6\ ڟ +pä!Lʓ"FD^ߧy1-5QvqS I=ikw; j|}\' ?P5>ϳ0>#U8Vc0i-] +hb Q0$j^A q R]͍c߅%> endobj 2285 0 obj<> endobj 2286 0 obj<> endobj 2287 0 obj<> endobj 2288 0 obj<> endobj 2289 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2290 0 obj<>stream +$rL#x1|psYDSZ?j 3܌ ԕt&}Iy'hk:}S:@U(sʺWɲVܗP_TiTqI|`%v;d1ܧ;.p( Vqe`YQpX[_y/}͒ *ڻwW jo0j83 0ʷnfʆm==V +깍PQNZu~gjn};lsq =uȺZ> y7 ?{-M%Ks(K+W8`.tģtr/nga[ M;He釾]bh0*$<ǴhQP>GAP%9YҀM6CIw;^EZ9L1m{qa+e | +bc@SfM=!/x44O1m +g#s&NȰ + ed(M'#Ņ[HJX⊩`z Wt!Y$ 6{t模ެcX'FpZ&epKXS7.,Y5m\@Gcvd"f$VnJhz_p|@+a dXhTG<?T&ghWZaM_]_Sep2^CD"3i-S7jI?jM"ڟ>^-hEBMf^USURat]DG.B@%X0qcQ҅ ~.}`ʳQRgOo^ʈ":>U[ /IaU0x (!Ȃ )/`n 3"Z[7R cAJS`kNJ|Go&CT$Ua 1@| ˴GF]=X&=l)V~DΏ$37ȇ MT}1+AWȭ ~P}E w1oEkեɺ~ }dSD[e[#tGIBQfq-6Uu[E~ie +>CƂbvh_=OrC?L` Dv;lM#L]w@qlbuLaMR|& e%*wzI&@-_ +endstream endobj 2291 0 obj<> endobj 2292 0 obj<> endobj 2293 0 obj<> endobj 2294 0 obj<> endobj 2295 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2296 0 obj<>stream +*_,vjFpzrH}^]r99vrJ&1gvTshS[z; +Ed"`'E>LOFך9Şʫڸ2{v[.N?ً`iIjJ'n g[伊``x!}!=1+B\n'5O7<ބBZo^k{iH9ա.0.&3ֹN)֘?j* "q+*H<(fo|(ޔU ɋdg!"-\§HgESR:IR-N^)6c;[{krdC,nk Ѿe*piosQ'Mf:}B[>q$"Kt| b)i(1"AJ[/[mdk9 ΀/? Wt滄8 CXmi:Is%Hs+ o}J\'*=i70%3WkV<Fuq&cy/4^P>[1 +5U_6[irN{OU[&8k`5R6Rw㮭d: MH1μw NZ^72 N2z(3Ē;hF(!5Mzܐyi +Nq0AdS\gG`\*uٷ{(}K^_F.P~+8:N7˺HkǦL{î`0/7w!Ҫx&tI[Vrw9=URQ% Ǟm`3_%<7v iU#JקF,co8@CܴKsҐoT(Xne>4"mQFaVue/ư`}C !] +ch'> endobj 2298 0 obj<> endobj 2299 0 obj<> endobj 2300 0 obj<> endobj 2301 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2302 0 obj<>stream +/D{VTbOWI#ITNq5 T_IS1}q࿍ZtX> Ʊ8pi]CyzL"/O9_c-"Y|nkE,ȇ`^v+fvZlCؖCW["qZHV;׏0"xσlRSNGdEif&TR y];Wv?}[}5Z\'FcW p#G$ f21aHm ="GI}㝙*g>a$[H4_OM&޹1ɧg@@ံY1nH1 6Vqxh|Nفi@cyW~8m lw^REũ"tRȍ*gv:;6sŜ5G(R 'LqvXp^x-yQXkklI>2#lNU"(XN"(ԕʙkD4~#1v·!cfq@ax!C?ѭ#3)3WϠٞzU`Ǧ9 DETjQ4L +vLD%S*Bh`Fp[5ˁ2|Ԩ(/' +0 e""?qfcwVD&}O")P d.exp.ĬUil-)䁤ѪK3]YpH&qٚv5v ٯce8m +Y>3A]UX32lK 3p`Tz$2Gs H" INKxj7S#&CV᷈nXd溅fgͦ8#6Jէ$srW5iZY.'~V( ܙ,gqX<TBǕEܙ: +endstream endobj 2303 0 obj<> endobj 2304 0 obj<> endobj 2305 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2306 0 obj<>stream +5ߑit@4'D!jkF74m4ı6σQ'$a^`*o{G;|_|IR_7T׬ +|EFr(&#c6AɾmyYfc z3C-3}tQj4X({'-ra*Xe DUgG*RB{?XTu7NgOTSEC uq9& ;q6? 3^#rҵ4`7 +endstream endobj 2307 0 obj<> endobj 2308 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2309 0 obj<>stream +bggȬF cgQ7̅pKcB'K^y[SNX}=[ ﲞe &`ܘj DO^u]EXɹ_H{Zw_JǮdW/z}7:9PE' $$:(F*Q*eY`$HhN SD;?51x)Z +^Ft -0>_: '['x?(~W[Pj +䌺wɏ4EǷ`K;5(REfR$Z01AʜD%ΐ*]%i )bRF1ocr-sEڱ,##PhOVn30 +endstream endobj 2310 0 obj<> endobj 2311 0 obj<> endobj 2312 0 obj<> endobj 2313 0 obj<> endobj 2314 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2315 0 obj<>stream +Cא%wn{*]I)f E71J $Cw,gێ.Gnhӣ i>EI9" !vlz6{RRrvBoN!釅z*c(_ < ]Sj֕ƇҿU)pAC f}]߬<\]Uow4:"12g۶qIv*h( _ ɗ@- r +‰$f慉VAcL L թ /MfVگML"|Y~ѝ-BT1+7ԝx)YϜ[FŎEHIԸ`YO-2IN2_G޽j + '\o–㤪5`!1lnY1DTE`XOQ0҅X2Sg`}ƼQGtg 'C=iHZĀH <єhpQ[%[f9QdJ+fK-Jjc֪f;}.a=E +e^wǃ| +!:Q>+LidUg!o"~ռ1[^tA7殡fN^ղmK`~}N- L&_ᴭ&aفȑJ[ZT!רkv n.k+hJA>[-TItG qۛ~ږT*drWBvY:kw($<TJIO;GmBostBuF-oBΚ~ʄ#»$`ڰ?l>-m5AW\)VteT + 'Um!,MK +endstream endobj 2316 0 obj<> endobj 2317 0 obj<> endobj 2318 0 obj<> endobj 2319 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2320 0 obj<>stream +.PG&aUjGh ATㄣ!L.pPGyDFKV*V\Z;F{j=_ܥꝂ<s:8a"p.~#Sa,Π +\DE5M{QUws +^Pa?gjɽ*OWxo{y*jW_Y:r];Hq?q `}j@IT~axz1&:-L\qչcv~ GA2xLMSƫJ?AG~%MD1 =b0r{h5W"( ++|cT/-*F|ZpdܳWF&R#{ x7Ĉ.e}GcBjFj2$#ݳde2oRHf%o7fq], 1\lhƉn.cjnr0"s1Z`jO!v !d0c֠ҿ-BlE;a +endstream endobj 2321 0 obj<> endobj 2322 0 obj<> endobj 2323 0 obj<> endobj 2324 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2325 0 obj<>stream +(+k ެ t1$( BMܱ0gpH0U͐3.%>䋀@w[m؇]]9kjk:똥yH[E9TH?ZS~dv˱(:FqđOm8#0+ О0~=vLsbgNGD͏xC7@aA[%C^kMLrkC{;2c6ھp2[6?_#VXTzeMz)6.򘛆I3V VgY| Z#l9H40j\w|S}kHgcA9%UOLG\b,}G|vYM?.4B(aTTT`7녗" +mTQtQ0M/&gu0)K rs.*e?,Ix['?v+_ +`=r&V"$[LlR 3dv,(q8շ4j ĶvȟY~4?A7\e1Qa~q*=gx"rVn"u};dB׺,HNN05 CVwp76#e;77rOQK@G2."T9Y)_܇NvurRztؘmA09)v +SB=_4[`F38+{d +. k/0ۺi<[> endobj 2327 0 obj<> endobj 2328 0 obj<> endobj 2329 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2330 0 obj<>stream +kx;n'?2M/!;K#{2k+&!f#PDMbn߁h((c*0"So \dp9Lz^sY]y$%,W5is^c>j}r@i$%RǝB:_KA&Hd%_5*4"IPCU|*/iN:AAz|Lr5O rLŌ"U.LFZfB0\xFHO <8t\w#ɇ +tr^/Ga p֘&ifD$!F޽jV-<;tR})+!ϹŰBg*S% +yZD[-։K#uXR,- 9LEC[Ǥ)X՘ɝ%`h& +Yefӧ'CM&٧Ȑ]/Ɏ +67|!8bN3%|`>]x1BנnG|OvdqueP?*ڐ|sܙ`_L@E_ o@Dn'167:VJIcLSIcmZ!w=fx aIz^xKv?8PgHNGr,';A‹Z~p +cmclr6?t^)V,d_G!! U7Z' +endstream endobj 2331 0 obj<> endobj 2332 0 obj<> endobj 2333 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2334 0 obj<>stream +v@+e&L&";vq2uJNf4 A1W'G)[&Sm +$Un0ڃpq 0{,{,Zp]~7O]ТWDZb}8ar2YLf,))% qM]8>uxQPBa*%IԴH:-0c9N Ӵ GJ DWEpqow +"v`j3~aBCmQ97 +&VbuTZLS F!^@BDqTL-?DaIt’N&KWN=t-ʱ~R@ۊF*t/u00ЗCŴA(o(Uu>B",,H1 ht * ++:\3R=ӂ&ez 9wi7^?n{UFW#Ly +bX:g6?s4Ns??.aF8~tԠXyQS9UKL)B{:}z!)Y=^[QDjع dg[6k- :ԠlTDC1i6RFX n-˪WL߻)hlT\d(qUF{[r^ WD{śNuj&̒:h(`G9I-Lg\zP@ 妥1|Ҙ&GM8+X8$F|/hFg%W7K) +d}sXL!VR];l١r4wcW7oa0!`m1YD^n΁էwPt +endstream endobj 2335 0 obj<> endobj 2336 0 obj<> endobj 2337 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2338 0 obj<>stream +k{X Cbz=׽NɿLl^&lH΅7P3 g6*nD-`qCoWPrpp ~]cl i }qZ~RM֧J)J'r3팆ˍͫ}KsҝT boJ *vMG!'دYΘb J?{ߵHhryNoӹ^۶9`!-雩qk"uYx +$.(yR fy]Zq~cCRB KV2m(^MƵ#XF`,ulM%vSG)W?L7˦l'ø׆>&VF彥>XƅRÉsҘ5aF_tbvj@[$XQ- (=:bO`^&;Y^vKwubF1(,n[Ae05IEHTBMtDF\ЦeнC 1zkS β@+,4'gwXa`" ^f gGJ&pܥ{3~Ʒ#TL \('&{ ~I9 a\?lbLCT6$s1:*3~^$%H L9 WL|\#ۃh+=GM84.+_\uw$3-k$VQӧfMSʼUrā\{j50FFC.Gkw_^l,'e1?PsD=5 9:M.nGU]b"9z[lY@i{͜4g{`;%Ғ,ekCFHC2x1B5ɷ> endobj 2340 0 obj<> endobj 2341 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2342 0 obj<>stream +pl&~'PT{v#%hՁfLؙyng6&d8i /K1g;/׍RĹu{Sz.4ުIOb4[0-/o)NFg[?yy.e[&]wHS0雄8I +~w͹:8?wjXQzrX} +%D$6C-? fmC/yZV DKZ%+`z"__YVv R2`L{|Q:+n(Lg3RM$m@:m zxKלBg,뛨jtFVPp^`^gpKzM<=*)<:WUZ'z5۟:&'}1itCUfmhL=\S[KQP 3 kc|z^ [PQ &?\C8R7{R!I%,ӭ ੽CdjT p,+ao<,zTίƟwH +endstream endobj 2343 0 obj<> endobj 2344 0 obj<> endobj 2345 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2346 0 obj<>stream +Le>wS006ڰx&%5OQyLQkщ7 ^đ+3LZ͖P@1oFh2tBhDžhs '(_[X9XPrT1`S+Tc[sSu)=в 3tB=E^Xf`Ax\u8ߥxȷ饀@F;]]ZţM +fH8_GIs~rH >M+V( +`{pgÙY&3}>m -k(XD>όlP}LkxwNJh.!b߈4J[FOj0@ ~S^?\_#I=_A'RJb,WYBTfrBA3/ }]qC<'Vfhcsh~SQy&uPx |]k)c>#bnٚBla v k 4,5t:O, "5.ӗO4]?YYIeApހfJvhoQx +оhaEc:XC7>"'H&_Kd.D~uiF&Gy1?ړ){[$v !l5,V70uާDtt_ʏAPBܛ&|ݓZ [ d>?ґvy"nnL6MsAd Z`Ge/۝8UO}mAr0[%AP 3w*-s"qUҟxn쫆H\Ras˦EƦOE 7 +endstream endobj 2347 0 obj<> endobj 2348 0 obj<> endobj 2349 0 obj<> endobj 2350 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2351 0 obj<>stream +20DIX fp2^sOSEDv8gKc$lƖ¾3= ɛO\%4;پ4*i_0:S|w־_*cᯒ<>-v"/Svʧt/Mos +`G:O=8 7f ވ:E[ ūf_ӂKl }0H +Dsvh;< +%tcXv*53z0yRJh1UGe_~Poţ몄" .Q5=>ѓ4xc56 \!/ &-sdo8HרjQIfiH(0R=X͢Õ]è{Y1u\ 43 7 b;\&;PʩB_=|18hM9vp |ۃ)YGIꘝ`Ԫq{lzYvS84'oQ<,+.+5ʰ+Tt"Sy + 15/M&@Y$jg +נ8,/E33l$zȈ.!%ٻ{(ѼX׾ 1 +2P3i=A" gsZkb$j]ɀ_ԗuD3ـA"o v^N>+oQ0u]qy>FA8@S+ﰖn ST&f㽸:u4Tjqnu<0w#ι/I\ޑ,Z̀DYs(১myGPDzFqz +jKM +endstream endobj 2352 0 obj<> endobj 2353 0 obj<> endobj 2354 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2355 0 obj<>stream +zs:)n5Ts_&ArMU,`G)ifybwpvGʻ4Ű10 NalHd`7C6p(0\ EԎ -΅=ج9d +$HQ?М] XKB!}*2⋑FWc~MVaXJi b*ət+(hFXR"Wj*95[ц ]`0t}g1GU 7۠ھ4\cnI;(̡\?ҼcZPs[-Ѥk3[nu\Xxٽ@WQR[`jZҵu`lLJOєj9cvJ}Op}*'òa+b5oAY戮 i-_$؃1K %)EEbjNGA;,hs|WseIrb ` uzBC?xBu:W^ʧL&$w:=)'ʍM,޳=Q |pzvdkJ gg"8i.^AVwy**_>35~tK{+TC>;fqHAore}Nz˴ k4%߯":WD%BLGoseG4 +endstream endobj 2356 0 obj<> endobj 2357 0 obj<> endobj 2358 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2359 0 obj<>stream +bPщ{ +?;˷ܤRz^ȴ˚.J}ށ1^J;"ӺD+GfA\?O hrKQ𯎴4(6N'x;t@[[y1i@4Fm$WT [ARDzoBՀ.z%Fs`]*!ȆOЛNKN_!7Q 8/~nJ_QApX}dT^"7Eg6@Zl9w\y2xvAE|3wd<٨+חS|F׍V}&!㐥̝@\Wsedi<3z {YJiDc%fW\aO=IG xe&`Il)-iJgCXh%T$.l[; ϓI`|1遈n6XH7<d |NmY(GS\I"| ݲt85e?u6^ʭ}f*!g/}ˉ\҆Mf\=|h."R+,l<ͧtMXo + B@hksf&WW/chDLM;`S~Na9(O ~85$npogol7ڳ-vn@"zDBNцǢ ٵKw`  x׬z읮Z)WKKu-F|K{,#M!*ТZ $* ]d +^b +݂ Mg͹0B,򶑢8101O΄ l_`i; U5+CG@H˩3`/6_:S~͜_BF:HV +є@_ShZ_UIN#W +endstream endobj 2360 0 obj<> endobj 2361 0 obj<> endobj 2362 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2363 0 obj<>stream +F@in,z_;KQb6@|v +(z!aq [p!\j-6Hzz:L!<sU2V5,TM㷟=xSX[Y$H} +>Vύb{ (e'SoWIԶsG=]U8]uy6K6ZFV&d珯j&9wNb{tq4 7OY#رgk7{i!,UYu!mƒ?vLYH0@A3ӅL3PA~2+Xu'6F%|nQwXFu#c3b  n@ F΃rVzܾ&ռFԱ +T&PIvL<}~][J`LZнqR2uLU"T ƷWs.S; _z1vwJ^$U]37pM[pF9ZH+ip+3R'6YhEUq|a?9 \˧5揖fͥ86;Dt0~|!IG bacL1&8ֆɄ.M9? A!䶍FmѵV# ЦD^US,+n54G1Ǯ1fm#7.#~ zH/KUm B@Aw#Z)/4, ͷψ2JHF/Q%-8fҹ+%1[`%w[%k<-u],f +endstream endobj 2364 0 obj<> endobj 2365 0 obj<> endobj 2366 0 obj<> endobj 2367 0 obj<> endobj 2368 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2369 0 obj<>stream +JN J5z,;|mr%c w_zz4 TŶ)d)0 6uд{>h8þqCEĴM`:-)AXn-n +MpH 4SWcw;M `S@pXwq'^s%~$Bh;5 +-mIω@CW +9&cN+;,矍RD(1ܒ6Jv}q!Qg"H@iů/wL"xa"9W_8l6o)* j lsԟ/08Cb +([FU֢ph0%k x:N!+] aϣl_$`M럾?X  6qnB?rGdTZpl}x]yO"~[T061ۑ&qOԍg8T-󩞶 `iP~}`oLU@=PQO2v-6ΤE4=P@lؠ5H_ rjA{ +&g Z;.IFH KY r">*c(Fԩ\ o>3{''%=pByPTȤyj3oWԻpHBh: Y[=d-eHQ rxơ Kpl? 7~2'?U C꜂ϡ8=FWrox"#u萆+HMjuuL&e>qvepG" ʲ~B&z^\mxٿƹcTc5WRVjH +91B0ǫa}',P+2Gλ܁We@( U-cқfKD8߽W=*a6l@d3\[a<ݣjoXZ C >۳fO<9^4k x{Y1UjZ4r/2.~&HHh=3Ir]GtUta79++َ}W2XKSZFAyuK>m4j#O +endstream endobj 2370 0 obj<> endobj 2371 0 obj<> endobj 2372 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2373 0 obj<>stream +M J>A>>^lb뒭 +ۤPWF0 >ڪ6LݭhYZj,l|{3ߋ&x +ᬜA4 D2ٻPW$jbcG~sjװ8>([,dtoX}`(dd'7ޜW)>g`8+;b0g*HfiDalÛ9ƩU})&E5Vr rO 1SzR >&.t={N͆zl]6lRm V' j/a P.CqN9'ӦcqE+} fۣe&o-8H6^ŜxGc䆁_ <λ^InT:\CP$[ +zyㅼ$@cܖ?~-NlHl,@d|ͳ"&i%X'3R-V]w> endobj 2375 0 obj<> endobj 2376 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2377 0 obj<>stream +r뮉M}$[T +XA@>ձ[˵aCh$o8tX +l\3>'q?y> F-+cL.6V=C4hX- 'jch]%ro.RܮY W@>4c?AYOHC]=ӂY1[E;`r)#6W*W+#alMHH.#iZ-t4W &=ĪjRdčvz*'x*7_S{bJvH1`,Y?r0ύkU/Idajh5a^˾AF"Ȉ [[ +Z$|jm0O%z\?pym@e)IXz]/ΰ}G0ao_ڼ$<>Cr+j03H& )hfZYf,W-$4t5+P2k)bt^VyӶL"-^7M!b;`+NZЁ$~*\ qlY0IMF=!t!6'd +״WBɨaOmx)؜%LSde9T򤢖{j@Ҧlw|kiu +o1gw[?nƫ8[eBI*̬?uui׾ۆDk|UQ-; 2+ +Hvڅ70 &)uLI1t.us .K3 6dfǡB'P@nE2RKw`/1r~9 `a& +~y}6#iX$>(tprj+o}1džzAxXrwf zWпHu3WJ1h@RUBI7i@8@Uˈe#btMՊ`%ijǥ.8u3f&9)=T"~Vw@4 Dcgi7}2|ТxfK; +endstream endobj 2378 0 obj<> endobj 2379 0 obj<> endobj 2380 0 obj<> endobj 2381 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2382 0 obj<>stream +p]NZ<a%x8z(+vM-[hT\ޠkt՟ᑳz+G{[@ m\忼5?,#JlL, ND)'q;D*nE(md^CEsǭM-0#>xyT=UZ<-ESGd<ȯr|Sd3/v]:1п-:SiU`ʶv>K|\HӒFpMېմi̜Tcp8 Zr鬒SnHP55?Z.F][>vl\c )a^ wgc㹸cC]S :j4:mJ-@5,T"`f׼qgxp$5< ㊹_ جߦTmp%F61;A +_AY;6"qPs{PBݺ7eJlƮ)G6P(ET(kU]w}9O#@pw1Q-ml6/ =K+=',^3u2`cOomH񓨵|'H#?m Qr +GUC$kBvUWraoq57TԈoN6^$sE$TN_([`Un^KHCKL%#dn.*L#*:%IFd‘ +Zwu h _&zQź~"G<Ł#D w2+/C/)u(.IR̹Q/6wӁ-_Ga袅_uJf>bPy>_W YWgy{ {_{ֵC 1*[J.u{8Ujt4@ϒ-ȓ*I+ҊD٩uW)Yɾ۾1CŠY͵Y2qz* d͡WWw f{t}3W7 M]xHq_$EaU> endobj 2384 0 obj<> endobj 2385 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2386 0 obj<>stream +}N0âg77+ 0<]Rav3 PPB + o p_NYʶxЍݮ}3Wc`CLs]xay\&ҾCtHiMan b\jS1}$E{2~:j(MѭDJz?SDE9tޘ[o| A>OhVK%]]\ܱLbaZ+Jlɏ 7 =dmZo?'l}Kw~9U O8 +t^<\j8r\D5>@.IF%Ni};mXХ+Hk@( ó/;r_F@y &KJFd-niu\`7w3իxF;ֈ_vox@@Ku@CZ:hQ\75ux-!wBMi'f_7!ٳZ_S3w#ZHo c"Dl{RSƿ2J xnTm F|Ipt]p +b9MoS^KT9K ƲA'nlc]tK A+w5|HeuC*)(M@m7hTF%VhpgrE߄|x^T)Qr +˧u`KRWG $bP/a2,>Dekr_]Br!iƷI3̚_(}!,U/}}#eny0w.޲'b;]G0qe=RȆ634ih01,px"ߒe?!ئdMs亓4 TE# +ӶWHN,"\ovr )dR +endstream endobj 2387 0 obj<> endobj 2388 0 obj<> endobj 2389 0 obj<> endobj 2390 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2391 0 obj<>stream +C顈F#cYSvC}iLZuhIG#wK1jqO˶j&l yўy6ttƈǙJ ͸.|l:x9ySu+iZp*f:A=MuꙧIP{ e*/3D>\$etי1,J#(R32Nb!^U{C@zz%k +ȗ2u:#rxt9,4T A'uCǎc!(*$*kL 56:C%s=(v6nLZӱv-<>U*i8F9nTIL9(@ +,ʜi +f'/SQʒ*s#dz2 zڑCYUnDF:-O79> 4&QDWƐ88D>]d&_}(M4g~@SYr^ws$mCꐩ43EУeedl5aݷ9 mKa?}Ru(R&òK ѠY^="p*nϖmdpR=t7%sD_ޕ}୰[C 󵙜 ~ڀ\oMBxgND'?`KE3ϣ^̃GvG'Flt[;!!5J;+C4@1[\FsC"Bvtw$ڠmPfLJr JRFo#q~Vu0w F rK]/K%Ta12m0÷[n:DąL84 +ˬ|$tPek+<{ \sO1HDyBEUr9ܬY*)^mJY.Ad@R{+2.I>-. +endstream endobj 2392 0 obj<> endobj 2393 0 obj<> endobj 2394 0 obj<> endobj 2395 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2396 0 obj<>stream +$_A@?Sm3#:(lh )?!Tn&hk?n+]$1-do }Tm'~ UuGt'CSm,yϓT\j|U]2&NIj(.'b[|Qa&e;muXaQ*UBmIϿc*Mڋi[[frc,?NgɁ!>O{'ZxGNsb8}rSoGHϩrB} +lZ*vK򏼂2U6HԠk|NJ\VX^X$_s=A7 7aav"E~3'zyaaa0]rIZP)9T]#^]eW1O܎S=Y)QhKR8?#G/\gۂ(l+Gx6빌\S$9V98^ +|L'~#l"7c;<̼@"`'%N/&&Mi}$耑+*5iI Q1GʔUK Ldm)qaʽMf^^{k=Xfh͕> endobj 2398 0 obj<> endobj 2399 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2400 0 obj<>stream +Y G砬3hJ=w$}elNg|L -@ BFLt&/H'skvZjV%lw!6\w6wN6B/^h +6d2V8'N?e"xrvp>(zoݬiSѵ98o "}pHaX s[ѹ;E+R_d*8tYecA1bK޷bF?}ŕSuJKq3hL+쌳N3+ldn}mGh$!G)_%T,W6SiɓlA*Q&bӫÒ`x#Peo~#~4RhvxI5?r %|΢o[|28XRTIO|'KryWCRTpWtAȸә[P"驚QF%Yq-bwVm:܌փ#G>YoCC?L"ܞSVz1U>DIcK׺Ɓe,ါ,7m*@[~P=2m9IgaCnJ0e;FLaptH8o02+ +endstream endobj 2401 0 obj<> endobj 2402 0 obj<> endobj 2403 0 obj<> endobj 2404 0 obj<> endobj 2405 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2406 0 obj<>stream +5cbT gfk4Ao' o:շwi.R%zw؏30CA I2(X(XN!pQ[s饏'5adZkLY<6wMbI/3U!E)˸ֿ>vVw<|, xAk)]VszMST)SuyCGJA1b( +4([ .])af&A,QP[K=%< +__nC%R(z'<"`[`+(`X^ޱ 8 dC:<) Jۮ)|{XcQv6xſG*Cg',CMsV:30^Q]m٤h}`\35w~럸 Y^ޥ:Lf/<]rNϽOo,ऄ(As1'͛ʋ!~){\,2*9ڈRy{p2pEvDAX^{eŒ]05~' 3y7aWﴮ۱0 Y/lg?i]92wS,`r,^KoM̴`0*SҔ2:apjv:o? <" <-KS +f5"2.R Y?zKOzx@ja(m dzwUO]>Ai[pfMuqN::;CnTʓ'}Upϯ 7X_Q} ;#@m[H3 Z-ŝ_ h2hxqmHW$6_u1SYA__X70 pv|"v4=ԀVW +2 j_w` +ǬWkBU9r AƗ!s +HBfo],gN*WlZ3#iW˛ +|۠ LGSRLJmS0%$=> endobj 2408 0 obj<> endobj 2409 0 obj<> endobj 2410 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2411 0 obj<>stream +Rɻ8ݧ:͓nBOM J'XRן%+3o?x5Qq]qMH_lFV[zlob5u;(u3. %8v{>dO*@ +4Cؔ O +o]pHZY$r$߃{\13o ,PmS=]Z*YLdˋ]Ӑ r$sm+ϖ25,Lk'q/t񪿃:M2NʮEHHC6񂙎r`..<(7\Yʼn~Sи:޻Z+B6fuI{cӤF'TW"@AguJF>z,]^NS"-yz8jk62EplOtmyyB6{Fnvn jt_dQ~jHj/ziK<(h~j(st5bòj%3tq1!/-biD–p Ufw+h̲ {)Y=8XycZrPhoME~Y_6fgsf"OBM݉Ϧ!%N|CI8)p{hnPU?" 2|֝C~y6XGpnh}9EC?Z͕UzBFv1撈!/vpg6!䗰KjWd5NY#TY> endobj 2413 0 obj<> endobj 2414 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2415 0 obj<>stream +X&< }=>x9+@7ž" tMD8ϋuH1 jwQ$uPn8I=rΣۜj cgyc+bh׆(Y> ZL-!5@1پ)Fj \PExh%]=mSkFU:PvUQG,n+c/gzX4@L LvStCW?:rciUJLd<y! ot&"Ɠ2n͝u:ޝ?j:Sb6 WZH>h)%NU\FF keTj?nS&A.cy~,Kx &aʊL-_-6?X]FG*x 0v:7p΀%ܖ"b/,5⢤ЁN4kV@$ +]3Zr&oe?-umFG\[}iA <LVK c(@U 0> endobj 2417 0 obj<> endobj 2418 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2419 0 obj<>stream + |DGpfSHӉꡊqin)q` ʒߞDg^%t%` +ZPz3ZJ}fd\S;LIlb\l@%СHtH{STDp F!Ǚ9e<4[[Fh\,~PUun2dFuISC(ߢTNL`2w̮b YD$%G7+QCIȿgܲ[eѯ aDQۉS݄Y^ |ME>XlحWmΝϬB',W*s"SC1\|7[oeb,G'a qb{]y('pRR[yh*sϙABp{ Wa4G)cSW!lξe6n k'?+E3יaBΦ)I uT==C#mCjI H#R* o&к&0$ьˊ‚ȾluvuP7w?Ry?YjOWۚ(cx0V/P +GQ/lnw{d*D,ZsT)v)9ݩC b=|fएje;kQͥT= t+͎`f*ïۏ)i'x*[cY?Jo3a{P3:@};Ā9+ x`[ +ڝ'C/KH +`"tHC WV}Ě)1ɪ8)]4=^%32}1p@9BᣝTv| vdϊAA<9AL yyCeGYoTS%b&IbERʤ> endobj 2421 0 obj<> endobj 2422 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2423 0 obj<>stream +T9/ ^X5 clxop龜Yc Y$Q5{M*RWՁ&@J'sxJv33 +r@]"]G͍0kНIwWY}a8K?,P6-䯕F (Y cߥm.m,<&=Cnkݱd*4 0QM3\h^{lΠJ +wvK|o~t;6Gf2q .~GD[heg-ތΪVbRq2ۉyOh,QAB*1ԫzw+Q.!ۭyձi;H4jj5ğ"Zr<Ǜn&+v&1P-̮N?5ӴLļ$5aUz`qIYr tuJjZp{0 *zńWG{LF5=X6YĜ<_ "|tn +,xb` {bB"m0_*$@0{Ay,(X';şeƪQd!jʇեq2=1kK>R{hXMWH +endstream endobj 2424 0 obj<> endobj 2425 0 obj<> endobj 2426 0 obj<> endobj 2427 0 obj<> endobj 2428 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2429 0 obj<>stream +_^ENK_yQPm΀hI}hQsD4HM*nfsxDRW|WtAд .?JE@]=T: +oJp/S am[M#at:Hr†yMȴzרo &kli0 GבB;.:;/$ᨩZ#&K^\bE>J|KHRrG°BYanqRl:OpKV,vp̰u2.cmyr2 0x#I6"'|eNj-7ܾnXJ 9߻ƖB M0N/E;ds+KO;Wz^ mhX~U}A(3$ʋpk[zgö7E.03+t̜m$\g9#vrX8b~mp{-bgG q*C_5˜H?O\> \Z+!@M!pvM'A\p p"dOvz bp"t+i\2ݰ4vPO"ϊW:ۀIo%Y0܋KM8p f;" I7bOG;#OxՠKԘ9:YTDoͫn_ XBj-5 D5xvLL1]8>F+؏%iS.vi>$~d Q*a=7M*3VwE ~Xz$T 3E7Fp]8F. !Lfn,1g")NS1ÓplkDw.V?kK _UBG +l@F=Zi9tZYʕq3lUrj:'*u]/orvt,P5,o8tf5M[w +\U/B3 &R +endstream endobj 2430 0 obj<> endobj 2431 0 obj<> endobj 2432 0 obj<> endobj 2433 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2434 0 obj<>stream +=I@zpNo-?5˙whCp4[~OfK^x=CLw42- :IH F*&18 +sr~XN.(!ҏȢ*hpb"zZCIOl/ȤY__W,$\%^M*w_j~T܄հ3xOC]Q5S*0g>UGh5yX~eVom[zv¸&u_vNT&&XZgx'Q1g +endstream endobj 2435 0 obj<> endobj 2436 0 obj<> endobj 2437 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2438 0 obj<>stream +dDCakCk81xE 3{-|=by-]ʲ\[=NjQղa6QXEa!qƱtY5X U ?Q2ɛ68X5fnhǻ2;Gb6BVE@BTų)3]/͔KoVvZctMXE%vE Tg8޺.Vy_=dUSO{/.]G!t!4imPC5Fſ BDA@ե~\KNGؠVy 3V4!'` ϊaJ):;jG&P [[DTA4T$D5>Kݯlm; +DC&!fi k?b S1i)%@Z&,"֏0qr=.Qo{H,)Ʌ8BnsTSu Р$>ͽ[م'|l4zɹ(Q q% h `ȁP^;03xT&ZAVQhx,!pC  +g%oU~.sAr~[[$H|*٦]]\yF^mh>aB0/3T\OӆfTn_az$GÜ.W xp~}Ϡ ~؏1މ֨Nhe!^Ylo6ca/j] 2Wg"^i$qMR>M<彦Vv@1_wn dXuE=kp@v;HXݜE(aQHsYG\Ԉ)\\rvd& +endstream endobj 2439 0 obj<> endobj 2440 0 obj<> endobj 2441 0 obj<> endobj 2442 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2443 0 obj<>stream + E[GG֟kfߢkˁIv&>-7 + UqMgf#(B=H޶=9d_ eTUx4dª6ssb=搉V(+s0+*AƝr]6 >ӋDV)a$ l+]H?7d 0Mkx [Oڛ 0+44_tiic%adPkÓ(yb#/ΩC=^uD M0k[Js33=UJcR =ZO"* cXgMN-/UN_@U*EJt͢qTx7DVF +d0~F^Q-cž =Qݐ9JGgm[o+=f8t #(uOdB?Kp^w4>159f;x׎C\OF."my~;;+uey$i-42oh2`w[(svY?l#$|$r4*ξXsh-3IYXO#i9ﱲh CjHs%f-Q/pgq dxy$^æ?81m'^*kz uZEtJqXC=d@5*Ak4NnylǞ/RG#&/®c(35Z6#tG4 REd 4ɺQ:z?*=7w3gzfr{ȎѡwҜ洃u<@ P-H.~mjUӈ?5*jzqz=Ulij 2Dn +endstream endobj 2444 0 obj<> endobj 2445 0 obj<> endobj 2446 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2447 0 obj<>stream +ÐgƦ7X~+CՋu;K]1i;1ƷPQ-q.?aYXyF$WۊHRRtoWSY;BԃloK=zUy&$ εx5y*Ni<0u&3Q=WY2q]!S=_9Uy e$fb{o/#3fz^+|L|BP?(TZ|K薟K2RxVps 8~Y!U1;2}3Oeu +b_(NEK"?Aa䘥期ڰTT;8$_> endobj 2449 0 obj<> endobj 2450 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2451 0 obj<>stream +c|ƸyC5N ^WxE7l~;a='')_hT- -!ءJXrSWPv؏Ax B&Gxi}4`Zh61sU< {OМq&tǙ+H[ڜbrj*# .C~Z&>' ES?s&7vݵlYTM`FE~Z)9^qKѥ8Cqs>V.@zl3 I +Q9t@m﷐^[|]h -|s*sUxͧ62HZXn +-d3߃vec +=ADPܯ;톓wDv@h u@Ea+="4UB똬q/y{ ?0%eR5JVЃf~\{.eU32L^cS|Zbh`{Rǥ?|baBXN_*}(pBk%p/ ^7,k7MN"1ۓGlTxllzi>衕-w=(ypu .ft UҸsFkI?;dbuh7vѯ=ЅDŽĖvYIF8.uDX]5'(l +N} /fCYX +gN|!F +g8#nRɐplA.>)rwÊLI+G$^u=A|=B*lkΡ|?ю*p,Wk +*'Ȫ#2l(dm`Yvi.0 K!>􁧺*M.1gD +esRPP3 +kH˂e%WDN*,S|h41bo}EC٘'-rjjRhl:a2$npųݪch Y# +87Uu+"\n%!ZfQ@ )椷E;|f+ +eJH9^2&Q>j_K(pFر`C4!V=ڹhQv~ +endstream endobj 2452 0 obj<> endobj 2453 0 obj<> endobj 2454 0 obj<> endobj 2455 0 obj<> endobj 2456 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2457 0 obj<>stream +k|w?8CN\LV!禣/x}B@>{/ۤ?"zKKo\™U5>')v3Wޡ]xT^l  +ù<Պ.+*k3v: btJOR$SL9@*WO_C6vL`^uPa];JB.zT̆VhvMxQ%yϢ]W vnmCTZfNfZ@LZ{2эx,R oWtGb^#I,]Yap^ )|^7ս@U,`0KoÚiG{#bs$AB́Іlx_)q. +ꑃԉ83!I([kr*NmS#oM8c1O_aYrdR;Eg 7šk~꽛_F M]u@ksim%T,&i;aq?(%`+9$>ffR<U1]чAB;OO]0H~gt姫+a?MKQP.r:!J92z&c֚alJ# <|݋J,5pT+ﵭ='׋Z}V^6a~7TҦFj\]M>VJ#ulJpJNlT1_"݉e,Dj + f+bUO]gjlҙB- Xn}Bȏ1+3g11 +vm!ɆBcF!6-vxE|956?quƲǥ[>yjzDQe7CYϜGJf6%935=„GEʋMVp[0T#P Vr)mPjxQFE'*S5s` GY)l51&;u_Őg96.QKtK$t2] QpC MFtMWmAV5WtX$U{'+W> endobj 2459 0 obj<> endobj 2460 0 obj<> endobj 2461 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2462 0 obj<>stream +ܥG0op88Wj_QA_ɒ> ^8 4E]E`86'Mf3U,k==hx}A1mb BfO VjPAeE d~Chp?Z堦mQ|6`.bZ< M2 貱WdH#G<*NՈ0q kE$c}^ފ,ڤIF`0L{D/TxcTM^t.l4o? qJ(o=$e 0j$+wޚ]Ǖ =ZϲgRȐT˹jLNJ+[h"@hwŇ`r?WDSna%eUM^"5Gna37 ZAv3~ .Ay,w5Ȱ.L)f?I\10M^[Sl{0I0מ PQ5R[C\.p#a޸(*v5KYƏRۈDlE dv*V` `ޗ'x"^ 8⇣,Xtd4эFK 0Bzy Nu}hנA55EuA~dX2ZCC;]>\V+9mp * +BoF|*lu!d0^\o_We˯Ufc֛Pt,q +|{FM`ǷUe: (N+Nz&6ĺ'*Gh>%l +endstream endobj 2463 0 obj<> endobj 2464 0 obj<> endobj 2465 0 obj<> endobj 2466 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2467 0 obj<>stream +2˔HGrFSLƷn9 C#7\.R[A;Z6fP aI~?C\ O6t9Of%>V7~\bFzpFڣ r;)\fMC4 +BU=$3OܰI&mtUN&)(!;k_wOuI1><1Ft W Wk‚@0<<< +D-Y&DŽtb s<3AY6ĉUe뽉#Ź!^*׊F% +$N5C=1?Qxng"B?SP;^}`qfDd:T|7c+[ԙ|JȢN.}qq`, "a n3ܜ8,"T*/^BgZbCcYaa]z]mnT$x{FIfݻ]x + M4}FYU:7 PB!Դ5B. ui}J8頢 ip˼/u{:>w7z݀^G^k &1Ўc2~aʽFMc= +endstream endobj 2468 0 obj<> endobj 2469 0 obj<> endobj 2470 0 obj<> endobj 2471 0 obj<> endobj 2472 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2473 0 obj<>stream +Ӿ!d*Fu.?^#+!\$CPu)A?Tv&Ś5>ID0(.3jefc\7r{~nseƻ_䤋o!^5sk ')~Ֆة3i0X?=0uiHxg5wI{mfsȵ`PFJZ{m=O}vnzfS</jaZݱ؊W\r浓v[qLVW<`/;Iyt1RM1}鼱哒 +HW-a  )މnBMAF[9,p^y$+ێ?٩^[ysiE@b\5~=޻ +Ca9g`G;8?*˯Bz֠qf؏(RiTa@5<(<Hb'29xAP\1.fd*kKoP%}1y#({;U_+(C<ž̨λ4QsۄTeU(Dl6)t9-pxDA1ā^M/[0R% 2)̷+;Yr5k+jQ5Ӄx e1GAB.H{8{HxnmO'ֿ 57PH=G3c*P6mY3\zjbWo}oV֦VFe4&?ԃ900`R.oC7m(mHtQP*=խ,y$4['h*oiLSyu*cJvd]xKyn18 ~ɹo O(_gNնyrY搄tEe+ylr +#KY0>~ڐZ +g> endobj 2475 0 obj<> endobj 2476 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2477 0 obj<>stream +\bs'$gхo" BVQZ ci;g< qšK1f# # rTYA,$4bԗZS3f $^L<6uFwMZ H%yoȳiK4y~a +k!^%I\o|,f[K쪿dY + A_|z&_,r -1_Xdbx*y} &eo@r8_wi̚8<{EV 5yVvb?s#Ko~Ymcq:$OU&Y_kml 2#׽X,2]q.'/jU-g=GK=HN7DhFywcj r۶[~mҩ +ly !2P_#un?ҫ)4$37%NѠ`|#p$a^*K9n4k.x:BP.x'Z#{<zxJl5Ă Y%A ;jqgh`-oH6 \q Dw6pQivvJ=> endobj 2479 0 obj<> endobj 2480 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2481 0 obj<>stream +[D S(&tr ;pD#SM"Rj@UVg,980FbDfum@Ḁ"G\;Vثȼj)K 1F**Bi$;y3 }'4CXgߝ O B֌{JnBXπZag;-mcj8{Bj׺^ȅwu͐=?0?[c%g^jʭyKݏcsrGv*z=yrY/n^ӒeIkҭS:injjԳ|8z˚ 3+>=j}T0hڲ=|dBJg)0n@k:ؕwDZG2euPyTW\Yj[ +EjEMF + +XM%HFXy̳쟣ᆷmBxyD(d{q*n}L#6U +endstream endobj 2482 0 obj<> endobj 2483 0 obj<> endobj 2484 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2485 0 obj<>stream ++U~ڣq+=*kР.v?%٩))"uGхK׽Cnl_ UMh1hwF6s-?6v"QL2㦖1&n0؝ 7t~}e:vd#V[KTxz9\9G lF)E+ h!ɔk6vI|YR }q a1[)䄊Y~y|-Ӟo c Vw[\dLj%͒lKP' NO{Ep`^@L+k>̾[l9meg{C%d@w*~~@*W(8i Y!G- +ĩHGժ<#*K4$jbM<.!P#Muq8ȅO m!B^&sY{ɳ<:N>sOZiRG7(#?LHuiN6 +3Z%:Ru_ҧsv4HUPn)=  +M/qTbϐ38B p#ʹ`cU> endobj 2487 0 obj<> endobj 2488 0 obj<> endobj 2489 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2490 0 obj<>stream +elmn$ɺDG~/̴Vmx4VAX 5kkHo +EQ`B%4B[?j V!W>E.Hwm@u>aT\dlWy(3@H8ƸlE~ϊ0%>AٙݾC7 z׊S=ǫ,܀T־'iSvi!vyKUYKϥ*©786qV-iW]'*jŲIJ 펎! &k=M5g V./J*XWbarP!]m!`Dif%QI5҆%;d̨uC 8/3 +LQB +Q}a Oq+';d}Y>iY1%XLOzM,9\ .]z/"l(dG)+nTeW;i[ڵ$?R2BkѢN$2i_]+*m8_!($ +eIs8@ގ&'Sů5j dq sQZ-1{6NAtVkcxǼTPGo0#MDY>j? {z֔0%WE1^:bT<;Żo8=MX﮷dp:C>rxD- +jVpsH96s F~NDܝ)K8 %9ϿH̴9:MFa[vп/ʯUV֚62:~ѝ;©gIp1@%" BNA5sXD +endstream endobj 2491 0 obj<> endobj 2492 0 obj<> endobj 2493 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2494 0 obj<>stream +jS"#d퐇3c3fl+ӧWC#NX^,բTĭf;8J%%Pݲ2 E OS+2XΜY,S$fX<*pw 4w`O!rT ­tRyʟޱIJQ(u ^h.;q ,`GJmDވ2 +2k|{ +lT,g3LS(I]/cou% M~c|L&5}sZB8pڇLt%J+#L6ru3j.I{rIgrm`,c0.Ө@0٘r7Tڮ!RnObh֦)qϚ\\'b$hP2R֪fT"A3Zo%{V6$8ο\[p +m=-#6W|OG+Omd,rft=54B y7%1'6T'&/Uԋ-QH"#_\>Lv)5!m +\ݶn04|\Sgokݚ=Q0‘\ZZir3d2vOLݎvPʬx-bKt%)$;_27!JY҂5@xDnT=F~ +B%#lY­#٫ɅI"m}_F`d1}r:mӣu..*!jެc -\rkP%Y:mBlp;{0y=1rřޗU֟;N.r1`tD|$+8!c+w(#ґe>/4`2?*/1 A6Qf9&. +endstream endobj 2495 0 obj<> endobj 2496 0 obj<> endobj 2497 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2498 0 obj<>stream +hgQ-yXjB;\bպJEه.PVgC|s:fjaW8ǂ0&s^`iLa}/1wЃ|0~JbZB +'ӶNMJxj6[4~E~o0X`V~e[V D)n(9U֛)|8G`f[%T6v15L'0OߠDZ(n; ^? G,BݘHq2i`@vLJ]eK`<{О|: >7.`ǯưGM;Oj[HwMr nӦAl(I}:gg{ۡ K*_/ly.\'س\v&3ӈL$tLAӜx +6er.tf#+y޺Ճ[Kv 鄅v1/z"(˞̒ +L:9D q^i{u3f\Soqp, )]c3Dt|Yhll`V¢W!aSifZFs7cHT&9UUUkV)+5PMZpB;C sx&r͌)yv^ZI 4b#v +-5)|[F;#a<@FW?uo7|jꫂ:AvQXv|'w~ת*)݁AT،`؂ 4%ihxYPJN/^7*9=):UvB> +1W6eէ);> endobj 2500 0 obj<> endobj 2501 0 obj<> endobj 2502 0 obj<> endobj 2503 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2504 0 obj<>stream +IR<4\ ܴJ9ݥ(j‚`:44YDx ܦ*].b(-DI Y\w5##K-'+lˆa=?Nr9~T`耶eCň R9{6M6~Lc_sVyޟ9kM.$&hno)eȲ*\rw6aN",*J3RO?9\I|y `Bā7Wah#kRy@-|'UNr c,*CT♊LyAо +9p +J5 룁(qSSCE ̸R%[1t[0u)+RCڊ~~M6yg&pS7&),Bxd9k/}cmNI[7DQGZ M25i3\u o6 +Ku=n[쉑H4*d^:JGo + YUGx8\.#L\GF2H\d UQ#U3@ +^ +A9jj}Z> X榎֙05*ԁ0pQ;AjC@_k:6oc= U@0UGPѓ2vi>>cF )ؑڝn/T%>ww@RMUWp{67 5XCs❝JboKmSDH%Jy6Wחč=!Vb aW$ juOAi/B]IV۬~%0_HHI-?b33e'[6Aw6?TEݖUukpPՀED亁DeIsy.ކMU'u UW!#[FT0+VD/C?co⹻>捅/W랹y 9/s M'l>àR@x ^AkvvωVU +0 +endstream endobj 2505 0 obj<> endobj 2506 0 obj<> endobj 2507 0 obj<> endobj 2508 0 obj<> endobj 2509 0 obj<> endobj 2510 0 obj<> endobj 2511 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2512 0 obj<>stream +PQXȻ͌u'uc>rv=r :S k|.,:\+U6)Nk:Sq=g߄ ]X1b5^?ucM ,Cu'>g340#6R".NZU38mCh:1 \[c^sw?!ીȭDyyy >I]֍>lH8dNWTH_3*3/|EM US6_|޿Vbz .2T9A}kUu)ոP4-X +7&eOA ю.ŹC qߥ''Sb۾2f[oOl+YQ }+y&%Q3GgWo[ܨO0r[-^5}!n/8F^^R'gT̶NVԿn5 ۘתM1r]]6/&Y)A¡$=)3~bl>hQwDTKON pNxnę!qϊ:>jzD04w.!tQdUĐ~R[WO㨒'kFNsۊśD\DQ_6!ITv8܁on8Y7DŽl@L|xZSu;6}&yN][%j"YRpdI϶g_e轆aWM5+nNchb;l5733~ 6Gn7o/>sX;ʄy#0'6vr\hAu4M?Wep,5M˚;tpi5L}/u,gCu'}`{E3SW AǧjS>ߟN?Ŝ +/p.ӵ^`#$zĂCbI8TOBJ"`Au N0e5Xc"3Zc39N^BɊjdߚ{OѫbO*-C-AEт]ݍZTƃ <:SO)n+OS8!6WzBM1 +endstream endobj 2513 0 obj<> endobj 2514 0 obj<> endobj 2515 0 obj<> endobj 2516 0 obj<> endobj 2517 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2518 0 obj<>stream +eKUcr[z+\.5GhJZE:e*LUXj5Ơ_3Cɔܧ(,U4g ($*|& yM{j2ƣ"R)Hmaj# &H^+u{"} !Z[fn-H H^-Yݑy39 {{2<;7EOk#NkW9m>]11ql“t)ʦ- w.lc 7cĥQ4 + +zO`*[df6DmS.E۰ ;\ds48b/Br8ȨJC?q8a'԰}/1*y=ļ]Bju1JpO74j6Y_<'R{47nU[5]ULma4˚q[qNGbPi˥R(A6_9enpJyWqZ Tep:-jE,HA vxmZ52B/h=cf֨ +MoA*w9~*K'*Yz dPBé&^W*.y'1f.8%=N@ǠÇin]?Ʒ6vF~2e{,VBuV;‚GB$+ %|ZT2j.uw kz'{u?<1{ +\lƛ4j7WVw^]7c٩"MSJ9(|siaPlce8jX=ˋæ*(l@Ojp}p:2h O$l3c溯uD4 E58=Of\b>\7mލb)vnmU\J*:~'*P$Kܕj!#& ^H$ce.A[R!r&M]N- jO6~u9ï̎g`لPާP1I< +endstream endobj 2519 0 obj<> endobj 2520 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2521 0 obj<>stream +EU{Uѫ)(4& {I>gE3?)VY7؏KC{ni5sbvZNtuõgYbbz>D,WZ rJ@ !f=}j jןQ'.p>J:4R 6O]?3VVR%CEr9 +endstream endobj 2522 0 obj<> endobj 2523 0 obj<> endobj 2524 0 obj<> endobj 2525 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2526 0 obj<>stream + +ݛW B]44zb v@=17bk9FwZQX<daU2ϧd&nx:?}߸Ay$iiS7BΆǝuӌO{<^Q/ +oA('sP9hO!7;ika | bΝ(|k;|oR&gO`wi̅DS~+s_eL:~BL0"RӓrL@kTWZr$p֤h! (b[h[1ȓ7%]k22GSz8{˝YM=:eJ&V<C2B2/ZR  +aZֱ5ip4l:; "4RUˆ)`M@aAž_l-aJB` +qMTȀTn*/@[xl60 H>->e)jO{ѷTpzKgLnߕcf@Ow^>42|OGԾUˤW HL=8g>F> endobj 2528 0 obj<> endobj 2529 0 obj<> endobj 2530 0 obj<> endobj 2531 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2532 0 obj<>stream +@Mp-G@}B JN7~ #,z7v9(-ܒL@w)x4-Lz : +%_.N+?T6+ ¡x D +'КiwGmg6!ag ARq>RZ@ D޾ꨍ'9f̎ymp^v..isbߌ9u ϔ4'LW"6HokPRƫ@dZL5o$>U~(C5!K1>rHPlj&}}cOxSk <.qbz)/PZ)4}fP +@Q%|A0xRU_xyOj! _VB;,رsgwK7bXd+ٛT1)z_r0-V[IT4k ,?{&E/a"u {Ris47<EF(6_+2 z.R)z wwNh z?f0洗ۘX]Ob10qd'/݋gd֤"lD24)dse7@F{KjFp>%s 5Jrz4Xߔf*J5r> endobj 2534 0 obj<> endobj 2535 0 obj<> endobj 2536 0 obj<> endobj 2537 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2538 0 obj<>stream + FRRT5>?-+엳R[;I(4_c&(oҶ7΀潙:ʺKX|Am;29Х݃юGՊ7H)>c ^V wM1%H_A휎 +Ȳ<ڽ9r=l[g7zTD-ʇU_m݄f j\-?BHԢ$-eꇬLI "͵ :urm:#h:ޤsait VK {$Eb:@T*HY*C+=dXXFA2xm)E., 9΋ +ִ٬`|b0ӵsA,ҖITRosb5cUwo(5ĎƢYdcFW|\C3 N%Vswk &`\QZX]I~nx)׸pu&"1hZ\~uq|?UTy@"ݤ'Io>5~w3( a<&c!{Mĭ,"ط%q%G,Z~C)CT9]Ո$ѷ!jKաV +s!}΁inoFT,ǤVcF]@h^}L)0_cx Rx{x[Δz^}:%E> +Axf(b{&Ƞ'nfVC1TU|e`/} w>OO%R0yWFgWݳ}JX> endobj 2540 0 obj<> endobj 2541 0 obj<> endobj 2542 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2543 0 obj<>stream +,-UwzUIX4ߛ"ཱིV;ŬlqEuD#]$$Co(=rzR7|R*9_O_W)S!ǵ~3WF +lpAYs)E)=)MMŊUf{tio>j|{`bFڜ肪JVVi{3݁7d6[C팈::ɔTSKn9ylEd~:c{NZr>j9jsu)ş+@ٛ;Z.Q=@  D`m-Jխ¬׻qi?SIz |׹bi8`궎Sr\sNMy-6-&uY]^0I(،_<6>u֔.Q6U*(Cp#}|<IYURs%Zء;So2k0WGVmX 0݅رK5$eqݲ؅wQAK/ FupDeʧHc6q|DP[ ɬ"Nʭ;#ߚ+Oۥj=1OG;Vɭ(*ߒLB t0(6wgFl@-y?ڇ:s1fui6IZ;uU=ˋb0Cd24RQgI㟴\)bGN!CwS*jA_*]ݨV%~s5t! Vz(F=[ \?Nm`R)[jN%ܕIfry(Qҿ R}>aH`XI@F 1;Q2۸z/ݻZ[_5rKylZd@}HlVwʥ!kЃ`ö +endstream endobj 2544 0 obj<> endobj 2545 0 obj<> endobj 2546 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2547 0 obj<>stream +rpJp1*&_GUd|s9Qغ(}cN֗;ˏ 9f#D?lz~7آl,$* 5}1DmwN{|c.Ŵ{-%UrYW-&v~ ǀ +^IG17M^˩N!ƐFV}p($2%sT4?)&`y1}Ƌ!^(6i7 g%؎WN.e.LFc# gO=~ճ\nB|iA[ _u +W˱ZҶE*=fEs԰?ULT&;ŸSRs_m`6cD> pp3ȷ\5BXe{J\ ݳ4\-׎x>= ~YV+tS-"!$ޙv^gfIg-'${#d^KC+LupHk r_]r;D}|$#| hzZI +>H e +7~dt3[: lt%j#8AļXB,2Y+>󂙈o`+E+_Dg-NW͝Ё&%`y[XI2+j6i +E"qm FYD}~wz{C|?,<3./d`65@Wl ^G ZI͛9]/p2va?=>MjJ@TR!tZm 1msGT.XTH%>Jٸz:piu -vGJ'&4aj$62f[#Fl)3PV\C!g}(nPxSt +endstream endobj 2548 0 obj<> endobj 2549 0 obj<> endobj 2550 0 obj<> endobj 2551 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2552 0 obj<>stream +V&eE⾼Vfey!fuiw-2ze.Du!&(7[,Ʈ`ճvD\ +(HS +_NtٴsgB~~kL2b4(1  ⿽.]q2ph<(%0ht,D +eàhD@HFc|iu~ m nwHHWܣv,_c(ً#RUn^_9v2oK;F8c-u<غ΍ ``ԭz!Mښ^WI=Ąukp0gl=`9Bx"5b} \- 7dAb1 KuU_S3{wé$x/  x$oI^TS[Fmu*D^q@W.)| ٹ>, 5W? /r8z7v9yڟQ'<{\ɾR;^$J 9(#ˠzX$|mZ%%7 sxs""%wm;Mb=qbX?Ma}h+$ 嬅tpvQNmG]#/UYӆs"jU&,_Qmm"OLs^ X0͠s_|y@ccC> endobj 2554 0 obj<> endobj 2555 0 obj<> endobj 2556 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2557 0 obj<>stream +pOoU籡XKwߥU sPklb E X8s=n**wK?2p%.lD +ֱtjOe)i[je=b7E,w,⹃{RY +x%X}%fgskLֹڎd tu +] B(=|3I1W(fjEe^UgAqͶjM) |H),.=:&C5Z͌ej'"U9| \)uP4akh~U)C)h@zw9ȃJ>dm?dp/#MxU5~ߌ=dkITU%>!Unk]َ3W'$m,Y"H75b_#)Vge~evBK,e퐹a,W5pO쥎BSԪ#zcZڑ;ƿP[ |̑:%+ϖlR`bzo^60aZߨH۾#AwB:MG*-&IÜB7pgƼWD1@u?:I3\ $H)W2vpX։^,wȿJǯ :łm/+>4ɭ/M(3.%^<Wxȯ@jvbӾAvxsݚj6|\0c=G,lyלC]VX5:FKYعo% +endstream endobj 2558 0 obj<> endobj 2559 0 obj<> endobj 2560 0 obj<> endobj 2561 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2562 0 obj<>stream +j>y֨+>ĿXj[hz40Qg>o$Snáx\ep4hWA:*ܡIZQK5,yE7-?l+rBBd,hsΞ7ut7҇Mq"Jc%O}kha9:ZO,Zq{y]{_d*o(|A[邲 te:u_4%?yرnOzP(vtЕ؁\n8LX|6,pQAI,AL/7QةCt(y^@OnT^"=eXETl}W+~up/(Tnaw;hw~-l|{O({R˽ ?CN'^dMykwkhbGPumu4-yAL1(C6_儬*baZΪẇ;C{&n< r-ZI\#(ו<d:TNwG:Ԅ62$> endobj 2564 0 obj<> endobj 2565 0 obj<> endobj 2566 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2567 0 obj<>stream +]BFyn<gi /E})t'5 3W6b2a?s'L[#ga|Fzz .9:Y :N2o&,TY9>iLݬҞYR9i'Cj-r8Ëͯ !ge%wՙ'4d#[TzQI6u%cRs5 a >/|w k?L%X/mc +A:sN:gI岅 +5 ? +'Ãו^wC:ъ;a 1/.ΕJT ,yRM}Am%aЭdQKx}}c&oвAWjg&:?WuRO9b؊k68؉UD :vDSdj" %TPAI(.._yxV*(jmȔ|YGn̮fi4]lɻgkyDZZ0iӮVl[!>'%ߙrjOf*f<ʣ:Dpty1K鑅q_zYQH.j(~ !20HYq<JIw p3+\uOG\~J2.y`TNi8Mk)췷,3vR܇f# ֽ]ॵJF̬x;}†赽gQA Q!^|X9 q&Dptot5ͯ{[ff:XEubr0W(+4K}G& +B%Ry +|M!۴@.@ W*j# þ`2׉TEZ.[$O@GRX^S8F:m`!t_idخ)U +:˥`ny {zF Y9~/#)}i +endstream endobj 2568 0 obj<> endobj 2569 0 obj<> endobj 2570 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2571 0 obj<>stream +Vz^oo=$?2tAlp@:}Z}O󗹿|ƚ +_DC{-!%1";x$,K4E !8 WZ8+Avefc>yUS%4 +ߠ#ub>Ֆw +$f1ph֘{tB;AsAĔ. +RIj-cxUXmAdp9lHԴcb3WÛw:;iXh?1ȥ}9vKhYXkV6x)R۪kb\I0Y])p`?]V"K6އUaG]wF*ƫmOthj R@OvޒM˜+ZlT#,j8(kJ*+92 qaw*V*xx3fNs/ʶPt0C*$YEc^lJ*3F)1|VY Lb3"%XZߥxrOQ*` }3vN"3G,\4PrWcc rpoQ)u(y^o%ՊS=>,ȝ_ys"yCiO(53!DjLݍn0X'6A8Ȣś}}FkFG.}5Gei2p +S.֡.Y`al~08B'f> lLy6^^TZb XP.RB ~ R];hP:ZʿLT baW4qJ鈴 &PE`wJCs]0\2ótY(3oBOߡ3~g/w[};c0m"9I%8tGe@q&D#h&5bzb}ZfBwj. E(I5c)oP2/A6ͺW#ZA|p 1\i-TP> endobj 2573 0 obj<> endobj 2574 0 obj<> endobj 2575 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2576 0 obj<>stream +vb>M@~bB5%65lD& +ʵTnrA֙s2fL_U[T\`G'y'v{%k}H=g84|:Lb̞kv!g7=U-ԣri6w] +[n\DI-({g;]Q1Jiϗ)6Yylct FA$אID{2oۨszߔX(@lmo7k!hñs [m,˝K֤ذ`Y׬J0;4nZD\b2W`tf@(I v ǫHhk(XM7U/_&ISo4%>#oxz2a"EQ6; uƾ[ W54O,F0nHՒafϹAF5|5,;/#+p=b%T6ppI*ڈK: 4YWc?A\;v7H Z:͛E<}/ja'KѻEU@;ܭ;e]h#%+YxJ+ ;i0jG0,:aN^"?FKp~Zec!#EmIEϕIi|F{N NBxڕمPXm)bwHoEHQ xA +c$,Nsq~C79zaN9K-K* Y+ +MhxE4$U96cFCY0 QmoO7v֨S ADStA|GH1,p" \$WTñV7.&VzhkLP:A<\khUn4Ǫ2ohibQ=ltQ_BCF'ps1wۆ +endstream endobj 2577 0 obj<> endobj 2578 0 obj<> endobj 2579 0 obj<> endobj 2580 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2581 0 obj<>stream + -S=AZL@:w4OY76P0 +PxI jŝZ擪F0֏qY%/he)@`(G[܁7-L덛(8?j/[M0!X\;Q ("͕--p V[\>Y +&ol soY qSg.k(=EkqtYIRb @O G\ľ<}5ֲR:vFSx1{A=HNiXEG>$VaҔߵȏI54F+t6W _e%+fBކd +YK YJunbLI91k xOtA;J)!Ït+X 5{8è[5+kܠ1H(9Y &uot?~[38=ҫ}_dN͸"RY|6d E*Q `Ch.wWgV`uQdqw=NecFe?ɧ-^0y_&ܓ9 isBoO{B*4RX{i&5R'U9eZajuOV.cV')ZT$O u8*1`|,(XꨦOft +V8*8(jmR!33+FlޛogcrN'P"鋳MfSϋ> endobj 2583 0 obj<> endobj 2584 0 obj<> endobj 2585 0 obj<> endobj 2586 0 obj<> endobj 2587 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2588 0 obj<>stream +[~zϼ;P|ɀ⤍Ho 5Hݝl:/j|#FVKOԄzt&eyEM˧gyBf^eX~ 뇛;K)ʮ["VW|37̤̋ @q~gV˜@2z2fKYL)b7 mIՖ"@C{!ELXW͹&Ѥ&&OiwIݷcG',%!s\;N|!tќRatr&f._[n^a- yN?J>FNTCأO e[-~ sC,0,X)v#xM7LtT^S* " -c=]l,+nކ>Gj|s(I+7*BJ\ɺ2_7Rڙђ32A$E/,i+uVڡPS&T֤4 `<{ YLj@߭GR%@]-ǑJrչ s +=ӞbaqZD +!;8%9X=AJ +y;u dtF(!&Aֶ<967,qWjSNPT B8ЄhD!Qj^b?7632XK!Oj|| jوJr\_ǷU݄86;S V3SkA/,g<Ceq+ f0ߙ6i2 Ң)W6{d M$FL쏜"Oj#>\R>HHcnȿ5@~wY +endstream endobj 2589 0 obj<> endobj 2590 0 obj<> endobj 2591 0 obj<> endobj 2592 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2593 0 obj<>stream +Wu_B|%D 1% |;ꚨ4mˀY0&V~cO;wx9+ʹǕ#q'fy*)>HN\1V`oӽh9QmI\Y }|ƟޠqGZб.xu݋;5 Kf"a/Ĺk<2I vK;/&7 1^x\=)EUظr**oa M:/<'eIb"rmq1CņV0}Uf7}Kk~m@yLMC@G`&B̅1EaMB2cX@sM`jz닦=ډ ! L;VIƓp8cmX6ڐg D U |咊!%*iG+ȗ1\~?R LrԷ9 /F U\Ea>'͍|!&t2ѾݎG:\'7]UM<,\^4wK4?JXKqp~JWJ^HMK^2>YVQ&Iz>e"pvD7-–3{ґ,̑"7[ܘ@l)!2SoAr=!Hu+6b8HbF2s^xM?I6yM&yAAWVz}fV/Ka (g>ʡ.9;_)6_S.3{}c?‡bagʆm(C _d⧦]]nVڇrgpNш7ZZ[7`-lc$mjyq"NxAzhBlYoWR(MKk/(|l{40i9Dy\p׮G6 gsiYbuԡӾRbJ0N @rȁ0/p}D,hUժ1Oq{ژ!ioE|lԨ'o%SL m 6*_\: ,@8)K3fsoIso +endstream endobj 2594 0 obj<> endobj 2595 0 obj<> endobj 2596 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2597 0 obj<>stream +|TJZ!V :}3A6M 2697 4V[i֫ yzS䢨!Aы6% mb92iC3Odg0իτer+ߨx=WjݚY8}?G┿4HQ_mqUz Lʎ;>/Da<42x/AdH)5D4q ,ܡǑpsP3`~G4j"`P2|'1lf28MΓfZtEVrcͧIY;!ĭxԆVj +iNM#3YrfX:V7.猨@c'=Qm +ܫ'4zL$2 }=ţQ&\`7F\.Iµ߯>[4psQ% +a1[eHua%3-WÅ K8Vh0AaRPog$bi +"kڮ-cڴ,Nżͧ8g֠ x|mV bJߺ3~'.Bh4KR[|QhL"WG97BxUH A;Xb\"ː9Јt Si,6Z$_h/_\O 6-fi&1Y4ispk r s,kJZ^y.DrCyJg yN؂) (bn6z% ¦rk[b3EL}(iu#WJ42ηq%x_8d jH)t|\*E%Ff{ @B=3Ce _oP?d +ŎYc%6Ӱ35_X'Td +"/*5-Uߋ`{4_Bh<6x=1frOvյIT$zrx!mn@#XWxejW?5fZyeJzJ.u$m>qM$Bsl.~7O 2xG|6 +endstream endobj 2598 0 obj<> endobj 2599 0 obj<> endobj 2600 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2601 0 obj<>stream +?>-Dt¨7ԃFm;,'Z̑پ!ѫ:|Q6Z k򳴭8:E ?k-(-tR2Ccy'|'^j +Z;Ԁp 5{EAA5M |݁oˢ3ѧrBm 25U8<<֣~JԻwUj:g%jk# +AHok! $ }L(D"ϡSn62UgQZZRwWHC%‚jI" @VW5Px]+mTOUE3(}zl)>TeVĉxc^znAr ,[f`&MM]u'׍ϵ*= (uQcI.Ϲ޻вz#v#G55u iASDq'beuf):Aѻ!n8u]p17J9"m<l/B-%@nH2>()S+Fkl> endobj 2603 0 obj<> endobj 2604 0 obj<> endobj 2605 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2606 0 obj<>stream +cBFhщ)#Ms>rtc4N>^T +0r +: ^BX_75*պK­tYז1Ɋ1qmxvg-{E̬i + #џ >N";l4 +$$RpTP,i`Vˉ% ę^Ue{M3Uߣ+ڷOldkzpiId/wWMB;G7@ s>]{}Y;Ӊ|0A8-h*I2G@Vܑ&TxkAe|cpAdц`> j]$bϼ>.}:o1b"̔]-b\Ui@ @Hi*@#{l)cAېy3#Nr%ol` J+{k `waHlt5mX&j* =:lKrtЪ{"KdX@LBSKMG) U ]!e,ҋ={Y@V"i$0bdԛ//ʻ3KDXy\1;^q|J<|3ω?f΅ޣ5=ߧ:t"ڏtKh̭%u&(-]}眐u0f +M7J~bZ BR=6}9&7p$]LVJAr( d +DˆDxGb` }ҵ_&Wwj>9]p?& +endstream endobj 2607 0 obj<> endobj 2608 0 obj<> endobj 2609 0 obj<> endobj 2610 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2611 0 obj<>stream +G +?̢6.k8:a&3+pT= Ǵ^qS&^͖nN)is^zi _KY2D^,0(}XJ(E_-)eZΉU9|zBnjs=sHF\_9/%=pb@v90ԱmdRvsO4>gqߝ%lɚ|O{ɁJu,]PL#fJytg\q'2.?h^']35ߓKgؼjnaώ8t;۬#?K% +,(_᫖C >M>Όsu1^,ޝER08%1DYrS\ Ot( #3nw4|創S =0U~i|[k~MƎ>kr%q])*0썼˂U]3)bW;l v +oilow=L?nvcz0[26~s쯇d_0Ozݤ=aHS9OE\.v7Đ`RNՕZ]ik5Zg,‰ P,G0cOp:4иX[_fե뺾q@i‚-aX֔+"%yr8^9 3:.+2yJc>xF+ 4 22s!k~d!w]y7]sݲФ3M׃O! IH3n y~R uUW !2Id2E1 w Ļ~3Չ Oh ߒl%E) #Չ a|[hf0d3q"\uJ*6Y< +endstream endobj 2612 0 obj<> endobj 2613 0 obj<> endobj 2614 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2615 0 obj<>stream +q5HkqR,H \|G@oyqkz95RHD Wv X4.{^JfE[YvCl7>h+ +>;CLɭjR`$^$3sjacVUVzUhm> endobj 2617 0 obj<> endobj 2618 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2619 0 obj<>stream +bН1,3ZjGPR0J!a552خ`۶!Thjkޒ9q*lEȱԠ3wd,E<|]>!Tm:u|с> /9R,GKn}Xuׇ͊uӵ l)eg5npBye9N_L '!%N@Ÿ|ߦÍRk! [# wqSl{?IOfmI=giHࠧ$W@ln)HI?GX&LZչ1 ޖͶ;HKdqŴYk/VB7J VMLA$;LG3haؑaG(jh[$^Ƴ"&0zzv`Z%E#Ţ4wIȦ{wQ/3xdgy,oIR +r8j"+o7*O(Hf?Rv2?eR2 ef.ebW.¶0f 9O%Unw78Ncp}/G0S[P~-FKPy_GD5xDkt$, _bGZ_UBJI첺z=)Kߒ^-_M⢝7Heʗ =KŽ^] 4L5Y B?WLs6q2% H Y.>2;2*$NSpd%GG5ZU[P!V 06٘ qw&;tIUK Sl7<2 +endstream endobj 2620 0 obj<> endobj 2621 0 obj<> endobj 2622 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2623 0 obj<>stream +x\dP/sTTR5lcw vK]u]uRWREL-qdUmS3b/o,^8h{OC{w?8|ݾ"1p s"8ErUq˓G1cgG:o#nF4 X11!n_O)1B 5sʝ^*{q.pבֈYnaP|." l(Ige`c%͖< 8;oGa/٨2ܭ Ct#|S,Jl_IZw:H gtL A%wnS8yy܉mI+҇R[ ݛLkQ }cJ".2YT콅pNDAYr@"}4ԭ)5&l&6;)wzP<6|=)ހ* ̫ކR``3Oe8ynjGoUn`4hwr +g'hIEsE87ĐUK"r:#|u]ⰷ並dåKy>fqJR EȰ 1IS]m'PQT{> îLDm'5n5&HޕcR,>_U9]rpRuGWGDDwo<=uwd&zRHrtGYjC+^7A`!H +6.⍚Fط9LJ_mBt *G]99 ^ĥV72ׯxJPȐ@ $p&Gu0c,=K?~^-4 Gce +DkFkZrܴmdGXvfJ4,& K=5 Z)fuĸykHع^&#C'lsXwnb;(rѝ X@W\ |F!ZsIbGm`:$Oh,I nP"?=a $a֢%O2ﰭ' N E 7F2 +endstream endobj 2624 0 obj<> endobj 2625 0 obj<> endobj 2626 0 obj<> endobj 2627 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2628 0 obj<>stream +$Iso7]!"5{nuX nN.&kXd}[tٗNQjQPGG +Y Yv>x+k$Ey}_@J1`2IxFxC1'*$mS?VtUB*j.vB h2@9+tYÞwU@I<ȦGӋ =qs~1RƼ0_֮pLcэZWx]à$l/;[ c$PW X Qu#BAڻ raEғhUIwe4j--}.YaĿk*] <'y^'H Gs t\8E@D#a5iE}GW knۃeJ[&S]>\ +׭[Zd{yto> endobj 2630 0 obj<> endobj 2631 0 obj<> endobj 2632 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2633 0 obj<>stream +q%A2"^O"fn4wՐkioԯ&O(<7hȪAql%,ZWvlv%Ae&50€buU{σl^ضSZaQ۴ra8/pZ 񻨓D,3#8ٸ7 h +ƺIE@%Nv߳m]9V* +/ XK*jŹI>"벺ܧgx!7G9_굳)&aSy!Ksՙ?V۱nk*jhcg=^ X҈h"aE |Ln +Ţ#P c+\a1MHGԐ[װPRJT+c63W!ӎ +t$ L;|ts0tKuUЇs8#~wNoس`l/W?nq PN +\ǧF9?;E8=#L]ieIo * rBK_bKkqn W5Cp*I0*_d嶃d0V0|o8yK`QH;ElR,ʴiX T1H'Ec=g2{O5"gl +v &≁Hpuz7˰c#&i"K%~'rҒD{WTRPZ4ieY/,tἛ##|Kұ2֚-$<< ҇ҧ-U2_M|aV.I=Ynz*3} h3/񅍋aߪ%;; (^/W_-r͍1(#vp:Oofsr_*gCoﬗq }kkK.1I~WFFl1Ԇ,͠Pqq $gx$4MvI׍?|[R͆*cfRDےt՚Oz riV֒npSAk|΂m< dS=*6e4nnulQ2LKeYM2[h;bi1~jLj?5Z:w_ bs$SII/Dun> endobj 2635 0 obj<> endobj 2636 0 obj<> endobj 2637 0 obj<> endobj 2638 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2639 0 obj<>stream +k<$ЌJd~mmmFE%([e<Ż.mב wx E pBnCr5 +}WwygG u҃7,Xb5b*2./5!V,pdl_o$;xvV{u]Swk7y-X/x:c[a i\Ӽmt:/[@Żj/[BdA#֊[ND>2/4wJ)iHޱYJŤGw4 ƾGhڬS;BhA_ط'ь+@iE'qϙ)o!5RI]8%eLXD%d_dMF!%P xYPOLq@ G?83@ +a_0Cx+{dueJ|*_i}>BMeYK˺'2VJFR6܄04 D@q^ :p):YK˯X?ȁʫȟ|)B D+%Zmcs)/o4|7dH% #587x*U\W_]"1(b" <0 sΧbxJT![77NU҄!ȋ`U)̆1[ԿVpو 82d7Keg;PX;]ÏqlM% ܚB!E3]K%d`hKEKTr0\mekQMg΅t߹B}k3~]^\L]}PB:`*?]iGN +f7dNTekk,!A0iT$ +쵈(d[ *j|+0B}z#=Q]4YD+3|ai=d*u)3]DAul-z 0eܯpIĀOg +endstream endobj 2640 0 obj<> endobj 2641 0 obj<> endobj 2642 0 obj<> endobj 2643 0 obj<> endobj 2644 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2645 0 obj<>stream +Uۏj#JµЉe[FHi騔)+8υM=?%M%sD%Y`U$L? תbեAjlɦgeq8cfjͺu6oO2YIѦle H4!^R,sgܸr P[:vxQ?kPQƯ O%C9Ko}*=e+˄H-*Q?5{Q]:gD0$Й +qm&~ 1>=aEJNc-{).$ו&k@(=kM])|L95Z J*k<=-)Crԍ L׳L[^q6 Wso3ß#>$/hӕ4:iKqS}d1ݍ1.ڏ|c{`%vn/td ++dIbe/q 4n[PF)>>xp)#d'_iojEd(dd97yZ9U~j(J; UK)%ựilWS> bkqSJ@Bg' +Ův =Q-'!%p=T8tz;U0Ⱥok/8W+ 8֓ +P۪Y[j\> endobj 2647 0 obj<> endobj 2648 0 obj<> endobj 2649 0 obj<> endobj 2650 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2651 0 obj<>stream +Aw ⦧VZ9֓-k"&+)K&FX8rLP'h^!~sb>O}\!Ҽ_GՇ +qZɜ}k՗4D/x3=5(b@gW%1=%|,;%2זWN W Fˢ}Lف2lg&rop{DVVDGg 9Nڵlw]h$ޚsKYc,bn׸ZkEU{6M#e2DWBssEzO'lrȝͲ}'ۙлu͌ߣt[Eg j/!h4=/^I'#o$QC$~?>[$yYY>'m2E"*vت)k[Ub$A1<ɬ荨!<ƵfS}eO1Zp6L4o]th==x f;n%3h/OC: #ˇbXnq&8 r )+*Wb@̠r~EmBƦt{ +jy`B',:sP@\It*4SAU $qXskNH,+$a:dbH +kY~*?ܵd/scuɼPqRP:xޕA]!r 1;^5dn eP31Z +endstream endobj 2652 0 obj<> endobj 2653 0 obj<> endobj 2654 0 obj<> endobj 2655 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2656 0 obj<>stream +!/c[^=_活Gc}W6}&bą ̍@asHqW/uzX~B|Z.L$X e"{9|%yCpJT_SJy9S y +9HINo'mi=xs KplL)[FZnQq{\> +31x~0?.M_+L΄myF*i4cmMͤӳs'MVWX# nQ揳V<>Z̛l'.Vg!J3/Nww@#С4On՗59fٰU,3F0}-4~P" RpXmz̀'a{dbj,} ~>B3LTD {5uH4vD)*)술R;sb}+9CAbwX0K2ln+䵺Wu}E9c:y So;#@N)8V>')DP(smb$_4ps# = PѦ~s1Mw$0Xavȡ}hSki¦s? \'4Pԋy !} i/J:53uɖL,G%4Q0!ѯ\-Ƌ +(M5X 39adE " (|X=ZR? e52%7$|qOq{[q]<D3A78KYo 赸q?Wk$KHi8J*ԼZ`8?aQBP18bH-eUq(1> endobj 2658 0 obj<> endobj 2659 0 obj<> endobj 2660 0 obj<> endobj 2661 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2662 0 obj<>stream +a~CF$U7xu&,>, I +7gMD쌾{ӈp9U Q[rY$ީ8ۣI.y|x2(-{5Bc>c_EpmrP._:&sJ?&oOBg'Ds'0 _#`tֻ II.xE,l49P$w w! Va}%=-, RGz +];G~e2R푗 ?){Kz"sK]9+A)\3G?^RX7Z`8UwTL(6 z6@ThqgWibta+F}@RC>˝{pԊc韞sӨ&+IjCLtLF,d~\W3r$$?P 2iHX2ԣlg9] i Wս:)b8N NJ '@ }ps#ժtnRQ\b)p~p>*Sfst8.SF!m9RF`'@xR'f0ګˣ 6+|FP}HVĂ* g\J\v'fMP n%be'(b;5FX8fv*=Höބg.7ȫQOv +H=q!zl(5j+8Vt:jՕ)qŞ|+ض#,n6׭:u8M04hkTrԀhs}iAX s<|6~W9Z|;)p +endstream endobj 2663 0 obj<> endobj 2664 0 obj<> endobj 2665 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2666 0 obj<>stream +:Bvm~ Er~ai޼7Gf62įe_B:2à >4^>9z.Zh.֘/#QbBLJﲑ6v7K 仯oT Mi{4㵭mÍPOjT`7UjM"x4o ܶ;ˊ.Ht޿F9u=4SHHnuO\;nd!!aLk{DlwON^K.,!mQ& Tw:h `HJh}s߱:kZu1 "$(ȩҁO9ɄDIw,D@ #Qr?4O=:IK@Q3P.A:;0;-h +j_ +%]V%\7QR0ijh߶ed,.K=7@]W&ᄆg <'8N& Ã\Yda`>6ލaYű'oäʙNF0jͫ&SJ"TfRVُ6 7 =`{n~Ϳg0q$i`~j;"x7<6'6@(^[S9ytCAP_F)if|&n!ʱ닼V{gQj.Lpfe.v\!*v&< QL۩ʊ|u`FՇǣ~h <лqQ!_TkI 82Iѱ+2/68B-uzBZY'41Fo]0ӧߥڨc!~eXkhN>?_kw6B?+:GkҥWI:eO[pfZKc]L}?9y]|⁴S*Ԕ.:6p8,lv1[z>7 ++:[H$SX6J4@raQ'/_HzZ ֣fݰ;d⭊/ җQ;,I{ +5A~Էy'zk +endstream endobj 2667 0 obj<> endobj 2668 0 obj<> endobj 2669 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2670 0 obj<>stream +! ¡}hT bȋuox0BD:п.AC5Z?.3ǒCE%b(| T֗s}Lrt=@e+ Ws岊0~yl[ u\~ 0'z9R,r|DA߶9 l"xv{pOF<*HxOfH4K?L5'%Jqq +|,}A(;[6fZKu +)Cp +$]ˈ@1^=ᒽT1wEe>̦nsYJl+,)f}6\ZThkݙVfʆgq^r@Wߪ6>|wAj3„ +Fsh$y?TcDg̝HW1d8C)HQ$+ۭ{;V5Ѳ*/RE[t)SJ`+ʛ0җq~f~IƾG\LMs%T̷6_]KЕ b<^(zEa5Ϟ8@JewWxj8ؑ@B +;">" +-W(ꥶܖ)fD -7P +(,튿d?T S@"3?rB?/nb++CPg"yC 3?z4_DXZD&zyc:W<2#ȳhL:ZEk&g6]a%WQXaj=Eljcy_P +Sɹs1|i%kx<}ġ&ŷ҄.Z bHbr:i +ܻnhQAlBGT\mNVCGp.;c}p{weog% *ZOl: c29t(ڽ5^m3H++|qs7:;aVB4_j@b9E5RLN:bDQRB>#v}sȟe%7S ҈Ba6D*(tFiI!3ذF%do J*ikb@5!g+K-C[jA]]K|)&s@c4ω?䬈mqa6A$-a3Ծ y%&o +endstream endobj 2671 0 obj<> endobj 2672 0 obj<> endobj 2673 0 obj<> endobj 2674 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2675 0 obj<>stream +h~ i_@,&o 61- T疫5Y {[Ȏ*eZ}L;qjG[Ԯ1g^Ul7j}}̎T},VlL}i{_Y]%@0faMH g?TƖT#?k=Px)pW3נ6ʅX^X;[>]bR}y< 7 +I?Vd)$E~4F3 +).z{.6 +?tի_'X.[w̌ cr5'yfTp>n}k1HESLNEUOvd^2ʍ2{ь +P}º|\z] 6t|R9?45g}D :TZ3mK`Tt2fOҋiN_84NM>Y䒷x_˨f`X%6(i,Q)R9+g!Ex}O:Q$aFh(#t`qR)_h7Aa'pk 9>8'9+ei\')iՄ'Z6ϋg8qXCc +R+h]uU%unxo&wi't/ }[~q~8#t:*(.q{ǷGeHyht[NO%E/۶i"OIZK+v54am&qCF[>Q8HNIJFfۡ3HW0qЭXͣ8FMrtAPx`ck‚w._5=W٥, ؉yѫ0VvL P%YJ#HQaLTQ< +;rF$S!!ňB HE;F!8 ,)hZk\"Ez%F́-ux$)-I`AKh6rl``}രzZaZm_s cdM?vĀMQQK'P CR= +endstream endobj 2676 0 obj<> endobj 2677 0 obj<> endobj 2678 0 obj<> endobj 2679 0 obj<> endobj 2680 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2681 0 obj<>stream +ĨɅmrϧ}A'JG7 qf R0mA8 +:/hG7׌GErcQ9 K5?#ak2lr2h( h_)C(Gtb,͡t?Z[OHTtҝV^Ovn58"kF޲ImVPr`7uG_ sW\Zb)6c`.r:䀓t/(7O.`I;^ynk!md5$iQtSK`c~upۃ!8Zg/x8=1_<<O{SrȻ*yp[P4^b|ۦ%`(+ +B-~XVZ<=-U0jc^mZc/g NH2ZiY5xRE@׳Ϋ$c^46+ 8hL8`DgL2=x zCNZ,;ٍ2]vGz=R0}T7h1V> ĹS\70AH<-3>%ZBkխ ?fEԗ+V7%?Nxm&evt.1_0l?U}׆]hj6bFQL ճ~WB`3R3ˊwUyqrO!& !\j)bI3jxsZaM՘6^-Yﳩ`ǫP2TQ`Jj Gw)Lώc0KTQlAYWj`jWNAWB:Y_s#5!5d3UPo)PR$KҊ~-c&]@vO> endobj 2683 0 obj<> endobj 2684 0 obj<> endobj 2685 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2686 0 obj<>stream +OTe';/"ڪ ,;+ŗ@eԟ*| ~M] tff/v*kBU֚j$ۏa0h=hU5=A{gD^bEֶq>?; qE^5N>oVfd`BAT;}6l3o̽LhFغf}.;=Fe BvRe>pL~a@"tHFu:5aDxr8hqqZe> endobj 2688 0 obj<> endobj 2689 0 obj<> endobj 2690 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2691 0 obj<>stream +B%jnmF-pT|`Idc7d( =5rc/QĈPNb wr^nF9 +sqU$^6t٧dXD}tL2v;N?mɴlj^Rܬ:Ҕɨno;2}&v>К6%_>ŵމ[R3 X9*lϼ+D@Q߻`E  *:ֹ j-[:ע_s%k]WlqJՁdW(6FΥa4Ix[\ī˥x%ِ- nz/nX}ܥU\e +,Ǵy#)#FL9:L?#DmznUS +\IcUdsxM v۝?cRB?<`ƑtjN/0L׻ݍ)^x"^<[- aT;ҿ[S)x)if!(H*=,xLҠߍeQfKp'^ďA1G ] nB% "Q C-1jy;&)o2a%$7c86Cx&)猫 YU{LhPf`ԚTU\y,.F@n@Rb$zi:_G+@Cl0;s[)xªQVrҔ18+g r^xk%A!~@qc [sb RQ4Mw)w[P] d\s< yF>2niaqE_DU{".vN^Hc(ÍkYiAe}6s ˓z yzrQ4t(9z <'A!IV &`9; x|rCKpv+~P0({wk,r)m$YQ+= +endstream endobj 2692 0 obj<> endobj 2693 0 obj<> endobj 2694 0 obj<> endobj 2695 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2696 0 obj<>stream +rb%9iCOm +|xf2EbK٥("(ϩ%*=km&ug鄗NǼgzE Cn_[\Єɀ +D 9nWz7"3<&l-+KAڱLUF5FEi3D6T?+r{O~\X9BϜq,.qTDY,+k_7#9J$a[xK<־\ϐ MaaE;$ۯ6]S_GPH+: >.*J"3̺ ŏt)v`h3^8_&/Xg$+i3,Ǜ}Dۮ$<{^}!}D%] 6\}o +D7X~m*p`(rDZ%zZܧQ3 ,7ylb [RV*b+*EYqR~X P2t0vnNz=˥뒾0fTj%K. ~MXi'7VI2ND3` vmJpdh@lMF +c3!S J3Z+-*āgrgٻ"(s +>(OT=?q.JXZåz)HN% YQ$Ne E/,mՌP8C/[`ȕ Ԏ8 :m><;D.s睴pIKI&Z-Zqsxն `_ '|5^Iɶ>""4|O|۔ѱ;| FU:cS2'RjsŅjQ x^5u\(䑽KM:A^<ϑfu-=C!B:>{t +endstream endobj 2697 0 obj<> endobj 2698 0 obj<> endobj 2699 0 obj<> endobj 2700 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2701 0 obj<>stream +/^ A \RNl1+Ih3<5gߙYWqDEȎCR xnq~G i,,Xtt׍'7xZ ݚBOU%A!E~ZR}eOgǨuH_&WoJ=xnkݔ007ֳ~c;,JygM.yOJUn_w8V3@9tW )" d)Sw.Gj"k7e%fOEo3nwyA87ta[f/;^_=ÿB""83Q&nQw7$ai +wUF`f9 ' efx'8^d^FQV[G ]桎L>po +2 -/Gs<55+\- D3StUYGj-;0+L؆&la7#9zZAn;`pzkNLr⍝1n6JSr >4^Ê*(~ +g=7bfhJZM/%eQP{:}1ΐ*fY ȩ2W'j.jxR`.1*jiFټn.*ՋxECυ"z9+ۤ\`ʬm8=#P@|"̿«3coPwNEig +endstream endobj 2702 0 obj<> endobj 2703 0 obj<> endobj 2704 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2705 0 obj<>stream +~ͤ).zecJj+7ˌP/پase?U h_:؜cy +ۛqJ$^Sˇc<ի'd\_⫢U_m&jE9jC2zѕ =c;ѫ] k=l8 ~5˴Jsk{=v׺[M2]kݎ'oJ@g’zNtPuއ(JwvÆpjN9#'BtooUſ}*?ʪ!aia7>@Lk GOCsFGw7@#kg* 'Xtn+H+Ua$ܷ0|.Ń*-ѷ,,23tdSe^-=,oI8^,U޴L'KڼyX#z!rB39hkyVUt'3w_wݻ8\o'ҽn1&+ +u?Cfx5#]{y1o6k$@}f~l))rtQWjk@t(PEMU֠"dԸwgy ڑ_ ohD )a瘽pF8`Q g cNJ3 |ȕU{R@$aO)'al_g9j*rM:Nlflgd7&L;x~dqSd'Mc4=hN,܅;,QݛrNZ@bN7.pD]͍QœF v +dif]j:QrNqnn3;YljpAqb?%RRMPFhخ G:IL?)){d*"W7J͵CJZΓC(*o=? iatk#OD7[OBpi#;`oQ"!_OcxD2I`!tWU[ I- -V>l Т{B h7\Ιip+eЪV_xD:V(!T- GPIMirKW$sXҦ )|C*!AF!nCL3j hV +endstream endobj 2706 0 obj<> endobj 2707 0 obj<> endobj 2708 0 obj<> endobj 2709 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2710 0 obj<>stream +t'+ϋ\=`ϴ>9#Ϧ$?5RcIYFhV8qL0&;1IGI s\rCp"Tbl E k k9Ljpr G=U\Thz܎{3i{ ~"VHCѻ,ORh0baBQv`HS7jE6[yP 5[66yHbAtBJWI&'5[: ȢQ;&>-O0I,e_h|y<3ptŖ6yXvcp+U7|b?i=f՗m:z(PPr2u3WάT8⤜z0wi/GO+vYxIg L=f># ;.cDDΕ8Y`ʘ&E$,<߈5a3!t3a$.2.3//)xn=^x2 XD Yhڅ'<١%=:S#-06|s 32 6mpL30((>Sd@uB~.&AԶ 4IV5S%瀸"go;ԊG" ZQu3Y!G= A"),A~4vH-r86 OoK%^BΉǶPd> 34]ÛJ/:+7bΟ20gPznU#iQL'O#wZX߀! $ޑ}v6> endobj 2712 0 obj<> endobj 2713 0 obj<> endobj 2714 0 obj<> endobj 2715 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2716 0 obj<>stream +.[LG pa'qԇmh2e@b*6FΠlDrkfY@ +?'?=Od34sSs^~l{P]? 'J>i&hi|=Lby }) xp<5֭') hK9h!bz|#M Cgs1'`W ,}F&O7ЋS{R$7!4Jↀjlv7ƄbpWIJgFg۫\tmp6sHFxH'6Z_f.plĩy: 1,sKe މJ8?@\na-aXh,d_{eؿ.b8{cA6̅nD&r|ˎY)~pM;3%CYcd8&S&^zyD#[LgdjB `i"l H|ԺE-9>I@уC|* Rk =<[{B +q>AE`q#d*h+[ĭ;&96l.*t)c'.O3hEZUZ#+k-ɓ(w0Nk-3wu*8өjiTI_#[KԬyR\ö'%lKv/ӥ RO9; oW{MG&twIhFQVc>Y]? +endstream endobj 2717 0 obj<> endobj 2718 0 obj<> endobj 2719 0 obj<> endobj 2720 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2721 0 obj<>stream +y hb%ώm <^jy*F?7t`]vUdÆ/飠sb[%_flL`c I96$~MASd.6:`kO Uez&~yB?] Q ,RԠi!ި S&aXuh*n޷9FƑ6>|W~Io&8ٝIY-ʃ%:ª|:rvAA#J]RGjn^jW}8flq@ᤌ(,gjߡ6jhJ ;-o}},}fW6/n-(RHUlHvEBO[ \AuSZIXvy(õfۃW3݅Ѹ Y.f>@?A3JKGBp\:' Ꮍ${'mp43 Z/~ " _-W847W7RfZ)`sI=ˆMiXh 9[U#r<7BkҠ`-ŝ:($6#gi9ŁJy\{$tSBdp7o` +endstream endobj 2722 0 obj<> endobj 2723 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2724 0 obj<>stream +Hs,+x'o`-2oVa98i zWQll4\dvR'ara`qz^X&]{-ik@q j*Z u8v@x쭝L-3E^}ybE}Fu ~D`Nɵظm' t 5)++$넴9\IASAYV<GT'= +Ac ~yDE:S + 1u +TGLm vMFs7g:|')ATfX.Cp[)NyYQs j to˷(kӌ;ٟD<ǚe5\f$ +endstream endobj 2725 0 obj<> endobj 2726 0 obj<> endobj 2727 0 obj<> endobj 2728 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2729 0 obj<>stream +/77=oQ^QQ؃Qq-1\C:}8ºj◚NT6lenA* /lɩTFQiKeMHwȾBkǚnC/LET{+Eb1D4,;Tp_?ĥU!Ω+_.xd3 It1V6}6:,X]NBߖI S +MgX*ldudEh}Gr疟T3~CpHCh-V9wBdt L&?u}sTF3Xn3E^9KHȽ8o6*?sn +.i\d:^uzY3#Dis/ O9ھ1m+aeTRWxKɧW@6~[wQC!j))Qг5 |dDKrˣH[:^n] uLsFjD6h)O$#.K+ਕd\}ji eڅo&F0yeNhfU]4،E2.JзN79{"{Hd<\#Ԉ<:$Y{1P i͵`80zw̍`z>!ؿy3,N%D+]oKd܊ h9yK`p~C{~ZDfwW_QRN33ĽJǺ:ኋFB*.&J]`knb)K7M `\uW8ONtr:[YձR| oB@*rX0{\{ IJ6dRT7s ~ğ.[ ˥0LD`?e}PoyCvL9$eȍ)? ߚ=]zw)*xO.,:ddgbFs MG9Mt4I $憃yH2G1hvVXtb)#mDv*> \ҼpIG +endstream endobj 2730 0 obj<> endobj 2731 0 obj<> endobj 2732 0 obj<> endobj 2733 0 obj<> endobj 2734 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2735 0 obj<>stream +u'W't`3QxXņ՞[/lRhi4D2 TM/8͓/Ahąx>,ߨp}!#3uX?` I\7 +@0tGQfzJ=]h7X:jL{/ +K-a/ޣ'w!E%eT|D;!X"%͒=Aa}5r׌ᱲ^q*u| -H瀫*B ?N)pk#wbC.O3W2s)*"Hݜ8b\)ܭKܸB$Tpx +Oskd-a2@0vp`"A.L (gRXHӛKvh.7iEի[%N\QYڢ,{Z8/5ccvU3;JSp͵a@Sȭd 'UB[589 +:t:6!`GƢ|T(aE` }Smg,pXmˆX˩2#2tMb;v"eDy Wk)K0F*3f=lШ;rǡx_Esʸ_6`#4^6 ZFc"h߯rDAJ3P~Q9K}0s[wtrv4x:N@g F}HOQ`7ҷn0Q>3ks/Q`ds[nb1n0ZL b$@ya\/A38S]A)!d:>R $J!=ˈ6-|ԭ1  !,#-s16%2unW;HgZگ!yluM% I`/iZ,#WV&sߝ4nlK^5Bq,lLǻypUmr;Zu߬={.wqs> endobj 2737 0 obj<> endobj 2738 0 obj<> endobj 2739 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2740 0 obj<>stream +Z2ǭI;&"Dv +i1)+*T)OPeU6~᷑Q ~Ls5pz>zL)Lq)a<7l-mx775 z +M 71Tu+)cCKk]/ѝU/p;gB嚣kE`ߵ`?Bkﰣoh^:<ڤGQT?mIxhB+=Vg ' UOuĦ +)q`2WSAPsCFIYQ=Xo=D5s@" v/ό@Ary q:B + s*3W]4Yrf;-C/D/pxz;~, ij$|_'Pb l蒚t-R1Ig~1m8WQ=@>FÙ'&;QԮA-G#Qni팅u pB軛d @ {I|DԓH/F?lN'/9I+cEs1W]~bG0w@SO  +l*H[eq` v3&4 .Df6oDQ +ߩg&0[;`50N"agP0ҮigE s6GYT#^֠fX(Zy,P3}I0|ifT`#WDi ˜}˙ fq(%j%"5qUAæC{zl3у2Y=ѵh}p(oh2z7u(nmR#ls 6HzUNdhbi}/.)2$5Mt!\P6sk5[qKJu&ϋR#T73h`\*ZUY7x umEG.*k_''Xb\Q:lb􀔳;I8w!g6Ihlq|Cu> endobj 2742 0 obj<> endobj 2743 0 obj<> endobj 2744 0 obj<> endobj 2745 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2746 0 obj<>stream +\on/A6*SBd@<݅1\VnR$fFr̥r\W| ?x9&dp02"M-E2Qyʵb=\[ݩhc9Y"|nP˟|?m'ۓϷ#@3R](/b-s1C&3[Kc9U$.ga"Ex̰@#2:a<q5Ύ B UtЇOIhfB<8 Z g,zN)4)*DX#cw-qR@fouy@"_r`]b7OIȰ7"S&9-])#TL1>L æ ('c [g=_~@6 %1|t嫤) +֐|N2cfĴXH +ϵ +.z;>q[rg<͛CxR599n.U[Idq Q?M3| ++igX };䈴:̺s)dh do R 34 +mY[ @2YD Q'`嵽G8xE&ax8\ C3/ԗZ!_D k%ƳLQåi=}?%g26Sk `{Fc@iQ4)`\y19s +T9u\ fd44vKP%w)Kh"Lz\Z'v +=PcfUe a04_'ʔXUͩ3bRj!IV'Ȝזd3O0*p cX8gXy-y0XL:!} Aꤨ$ʏND UvǥfDxSDud >Rm%؋*iH3f>缫m5Y:;2G( + }D fF%0׹jP +uavG͐ +b#]UFyKz1Ѱmj)Hg}rdܑ۷cq=6;k{%8O݉ggO%ٲ`u.n?*3ʫ5ǟ R;& 0..spM4xٱ̸D]n#xpNp cr[uPDb;vb 0<VHg@>`/C;KiS,AHXg4+{UKZb}r7[x=GR><-,z"54g̮`}~ҡp\P = = x'H'Alxg^U;'cU[: +(?u=gMI9 JxaL\="ds-?j}A#~Cp˕SѭorXdSǿAhG +endstream endobj 2747 0 obj<> endobj 2748 0 obj<> endobj 2749 0 obj<> endobj 2750 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2751 0 obj<>stream +Vy;#vk"%vVCk"D'`o=ЫoCmSgFGnx{ߏْRحŶ&kZ| ĿX3MlZ}r26v|]R)LQnx%`,.7|Bȯ[}N'Af;m1B{9U ,S8-TsGjT@P9t r.ERnYa6\rF% +i퉐uZcD + 99" 8b +VUҪڟA^DR4oN@CV\rg|Bʔ{W*Z+p2l]ՙ0b$?ak@ /W"p®&u0qVy˳*5BTz>K S &5;!@:mpM{n {4*?BlZW!<@y789pDU qYNfV^׼t{(īa'`tKv8\Ip\>cjPNm ;*YZ+Tvە~^f{jI߫M:ZUrQ!ˏ4?( &sNB@\ܟ'%0@KuWH*)7yriZ;u+T:N1!s Pa1dG( @OG$9NBl8ؾ=63_c + nZmp6_(GX +endstream endobj 2752 0 obj<> endobj 2753 0 obj<> endobj 2754 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2755 0 obj<>stream +0Eɰ03P *4,ڤarԵ1ζ"9KTlݻ9a6i9Ƙ`t\(qm]i5JCޝݜ&Ǫ.`8'<~P&Wz(grRb /D. f(5QcLb}olbvcN C:EZ ZB+uAZgb I_os^XpuV1!q™疏S>m0ؗ`ܚJMsQeB@u +ЖNVh6&,k듼4T(wE֡ݔk@IhM?;I9XҋcQ̚q]&8@&ρ`;`lX<D˽`E7hEw-cŝz!>>5%Ĭ}UũvgWʂ_C?Lϱ! Slm"{_spD*{ǝg`Vе9~OnI4ūY4D>01ی&0i/tD(G*o}ӌSA#$DXxُ ,9ԬbƸj6% -cX֥at4f8q;:uд~fDrV|'X?1+b1J-u1'%iO^7,hUAPgWrPjhwb1@4Uo8N5 +endstream endobj 2756 0 obj<> endobj 2757 0 obj<> endobj 2758 0 obj<> endobj 2759 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2760 0 obj<>stream +ׁFβPy^<\e.} dݦuRLRP_F |yNWjtH.:;2" +ܶ'ٚtUl7 moʫ[V0bΟQGbPa 1:a.?1VbAs:kyd}z92TR"/1IƸWrřsP܊5>8dnnI +IZ_l+ Jb1^NQ_g5M-U,Pڬ!3&&5 II5S47?I¡0k~Ъ&.0Yȇ +^9_ǼCP+HwMY?s۠5Dk ]}_,DH wP(+Z"cvk v4x|tlB5]VlW>>l.j)I0U.f^UNֵE` z@ Z~6J܍Zw|/&X8PXɃM-nȑpSXc0fE:S7X?ZdWMYHp4iKRB[MyNOMlu ̍z3rdT(xnYw"\bGCHn;!SY$|Km`Rrq 6?@j/G!@o:J9ָI RjC(V^җp&!Fa*/<İ^WV +sj>>ye t ^m_lk]ģfhptx_" r]Pcf1 X(,S2Cuq \C +"t+*U ܌a9*8놬 Ua)s|rPoJž$&p!ֳEx~^ʪw w2s'J|s`So? +D\Bn"2?.U% ]kspnGfZ˄'Ox;V'[UZbv;*ت]RI[U|X6KY@NvN[B`8eR2S*Îh"5NEA_kY\ ٰ''l~Q* +endstream endobj 2761 0 obj<> endobj 2762 0 obj<> endobj 2763 0 obj<> endobj 2764 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2765 0 obj<>stream +39UG{~`XW&c84BA2_~JK_[uM) VD:Rld -t<!;LTUvsVjunZ{z5 +p.~O𓌦0wJʱ~cF&\*F9'5ބ3 s//ۡb]rʋ^+!{{Dc^(<^ip + N8S{c p^R5/ͪ1"p pd{mepo!)iZbO +< \Dh̏ISUS2RmykWM^ʒK兙6!^Su_|Ի#:BN}$IyS*užeT 7hkp/A]L!+=-$ȸ|N('Ō _$1Pu\"mexo( XS'~m.* v̊Z0 +t']BDatEB?<: UJ }^&t\lzYI0Bm=W+K :ŏ! SQqt/zhjt2CFn-pgr;bkhGY'y=R)zBz;)šE) r83 P߈D ͯҥC0 [uA3ٍ+\f[CB&&K}F#]q<)¢-лoB9 xM ԝ4ٙ7T <4`;3Ј Vآ}pH:hL+P4M +f]K:4O} +dühh=>r +Sib6Qw4"0ФĝF>8,ćVM%.8~Rzj}+au1>jmܭ\0r, }iI~5՜%UW玴2AO|W by:2]RpByWR +endstream endobj 2766 0 obj<> endobj 2767 0 obj<> endobj 2768 0 obj<> endobj 2769 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2770 0 obj<>stream +Dڅ(C+F-mh}@ܜmWh;ƫW5HvkEVBkRǍ.Y*]L+op*WqDbX +)8Jc5>>M&ڔґ u?e oh5VhڒV6"Z^sq48O@Nݘ<$2P:󥶊QLp̕fRTuL¬:5~Md/p=Q>NOW~?FA~&EX+)P ռx Z|m`+Zsx|-2G:[93eh:] yʾ\I#A 1_ebȐ9ZS*"1Sj]D;Ԉ$5u*qضgi}(PM>+({*S҃b{xVMvcGnIm`Xy ojڋ}X`]ߣYO!D#u\rKb)=dS]*7 +s,MuuFԠ?3 8Hs=+[/#X\Ag{SͫC_˽ѨՒtpErWh=$Rۖ] єq -pGA`dbS18le>u{D#_NrQ/~KsdÛiDXO>ѯ2)cK a3<=742v v{A uZ٠[z(z#C r!LUә81lnьrL_}˸dOcx+|u +yf܉?pDtq9f +endstream endobj 2771 0 obj<> endobj 2772 0 obj<> endobj 2773 0 obj<> endobj 2774 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2775 0 obj<>stream +zLc36# w^|"AZǤ6V|&:kL?!/K1}I9Pgd*\jx -D kAzhxq &j~f>BdefR.f AAK|Am|b !ȦH Cκ*݋̈,)}QGkw]O+$輿(n!*K~n0Ni=M}.kU9-9ZX o{kxD +3£FB6ˤ^kASoql}x9 mqEPa_V^+K94AC'b=b^>پX*HTNJ܍ADWł{ W#p@D-&)teY%ѫ5 +O8u5O0 [$@[X +IA'/:|6;*Bd3jy+V |pEÏvl)i]l=3|0DSQ*>3XN5XE> { OFwk+uV DVE*R/SC&ޝt!ܟ}> endobj 2777 0 obj<> endobj 2778 0 obj<> endobj 2779 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2780 0 obj<>stream +/pFQ>%#1(*-fV:)rlߤ@],J2)M4&3*s߽<F*ubv`߱@;j5.¸/1.B^"$R2Rp +ŧm=h';$g\IL Hm"guk;'bs`h) Y@t3kw҄lXU4),B+ icx&+Uטٜ -ȡ-11RAׂ^XH[mϝ\pv6wpYɎ"J9x"/O.MY㽐8?_D܉*Aa=]ƒ +OѥqUđ\]ߟ[S޷E ~$"B0?7}n.-jʖ7s| 7E-I{|i];w@!M?c D+=DneZ末6*JqTbAT'g%>Q;|ڏ%̋ +8@x4f>>{vV +ڪEH#gd>/(}> endobj 2782 0 obj<> endobj 2783 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2784 0 obj<>stream +EV2p3r׊k +)+ˮwJPZ;pW~Mfssb5!>W_"hdl-.3cZD f)yMOTUw"KIcfX_m١M\^ѫE5:j"|a|j'=.4Npm/"|תvG *7v3#Wحy3@Xi̚i2*T+yGe@u)@gDFƑ5*H4=bxH^ռX*z2dש'b S. =]RlMþv=`Pm$DumP$ˎG)6ԗ3ּXRy^eE i 1T){[Hdm H~jcE]0'y ԁPb-S̶fs![bi{ 3U73 G?L0h7MXQAup=5<6k׊`vC5S4&C\ػ_ :kb_w$a`虷?s߻ *ݩ UҒ0\{J{%h?"nߖoT0,?߄v$pD&ܦ=(nP_R7|pF3`#?}E붐3׃k;fa1=wׄro S^6>[ +I?׫ +yek~\;"F6%JYqgK> Õc慞0uPr38Yx {!4=<ء_:)=y,gx-Iyar5[hCvz/g (s­겛b.b %M-L;~.r޵ G cj挠gu{0\Jg W*݁ e^?29>D`+tqQk\⒇W\a+Wy9ved^ndS,}h~Yj |nuCQ/O\ EᔡȒAɧa#%WБ( Â*' G"j ='wAyA~!8۸BK t*tUoUPm +endstream endobj 2785 0 obj<> endobj 2786 0 obj<> endobj 2787 0 obj<> endobj 2788 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2789 0 obj<>stream +RYI͞`L:rV(4idoKDO ѤL_y󍟄KG~P,OW$9EB;?t}t=d/2%wºi'!r< ~~cRم̺ae\@s g|8Gv<#Vگi`8"hrֳW%Cy|w)[uLpHWG}_BV"+hA{:%N+|hD ԍ=l):RȏS;Tʁp=g ".R`z߅# ~C\FK}&)~s z]5 LW9_z<hDi˽$"m KBN]ࡐ=(`kĶJB9bϖ2*o=/I”cq o邘h7i1"~@N"X*}F R7H`QWZݞj1 }_ `wmނi$O>28{n?cɡb_P7nyZptb/t ='@y  q젶[~(K8b}dQfpHW +endstream endobj 2790 0 obj<> endobj 2791 0 obj<> endobj 2792 0 obj<> endobj 2793 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2794 0 obj<>stream +HQ";M67=XV/g5:`F +S#r<@*"HZ]C+c}Z0p+"z#]qTzk>:S0tPկMd ߐtu> G\S<+)H6RJ0su^OQjvEmÙ&Z^uzg$Y)tCߠ?'|\ Sr`j8iވ)إ:,1 h]OL}F}pp;@&v{NqI a&gk* +^@O0إml*V 'ċؐ O10Q pyW5g/1s;d ʓ-.Kv*%ILG .K\Fk/Cb\pXc91m-)c/R9$5o̯G`^ UNWKlP( r#Gp&>I&m RXnc:sd!V{!XE&zF5;`ڴ5%N4 j:# œ`!OApLJ1dЄ/ +B`D Tvdm$[2h @LMHms7QKy#bs,KtmoEofQ[_O;MeڃUإ[wuG=;^Sbv7fTg3M}=B\&7e؅ +Dx›K8 +endstream endobj 2795 0 obj<> endobj 2796 0 obj<> endobj 2797 0 obj<> endobj 2798 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2799 0 obj<>stream +BCq~ԮdwIUǝ3܇.G~o%2xCLZO"k6?>sIa' c^mF婴[a{f'Z"3gvZ:4Ѿ݈%/PX6?*D&uqQ4͛ʧ +w1%%Q^k`+6y\=w E>+.ѩidZl-E<ciҗ{<-d +7Z2{1Zzy3.dYok/C4XDcރ}o,9SMk)2[T+nM+8Pml07|6- 5b}8ͻU3}+C~H$lB{PǰoAg|dA`̕ŽY'=N[%mYΣ_:p-Dx4@BB(vд(ԍ6zԜOL+rgwgƔ, > endobj 2801 0 obj<> endobj 2802 0 obj<> endobj 2803 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2804 0 obj<>stream +U)Cj/^^  { LQ֠^ayF.j }fCE9Dm@rS֝lzoCeM'xdD<23QMYRlRV=$->'^'~iW3gԢBn޺gt4ߜlaoKkǀZ^(ןS"7W=M^3 N/"IƏz7]>9axX11qP +.jۺi=SNNH-=`^AYL_B1UDXjAC\FF6>"4?sV3!;z:3/T3 !ӥP Ҏ ؀D,MJ'"p|aȱ-cs7nHOJ%unqkYӯ-R|d3p<t6n3(}`-,dx7UQ%&[!U{qXV{WS5N]EʪpFUA/U)p|$KSFDaV*{,v[myT`2MVH3hѤp0#8`$$qՁP̏/!q z>%QO JEw1pF@IVw{J̒^`M"rO,%cLke;>Ij@'޾q6>noCQ3B?ƌ_x:z3qe(NlL<͠R* Z=N0CG)|Hh\1Gzqv DZJ7r?.Dw9P}h[\2:hTyV5rddAONXqDT@BA#$`-HJҞ Pu58`r"\0yƢ¥wSD7첵כ“@gXl<&Lv\Y}unpYbWZvGׁ)2'e +q +endstream endobj 2805 0 obj<> endobj 2806 0 obj<> endobj 2807 0 obj<> endobj 2808 0 obj<> endobj 2809 0 obj<> endobj 2810 0 obj<> endobj 2811 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2812 0 obj<>stream +ѯDK y^OUNpX{>gݒҸ]gjzFTZцG,<bkIJf~ ^j>Hrχi:שYxƲD VH47Uqxaꁗ] ex^B VOg0Ev5kx]5 53hK7NX̨(yB;pP:qp1Fg(K aoyo .D&yNVGd#ڿ.߆: r.D5ߺW6KIo6և򰉅@ﱖ"~r5+o,xhz"w".s(D˯йG )mҒd*'7yfo[}~36Z;vǣqQ fY,Qtrf:oy Kh\SXyj6* +b@;?$$؉OaLH0~H+QY1@:wp*L)T]"8[Hqgz% 2\cgDS:(TjUwb孿PkKPDFRhpiXf!n ~/ +wYQiT=<"OF +xmc)DGSp--iΒS)؋OȜo 6>SU W/a=f;ԎQ/[X?GEZ5)qE،nw*_HҼ -`@Hs$P)fhsoQ1`sҐε%ʥL4ӡ_!h0fރ'͗0ut2$ /_n09Mw&ʼS Tϳ.s3yIj! xe|B <\[ҝu57Twֱyf'!IPz<\\Vvss;7ViC1(S/ps TIݗ|%tr~J8x{9MBJ{#PɅM*#7*r1K+;+`-4l|`7͑Mtet*z]]Ki" +4՗{N󅈲AҁU0J_Qy{yމU:WdQSҒ@\ /Cjk$W܌n@ +endstream endobj 2813 0 obj<> endobj 2814 0 obj<> endobj 2815 0 obj<> endobj 2816 0 obj<> endobj 2817 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2818 0 obj<>stream +Ojt& 'ۜ0^'?u3K;,*E ?GFlc #PX=}cZ)՗~2o1ˉĔԼ_e +]yT_2F .Qg7Ct;^!gʖG.Un@LЦ*OkqТO SOs@:/]Y^(ǥe-]S +ܾ`c׈=}J OKkr deAM,<@ w}EjlVً֞ׄv_i +NĒy +xK7:%-5%V֕s C?3A\W/!ZwRbw"Q4RzqS:K_ЙBh] D6śƗ4{v>4pYuKnh>~B',H8C +H=ALDfn2Tq̖bp9s~&ܾ Z|?邡߹'=i֞~OŽ3n %qQU6hK Pk4fa04> endobj 2820 0 obj<> endobj 2821 0 obj<> endobj 2822 0 obj<> endobj 2823 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2824 0 obj<>stream +{1L`//OHخ>Ze~{T3#֓~ߏ?jf7D4aSfLkO:i4#ݑtTTjKHyg /RoPqI;a7=4=*mӕ,]v/O_g5 4T à-l%S מ5ݩ^7G:EK&V7Cʢ睪6'݄8w4EB/Vu l{RT˴Dr!UJsfϝH~@sauЉ$Iڌ`HBߌ%BV]@ $f{XCNM3uȧu [63kK;{J}ۜ(^+ٸz`f4"*ԕw ҕFH*7ca8P]ԭAũ)]DG.{ʷ֦*RtܧaC1f WwݼAضg-s<^J[=#v%H^_%7x km8XQ009t]^_qdiu(8.mXi0#@vD¥n%Ń`j^ vl!LrJ[AD5;L}NX C[s0PS# + Ek:DV0DŠ5iHoq(emf!{PqQ}+Im(TBf1[?eLhꔹk? uVLqS}{'vʒ{G =Of1$c +endstream endobj 2825 0 obj<> endobj 2826 0 obj<> endobj 2827 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2828 0 obj<>stream +jODEe:^b# +a@BSu7[den y 2͇Bqz&`+QX^yX*7̽=#jfG옉HXz(;:).[RK qv<i'at]IE G\Xl8,u"޲v,nO @h{n啓Ҍ +S-1aZRɥ33.+ǁ=ypfFᔅ>Ʃa̓\&9f`/pl)RJodwv 'QR~ +췿g܈> endobj 2830 0 obj<> endobj 2831 0 obj<> endobj 2832 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2833 0 obj<>stream +zǼ1O]~βkre>_<"g9JM J6mg: [":#?>[`J=2D4͡mJt:VnjdX.]nƃlUdKv3PR!%k,NJw_Q_8rRe7b"Q",sq:.$Rv?u/zb\}^xVE S[ j[^kp3@y[x[뎌1GP\;x"AnLT\v-LpJiBlV,Tuo/ )s +4Lm[QtբFv&3XWCEBr-"dk( LdNOZzyY6)OyLrUcI٢"vو)9J_Rwlx\u|mu >gArX梴](&iȏ-rcR2A ׼a4ՠuDs9S..UIb@/ + ښXNLT WsUyjgV}"y56~JVMzW%9K4-*! +/W 8i{(%w V]@l{)`)y蚉 JYLv|h[>*:9&f[GpBm/h`,ěK[ݗX e'v~ +'LPdhʻӬ|l D՗.dXȮ%g@I|>y1My5"`aGU[`\RlV>zRxlYRKJF-VEg: Ya Z@j$tր ̩.iys=^GL +/5Ld1Z250 f"XǨ{;Z떛O*JS▙<Բ^ƸM!aX!t㍿ҫp + Ӭ'M)މc@o:OX*[krF͞)JjLtQt!]ޘq2ȕ Źd%S΂Qc]]+pPGΩfN~ +endstream endobj 2834 0 obj<> endobj 2835 0 obj<> endobj 2836 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2837 0 obj<>stream + N/@(\ 3=H(ܶFqzLB48KZ[YOMxHtQ&|1NX 5+wĮ8akƝ0اOaN5Q"iv "֛h U@WGV97$&Op{~,]#<@m<;/A"XbbxZ u_)JVH&s,mbFAy(vۥ,p~=5*$Y@xC_"rq#`8g_< 4iT&qC;y}j.wDYU =0gRp C%i/(nL^/lvKq<B8ٛK?."X~+Nc4j0&ә[[5^IƁgw +V:?`'MyaPt=ѭ,|37M ʎÕŻ4[ovCoj6a߹Ęf ):AZ6zF6+R126kVApiLǜgUi+1^>N-cAwCmͫ:vRgע[)Pj3;{ +@0\,s?q|Le14,g]#Yp 5,h;-u8\?CӣdfbV~CmQve_e(!.qNX[ayR!t@_1.oH3kA7CE&XRuΫ~l鱜'r?s;׻"Gk`?PvLTJrLo-;}㫢4t[݈kȅC+*3--tk-BT{C. {iZ6繱 +endstream endobj 2838 0 obj<> endobj 2839 0 obj<> endobj 2840 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2841 0 obj<>stream +UV&-23=^{U")jRM6}^ M̲JZ@T ޿:QDb3Oj6A3yBda(Ǟ˓aJ5~J+ڴ3/~#c5g@k>Z%Qvrg>Hml֍ʈ+&?őSa]ͦVc)uY)!_ҷ,&)L^oELWљfޮ!+*\P1uٔ!eC_Iv#KFG =R4*&)Q84yNyL͵|إex!ۼQ0[iOA|pk$Ajfm?_Hݼ=笖O$`]S[Axfxn#㛩+]0AgL #jNӗwɪO4K{&=ZX7oۓxYb_ZnopARUTo ?DOqUq$]y n͟l';`u(:pEtww7w{̷aIF]K?"<᡾?u/\Vx2V^_j̺E8V4:nt`Hb&CuJZ:(`&qΞvQEfv +endstream endobj 2842 0 obj<> endobj 2843 0 obj<> endobj 2844 0 obj<> endobj 2845 0 obj<> endobj 2846 0 obj<> endobj 2847 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2848 0 obj<>stream +;wJ381^1X*ڜI c[m f[Ӫ9]mrL0T)SlO&>/=e#krN>0Wl4]q'ՙ~" x Z;'LȗvIIP3c٪$mJve`HΟ2tfh Ft5܋.4-w/A w\3#{}r$KD)2ڕTN'3i51 )ؑX{9y=PDa-Y ssK+("Mla uHO%~?L>e׮Q^7){ɛ-^t?ɗE]3lmF.( ;<7 [t5thZƺk +-EbC `&L"Hr[ZNVL@ƞ)a<- +l2=CuڐTHIbwUa0Bi{ŎtoֶuA̚ N+,#)YԜ˗^NɓuF-wTz%>f<9 +/zeZ.`<ݶk.:*-#BX趩,W#aU_ ӻ<7Geĝq^N뾑}Ҿ9"0qwL\@(͙_xqRq^N1cj:_0|;qbE3qUD&9 ]J*!4Nu.*僗GB lZuQ-)BNr}m<4gME&dBq)xYXR6`7k`ybBN0 Sp5=!cE0gm9})W11KELiڍoăA6%ʊ`w7dUWi*MJOcUIy"ޒ:B*Q8eHt-Ȩ6-VU:6c=Nn2Ccx)zy& U4s|\WJNyL&֗Z332 lrz/|r}nv-,)rv)%|R3'7?,@k^[;vf}(<*Lc}vp/`HT+B8aoFOw5дN-+Ʈ241{X4&+Ǽ"0t?F\ؠe˞aHXXMc=$rhIhԮ# hBj %C\1 +endstream endobj 2849 0 obj<> endobj 2850 0 obj<> endobj 2851 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2852 0 obj<>stream +؞d+;t@@XGnGΎK8dT>i{5fIvHKL~:H4-k8&.9{N1[iY9ձ +-(-R~+=j"{i#0mۮÓGd,D}_V&ȯI e>0l::%|44GS76Mz"㩑9TryD6pLmt-fZ7m'BbJc`QKWΎ'P]vS~l:%OsaBR@E +W(ZNzW\:O +Dԏ2>2I:U4G9xn!qD aSwɰReeL^w0mz8pGVcڷ:Ud @o +.YoTUi9"<JDgz_{qZV5D#2^L3+l@d9~qzs9GK)+.dzj+^vfT\QT\l2[ 7#j "*̫}(:qF %-e'Q-Kh4@Rc*cCS=ZԮKo?͍q_"ԟD +7$E4oТhDcQEi_FIe)ɝ9i w!pnnپ`TbYEȮA;†/vϢg]Ɓƛzx#S\&dA :BP6"G̑n"gn`¾2qI PX*RKSŇe4T`ͿL v_ޡ`oDTL_ao <=S\EHhf=Rvi"[Kc`uP h7L($Z"fg;b|`-Bq^Zl&5K?~4`4f&WPcM-cǠGen*dK=,!D(ni⣠%7C菖s^bj8l$4̂]vo-8V c^2ayqcIƫ%gԚ`@Tu6[ +endstream endobj 2853 0 obj<> endobj 2854 0 obj<> endobj 2855 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2856 0 obj<>stream +edžqDV؊) 漄;:r%aeFs`Tjhb.CрOլƋ U螺I\ O>1:уԕ3Dž'TVHO$P#Ò-j 8O PCZZv10f5W U_3&|5 +2o/XJ[Vh۰P;aLGRMژ0ڞ^Vs.]ZiJXo<πQ†S 89[SjBt&B$ks#,)Ŧ xȒ1"*"sѹyp uoаl!Z@EL׵_Μ09}Bi:=oel}sn +hÜNQJD)r鸭ʺ𸺭朿n߇lbFVvumwzF\?(F\cs('@>Nv!kofS\_y ]cdxnGx@+țE\ԭ=I&}$ Wd_WUM^((V)N[f9J3%lQ t:5s5yke63pnl6Gg[*&ņgE!CYuI}>=DXf*;+3Ck R8|\`I9ܵyЇM?[g^35d{ vr9~k +E`HfBA#3  +檱F|Wz. SHד CFt|h-sMΐF\_Pp_Đkoh{͏Hn`3+RL2#rpLuAb5drs- >l4F=AAj9UN3aK ҿol[ފ 'Bw5 ,HpNrq\dBiG[ZB꡾d-nvZ/Am7 UlB>i R;wl74ުxJê`Hn8|KA(k.\Qe 򢝶q=ugӘ[}*VcW,6 7QETsJ̐p6vg +endstream endobj 2857 0 obj<> endobj 2858 0 obj<> endobj 2859 0 obj<> endobj 2860 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2861 0 obj<>stream +q߻,QG"$f8q1(mx ˝%Av=8_e PB#yHTohopƢBZq]:C)d +)o^ΊK/e]Xv?P\%[$z+4RY1)XU.=*U'K)]q*հS]oӡ$/Ps {QAnek*Ka8Y*Lʂ) t+TN.ii u'R]'< +6X›e:žDYA5$IzAQ䃍1\j%DL' S.X`&tUi a1$~+X`2wK1:0ބf_`AȦ`խtE!d22ǗԔrΥ釻cRAjڑ4!#3.S<4GLb&~>ԓㇽ$,nf?}8 HPqFN#v9 + ь&r3miR 1U55UfJ͒=ނҞ"h@hdO~3/ֺZ>#}^cぱM6er\T[xzDޗD@؝0}:9AnVxGk0rǓ~r,մ50hKTOiSl[g#lV-BHy"ϲT-۽!줠{F +Y"ރ +w):HR8 m#6vf5J'5_N_˒-҉?"&-IPԄbƛ5&WNu -j/37S RDLO.>)v)?%ܹG F墎̶tq~iӼ"szv I]8k<+PݙnJdVf_crfWVs]GW:[5wg24 +1KS(TtT 3EK.gJ,>n)k}!#pc37!rw&>2Mn jp@}()a&p' > endobj 2863 0 obj<> endobj 2864 0 obj<> endobj 2865 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2866 0 obj<>stream +YF[I}8g;͉PXLc4L(2Ԛ` ߤ" 9}V@K 1`* Cg5d8=(Et䔠Dkb#mre:hlM!$Q+/CD=h/Ury"k_p@C5 +UQ(ao&ti,c۝Wa[)Νf5w oq i y9 DXbݿn_Ys}\!|Ç1ca\Tl+2nc(zE/bI!4SՋV@ lpG q=E.Xg9gx=,i" +!cWzg5p)@C9DBӋ9tWP)ѽ/اTzw9b3$֑ͨO+ca $jTiz\BNT{q{ sD(i +棊1l98vj_.i-q57VarBg(n:wg. eYI#Uf)S_a=dwڛp%(4nKAL4mdb8=@:Y0V{,6o 'v@ҍ t*1b_Zf@fDY8 =Y~q}n>m_Fh?O#,WLK|-XCCQ 2`_-c<>!^j9Ep(M`urk`?F࿧*Dpq_H#Բm-]jW[bf8 > endobj 2868 0 obj<> endobj 2869 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2870 0 obj<>stream +x|Xx$)Gq8XMG"ŦwgQ.$%' _/^}^ Euk2bѢ$D?qJx4u~=%vuݓ(~|pҔ؃"ۢș{w߼ +T9P2UHcGi=`Ihd~?1 ICOv S~^ىg\uw! Vd|Rou2}7Č: cGj Ty04@OvF +Z>-L=qu캇_Ǔ^neJ6X6gg]{=XJWڷ{٢(*_'_e3}7 Aזm }Qc񉮮^]NLX>)&g5zUրҰx O̞1r9XcEEe{xױ0*3 X[|8ZM8Zk/vB82u$NjY(?r{%ZIsԓLߓ yEWw~kh$k /^M{,sz+/)BDKB[=|{R4ANN`@fމ'ĐɻOWBaxڤ. f)yۖDkvbw`s!z#"m鮡>~AdEvi EME.)Abȱ(? w;~4ڎXyn_k8Gc Ӥ=ubaj*S|lIQ#+ι.W@vj iWG2,~͓ ToU6IT3W!{`ǿ˙%Ys~LWɩ:b[8dqK=} ̙*Ce$gHxIG|uIZ+⊲ EL3`G4h0Y\μ\(g' Q)qv=6{ Nke$ ]3e>Y?%gH,P,eޫܧ +endstream endobj 2871 0 obj<> endobj 2872 0 obj<> endobj 2873 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2874 0 obj<>stream +/bXswۂZ,#(2!:? W^OyS3x1I[6X<u"+1Xa)QAF}Ze +( +}--rPvPMqso^[9ܷT*H7Yc~ƼVo߹D8ExOb:’+&p(Z+Cp0AKk+ȦOKb1shCe5sÿYgJP 8%q,+Eׄ=XWSϊI <5Ǟ%-u1{N ʡkR: ڮn$L m@cb~0U#_x^nC2W/l,ҪEIR԰R[Pާȿz9؈~&E$EJ@w/L=1(t}t" c+qN㉄ӫ3ÛNBݕ.7lâYLe$VCΈWw{w#vZ߁F-QVv7ƒP]3Ꞣtʷ\QtWAxafj&Qhhu^Q5[QlFH+t\e+d~-) 8D>uY׺+\ ?SM +endstream endobj 2875 0 obj<> endobj 2876 0 obj<> endobj 2877 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2878 0 obj<>stream +>$PyJ[|yc}Ox< >ڞčHi g1_)+Gk1o+5u|\KO;$o ~5 #(fyOf`2V&6\ꣵÀ[~6׻SC*<!OAK7{$;|h..q3~ ̳e UCMt7/$*g +fmOg;+m)k5 =!@Ku~ ʹM3>?(5D0)=:܄ -ݢm 4]t{$A&S&v[:E(_7 +X+ԁ[F+|Y>_UX}Y=VV@t$/$X1ؑS/*/>$dx LJ$x&F0Z2৳ÆrM6>۪,yZ1_ (a`. Ӗ1q +endstream endobj 2879 0 obj<> endobj 2880 0 obj<> endobj 2881 0 obj<> endobj 2882 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2883 0 obj<>stream +X )uq镔 dw4g!Mސb*8᭦5&Cƿ?ms n [MYsU) 1*N+4T}-}uka@GӋZAWKI8ు|:ulf;d!x^_GrmG#eZC QǃD-Z$Z`yp!r}=ek_x>,`8{v3:i_QN3Z7sa5(6A~x䣨lXl=0!a'}1 ¹Հj!8~yo,#3KrP2Zeɨ&w&J( +H4zs D*}p9r3DHDqT[z vei'"2Vx[Rlq`02AeJNʇ;+SR۵^lSV!٥0F& +kFr]j0A#kQ`k%+H|eLg{? +*A=,n:[/_PeC򁘬)ӉӋB +۵rqHXN$/C"Jy%]UU~:?,-ѝi5 +y!h+RZM2f̕4"[!v*Ԝ;Bn8w\N'4~ō)57E3Ug⋲3&;ŞP} `H{u,ܖϚkNic nd]1vozZClj (^Z16sty){Y:h@'7]>%s[,>h}E!pK?!w+MpHaÉ`?j}}Uۮ]*'Fw1jtldݶyLh2qxa?;#1Pyz;6KInnȿ!_ +W:o'AX}M5} +endstream endobj 2884 0 obj<> endobj 2885 0 obj<> endobj 2886 0 obj<> endobj 2887 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2888 0 obj<>stream +!6%+?+AZoaqz P w?6qd4d fNDݬ&)7ik!fC<2*:jwaY&SlKP%]S\čkz?1іի.wOD ++`ƲDZGGT`@Nw "^m҃T8/;[!2ۯ(:ʲaO%!W7B}}ۀ`~\Jh.m :^OJԻE~J5NTLwuӓ ?U9ܫ<& ^Tg6;W^z_Å~L(͟lʾЍZ `"&g9hSZ;&9ݤt?]jd +"g{%Ci1vQ΃M8J4:L: c'R㇟tEg&*HUFb1+%ߗ2 7H݊pӹZI/n Js7SviPnfd\*MHi2u`o+3''{Hh@/ee9@" e}m`xrְ#+BDeЙ[Y +$L#o!k? +< f ݩ, ʅ Rof}GPqTSU .CY^6~*"nu'UBu&< f߲ܛ02czDpoΌ +9R9ycJL;hᅪ\Q {:U:faL1◔K5`{e֐qî\T|:Ly: yLy +s@DC 2d![WX&Ԇ2Yܘ;om ,>i8 ;,Y,tUm(>(OJ9lVc_*qM=qJǽ/l*Lid;sӓoH+Ǜ9y1!6SFdx> endobj 2890 0 obj<> endobj 2891 0 obj<> endobj 2892 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2893 0 obj<>stream +rEV%Y{5eLV<aւΧiTq@'*|?4Ҁ|77E47{)\ hSWG]?Ԅ#IUP=-FUV(yC85|ZXŸڙ(dV)2f-vܝx]gPt E»-ꦶ.B8DGJEk?hEzT|GMt> X:0$W񍣆0NEs@br%캴d8CUpr$ʼn3%},gu_/,)\XY(o˅ayHid1yN9V 1Bcł<@Um|M"^oωݬQI!țjF [GmvÎCz~ pęvYJTD}9PflH^Nqb| 3J'.Ic$CAi[^A"=yg1<<\S_݁Q.'y]'@}:@a$߉'/s«.shoHWW"P.)w|q L2`D1Zr ֺͣ0)#4h+1)jA>9غ;9\"E +endstream endobj 2894 0 obj<> endobj 2895 0 obj<> endobj 2896 0 obj<> endobj 2897 0 obj<> endobj 2898 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2899 0 obj<>stream +%p:y!]ڲ #f}藺owdS9CLS?Be +c;PGvX mKx~sW W;ϩ g M:H!*)Uz 40/q֛x#@Q"|dH8AX>qaQ7ǘ~{0)mœ+m)|xyAt-y6AhzĔSos vkfj(VN2tQH/"$BGίXytԫ[3% tVT`*9 fXj:J IjoU:lL31Xe? QQ^}!ZK޸$svQlQ ,+ug +endstream endobj 2900 0 obj<> endobj 2901 0 obj<> endobj 2902 0 obj<> endobj 2903 0 obj<> endobj 2904 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2905 0 obj<>stream +*Di*I6zioZx9jϏF"'3-=~h>[jZ`FKn}QZ%ϓMf!̐a6$j@)n~`'xəB }?fɗ0M&VİmC $J0L%ڟg۠JgH])xb У%]ʸ|8xG?$-\/c 9Gs@m_VU0u.҂lj)[=Q+ȍ> +)BT"?(1"9wGL\TLcU!-OMzmm< B{ Or;yn^myd[ N9ֻP4k{WDeR2L&b^_mhx% ?K]/z>?vL+t(sꏃuPoԘ8Dw?TRԴ?SɣEw \T:.MhIa$Ӏ)u!"4m0:@vMwxYe#9i^|G,q-HCmVzܷ1* [Q/қMvwhRYb +JEsEЦ@j&]bg6)VLڙ2yҀ΋s;[ޟ[Ǐ'`(:J?ÌO(U|؛LkabAqV,AYMśtrҌQ)ϋdG-Y>cUg +<({_Y W|tˆ$ YIO׉?l7 ³W50Ox);5/L4F^" ۆ ߔK^T> endobj 2907 0 obj<> endobj 2908 0 obj<> endobj 2909 0 obj<> endobj 2910 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2911 0 obj<>stream +TzQg',a?1d}i"tzEe<ҡ >yς>+\Sqo>8TEn䎆j}nRϱ]Š˜?e\צTuxo׋'fZ#9||e#еe_1S[B_ǫj>4I+ed`g:TŹaPITzc$ +3Dܺi`|P7!JnL"#uo~aK=W<%݌(qMHT +r'lexHO6`kWԑ5߿ ˣ_>!L~1oZ.VXBUeƾ J񔦜q,]{Hkszd[&ZP+􋶾r raU;\L]sKx2Ftp> endobj 2913 0 obj<> endobj 2914 0 obj<> endobj 2915 0 obj<> endobj 2916 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2917 0 obj<>stream +(sqJժ)rR)ڧG-I1D;'#rk0YȜvt|J1:֬mS)1?& %M2X0,"aHzݔ:AjDLmncMu‡d?,5ČuDQ,+҅NnڳGp 'ϥÂ4M3M NS^Ҹ4[QNHwXQm jg>RًRUBQ}TKn)TCJ%*=(R BG*يAmVG|' [ DYfhʺ6iH-SrzA_'" oΩna|^$ 緗$t{BSkY꺜/➪|VVl([mL_K- +͕ҟ"bΦrVޡx}> `%IYV<{Ob+xvl 2̫٩>gS^O?"n&XgxJo3͞TG*8`IJx:Y:FE'ifzN˹e1U2E ݻ6PJȆvc{7*p*uqE5vl^;@ӛlbE=YKqXM^NK=R?u!F% Cg[xM"C 3;--0L+9`Pn + 1w+/O#wJ&}kQ ˺G`R%vĶDNg?Z$;>LNy[=L(>,;|zTȵjװ>pCh}S;=,[b>; (,còhQ8얶j!26/t.`=jg3&\*ҩSN {hƇuAK=]Yv6^z$dDF"S·sK<_a-jqgr9N}}E!eJnD<գe s +endstream endobj 2918 0 obj<> endobj 2919 0 obj<> endobj 2920 0 obj<> endobj 2921 0 obj<> endobj 2922 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2923 0 obj<>stream +lCC2p(vap>Auh^B-PSag n=yGmiA ZoB ''كѽO[YOaPw3GR+T7r,a^/p33y\7I/Ӻ4m /0q/s2iꣶa/*]8qF+>ܘ#0LѽdpTm[k9Km>>,U M:жx ]fڶ閾t0qHHB +sZFxX!MBDAMS8I^߸ſdBx8en+a'4Ue(2 +ݶ~>3sag(CbC2WLo (COHɀ@1y_ Hevt?邨X2y6*/AێI-wLI|tზ>L+8nKN ~>N 1r)LTDл^vL5gkA`†~ưp1w7 a;M߰I(U[M>i3v.e|3 <pe^F(E }KH <(Nmy0ɢ@B^_b [@uNzWȮ".=FbW1d @IjuO4/%jI? Chۺ/F +ɘ'#㸛_3senϧH]I;> endobj 2925 0 obj<> endobj 2926 0 obj<> endobj 2927 0 obj<> endobj 2928 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2929 0 obj<>stream +͠\ȑnͼ/v@'p'.Grl>+2 #ɿu|91~-\d9NWb.EbE'Af_'L7SJ +L}^'\tkUJ iqV`ܲ2apHpbS1#2еvo=.[/gpջ& '_7z,l=dFYoNX_ouXaH.pzI6?]I ͡3:y9W;q?74dXf1TfrlޗEg+Jp6 +C-/徹F'wSD'7< TAE-ӄCI_xϿ,Xc^1$LN簍Jl4cwdz(Ǯ>9Ӳe^1a&Aʶ܃=`nOr>2!*Z~@JoZyTrIr頡Hӱwu?Oa`;6CX+S :ZIy,dgd`n@mƆCwE|)RDpu{H(ӧ{`pHQ[FMgk +endstream endobj 2930 0 obj<> endobj 2931 0 obj<> endobj 2932 0 obj<> endobj 2933 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2934 0 obj<>stream +G+V_ СAC Bg|CZpU#%Ԉ'_Eͱ[p+II8M軸"ɮ Qb֔^,dG$57Rv2QgQ||1F.e? ڞ<΂jF:':4A*Z:ٹN[&bv}O&w)F@Fڙ3mujֶ]ĆՀ {{nFѐަDjkUka4NA?s/$ƓF= FTC7y#>Q{hAA+$UXPJVt!!IT9|O T`EgAR)kPL-9!|DPGnFV0'SyÙGD`kP/pl&>EȂQBI' o{mڻRLF=AxRabÚm +hq$eIg>y +!Jt30`6Iy,.͹DɌ +4/џi{4oˉ$rlv^$yH <_Sa* +3Qf=eȄA)?&̀\Z?J(*Z{[ ՄRƎ:xKa3r=n8忆u;nPĆ0ƑyX2ڃoBi%/> endobj 2936 0 obj<> endobj 2937 0 obj<> endobj 2938 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2939 0 obj<>stream +W ^a|_oG+h{J-f1Sߎ0IP4z#r\/ӳbs޼{:/ːp]k*?Ԕ_=p{Jd6Pdq =R6DCbz~RCisꅕ}KsR3ZHv +L6(xHL~S4h5]PWڰZ<4oWvNjdytI{Ű#[ +_zZ.pl5,ABwuI<7wPԆ- +֊|2 c$$E(WMkIՃk$8uY.=p!@5ز> +CQP͵Ie ڤ2xƼ,(g]Rθ5S jm~8q4 \OV[vgҪJeJcUI9:!\qD=xxj60|W@Q*n'5QT}XF<?(䟵ٱgnHNf)6bmBjPnj^V,"QR  듁c8uKnaf&t^[$0 䥅BK05mtV79='C{[X%hG,¼98݌n]>HmY( d ˖`k՛RbYnùFOÞ)_0쎇@+pt,(iO'neh}H* +qZ:2O9?wkSҢ"ǂXMdQ=Eq)6;%0cc/}ϓ@.=MD1'78NNfOՉk0#qi&Q^Iȑ[!}o+x&yOþ~_KnZmh'qAxK ylCCXDSB,? 6U3X%ioi’Nd՝OgW>4}I%imeẔ]oI1}~"Dt2pG4% Q(?j C*{9{g52ʓNpn Tk[g~Bjzz  @PKv!؎`?aUn7Sh?؟ SMAm`{]lop0p8)B]٣0_ '6j͈"+ zauX!1pu㢺 zg&vp՝vT;Z=|G,ڝٔPhgy!-"?5\._#EgfIpnMAX@-4%=_$eL+|mQ]f }6s\;+z ߳!Kjt*~4NX +YWC&H`H=G? +endstream endobj 2940 0 obj<> endobj 2941 0 obj<> endobj 2942 0 obj<> endobj 2943 0 obj<> endobj 2944 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2945 0 obj<>stream +Je8@N޶P"ݔ9OxvEx$/0(|D)ϲ,jՄRz&.ngyr|,`82\2|LBٌ%3m)'Wx!wl< +(^Iy$sC]0=L"@3T~6EGP,$fle*X y%4 2F5$Y<Pmp4h亻[52 {$ԈKBzbP+9ӢkQ_ZhBa l mGav4{qOJnl1U7h#i^.nwa K0 pRw{Ȅc i?ʕZyi@جXnZN0`$+;o-N/ؽ;[藈_A<_TpȘ}8TepԤO)ѩ5Hpu6ROi i  +=fJl}S2.7S/` )x'6NQzW-EEu+Qʧ[)7;{izE,# (J 6џaVz`6A\q% DA@@yBXss[6ӕbYO79XAkŌ$;໩uqd(H84c5F WFI^ 7X.rVWH-=WAԗ)T1Y+.;VJ +}ξQ )3BT} )U1c΃EG͙v4!RWb4!Q=S3ӡ\ӈ*KCzW-auK0PG@!< eoNMmfhYŦU ZCv0Wàr4?r#dGGOP]^&;O^+Hc2ͱn(ٶPa(W@cW>MƳgIK)p?ËGȰzacPo,Sxh) דM1tk +endstream endobj 2946 0 obj<> endobj 2947 0 obj<> endobj 2948 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2949 0 obj<>stream +yijRi)qEUMF߇Iu%fmc#!8^O1N=Sj'%&RW44 R-@h!!?UlRcc5r.7V j*:aG?`]< w}KÒ]p$!QDS)TGߗ/,tjNn¡ +8|Ztgd&\h`>Z{ xgUKGzcǵNWUFRejH9 +kfp.D b1j^Zal2GŢ_#Ы;h㺺Ozԯc3~H[>6>Lk؝"#bx@8Fogxd}"AmښBluü +qlA_T1ZsVKTf9uߖ,/`V(?) .հd+.[f>d,{ӿB}A{}$*1)*tK1ˆcP3I=1$ȁ1U: +Xyͩ-$u%2-J$lh}8b J@„HQ& AwƷ+ "¶Di__jc@nbgѸ۬x=SWb: +ʑnd }M@oIP50 s~]{#]eST?jYz%b|&:qX|b䤦ݑ͚.kI?%r:&ĀF*,$e-Mv,P^pCPߓ+ R/bTv>wp +endstream endobj 2950 0 obj<> endobj 2951 0 obj<> endobj 2952 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2953 0 obj<>stream +ۏ@>hoF4Wx2zd) Wspx\w[#ռJ|zTa ۣ{d%1Cq@Pa'(ڂ=`:^J%UK8ơ:Ms[,gMc(/Cv`)鎰fl4` ZI#<' V^|IQV=>SI :/FV"?oIΑ<]ŕh贻c&Xͨ:AՎ<3דq Dr%.䤌Jzʦn6~ nv)na5%;dnF8jӂU_$EݨTY+"!oE`fgK< ˜/.fRq:ovtI_A72#Zh\vب~ZQ e꣠9]ub8:%#]Kx$:{o~y`FDzX0I$*DF:SKeEP`@KGҲJΥGd @KnsAՆqPu0h3}FY_,.v;L ) -Rz>X> endobj 2955 0 obj<> endobj 2956 0 obj<> endobj 2957 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2958 0 obj<>stream +ƻ·DCc㻆49ļ'5x+`DuC+ +ehFMv(+5ڙ_;3fe͎ ~g6Z2̠KzK"mn~}ϜX.vŰ3at`q`,vsZrXLF* +ɯ ݙ4h4zlxb"لWTYԃ%CW:0S[/VSުM:M[5r1nQ+sA@W]ĨrΦQ%F'Ml8\|pwaCF+󿊌{l_RAzbSUW\yr}AImo)Ԧ͸y(~D }>Ef>k5^=z #aĞWyARdہTY_.ZHOxXAPq +U$'U~憼ܺuvXA[8҉-"bC-~VlƃMӐ6 v%jT2˄*B a/UXEU VǼU M:/ޔG0f('Ak I 4H2M]U%Ķ;)n[kx{CbOGy˷9:>o^#jKIhyiϫ ~/KRK^ѶؔX"g4ݐx6'tUϥ-p*g`,>&>D hX͢"kgxp~ t[ Vnju{ طBS2q/wa Bbѱ +PF\.DBjNL +9z!::v"|+ӷFdib +endstream endobj 2959 0 obj<> endobj 2960 0 obj<> endobj 2961 0 obj<> endobj 2962 0 obj<> endobj 2963 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2964 0 obj<>stream +e6xvN<Ω'_vF54$l]0@kFTsꃏ\In8V.@>?TTQEKj%>§C&KKZs,QUU}ćPJf |?N'(+`' 1p2?tKD| YǗ~/7*)߃Ik"[|=pu> s-="{"39 [8+X?yzb0[[<8XuzhiYk"xo۳c(:Gwm#y!R$.9)8&]Hftx X n14XXBk-MJƍzI-X`o@(l ~%tzu is9(C|"g:Ф+ .K$-ΘFTr# x%>Knaޥ*3-]Mx4tj4f54%,hXx9Q/5-Ԝ\ʊ)- yVϴcdv9AxƞV,3KyE0!1TGDP=UGkS`t]MN˫5(یr_Un'yKYj>vwD8uO*0슌\\ QKCQ4̦3!9í^= |S]%f;$q`0[4S9/iT#ר:𫘼vxI3q7BD,[ Ww +~ +Ѣ2n2Ć:KFN +̎_W>gRT]@r+ICJ]NXtm="E3lY~  }ѽ +FiGkB)sd3TT^-X"cZE}ڜ9=ei$wp$cra2q47xK̽"kKhU~^y'ӡSo@ޭS;MQxp#MgEt % +Ua[ Yl[~ CZ8@)\i}{$2E DG[=`r`3sdjWa.kM`Y&s=k%G;G(> endobj 2966 0 obj<> endobj 2967 0 obj<> endobj 2968 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2969 0 obj<>stream +m6S2M +s [+dZƳ>o"R0eWbWWaLl#Gׁ0F*lxP5M y- +I$»lmDžN|y'OV'6P? +\qY4r&L.EF\サ [⳪,RwYҲ-q~hUMMbP$&R"Vz|\mT'NF[Ot tG#3 ٻ *"$e%2n e)R]N GntI9E1·&tJNa"w4M{ǩo<_xH|NZbQ+@^0KКWmrLnYU&sPSG35EKcU@?X`rldEDj{>m鍻3g"E7# Gs #I5Hy&1I6崣U,NSY ܻ0` /9`U?>6@R*Iqig[YgVs=uu -ZV]DYd庑 款z[*- gR$Ef ߢL4;`h`a DF&tRY*p)Y 򆉓߅I7f X&sE2\'w\^|]"H~> endobj 2971 0 obj<> endobj 2972 0 obj<> endobj 2973 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2974 0 obj<>stream +ޙC2Y7@p1)0E;߱:aYzX.!Cp;O%k_MIؿibj@Ġ1ӣxXIB9NoZ)(,CͱKSEB<q +RG`՚SXJ|#yYAD# jW-ӥ/z~4_" Kaj{yueP܁F=)t㝼d8lg^@@2OR82DU%G2%ʬ"!"аrKtcM7Xl ] wˢEp^j 1042KpE`?1ԴP}gПs<^MyE%}Kة5팹Ds}/eC Dv&}RGWg< Bc%ex%~H}瀥D3G֑_'JƔ1w@岂.~On, ^o]ji<7EĻeb`ͩPs.5+յu}kb*ٻڶG:0nl=oWb˾ah\Lk[m}4aڠNʩ5KiԢ]X _w9,l,E좗(8 q{ X_F + *Mg6;Kc_j t4nZǐWMvGd +endstream endobj 2975 0 obj<> endobj 2976 0 obj<> endobj 2977 0 obj<> endobj 2978 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2979 0 obj<>stream +.^% -pkd@*IK/;IV*y$# jL"(w[(Hv4-R#swrLP;&8}օr3 )A@6WA73=^2`G駲o* P#PUOsU q56]KT%$Y)_ 5A9@-h~ UqO*~bq`&C%YRˈk±멂DTGbdU'e}BR F[Z~f-a:)ۋġЕ45ԯ6m(4Za9⼜8y%cĞM H?sOS9`J}6 Qz_%b<^}Y=qCB9E%f) آ\:F+I`v@ѡ,܁lkÛW$M(cԿ T՜z1#9ȁ?P1L6QIR3d" +Λ7,V\&nrWտ1ۡh?wJQ ET-_#ǾkQ+ܖr}k``J)e-¨0lߛddᤀ`>]~ItC~`IqmBMO[ U͖ +ʴ].9%[}lQۮuXU|bR -9.cĆ4ވZՆ`L@4Z6NA[ +Aߑ|CkU&+ݮ\6C+R'22+ǘ̌+J,,cx +\hIXmL}:YDbw8DӰU Z%`&:LH=揤z@ۯ ZS0A7WR#i:ЍT5yGh9Z'lMRTK\Ӊ@$&⽍款3@ WɁ4NԔeޝWZTg +endstream endobj 2980 0 obj<> endobj 2981 0 obj<> endobj 2982 0 obj<> endobj 2983 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2984 0 obj<>stream +is,f4[WI3@c";M^ +uNO"2VU,u`ۤ:Us +\}Zh +Cq9^S(yB./USCNyTTH.ઽ_#5`sx]P;/Q[%jI3lp< rZK#CO]wd2a̡9=тe"tI\ ^ţH(nRǵֿ娛3)_yhi(.Z#dpx > endobj 2986 0 obj<> endobj 2987 0 obj<> endobj 2988 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2989 0 obj<>stream +Rs$[me*)h3G@~ZG>in)>z:\4\2Vŀ3~NVXç:bY݋ :IzVy)Лc*k| +Vb7'|6s5 IQܝg·X _T +f,#.Y/Vma"x\$P@nBE):@ZsOXS}H!ȱ?+8"- +G3Ftc`ԑƂ R'0D{?nN}(mL2ӠU~*@Bc0BuzWlwrޘU>s`9>uٵ)1!dO'~/::^ezbQQa|)=cPwB,\T QօЏInB0'/W"˜V\; [D3_yD⦅7I&F=G=h( i%khRtx߇1DNI>#|Se΋@Sgt;51jeTZ ~l^еF:KsTȳ _Al՝ g.Pl,N½`!_Ty*\ BzzHngouc땏;#Ѵ9QaݭdbׄN҇gSK*i+["&HF.2rrE+Ϩ1kJ=5|uiؕ8(ZWf>h5bGBSجE:](5-5_?=!Ѝ>ΰVv;SMDs> endobj 2991 0 obj<> endobj 2992 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2993 0 obj<>stream +Y&v mg MZCn9и*@x04Hje&jaٰؔU|+ g&?t@uJrPglkWL Ǐ:8 +%ߪPZY]!f +h|I_߲u=ǛpmW thh9 $ڟN| c@ݢmOBPoQ!guEk+`JT(5Àp0YXo%Lw}93㡋-[t1:xQuQƀ85E)U$yt6Ũ~?oB*=)7|l +2fo"3&~me0KYW7&=286f9㸓YASiY돠k!º}?y&l +-5xiyì[@UeG(p0As->a1u}=93䓌YCO2!^ ]Mq> endobj 2995 0 obj<> endobj 2996 0 obj<> endobj 2997 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2998 0 obj<>stream +]W{Tji#p`=cTrVZ_FX +Rm byLd5qm׺Q?;s≃0J@ÏeXt*x R ؂@^? y~2u=PIqթ#^=E}>(}qAR) : wT) zo_]r7c=.,(\_om% x ֲ+!!Š<6ӽtMs $Q-FXyL굴 tY,}F['OF#kVVw\|ym#Ti[$pޭ"se7HVLsB3<9Rmx>ഈN'58ۺq!S[\_BaN(l l-69`01Btuz54vTClDSNLhTehW, e + '~EQՂ+_%)8F7bT{{ћ Got c!vfS#)^Mebksz GiFt*A>H飖BŮ1"iVY +endstream endobj 2999 0 obj<> endobj 3000 0 obj<> endobj 3001 0 obj<> endobj 3002 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3003 0 obj<>stream +I?.݈3ܫ"RуW iIMRX?":+\EcUv4pu ϻ̙^.F| +聦h1;NG`lǑ&Oy1g}``gf2׷qPbIk! o!aů2\Y.ȉHiEz=ɲ|ɬ$؁Ȗ]d~?dI,ţ97;F|Zs1<]Uu*wF`vx8Dz{/0CωJh|CAMkW/#ikRy8YW"]lAc'z +Iy) H9h\"M)"q\}(72+)ݳ:+吲5֔Tp DzM{|]: +p-g$uej#lG)_XQ6Ŀ.cvwf@HPbejA7Л +IY +endstream endobj 3004 0 obj<> endobj 3005 0 obj<> endobj 3006 0 obj<> endobj 3007 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3008 0 obj<>stream +,c`|l;鶁7%>F<]]ZBAogJwDUXgS"* i ?%,)V8 +PӆA>0} Tq1yzߑj"՚=G;Y=߲wh"Բ8~[[Oc9*~NMf*Gs@tu)Ժq)-8^A*#/b׺@nmz&)( ]ꫂIܯ5*]1ܻ(I. imb")lg^5h&IkU" r-2iLЯ1*(۱fJkf)َWZjʟ>snAg,嚈v7HC ŨYםܻ+ΰa2Nl")ƊաԢtD,!;JLughܻ;JV5cRt:R8[KaA3}F lM6{,T +5mB"ݙs!@/j}fCKWt < lLUxmJJN4?Mr`װ㌃#:Tu<<8},}0ʬ^?\LYW4TGYJpoGģ"Pi')>V}Eѡu#fA*ԬrdMD4 +t~co5y:\I+9v#E(@0[H_D]0ЂG)+%b{fOD>E99!a~w-bf gjjRH~&ۗkXN? +endstream endobj 3009 0 obj<> endobj 3010 0 obj<> endobj 3011 0 obj<> endobj 3012 0 obj<> endobj 3013 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3014 0 obj<>stream +pT.H\qSEM s +KTٟV=T$y.ϳoD^[ u<H:G=JU~˴3Q3.vn,fHDgi>SG~~{ppږf2Z9屴+ +apٜ%`<~X΁k7"kH8eˎJ0QR!x8́[>]dWkNМ@Zx\梶EDAȎHAˀ5R 7gSeA}%6SD96{ +[@bi= dq?96)hL+ڝpm)ާ4y堃DXKHm)g?%%heRGmޝJzv{%=a$P"@!{ h +ct͹\tWM%KZZx47K?Jr*g蹎re +v4<8(K jPvU\v /t (~B̋114,cAg`W12/KL_Yu%`@l +K$:.vɘ(w&sx}\HJV~ e2aAm==?P%c"SG}=zv=4)S +endstream endobj 3015 0 obj<> endobj 3016 0 obj<> endobj 3017 0 obj<> endobj 3018 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3019 0 obj<>stream +, &:̂uqAf>݇pm岏X5 dpZ;:}m/_ſ6g-j|ja^7&kF)ynJ]6X2>^Tr:Z9̍C6b BpBx;T&@49{xφOLxKqoIXs>S  Mf;ZbK$zG4[oAls93z`TvN`<=b b(6yv9u6Mx]EFxpȌluǻpNg2 { + +Ğ- )EnT\`Xkp7\GUS쾗>AaQ>?ն= 25"`"gm8[4GFYD7pa`ZA $NL_ar=X1gk2+i,6†T16 + ^ݘRpBdPԖRƿ8t}Xk{u2yĆA}Y/|݂Iq$zt +clL vxOw|l{MB?Bwsd-%dF -vl״ + 9k? =3Rݾ8,sҼf;* v6u^P <,om5U3ܩ:A@bvQ]Úgq9Xw=P+8`6HႢ[/R9>Sxr5W]:rii/=>[uA(׌.Ɨtgi +T+Q,n0 pNrW/v\"<7O0)L_@ 5]-' *j:X.E?TN"]cWbj{ 9Okf759x.USoAapj ֪n{u1?,, ߁B7Tzׂ`#7wL1 +endstream endobj 3020 0 obj<> endobj 3021 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3022 0 obj<>stream +x2YFGO xu"I7 exTG"1D |zs{ mXoSl5u6> endobj 3024 0 obj<> endobj 3025 0 obj<> endobj 3026 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3027 0 obj<>stream +ߚK:{{a]=Y|2gM^YIiaf ?OHoųV,_- Xi}B:ʉ>ԝB|#EtN%sH=p4Y11\:bR؂E=[Ad:bS?_Gh,;n^Mbܜ^JI(ԑdq٧֎8e\(G.|Dp33L@!*z7]qKr$U$KAbTK_1Ԛ +ľ$,$Q$̤`*ʤ> AHdb-V-BlY1T6uήSj )Ekuz4za` 럳bf"z}M;q핇=:ᬧ}EkޒASG7񁱲d%? ?~tfz +1Q<#0Ja oŐV;s}Qo&s;W>N\BP_r>[]WI?Nt80"yQ,YڇOGY@_ʋU( Ig@z6?Ci<(ȕVj}x=('#ɇyc& VĜUk;7+ݖ7SHKLIClL55{a0oUHm]>?Opp1SN㝈R#6FFJs$N_1^ZJ4cV38Qa0]/>Mdގ^۔.U_Md0yԥו'w|.-NJ2$_?-y[lM}.JgB|4 + v ʢAm@m g)P:iDpuƾ#9ζ*09,J{gzŀIR^*bxp65+2{}zWa*H0 jv"|enPMvrɖ@5Hp!1*ߦ* ;Nڿeiax1 PdS= Dk50޻_Eгg$"bԮ "E䧪AJ{•ZT~U(2f}o* JL򂟩0x%ɢ'H@ijD[ZN0ZMV`SbR_&u]/<J_(3rؑA,o +endstream endobj 3028 0 obj<> endobj 3029 0 obj<> endobj 3030 0 obj<> endobj 3031 0 obj<> endobj 3032 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3033 0 obj<>stream +-C\Z=,AZbHxj<`EqZ^4]*Gna lM@GD)! Bs˩}mwh-);0m1yq]; 08` +2hOͮ2 A*-Q@ˇ\ 3n;S,'F\ DF]:~#$h4񯳡98OcA +2$n\j;_|حcZ6TsR +/:,7d==w'Z#<3{&]Ե+mnrW2C3`?׵-T!nMqZ܂ӊ[p/zB"nc⁻Yզ;%Z2>˸-FO't_iw +RY!7PG>=AdG6K䤢e3+[PQNBdR/$zCߤyrlut][:)S|0%SYg)2A촠iWyoh&3sg)5|$j!e]b ]fjJN+Ik<#y>AQ[暫f;jX{vWVGfֶ(nX}DXҒLPIfƌ!eQoֱM]mxnZ!5&h?3EC(),nHAdJ_`ܮas[Ld={DeS 0aCj1)^ E";Zo*tLGc[nϪ*r,Wx;Q،C ~kю҉` QRN2RyY'yYJ̀-&y*+_mZp;WL1uXಖijj)sI!ZG1iicT_y.&݄\_8/yO)—2OdH!i0mX0 >t$9GCn,Ӝk߳(,5TAJAʢV+h҈yJaϒjmf%7L׾|$᧍x%bNa^H΄(Y)$ZU+{J +ˆ|Hu[䍶aBY="8~cT B +m{[wx&, +endstream endobj 3034 0 obj<> endobj 3035 0 obj<> endobj 3036 0 obj<> endobj 3037 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3038 0 obj<>stream +~(mީ䢔& V݋0\&Y-鿉7~+L /WH\ҌA +ĘBww3-uag,<1fKHjwOՏh٧6=bG~mzĝ&ܺLt]usTh& m)K.h'BP9 +u$TeAμӣڌ[Lbdu(JZ_pƸDW$&aNKݢgc!R~$ۅZ10C(l41ىlMgv-?=pV +a'AH=c48_cռ=Na1Є{}YJ8L,\suٓ"AHjqp5h@¸'"ņK/6T +GpP'ˤoKhN@r*LD85PM N>9n'H{,C:IXz]TaMΧ8>OV!DYXπ!sKDn44 ^ck"H<NxmB^e>QRSuom4@p`a-\&G`?޸48zN<[pj(9 +R)}Zm2@j"6oـgn6+s_O`!> lrT&&}ADu,5m +MYpvN_ +endstream endobj 3039 0 obj<> endobj 3040 0 obj<> endobj 3041 0 obj<> endobj 3042 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3043 0 obj<>stream +8\P85FvJYȢBH JD-v8/71ܟ7s2h,:DG>Om!FGwr'UEM"Ɉ,YpKfkbL7y{A]uP%m4+I\C@ݷ.QJz۝Ĕ}Ed,c ߬I !LyKYEb*S WһQ˿26#{T^+Wr,c"6u"rH}b\љgQ*ca0z $5PvïV21ƅ?\Z„RKm{Ұat`6V(L63*]Ac_'w̐o-D4q!cΰqT۩*%{vvdQX|?/!zn1\8? xh5 dւ)l?6 +ɭy:R%;T=uh3NgwJOMQ`:ij=Y$Iב C!rmB&gD>>fٷG0W}򄊭d^zkjԌJePb. +΢},K#UD}s 9aԱ-D Q{RE-aٟE!01r{yd m|iF~ ˕Y;PϟJ|(0-Btd(FxԳh0@?4VÜx>iĒ.6-TN)̐n+Jb)!JQZ*yU'{&u1fr~GwFE *l yQKf!\V%ЭŋM%SN[eBς \[z;K!*qwJ,-Pa56#s0@giNܱwN02U>3V =/YGѬt +R+_K݇{VbGoVm qO,uzBVhdJD < {-'Q~0~{n]Āw/˥nxr1jw e{ :Z{3~x_%` +endstream endobj 3044 0 obj<> endobj 3045 0 obj<> endobj 3046 0 obj<> endobj 3047 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3048 0 obj<>stream +HV@e "]1}hQ!9C~ULPwj0RfMbŖ"++/b7)#c E/1;ޛ3uQBb3Y)B /+9KF̆1}oXAx3 ::{% FnjnzyA͹#ç!\"XwR0i횭olٵ: sI*P"㇂P'hC?$H/6elhAOjm\46q02c +=9 ~c@6:bxSm:j2T[ha_)G![>;$MHL}g~պhd ! g @c ԃ?]tK$圀`S§TMv1Dë́<c27/>/YJ3Y)k`^x1Q 8m 9røtT] P+gP%*|> endobj 3050 0 obj<> endobj 3051 0 obj<> endobj 3052 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3053 0 obj<>stream +m|hQ +uCXK|w^Em--JNuqLrvkRɫ,F3em5h".W^ *S.3 ]יeyŢvv$c^= hS3ٴMܰy@љ&֠ *# 7׀L0>07 ,ݡ]Hpt|R)<<[fN-aEM~QE^V J VfoK0d)dƇ(z *K{W; +3 _mN9/az.`7YE)},H6&HV":]IB~@k*ȴhXGygbb%J3M6ǩv#r@؏9xrB&59$ Yy+55ցUoUur jW4(>zI)xWTy)ᅟsN4AI +yw_cm d{ӗ]vGP2Y*eX#Q$,Tϗ$hz9I kw;6ExKs?,ֻh$%*j*4%Y샸#2&Z^fcj6Q_,Q?]YJdJdrM>e՘mΠ9|DoxE 9% MV1riԼy71̙,"P?Of㽱/䶻y;X]cF!Dr(Vl*@xͳ'|ZxXe= uVR=iOCnnK{btw #p"+A-R|#^BeuSs +4p"2v:bl`?n)3Mioi,nKMoZzQ | "z2fӛOWoC=,8`ah ǂ KXi19ljjr,#9t"G[ZfCҶi'"XP|9 t{3ǹg3;!] ݷ;l 8: s!Bl0 +endstream endobj 3054 0 obj<> endobj 3055 0 obj<> endobj 3056 0 obj<> endobj 3057 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3058 0 obj<>stream +=R.ffɌb\QB Mxapj*CSxy;hBCoRk M/5M5;?ޙ؎cmCo"l_I7z \ʒ)^HO(4+=Y> ҎBzQ>"rI;^3x +v,= 3el8 g~nMg+#\#@O eAx W7\h yopށAVlpfE1~ @s%'OJIG:&NX@3^Y&8C?G&^e) -hG3gUR2އ-&26UW67ꕲ尣lbR#ZF8?4&Duw(+͍Ţb(2d-F8͜v2GlCOZi,"Se1Va("ggbԑd'n) ՠԲ|=a"ڐqmi=, +Aj i:eqA}H( ]p=7T# my*czQѓhqiӇ(ƨy!#=ijPcӣq%UƧR3V :eN}Pp͝B*<sQ+v=N[ P63 +pG[tV8lg6Mxx}9mw!&[Zxz]~3TjnJ8+w,4Ê?3 /ԡd8gGl@Xazoqbn=J\h,Ts*$* Ҝ=zߧ"9(rU q̫8Bʵ+BK`~(`Oha˧>SQADZD͏DE%[/ˋ5,ڨ[ڠ&o^W b[% u-l"ͣ9Π@5,SW36r(ݝ֮l `H/5> w0=$Vc}j^hJ+Y +endstream endobj 3059 0 obj<> endobj 3060 0 obj<> endobj 3061 0 obj<> endobj 3062 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3063 0 obj<>stream +o}pi8󐟧e7\l>3/tV8#1N));J+%Ǥ+{.lyERg7Y:VIÃkY4vhJwF&0a5vZSɒG3,Y Q: g䙄6Zf[?TZԳ* $C/vcaqoK`f!w1Ӟ#|dZ򃤭]w{H#AjCu;sI}#.`(yPyV < ^44LlPGL6yȤyEc_OfBa{%mĜ ^g5Xe!iL)#U^ n;Vf&(o$? bǀkdW*<W z_{ zP"@<:O܉Eϒwʌ|MF^ 0H>i/z+O9ED9YvU),ԫkZ_>Uu#JoJO/ৼhn](Q1{`!Mį?M)}ⳓئ*w6Qn))/RRXNƾϙ32O B,9 +&b #()e fhKL6@ggr/.9Gxӯ\r=i{=richyގ$_ +*=sXZh0W냠ķ޵ާzZ,hTsmg~D\ɷs 8DKov|!F;:" +endstream endobj 3064 0 obj<> endobj 3065 0 obj<> endobj 3066 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3067 0 obj<>stream +c,= |p&?'łE +lpRzF|Lm9x pytRd\y8zХ z_q\񹀢# IY+oMWB!L۾g"wtA=I22z{knŃNB>܍X/SkR;bOFa(MN">&5O,}7bebZzroA批\W/)y@0؍%z5+aì&ƤG3) DK9nXHvCZ>0ߥg"G nگdh=*qg6X.{OE̱&6@*j< h*(\aSXYkAϨ4lȮln[xVS99?>_&oH Lwϒ4ۂ *@QRC޺P|՘K?rvK}Vd>@uKP}9#[ͳZ$S᫝o!0;ReTׯQ> :< $ه`Mtei=E:GPM:-tuqWi+Z +p8ܳ97]0Z pegr.1蠞1=#Jv=k #=-x >=FQNY*o; ٤sn*fHJ83|i4 c%RuI q|wܹBMTmxC&a"x k懞}Uwt $'Q@!?#':bvQϷmu!wF+ TkZ-+1 `nÑ +endstream endobj 3068 0 obj<> endobj 3069 0 obj<> endobj 3070 0 obj<> endobj 3071 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3072 0 obj<>stream +hCW ZOh 2vc'l27K|,C$j3cs?0Rǥ@CxO?#Ό-er"N]]ihZ7 'FW9D UVxP.h5o&l2t..u< L4;5½k>g>6wlKRǴ*8ܿpS0>MQrư9zFT? y78'X's WM  +jElעpH= dP;#TY8_ku\|`XX@_\t櫴O-ۦ 荷HFɭ\2=;[ܕl:7:cB8/F;vu 1f&2\;1 2!j|Mз8&(>6uOo=z9J{9M5"mW5Y +A4M b2-;~N*h5Mp5|niq(6ty> endobj 3074 0 obj<> endobj 3075 0 obj<> endobj 3076 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3077 0 obj<>stream +eqW7``|18DkIo{U !PGExsKMARCސj5tὴA5pܪ9uAV ,b%K)%}LTC+D)lF,Ħ(^UvG50ybck<9# ۧI?a Ff>]A`tBQ,_]ss>}9Zv괔Vs yf,U@3?j<,nrO,<傼H2-˂,KҳkOR uT&>ܵ)>nfkY ,UgaoZ塧]ۄS#{(xE9.byjR00:Ӷe|؁PS/ mᤪD^!7}hiA$w?Mp핗L{(D^Z_MũX扳x}l@ۘ}8)ŕQVgC +q8fMC{a"d &ͽR*Zˇ%Cɉt.ȫr |𒂀r(:Sc=,OVbӦB|qxQ>XW2Q& `z+1B;cc^RpeSJK aba(X5k9))~ML5(1I$,C>pŸC&ȮKjQRg[DлO>WɤÀ} +gv< 3 0H[|8IzHG|odt:D!攖4520""21qlJw 4:8^c wV;2d6Xr|vW2A Yѕ^PK;FJdf4?Y{B \ؖxyLdSXe.:ohKl^. ȦH"<0ґPBkLhGj?Hٗf>H`Y ~,?OJ~ejE +&ioN2wV3W@0-* +endstream endobj 3078 0 obj<> endobj 3079 0 obj<> endobj 3080 0 obj<> endobj 3081 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3082 0 obj<>stream +ή;dpā7R[F +Ys ڻ  BZ [ڬ Lm;FUʬi9}#i+TF| t{3 lἢW~7] Ad;H@둜s޸o/43_?+:h\{yה+Q  e,5KqBEUmR:2 Nϱ;jq14OY zAPVFg#CE͍!.6Pb>G{񘅒Vp.)㩤\ TeJ8<40SG:g%4SWVH<:>̔i?+5GB >cH+ (fڟCvn.Ѱ? e=%Q!UV F/h#Q%E$H Naa1>7ټqL#Hiޏo:lMtV)$lHPs&6)c…UmvbQelpEbx(_UVO|;f6lՇ]ٰΌS7cv=2܂yӚ֜Y?N>}x}d v=P\! 0 <9?:q= ' % EK:Ge0VO0zS2~medCjkcȷ|_'mÔ0O/8orJDg+H qXPHh>UBl%Fބ/?{ӓHZ6vfʽ8Mcwr䦴<>eoּdMX(jӡ#rh{Ҥ?r!^7d}NkfݗOŐ2`^ +b¹ bbi8rFjI&7QwN? +E5qw u DCΔa,7PH*+Q&^vFu>wv -N^W$s^9h: ߥ0Gs)p 'Zkm2wG~%^B)$+m̖(ϩrVwջ%JqMQ2 +endstream endobj 3083 0 obj<> endobj 3084 0 obj<> endobj 3085 0 obj<> endobj 3086 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3087 0 obj<>stream +ZcV{bh1,IO'-*mVyT1M'W  ?k^⍸ݒ):YUKADE.{1fdsP 2:xtVMN-@1 +#:oG'aߛT[8.0TKT.M}ʮĢWk4a +iZD⨽b`SO3v͗mEʡ^ƘXIHbgfZޮǘcM_ 8;^k(|{9َ-݂"2]F\zu wm uN`K%|4h]"ˌ(˿1[\xO!{zu$&Ot!&Hc^8/Y4H5<>kY$L{>}{g`Nr2Ìj :F(|ʢn= +\1,a4vc>Q3=[QS g-i#ѪVxUӶ%PЃYW:0y'B/VE#ʷ3oV=2m3`J- 0KWadJ I^'*k瞄x[fXNw&ZvKJ{+obcyY[S1dtf,T-Eo2'o Fbk>ӹ,#͑ J'c]ey񾺁s^/04XuUN=)tꤺx3}Q5^󋢍9zo +y⢁S71ċ7mnO{2Z?C{хA__*0wjs1]0+{ݓ}AQB:LIH-h+Ƒ&_lO[M|40 + +} prR^T<ǴL 19NhW|'D>Ed)\w6MKvHMBOO[-fDVU]#n2IB"[2&,:< +endstream endobj 3088 0 obj<> endobj 3089 0 obj<> endobj 3090 0 obj<> endobj 3091 0 obj<> endobj 3092 0 obj<> endobj 3093 0 obj<> endobj 3094 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3095 0 obj<>stream +d௬1$~eFV*s1#`ߔ**:V<ACPuZFO]"lc eOӳ]45-WoBLgdd-S_R1Q%V=4.KJ\M{75k3D aIONH^AHlw$-~cWղvbm݌ER[H,O@dUDYSfU_Xnָ +vsGe]i`ڮ~]`Đےm' &SdId^5w:Yt0X@1i$fر};=EM! yžΨfU. 3 %3IAGWF6)KVqP(,w$]4屯6o$BDK7܇y=u*`T<1/,5COdB][(on +endstream endobj 3096 0 obj<> endobj 3097 0 obj<> endobj 3098 0 obj<> endobj 3099 0 obj<> endobj 3100 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3101 0 obj<>stream +}:lut;T jlK( E{[:±'ȇR:\ {dK"YIh=@/D~|LSޕs{jvdH kQ_Uț`~C6S, xyFu)ᕰ`g,vJJJQA'4WL# ?:T(VkpEm"k N%u @g"vk~I +^F&fU +^sW*4 +E & +ׂx4ҥ9PςH3Ӄ.57t#~% +Z EQp7K#a/䑘Y<*G1g_%~`["B-rjX=Y\+:6Ji4,L ;v: 40;?;>ȝ74%w5_ټiY7@CԺEs751 **W<iu'>aOCznhaV.4,yYY\V1jc,xXdApr^pMwhFgbvxq13gַC s~֒׵R> endobj 3103 0 obj<> endobj 3104 0 obj<> endobj 3105 0 obj<> endobj 3106 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3107 0 obj<>stream +~^}jU߸?SD~&*l~|(U[7yF+Ù?s&Xa{-I3)th4&AsLӝak=\Q| .t%IpcUYIQ.ԗKQfTw*e $1fCT bvCrUvi&ƾ,Mu?+)9z$*;ծ -g}r&3rAyMpz?^ F$ݽgzN)/˃o02@pG*M[)$fP= GISݨ~'J|. h"sn#lq82-@*((δ F'%6҇KXh*䷺Atұ:m m'& C;{(S :Ds,mO3:P_.AICHȤv릁nI||'ecd&6E:rU-|nɐ2 +*X]UqOlRtZ.LNrI@n&1M\/A]3Tm~&Ҩ3& =ʽvDfL~)(yTt6ފ"03>ңr\!jKM5WV.84ʄy 9q+rr9g`-bo`~񭥄2u/ @0@ƐoYrVqu]hTcKǁf(>Jg_ekm).A%v>EHi4u%bSP}& gqdzՈ&)[EP* 8Y-6tdfٷ083^;Z$XS3U^n"|Ȟ1ؿ6CV'҈mN + +endstream endobj 3108 0 obj<> endobj 3109 0 obj<> endobj 3110 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3111 0 obj<>stream +ތE:g&] +  +iv@B ua'jq;s rpιY|г¿*f AҸ~֮W,A>oKpsי >ȓӵ; [/9y/Zq}*+K cDg~\H@J+sš m"`nMP쩣|ۂ)^<7 \F48BIPrdA\GPW %LOC}#\<$bg#Aōm"s ++wK +f"!l< Y +Kl$og-~='Hvwތ>7`Bf-NKmʶz^w:DCO6H 2N#,]H(P 8Ѡ+bjZ_QYrB3f7Z]hB`jYAGTڮؿG,u\`ͮ7Xb`g P%E0BO~(I&>Rth|Vc!{OUsEȊPd`VP]} $[ֳs(bZn\-9ysO:JCPx\7"^[V,lImjx2{> endobj 3113 0 obj<> endobj 3114 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3115 0 obj<>stream +N5c)ft]m 7ⵘ\fP7CPg:;Ϡ)A7 z'|"]r|e" e_Q7gӭYz_HT7@!5Yh< sva,k/N`ӠaGFo(wV?.&'}Pօ}/S|++w֤VܱLZ~[3xǍiA&% `Z#mgz[>hfRzK ) "c 3MJJʯ#"y<u>* ;k|Y1+Z>藻4؋Au괫PEq?KjJHUÈԓ5Q~)<ܩ% %4 /\ +~nH`!q6n~OBŠ_MC=EQeZө5h4ټ]-dh1ep.'ak`=Hb/{Wk'-&Y)A"„4⢆LHU7ÿqS7' K/[{I׽\'v1zt'$ +endstream endobj 3116 0 obj<> endobj 3117 0 obj<> endobj 3118 0 obj<> endobj 3119 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3120 0 obj<>stream +wOBpBlK7?#3xo7G_=q䀢InגMY{UHplBuijr}>  we[`@qH'4eTU/r-tዚ:8l`Dy]ZQ!.IYhFc0S.[ //]PZH0 ϯϋ·uݠ<*ⱧlnKL g-'iS }1 i!J ^ɯ}j>D֠력g$i$().u#9J舥bodNm4h%݂h Hή=ZC*as` gz9:Dw;Y?k[/ * :V@QwMa IG Ѝ7Ŝx[Χ}q Sj5w1]iF8܍岮W1AJN9Ⱦ";йbY^vz}[!)7nhlx9 =MvPM7_{R$4씄5:jˮjm(?]>ñmwD,K}UA/3g[7y 4mLccANV/IP)tdgPdza(aҾ1[D1A/g|!sW1|~OysqNw>CӸ|B!9K@_"|t/rbBS2ŀkڹ(LfFt026YBCz6\~s*C,ZEDybmգ ì"w)cq>0ft :4Yˀ%st=r5OΛ> endobj 3122 0 obj<> endobj 3123 0 obj<> endobj 3124 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3125 0 obj<>stream +(CQd|ĩF"itZz j.cXdG+/sk)I霣7r$U:Hlfe6eht,A𿅺 <^qT386LjHzl]祖8i} Ȗ?yg+ 1xZ?" w97X拦ɴj䭡,4dܴPRiK@H=>)V㤤im}x <4{ѻ49ww-6l0v!YF&PkjDPW0L%兎Z-el_Cv${MpiwX*[Y0㐟RawxQ(\z_]1_Q)ޥ^BW~eC{0.˚{5k}@ 2-=ӃO=V4ա]j~ 'v^722eQNjjCrۢkjfs|?:;I,IZߵO"ʍ/>`f`3W?7=1%$  +/1zilJZI=`27~ŵNsl6~;_% + s%́Qk@N4ElyynHn9l;k5uFGMU򍷀gA1ԭx,р؞h_Rg +X[$]JWm66NZ2Jɐ!5zs0Ji_{9vgzVhӽ +< v`gY @fr#&VjGR&0&8y!lIevj~urCo%Tr.2D:5M7{gȒuN +?${fvu.#S2Rc)6l'(o~@XJ"J4Z 5(2 Uyjb> endobj 3127 0 obj<> endobj 3128 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3129 0 obj<>stream +zɼ5As# R7=a@{ÂpPqn c|%c#5\@ %QE +6q6P} F2Qߴ@4NVIFUS`2,q\?G{BB,0M{ $op:茍{' M;d`MG0[p 1`G[UrhCRraІl{* jUJ7L491 +dUc9hYQ;'k'm$J,Y%F{o HCq*Nj)xQiX4C/Yp9/ǒVv V[v/l]6m/s͵l+ubw-IvP'&C! yIݫu8?Dv̧8٠oڛSL% 'ٲ[EJȩɀf;y" +<~]+0J^119e3~5RڇO Aӊ!(*{s<.s*VlmQF*NYFB=7I8 F5P{zFi45dK˥ӑGQvj|{>:=E>bCnqb>_orWYR_}46K. +[tv|b;௠lSS8 =MYBphK/I3.rϿmꩈwcN&Z+^ +]_9 QPlw*6N +)G{A̻w GwD4>v;D[L9Db (]Lj،\ZY|/蠟8WӼ[IlZ#$='Cq w" PcS"Bm_>JS^g LsX[=Nț;zH^wx?./b}UT)͢¨Nms@0O-jme++ФR]fAV*gA(G_vQUΰ> endobj 3131 0 obj<> endobj 3132 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3133 0 obj<>stream +^1G*fx +ߦ(drGSiYRYHBONo4\:%U>5C2xf+|G'ʶ_C+ +l8$H8xᶏ uc|T:Tr@mzݖ#uFB F?vSW[ : $=|RLM>nfPk(Yk*0眻.9;9&PYrYY(czY#uEElRzQ?1O@|PH 79$q%U^p9 m5mVHQKD0 PXAj}n"4/RôW,!~ 0 *ZڣO$Gnܜ{k T_ jJ> 9p!/`Q2P&=߬Թ (^o}n{Oxk"AR|ڭN]mM!N^0}_i-t*)fةL1=|:~VפQ0 [uv,]Rm)bwy1V%ee9k {L° +-azT*x,AmC:tjxe{j.l b&Z9;SL($AI=iXs@6z9X +-SsmvcOoh`oS,[r$J \[ju:YOpl`{]*;mD iSbeah#Ƃ +endstream endobj 3134 0 obj<> endobj 3135 0 obj<> endobj 3136 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3137 0 obj<>stream +SD*5|.IMʴH90/;wEEn-NM#ϴ䆿2dycW )0ؠ$F%ڕ[j"O#60'Nge?uW!޴_,cCڂqf +B RO6T + wi +'qk4W FY"gPl bЩO)#u蹂햌Ec"iLe++!\-@=܃iFa4:]Vu?ae:hOT( p"SA)>׸&YB?DB^nPA9e$@UD! 2]"3\çjc +2. PxOf?jDi PN +s® G[=zf$30HEYryVbwIoN"T?rY:b{E:ǝ͸NT⢈2,r zoU6Zk$AhP%ϾIDAWƾrPTd̂8\D8JR}mW n) ܖeCQռߐ=m12>D"S>$%N2a?%|^kW2R gEw|S&ː!⛊Qr'O8srY?˂3Z{RʌYhhs[ +K܈M3L +8S62,=Y'߱krMMٳ 6Vhr_ͧD"b87!oSmbVf+4ߑr#If &%l̺!'OU`LqAGpSrMEzg"e-l@+x +Y zcžUE,G)57Ҫ٪^Gbhuþ +endstream endobj 3138 0 obj<> endobj 3139 0 obj<> endobj 3140 0 obj<> endobj 3141 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3142 0 obj<>stream + v> #ݸL*ybN@i9^xEU=!0Eĕn!qigMtlɊ~%eؑFLTf%'!\) +KYZ'jTTAkI-pc'e}{^Bn)71~@:+9SkwX4dFV +ޚB΁j +mDq% G,Ћ<9*k%Q?xBg2ár7 +)4/^т"hW6z6ʧc#@4˫gvEvܷ҂=^rvnHPȂbWeLaI P=j2s/%pZ~0n 슄 Cч8&)[LGRw;?XMd +}[|h`.M\Pj̩s`Q O5ǜ^ tJ9 + Ts#!xo䖓?se޹|[@2\qiT) {pyS>/;V*hg[ 9~̽q9һ +NPc0yg5o2= +_t@!JS`Ŵn9K +BH X왥8P,K34681Kʰ3K$uЃT[#ZO` ($]ZREu<֛Vn(o(9j\tG (hP򽼡~_MGd}"w*J@*h{mq|&yX^c5bнKo2,e]UOg^wKsX!kmot0j7͏l늱{H} +<yk%:q9ʿd7¸0֨?PzQnŚpAg_w lŭps Z0q@Q2lʌr끝n6[C2ݺr6G{@fZ +endstream endobj 3143 0 obj<> endobj 3144 0 obj<> endobj 3145 0 obj<> endobj 3146 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3147 0 obj<>stream +|O7Ju 1T;#OFW{f%uΥCL#j|[t.NXD54ȍ qTf6^нv5[<]m*Y Edzwrz.L/ab;Ґ"HGfMf,`ؒC +b~'Z/9Fa)^3\u/E|?7*$%w#5Q\$'=1&дT |[3(&~\R#' Ȟb}~`ОV1yћ䤹-QKLQD7 ”n:3b՗![H&b{f>g]j|߃bǵۨ| ax@ڼ40;&o7q_DB;ׄ;GSCg eG kc&0>kQsdwvqG:F3Jbڟ&06:ЎI'mez\ȭT frk t;& YMw +dX%"k$Iⷳ(7gmNJ*HCbJqZ4n`2:ͯhRos@/Fm~Œ7`uFmz-բRЧR dpJ8RD D|AyBsV[b#>Ou k l!5GTJTty?# =s՛ah |ȕ?<6BڋdI;1٫⮞~AdV9)&pر5/ [b3uG)j39_1)r6us;rJ3kHgN'~XP a..Eqɏ4C׊^(H +R M&*UZ]!FJL06vr3T'tg.mOy*G"h;3'RI/dԁʛA T׫2Ie@7X9-K%.i={PՈRѹCți֬̈́m!y)~fw) 6(3YT-ڟ͠OaI?(k۵]aEّKͯc7E0ҙ_ + +(ӵzSȵE'ۨG㑬e8&VaB֣"! F= l `ZT򌀀L?`FW +endstream endobj 3148 0 obj<> endobj 3149 0 obj<> endobj 3150 0 obj<> endobj 3151 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3152 0 obj<>stream +>]Qmݦ!\^BϺ#LF0Y6>t{غUPBsҧqR܅5s8([.'RTٻcn>,1,_B+l!1#ʟAU-t/Joףx]?ШS9]A:XvE-%T]\8 .хyl0'ʠDy^l"qp;&B['xi"W~|#dф"$$I$)iHj!3K락9B|ڟx_60~5l٧y3z+ILT DֹV:5 0͒w Nʘ6s=Crg_3].5ScR@`MbYYRFa*ҿ* j!Ψ2ndH@(r͞Mnt$&qJl${5T8] LJAzm hcl% 6NyuG $a:ffdOK  +~ > ohA%S [ 9TfO;(.z}2D|3WL>z; 8mLt_NX G3oLvPC0\blWbw3jԼnևW 2s[7h4uFqP <5Yw>blqFEׁxO!ٌ&K xc <'6[x΀a֫`MRo<:;G.bO̹J((T\5 Kd_=H3Y[WPyR=G=SoYR҂*Li8+Gqp  s\gVtqKvF-829>QbÚ3nx%=ʠKxӗP8TMF'ea[Y)9%ʊ?C?K5u0+=N[pcTi2ɮvYR Ydb+4šbd︙-$!Iuy͉yߨoGE}LUm3 9[iMtyfĮ$ď{o,TSʳ/\L]T5"Ǧ/Z)_lrUF(xFp%^Fih|I}ahpax> U}g.E+9CMZ?i8JSqO +endstream endobj 3153 0 obj<> endobj 3154 0 obj<> endobj 3155 0 obj<> endobj 3156 0 obj<> endobj 3157 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3158 0 obj<>stream +A k"bDd}MJmSO`XރEklL2x'G#U^p|<7DdG0@u83}cdGՎ)3͊~gMp=h:@!F@Ԯ-Յ%#}7)X?wř +x4""7؇P;ſG!-F(۱Go͉0EuӤX$8a1e8/()PȚ./RYx+Piɴ\jӯ/WeQ̊v<2Q$Z @Me#ؔV-I;|dZۙÒ<q\ifyDkVo嗺Ox+ȖDl]#3W"ɯn3"E*lͥX[f"0_{*0yfqYc|g +vWN`@TUDQJe+e{wk/QIUf4<|󴃡&A0ɉU#L35̺5B X-" +psxTRsosOC$q:(Bt>>{~E[gA10Cَ#/F> endobj 3160 0 obj<> endobj 3161 0 obj<> endobj 3162 0 obj<> endobj 3163 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3164 0 obj<>stream +DsREc.L0؉w ++m+J1h;|[0bl'\;J@!Q^`,iXlV"RN6LG0Ig@!V0adS)<KˤK>k#w*a Pta wa:5XBT Zg5jjDzif$P%41G8D(m>Kx+fBZXgӲq/BBnEo##sBnD^̲AɨqsK6AV!s-YǿR/KiHԎO4ū6̉?D B"5u%!Fq VW~:c*E +)ߍ [u+QIR'9ՏO gi[0yǫ˵xP>xYu`ԝ/[dvwEi]Q=k&'J>Ul哳J9Y+p#wti&)\iKed4mXjvbLKs06lV-H:hj uHTп7UDD$ p[29\J&l $0TOodY7x=LY/iU.PlNCy`cx~5?b.1HW8y_S ?e׃ \1m/%-0QSۅZK)lj֔/Wdx;In#rrDzg' +&뷄 'eWv"iTkOcp[ߚܝ 5n  SɸoK޿q*rM؋gU>8!,s|"r? ornƙS$0kkj+[rV, +ys8|Y7Ley$h8 w?pG.ڒH0w hs&"oTYbTrt7Uow,aC =:{@[:wi2̸Âvxt`[R&4ߚC)eOgQgLnhZ&k +_E+-TS8lw E:\tNb1R uz nF> endobj 3166 0 obj<> endobj 3167 0 obj<> endobj 3168 0 obj<> endobj 3169 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3170 0 obj<>stream +#?JfoZ g.UQ*m9RpύQÎĮn,,qRуw6ƅѧ^^RkkY.!&IӘɄUh;*vh6:(lv*ƃߦ*JgXB.EhtpfScldg+ o-^ke }.M룘@w:[yQ29ֵ`_X\`R-Z ym>J3?kZFGWA@G@<2Qm?㵟@CW{`1ߪ:,S͈h6Xԑ9s2qˎn6_2ˢݳl|Z'wE#Xkha윶h_lt43[K17W !hķhv4ƚ1Iga+#AѺi\K'<,׼j\AKh$V4+sg8M9иm]q2}䏉P]dA}2/ RTszzbc꘨'$*fDO@N< ^ПL9'qdCUih) o` ؘoֹm Űۺi&dT,8Z[R*9d%5HφѨ=]&0-y:۫a|rN%<=Md0r&^rC}W `!=5B'wFp~nZ>BHjJh.3i4Xc 5ܸ̩_ Q.5Ӂ2MceQ䡹"__W#|_xPom9@kCg?Jfsc8.#tXy9Dgпw*I4GcLk;5 oފ oeMzPfAVb゜SwZSOYBgxf wKH15E:b$ +Ν|>qmo^ӌOO/ +zdZp^TVOU~,b f2&K~l*ݓip.Რ$)8ډvJ$\;Uɰ(%q4C&E`&8ziDu +ftlр.6I2K/T]%RK +endstream endobj 3171 0 obj<> endobj 3172 0 obj<> endobj 3173 0 obj<> endobj 3174 0 obj<> endobj 3175 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3176 0 obj<>stream +rg*|)C;nAZ"@ņUZ03q@qD; :Mr z@aHAB>}?"J%%Ӌ]ڔh!pMPS%/^J$L kZ#ORzݴl=5g4y'(i7jk˼?=q7y2.3 !<X !*b*g{&[ekd՘MDǜO3  0R|Ӹ.îC}CO0yHUZ/Ϝ,_X3VtR^@CU3TLdƝZ/ӑ9L,3"Xڋb:1bQu)a =CVUPy3pE.h]ǸI\J04CSIDU}$=T+LeI Giܣ_!q2ڸ{z8XpXY4E}śz{Ŀҿ?F|z9ZF-&Lf^7W|;2l`("2-ത`X#B5ie醸Umkzo0LLj^M?,%T(ό(3zf}HO;ȇ[(<_ӓz%K=U r'^*d'cT4X){hNJmh3~ѥN8o]({{-@TG m(> endobj 3178 0 obj<> endobj 3179 0 obj<> endobj 3180 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3181 0 obj<>stream +}γAaĉ$*F;Z=}Le%H Wԯ]NbJ2Dx `ӯeXtYVc[c~SΚJ#{aY}X؞UE `ฝ:n^TY=TuԑLKO-3*+xd>]˪.C}cn{o:f&;?i@PUW'. m8U%̘"Ё@k HcV<"Qޯdܝ!q E+Ư9Y(DhyhQh+▸|%E4! ^bvHJ׵ś:=B$0hfM Sﯖ-Pk6Sw$9B/ʾ>>ڂBIo =Nsm/*1&X57;3irYm5Jƍoz.ɉQu&QFK}qB7qf }MC&w%\k/C~s1!Y zؗޞX|u)Dhw8*2Y\$u!@>Pcpl &+&p\HGSGI^!wC`fb6A-2v'8H$".\xHۖ{3{YaDU2)~s FlĤOٞGy洮T9$7\'[@BoQڊ>TJ#ZGx,FM4w.TXm \x#kk'}DCJs " T٫cwK}D +Հ8p+N$Tu@/awLqIA[*4&"oy\r22t P&^Afn/][ULU}6 :@B_lvy"55p!*gj@R%I$X uAF;oOH" . 2诅`p!9Qop)V_IcD!Q3sRQ)7ڔJ(˩Dp+[{}opWe x0[> endobj 3183 0 obj<> endobj 3184 0 obj<> endobj 3185 0 obj<> endobj 3186 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3187 0 obj<>stream ++&Yʋ6dt t3FI o[2ΜGDJv1:|_R=5ҿw7Z"-?lºU8&h]ZKksH Įc揟/w Q?#l9ڪTl h2H4RݾN0T7v/n`:)L|=澵@ޫ,9(y(HZP&q:yD%NhaؗJ#H_Ud0?u߽drd m9ˌϛ6f,R\^9iE[/a+ߑc)r2]_rqmعO;B'jy\"&lɤK^Oܥ>D!䨮!t>{177ӖCIJD¿b˰;A` uyff?S7xW`#%t8I~bQ'w:jR4fh^s`cBur[m\9 Zz ޶ue9OtdZ^-ŬzU9N(߀7uUzM 'B#[ӷC 0)ͫSek“E_%XRib8ס*6 +n5s\+C;ܠIJǼ79ٞ`u~6f5W( +id6]}H650i2qaўU:,]oZz +c%YQ8 "[)A! [H30U4U08A'w٢ +_۷m柲JK7eJ]HKF`dI7H A{JH_lUdhcnn/Yƌ{楢馌Ԛ"tmϿֆT`EB𧼣%x 5WA 9vʀ9c-Jz;*dl$Bc`#NZz$P `L\?x6@ZvrRZ2x4im=Z{ 绤7g3ӟcRSki٬،c7Oz930ZB TǩҩX'$’Lk\3@_6xbx-MScd:>7&my+nGWBdYT*S%fU:fOxLC딳%;0ġE/`fQ8cL<ՒL 08JOTf Sp2ټ@jpH]P{TW6["VnݾTρ1#=Z=)<)#,8 Y|%OlP-5< +endstream endobj 3188 0 obj<> endobj 3189 0 obj<> endobj 3190 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3191 0 obj<>stream +Ian?KzF`:VݤO`XOpZlN) INQCV|f w|B\>Fpc_! 0ۡVi~mdn^!7*^RxAS)`]Bf8G@&)[UAo[N#cG8t[xi,CʏN_&2m@)C=1ڪELipe,eVnGHʳE,.PRU)`#{~7U=Z=7*a|Buy~b_A_D3oLy/e&}$.O~> endobj 3193 0 obj<> endobj 3194 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3195 0 obj<>stream +ԬD{ T8gNƢxsrػK}"~7%5sWtrZbͣ| .Lg%t QU~'lֿ3@C M}H'/l6 _uB^ܐh=g"+leF|Cd$'R%貗xg |' eUq>6U+DNn "|w8ڡDNmΊt642mf 0ۗ23 +oAB}2o!*uzG + +HJW(p{$cMmtQƲ`q +9]0BΕ ` beU5"2gS +vֈɟࠤ\1c{Wg1㮓w7AGހngH?q=r X~uj&L$BeYخ.ʞ +0@,8hk"(l,6ӑ5% +}3y#M`mG`DٙzotD\1i:' 2Mx[®6"!^"kı<-FP/YJϝ߼6/usm>hsn( ,|]ϵܚ9PEc 4l<Πے8 ) HYY. +@+fC +rC>}[Aqmq8G^ՋCN%x͡.RPf.~+ +-\]d"ωP)#wiWy$YK@ G9:A +.'%}ḷ&n܂Rw,ɤsuҔ?7aAsو/DݍZ~+_xB!f{X9$H5uj͏A]ҝwL(jlV΅\@`OѐZ DF,sD"{VVz/O+aO`u60E[B1 12lhoUDU[)e58afAȲG䁟ۭ٠^cu/Ϊ@%IrG? +>Ͼv"T9Af.TNj%hQ$iVH-+4Gْ"`S؆9t\ZQdi䓆"MnL ~"gJND;pt7@bKLy@3qq"x:,*$n ^4%o/iT)!0C;3|0BF!L"OJXnz.Ԧ ^πMh =ԭB*866qs>?/e(;&j +endstream endobj 3196 0 obj<> endobj 3197 0 obj<> endobj 3198 0 obj<> endobj 3199 0 obj<> endobj 3200 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3201 0 obj<>stream +<[Ū4;kI̢׌y$D@&1Ɛ;tU!CɺٲXǸOYG$ +*@^Qbt(/qq`"0'2!RqO#R ,4bxЫ+pa +AzYȩz:d(KB(5a̘Z=EC#9=̟Hr_EV`; wZ՛J?ZqqŔ;l֒FCE"ݤ*`]ŽZSCu%UY9kh] PeZŽ| QO5$V"?F':PZ:{6u3n$8b}.a{(rApmxPx4!l曼3^"^QՅo¤[>Tg9| 5i/ŇAO=8ߥ*\{};Gstӷ]3!S2ރ-+ Feb=4*oɄt-psЍY=uq) t+u| 9$.tj>nʀi ]fDpzI`FWbr ȔDOܛ["sCUׂ-A0dJTJwnA؟ Ų$%܇E*!D7 vjkY2dFX-o#1UBܛx񪮶(^]0zV1(TTHP"*pl+_- bEhr_X+$Pot7Xg"ӷ(d +%^< V89|Klfi[X|NW9R( k}}x:ك>#{%*YH0 Hb?; ʊY[HQXCG?9a14m-7x!-E< KX^ȹjJ7vH4R?pK9= J7u{~pyHJw=2^w5;+Ӽ801m>PFnk!דi*rTV Z/Z=CWj\ꯜ*7B(ZӭIe5Y_A:W*5 'y +^|Pwbye H*62XeOGoKvD|cIcfs1;9YF^o}/pQ,[sk9x +-u9B5*[hoSӭMjy(DjqcXdO>QA&v\%PO_|ӝ-{" m^ޯ}OZfLT΃k֨\x:M i_4KNaTʟ[<{Ldښ˰4KRјd~>I}G-|o/Ha&t?> endobj 3203 0 obj<> endobj 3204 0 obj<> endobj 3205 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3206 0 obj<>stream +,LLV oәN \} jKup!' |$cVqzmOAwxtˎV+w\3P3W}!z$fv 0Ќ|&p-;<5~quưņIHՕ@IJ>i>Ŝ!<p}q'zfh^PUeѴ4*bJ 3UCJu g%X{]ɷXP{b OП}0K2S p6Ϲĝ|ĿلͿ6v^L] SF5wZѧ̍L\rYhYvsu +Of no#yYB;./gBFM|$b}}}M#5\Aѥ|6{NfvC{lACN×E꤮I& +. NֶCl}0o|{GatPFu~t^U58/A5v4"Zrb/sp$1dp8, +}0pї5@}'9ҘF|iɵ|rL`e9IЈewwd]]yK(r=$_.E47s8"j7zx -/)It; %1jF@tQ.uh!П+U`$!o]%lWÕ~H E^!َ^=bû~V˯ ܬUFd}dGaq'$gAylOȊgL N7U<^ҧ4Vkʪ>ƎoTA,"XsG|#7J9X +;gMmXWlE촍pQ6vF>-R/%#k%?DhlS/e~ƻ2_ XN`Kd)iZ> endobj 3208 0 obj<> endobj 3209 0 obj<> endobj 3210 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3211 0 obj<>stream +Hna]v΁a=@&Uk޲w~oaRel*ڍ *lLQ.[&h2ho?aXvWl05L*{x'CDY%G0{ |ό%9*R WL?3R7}})57i`}osf& *UB2ųN%\ni4B툿>݇]= wSE"| A=~o?u!?֝r*%@/Q&Ac]/RƨҎ$W8U/} +Fv>Q +B3Cq<]ٲ4~tdͨaG) +ރ,!ya}7G0B< OIjѾ]:,'Eצl4UZ ޸ZAjq$Nb^I+)D0g`!VwqXY gc.!VxUdkx#ezᝁTxtv׀[dYÛwMlИyz_4a c"oRʼn5.O߰aȴJ 0Pv8"2od`v zE/=_FhÞ񑨻W|kS[Dd+T$t\!NGim7_.9l -܁/7b6 @ 6/ 0:oxSyXڛVo T;4z +> endobj 3213 0 obj<> endobj 3214 0 obj<> endobj 3215 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3216 0 obj<>stream +a)_cҒ{h暂jܶB6_U- mg'bHϵ0%mv2J(snwab|wim -^XOC~5Z%?GЗI8*ƶo}Gxh/|v˛,=4bdtZPЇliGt^Th60R1p^sS͙ +,R* dN}o8c_l<8ف,3pD-k6?*z"KQ CLb3gAjv/"'+rcC6m =%AVۤf'mm"=t*zݐ,h( xfEfrhi`ghammlpJߔGQqd|whk_ռzؘl1ad,Kv%RSjz&u46]PՓ-e\c +ٌHZd#v!\n3{We(ZSᇸ;Dp&rT=i+>y\DsWOlyNl"qu 1,\ {BU?:ԤLk|'@f=h-Dp1Yd +bveT-}Z3\Oz ؕ+R~,צۭHx( iO.)'rnx̸h꩛1%#!YWSSL\L=c܀%'`8 6G]%>FVB,ޘmz=*P?݄++?-A)dDŽyk'Y`LM"ᛘ$(A>ˮ L0/[D"2Ŋ|3ޞ1|֎"jPH8:Ǚ&>O1c]'8=(@bh.oA0d&N-ЎsLOPq}{ cViJEnsױR@BQJݲ<qoID @ܸ;Nd> endobj 3218 0 obj<> endobj 3219 0 obj<> endobj 3220 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3221 0 obj<>stream +y+eoSMK+ eH’3:S|w*d,mGfIPq.19ׇoB&{#^`d(2n锬뢽&*t.nvD_`pcU".S_Oil<5P#V0kVd퓹BOsfj,샥 +ZDL/xdQ)\YRwqw1T]IgF w7}zDtp28m.ePl(0% mp+r/OAE=f!xS:5Ux%pi8i]!$GGJ%t42jYԠ/R-5@w -'rŔ ܭ,/uuvixM$ #j50@UPѧr-2en]5lUr [wxu# M16Z<4hC5o{c[&xޣtB9gP6x3bvJu{Zх}*7/K,p4Vi)nM%q`$<#5_>,c7;Sr1d2GC;F ޶]:O'u]+T9z:, #}{nگ8wH]aE_#a>(^P1p)>XNZf&(zLy+IxD۸2 +w +fӦOSݞ<޿)f>-Jvb޺wEj{sSy$I9RnqyQIӆG> +@!-G%÷%6!&(p')Nnc _pAzhJݵElz&5GcPs9j$czQ@>уWP +߼ԖעXE-CɡZY&`L\^e?!]*pS}@@2"o|kjTc29^a˪Éݸz_Y5E SJc*ia*YI*.0߼(|'E +endstream endobj 3222 0 obj<> endobj 3223 0 obj<> endobj 3224 0 obj<> endobj 3225 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3226 0 obj<>stream +wo; з F7,ӫdȶeo\Z g".S}&э<{ʏhO EŸx'= [pCJͩYTL^q &16ek6,ϝѓ|ZUs7D96=vl eRq$붫*ynkNm{N^\C6_D8-B܋':t"eyka%~r?ac0ʒǚ 0.)Ss)'ߚ5@Cťf}jxVP|/ySIS!c~Qpw&Ia FMzg^~{" E2' /{¤Ҙda[%BZVq)ŐKc[B|f(7>c46@Nc(ޏT)@yO0kjg̕WVXtus$U$썬&|xsߴciN7DRT('f;t:B#`7ܹ#[nlR2?G>7+'M@HaφS35\ Tqٗ~WgЂ1^pjDjϥ[~gMaB +endstream endobj 3227 0 obj<> endobj 3228 0 obj<> endobj 3229 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3230 0 obj<>stream +{ 8jyDYR*3ߌ`9ƍ;Ymhrg,/$[G=/|Ōun:`1T![ JۉL93]'h0N%,]E1;WGGFI6kN->=\uy +[h5X@hfp{ʊybf)TXk^O5:MYJVئ!<11prE^U9.9_Zn1{VG{֎E:F]2YNN`AiMbe'5ç>4ʒQ,".kIή柒n|lbOˤFtOhd.@S7] XzS4.b yzzvA|؊]D%w̗1=r¥‰fhf5"5݇t٪ &Q+ʷ-;l]%рoVݰɯ$r`;s&荋ph=t4c $]PiN7jWf_?- II8*v^7DVg&pfsW}I렱Mo +Ė0AV +#ME-JV*7Y6GIbܳ䉉^2Ś v+Tl2,yKl@NvܖdL1,ўPYe z*K"Yl#`*Ḑ̌ahźuL[̔:G]C{#Lz/K&z)eP!h#a>Z[{?AW DO ֮rS{Zq4؆PYh.AWNTqz0H5P!!|bxUʭ N!m]h 7E[00ċ}ECx÷ZczeCc2<;FT8 +endstream endobj 3231 0 obj<> endobj 3232 0 obj<> endobj 3233 0 obj<> endobj 3234 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3235 0 obj<>stream +[Oc}Q#A%[Db@&T2"NW#Ag O&{-U(KKB450Mg|<ɡ r+iOJfIuH%9{KDԂf=;ȔnA;cIF2K%®=`R1;- gͪ#>J>1k~k)Dk|j Ϭ^vשʺq/9Dt&LyCAuF΃a59>-&#'lIX'o, kQpS6J=,Op+p+!&uVtek:ydV؂ ?|`*$hOC Ǚ,$^?;XIA{q>嶥śZ&=ֈ*ZkE~wZ%@.RЏL1{Gǯ}!Qmȟ}Q#ԇh'tZ1me2 t=5T-NV?]JipF7+kaB-N^w٬O-){/Y!5c\ͯQtp! 8$vNPq.>Ak0S~vcƷ_[1Z&?Uޮι_NF`P[5Ir"q%f$ͻ|+:h~q04#VyMSAf2喭g&ZGa@[#7h?@iMya5" p{_fm7$Sc DIS1{F[dZ +bs#A> endobj 3237 0 obj<> endobj 3238 0 obj<> endobj 3239 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3240 0 obj<>stream +Β4qCW[ƔuHEAf׷gՠ &CP'a)Uj@8?|wOIY(m +`xA7 ^,&c 5Ir5&)|DZb`]J G%pdj'kU: 90Y6-h_.e\6W.%<ۜ] vlq86oJ0_?mY4/ЉNhհY'K>]{C^ªg?i炲ă +RpOV\ߊ0T(?*, >*gݐ2m[I.5ςFȌ +7++Ǚ"o/Ș_* }"-g?u{me!Tp9$IQTjbL:h +#٥WQI2:󃴍Ж̄w@ E+' V(BiP~e} 9a Y Xzs!o.ɩ.Ds噉 - t 潹Vy.j#y2C翅Y*Č:O(j3$Cak5V& 7Z|{gHF{sϭZ 3xG[Sv9s8yg$8QqlNސWfęhWm sٱ80W{%’:kȖ3N<񒶭v@nHUY0<^a烲7&v3Stq8֎0TA_nV\/H#z´0FJY͵6Jcy {YQ|B"0ːߜŷ8[L79QC_0++>~nϓ>LbHؿ>0'UJ+Ov#o>B^°D2$r: 'OɵN F2=*[ꐚ'ɩMFKQ/$k6ĠÞh2jaw TdEy*tp'@.^T')ڃ&?EcC~@> endobj 3242 0 obj<> endobj 3243 0 obj<> endobj 3244 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3245 0 obj<>stream +0s =w(=7}WlkR$rw^}`ICbo(#?w̵s\ޑ0=Ku;)P\{,䬸 ru$w_4:l(,єJȩEE.@91$L2Tt=ԗyno}R6~JӉ{1oׅpؕ!Ӑ.pY2wp<6(DE g4簗g/8.yZ;t> endobj 3247 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3248 0 obj<>stream +;\L"!'"c4L ]İ.xΞpԲ.Mw x?-?I`Z^ړ8R  <~':.p?|BW[Z ,94N ȋc7zXʙ^zxs#z96U2{3bϒBKR \!\%0f3#HjwLeiSѣbJp!ﯲ}mBxf,9EO]z[ߊ:\Hh+†IP~y(C?s_WF=oX7LuBR> endobj 3250 0 obj<> endobj 3251 0 obj<> endobj 3252 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3253 0 obj<>stream +(֢mt믖50.h$-+=+/1 'gtXc!l!>ʂ/D*)``"dPmy͈_5?;eS]o{]T% .Bȕ֐f& ޷WeFy<B,{Y)B@kUZ(S0);wcxBlNvkA2AꬆUފVa79i@y2-/mQ=Ϋl w\ѐ0qڎWOZ/2EHcR܌^x +VW(wz&'K匛|CC9pA9MwO3Eh#c4rOodGVEPj'gȚ; M=Ndzq-q +$ɉ(?[NY%XRX!yǶ!q#_0m_0wGVwcG,ֵߧ4q{x R6F3a/{F%[[;Lb[1v$` { L0xi1Hw׉JF^޽:U_msQ +3EXuGKwM:1=;)oiA$dE`0ܳ5QpIT뾔fW5#R8nAjY8 l:m<%C+Xcu>JO,=157JwٚVd#r0$ċdirr^" ͝B0fG4;Z8Nw؆C' Jҹ +endstream endobj 3254 0 obj<> endobj 3255 0 obj<> endobj 3256 0 obj<> endobj 3257 0 obj<> endobj 3258 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3259 0 obj<>stream +ݫȆZ' J)`qrImܩ~RH~+ b,u6/qx2h`S\7W^xlXYP\r2;.\E~;sv.2Md>VX'F2 2(٦#gӹ=R3&pz0hU$TPlT=ă/>7l4ш֚.*2ZE6`^=,i\18ֺ%D†8!pli'i^+~DO23y)!FXvJֲHg9χ'HLKyHB+ t!xPH2p ꢬ=TyM}}DQFY"<<ʬ5gpJbƑ`j1!C`H +5A5f% Pr..rLY~{yZYuBWHp,I=8e،9D`W?ř)ļey>[9lwEPDc}as׮ f4zށId= +&i1-֔M |jHG'lT9;$$|*/pQM# j'rA6D4 $> .}nM߄Q$_- `s%1~J0ROJ7ӔhR:;,ϛ5WHRﰠE%>'U"m Zuy!m|? Wv"+΢2@x؝)s *nn)žv] ͔XRm> endobj 3261 0 obj<> endobj 3262 0 obj<> endobj 3263 0 obj<> endobj 3264 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3265 0 obj<>stream +j1(89;YȸV(|^1B[/,^z9G&iĊ2XR"5R]K. X?%DIS0&:h ?P]\GV{ }uLe/> 9AS疠J؜zgx +rtSW}nar_Q)G?,lNo&jlCs{p?ʵb>*T0vXB٠X٨rtNjδQ"pjpE,ޑoc=tzh"%kQi #(L @3g,t +w2KI4rfOD$#s8_Y|Z2 +`cZy]J+o`RkWjU.!:۷;ŭJ㋦;~%}/d3^b0O CWe4x7NsqLŏׯa!U +UwAo3f4o`/|bF&Ĺ&Ї4I5iػKR(6kIjdP_~ޱDBqēa:@am!&iL_ʯ1#]E?ை("~Dx +J5L[/|J+rPGA) \_ЁȘL\6WLJ.J= +_LaP`s{y*Qhmx<{'BYxҹ_qK :1XiM,tK^h=`7 ɟ2o-2K ,x 0ŊgcK~+;ѰT;r' +endstream endobj 3266 0 obj<> endobj 3267 0 obj<> endobj 3268 0 obj<> endobj 3269 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3270 0 obj<>stream +l!U:n򻵊sv\]Mm_AV_5 og) +ȊJbT+l {$8iչl/蠭K|-p"EJt-z c +^ՙOP[CG~8 =Īo~JFgB5P?ZVEGTG>yEtYג XV6vsgH$o|uaIb~h.O8xı,$֐K"w"D*ܾՋid,b`Cň]rx'g9w†ɜ|yKou}uڳ?huec\SD ޑX3uA@)܇ͦ4g/_"]EY_S-cf}0p[b)%n y׈B$'hߪ7-|C)bއ"c #Ŭ}umCYxpCO3.Bn{6xR z[00-2\)ԙ'L4q=+FEz!<0ӾѰ9GXm4"y}F_+n#isB_JiD0n)ѝT(H_\#{':<, qcoR_?xf=+~p~`Ce}ئLIQqd3.5ȣ=UUh'vCKJ+tqmVR >\:j$*ń.z CRhP$@h +k';n/)Y:TnѤĶTKQ?ȣC%KHV8Œ͜{6@KJiOXTXa +)g) U6cyipU_2N')CO>v0ȍy +endstream endobj 3271 0 obj<> endobj 3272 0 obj<> endobj 3273 0 obj<> endobj 3274 0 obj<> endobj 3275 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3276 0 obj<>stream +n<3:RԵbQ7g bv>|J8f*B* 3oȝ+ +ah£N J^%lPڛ]nP+?қ9C>"JF"Fa2ByfayHN!"#\"Vgv;ra!KȦq(1}oAkE5 Rs{wcs!K /<&pгwOoǝ3}G@݆-VCNjVv-RqY7],L0T?IeNR*NDе< +Y-ބ>&եlrJXQq0iY Y8Q+KLϘ6vS@]eeVZCOgS??6aG.M,F_đW8UW5:R@%zѩ3AUG,ɢcӉ ϓ`n70xą$y7t-^G#*UegX43nYe %t5c. mCH/R dț3͛XdFĎkNb!)H~7DB.Ds7GνKTj \:^ q=O]#tk<Zr4ƞ0L҇ (+{/PȐ:fiQ^.la≑83k,HqcesYt`QŻ"4Ɲʴ0klLEr`k߀,!R> endobj 3278 0 obj<> endobj 3279 0 obj<> endobj 3280 0 obj<> endobj 3281 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3282 0 obj<>stream +J?rȍپğev$ԡb &vޠpaAGXڔ`?TN ^3)hQRi)K49DdʐAwc@Цg%HJa&V0tD笵mUuyC|YXU \wb1=ぴ8w;e/)-yT`b0cn6sR)oOy ک$ v#-}밈8*@0'ֳ7W5= /(rGQo$49`w[h&`v{ڕ. ln7^ ޥDZ[,2Q}=X}ez4/Bu.V wm=dÛ7"\i KQi~BbA r4ftra&淏 xZNheWwoqbO?_CCDPQw"m!V{i=O@w,w~d|Y_hޮP +endstream endobj 3283 0 obj<> endobj 3284 0 obj<> endobj 3285 0 obj<> endobj 3286 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3287 0 obj<>stream +06G\Hh12jg +^~rhP"X<*w}v,u>쏭GaQIvMi J/}b00 Ýb'À :թ7 +F.ccJjjOaZ5NNHwm!tc̡J AwDس,yJY MݑYJe` j +t0&9j!Q$69SIDL lro6Ku&x1veI8v'`DmRB&|Z> endobj 3289 0 obj<> endobj 3290 0 obj<> endobj 3291 0 obj<> endobj 3292 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3293 0 obj<>stream +/ N7}@ Rַq.r2~}+ sVW矪IEm B=Iָ(HDjI -p}sZ&yG4٣MﶗaЮѫxk%ā5N֜V/Tɏ&챠BKgC/{7.Ukڟ1Z|1DIeifg0xڰ/ E%00@}7"bmgh!aS8)Y9|$ДWٞ%9*$Eu;

> endobj 3295 0 obj<> endobj 3296 0 obj<> endobj 3297 0 obj<> endobj 3298 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3299 0 obj<>stream +$aeK:$iw"+1eC YPj2k'ޡSCa3՘)')1X: J$?VLx|yh̅p1O_\=ʳ}ҐA" +G$D!WcwBu݊XM1nYNUnz±|m<݁|>sj6`8lr84cJUE.BA$mlA<&>>LP(u-xJlᷖL/_{^H.UȲ$>mATf8 t00tJبRm붩8Lv$ξ\zuGo\zv]ґ +VƇ8nII-zNJlm&9LiH++~lgXe +KywW +Kf`t|簩'A LD3tSzk[SkݏƂGXAg֫o^zKtbu)99~܄d|Kz;N"`\ +NQv.QRʲRB&ƋX~XĢyw0U6TlN?A;(kn8Ts'zU>ey9j`0"gNٸ +zJxd> endobj 3301 0 obj<> endobj 3302 0 obj<> endobj 3303 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3304 0 obj<>stream +#=Kb.]Kt:_Im&2uNPQOaOª^!śkqC8(FI:֖Alij.ЅKv#^$9U67؈P^O`л_ +=1-+~S%ab.{$e2/y0XeK%K`e"=99sxD2FK2wiWWLĩ%-ʴot}=}e^ߎCw&~ &DsT Gp\V ]q2WF?/))"SULx ^iH/(ڄpD"I&>ndN;6?ma}b2LWi=ߝ)IVjM}'fD OtY53ك;Zo#d8K~C :Gy>\fG.5*S(2t\Sf胤Eƪilg0ޟ&H'HHp&ZTy)3d.!>&^%u0Igmi+OblMe$؎}C~TRŜt3T-xD|Q$Y¹En8udCɮ[ckҴ,&"bwRab(E# Jk3]g\0zǀMpF?&㬿iߌ%OtW=ˉm%Ȕ WN,5x]LMܼLA+{%H١=ݸvwq uFGÞ +endstream endobj 3305 0 obj<> endobj 3306 0 obj<> endobj 3307 0 obj<> endobj 3308 0 obj<> endobj 3309 0 obj<> endobj 3310 0 obj<> endobj 3311 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3312 0 obj<>stream +;})iƥVNnfDTe~>Kmx9ob*H0R {}$f`⍍ʗB!;=a$WFk R>c`P:?ݑ7.Kf"K*S94.tpQmkYif[KA"2 1, n("th̩>'5_dnVoA=]mH'B&@zYoG4Oa$h}}uDOpzkH[γ]. +~y5OįWM\ tWO4PGtٛ>9 eOϒG% &"6[(Wk R#+N ; x@(W#]ۮcNgu ktỈJ7u jsIQ*ӯoj6{\O86fxߺmyIi6zC! }ȓ_ g.؍JQdJ8 0 =Lu>{&WE{VB;*H>*o^8,GGg(iWSK,v.;>.,7Ÿb@W;.Fz 귩/v(W_blIsɀ|_%ƐߐO&/q ou ,'vXjv]œ'"y[rW2ˆu=^ 7ru2GE#WޘOQ f83\| /)dSЁr쀺@yf1&G^C$h6(?Fz M0å/> endobj 3314 0 obj<> endobj 3315 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3316 0 obj<>stream +B +x`]:o7gj|.44Lk[ݶB19ee"g`HCc1,ppTp +~RI9~ =V%K;RM*y|b? +6j^HodE"U¹[@wn#.f5X KT 9g|hausUdrYs@Љ`8SAi`HMȡ/{[Qf1|1^VL6Xt_?t,Ï[ݿY9̌@8[q1tLP\ J,S@BF+lb$c:DD*m}pT‘h>q懨P'mDY5YkJAF1y 2Ed9S̏^ͅ!s΢-Q`Uvqsz1/wzIrH oׯ=n%X MꢷJbTG*8WHR' \&gXH[ˠEAn?Ub_Nk ʔVw;A0l|(*/34Cwm +@4Áj3 Wv3ߏfJt. wlr < p^@Q9 +QiWʾ;9-fo2ޡ:|iTri9%ᮛFisԃV,$MZsߪzu +Y:+N$FmQO@BԸ*N۽N7760E1y " [pu@ڲ'#f5!|Vr"F&H:߳}9L421SOtQiIh>si]Ь@ u>m~4/Țm>SVLLA|A +@6ah71U>njo +endstream endobj 3317 0 obj<> endobj 3318 0 obj<> endobj 3319 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3320 0 obj<>stream +z;dg6Jfxqfũ3Ne1{뇇x@> ֜uK?;)'k03XJ!mN&|Brdف>l)%&/$!6HiMAr(?cWz~쭱*qOqubO-W1ZtWv.#;Bb +@BC>ulifL,3[biTR>-HӃ눞QjNަ{A __Axk O,(| +at Et ?qUuybImF^ˊ˴t$sIQ?v<nPh)5F9X0d`!hi)lF h:kDi7r|=2O{!_lt}L> |F7x0=1G͙GXKɫd?DoMy^V'C;#'_CE%\/̽ϒ4q 8sE|aTGqzxwŽ>`F~c%gtiojPU +?GKTl Yʒh*V/;/{J si^ =?uO4%P{LN/$gG ;Zʄ&92Wwth frV,`j,ħnvؕ-Vhi⼡_' +]e2/&\~2$;+!43yn*e^ko.]zj*KY +0n:;:x?ƍ?E(^dL'5(]l{G|K_R2U> endobj 3322 0 obj<> endobj 3323 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3324 0 obj<>stream +{mdPJ"HNmh"ưugwز p$Ϸ[qC#l+t2!=ĢhXI 31i X4g]ր#|a|]?'6:zF :b0*@K`@++a|a9 p$GepΏ Y9w#@k)ӶhLicN -%!Q7Yf;iyA+F\z|wW]Fu`|S<OoC}&/¯{ Aa=բӗc@ +t| +bjx\9և5]@fuoikV^L"Ns%Lz 譩>Ҕ?~}Jud.m=#sH=P 5Ay1w<[f_Fêj͢4͉vەNvCӍ,~!R55jct1#>kv ơogiTŵ'z:]O*EJ<_ <;}J%|ݦ]KG"x76b/) \BD' 5p $S}3}3i* l{tM$e9*N'F6{lʳJ}^/Ŧ$lV03$rʘx\)h[4ts +?%-b';bޫJWAmHJ@[;dt: +1,։<> endobj 3326 0 obj<> endobj 3327 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3328 0 obj<>stream +rPYy]׽8xWږl$:X4 Qnq;\~>Yc%l Y86ѥ(v“(Y(вs֞JVM񬗥]fsb"&2rJ53`[T9*5yGj`7z2 RȅFVկ4֐~$m[nY7ᰣH ixEs7*O2j[F1]dmH &mm]o)d.aQ<(/⤭G~o12?'=258D?o] +>Hfc9Lrgd({O -C޷ # Zslm2xJբ᜞7s0sguj>LtF3]~63}qgI bA;_ +6ǥXUr cQ:c0S4<S؜Gޙi#\o%) ;!/}fH[ދ*hZ^tg\sSr.a1u%S 1lc|E1vaz5.pҨ(:<8MySDF .mVlJL*%/! )[3O9E0_N(3Ftj₊d{lg٩[L<*70Av#$({fZU'^ì#I+nE5x*pLB>f[tG7mfD> %6Tϫ>q,<B! +mHP31-ߎǫ'E Yɝa阄//2D&GvzJF>l eK /+i9N+]\ +NύlO\o@u`.BjV2 +endstream endobj 3329 0 obj<> endobj 3330 0 obj<> endobj 3331 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3332 0 obj<>stream +hq5M>OpZ 0),xmC6T-Xbrp{e6*x:xy8]Cs:qn9vd~#o)( 阩|Nz%9F=8Fb{wreOFƓ\>ʂ>,L%h!WD~j]~>?~'-9;鐯iFy Al m˶QbZrt!pX!4/gkqL8d.B+#v?jeTT*[DLQMnOٓI[sx&%!: Nj#'kj(uF] NlD<`zYUiogҸjI`ny0 JPM-Ռm +1H>mO*Tѫ=vQ6ӢƾW/€bHBY,N{KvmZQdWbgk+ 0y #6z}gAQVygU~zow aL]L +f6ԯ3eMearU`m_3x僘7S 珋K0Xb:kG^A  [5k5. +·/)uuF(p s]fӊ/@$Q_'XƻcT0IZvF.`MZ֪cqegʋMs9+1-ٳ^?tf8rVUkb>䠽L\xկr\3~XDHf't*Gְ otbI4.Qq T-Ʃ,=Sf:֬z4i6 +endstream endobj 3333 0 obj<> endobj 3334 0 obj<> endobj 3335 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3336 0 obj<>stream +* * tW,,/ $nP$+T+S BxER0DKq:?gI2~ycHqg1R# qX6fI,74@E[8OK3 J/`uBv/];Ew7NV/uosh": 7M=;Ru.}SϢL{}^stBKVw2OQ֬jM}|IAaisAc`5U>x^T|yGtYՁ?[wwcñzA +閄6݅[ڟO0wST6{"V{_Hr&W\eG||Y4oMPUrvD-nW1Y0oAK#L2^~1U8fmSgd헜 +A$3% w]DBôNLsl/J 9`V"w]ѝ +;qӈVM^^!Xk>wmW\/{g"kJ..3 $ɮcR +xxrN؞V F0 +endstream endobj 3337 0 obj<> endobj 3338 0 obj<> endobj 3339 0 obj<> endobj 3340 0 obj<> endobj 3341 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3342 0 obj<>stream +E\!I*{FT7\ x2EE]_HiE֔e*ARF 6J*LJyxO/.mܓϪ%-tOzЦPAv YbO>د:mSz K S9l%hDһR].Lvl=?u+M^L%!ZHOM4f*XSԻ2jˏo㜄yO``eSbU'MȿS ƪp+)O#F~K\\;3z[g̭l0!,L}n锩qXFvff>UBqv.#r'faeGSEҨʜ맖ؒyJ)51 J{RhjaP[Ɣ{¿Ʈ5ꩾgb$/Zppb]8BCqN_ҳC\2oC?>]2Hecy{x^RX}&`}r<=[9U]7kΣ #o=Y{K>>E׳g|]1tJLCC@2l vɆX2Dç#%a/ #&d2?rtoK@4egb㱏OS݃l9jŨ%}ZyMغ`E?j9#8Fl-$dpFXkx^:_.Oģ +uhaXTo[P{I*&iߤ Gk*"IYΖÀzĪ4'! * '\}=C8 (>f&z(޻,@C4-p;_a o8/M f +endstream endobj 3343 0 obj<> endobj 3344 0 obj<> endobj 3345 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3346 0 obj<>stream +82v7,.cK?)zG8D#7[ y0gҒS-(8O +@ $eKKAˋD{ːi K?}vSіfp`kgk#@g`k-T1PSv%47=H;{?!5\n%z$f?~ +ߌKP:0yrIX.Qw~9km/\>|GV#Ρŵb)!7Ҿ+GEYrA%~]/s5F91ǣ&m{:4 +2vHHM q|d7/EFʗ.J(2h P ʝS"tLlxA%֧f)L,٨m宩Q5)8b:m5݊X;чVフ.ʘk8o*?]9@"#:XY#J󼰀I m0@I} ;k\ěl1`Nz"l>-UxfZ, bDx|E b"ao"1]"'D[~/SxCF$ݷ^.)b_43.fG`N.!zK# YdmahMQk @,c`[\XȬhO+lq=hRCil;Ps\u2O;18bzW]hm`ZOPIتsMY捠zu%<0'(5YvV~'zJ8Ή}עTw +endstream endobj 3347 0 obj<> endobj 3348 0 obj<> endobj 3349 0 obj<> endobj 3350 0 obj<> endobj 3351 0 obj<> endobj 3352 0 obj<> endobj 3353 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3354 0 obj<>stream +w`ElHź8oJ=!Xzfm/s'́ + n> AG&K )!7T`% xC 砮(TlaՌHc25@R=(ʈn_BnZp|%Hhhzo+O°V*H`ņOMط.g@< 4ގ +Hn/tΫaܞ䂌i!Al!@>So>֗CFvӖSh, ("of%jpeOM]-Qt!ɞH}}ш}D;W>&_cdwק`8_|rYx$rdm썮`p4n\"/O"<=>%{RzM U 9Q<& ċ 1LhsOhbALXUd-|n<mOJ[鞽JF2?;mum mqe&OwLNQʠ#OĦWMX[$RDjwDS\,8j܌ ]DAkro/wz*LK=TH7*&>՛*Kw$=v#Ymu-4gPtĆ)*Am6ws'c Eo_egag^S+7-?9l+wa2aiqtDx}O) %Tŕ}11E j(H)rtsƫAy|Q[+ԥla_#ʷlC.sm +!/d*ӈ1֠M',"7%ƓWJFiO|1+X A N(x3$M_A> endobj 3356 0 obj<> endobj 3357 0 obj<> endobj 3358 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3359 0 obj<>stream +p&0 G( 5tPn_%03E) kzm=-p" Fp"H-lKBF8j_?A4:́am$~8\lf&.QWo.k5;Ӝj$U˳0NMB{*qFY銭 i'}rl|/e)X<ۥ v )c][.OBTD96`[6[V LeBy2}{iu +@N %@mk6Lu%dC(aFee_W'rlJ5"=::Ƿ)kuhVe"6-y_Gڛ 0{2[VPBmkT\ ~sœ?Eu)GqVps>0y"Cj ZlM,1w7w[m& +ݛ|HoB=$%GY"K=8ڣ*6l/Nz|yK`=rKOƤ9^TU'J\}V// GFc>=4bzdB ؘ~CDW5 OؠH V|^biu-[L|Mʀ& bF…l%.L#ǘǕ:`"/}!C5nߤ5?OV׹`p9̋*ŃrPT&9jx{C+oϣ*Il0bȒzKrh-7"wPlb%\tn;L(t[ƥ3;jK"Di<ۿ=(Bf;s?7v2⥰.x2ٹ4?5yV^mJ1Rr`DF{V1\;캲. fΪ@f9Yͧha64f5#ߓ4> ~ԛh+ +q04Cu4>du4x̌ Tf6+ˆJf٤d(6x +endstream endobj 3360 0 obj<> endobj 3361 0 obj<> endobj 3362 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3363 0 obj<>stream +].͆@D8Y $#IlESݱ":r6ϹoѤň/`Ko +6בOÁCA4J 9^B/q&o[{19h%OUm-wÞ6N5Gy\{xkLe -rB1b=S9C:,~7RHIC}0 ʠ1*䐉Mլ-桟W\#1b"Nn)fR_Qqӄ3knZ}Or|.Bh임OԎqz72%ʧa6VQbo7B%*+PJ1;͔?~_G^EiJreg@sG9T?}\mUP.(mMh`t)ø, GVg<|6\)>ht7*Y_[oG&z@|3(2@;Z"c@ lY|pab͒"Nľ&NvtPG1j"v=>c/u!BKjE3%Ĵ1[SyDDra$YHmyDa &Q\!'n4 jԚUV`ը9> endobj 3365 0 obj<> endobj 3366 0 obj<> endobj 3367 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3368 0 obj<>stream +wB97Rv6(- h*޿)HhB\7$-<ۜĭ5vvٍ4Xv +K%y4yh&"`Ud!A!8rkws>%}c,iYo"m1-#rUu1.b@-@'&xU +8 +?^wZ$ԑ]GGtguV1#7;זӌM;;cqKַi^6Re[wԙbp.̑B4N7N@1eS=Bn +D1Mhmp==g~B r9jk ؤ6R(gґ3XОlb-F<*_t G;T@NC ,Q~#VOm }``ݑRY-:7dpm~yTV*ፊ`̀+,Wsmh y%G_Ae\fPB8ګgYK4BRziKŔ6-m_~[O ]Xz(1;"17P+F`C(|uI3o<5D6 ޫvhhʀ^lR|$.k%Hsv5٣`msX_"zcd7vͬ[eW4OVfec|$1F7"Gǀ Rp+?K@b!V\Ox A#'ݨc2?o@wծ@dwx(*a;Gez8/Fx]6?x{49́jGҡ[.&HSy^o5ar+-,; *UUftx2H$Qc{Xd9'9Ee}+ǰA_ᘻ/*򧻙/Am9@ֆc0_eA q 1ܬRss!_.l.2Kڨu^5e'9՗¨S +endstream endobj 3369 0 obj<> endobj 3370 0 obj<> endobj 3371 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3372 0 obj<>stream +?{|ǓCKtܸ∜?É |9fJ5/GG)0]xKDp$٬+Ef2 ^8f$~0{Y}O8|hRRxԕuA9Z(J x7`ՠ3]0t$LѸ`ٚWS|MRE]q2Ŷ&&r?-GJE-u(~ pEvmf&:"" $3$BxH[weI1px.&r8%^.! &:E_:.2؄GEVf#!F_"TGb[ċ6M1BM0J(w +g iQTm( =as5?50ǽU>gӛshv/e̕34b"jP7dx2wUkKqʭfÑ&;+> endobj 3374 0 obj<> endobj 3375 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3376 0 obj<>stream +m-8'\bW)JUwi[!傄LĘG T~HO;lu$&l43 Z,Ot>7M¬T>BH2&_vl: 2"3է]BIhL%)5)nv3Us\=ry+EHcD45u!&GtD&}g3GRolri0YiJL,"^$),kUnBj,jI6rxﶙ3T ȇn枎WyLU? gWS@0 ؓ`8ѩQ"T".e&0CoR2y`|T=쩿,}q=6)kX=Z?ԘEKZƓȱFmܸ'xPKoW-h lOxSk&Usِ6^*dDzp +ՍiY$| 7-^fs=ܪ +endstream endobj 3377 0 obj<> endobj 3378 0 obj<> endobj 3379 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3380 0 obj<>stream +IP}{_)E^уֆkո?}HØ2$Uwj:xbT-;7& Mw#ѥą?Pȭ!e1LD$"'չff9Zr{'_Nܭ.a7-yzzm깏H/SE F/C*VnF/7Ž,Ԝ^qAy  +r~Rah$0_箔L;0iyFUE?c࿒@W|a_j /sId7mb2M"lO$R'#Ĥ@eЀyȐG! GbeV$KzF벲l-4..ʊ6zQi@JUonw$wޏC7Ld.foϑ*Í%>~BB 8G^ +(BQ1{5@h UQbi2EaZH&S!7oo}x.bQAZBy_āYZNHQpd͚PL!fL9x -JɌ"Nej`T"F}ωJ9t${2^n* Z{ERcQV&XE/qƷ4nx]V r&QghvĤ<>Z`9(/Q]̝uAq$F<>#b(DL/clSdlDc./~T:r?Jqs :sb:IJ:5-6K1H/7+ZaYN8'(d& 3 uuyo6s[Eq2iR1`]p^ +V~`%V +endstream endobj 3381 0 obj<> endobj 3382 0 obj<> endobj 3383 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3384 0 obj<>stream +Sbh/ӛnh'.3 lY+h&wfXHe0|Q&=^sEGSlsi29Ad1X-0BL8nRa 7  F4* UA%WryFsyD.H&wzꆜJPwLPS eYťdZÃ׎! ﮝ`EAU&P 2PYOO;Ca-FhpgVmLi8ƊC(:GYg,p$NCn=XwFZdx樏߸H!h 5[cв-TnZ3> +H|?+LQŪe{+(`eZɉTgްhW];kÖR4Ai"${*:{BD^3Dup01\/ uu~ɭ@NUc0UO6э6Tt + +rP˄e ^O _`~TY_ƽ h׶p|K\k%8\Ά8=zaOR"tW?-6™H^&Oܾ'OQe}o3j jp妱U;Fiv=&ͥ¯Kn::oB;\]}ȡA``5\ 1Y=hv@+S0Y׹qS&>71W)Z_LHV,q_p~2{m˝ݘt+*0r +endstream endobj 3385 0 obj<> endobj 3386 0 obj<> endobj 3387 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3388 0 obj<>stream +,>,-vL+(\6sn(D'vO2e䞍l]ٝ!=L qPs簾A&{ʴb۞6ЉO8A}<Ie9҄10~dlot#Q76˝ $q4LK4r'pA$kF4EM#2eMҜ $/'zlg^"Q k~+{ZP óp>,~xIXf Ҥ8wЍp \9ͪ灬S54$2Imx1٠%32Ok)5tTHjrhӵ5 +%m`VțFr[̹9GzljKzÆ+ j;7̬=?3X`D^G&^| $1V}2.LIcٱ4#1/b ,e +cxx4CV&0␂t[=Pg6sL?$ěUxheGJ8Gja#QP~:PoSl A!u.]:4ơv9㟧AUkT\!~ SϺZ, X*RdEjm\ !<ϔ#GX"킐ƑQ:/mLz#fgca{7nے0'imGddU'CX& X0a0 +b +endstream endobj 3389 0 obj<> endobj 3390 0 obj<> endobj 3391 0 obj<> endobj 3392 0 obj<> endobj 3393 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3394 0 obj<>stream +/V1ȓ"ǴW+byj-0w4F߷ͲW~#ZX`iĬwMR1hf&JMe#yr'~?h5ƶ+LbM UE0f(-zh2\½ `eo n{Fn Mf-=}9!#4 ]nA2csʁǕ&UI$×6%]r78jH1f;Rq`kzow b_(5A5fs@0Uߤ I=~m! ;?bd55芗A/,*1k<3+/z^<]Ŭ}PiL:ytCHDJۧre"!!^Iת$D+f\OXcbP̆!<4;:.MXF-pI=yb)Hk2+);DdvVC7WR4c!uDhV`1(N`Xu +endstream endobj 3395 0 obj<> endobj 3396 0 obj<> endobj 3397 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3398 0 obj<>stream +QHXK0jcgRZCiu]VRͬ(ҾG!"!i.ן+T $!7d0O;6`-4o;ǫ]r˖mz;-|F`> ]<6 U ׿Y; C{Z•SO7-i=e&=23n[ø!^; K09RɿhT!ywoF8xj^@p &Sfi4kul%ۙ5X+Z7{S$ +\wߓx7%ʘ#>@ǬYȌϰ ׂl=uY\fbk&oқ]KuI^>ͺwJH'g+xC9fm<$PQbsj/`ӎ ?44iD,*eF,M$^q\V6-|6|h$05uBI@eҘ5#J&@Q +/'!YE]>=a9 ]H:m|$Ԋ18B +͊I;Aъ8mLW |i2Qd bl2l?5QDăU5}Є:.q \_N{(1$ . jV2ڶmj<[Rz"GUfˈ/Y +endstream endobj 3399 0 obj<> endobj 3400 0 obj<> endobj 3401 0 obj<> endobj 3402 0 obj<> endobj 3403 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3404 0 obj<>stream +v`Ef6I{c *"(?)d;Mk2D-|r/f!fub¾5͗XWG6& 8]GVHJ!|`| ]X$P ܖrDjzBmAq 2^-XGE|*JeUjbz1~\i8Qza!u*%$*yS9#R^Q:O 4]F KP+0cG4q77'4Y$(iʄ)=W|ſ7ȐS})ҵ`[4m(Q@"ΐz4#X$$Tpf (ɴٞ(L3 +UN3Ly55 pBtju|!,2e NUF.m.mx30m60؜`/7'YsFb1؟OAX6-Ty%\y g;g#˸zC;g./Q҅e/-?sQ+4/B6'Xbw %W:Uwvꌲk RG݈/D+d1|Ŗ_8.dّx&yY;ʱ3#70{F0to=!wʼUoYp K$M +gM=_fj'pЗ;iy_h@ Ȑ)Hۙ*YQy7*)uLp&B> endobj 3406 0 obj<> endobj 3407 0 obj<> endobj 3408 0 obj<> endobj 3409 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3410 0 obj<>stream +V9ya&臿_ >oFr͆tP,fHhk ˜0t2  \!sZ'xܖ(\3\:'AT\#ȧ۱UeM 4y?Y ٽ$ AN|g(jT6V-6;w.Fh3֒ +Pݺ/d/r7 mjR"`t?*ƕZϳaJg 9X{b@~uU?geJG|W@Sk-G.& R=]@l7gc`1қheXRv7Y1gUPm ϣC$p >ƢJ".MZ/U7@ L="yAdFMX9t$>x[6}Ť)٪ fk/!51-cJb uW&$Ra9S)ei K|ȏdU4Kw=ncgS%v`2suߣZi@ Skզ"irZE}j8 afԻ*^t[?9 &ּ[ uJl{Cwotg47-M8w Jc)X|OՅRǙo .6^冬#14HoCx|k=~|{bsxFz\^uԄ|6?PTQcr!Lqڥ2SA +$3=S!N$rCJ@^v)is#2,w1oϖ.^yXDL _ kiZ]$3@Nb ;F /^SCN[tvzW\5MZ[X?|x>gn0z "C Rk +endstream endobj 3411 0 obj<> endobj 3412 0 obj<> endobj 3413 0 obj<> endobj 3414 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3415 0 obj<>stream +%C̣L +セI/,|P+c\TĄ& RdQ}3H?k5π~6KQ!{B0Pj#}T)}e]w}n;7T,YCtUަdY87FdBOS[NlHygԆ8L *43d棏)vF Hmw"ׄ90;hJ3ĆAƩN^ʋ?cɮrEW~70c_R9zi>kI6Moknq^vtZ1Y_[#%=A[-c^4gDH@zJ:lYٿÙ,g0j}]J!8U@œe~Ё Sbȶ+$Ւޯ7yZG|NTrD^]wcwҺE-Ckm?'=>pSCUl,eDWeڤYl_xX6s(pv55ܲR:&#E:!:ƣM'd4v~GڇB{m68Gђ9X!%a3-S( w}\C^(NNmHg<,58n^\Cf*n涴7מ#q:6GiA!8JsLG*_%gWV.QJ54,ߡ.%މ 9=UxYgD +endstream endobj 3416 0 obj<> endobj 3417 0 obj<> endobj 3418 0 obj<> endobj 3419 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3420 0 obj<>stream +a_~94DkS7~t'Ny6p Np+\"I44bW"I4|2-:0ds <}vxG maLSu*H"Pbsڪ$(4|q:'ܛָq"&ȞJ"R%yrT5+ADܶZecΥMh AӠ0KC!!#t 9fH"93q + Fg +aG4I0+H#o}݅T+jUͼ#[oO lU\GhPiw>hJ]zE(\jEOU4V=e* rY ,]N~yi_lo\.ďwz2팖p.l9' a832JcWؼ)֫Xz6#gRo(k4fNzU"/ 3K :CW}3.hoy(/b{M*r?gR1ӟOh-KZ^G +/ +G7b:mZI,nXެւ֤=\3r +4wqeCsbƖ8R՟wi`$r.ͻ=C۝8D0mӲ_܇GQ3cB43UķNv3 VpcՎp_z{Ej{^D1{K $Q> UHav  z!].]b9fl:8x\ۘP֬ |L-Xq+#ޭhR,u,eй +`1t7nwF7t ! բ۠pE|1'rfI +K|'ӓ탫 ai0 sIѐÜy:LfP@[8#ݟDRyS]ϻIk_WW5@[A`~5"DAzR@aMXG{,"ܣra!9YbH/̕<;W(A +endstream endobj 3421 0 obj<> endobj 3422 0 obj<> endobj 3423 0 obj<> endobj 3424 0 obj<> endobj 3425 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3426 0 obj<>stream +C-)~MC.,Ygq*@zJDhP&3| oQ,{εsv2 3*U} r++^2>b[`wC(ohR:&d'*< /҂.5^s\3n]l-4!_FTu'/b‰ 1> } 7/X/}D2?rm“<66# { 'qG;6EVy|EڼüyQ JZ"8ҠCuvw#4,fk'W3bWn[7iFw\RS +Z00q+(\4NW|^WM"hmsϻ񻊸IԹmKmKAإ*m`&Nͷ + gbX] T.^; pl6)g1'YrعE`TG|J0B@g`d ՠu홒`E+wb~٬AdaReL-O+ 2 h甥 +endstream endobj 3427 0 obj<> endobj 3428 0 obj<> endobj 3429 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3430 0 obj<>stream +вDR:q9$.!.x:܃bi9ـ@a `,iBAE l(t)W{."JȗDm5~rb{;l Miv!fPC8N +6J^YFfhutƙ`ldaV`d*ͫp~b/'p p>;:-4Y9yqN'Nf0ux⽥yKO<&yr;ݵ-7F`q^1T5Z{VK8oAr) ܋-dx*e+mEQYԾ+n;z?WjkMtjRp8^T+Tw4O8i`QS̢._,3-2?2gKCoa֤RM89t´]z upF)!Z#QHCg6Sawc"@i=PE4i 2}V\ +j8=>L-a^F~ MYLƧ[\[|r 9#7{s:ܿ-O``D0/e&Dp<Ԧ+\&^Z {֭תg_k);G< +DGV8i#$gOuO/r +[+:7;(OZ=4KKFJKZQ^kGo55ð-?J}ɑ9/pMm K3)週@oiUU7,>1=3dtMDg82be\D$wK/ 1:'d-t#P8l'p1>T6>hrObO} eVzzX :;t^gL_AQ t uAއSg]""L̻b0)OxE{nNoL +K!QVlfeHƔ| +endstream endobj 3431 0 obj<> endobj 3432 0 obj<> endobj 3433 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3434 0 obj<>stream +hn06?SNy+N9+'\ {`BbJ].ƫco{8^B|p'G=19ZTA~FCYĘ>aݱHhX8ɐi7HʕlX'07 ,q@tVU$8G6oOIKM?׻B&XO^NPդD ,}#H򵍇=.|'dZyKV2%mK~~m2PVBd]OPփWGcǥTy TG^=A@+ Hݮv!Hzq4!yB)#2_ Dpӷ@2 ;~`鰋=F~AU]˃8 kB:AqF =YʩLIO6^gh;c^ǼʦיclhN{Rmf =] F)FPcc>1^#!IMI>7gfJReޣL"6P&_ۃ }duHZ]9mWJqϯYXAfJEomDQ1$"<~m +IN@ +i` SpHZ +"hhj)_Ҭ|jNyaѝpGmrn6}Яϡ(ŹA><Β++ջ#uTsXVY*ӸBGoKd'Ym04P f8{yT!+4!t²)z1KҜʪЂ FP_ͼkfRAV76b'8rzH]xTK W$YD6A(?L^} L!nU&FXa 0 EPg!O\r.cԁy)G_n}~ +r]=1blx%g h{ݿ>j%-h ne_-+doQ4QtYv ? w3ժf%OVw=CB|2v+E'˜A^YhR ph=4NBƿv݁*^uKP&sØ򨛋?w@ : Wl*–WɤFVBR7b&wNJ\󥵌;]Mvb\*f{0y6Sjs4ux˖q;>x֔P6()>[Q +endstream endobj 3435 0 obj<> endobj 3436 0 obj<> endobj 3437 0 obj<> endobj 3438 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3439 0 obj<>stream +cOdq4)ߚ.9O`O;7Ye\HLގD]vuTv.i̖.pzp3ʏt@u_A ]Qqչ2hZsf$%n҉Upι8Ka +}Hil: O^i:gV=>܇a) Q>|?_zϟc3jj~Nz)0v6Ti"y\m(t uA-xz/x;+FQ?nRP /OiŖ-fodyb^uFc>Ǫމ^Ψe¶]YNSvSC\Ȯv*)hnT@( gg1# 4#z}V Ԓ?|A05*,g7)u,%PesF&ҍ<&x_\fQCYw 9u睺팏:-=#ŷE(IzJ6&@M/?d#i3d"GZ|bLWXi+_ +craGm|jQ" 6dl}{m@3乕2p$G[+ 8J2R2g}Ivsg6$Vfa@#b0G+a5Ud##i˙H9αlxݷ*`C @alYn`/FՄtw3"4DŽ;} #r7 K{R ¦E"ry7\ eyEޞot$`hO)( +L^S煱Zk^d"族q,s?=)`RcI„}Z6dꏪZ}'t)A`i.nH>Nc,6}#Jn@K,2O>]O%pf^p)u_!-:tЧwߝ[IC0LGFVө(l'3 +zM;33ᬉ> endobj 3441 0 obj<> endobj 3442 0 obj<> endobj 3443 0 obj<> endobj 3444 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3445 0 obj<>stream +~yGH6s(* +ȃM< OEHY/%bUs18Ex, ehzgt15a~K:Y6#0gfin2s15`[_7dlq煎UT'Zh̳4uiIh-Pe[fX}|ղۉ|r:4 ?W3F8;:gY!!.DoyٴC~DQ\ /@C{R/ :U׊r_-QLxݐ{oW ؁b%hW~|Fn@i(VK[bq`F 늘 {!) +cQO$Vw\jE2YL GvހUoחܑكxK\E u4x?}RE䕚184.O4l+0b*YOڱEDr >F9w|s|$#X i8*?HUު?w>IcT?C&,O3v*Dyɢ[?;0.> endobj 3447 0 obj<> endobj 3448 0 obj<> endobj 3449 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3450 0 obj<>stream +rZ(v@j +ެ# R\ .]TpʡW^V2I(~~^3V@))PZͫyaԤ<(:Kކ_B ȫJPUz2h H1DҺm5g&FrZq{Ì.5ʤ`F-:&ЁJCa̋B߸recmi+x.srYQLK٠;% @`fK?>BJ0WҔK*#81_*Un`*GD(po*!pP!?P+mg.2Ȉj ťߌ!^Y迀^苐%u5v}Ht8Du:67Jjj+dM +lZ24ͦͮwV`7&WuUl։ *0bؘ(38 #rTEn< cI~PKђօ|x']МN_PKBto_sV2vk+J͖VWtqyk1lYP`IpY&Fo|oAJ9DWu:uߚy\lmihfwb.ODI!u} ^x@HjpZsW<"Z; _hƉ@}Po>!h/"Kգ)o9!6,~ޠg6VI\. \dci oOy8{!JEsLծ #)R!Ul=*/w ڷł2m"CUBfT3>$i0 `PYYg{\p#+.'4qu 㕎nVn_w>hQVpXtg!iғaκ[d*s?Xݤu~Jw\Lб +endstream endobj 3451 0 obj<> endobj 3452 0 obj<> endobj 3453 0 obj<> endobj 3454 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3455 0 obj<>stream +3h2,1=#& ++]ٛ`jH^u\욭I8FU Q2]!bY(ɥ&|Q(lF*' N9ݱD1($t]6.νY( B$+pk'&' + O+-l])]m'dhjZ2XY$@si;x`d,xx.DR -%bCjEn h59j 'Ì{~| f4^S~@\j3460*\Ѱ6"n:Í%f"ȴ4H +\y6>_uPН2t˘WU6sCO++kCg]#%]IH ߅pvږ.jpr+GJZ1`SgB!Aˆ%Vm f%^nD OԤ*)xTW1^XsMcꔋ;=a] gaΫ_5h<똥P>J6מ+sKga +3@Q16?BZ;LA([Hau*^*Xq 5d#oIlj؟sNt,=R<-=#ֹp> endobj 3457 0 obj<> endobj 3458 0 obj<> endobj 3459 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3460 0 obj<>stream + ŪVgSܚl .[7>"ዾm{_~'[VN +WϟzI@+;}A% %4eNjP8D YgFVeL2Rӓ&5yK=A3"Q|V,t7ڰ.k{8 vX(&vG=luΌ+].DkdTfpp_,a8 232Kyי.9;RCz኿\~ՙa|V&8XE6oھMS'Ԕ#x>-胟 +`NSAQTwd`;5j@ 9"ݭwl ೣV}²c +DKZJZN.Tl=:"^je +1/[eFn?2unjR-?GlDWRq.ak] Ua:P= `xBy/;Z]o亢X|4B ۲[z]h4&h>OiɺWul}H (* !ۏt$/=?g1B|A;ʜn+i4"!Kq,h͌{H@X|Cal +`Or\,Z_i&2Gߙ[.H>S' .z1T$~b̍,0%$ҟt{o%c#.?nR뫒FfCIº1wu;,ͽ]X9{)|wRԺƤsAܥO#Ƽ7/T7pԼNa[(4 +!MDm|:J &KXHb0fcqH\cIzYU>t|IQf_UZ5TRwޕG)ňo녆\U+B̆3hX6X+*[]D>}B6nk`'db}'aU,PՂ.*Ϭn;[-7n +C:hu? 7ceX1oC)0HX +endstream endobj 3461 0 obj<> endobj 3462 0 obj<> endobj 3463 0 obj<> endobj 3464 0 obj<> endobj 3465 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3466 0 obj<>stream +o;> X=tYeJ%% +'rcBmG>ٛVG!xߚ1g|7&ܓN7fA + +6yQc~YJ#d <ǟ#EUy\K_Fpt%WpF#e? +) +dE? ^n"LV}[ݟXճ[wmP + !\I7qDv$)&S=2qvKd>9u3 >QWE2Uh+O!}1}v;ުd4͞g 9MeA.d侍a +^3q}(BaWr +Q?s)? '; $^U @9-"YS3j'5?VM5k e9d%5Ag?ȒKSovm22w8l,&?l6&LbWK3`3t3t.}.0ͥy_L|QBZS'Mk8\}U^ 0`LMY +bl~6;&iBz 8 Kvݟ25t}Yܿ!11ᅟ-Р2[(ѱw4nI gIJ8n eI7ᛀ^2|UV $R:G<ՈY-l,2~nke?F=kVSǷC1^vU&AT+L|'Lr!س/ӫ6ګp$)ZumĄc|Ik먟PO=\@`ePX8{V1-u'T0g5PIl;/o|M>P<~pbĄTݵ+\%',eaV` ]a,HF`+FU.Ҫ-| byt>#SG-qpNU*r.;m[ XAl3,5ynRAzPi-NeA^P{Œ?MreM:jUL B gHk6V 2ԙcNg~]:%p<0R7ص xhQD?XAճ 9Bϕ!G/oXL€$9,W]9)Q6Kf>h= /P7.jI9_PFaΊ>;}p(:FJgZsyZS>7Ơ$&%Tq2V$ ֺW`cޠKtTB߿h'z`ȉ<^E)i7# bsw>i?/)`>cyp(c Q6oI==PACPМo 4inWǸzvlRkmjY `rT7c%9RnU`o|Xuִ[|B{,JZIP.YoDH%kgG !=;LW,x8C;O +J7k`iB+;vq;]|GG/3 9\@kw|zˉto|U ʩzҨ̙x3V1ܬڣ=8Vif~ǔ4LVܭb1 1<3RQR9MTU +nA> endobj 3468 0 obj<> endobj 3469 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3470 0 obj<>stream +grnD\ApQ9sv?J-޶Rsaߢṙ[?o R8T_Wym7'J3*:U; +ة0%1If +0I͏"jF՜YOfeѠ7G c5aQVEd{s4`! !5E.'"`s8jym`j +Bs~ -#@a4Z/h7m< ,28Ze5 ^M8]n| ^VY VcHW L2U7>A{/ı%_TgTb*ș|dًQ;;MnL_!* X*ցm a\s.Cχ7 ̾JQT:7XSw<^LXޢV47#zyʚhi=YD壖@[98PEg{g͝{`AKdsU>]˄5BŠ%>:G +"aTo܌B`ULg2d-pO!=`Z5 QJz5*yqz'v<[mO }KAI> endobj 3472 0 obj<> endobj 3473 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3474 0 obj<>stream +a jzvY bTe4qf8th]iʭ2pg~KVra功;ߗ*<** ℥E +ݛtLhC$0I H.D}_P%p$oAs>)(}켡!'” a_XML,rG + Q2\>D;gN^&ѐT_(͇Q˙a} Jy5vۣG _u=AX.s[IIDa Mls沖iBb86$%X< 螆Ο[( +endstream endobj 3475 0 obj<> endobj 3476 0 obj<> endobj 3477 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3478 0 obj<>stream +'dN~ȼr)4KMIe`sjVx.:g  RYhfHŶgZ5 +g[:as:6B4OXEj8giZ~gC=w@ -~BXM%iX w&c 4!PfdN581t]A٤_1SB9'vUe0\k/*H6Sɦu2[N&$c9uY'LlbsVWKZkڴ#`{?a䋷 +_ `>fW˸R'ejpGr'CSG}hk秥tx(n5J""F E9^ ˣtY͔1$C$X~eՆcmT(r싱+7kG*b[`Cδ֕ЬB]d )-cv,8.`!28/YC"@/q庈yZ +endstream endobj 3479 0 obj<> endobj 3480 0 obj<> endobj 3481 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3482 0 obj<>stream +ԥO`wV, Z4D _>k`aѢƏFVɤjnOcQVru0fry~)ܕ@,1lE¹A ][`4?~JbfdzԳu,dU +FdZ~*O;@Ŵ8~\H?} - IJ~1[W9QlD4Z?!k{wwm"ȉ +> \RSM+ҝS_ns QɰwgCq7%*PN/;K, |k +Ьdy,iYS]rK+wf|U=o %LPPLD +endstream endobj 3483 0 obj<> endobj 3484 0 obj<> endobj 3485 0 obj<> endobj 3486 0 obj<> endobj 3487 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3488 0 obj<>stream +QV]pKPWWb(Pbt b]҉ً}Ɯu.؂*RY9D@sLؚSID ^!_BվÙzꋗj*K1`cIs +h[.CjA 56y~@<5#nj8ֺT䌼\d+ξqVaIM`}N|iU@ +>@-`_`©Zśӌzgo޼éS::[G辐k{=S,GaUy +EœLKmT*<5pI- I'xm9=3y&ObR#V|9BcUmt^gHde8>B)αλ#9?xqVڡ5J-:c?~zjuXˋb:FkdzG8X 9MouބHU J y:mν[P.P_ !0Q2m ]*\>I~9^ץfyzGIe%B,!kY' ~B-7z.D +(tET6(\M5;k;Z@9̦'{ + ׿_,] 1| +endstream endobj 3489 0 obj<> endobj 3490 0 obj<> endobj 3491 0 obj<> endobj 3492 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3493 0 obj<>stream +ߝ4ilԅⷷ߰ VkVh}Ozs0!eTlLE[܌Ie~ҠpI{Ө?o S FRxEY7'qͫhKvaterV蕼OMWŸ 逆w<4hZsMzs+Rn<7y}ĿӸuy2+rMG_$OEw$}9c)6gTMc"36n `ğTѮQ''"<5WW$ڮ KXVn| ##R^oDLSm:4:%a -:Mns+*GQ%sI pmdZRdIǾj𮍨NZp [MZo}nM2p;o"ԝ7k9XgntH +q Ur_gaaf<Fo11*xhƿei/4B\ {a5; K靝P;'ݕF{]A7R fm[+mM|9μT:,O:ߍΡnS3&fG穹_u2i#9fwIg†^Yj."W*ҟX|$z\Pft ~*.YNRIpߣ˖"XBKE> endobj 3495 0 obj<> endobj 3496 0 obj<> endobj 3497 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3498 0 obj<>stream + ?v2?B u>{6!H T8O=1ȍV _ͪW(opZWRFWUWYiҳ#q?kn4blpz$6yuf=xB Of(Gicǫ(ag.T/ +3*Kx^Z#%ox xe 2c>rY+G TgڣRgD̍e!,Am!||:dz GG& G]MH@_dEͼvF(|Еj9AԐTAyFk  ȉKFܿ8yRoJ?ݫ]֦mc`A慦IK+Ɵ79Ȇ7Jyߎ&m,PTrNԶ[6罓U&^mRۘS.u &)ZIG5_9G3#5FYDOB@ +-f&ӥOA$pi.ro}cᏅ,rk0i *t ɻFV<9ڑi:!U(VR??>& \82If +.N"5tCXpq$E(ȥ%sQ2^TX%{W\~T4%m +r5FuF3wN^ZIyTdS}-Sp cB|DwMK9yW3D Wklb|}˵VS($:tҥGB' _lRic&HQ( +LEԕY~~CSe.i3؉ՏtύVV"A-^Wch#%jD8g[@(qjq(IGpIuqvO[ڌMhzU)0~k'1DTl1tGQ9TlO$vיNH\BhQB/M2X71taѽccdk$UMv}IC 7 +[1jV!WZpT}V:U1}wS>fnv}}^hg +endstream endobj 3499 0 obj<> endobj 3500 0 obj<> endobj 3501 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3502 0 obj<>stream +ߕ֡t=cC֖ -Sf- ]RiQG^`]~~TlB͎ct&kQb;U܉X+{Wl|?:f!ߙm&?q =dbf?*$Ռ ҋD+z7𵤼!ZTGS;`Vug\BԼX0`#CMCZ)4> 6RK?9H](PV!I}X%%($p$rh#3flJ`FtJfԽ.Y2ew\xFޕEb A#ۏq{BN ˜鋵 _#mL+ ;ҬAEV)>濁L氷6fܚXJJ +c]bdp6 +,PK‹ +4R!]Sb)ZK14.2;)d~5*C-hr.Fr}; 7;;. +qu\ܦ_L6 :CsN 霊+:VJzFI?5{QZͣ*oM]Q(^kg?i6sŅIMcR7q"4XP̹RbLOsaFA󠴃WB~u]/p#7("oVW {e؀bl`BoN[?-ʡ>> _Y2 ;NTX9>lGKF~B+d[ [1w{L4e+K=ٜc8pҠeJAUpV*ca0F+lHofq0q$a1U@7:o`H_9Nͣ o=$b\o^N4$&Ybt쪧L^,M1W%){ṆH8f<S27|0DZg'K' B1CtqkH}aay ֺOoߑEْU~U[Kf{/z, /񤼍gzEkjRZiot[dKRA}y+敢7uzwCCϹ8rheuH#{+g[ +endstream endobj 3503 0 obj<> endobj 3504 0 obj<> endobj 3505 0 obj<> endobj 3506 0 obj<> endobj 3507 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3508 0 obj<>stream +J +x<8T[&QO; Həץ ~rh^ su +_uA[nEs /^P< ʄuK1I-AgO~̙'>:Qޠ1YԼ]*f:!(̳bɜ<2A&d +dam\N16&C9??LլCPCiMx/KlAΝuy`lg=n6,ai}` )[e ޫׁvqe\)vhG_ X=Ke\MU.?Mڢy@>|H7fb "XjGJL>D0C+(hi}&x-XMi8!dkszgUfILj*5#@ {龅Zԍ}f wBE:%ނSIiM*Ú޴Wbw\.VW*FyIvR-L4Õc7UN+2 b"!IP/X:KEy!5ȿώEpFDyy Z*mq;1U-^~:ͱP\"s̊)K"Ԩ&KeQF^7Gݚ!_֙@8ܧ%]جtuhCmg~Va,q)+2i'*)դ֮1bX-A7.0ɥN>8CUh {"c!V7sh}O!5QLG[Dg?^Z|>oCΘhW_ھl +78VuPB3GMTpB?SDgb}N#sh1HA9  Rlz'4,}qjFHMII/ֆn8*N%'#K]V ?l&}[S]L kq%Bntv]oT7 5TQ +endstream endobj 3509 0 obj<> endobj 3510 0 obj<> endobj 3511 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3512 0 obj<>stream +l"bNȱLᲴexMYoy2tpKG*fЊ_]5-s(st /TnR!(R[-{ Sk% +}< yB$pFЯ~ŭѧ}TH˭^*hmhs*ս} 5a<UbBM +¥@韚~p .er pU}M +kF%NI>\.]2 %G0n<,hCd>/`0&zki53mhN6B˿$HM OEF2Sla׌(]o qCXb ,_?Zx>C r{Ys/4}*J4d͈uˁO>Ѣmy2 "aE{~ӗm88B+j"PU]#jl=뵂e2HfRoسI|xuFNퟤda76%]s!gWfp0D6&,7D㿌 +ԬtS쯌C2]8w{؉V0~)wXCP+V2^A(M@pfZ{'7mTj +endstream endobj 3513 0 obj<> endobj 3514 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3515 0 obj<>stream +:#Y1p&c21Mk({ɻKsҎD"+lq߄ՒD$-17xvxk^qU _U)4˄y\*OdS';YMj̠10T[{4zHƘeu?J("ZNV%vu?h=۶meE2Ҳ:{e +)_e 7"Rml㣢y-v6XEzvegQ:o a0 + 2^y+tABz !KBltRW-;S,K?8])M{C?Y\dBNbU'Ӂgx0Q#zr|]C{3 5->-<ܚu-`InvJbeҳA1 +endstream endobj 3516 0 obj<> endobj 3517 0 obj<> endobj 3518 0 obj<> endobj 3519 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3520 0 obj<>stream +$K4(^#J=}r{|56I>>ơCၶw_8q^]OwJ̬Fc/);YehFB Vtu;p op9)UpSJw4 O&}+`( 'OSvp\ͳ89X54}E(UL~'Nzc+!㚜(?aA?d'Dj-;%NX,xz+Vh75-sj{PkzҟImfî0M̮ĐP[IG] ޟ8z#2)_r@7}ˠHBrA.6TAcB>+Ĺm),7#>MNZ)B\H 2j`>U祌. 2SfCn^OM rT8"Ig|tyzm +mvY)yM DܙVeyDE)]NunPmQOΐJLY}S-KDfa~maq(~$#GJ9*҇)=xLnc;2n>ؽ~ea]*cI nLl[Mb*A[]x>QZ9,(P.$1|^pɇ8rLe`(=BrKH>J:'hc*Ejnb"ceHHZQOKDGB XJio+-|?}ڴz/~~Ea=lIU2mUg6nz1@Ģj:&f f;!^> t/aCB,%U@4CqH\?­Պbd's8i{i +endstream endobj 3521 0 obj<> endobj 3522 0 obj<> endobj 3523 0 obj<> endobj 3524 0 obj<> endobj 3525 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3526 0 obj<>stream +Ic%oFV^(U)%Ǵ?N?u4PܲbW3t^ԇRrY0OPam>mNnJf##ܘ!ѕ>i%ML_$bZ +wy13NBS:4ppP{+_{\,/.Ӿi؍F=FR} A`HCpQn2ߡW2[s #pXbJƇ:Ot_9Q?_3 o]*#MĄhU +f}^GtsmA|qdhRRjQe$g3EB#51U5ORRT--FHk4x_͑8AA7=ԅcʧj<)ִ0F*(6,8gC;1-w՟b-CG)Z0hW:(4qTTyjՃo$+LozHL:ocӲ@15@K0kƷGf6|Qx rykz,- w`$kpoCs8LS jl)g hc~=Xj\M8Zt57OÉ#,տ3Å-3&h2;&d/p)@Ht 2>WR},ȷT :&UՔ}*QّR8~RE_`"Rn&aToXY-46r'KK_쉈Ba(B@'>3/g@ql38WJ> endobj 3528 0 obj<> endobj 3529 0 obj<> endobj 3530 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3531 0 obj<>stream +8$mFh +/Eckz|W?qyIIcE8 ooza8_يnGרfC#s KQs^6},F-kƮEݢO^Q +phMpdꚟkdek?+%V@:i ˜QE'`wuhRckt3/+qutn-*ғO!{0Uep)pdLM@g%%;v퓑츛xleˮvh(Eo_W8m Y!p^^zƗ~Nc,0uڥ!XQfC]4~<щ[kٹn74WbxW\n䃭ލ?6ʲ4Zѯ 7CN 腀bTQmcfN}n-jsOvg@FWtJ0PLO6l#31xwQ:Qvzro ٖd4+y! -~*!c3F%8DT 7P2Vd-Uͨ}# dRKM4?z5>H"17rpr,5N<Gw J@o:Q:Qj>LJGs'G +endstream endobj 3532 0 obj<> endobj 3533 0 obj<> endobj 3534 0 obj<> endobj 3535 0 obj<> endobj 3536 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3537 0 obj<>stream +igg%2hي-QfQ0/$a5d^M% hddn >Ң[j JV=p c}!i5 =Br8 "jꎇPNvkmZqd0^F:{Zp,%9v-Yuq":S˭3CiMκg +’0yBj>bYg7r_J]ZBMF5/85eph o. &3o3=GglTD1QdҨU\陌2ͬbӧ72 +S#m'dM pX:ǕQBTo Ag9^_uKxҙzLwFmG@I^,Trݙha3'*gA#>\`tq?"ϖl%ǷHxg'v$I_OT4~u=ZLDmا\mۗ" ږ@*؝[.GWq}8!*Ӓ)%9/kzjm[_zm|UyA>#/*$xsxDFM~R? 82^]O )O6ʷTp?[ \\SM8UQrkiU2zTתvSM" 3:B@rQ|*Jbu¾XcFNgT UU6> endobj 3539 0 obj<> endobj 3540 0 obj<> endobj 3541 0 obj<> endobj 3542 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3543 0 obj<>stream +gêu]Idi"Neĵ]L-TWKJǩ +E- t;yU?]|D9GӴZfH Nei3}`'Z*R/>ȯ[o*o,4+xez&%NlOhm|H9e&rC7ծ܎ śvO͵%IIQMUZ4]Y^Y~=-D]mYgZHdց;kAU`X%c43 +,#8m ^F]cA 6%/&TdD 0鎎L$r`e}y<_`1m@Û+V H6o.$h;Ϟŏ}V;BV 1'zf~'O93jAVv UCv}l6J_+?Fp'MM<STl  LkP!zyNԁQC#TB~e&jpFΰ3BF2#K<g6 Mx4Qq^^Du2-fЄE$]PDx3 +nRZa~M}2M`C>3ڌs#ݲPAc044@D/sّ%L]=m +lvag{l{Å $؏ 1R^dXؠ +!@殎s]8d'!?O+5 /S@oZ*!`t,\9: !,Y> E(^!-x +}MXiyY&)4Eļd"AYBR +ԆѨ`[ +endstream endobj 3544 0 obj<> endobj 3545 0 obj<> endobj 3546 0 obj<> endobj 3547 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3548 0 obj<>stream +ol(le5،p뤭6S tPO*X)VXJWxsu8yX0Cu~`} Q[?\u$; (C3>MIWpo'fRE42cpv~[#"uIV&o ~;*!}-*~~<];5~V֎JǁԮ4S P/5dN{wjbai"cel +͉ Я,m +endstream endobj 3549 0 obj<> endobj 3550 0 obj<> endobj 3551 0 obj<> endobj 3552 0 obj<> endobj 3553 0 obj<> endobj 3554 0 obj<> endobj 3555 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3556 0 obj<>stream +)z:١>&y&9I>}}T޺g DK*9qa䘄ɺI )3_~SIEBb~}k(?1D]@Ѓڋa;x4-f@ꐯ9S;]W;swv@fR(<)KA[v_$|tp̒|7[q5q{pqA< Ցu`o\CFH!L/: :GIִpVyb0רᆗ-KM8?]̦xRic~~ `1kM.!B;;sr;JzQ's(%ӕh u\E npz?gFȌ{C\ td _"!ሑK AM xdpduC  &^:ck4`Dʃu>o&Ȗ)0\,f1ШPL^P- +S?"3ks;U9ln;Y +O R=ûU ZH!5zv rV.Oi})z% {m= .k"|^c#=s\A8kEqT +endstream endobj 3557 0 obj<> endobj 3558 0 obj<> endobj 3559 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3560 0 obj<>stream +{i7$)"s`_x(@^<\PDaR#UPi(zXj3s=j#(OVn7R?[ ͓ !!ncV%},E^Ż#PlYlOƾ7[k-ʵNxqr"qLR;Ay ?ZQ5KH%YU5K8&/1><߀k׊S'Hu[{a R^ͦdnRQ{k~b4Y cnЏ +rv7m2Ro8sѷ7cDlQ-<4,SR+1U +% 1'Pﺲe{\_XN>gkyԙYŽn~écSx`-|Y%sWd#`)x}txu1j|MEcUs 6˰30eqR-w쬝Kciz~=-oY ٖsFָ­u}g؅]N`$PxD'0ҵ0 9KJŐG^kfs']'CR zmeb?(?>'* 8:G]KuSdv)D}uv@l6]g}ߤ+v%n!ׅՏ&怂X"{A.!dd?SSU񠄧dfdo%ֈscxxHB*t;wЕ 4,> endobj 3562 0 obj<> endobj 3563 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3564 0 obj<>stream +U%Iɜ]HT5~'*e5K'|i\j#cޱ + pa6#5wp׷'|a:ɧQdܴBґq3g[xKA6:<m9qbaUVѲAǥd@Eo3M NR1$T/[K&a?VF^ENOc #*ه7bu*xzcY^==>MDzI``pGÉ]:\>&<',"Um!˧{-Gä)74/ŠL79OxWr_7[831 <^k7x&3<5Z:J#ۉfu< ə:_0,a[Rpxu伀(< ck? {ףΛmEپx bx.U<Gx]ۗnH?;t݈?w>HSvۅ$ v9imw\:Ŋ4D?|.S~Ǒm|fE߽,,M?l>]p2N>%8 AMIfb{}+Dڄ,#͢׈MJ$>2u:>Ƒ,"Gr$*q66"ΰi!O(-K2 ,QMeFTq*u!z;H>LmqM̑t [_mbÍҐD$-6>#J櫦cOt 6vgi)'ܢ.'8``h tq5r5N7F~:r¹R`7 +endstream endobj 3565 0 obj<> endobj 3566 0 obj<> endobj 3567 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3568 0 obj<>stream +f6cddCԞn[9K_;K6)x*DN=FЫ3_^Gxr,K +F}h'JE>Bj dK-.U{ac+{WJFph! crHMV[O|k-EPc~V'SfR${~ fkDN8` cߞ-jS7̗^F,;M{hffo[br9/woNUgR=Q)OK)Sf{5A>*is'$ʼnk O҈S3 +>T.qaW-Pa) ζ z?ܪQ2vmǬi [Xg8$BxdIW/U(  &aٚWiOgVA#CKYk5mrR +endstream endobj 3569 0 obj<> endobj 3570 0 obj<> endobj 3571 0 obj<> endobj 3572 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3573 0 obj<>stream + Ic੘ּt`͎3;{:~7M!)dܟgebG^D^4[z ! D*Hd:Sk Q&C_ u_1wCkT:MGi!Ȕ"ywTԛ.{s}B!]=ߚS98YNa"y &ΰmqddA~9 1drT3~ m@汽r$@(LM(Aw('_<[\}Zy'=GZ-Z2(Z#bwu`LA"5Aj£]I +-ם4bh-q]ǹeK_b# %%]~nE&2,F-$}wh,w; ԚbA]Uٵꅨj3(frg uiulړ\ڞ:q+;zIPnS}7K^@F׏RwV)imzƬ+ uTCV?; ;M]-@q1k̢ [> ä#k79/WSMA{I0iT5x?Ò4k.\XvQP= t,FeSpx4k!&d}7&Q`PfKnI6%1eZqqnJ!UDH})+FfjI:J)TUx$ GUے[1DMV[Sq^t,,e#k#ӀuD~{F] +x"ٔ_/bjh]ЭT&8*I4di0+U*d-7Zbz#q_:s*(pub-r$:Thp)/{;VPYUY|HHmݨp"*e]iIeKlˁ &Tv ?3s`.0wNhW8vSֲ]?9aج|/ n!wKp=sSc< +X4h) +endstream endobj 3574 0 obj<> endobj 3575 0 obj<> endobj 3576 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3577 0 obj<>stream +A$3Mgz:cֿ=,2Yqux W^hⓥy ,_,)}Nz(7~+ߺ멑.5.;"}~ŵIY6^٩Xo:BJstE5sRn;I[&$&1ɺ@>3E?I(@j]?/s, 3Gx?ey }I֗I@<SƕŖ`mkU/`ȗzVoȯfZݏ : [:&淶3g(Mr5lW)mmtɡ Bxs&'LԬPF~&o4r{q}"yg8оC?M'YKþԦ="Fh+a~ESDOACOj>~Wn ?w=Z$`[hh#`IVJ83?{WҽLPm$'qn#E`9|H[!zr%ž> endobj 3579 0 obj<> endobj 3580 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3581 0 obj<>stream +tX@rd{>E$=sX6r%'OCoeQFOVɒt~kU-F/WYE $:g t1%4n[ :G[" +82JlǧcF7l ':(Rf>jas°6b_`s[<߯4n_4/keQN`[X7wE"qlw Z?fVaI\;1֝P JSlrD_LpƟ^֙l_/O-N=XKA=3ɯK>ףRvӉ51>kX%`80 KK<N,XH=z rP<ȩkn~ ?E0OT;n.\(=wZyh+"T{K}gpx]Hc1w N7l.bdyt +g咆чfrEb "`*yah</R>Sm@ +H4T^]K^eBAEyl]i-su+,_hJtB|$:] =fgoO+ ,2$ ^)"C.;?k9M^)+7$j@%A3d Z(匣C@sUBx\Y[WIpnzg12ǥp^š_)pA՘=T-ҏkڭBX䄄o~2I; 6^B!:> endobj 3583 0 obj<> endobj 3584 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3585 0 obj<>stream +oh3p&J"%p)+ԕī2fxG +Dosz#̀{WDP{#PWXrbi!?!xӏ9\u7D%TX'uL"Lsr|$⻆Nw<4ȯ:@\vY)6wiWP+~7 33eE|%߱.p[_} <&iA 1u[!QCTglٻuI+:X.~{ |sd(Cii-TGZ?1>GKG}٩6N҃M?+9؊C>>DF4<}búBP:Hˌq&+EA3q9P-vׂ+l(߸~`w[+ +h- DjyF c^8ڂp[d_v;HZvWPs;jOFEy,F҄תhh1,*kI1dS$Ͳ =SuDS(Cok٦)"=S;(X L,<<`0Z: YCS.RFޭ h&ۼ' A+X.rF$}%Obi{d 'qR,ȟ"r +endstream endobj 3586 0 obj<> endobj 3587 0 obj<> endobj 3588 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3589 0 obj<>stream +A6` +DnjH|HCuTo~> endobj 3591 0 obj<> endobj 3592 0 obj<> endobj 3593 0 obj<> endobj 3594 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3595 0 obj<>stream +D q+N |UL{,.S-bz+랾8u|ltdF2 F,B{6D9$@52)L0=$zC\^-{ֻ|9cDK:9װЏ ہuqŝSʜ㐗d'ug/+QB@lEq Ilc"18[$aD:%?`q˃㽘CXI+)c#ޥ~6uAוו/kq}kB>oxM O%aL@2fAb.YLô{pXl1Pz^g:Ey,o&/;+G VxW%䆬0Vxߗ CC4A|c=̛`Co!ߞȈ{M:*?0.ZjZC`췲;.t^W;>b?9 +j'vȈК/]{D/9w;;`W 7ZK\?WD(xB.fqÛz0"tGu.dnwtbjl\p[seͲwL8^]n$ qt/(Ȭ Xp`\1Wi90ynŤi|';ֵ",$&pheo"VgyX3ڬ&=hx@5kvJ?kEXo26\Zslxg›0?Q;s#o`b\3޾@n?`OZ \ۂ֌*' תO);$Y$Wa қ7;VDkl}5Ai*civzpnVB}.=6CV-=Fuw?mIVmn! b avYoQ!i>jH>L|dju pUy8^:<NB~fH(ن)g~Yf!n7YDڇW:Nv#+ 7>_zIP`vU\؟ʚf +endstream endobj 3596 0 obj<> endobj 3597 0 obj<> endobj 3598 0 obj<> endobj 3599 0 obj<> endobj 3600 0 obj<> endobj 3601 0 obj<> endobj 3602 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3603 0 obj<>stream +2V beug`BzFG@_N9 d, 8(cu=2 +Tq bPbg)S&Ȕ`myPO{ )5Ssv\8 & Ntɺ(8yt\)`]v®IaE EP=$c+P + w)8l.ΥZrYO)XQZimڥ=хճqޝ;K׃$HO:><t>' '>uW>b^) ]|(Ë)?Dų5 m0n g$ڟ78NMC"ЬB:t!I`nJV%ne<|rR1\W$=Buhbv TuHP% (8)a͓+eTV.Ċݢ^0}(XXN6ϲQOrOtx({d1je,;|$WO<te6CSu(\8Tn)MPy*/Ef]E2/;c.!_<|kxz0SYj%Ē'2NRp<i[ Ɨ/39+t>qp> endobj 3605 0 obj<> endobj 3606 0 obj<> endobj 3607 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3608 0 obj<>stream +)%?&=7k<' +C +oQox!S\ڏjzMG-Nnxjmtȕ^}EM0΀u _s;.lr ;K0>v70?sZC{U +谐RM5pfЄs RS2~pN˦ +2u|*tʍ$iV +!)GѢM)zy|ZEh01@01G?>7|ĸ;4ҰiK*whҜ+# tt0]4$م+nw*Y ~]IPWd%MzoJ'҂ +4-0$&i[8KO d߂IL  ͟ +puʕXK:*L@%@+HZeç_'iEwo1,]Pt"v BnϾ5JtU,|bg|:j6@fIC0ڕhMTyz/sI`㫯_xz XRpU&_ ՟àl1p{^yt. )C&\,J> Xd_RƾkFIhMWa_,3S%} i̳# 38_ִl`|_ыB?Aqt J.Hy; 1dwy7LhhUl/ف0,JVK;ZVezwoAGLᵂS35hlǡ9;@'^?FGq-j9I6{Giry)׶^s3^n?o2i +endstream endobj 3609 0 obj<> endobj 3610 0 obj<> endobj 3611 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3612 0 obj<>stream +(hSP{:~bAhf䤋|NoH'r)y9@%7g<7` +k۞P~4aUQ?Hf)IS35ժdfE9P/ѭ/ks+H]N[2xm%Z eL)D?Q^4tR~qZDOb5H +zvn?КzItx i]@l_75\n,G saJ=HQ{& (wCűf֡L#&g՟z==vJUI'9c_[ +"f멡VH2&a%^m~ΝkwVŮ[). @&5Q:2c$gdwTn b5. WYO5H0( })휜0>u0֡ylsPt? >+SB q{hj 39_(iM4\FDj+<]zD`WAJk !g_IZ,y [yFwaQm }gfUdO`W IC' :w,,F(D-4%o=sYh];7zSDZ$xY`SY){@Y cv^IOeat״^Dd,!6=\k; d橵L[(O ҒQH|qdmGO r7"w|^ki+- 6ɜBGLaP,%KU؈3DH7}U)kGg3%cm*ϒCI!Iez.e'wd>}Q" s_w[ի<Vx"q:yHSY 3kW0*tm$i{N +_s;UvDS^kYB[VV-D͟w +endstream endobj 3613 0 obj<> endobj 3614 0 obj<> endobj 3615 0 obj<> endobj 3616 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3617 0 obj<>stream +WJe`@4QR =IbkO}bpL" &%B9۝)H+78^/b(jk_홳a(5w)塀~I.b wtELFoElG hj A 緂]Tܮ#d#$*D"În୐V&\F͊cq*+le߄ԤVu(Ikpo 4.<[{DeB_hڦ[~:rn,FTO㘾\㓝9:&~PngO!/^P]\dwɳ+7VzG @?QYvNYq ŗHdo7.s1^ [IwESre,[  Y_)Cfs + 6!YmrΕY kU\1gt\oՙaD +OM.m5x*TEiudrtڛ:nG6hAV\yc~4mE l^G#&Ey'<ո$Y7$%~h!B˯@^ SƝX^ +DM= +u+ӞW[L5=n~W:grN@>֝Lz> endobj 3619 0 obj<> endobj 3620 0 obj<> endobj 3621 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3622 0 obj<>stream +Zcljf 2L1}-VR"KIH4fedLQ1CrI>@BLH{lp:_%x \C[څ䅜_RYIꘖԛm\fCoa@4(% w;a/: ޢJɆ"xWuDI5̃i3ȏObxmBI7 X g~ǒ҃!E7MeY#HnRVE:]sѥw5BPLZt_tꁞ8'h=0 +ԻྥL$~1Vsh bnC3?ߔqv[Mn ++~"}+Э (LQoa=lPZ&a^8pjdIȉ!w[^܂j:D|PLb&Q%b~v4ZN!I h_)8pMStq ԸڏԾGnɞ}pj4b +v!'M ;-qcgޡOHu@{>ڷ TodV-Sa_2+T2fo:+Ƣ =2]%d5H2L8=rGuA `b"X#ٱ P=RlZb4T: + +endstream endobj 3623 0 obj<> endobj 3624 0 obj<> endobj 3625 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3626 0 obj<>stream +G1h. β13J{=w|A UZ|wzJF!̭' >VHj2R}5` Sp XTIe:"Rk] ᧴#t$":J]v+XuXWv? V"o`YoXh +ƩЎ˿AEiNBb1&juPetsWq(VLīVPjۊ䡴?:Y𞷐Ah_gڅPen{ B;2ھPQ;Qmq{]-f%ꃋA@D69k0u`q [+xl&TLߨrڜL"?0YY/'!SBؙ.OL6#Sŕi2Nހ&8k-RzHF]M^ =r#aLÍRꁿٽ6y`hlK=žH߅eRrȬT\U_ 2<" eUW! &Lq]FUJl~wN hm[-~!70]͇MRTFP30E@wRxd1l (#Ez/6gkwꚰ{LM 5\~zW$x +p 5|J,B9AGC"DbFcpwWI> endobj 3628 0 obj<> endobj 3629 0 obj<> endobj 3630 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3631 0 obj<>stream +S xcΏVJ&U:aC={~dZc2Ia`0?:Mջ[wfQᵈJG:蓕yԁt 6ZIl6K)\9AmZ{X?`k[qځ`H敳Qc'VqzBW_6׺e4Cmrl"цМBR8څ_W~E!Aܡm̫UG1XUʱ g{9* c;d>>5,Mġ>:dk,uêɺk9F$7~7~ 65YL+YSH Hxa!g.Ѯ ddEGU{7.y/ qʣ% iB3"njWdDϖV$WJ.3M!EN˭"%~7uIj(nZ@if¼e IG/ ~ݰ҆^!0GSlIv#2P xo'Dr^' (iJOƩgF !&D/k8` B ;>{)GpEjLӘbl q&aHRte?բ 3OBgbg¸>Ft./u/!aNU?mqJM.]a*ꀡ'Oq/ϋBC9,IG(oxD~*ҫ?mQd\i>&h4Ɍ +߬s'RgD gWYh=Up6ϛ%ro`˴7Ӗ(=MHfBbRD@~9d̮03fE}]'p1`z,_1ΥRc-1V6OcB;N6Ήn|l 27zFzUqJޏ!?2/mcpsb18x`Ķ8hvj:z#iNGO]{ d8Q=U7|…"=h6{l1B+ލ%amR>y\ B4#d?ϭP%>&PQ N/@:ZX +endstream endobj 3632 0 obj<> endobj 3633 0 obj<> endobj 3634 0 obj<> endobj 3635 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3636 0 obj<>stream +M;,a=נnq!i&B`US˔Y +oK\*Y +{-KцȣH&Է%]e|#(#D{Xw#nGkU8#?):" F E*Z 3Nl-0ir)9^Gz918/ot?^+XͣAe`n-`&vrS%vy4"X-JHGer %X\j%8X: ُ. ZυP-SYS9uR +ŷDB}*uXZ&T ŋNl:U8E  +Dd~2 +n7ž6iZoPD 6Ҍ <:%q8# 166ыYC9I_D`y9/PD[Icr$v8cY}XVujX GDsl<=TdKe {K CDH?eWLJ*!q􉹹>gI؊dc5raŸh"䗿Q .&5+L {$&g!ɧQ~ ?MaH5CSe iw :$X+ˊ4dɪ[_Z3 f8zzL[W:H*N2ŅQ$<D60Jm]2+gZQ[0.t=._( V4ȀSZ}ooV:[d%J+-6h;P7~ +_$)~`pU*Pn5?Oj1-R8(sm5h᪫Z +endstream endobj 3637 0 obj<> endobj 3638 0 obj<> endobj 3639 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3640 0 obj<>stream +" CT7ЃYVp{jWmuյ1E4XQنF<>|I1>ʟrӓ8Uc +B,-L"5 Liy̧>ZsX1"g$EgLW\-/W]b6پgܯPSNVn+1ԗ<WOg5}C8z%`B};M-LU^m} {|p`Zs*c,"lbK+{Gk[n߱{'cq1B6I\0Pep)20wTP*8拡R Uf.[hp֧T.7>֠Tpxm,P-3&gY~צΘ[EC5ZJ_Uʰc@eBh˟G1F(>8p82LRCqX=-H" kl'R{REbVѲ/vvn^O;/"Su^1U]*4a*^ZGw;n"r$Z˵9HÌiA5 vR[dTB#- +endstream endobj 3641 0 obj<> endobj 3642 0 obj<> endobj 3643 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3644 0 obj<>stream +>yHx_,V: B=RԚA/!=?ezgJBd7GCXR1/]_WV6 #sWn :XD_Qi7Ep v>͹0J1АP-i* upa9ō e=ѯvVYEdAEhPie[wa[fUIGFhڝ&%ugx:k]֔$6?+'MQG.0cG5Cb-H9 OzZ`(P>j\NVb}6o!{],,uч#}?&{qBYӏ瀉l곶Xbwya^}XǺw3IK_:j -26잫9 ;Y +:ۖDK'u!le#6@Q=( r׊jO +Vz +ګ^_\2StY0[nj#C.HamZb{>5ۻ#kTW5)&AYoBǛQcroZv֩5+R%9܊h prf5j_#P +^kB>ݦ?(|H.,bشSsS G쏧m/S@LPNl]4 -ozTMޏ[~@|Y=jÕ,H.zyta}(=&X ,"N +endstream endobj 3645 0 obj<> endobj 3646 0 obj<> endobj 3647 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3648 0 obj<>stream +H>n qYSE[3װ,(pKʄi͚4ð}3vj BY8̚òɕ<!Tec88G?0p5RA(;IV3U# lS)i(ЙyS aJ-e'UO+6Hi`qMMȤ{'0Ņ<;d[Z6|1{nChOm 0̜"v/2\ڭnjeiϮ^4nbl7XE!΀=+Rȼh/ڽCлJtF(U'l~d'pq6M6!dBOr=^1D2=d ,T[W#H:O>^L:a> endobj 3650 0 obj<> endobj 3651 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3652 0 obj<>stream +aT f΃'αl-[(5UvWrXˏ¸QׅWuܨ&!ҴEPu)+׍JP:/r2݊βg].\ |qjiIe$%mis{2Td;:xˀ g۸8ߞ^LJ4O/& 0PJG[GB[Ы>*3ey;9I@jK_Շ2p*!+Yl ͼӢdy=8r)tǃZ&1h+;DmA,fVEW1Ua)8*i!at(E/= qk,h_4dN.>> endobj 3654 0 obj<> endobj 3655 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3656 0 obj<>stream +zm?~Y5P/ n  +[mŤED3h` ۂpo[8s7+yRD)c$ $cx^O~`ӌ6ytVO:dW…$j.]>_ӤO>XqYV̍*5aK>2^ƻȅOX*4Ɵ<}V g`ɤ TN)8RMW[#ROnq%BZ)&l՜m? +JB fe(}Y5`;TC6$CWh2.k!UՏ>" +[*ks~G  }fB}5K)k\JWP$|S_6%Ccz#N0~i|JC&jCe&pXf :BP}M `6pBN俭ءҾXOgx9ZI E/^#¬ocfRj(j&3ԭ`M{؀rQ6"XyWԶ1ZM-0+*E@C} (8`hMluh|ID&)?ײC! $ܥ(mMyp pY9Oz +endstream endobj 3657 0 obj<> endobj 3658 0 obj<> endobj 3659 0 obj<> endobj 3660 0 obj<> endobj 3661 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3662 0 obj<>stream +%Q`ҳ:*|b)+2n6<9!l͡/@!l }T@X:5u(tǁa@M" d)9JfYK!2EZ?²$!φ󴣔A3ĥn*ɃǍiv<}v TC^ؒ7\VAtI"cV9juPbZIZiUR#^J !Ԥܭ'ב-h_|EWl2m$S- 'hy @+,z+sP<l% WBRl`~dS& aTH"5Y07QթU{a{/.`!3qQtMԬʃ4:朦ES2n(w։qTQV+ Ve.c8Q[u]Fe^%R¯WU؍F`<P2Pt 8gVk d؂3L. gV +uI ֪1 BiJ%0OG,LA'k1RJnJKSPHOY*ra$=44Y,IX{ +1ލׅh%t҅ 9މ|-s6BK6{]5Pd νʎ&PYs(M8Smk& Ww#1C/n $6a.o0IKiqLsKld+m, ꯒڽ 6$Uj; g;^e7pؘ҃,Dfk7F5}@e:17hI۲zmA8Ș]/ʻ2x}^z#I#gab>fK9y~8Vpܠ~c>:- +{OʖNH}9J,v)誜PhF8GQA1WBm%<`L[jeOؑ&Blt>IÊ&|<-gm/>( 9kڛsR Ƃ&ł`4AÈ}lQ֘rq̈ݧVT7GU d{qs<%H$h.TL5' P&DPLԜi7Et&)"e{WE?~E= Sn_"v)zvEe +߳YOf^,oӼ6W;$}_Yw՚ e;9d'(dfC3 +endstream endobj 3663 0 obj<> endobj 3664 0 obj<> endobj 3665 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3666 0 obj<>stream +A }αZr8~>Z\'TA345R#MU.^{kDih'd**oĊ9CqJ^g? +r}uSl,EZx/W[b"'4{q8` 7j^K`IJ[SVTfI,2BcSi0롼Ak_ƽ:n W' ++yv޶/9bW64ʱkE +Q&l$z +@Ȯ'n<5IC#UmPAij㭰Ii=%3bil=Aw +4/7ivc]YJ4XJܓ_\-\ cϟWo?J;q8t~]ttq/|,,ɣz'a(3EKy7AD-Ҷ~M#ve+Wf55l{1&;=ѷvYGF+5c$ZwzaEGN> endobj 3668 0 obj<> endobj 3669 0 obj<> endobj 3670 0 obj<> endobj 3671 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3672 0 obj<>stream +p3N'ݛi T\Q3-Z. G- wF?;QĎNiEO&ʪ=GHj-2I2p Xѽ|ci Uul"9-&z>nl= Vq(`6 xf|~;EˈLJU< +$Wi6NK55MڊC]Q#5V,8AU7j? +)F*#aot.AAPs&TV<^}&lv}8'<4*Bĕ{$K:S qսu9D&-'nk?݅)k6֘{(u5 oO$ܚc_-Sf1)Ʃ*H RFbMpiN3=qExb4n{$- a +0ކ&[;J._e]`5z@;OJ +ք2a)O ,_fV\o&?mRYY|\.`&Z-I)EK^'d *E8fe$KA5MͧbBXݸ|&p}0HKRi!%d^2j z&w +Ue({U].A ,x 6IP| &L̃y<&seaØX3]}|<ڝyC ]N >}GE-빦Ck3,K[R>R Y1xDkaUJ3JTZLDܠ< +J@TjKLrV0SZm1Pb +2@@K:Y^35O%67I ?S N$hт Ce[$HDuS00Oz?\D Hp]J c/4ϝJp)p;J4Y-cpZ{ ++_>ޯ0o>)dlP_%\mKl P˻D I A)\)XU42܌ZT+Śfu<93Qb&X/_@Êea>{ +&n^⺲KGƬRW냽%Eg"Bb[kzdBUc.#Aے)t8, +endstream endobj 3673 0 obj<> endobj 3674 0 obj<> endobj 3675 0 obj<> endobj 3676 0 obj<> endobj 3677 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3678 0 obj<>stream +̺͍EeNfJ܌iR_=>%c?m-mdRYNtXP77/ċɒ±a+]K4kN뾺vaQ8oEkaCvIy+$SuomRC&c/qs6Cg|@*F%\L,fgp__z\.SϙnjS3qpJ=ymUCLsկ\-1%\WI?3Zckhxs+ypqPed͏Gx*_?P.p2@:;{`0-{fU"3*^I{:lŢB.O{SEcLOn -,5x6_49"efudֱd^-aNKzK6p3յp -I 1|40wO@uPg"f0&c[2'ȕٛ"IJx+zUøtFGҥ/ o'L= շsIf_㼁"R?geޚrdo?p\h{ 1L>0*JH:(s%PjxR"^@΄):9H̎ewH,q \khVh'Ӏ@0O[gxYB&j,hb hJm?{#*=%:r"= Im >P f7}cyQGF+Vm_.;0]}o2ˠZ904HU' +sb c;51J ]:c-U4+;[Ssc\h+:rn):lJI^;I +U/b!ӟ?R_흩jb#U6P='bqHٱkkaR\<0W]TLO' +endstream endobj 3679 0 obj<> endobj 3680 0 obj<> endobj 3681 0 obj<> endobj 3682 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3683 0 obj<>stream +O͒0-@.`YAO `Q/UUlE jT16+:3-_׹]Cڏ-<ULɮ1r@W2Jװm=_c^cljQĿ` ~`Kt0dY͵>B.%%gw,icU=)ɸ:0$ӛ{diG{N G:)׆grxĂx:#; +Q7hªryc*;Mq&O⠚c:;'Q BNӔ=l^yMes[B,f= Y_Fp\@Ȩ6*o򜃉Y/_'9}Ck2Ztam'64YwԈgGpZ F`0b%yҪiZվeXaQR.Kq @dB@&s-L{bO>7\Q3R""D6Nw;osX % Wl|KɝA7rX{KJ*'j9yn)˄.SQInqԕcb=k=Y74wXrTƐC}4IH-rU`X)j*8Z.hH@ڏ zx__ s"EIUcRe K !O?ah*%wQ1 :p3%dv Tˠ2[e -07LcN+o1 Z5^ЛHʄ{G=nYDThƎ|cEFl@ܟX +Ʋ$YK w-U#"=2n=`5N١̻a#RY#~z..~ܧh]F\[P [OSzRlT͛-8~+y eo'Tr)-M?/ܙX\A")n#ˈ)Oݮ +endstream endobj 3684 0 obj<> endobj 3685 0 obj<> endobj 3686 0 obj<> endobj 3687 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3688 0 obj<>stream +m7shBnNN>5r1OL!}Gdwf"x'HZ/W.L +rU35U'MLGlʪn{~4˫ζPk +"3좘S@9Y腡{tҨcPVS7FU%w} v= +/, VlMCAT!NaQqԛj:'ڏ32N0rW%:MEˍc6DI^ +d:$ r:2iDYlEwl1";4_[R0_fx'Y/ +10;Nm`qc\LZh5N&Mf0*Zc6$jyM۟n6,R^- Tau88+ Kz6MZfwJsL gMHLE|17{ɁBX>E_߾XC)?Qf#V̀l0۹t +[xtٱg8KN^D'kz&j +) =7nu:T^5td @O?q4em+Y0: K?~B}E6N_ 3M/J_"ׂ4^r+7߭w,0!sdWsiea={~Ml@@KDUS&{)zڍy iE&'žc/~ r ]p O Rf51/QHPF5R\:0\c] P<ʀmm8xyGA#{O#?/܃嬲kT\ ʎ[S-1p{^:)G_wpf,e>wXlXDն2\"g F 8Jjۜ2Sa'ڍC|rIwQfuSRCZ1t!53yFwWHx \2CQ􈌔K7e ͕PY:lIg0H'~=(؞zׁN<D`Yf-~yǙ's#J\ j_?R +endstream endobj 3689 0 obj<> endobj 3690 0 obj<> endobj 3691 0 obj<> endobj 3692 0 obj<> endobj 3693 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3694 0 obj<>stream +Q{`}Ux'`GXwf&ŸqLȔv=SRb o{~fBwyJp,z/p'ԃ=sBGaP,mvxUEvmgLB=9['2=8S!*-R{8]V'bL0ao/QT|!h&a? +=y$m)Q e7p:I'8)qn^=#+S`0lڪu xQi){5TxKмjJ_Twr1~:ެ֩j E,q0 ? 7h(x}FQnTJ?nh٥V5p\\Ks|7-&;35-gK)4]tHbJີ%]/c!TRWęoY^B aB=5 )3MɥW݇i矟 <>Y {&_]V9zhpzIk'm+L2\e#P/'IhhEW'{ޟX Y"]M$ D }6Q֎{U;R4v99_E)KȌE}{{7DžR>sr:MV瑚?ey$sӇG6C90ͣ·w)1cy̅iZ6Sy+VL +8<"F xdk 㿫0"$tlؠ%׺7䌵%~x7,ŕ>KӐ7eh^n(|Bl_.\Nu5YppZFd$m9[YR(`z7~ +endstream endobj 3695 0 obj<> endobj 3696 0 obj<> endobj 3697 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3698 0 obj<>stream + ܖ4+q xI~JјC34ہ;Lh ֞,Y+9 ikv)Gx@3kGʳiVC^}ddخ8nF]UQX48'iU!^CzVtWi +:}>{VguMsub8- +Ozg33`@/ȹQB uJT'>QQ%B,=>E9ϵ', 1Gde[䈒_M22UXUuZP|7$Jp+HDۧXzx,>U|i5:>joqvQP N.h$ԡ!^υ 1etV [֮y;c$ǟ _zy,N߇Za}%)9>;>1}d{(kNU7Aa֭s˷vaⲿNm"b=4M_B9}Ji1td||D=C +yJ$lMW(~H(P]FuKZѻS @'t2%4d SYK0F)HȈ9Zce 7;RT*iJ5n(iV/`S6E6V ON#ܙ?ppdV88{ fes[oӵM^y ;Ir C"> endobj 3700 0 obj<> endobj 3701 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3702 0 obj<>stream +ONuy(3re (L,!-Pm nݕ~lb0?J}Sc4A^, 2Nu7 ~<#svܻ%[4#Y"֤'qp3;c3G_~!HJ{Ջ+2f&脰v.}ηV*/ϽCDmpoŇi0ݠ1mO\>թ2fD#/X`Sd<o_GFY+|?G&}XJ쮈=TQχceٌ}-Q1i =1Ĕ&Hc[ňBRZə(1ʂW}Ձ3'yՂ;=`)? +~ReDU_FI63% A( Lm1Fv̆"!%%=ьHQ* LȷZI_Wz7B P˦tbywE{]?~{űÎE> endobj 3704 0 obj<> endobj 3705 0 obj<> endobj 3706 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3707 0 obj<>stream +^՗r B5qbOiS7|)a3KDQ %ql2m;q$ű鍇/)M2^Ek^$V;b XbʓD-Zf5 ;hc1.@+B0D^3iU+ M1\ęA2cgB +{s*01!D[OD{|-Lɽdovh0e@ߡ&DO{rcᵠc!zI#+L`t}"ߏm5qf@6oG[$$&93#S^zsm1)&5XD׵%)ْjid*[.^CK0;v[,ږ/ c{z5~ר&&@KwuZδ 𧓑uto8~?cԞMRn_GTr{y0PV,bH*& 'd(H @bԫj1:L]r5$"Hpt> q l'hD/W!{HEK^ջ3uQd$ +l$exiTr) D ylg~SՁ"Sr| ^pZW/*Ɍ<^5w惀5h+#g|+{He]{!z4c ) *nρN"~44ep[b%}$q~pG]EN=̷ЋU::TCESmXBn4K4o0abGl3)d; HLeܻL{kn +}3a9+VБwW@ KLy(kJVK)cZ|3pǪ}ѐ) +]<]ӭ5-Uٿǀef@jY|JѮ#$1z鯉-5 FhR5zwMѲLW|ӸsXbv~/N-or@%S)Ñ +endstream endobj 3708 0 obj<> endobj 3709 0 obj<> endobj 3710 0 obj<> endobj 3711 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3712 0 obj<>stream +d.edc}k +#;ˋY|38D" \ B7ɒ;DQ=}[m V;5TUr#P*:xE.{^? +jɣL&h;QHfnYYHm--fܚ ?FxdFUS@m2rkl?nK 0p3vBIJ,V^CRYDE%>> nW蝇ëz*:8T\@7vP2ԳFJZ!c;GY@p}7 / +&W_ vO*J>Kݸ-|\ QfkOːe1M(|4Dh[BUǟ߭f}eh&j.I#o[]#ETu=/nK4}m +pi)q. sII]G_6i;}юn!+~wԭqD 8/qZEdC +/}e稍w2@U0,cV#I=Xڼ$_VNɰB9NO5]T 6To8oGO:}ؾ g +j:=nf,v>DOy +JLwYdQXj&<Š"5òYI$IcѤ/x{wv"C!wBGl.S;W z D`3*i8e&*hy0˟hWMGAcw>ڞK\#Ðӹpn8} @;vt'*~[ꓮksl4͹w_O&p;^ǢY{ rx]o**pz}fȧ"+ T?vSTޑRf;xX]6bE yߟ);?|&b{XSݒdfe\qӵiMWWӤJYHãSA|:?s믗 +B԰0%>F|шv8/@$IWҋ!y8l>ΗYku*&ZBgzA?-ΆW?~XINWkhmbM]̧iVp_>t^CiK)n0ʬE> endobj 3714 0 obj<> endobj 3715 0 obj<> endobj 3716 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3717 0 obj<>stream +&]AWY$)GW161y3D_gesz|N&bYBMY)ۿ^'lĖ|K( ](ⰾ@m$DɃfQ+CITɷ v$_IzLwea usR߮qȶy:v"2o~X{](sWAfzdNӹ3UCzĈ`~NFl{AV95QBt:X\-،R cxeԣ>FZ ܙ"SZdf`X߉LfQ)g-X z}A!<9[ڀZT!T1XK1_'՝rKFxoo-}ѓf "N%\EDe|ƪ^qG3Yͺx + VyYJv,1Q)|fQ(e.Oj;PLoui(']W-o˦[l5{]HYtC,ެ`Q.Lk,^۟ia&rﻁ_NRj 63fٰȶր΍rT9ms)*$_qF^V%I-w}Ύ[ӗEEĀ|H;>:2*?QH{aC1Z'˝^N ێo(ӑ*3PߩSKqJ# [Ӻ}+LY5<ܫMS}at|0 P0 |"4g |MO X^20Q>Qg,o +8Ht&Y.uvpΛ}-_e|=++zj<26ߣ +endstream endobj 3718 0 obj<> endobj 3719 0 obj<> endobj 3720 0 obj<> endobj 3721 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3722 0 obj<>stream +{iM^?8RM>*'\-KF fnTxΏ*BnRkxi\*jvϘף ld|H @!<_0fu,j˕r̂ǔ/y 76.,e*ǡ9W 鴬sJ>fDx돣/#r]m!TՔ騺n.&@u~JGG}͍MSU3KfBӠH=p`j!WMп+_*ω a& wSz"3ܳ'VSK5_^ZF-r N&ec5u'p1h[3"d:5/ (^=Ī( Ǚ:A 5Jݒǡ H~\Dx!@-C|N~rS!ÖyծԁqH,Χ8C4HoD><\RaiOUH4੄ۘx{S +arR*=Llﻎu=ww|f 4Zu'#{*HNx + ר:ܡ}{Ftrn-bHq1;5'uKI=Jz\}\#{'7iҦ:~ :]B}fW=Db4AnBKhߑt= #ʷ2JMEv6(fQ;:E$(9LB֖E&J&׮ Y3%$.љ4dSR]MoUy;urO"j7 +tC{AtC;w6PCyH`Wݰ V۸UVP}~lzfU b2u@ݪ \]XNo77 2YA 0O DazTZ+ u_ǁw!oќ ubRTT58gS+J ſQ/)7uؗ^IrrY*݊flY>&긅h;"N*Zxu'Rч{5pFӽ] +endstream endobj 3723 0 obj<> endobj 3724 0 obj<> endobj 3725 0 obj<> endobj 3726 0 obj<> endobj 3727 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3728 0 obj<>stream +$RE9~ Y䇓;7Bb?>UPֿʌFw?{q86rZm3.pUA}`Pf;#'rIFƤ1Y>%a-Yp#lɏ0l@5;])hN٧˾q+I.[z?e J76"<-˵ z9ň:P?jdp++1¿VRTBt1\j ePmBM4[Q#&6'@O'k`NK7jlzq9ZJ8yWUup,DصJƃX E~q.9㚿OAbo~f 8JF v&ہFfTO@wj2Q'2Lr> +J%Z# vrE:#BJ)\9 +ܗXg<{M=x]}6Lr-]jgu/O+=5jjiq$׃=־"^vJMb| il +XʀLeL7qnm&? O8z>g,"11x>w ` F=aWMB$Y-]E=0 +{Jw7>Y_Y%RM'ֈg,ffD+CfG>@pyQ$+_f'{L'hʕqgC$g=@1%0FOPHbF cOv'SqbN.4Yۋ%=0Su`W*(gCk/?VČAYϣ,rP+][N Α%%_.AQ.GzH6n>? %_\P׬ .x[zr򩻧eq>Dlc=;14#ՙw;5X;61c2J):gM\MXȼZn̸ey7hwyhp{^[vqϝA zۦD ͭ=}JL{ٌ.E6q?aTL&r VnvL Aa9XĮ˘=SMTT +{ҟ rq> endobj 3730 0 obj<> endobj 3731 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3732 0 obj<>stream +t&zN Т=ĵ2ypߨU_>~rZ'ݤ=GDGў ijP90RSegp( oVvR^l,А8Z9H\+}?.O^$oc\= `WkT Hqai,"V9cʾ1rX]YNHf,sɠ sh!'k6ǭ'Зwc)y+E g$(#$f/w(y6j]$UE>rUL "*wiDNm|`x?% y&4n$/%RGE\v䈺p +>$ g?;8^)8疱As_WdPO*Up%@TK)S&e3Ԝծ~\6WWd wQ2|tE<펅%7e.,RYara]A3&HV"ͯF$ =eךȊ]7m:`ۤ-̵,Psԑɩq/}!TYO7+u納eBj +lL#Two\cx{a^Vedb澷 dz@ Ea4l}0ZY0PX _u6KY*UecQ8vPSxq?Ls*?/vٗZMlT0\D_6uidHoPe[ҵ_.*ijb8nW"->Gh+\mvϗYpkA&G*ߡRj +endstream endobj 3733 0 obj<> endobj 3734 0 obj<> endobj 3735 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3736 0 obj<>stream +,3$qty!s`3WeH%IXE4K2ɡ^=zsa+Y?A|^*1aðtB |`xN/NF#kjݭA +K$l/˯)|j"ka$jv10n%et;m=ҪpK3U79F걶^32bw ҙ/$fKԺ}كV-8|Π٭ªx8Es\X[d̹R).OPvǾ#sA-Ð,HJQvu_{*T` +AmeSKsI fĒ/#tv7O-4{?%mSp?srt] iZ711bU@ }ĺ> endobj 3738 0 obj<> endobj 3739 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3740 0 obj<>stream +|D&S8җҡҴIbbm/&xqf lb)&vrCRM_kI?7+B$R OO^N]j yJ5056cnUsu7qbjTpo"FQC(I[f<4sO _,Ǡ +< qt=-O\T¤ul)=/"``w,)9B>:)]4cqܜiRDsVamN-Mm##L ,5}0v:\[8ekGhkl_>80[3ovB(nMjXN*o*4]g/J"Cs48' W٠FyҞ? Zbڰha&`HSl̈Q(hh`hnla 6,5v?N@ kZok8f-ԿWr_8Mp/Fqک͒S)0ב*H5~BN^ F]~dMp'>wՎD߃iڧP"%R@/3h;3/K&h"]2_2k>j.#(=,\kOp{_IJ eO;va-Bo8p~s}&hi+n&?> endobj 3742 0 obj<> endobj 3743 0 obj<> endobj 3744 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3745 0 obj<>stream +=/T$|T-abj4i{vdAJfK&SRh(0f„4븥MyTbM%蜴,m="hq?V,4eIĎneu;l$]Zwn{7[P' $Gx!`\2jU[0fÏilD֦J;e7j8e]獮V_2~?c&%WI3'j(]~̲I^#6 t}k ɭ !Rܕn-t7e0}pޒfLbrqt]@CnL# T?1Yh<,lGچ5: zZ5!`TuϥN=% mT%K1 YR`f4ZeQغ BIzl7z:kHGE6RaRzpSbd{y]O0w/6ӖԞ0Lo!(!JJ%s^{}m*lP̆JekQEP=U‰n8`c&R`}¬U_uZb۪>~e<`A/CQ@E (kWD.qKX#M&ek#NP4) 9F޹.>Unn>CިYA)| +{w0#!D=<ҘVYzC=KC֗Ms]N~w+wU4I̕H.cIV o6Ҧl^0R{(Jg3{rv !Fo@nE0;md3Mx? 48aW~?0, T.X?ތ/?4bF1Җ6Fr!#shH@A^6UBɡd *$:Uۄ;J o[}mk6YATeia;5f9Lqeg ]$hgj +endstream endobj 3746 0 obj<> endobj 3747 0 obj<> endobj 3748 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3749 0 obj<>stream +i3y/!wBO>O42x]Q#G 3>.8=@_XR6u(4Q#."Ns"xcg`ug,@*7q D=,8LCd~^gȳ\yykyL58a{#,iƦ?Q5FPDA:&'u$QI3\$4esW!lu +.ayyIҥ 8Տ pׁ(P;[73eqlduql@RZi:bu.-Uv(G5??{/¾x xevq-GTfo‹H?p̬N}%F _e ( ( + }Mnhs1UYw+7B.RXۨ.A2LΈ6t^;$)@QK~̑z5lՖѾ5-(N#rH87wpoXr+`E2_Q6-Zi'$#)-ꂬm- _0 V}nx-h&, x$T6|߬,S%ܭVO_~(B /wJObwևY{Zp;4Xy7JA9]s%jmzṀZZSPz]{xL`ogf_.<=kgBR"'Gj(WTAPzƒFdE G >[太Hjd{- |Ca!pk{m<>Yhf!qу-9] 9 l$1(˧w(J?T狳Ca.qߍ+냯R2F=RINHSޔ!' +endstream endobj 3750 0 obj<> endobj 3751 0 obj<> endobj 3752 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3753 0 obj<>stream +scL';b,mj%3x) ;R8r:!4Le˓}c!R:R{hCV+qέs] ))5p.mPxrTc/ LXxIt7&9UӌsIO o+ϛ{/jQZX +c"v+u:X0،[k '96WA88;ۋRϲXu)eƒu-bVr KP]l!sD:DH&{;CK`RB8Ll/c ]esCռSO; k; ÍԈq [G9t*N;T9Lu`%Pg`a?K:Qi:i*F0e1qqI]%qrE!yڰ 雸O ~1.Bɗa/\0$Db#B1XUuJ4xZ( BFUj GQ)_bǥ3K%&O~~cZP^L P'?Ik&+jA˟#B@fήU 2} q +$iCfx^8("J a%^:SlF0)0CT (ȋpjrfoUo +vE e_.(eIwkπo_egN8eo9$6.58UFC=clk5|û1&^*KG BeQ⢴*hn.J&jt7cYIўޢM;lZdO(0/YލO16~|)͎hf5i`s/wYnA[`{ՌR.zW;el"QJ)#dn+WӞ +endstream endobj 3754 0 obj<> endobj 3755 0 obj<> endobj 3756 0 obj<> endobj 3757 0 obj<> endobj 3758 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3759 0 obj<>stream +ZڟBb G= DCQZA8?Ӷd.;*"镊g~wGҁ[#S޽gh#k |>Etxh!<{*^,Z`nWKOYG|KS&T9 gݣLZUڽP~ +skȣ^q?{Wo/2js?Ba"BFUUuX:kNv1\.V0]f>ө4.pv*ѾېtZX82Eǟ:~M}/6rr4!B8vA ܤFڍr X>Uٶ7L\ˮ%} KJa!JZ^} +}?)d^X.ԉ|AJ{U8Sd¡0Z uGO;a81g9j{GS!zM^{NaK&Eo}rcO@QSٗa]?L\1/u|fT D#B!Y@ T魯%aܗPLQ&BV0Hʎ뢘KtD,|_+ͿnG L+ +\Y<J*/0g] + 4S[Χ6HV=CޤJa].h~'!n?)\%orG葬 Q)SJ,hR| lX0 +gfDelNio%(}uo`3>v>=DLGz<$4݌iuIkjs`[~ߧ=^ז_5rV $iZABxFՄېy5rqҥƎc\ZZFƔ0T1w'7\h+)`CʐMntvBZZh +;![l (u7}AJHW>v6LI>\w{)A$ FR݂8/ +endstream endobj 3760 0 obj<> endobj 3761 0 obj<> endobj 3762 0 obj<> endobj 3763 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3764 0 obj<>stream +/ݥ;%4']ob4\Ѯ2>QT1>/XuHs9R8׵E'i[,H[ED~k$&?hJ4vLhh=w&Lk%eZbps=ìgs~ZR&;O=c,J9"ru>/3k>aMƣ%,#kWEao5s՟ d !.h9&miAH3cR蒧Gs4W>[*!}ܚ~_bjd\E>Rp_룜\Hz;*_D0m +Axak|ɣ3sWc1=6lp39tDe.gVCkɏ)μEH ՝=O:J ryS2E- +c: ?#naɔKm7X axLQ*/=Wyڄ*rOW5t? -.'g3}լ\H7:..ٝ'_P:~$b2vAy_:3~a //B؝t[$V&H"ZO,;3 -#pb7fusFSK9QMt(i^T0`59d] (OP-r4Yzu`MCjcHz"z!EWl]-N61o/uc "\^k,u>X3N|X'17;wjsIMM˞N@ټ1Xc}̍,gjmᦄh8qkcry):D̯1ȏd%F؁"X" 3-!'݋R6slDi&ĔX)FfIï8ddŖzB0 JʕZ N*(f˯ a!( Wxv3(Q9Ad pNgu2,["hb\kAYw:?b6xgBn{T/`> endobj 3766 0 obj<> endobj 3767 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3768 0 obj<>stream +RsޯZ_k,4&RCθVI΃ d'%,E# c{ ҶD /8OBq=0#;N4[qv"a"e н(ڼ- U2ꔵ7|e=\`AR  +MjR390P_0@Č2ڞ)@4aƐeNzZ->:p~ cyE8v[ ƐOu}:qR;a=M.HG+ =7VMRQ(c4Gގ#uT&(;ǃ4]_:~XPHI@-!/^QO +B\dzي$rJ~^a@ +kBU,\hiN~Ȯ_rJ5]RJZ a)}ʪ 0FRCzҏ=T5u 6bۚ dB5P$0ՅLB|᱇øFpr:6~ kp/ X`P+[*jm[@~Go7]W 4``ƨ1$(%<ךaûdI*oGܹ +9a.o3nɟP~D^hP1]+ӕq([ ^ =~_oyă]3<{_e}yjlOڽ2N& 8*8Y1:OL*"In_w' شeՒ9a|=kak*0B+#O3GUApQ:Zâ j[&%j;d6A= 7 ރbttTe`=6uˤ>FSvYJkNrXGZj' fjl3>*ꥐ񓬤|وz*w†_e H%\6]q8DFˢ=\xW Q:X +OGy`2YIW!^pTSMYfIЁ(΂MD|y)]{$ M^HpW' 㒨C j!z2{Ot^C6*\ kKdTGcg!yE [xivH04C?v(mR}vdY{ɤ/ B*Hu~C?Uy +endstream endobj 3769 0 obj<> endobj 3770 0 obj<> endobj 3771 0 obj<> endobj 3772 0 obj<> endobj 3773 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3774 0 obj<>stream + +Zg^ ~'IGSszt@B90oqo8;jWFiyIBː96XW c.; %F y[6}A+:J= +rضhg݌B!\FJ.a\ei!s7;djuv)ʁ]?4ûEŤǤ(pnњ&\z$)Q+frwP@Dg挺 oHu[3)6H. Y RADpBڌ? { #HOA[+|"8G6a Mog4!d)֧=i UDɀ:c愤ZM8gWL!螕vy+xAŠ@Hg-QÌ+k,(P9o"c%^Ǒݘ{ekр +w镕[n @J~)n1;2òQ@3F H"E+{~z@=Z՘;tM2=@Mx3=1//M^p6P[8JQw?|oB2KU_ Q`rxS^R$$ž[9Apŗae͎.0 =3ݗU Oqy%ksƞ p)%X [>֟ +4Σq}T傓bA\4FgMИB3m v&`ǜ)L'dXZu(ݱ.Ilt!Ub(ggBٶ4w@|ۖЕ/ը܉G6u講.2R7t>0DշJ0'b^Fv,lK?Y=r_VFzVMȇ4z)YT5a)x%%H!"+T' 3, < Gz!&ӱ?a\BL +endstream endobj 3775 0 obj<> endobj 3776 0 obj<> endobj 3777 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3778 0 obj<>stream +_ođTc5o^Mfw*)('>utCyz$Uf3wSmݣ.\X2.N3>S޹||ӮHe{+sUF`LbnInDns.Tj&dyVKth6A!\Rf9;̪BF @Zפ x?-kwǿ@|3P?bS33Bo~rcqA]=5y[R1 ըIlGX@kѢbbM2]tNr,r_ȟEg9FBɋsL}I 쿨\U-cFf'`i{·#6Z41PdNȸ `#0>cd F wQMa _4b'q +wcG:¨[(kh^4, `89¢H1S EΦ> |LT^{ װm/v&!Ƥfέ]?Ql(#TQuM&)]I) ѰF}5+Vm@ z),K_1<=n?WG&x=;H1xNGt^a@j k,^5%o[MƕOF~yN +endstream endobj 3779 0 obj<> endobj 3780 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3781 0 obj<>stream +\S餛 D[Y +*JalZPBZ%㶜dQ.g͏Jq?`^pbhz4OJj3ZqY^B/2W:։ ] +x7:;{t!͟[Ob()56M|Adhx0*4.g6zL©r yFŖlLd)~_d0~s5ÆNFІ<#iq6Lh> endobj 3783 0 obj<> endobj 3784 0 obj<> endobj 3785 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3786 0 obj<>stream +bj[ݼ|SJZD]RKs#ߧs~Lz<| Q|Hǿb Roi0tІ| +NcI8y"(*x$YrOK &nèk"qI1G4sNF9a<Ȫv9GYZM?̡#q +^a\hw?6};C-o6ZP",&&8&z2(MW'H? ሪ$LUY[cr!pF ;r7q\[\'6Kp/] +j2FnQ"U +7 +.DpBD 0W޲1_IGNל fasV+%:a@ 14lQY`YO5QwVDߋqByAds߾VH$vɻ*L\1{$;)v#Sa3R&`\|GyR pK TVI2 {_$M_LuHnbGq36V_|Yv" +4ף,cE4Bڦ%OܟAfPtԤV-[7fvf+zI2 xš-1hw5cD& [遷p%Y56t3G7 QӳQ{pe%P}p0BtYS\ ;!7M|VsH@Os]::rZ5YhZxJhwu:~d*353n0ِyIǰEi~.tq۾%i(Y"U|KQ o?~M[:~>k/lm*E8dݕ,+^iзȄ_2wms;qdﭝ243Ei 7F8iE +08p1 6P%w/^楷&1mQ> endobj 3788 0 obj<> endobj 3789 0 obj<> endobj 3790 0 obj<> endobj 3791 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3792 0 obj<>stream +j8mxBf}z>xD&S,t!b\xXB89Wg7X^(Va5ݎrQh`ۢ TP={tEQH>(̡j9߂!oPXSS(e!72;4φ^-%vY-7g,9v9CM!1EPeDGx ?1;2>g +h}WX(줆.Q(us؞ z2$Z)e(ulEf[ VA;̯ŶcT* +2zzIJDЖCq۽4!s̥҇nk@F)ϟDԆK<*SDq!Ar|D3rd2FĻ֤zLIyͤ0.9<Fߥvϣ @&nuFVKAFň.qq+g0%*<ێ:Aj{I )Ӫ @%ʷ˽"I9:)XQ^γ=y&*w +>uI I$"Dbg3.I>Y#_4xͭ56arՍ7.cOXC6FJrb9O9'IYu&\OGA^;8+Q 1;$=E2Vm(ZOfWʝ$q_qS\GeL+|rJ%̄( 7Xl6 +j#FpyZ/y +:`*)fҐ([]E8p{%Y1Z#O~?P-y +endstream endobj 3793 0 obj<> endobj 3794 0 obj<> endobj 3795 0 obj<> endobj 3796 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3797 0 obj<>stream +2ri1᭏j~3zUj{EG?4_|LI/FzGIbf6 +;7`M;og? 3Zj`=g/NM@,ھĨ '![?_;w>hX*VP5- i]%49a'|D^" Bv|QP٨這Wx `}ys)+^WÁ(:,5벼SmHύOT + 1M\&d˵ uIpA>r{e*e7)l8*,0G7ҤUu +ib83:1i5^X$RNCJ閲T5a._VCFn5?ƂiJs ד"V5nqhwLX SYIRᇷB =jFa nˏkK_f"r! +(82s ڛj>-F:y,G3iFyfG4fvTGkQ@`E XtBT[C9m50 +1?SEr_EsMD}HP sG% |#u6P +endstream endobj 3798 0 obj<> endobj 3799 0 obj<> endobj 3800 0 obj<> endobj 3801 0 obj<> endobj 3802 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3803 0 obj<>stream +;oY?y_Z;{r^+vYR3!:#UM&Oq`jWR/*c:95p{GnKgqt77`e^t=8\,͜P6W=> b-@JY݀&0˩I8@5͝| -'[U,N T^&Z*zwR桘E6C?\> k/U/JZ)lP~c š]/m N͉9:,$M$ Y9-˭ʼn-(D.qUX+Vb\I0ż97!IZyTxh;Þw;!0Ga(yASAG [DwvƮjQg!_ɝn%F@ްGhWy-C%%mK}ڊ-R \!#m!? 1$,Fy Dha>-Rt~L> endobj 3805 0 obj<> endobj 3806 0 obj<> endobj 3807 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3808 0 obj<>stream +;t/~]֋uJg3cIE a4Q(٤󣑣mmZ3Tkiʞ fuЍ 0|naesbUS4ҕ!T|.A*Si8.d97d")f1=`P`P:̢AL21yOSg7G3?32lS(.jb 3)#̅$fZ(o_e$2-o R@T}ѧ:mEby1NeoqJV*ԁ)w_^y:Td?lY@cĸIdaQ>9iBaIвWn\1p~fROc,](#}.@ZnT؏G )ܚub~f9͙pswYRytw]A Z.֕<\ɮy\C-'O#E-~s /MGB:`;:Mk`ibm8)ZɠxXU[vw<:G_lyץr"E):c|X4R]mfW^F[šleAh'G2Sn=#aA{ޕ#%N;6}_7F)EMIFޙ]JԓebR-y(~ꛪJO^!&6gR> endobj 3810 0 obj<> endobj 3811 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3812 0 obj<>stream +6s`v}̌z3#G (Duw0m_lq@szNy U{JSԀ:ݰ_2f_oU 'Ɩ֭ .|e0 viE%*T<ݩoR&C asR_A{4˓] S("y£X%_6*,vU.a~^qC%RZ%Ԙ>qU^b4sh1nv +`8l7>'>45Zԑ4ٱ OŝӲdлn^ ̵D +AJՖh׮.optW)0vBwq3B URp[Ѡ )eL{;7(aAbr(+:@m$HZ})Gޕ#w82^l1I(p*Vp"8sY LЛ^019F5~FUK +8Q^K=uX[ʟ"r!J0lZF'3aBX$;d'x j*fĘkw½6`ѝ=ޘƨhC%ܨ.!>q5WD/A~(`x#׷64sDABO s:ᯗy!G{T_ +endstream endobj 3813 0 obj<> endobj 3814 0 obj<> endobj 3815 0 obj<> endobj 3816 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3817 0 obj<>stream +duGѡ:YgJݠ͗wP`|E늨PUH'Rk^]q/" +u`ZHnrzn'oM?ґr*ĬI4_R>%DMVlsqMwG^@<=BH[cX.iU/ +2 gaъQ̳|@QELÍ`&[+$MUK90y*Rflc@^gX]`n'/{ԑf6y+LʊjtҏV`9LvL!_yyh-Kdx`+1S #q.X֝:wQwn0p _nZ]!3S 9"DOzOVqH錀GQ9. <7Gohr;t)5Qj+ +=k_o~TRF!%k-d6j;DTwi z[}GubC=,cj"ǵZ(*yVS.UeƻSk+GٖjAc2 +wTP<1eƅuI2G[9<ݓ*rwn |Ŵ .L$hL Ox ?"g: ճNGQd(? $ٟ1>y*>О[ęΣH]28XtzT9ꆥb$ r2hj+$YaA+j[b7T[j (5ekfv|^qڿ0u=<:4+mk:d8yԦgkXLo]CfRs)X +<]}^τe2hشp UH{ri1 +\|ѐc=c)ˤk9L'2}92^m:iR>tH̐% }A(X}\NZ/ ou--mttkӿ:y?) >1 +endstream endobj 3818 0 obj<> endobj 3819 0 obj<> endobj 3820 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3821 0 obj<>stream +zlܘٗ#R7BPW^`gYz(Pl^ gęՋd5 kqv_ĝzT*KIc9(BUv +hFŦX도HwFb˂uh#hQRm9.HU4\mHߵ_ފHgk{ٖTA߰d ppjL=5[ o>0_#la =V]R'&i׃o㼉^*dَBF /ѭ 68KIÿ Vi<82WTsϭ +6\UB ˆ6w5E=OgHQZP )yyYx7&yz/H@ +'*^!s@ KQs_AkF/f8o Hޟ_׼;(?%]L(dt=$R{~SIJux7ߋ`` SOs]Et[,h]\ՇED PjZh&"6naiϰ.60BuIEIw(!q5xs3ᄾy"]ܓN&UWz?8ADr3ݯvHsN8ƜwXl̿`nO@%CKR3Z/g,mB 5-5D +oڒ{v8MD E_ĭ>j5 ]GkGZ(hNjH?.Osޖab[cҘap\le_oPEcfBLsyX> @ۘ2,f}C;a4hqQD?crq0oPC(po{)ce ~8TwLx; +endstream endobj 3822 0 obj<> endobj 3823 0 obj<> endobj 3824 0 obj<> endobj 3825 0 obj<> endobj 3826 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3827 0 obj<>stream +:ym9Ju9Η{[O ,RC%|U3IB|_A#&7OD8eULf|nA9rd O}3#Ʉ)|އҡkfwCOkT2}ueya2np`C6Ȅ7t'ON:/` Ktk% +=R؞]B^v3yE)b" axZFeaKx؅hMʮ[re"s /’E,$@d6k{ӌ5ikEںLخ(>'h3P&W[cR4 29B].\‰M5iwcV$ʝ7/YI4*qHYE Qi~In[ېXW{(J)ec[& ! I2 KbX,F '.{K7 JA>\KCAߧhemr&(/Y6Rcz-0Sy _RD}9Sw˹Ȓ{(k#osQ]_7;VɗyHS R \"*Dq~s~2"lQpm~4V*F+y heD454.%_6FpVduAVѨUU-xମFE +aņaxg%kW[=sOܙ>qdTNm_Wfvj2MɯX2Vcɝ"š% +_>sE3 +ݯy 2kJ;i"BQܭo^E*TmWYR:͚קl:QK K<(Bm;O&r^ke2_)?=p7w7NIrDt|bm$ xt\'`?$/䅿 +ܫ(%{8 l$BK둒|EhÁQmHݢ@uW\Yl ETgYGB v+ `I9<_-ReB8Bۃssn8YOF6#hetm/V jMF-LM!X?GjrA14X~ ͫ جu`Z*!v:E@d6$ +q<2C;P7A<.B6M)L/):G/!oxz ݾbN@*lAq O)k͜ +endstream endobj 3828 0 obj<> endobj 3829 0 obj<> endobj 3830 0 obj<> endobj 3831 0 obj<> endobj 3832 0 obj<> endobj 3833 0 obj<> endobj 3834 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3835 0 obj<>stream +#`xlOACtVɬ1\YBuwbɭH]\0o IH("zx8Cnx5 F^0,E5 +{ty;jN#GZ +6A%V*Y27l=^'~{L/Ft)3HGH%`f2؏ +q* {Y ANNH~:!@,/\^uw`$^sϞʼn]Opz +x0ݭ<<,d5+̯ɍȔT>󈆨ܜĔpUxxa:fw-E5%=ش/q +6ƀbCc3cP)'n(&sgy++e:Re~?V:p0nC@:N~MNw͔5O +(ŷ:ނBgY?DEve.isEw&cjNpq$zt\`bN HD'dh&nRO'O]{…I3h\d{]idd_~Aj*e>|y+. ?_tEj5/8c7+H0a70!ki84?,Q}v!Є [HH;,ܥniݪ,C]MRsSEsȇ +7=#/])Ch /X*O<Pul@R% xTE)h[N%a} m0 +evBJ;iݘyO5'KzTl6{پ63!z!tEhQF~+ܢڕZ.N4P[GBB2d!?/ hWe)CÇn Tj- l XϸεK +)l:T .3xp >A: JymC^ˀVa>nwq;0ɔ A76x,(Rѫzj~l;2h[* ȺF!.-[ia2TYbH,D]0nd~4|p.jxʣ{ 5eyCSgEE)2,)#P%otW-k?e8.wU$ m_8jlUbXI}Ɂu O Y]]]6 +endstream endobj 3836 0 obj<> endobj 3837 0 obj<> endobj 3838 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3839 0 obj<>stream + +8yЧSÿwǦRT}rq^E +WXPҵ?N[b?K +6/E _/wIR=\$oܩB{ tqvt',j,~X3 ۸K-"@+; +$KV$c'Eb {]LA,~tHThc:2`$5AO~}խ0U-L$$s;;^Qy Er_[(>dQRU285y~7~`ic(x>IJdj"%Nq =dz8QqPD|5K1nZ" ޤm.6R9׾̢k@jj)kѼNT^{gKbH&P+2b8a;?>i5EmvbڨjojǕj+^_>$fa1NWͥY֍khSwb0hxja0߅aJY-oZmJ@c]>? r`ro=Aa cEA? '_K &&IU@W^0628!_4>*qM2?ޘ-I ;Os1d秞+>2Ůo!5.>4GmIns&ӪkgFbuoQ`1zv鵛b;VI7ӣ~l0)I̫c׼Qun#MPoqMN>eYͽ;Xl?* +*G`+$RSNhl;]g̿ q)t?bϽDtnWq21p] +endstream endobj 3840 0 obj<> endobj 3841 0 obj<> endobj 3842 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3843 0 obj<>stream +.Y}R}V1Ėeid~A\<gqUhU%֐Κ~Q1n|͜b'p^=[}Yޱ +;ArHcmTK򪕳ꓠ-CΦ7Rzj> ,ZBFHISotr,++<3]8:O-W[e1~u;B5'O.IMQwZ`npn*D,%i#Ivֱ}3ibTMkRXFQoz%C@.uE?#’V*gv_gEt$xA/A;VGϪ/rbrZk԰K*9z&B?Y\2mQ=ّ(qr~zJH꼆a> endobj 3845 0 obj<> endobj 3846 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3847 0 obj<>stream +_)-: c2U +s?* Ga) äzVr[O6nhoX _;_r~~kB6Gqf$Ї2`cwׄWy/ozXݻ87w,6νPXí;31Co- yb=zux0 ڛ'^98tyܽꨝT<>Ofn 6-0)q+\ }Ska;~-g[ek\Y(CW7p~yYvK+H@iklIaǣ ^{p6fHSQCۊK9Jư8#<stZr@[+foG> 6yuwP5.eij^ + ZPUFy]SɪZ]MTj&]nk>j5ǨBmA,Pug=3MNBk}4lF*|l/IQ\>pxzxuJ5;"6݅' 4jb +#(rH]x> endobj 3849 0 obj<> endobj 3850 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3851 0 obj<>stream +ѻ!g$&jҁ~эT*J~+4}7|+P~L.w| .ZR-=+_Rr 4Vc&d ^kzAT?_i2bG`+Ǐ8C=wNu⩀j+} qV1>WMf/Iq}ӱvb" $dhv 0`0a.-`8vpi$9:_LstY}PAه'O48?@TPX0&r_,*A:|%_h]z2yͅD>*p p~DIT`wY#7dfWG=IvYpSBlLA5 #պy4 8 yhrQKYO?U줄0W +*zfG,#6I1ʍu4c'dcoQb1u_&ΑH>;=v 9Iw,ͽzWrL^\LqRÜB4%׎+@IFU@qy"tD7SdEZVc_ rS:S{܆f>E +E '·fT'V,ʉ_PMY<_: +a}2o}SNR<Q*$d@> endobj 3853 0 obj<> endobj 3854 0 obj<> endobj 3855 0 obj<> endobj 3856 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3857 0 obj<>stream +Vْ\ǰtoz?lgUARhpcXNu[BrmXS؇v5a\]7]ɉiZabU0n6y(eaqV)4C@\Rm7U`v._rYA&T@k;A#?tG Q^c8v3ɲdD,5QŚݷGhԷ"UHv ;(.0Eٔݓ4%D݉l8 ڪg6XfoN}=rsH!g:tҟyx3ɗ~X{hz ,P{KV B" b:9lQی/%e'E? +b:f˯b' +96R1dIhhtKZ.zG ^zm=>cy_T-_OZL_d!Ad3˲ +F%u 8AE*Z#U6bɷsx&!): hQx^ƚƈein.l[:'r*ptǻ>*d ^?ؾKލ\h<%v|TsvI{ʎd!f:aӊs&nI)ZBvp; g`~ŀ Q>#2͜YWu/α|*Njmo#uCq(754ob&SʭgsmmPOa.KE_˔IFz~Vo]K+-p)|V~@fx&]G-thT}\iKJ:nFH2@cJx(W7ADlAצj ! XHb@0߾"?}9I^#><<5}fbͅC|7ܸ[0&!]juT{0MJyKV˓2 C3 |r~ҽr6b%`Y[K 0O^藜 +`UK1#O΢.)`Y%oqv[i?6=Ccur:λh^ŎM*H1&CGFf:Itb35tF¤R~3PˮG?Fy$~gf}h0 ϟY_zz6_\(ɦB^[ٺ\Aq`^"WSxQv}T 0Ͷ+uNz}b2 +endstream endobj 3858 0 obj<> endobj 3859 0 obj<> endobj 3860 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3861 0 obj<>stream +pAõJw;BС`Eѧ؃^7&3 SIcF7u4"\x7̟-r/#}=- c 9N"o"dy2;&D=шl,^\3ɘB񒓴7!  f= f }kK9ՆΩmfdg*ET}RJ/P4ƹpagP?ʳV>Dſx$S'R`~1#f[h'7 Kp"Ǡf(a]NLjtTNb;3 N庙 DOV=,SGGFZg|"DȮg(a&X`S-{P t8D)N^ pDw*b=Op$Z +4oxmK-_,W#ļ@^46#(;3 eT flQ` qRB/܎IqQfN.GruY 7~3Gqþl5 H^ExELB]''͓jz"ƪFv&P!:p`mL&x#eRsoD޿!3 -׽ 6rmag8U=Җuǩ@I쮀|g b2QOpal dZ|atSYpۤXZ"TcCG[.o{JTBy:'Wq;Z?"7`aTBye5MmmUH䕎YumGCMIs͎9]JFZҾjFI&Ї5O%{J3N?ܰUfֳN?WKg >7OR;:{z]+1ڳS1հIF<a<.*y`|&~?@haة߆}ueHD8>F>xrej2#UGnMkuILd{܍NLoij8+5Iz># hE4̸f*~> endobj 3863 0 obj<> endobj 3864 0 obj<> endobj 3865 0 obj<> endobj 3866 0 obj<> endobj 3867 0 obj<> endobj 3868 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3869 0 obj<>stream +?Eח/.{̋wЇ­n/͞0z,%+nϕ A5tYp^|;CaM^'a@.?4kRnlT[8h55KViT *O{) f,ĕD?܉+؅8i>{*kEF:fXC 3"oC<3iMsO1`j8'KTLu[pL L2$`|eyqQucwi(Q*'_ !ҋ`Vt?+Kt;c‡@9 +=jBj; Wu$ת'v:r/Ds6$SM HB,{sDs [>8WL xdQZ_K *H1YI\(fęFU/u pfI4Mf[VFC(HTܑ`lC q!#ǧIVSwqL+^04*ɃS +rgVxCK:#7>C +"QC+L iNϼCCx|rfgn[Z9w8bS/j=W ^B闰 9]#1~! ͣk99(V(5~Kq[m ~*! U03[Jb%|ڽ! dg9'̙{nP +1P~Yø@sf_͚;{{l˻w UU2~cUVXvJ.q}K8"dv̱;B|` ^&FI"%R%hEJP^RpĭRKE4mBT +{JpgS%Z##o'+4-??N1СNf;͵-\vs,s?xvp+dwE1 f/0ЂV T6ۚg沆"|&ƨ|$V=> endobj 3871 0 obj<> endobj 3872 0 obj<> endobj 3873 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3874 0 obj<>stream +ő};ϐ=K 6_xEvv#z3иw@0vPTn c!՘jE-O +hx# F w{]k,Ϯ"C m~X.}̍z06֩U%a̼i{kۦ:{oF`۽l)୛!/ÿbG@j=ӭ* h!#j!g9RA.=wI*2hkVC (yqP+ϖ*dqhׁ> 98]Nt|Dz}Y,4o9. +(2Eԯ{j6s\${ADܳ/8VlKKw^k`8Vb!So)rTҰ31$,1-FҜ0"殩zIE + soߗ[Vgzx[Ƭ)8\5o@B܅{P¨ڌׅ ({ f5c:&Aϻ#+ȤlGK!GDXÎK% +[ zD4;ae<]-4aW VrWlcx؝cD\Zzʳ$#œ#VCAO+m UB2T=*?_H>fP%70p3kEg[8E&w{-4% oHzoaiѶ3u\zb%i7|wF)WX[&xJSx,:叢 U6ǽ{'ėlx1+#BQq2/V0FFUY>G{jDM +þd +M>.;ld'o +endstream endobj 3875 0 obj<> endobj 3876 0 obj<> endobj 3877 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3878 0 obj<>stream +Y`;F|b,FL]`-tZ[!+ /ݻg +4ډ\^=Vi#{3;\;׸Y0YWhOsT0kpAK?hW Uu2+sf> Jb\ģn|}]PŤXO̲qÔlЀ(h̔X7/O.MF b!B4}}-̰ltS+yXH0JL!5HJZ8DΉH>hMG8[Ȏ #5z0 `Kqt5hErDT'h9ԯk F"r!H>.E1qpЋ>mRF5+7PڅVSJmEhw1.~s+Kg%Jԛq^7*: +$k] re\0F?z=!KzM!z"0OD_N8{L!Ǣ_*uG4|o/<\N3/c.{I_,kaLʝ'ݛ(}tj'[ccGDq)HE0˯7b6UMys%TW 0_\ SճF"O,6lHu &HL؆.,f+X[u6)Gyk  +Iw^mIde`Lb=+A(P\#(~Mo'÷l5-:<(&f$dm1 +qhtVdU`b`v]^8V)1`ɧ mw6oP<|18*E_W>L;s~ƫ: +endstream endobj 3879 0 obj<> endobj 3880 0 obj<> endobj 3881 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3882 0 obj<>stream +2:ݚ=}), A%)76{QA*.|CYSm^*]NcFMbaoLvN +;*Sb~m P?hr + [70T:;\<]R FHmyc3Ć}x6i8j`-7!HL+Wם|$O/ί!\' -sH3/O㖉Cl-URŶpĈ4UkIϞQ֡6"PQ&^E8ڽ gɯsAkͣx@7^ZKfpQݑCCʼPOZxuWb}bWM1Q`Aj c,ODc)3p5Zri ?u,W} +AlM2G԰n:Glffg aF"26W 67^vFu(x[~*}i +{n୷)wݑ*F*6M(or_=5$Lee ."saxM|cߠc @1O7 N2mBr%/ wlP!-.tSsUY$}ęBcJ^t[ a`Xlj?ALjBb<~t^YBifU֛d ]/88$n.qM^IpYdx&vܝ쓅 ]\KDݦ@#!]$ߍxnv928צ d{sfզ:v9 wuo@]f7Ko`D[r +ϐ?#Dn\ͧrB›+dV_c|SpZ Lw򝺪9KA?o #ԛEqw_N?i"A/c][ _b@Hι~4`B Waׄa^Lg] !4"]fj%1Xi5*{޵SKc +endstream endobj 3883 0 obj<> endobj 3884 0 obj<> endobj 3885 0 obj<> endobj 3886 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3887 0 obj<>stream +m,&<@ý9gm^`ǑʪaV*7>{A +e>=̽1@-?[ȩ5q2=Dz'\$9%ʭ7fqĸtSFX> 2Smh-ָ_x'n4/: (;d7y^ c[Uuۑo~n@jwp]K&DsL04&{#.#~F{G xy!uP ws( zO.$Ok%Y>#>Peafg'lcp"ߠ#[\|61q^2n'.kGՑ`FI CCD—tƉ"<bRZNb`7s#B\!eMƥ +D P9#޶(> endobj 3889 0 obj<> endobj 3890 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3891 0 obj<>stream +l[&}/-gJ퓃,aH+7 p%,|{YNZ2)_ysa!>Zu٪v2ٲ耝OH)YV)18MsHK6"nmFYڻXj~+I ЇPSn-{ӉzƹUpVdٙ?7jn.8_`Lg? #SXuh{ɨƌ.q.1~Jk ƚmpĵo*Qh,hP?J0~VՉoB-4:g|:.S$GWߙݸ 5亅 -"/A\DoBVEɲZ ວ|j(WVz\+9 Wղ.dtUJ7,2T7bQťA! +DڧySXg1|1Ol=3(vbPp9 ZPƕeKB|z5|fb"/_| +\+V @=9Ȯֻ2xέƱ-_/9ϴ3.h;rVdٽQ9mv1H.> u}A6uC__mxYFKW-Y0̕d!F7ndY@D+ˆ)YMQ؋By+$l]ZxL<9oky l_sƘk*YW4aI 4!->) Id4dd$#KWLԖ+x.w1Zz_]?awջT7Q>Nh荻u^pំ`TuW#z/+X $W} +̐vQ)޳tǽ:҈V]UFeAZ^ ^ t5 ʴle.4<5U)$qir"k;W)Es +endstream endobj 3892 0 obj<> endobj 3893 0 obj<> endobj 3894 0 obj<> endobj 3895 0 obj<> endobj 3896 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3897 0 obj<>stream +~d馣q =HSOR}6X %6 `iӸ\f) cy-xB TʁV^Q&" %{]]W IuV@ՈZn%XbT5E5${g +Fx1bUkA(@ ޏ(GYe ˫;:K'7`&o2%1%)3s P-W׼A,n(ydAeaWq6Ʉ_7KwV%0T~ɕ=lN%ch /ئYV[BXcVy͑M0֢,Ñ<'ojX^*BgI&A_D}壦ӱ7]$.\\iᦡvq||ΌrD{>CINH&J~{0D;ZOXulm8eQV>zΠ!z$g _]z~k:M6g> endobj 3899 0 obj<> endobj 3900 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3901 0 obj<>stream +5YnOJrFef5g>eU'ѕ2zrx:1: 040F3ʾfIpOF3N”4*i V=$5(i+eii:}t/0z% jԫN_4L$S~ܗg2NQ &=:m= SPID,zw~UuZD$+rğؤ5s. t>^a%GUfDDž=e-l0mCW0GȇX g'ȏGoKq}٫@w\l~wjCjO OXE}NȻ1 !\ƺ>mhOCUguOKm2Ԕb^D7͟%Ya* J*|ǨÜ7iHV +Jd80a'sѝ4+*oN>IqtTpyQ^z.b;.zaiO>5AzWZ+*eÄ)_"{uְفrcJd:R5(\}2ʤB{vi@ҷ *t};FI@WH~uGR?A,Z>'WuBA.vF YfOu|yׯD>1b0l ecQ8pXAT~_ƃZ*Ub0g}&~ew]t%n'PH +Wo.A+e;׆\5PaevTf5 IKFRܵNvu#WD qIF6Hcwz'j̘2%ȵ"ebXr%\.܌dY c~,VWSRME!pWx)z.OġExnFr> endobj 3903 0 obj<> endobj 3904 0 obj<> endobj 3905 0 obj<> endobj 3906 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3907 0 obj<>stream +Hu >cX\Q{y ̂7dfFԥ:F*fȾIZEL80Gqc!(P-CApi̷PRL/v8k.\n/'Sc )嵮J=p]Jf9ۼW&5mII$~7,{D˩/nvM Y)-6"~a΋oɿKPFSMKO"ZgqvD˟*"u=d>ݮ9ɩeX(ać=뻟|{:6Pe }NC>uDtyӈ4#?]Ex+dqtI9L,/!4{'d|'wMSʾmS7иs5EN|Esk҂ހ0ɍ No Vp. }ش,\c}0ʒׯhpTzÙ1G/9…-V=\)mK  ),I÷c-yԒ0#wm)BMeZQuJЃx*3ߊ<6O->gn|L^u*YuѲ.>7<^zSAY0/o/{S qj!F}6vMeTĠb1!S/!.G KI/eGP/ȭ_!҅]P+h LJ +|<yb;!=ym&VQ餽[;x‚J~tƺ+ZSC,"v wʖp +3۰%jv$岈[L˩VG ڄX89Kʀ[]?Ec /pOZDc^r rHBF!*9/|ݶ n}g;>*Nv67cf_XW(^HVe@ CjS>з+w( 5p#2ov OɠUT>HȌբIj׵=$(csf*m8j5+Cv pA `ÈatS.m5;;SX~W)1d ӀKsdd}m,'ӛNRؒ|-G%26H±mk'7[4%MKA,auoAI 9:"e>NsC\=n"]ΈYO +endstream endobj 3908 0 obj<> endobj 3909 0 obj<> endobj 3910 0 obj<> endobj 3911 0 obj<> endobj 3912 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3913 0 obj<>stream +#"C +[ Ոse=33r?Hu46g%MsA;T:q5aB]dž*^|^"aڵVotp,,J*:38~MO,aegU_r”_qo#I8qH^۫Šj*f:5=!+ֳ9ɳ-* +ö0Ls[swѵPQLJ&"E]hRD3MX[,%K)nHc/յ^Si.n,Bu *2#vX0aVUqUlҨ~NzJrELF Ѻo2eumR٠FW7b3 +3,2فJރ}/Mzyq}A-*MlTA"m(M9ˋ -Ю:NG= +s2D\6R@:4t;t e$i`M|~P@^`){ AC5l{ǁ:҈/̲8ѡ;UGV*gVcx;T6>$DeAdsP;h',-:aE0;[dÃ/oq6Y_JۄvgN$SnkIck0kkl-}.>ZF%r S.4vVْfwB ٣x}墿nhj-詣!5 ;QCéɵ/ď`аCSF|:n(GtyG\,$*|P]K@?j毇$7[k~K01t$ I^\~ ^YȱVFx Fj +ٛUA9{ vs߂P>ShFu-kLb.os.E2ڔ06So6XRV֞mmiMZ|.I:R "#;AůEXz6ƤxaoN/&r$?m9 2p1+%9sryᯤh'á~) P. +c ]kYzp\a +endstream endobj 3914 0 obj<> endobj 3915 0 obj<> endobj 3916 0 obj<> endobj 3917 0 obj<> endobj 3918 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3919 0 obj<>stream +MK}q, 0UŮ`. b+[H5S: +rN1ZVzBb\|5}8nA~"yyhHmAqeV, Z?$rsTbgRڧ+z,a3wZV}PPA 57Y7Yh<Ϥ`CP2}$ّk9aƳ8ɬ0:1Q@NC3'N(9ݗdAuDH Diݔ+mxͶD)j` Z{?sq$'jжWmذK1B[+.DنM俛4ύK+ '!Ddm9tYc{ʴ)veoBKeo2EE7˳ v2 *{;x=;?vi/BSIL^ ʑ]LRK%1պldl/GPYn >%~knLW#B嫆a@z.Fz x}M@kqR͜cZ*Eދn92ƢVw5%EˆL뫣]e!9W$! e5)i>y[坨Y<@tbJ0*WFIy:۟؊R=bPq>IlK<\ӊ{ˉ &0U1 X&3.Oe"J萕f +91e 0clwOw٢Л=ь\u:X@bVv +!Vzq?/ 8}\$c*}l+JA$wdŵpZB<1.pD}S'LrVw,`ʷ#E1@e%U 6B< ﳷ(X"ؿH+ +,-C+|fp.6Cl-WlmӹNoVϝMX(*~E"S9:a7_}&MhU?ۙsI8HC)o?*ILþ5mAR*@4$hyDk&T}- uCaegzG+ W_n)*7WNLF7-na](W: +endstream endobj 3920 0 obj<> endobj 3921 0 obj<> endobj 3922 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3923 0 obj<>stream +3y½d+ ~>l|1$^. 5ۃ! KʽHUDa,Ќ6PCЕc뽁Ey +hpWg +,Z& U4Rq<4{|{ri[1t +1$~[!>4+lI#,Nc:b8Sd&VkUgFC^#G<"#=e/>iG#4O3qBkAi]mdt2:?{(@,=/+ O*k׎]T'/V7u|>:'Š}~72~fRb:IBWI\R@Vd) Pqjmrv8ZLީO *L 1ԎC梚|9g&<)"b}*coحvd^/2(|%!+mgkboBʰ o.$al*g$y 6ߝ PŷaO若H:ERSL_aY,2{"Xewo8 z@X;u2ßƍ#E[m +4UDCvqOǫxuZP@8pM&Wd"a  z_1vARzjEQCDV!E1Tx*rt[''Avf_^k*L;oLXZ+p  L7 +|⌦SH,lf%նZkY]\ l]tpWW`%n0yZ"e0Tiz*5l [*ֺ$^`xhYzO&N @XH$AcT$jWlnUlt:f%‚wsF`QUfs'Jܲ_rZ%FzZ< #_fx'oӎU@| E#&XZ ޴eJvr +endstream endobj 3924 0 obj<> endobj 3925 0 obj<> endobj 3926 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3927 0 obj<>stream +{ +>t`b^rBX[>0Pp +0 +1\Q**6rA>cT$WA'-״l,194/w2cPQNK5Nje -}ZM*?LfҤ75U/Thb` ~_յX !bj#J' Eύ :& &=6;N܂bw*HDb![wx2;壸eɓZtA)'v0JE hB + +Nb|m:R@Q6Hۭ@]e0c̙Q4y\}aKkj݃-FabˬBFe -ݣc~/+J(@ R}S]\$`)9S`[x(:5ue}zY…}EM-mI<ZCqXÔVVvNMBC^enVkО#[S $^WeޡqגӉICl|J +ҥx39CMwG \ +iJ|cW2.TɂmˊC9>!S{\"aRq)#`eNHz}Lwto Tj,)mwc]h[ kGan@OTCH)8'j]q1lH׍9`@1G nFMC٩ z4 +FėLպ5!p?32]G0(̽XW2_Vbt9ha"L1@1*UMU)ؘ]kx +b3%GnwM@xoUm2M.*NysQ&##eϩ E낪LyԴ5(&z@t3UacDU ll0VwʄȞdG}Ct+"P?z>ְ:Y24B넲:EA>PP;"y~[iR> endobj 3929 0 obj<> endobj 3930 0 obj<> endobj 3931 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3932 0 obj<>stream +} u4;a[J˲q MĴbZ'*GlXhTtw +&`ғj> *WYzݢE +D;,`r\s)T:6#<1V&ƌDgutM#ӭG!O,10TZ#~}{mhL'(D)" ƁD+%Uv(*W}9Uٶmy>R| fhx<\yC#t rĝˠUһnQw MՕ?&@IL_:mB yҭW:p3o ͞\hTN4hM*JۻGzt |:,Qmr<yU +ЌDW+X,lXn"n11„-e >H. Y9wFy޴Ś@ŗkd[߯i_9#tNxua/ 1E{1ڴQ*/?Y曧WJRGm`&< CNt=i(g\~ZT^D Ud(Bܲ' +ŖdcV0fb% t 5]id2p&rgOޓ@oپ.Nfmf҅m.ae +\Ků1tf} +!.! n> Uk^kt,{i=o,$; o{H92ȸK4Xv="e\"I +98=P{k/SQ$J1n$4y9`zeԧ Y{G]MyH뽠#ߗa%+!tGI`G)m@?l">8S`, Chj  n{W$RK?k6ct1T +endstream endobj 3933 0 obj<> endobj 3934 0 obj<> endobj 3935 0 obj<> endobj 3936 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3937 0 obj<>stream + lbWwn[= kZL_7IaTih`O +,svՌxS_cp1~o9=i)xjۙzfwI4Ka;z:># +a \7ɓ0k/,@7 1Ttm̙|d;&\+LSVKi=iVuE|@&S$R `@Pp>44l{@Lq[drr,+<}V\bn(HBRTԋ5]y{_RxU's`_e;ԗgϕ0Y.rn6"EmZ UNd{(F`^Y9 +[ L cc8.ql&f8(_|E%Dvh̄h|4X5Zc\&hDMfSZgwhGϙ2i]yQxb)$XYu9^AR.RoWsSxboՖFHp[o1ޞ a)/5/M*^6QH0oW\ŒΫHƘi0 o>|e ^KxZ07)[;6:#;5b<>xSB]./a#TeY HQn(i$a G.Duojieֿ'}6p-dɾ0BGбO&>];[&YQ xE80J0jJ"wP}l u%H&((aǯEr(^:36Ŵ5?vm7-`vTnꫬ5VO9,XCr_r+DkUrO!?Ӱ>`K3ܻl?^'A+BO¤(T $B-!]+6b/~~5ƪ|o9TJ]OFȋ_[8lPRV|#'U!צP9I.+?Xeq5YI:uZ i**k 2#eѡ#a)DeU'*YKK#k#4~lLNLXdZkgYOc\N0h*e7:GwS;MMp 6?v-lE~^!q9@P݀a<TJ{ StOJn L`AZz > endobj 3939 0 obj<> endobj 3940 0 obj<> endobj 3941 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3942 0 obj<>stream +iL^t;nIJR:I}6l;E2x'K--Q0H3"緎>CuLeB<%(=poF,;j (EƗ;˭+{*ÞF2 auxfwزQv<7UgAl5\?7:p󀹓ϟh5pz/l3C,wqAbI<~Yhy\' X Y$HC+ {EXF+BM74!^S&h5; N gR\ˏ! =k6^#&(3b<ӥ*#CˁR:ѪZ-{+[Nxʩk}ixMxbpqB̤.s[zY?$PIP?m`&ߌq'gba-U7S|Hn7, &pB}O#;y N.bhP.r@P6\'5Ah<@\^K1 dӵDFe.rk*.\ 'io=) +돍@1lۏ-"k]؄<+ ~P4mb⸅f'(R9CJL۞q[I:V^sH(# "L$g*|2zm1ssbZg.[@jomɜ^T* k$|ZLٯ#G¥Z,8~r,hSDmy'vBxc֜t^WKaK=܊9^!D/;J׭Ǽu:=\_> 8Qi`QVUۉDWrf W͇PZzvI.4R7 $$tZdC<T!} IXהGRh >V.I]}Ck%hR d`b~2p'hoU&5($3 Q>nљ(O\p*9txfF|O +6, R T47ࢠ0Ye<(l! rr-f$q @ڬ|o`9(I=ܭ`Sx>wrg$#Krh#EZ{Jxc+=,ecj+ѓp@?3ހ/@0AGyE2Eghv@u ѥ2N +FN7dXrYUTރ]Rx,*_;z+q:q&Ğ&'vGLz-<ɮ3~=TpW|'~! XB"%r0*f6\E=J{m?^Bk<J{h_U"kc!)բE07n5n]Z'LL.$OkmFrS5r.#L+I N<>[0i8Ĉ#N`at8jraxJoɫ9{L{PkM_F"a$#'z3ƯWF yg{_*;ΐC!2È|vY%4`Wx!;6h6j$J{1] |Dv}rC)xĆDUP z3Qa l"B*! +3M4,5ii}+7Ÿ>%+½ZT?x.1d?n֝5xнksz= +endstream endobj 3948 0 obj<> endobj 3949 0 obj<> endobj 3950 0 obj<> endobj 3951 0 obj<> endobj 3952 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3953 0 obj<>stream +}f$7:"Q\8?3ϕ5W2"lMQZrj^ZyH +qCE&Mnr)Ӑ[ KzomF O۔=#f^5k5 {dx CA*J/|צȴQnB5;|.YW^mY@r9ʼE^XG]8OK([;E|n_㷥Z%VbŨ}@5؀gY I%-g.,5@'K9UslXU9]-DmIqWX Ѯ\v/ 4+ӳs`d$!wSSLy8GIvb L4O Tsa3ywlpԺ{ȫ6%}-P! U8vRHhӨ@.{nx8rA87ZB\(l2Mj=r1Ɉ%`xҥs΂^SG%EFl4eaoiSwnE6 I՚b~+7ʡ:r b;9;O^3\c +/sC` ~w/P{:nbKAh + 0^jO?ӑMUrI#Ya:(+P0.QrSc[)eyV؅湜.h.j+ $F?^|!5%/ L=0W#D%ܔS +E̞ŋ PQ)LҨUu|,ɕ.).&ӵ~iMt A*55+\6#*^dZky. :V Ɏ +M逜;؞B#PIYWy A∔<5妦'sƺj)eĆPN+Y1C0XO@kFJпk6>ǽ%Rʱ&ZJ2磪|6%)()|/Ln1vb95/mӤqeܩM$s]=d&D&Hb_D<_h0F.[˂hqM7^b_9`mevg2 +tye%]ɣ%dѩ菍 '&Ӳ @IiU&lpU`,ZA\ӪtMH5[jLtvphR}x/_Tc̓1dNE˵M%wTk10H NG:Q vq*d緛\S'"{x(:[;R&ٽ$DͨY3[ŸRpӒ:`amD~4w+wjԧN,8+7;G؎/[f(Ya}!:6 ϲ҅)kSyPEx"3ϕb4R/C G oƢCi#H H[L%^>VmC̑E/w16[d} +? $MQa&p7| .;gh˩&YY$şDߑ0Ş45l w?u0Φ/E8=m:u:.E/Z:M.] gP_TXZheQ3)(k80" Kt V1ōHpg:'&RkntЭJI׌YTXL LKo;i}m"Y͵B€ y  #hHfu m|iJ,Jd +^( رF3&Nd80 J'INuqz+=n׋) q3+ʼnzIhWN\> endobj 3955 0 obj<> endobj 3956 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3957 0 obj<>stream +93-,AsFG[x}<Gks%%G -{ 8}PܑB3*ز6Hk}|7qsq6Gά%f]&k #4֭{ xGfënyys'1zZXidw{h71A`h\d.TH˛/lH}%Ot5W Qx@ WaGq,'KgDKΘTOY= Gktl9/spE9GDsND^L5gf&5[إ[.{DڧoEkR$WG$볗Ԭl34-!a3]&ЛyMRs76*Ksb]Q2{< bU':Po| /E#g4NTQU ۟R9EV‹=K /PQ.FFax`|:Q ;U)P᭚O<;8';< gR3ƭBWNfΘVzCP ,bf(sכjZ(߶$!'*5UV4%C7I ^utL3z@ʀ翶l4Exי]z) ҼD:lSУ45S Z{i<"&pB*|EKO* +_EL,< j{("tWb^fӾΎdW9Q:OE:DQ| 4^+PvYǛ%ſlԿ충FpDDIOsbKm|M|`tkrjJl-l Zׅyj*gPIio7Na%_tχeco +endstream endobj 3958 0 obj<> endobj 3959 0 obj<> endobj 3960 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3961 0 obj<>stream +13DY̪Nn`8mP'(P=pg-X__3?IPkc쪈6L<ɪ';l (Imn<[i׿? . 0 +EHI +Dkwߧ/ +Rk^{SnܹGx&|K,uK薠J6ȊQ Hc&Sk^#/}kUIѭ dӗ M|Q$sSRh\\7 +D%(dvt99nSFMHpX.ϖ'k(aɭthkp +qjձDn}PUC1m@^9X5K d:Xf'U%n{>BU8/w -ͦPw"g6FMGCsD¶ +ROLGa'4c &57jl_8xSZ^!أQ 1V'|JuUx״Y +z; NXNY8Jʲ0!@ uxtQxReJeQa =oZD$6IKOl YKU qX]|yl[{Kބ?Uy[PE@YL̒z"Q-wot J?@}HGY?f!(եa@Om҄ߊ 0OM љi`xiE nj[1;2kv/H51\ W*d~4ω*A >]pb Nf<LTD9r +&|tfzуA+/0$Ao/]N+z#!UB.;^}EJEL'.IbNgCCU +D7KU%%8> endobj 3963 0 obj<> endobj 3964 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3965 0 obj<>stream +g"rGX~8nP$ 5\&v vGfr: k>>ܰp\l.A?sh=+حxmT>LeQ2Ę5&iPByTĤ +]?wiz4*U={~(-Ց3mk; +XBDh74 a1[PtH\(xϮ%Ǭ7J> HV0N4GcA S4W;D77*NNło\QlüVVIڝey(+NvG-`A{_OF {.)I:iyZj +T4ksxl'1,R6{HOĬN(rҚ Co}!zgcu?{r\[8z(YB)66GN9T,6h)X +W'Km8K|,Wb=ڤgf/8rGZ#AaӬKtҫu xTy}[0PN +Hۆŭv3+J7B d^ ָ0V6PnnG3tԙrB=4G`<?- Mt^dS^d/ʁ(/sxmS0|O>ƟdbM l^SH'P|?}(?x)u[> y}grANp ώ(4;~ QjrÔݔ|2d6o,9L5yʣWJ0d%:Y;ga0=:о>[֙> 'bzK i xd Ua54!8M +Mvtd=D@aa'&X`&n|3}8cbi!nM|E=m '4x- \eOcvy +endstream endobj 3966 0 obj<> endobj 3967 0 obj<> endobj 3968 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3969 0 obj<>stream +rki V,pL{Hfqr۽ ݢhb PCfFk1B>Cuݰ~M:2O*8CWP d,\1ؚxT$ocϥVj-ˀݙTa}LnŇn{Q硺@MSB֢ܿNMަ~1u{4ơ[>5\t(Wwlיj2㮄Ccf]*KwFRKoOgtha6H@V b X@x$2~yHL$؜ʨaAo߆0DLH/:)+2h +T?, p=+?<5,#0/c=]+H/1; + n oA3;Ul% wFzy[vXdvhy9%*-?̷?;t9,g4#$Fuzܼ`o:"ĕ0F@$C)> t>syy~1`HX~َjXN :nG{'D@ c@Se_%cH9v)m#BNꨙDVЖ"l[·%"<F7UAL[TJ*@RM^3OqX@l||&OIJYCMQh !c ͷhp)S.4|BeF#K-H$XTE=&/m>-+*(ߺ +dG@c~ +endstream endobj 3970 0 obj<> endobj 3971 0 obj<> endobj 3972 0 obj<> endobj 3973 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3974 0 obj<>stream +N'.[R"|lRs<,Q߄!6V'gs.I +RH=_WTz)R0pm| +~MމdwmỤk- +LϜx"Ǖy"gɳ{|(__ԴY[!_\G&p'gGi6`YKN/WJj~vOUaC8 FP!6a 1+Ys8G[c8j`\ūGsH#´ek|*7|,o\hS[e_=Š +\85,KgS{rvNh/Kd XE*ypp݄A7Cv׾sgG_<%x94dM)Xr:CUewόm٤Ze,I~w4Ty@f5y{_,rl ;`2 +u׭rsw;N"9≈JΘVOdeӛF7Ti3eCҀyR_Z0밧v/=1p[kheGђ&%<=aϳ*swI\F2N]9(CLެ!EMKu$#"_4'0VA*fn{dz9n2Kee> endobj 3976 0 obj<> endobj 3977 0 obj<> endobj 3978 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3979 0 obj<>stream +86梦hT5A} $^:|v_ej +xgU<[*KDͯ63ǟ]2ƒ*Fqc9bT_EҌ`]W{N܏m zOIX @@I?zꏪ\qz"d熌[ * \Svc*y.-"D-rRzK헪:FV|؄`}jjVf#L4( +{nnprj猈-Zca =$Vt~|NE;zv]<.-8#FzB*ꚥtl@?u$qZ-$9uuEZXaɂ!( m ` -C7enRscNWǂ`7Pa +&'{(qwo;|pI([-7I*n<dQ܎vҡ( 3+WL`ʈ/4~'|A^9MCp!nbZr&,G.~Xu0_uc*1+yЌ)41-x)9+0Wl[sTb[N! R}_|xʵ %2(nW6鷿|>׮dK{|kjq&Cy!7[U0|je^­X&VIjz[Ng{}.r_]So~]L{n06뗭WpB)I~Op]R AC9ɡvVmRp 3%.$n=v*ap?ˌ 5?~ +B[,{S|Mb ʿ,LiSTK +rt*$gOwW;;ǘ7c0g `:{6[c␗aVoћQzzGF^LXX +endstream endobj 3980 0 obj<> endobj 3981 0 obj<> endobj 3982 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3983 0 obj<>stream +fiq_; WVWDD899&r-Ew$|4eI3nKFe֑k4zƛoCewalJ"&eG_TTm?'gȸf~6CsP|o j#j{Gß +>aX!h}t_՟&sHP]p4&PG3tN=H7>ǘ2I8z=NGj9U/DB]GuAENO}y,o(E\l{r^+#40XW5TgdFћҔX C=F%j |,.`z @oc#ge\Ӗ +YL|_ Q< +,) +yZD^(:c2H 7tҁ#;ԓe;吱Ta8+.bNFQښyzy]7}6Z u?'1>TQޕLJP61@oXOZS3wc1%zptC2V> endobj 3985 0 obj<> endobj 3986 0 obj<> endobj 3987 0 obj<> endobj 3988 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3989 0 obj<>stream +Bjrv h2禥^xy=侲YZyaDBeՁ#4w(٪OI2hQ},x R\$<?{J ߈QR_یA7)!("4+ue{ZE}E">/i۶&#t%{iu2R[ꢯto@hXSN҃/\el]s\|D{7 f%HKlaX/IҠ_P| >]9 +rs<1 1{gܓC hΉCWΛU```0KQ-%&w8u /5]6y@8L xei+ xq|1 & 9pGY~D. 9;ې%;훤% QY`( +}yl4wsӡ'r; iuTr疹낆o&%@+ʚv,vݸ=:##l\46s۪}W8 |{_j&fܕB[Y#|֙Տ|50]ڙaaho99!U@qT0 +JВxn:JF綌+Ap*J ` /jX vzeŌ3?я7+ `nEI%mTO =oGFD*DG3{{R x:UjFˣs*Ō_Y wYeǬ Y(lK8j/EҌp^&1]tMbbm:vơ.[D~w5 +4Ic96']G!\2 Goy y7J9n~YE%Sns ʿI┈(rH(q!k0yo VXo?]>Y.i'\& d2M6^0F j43z4שZi7,^ +endstream endobj 3990 0 obj<> endobj 3991 0 obj<> endobj 3992 0 obj<> endobj 3993 0 obj<> endobj 3994 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3995 0 obj<>stream +L)ZF>=D*(ؾA!,v<=@&͚UI*US!u' iCxLMV&kSO<_(۫ Z%'e]^]cGJ>M[b,}O`eM?Ke܀Tz)'\{IR\j/a\g!V]̔Ox'iuL,dL~7/^8qfq{n)A%W-PaRyR8kA(\GDP+@[+/e҄ +21|M4p] +bl {C$QQ QP(8a ,\( VY"w&_-/:v>1/O{U s؎.<$ D[Жr.M=hN6U:M痹2n5 &}zN hDbڸvi\qp6TY㫁Bnqwt[DTYGvFx*6k78ݼCT(PT?Ve}-n84J^cC^˗1{Kgq1G!4H +XveBD~[C5%q-ںwxY1!AqWC|}-m/bD-.X# dy/#" 9?ҩ +|ΐ8퀦O\ u]ƇG!V]J`BO6M1MD;&$ENAeTO 7s]B41yh íd9KFF%1G2"Q[5QPJzİaWZ@js`&OVg'VoP &O]ϸn!\ +v4*x@[wp=[7fF{ 5c<r5S7, X2ꓝ\q6 g&96'hR=Wм1f+<ێ [ hWUZ\ku9?j:7N=(UmW+ހ\fҸ +endstream endobj 3996 0 obj<> endobj 3997 0 obj<> endobj 3998 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3999 0 obj<>stream +OwۄvIVJ5Gg˒\uJ0~N]Ty<7<nhSJѠQ8iZ5ֶ-Q: ޵|26n?T9!*cVbBL g20`usn@ESFT}Ձ]៽<,1)P@Cf*ZbnLƛqgoXlufv 9S ?X*jO4:8GHJhl 8 Tm~2D,˜xml{5`}wن.ٳ +C ԧ.U2`%WկLgdEhudURJYQNU=cw:rb95C8F\0F#$Փ-[ggzùgD6q8äf(A x0m{V=c/_׫HKؒ'u7E0x{;/|k[d|7UW1wQ^>6.or`Fk] ++?)Q_/U0'^K1H'ߐ):yQ6 2|:8w;R.Yפo Z?hM*IX."e.VLEEh5+M[$"_OFwൕI"Vph$h<68̲o I)@m)X̠ Hd}a.}AŠz~m mo8Kc 0n;=KRu~q4-i6?: +X (m|Fg>z 5?(Z&J +xqj@_ DQ]jQ/!0!vo>dX'?ek Hkj &-=r?M0±O1%g-0/"Ц/iθ4zxx&fWqs%vD  +endstream endobj 4000 0 obj<> endobj 4001 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4002 0 obj<>stream + 32XZq/:ճf67#-MIԘT76OM_Qk@j +`d)/rnV}8)>Wɼ*tKۅФ9)B a` +endstream endobj 4003 0 obj<> endobj 4004 0 obj<> endobj 4005 0 obj<> endobj 4006 0 obj<> endobj 4007 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4008 0 obj<>stream +f) + +O˻⯟,a4|t>2:X%Ziğ%uzZS$,R#h:fq>K +->^uOc&j]qjˑ ҟ2ojyoe r\tm@HXԠ ʋo~&V+r\Gk蟉*%[-A tݚ: >>)n.h8lɲi"ysbb=FliSlIe̊jM7ZWL4\C-5#i;P_6S>ښ9 +'7u/n//em:}ɀ;h(<$K>Yoצ R')q7R(e\~'p8q`<f'#iW)#'ކY|B)u*#"N*ru2Z'6vC!bk Bo7y&Y pF )kQ5gefTF +ۓB5VŇX.u8?W bz<d1p9+ r􌨱[ +endstream endobj 4009 0 obj<> endobj 4010 0 obj<> endobj 4011 0 obj<> endobj 4012 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4013 0 obj<>stream +=aZܵbYn3aB؊J闐ƀa=+Kd']wE*k;4]nԻ"<6S|~;PK: B՘t2Zh0lA%E= KBc tNd:B '!ep'鎄齶.7NQO9WEUV_9n#Jw@I +Wz:a0n@kKoBmݜ=ILJҹ+kHyoƐ%ZMT `zOPCध9#9LeZIBX+Dg]@# jP X2/uw۱hju/h\Rb5ܝjƨ_J#}SLhe#C?O.AּϬ\؟4agWf4xKpDT:p=XUh@Qrf8ETgPgwoZ/^sٲTF +endstream endobj 4014 0 obj<> endobj 4015 0 obj<> endobj 4016 0 obj<> endobj 4017 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4018 0 obj<>stream +? vMwW,MF/;H͑V16"ޯ7u+CKKF0et)HӒ#!.9;^%Tػ|"*J:.]GoFT<>,PIgh岨os#=XnC̊#^76hQJSnHiYk/sMO4|#>㥽OsHVklCq2wڈ&urw2.zga5u0ڜuf\ +)z oDL[Xn e#nQܒ곂bݾq wL yLMe+b_\_(#Wnl3tOכmRX4xʔ;ylAuPaAlÈ%,{-ˌ|a)ݔab%C+R^ۼ,+3lâ\'$g`g6!=3lø b 9L5@*Hs _g2(a,=hn8 +(BU;Hd_`Ktr#WҦTyz~ӥJ2ؤ5Cv ۢۤo6Fd>l'<_w΄Q +`ەgy7wP5ӭfEu5MҰ ݶjw+hOpUzkYI㈧AV9&ُ WрR0O^9! ݚjܕ8csxgD Fĥe%ChK}K_Pc} +WUR(RR5C Dw㝜_6ђ:{PMYFkcJ*ATP0 "utn?)=S6fև*Ѳn;jT Fʌ2Wu^qkR>0J/5u Qe1WQ^qB,ڼ hw +endstream endobj 4019 0 obj<> endobj 4020 0 obj<> endobj 4021 0 obj<> endobj 4022 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4023 0 obj<>stream +tW&,ܹ'~\IhTg^-$c^ ۷> $MyZ;RXն~;()SW~b-ܚ#,/#:=$ 3~Џwuߤ)=C!K@R~s:`E32 ++G !ѿ#@1imEě:"O l$ M|0BuWPA8=(2fP -Zp?!,B0d>:$A`=Rg}2Ҹɢd(o?`F5sT"dZBcJ+6Y2Q4ef5w=>!1ۣ(6_<2F8ȗ A&AfoH*}e%,*R˹A.ſITĩ®[QfcP8T~{2!ԹPpu~ uΓnf)ON=}]Gg̉eot:-)ž"VLLњC5ȮMsD .$`S Mƿ!%Xlbͤkj/NҊ|G +6=i]*ˋmi +I2ֵ9*p;LU<)pMH/d4>mʽ7H/u}*̘*ֺBjc!>6*mQ;|Nincb)`#mY9rVZsL^!02 :oii]n.$$lk5ד!>n 20qVKXFZy @ջ*d2dڦ7]-0ji[lQF`t oh&*w2w Kc8!P1RV` +endstream endobj 4024 0 obj<> endobj 4025 0 obj<> endobj 4026 0 obj<> endobj 4027 0 obj<> endobj 4028 0 obj<> endobj 4029 0 obj<> endobj 4030 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4031 0 obj<>stream +q#.Ҍ!I);56dJSo +ec;5WvRɹΪi2p>LfNadILƬúw( rzp|#:=* G%\_C+6Pd!wc@޷7SUMX5$-g2b쬢 8sH-DaH]"Hμ&a=]+ 9,aw6O˕(9q'f2 ``:"TӼm6ިƎ;om*a^.P(,F7Gvzc%iUA /9T**sĄ%0!M9 *<(7π26fX"~Q+!y[43n<@P1R\@O˓+ذ0&f^͏IrnȋgzcJ=͍L&B}DW6'#*gfgܥ^xR&T)&kQ\A$SꫴzK 9Kj{-}#apm Q#"(1esPyĊ3-8- CE.{ q 2a^AX#f/ w$BOw^@˜bRjOE-YՅY\W[~ޙ/ O䵦*QtyTu1ඛk aĔ2RnWX[ RK K$yjb (lZE}6 +nur9C)mQ`(X8cd~e8Jt<#]ј r) Ip]ámkVA@(I/sx~o +k_n/e3Elg%#+]FJ*> endobj 4033 0 obj<> endobj 4034 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4035 0 obj<>stream + JǜI' ,ן5zYrT'[9wxlh?3$wfH*;1W9w.pMu?#g\ +jYWi(cߘ'i@\$}vȜ*/#r0hy"5,74%2B# ޮD,̛/;}Ix/ph6I^λ!FO\(6LpUSgpeWEŋeCk-)B\ߠodo6ƪ*tp7h7/m#&_3aסuES-,PL +2]yЊRc Qb!TZT;V-hƺR>e3*p8f ʑ{"|]kxl)2VY"aR7;}R?Pp2}A!X,rwYY;l-)#_K_?I +JuZ,Kyu7/W9Ovoo0. Y)zډg/5Ew3'P([$P5XO5*x!FG"fHX]^Yg:u;a[@Jt*/7 +RL9^ȱM'Xu_,V0)]{v ~f/.fzMԈ~Fpī2#6yfI%TXH[qOs}B<17w`c]=nwZY#+޸/BhRiؑL9J!:3 L1)4s6^UA/WCG#nUiQ>J!9@8EH?1mPAVRJBvd0qU%1?<ˌ.ԅ (K3ƀX"Bi<8y~ݠɞ6_pGYZ݅VҮۅ;XỲWl@QT`1rfd@=%n J! k=$JB9<&ࡡ(^tnC@P,&W:rW)!Yey>ɀ{; +endstream endobj 4036 0 obj<> endobj 4037 0 obj<> endobj 4038 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4039 0 obj<>stream +h&/옯 gjA]> 'sa%S<Z=K?:1cj!-Y]'=2 KlW'}alT񀍷7S$. hf)g!XWH f)xz&fkćMr =K0|.hXBs6of쑍rkȃ.h%{56 D+<`Qi܌yR!j[n57tˉF@C +/"(wc\:Ɋ! Pغ̱$ѓҁb&PGIƓS* +)vs@C+\D)]l8:ThGoUz'P +qdoٌ;̲$1-r`ס~'֧k\XAYNpT˖jf Kӛ٢N7@kF7%+{`n7W4|4Z4~8n䊞7LPuĞ|ʓiu|8Ɯ +Z,x}[]?\B +l5U"*m\did.GBG'(g{MK+.MR9;+p^7qno/`Mʸ6v _hnXc L|BXEixZ{?Cՙ!Ɠ7/. mBaq'(co">&ϞG-I23kI.@6N/j\\ +.D;qџ"l\j!r;X\Z쵢U..z??qUjt$Am}r YʸM}φ:KůR45^z:| +endstream endobj 4040 0 obj<> endobj 4041 0 obj<> endobj 4042 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4043 0 obj<>stream +BL8ЍYSeוB *5 &9NJ6=? }D$hLa=㗨5__8\ƕX} *ta#jGڨ|>59)m_߹'? ]e>N$eQ-TS3;IEN]11L{y<8ZrruG:L_'wx ۇW!,Fb9k|9Tf ArQ}uWĔz'bk~TͼQ,IFBr 82[@W//lu `M*UZj[s>u%xa|ѭEW +VX +=fp SiA{81p;V*`bvσ[ܩ-ht?&biXx^] pghes|ޖhH6w𢒜 @(j>m:NuUշ +\iڷ'\;EkFx +$@d3rܜQq|-#Dmr*IX6>>C/u.V؜H֖x 7 GOv{cbfpv*T(}Zq$ܤ27 +`: ׷;_P9W,ԍWJ1"eq} +endstream endobj 4044 0 obj<> endobj 4045 0 obj<> endobj 4046 0 obj<> endobj 4047 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4048 0 obj<>stream +_%%>'#( KXo;KTVjy܊{; &^8.ZH7!V[r&dMۯB=S>uS) ɕsVt<{h 'K\l )f&$AYHS]C</bam>g/F +=aKk5r!tVV[F(ޔSN0q &:B.%mKՔ(=DР 4wFc97YDiКrE,.,en }'0ǗR~̹2V RU_8QowcG8`nIȴ'娍D<|_+WՏ&$ d)50`2v#C{c7=mf;' 0M V62#=E2ܐ}B8^H,H.Jj9Q-iE>lfgWz_ w>JRt MSͽaBluV$͈Ü&\+L~% 3@qB @;'o\mѾ&B6`ۑ'9LϟCc=KgS:`4 5‘G=9~AQYV~9F0υ0QA{o2͵.+'!EMpm|Le[mgH\lg'GT=)2a vb>AlL0/%\GmB7I4%(#b@+ <87.g 'c`װ(es#4DZFP0:8K̍oV,IO?- +ee-j,zra¨RVqȉuJ +wtHo[F\@1|VY`d߄%ZM7,ߺi£}%}bQWZ0`iWvPjkuD1;L%("Y[*FLA1 +endstream endobj 4049 0 obj<> endobj 4050 0 obj<> endobj 4051 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4052 0 obj<>stream +U_Ut6 +Z[Tۯn*%|eˌET&`H۷J|0hkg? ξr[NpJk-Tq^ke7ݬc?{86j}"3s=UiuoXCib=)EiWlaN`C1yäC QhN=ih(ӱNTz-D5^?d)˲giB QFf%[_84vWS7ϫc;~ +4ÑZ-Wo += pmyV~Rm4;%1qPbG [[fQsp +M}JeIFJ;ƅ0i_5MEgn\RlKT6q7aHX=ĵ lUJqq(/cW9\paZ] щ +&2-p:F)h_V/fc\3 +endstream endobj 4053 0 obj<> endobj 4054 0 obj<> endobj 4055 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4056 0 obj<>stream +h ȫ A_B_0^VWQ=%/<@N&oH^%X2~Ďg>UeD`V>$5 UDC,!zT6y`轃 Ra^[U0W/KFVgkw9 J8ץG;ϸkeM@Icm٤ǏCA"uz*/'g<~p3fX "Z~*3ag³(r9*E,$B{$]`| s3NFw\A8TC딉x봓ZQHN{ר1='A[b)3ޚ_Q[xV> d7訟TI̋&z7V!z3pڤ̣Ϣ;8fqj~nH_X27do`_i^Avai΀IVR۩Nnc?9mo,,;7@m;īJаBmciй_ s!Z6}{)5>\1$b GX6PjTlх`;܀yy\u5h}ɾob^I}QfكdzS 4]$s )N|"09^BF iLVu.Yk~WTfyDޕBF;GrzNRC ~!$=9-b\pzdfN +endstream endobj 4057 0 obj<> endobj 4058 0 obj<> endobj 4059 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4060 0 obj<>stream +N%'н)dy?^ XXv ȀnFI񮗎<@M}rt ؚ/Dt ky^nG)l3fGh?1u{s>feoRs`cPVwi.Z_ 77uT +<< Rޟf+b`F:{&nO(Y  ;F:= +]ZilNNPfreJ278{Th 4 XlĿLTO6;(cE񀎡gM&1!vC+-fn4U8C0_q[ޝ)1VB,+4Ng ,E_&P\SOXh,ǡ=}c t áЙpӴyAWN̼iw^3bm`OZ=]O &}k9McӸe +;Yab~[y&3v_f-F|k_WWRU{t`bkx'}€ՔJ37 _$LMMKY0Ԕ] "%kU(Vprit3:(' j jD]|ܟe?尠v))RM5X>.t_Ɍ=շn7lUܞA{.=ݒGMo ,miIEIġt)ų ["UWPgB՟b`z}O.+a tV\s9$Xj_I{\XE)>ŏ>Ti\s^J$9; +endstream endobj 4061 0 obj<> endobj 4062 0 obj<> endobj 4063 0 obj<> endobj 4064 0 obj<> endobj 4065 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4066 0 obj<>stream +ކRQeq CpUs2$n!ʌFqS%:blwA$%/RdMGC, 7OX=%=o߆jѲ׉.p/]o?sۯ;^E0c*߂-q!w_C&j烑1 XFV,ѢkTƖ؅,@7V7ݝUG=X4D䃞p<$/qga;*$4v쐮-)g s`挆R6`GKɨu+#ó}bDŽeJ"oM㓳0[/pOz,Z [}V"޻>%JhkNJy1p~V0lDFĕbN +N/d[?@v8د6 +]&a| tƗfD>^cݠ y\2bb#l3*nuW^q#? +EaN 0x{a8_+[跤SN,0CԔ^_ EK?5Mm.#VbedR{I .jE*qearE)X3p :yQjny405X_΋?%3[/$o.8yfi -EtoUQ#Wd##b-:Neo4?JOrS#CPN&;Og6~ #]lHbS|P kɣ*\3hh<fHaw1!D*'cu#"v^`Z?gJ=`L*4C~^ɨ-/Gݜ 7*Tf9dRاo.[ %OJ_.V)?!6b͉P"kCgRg?w!4/IYlާZy.!_1N{U &8m.S6Y`coHKjf.q\s˰tU<xLyR?&W#r_ShH7k:hGW$X$Q0kB{YT:veZoFa +LI!B +endstream endobj 4067 0 obj<> endobj 4068 0 obj<> endobj 4069 0 obj<> endobj 4070 0 obj<> endobj 4071 0 obj<> endobj 4072 0 obj<> endobj 4073 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4074 0 obj<>stream +psl,2OniMZP~p0~cLJ1&r1(ǹxכVc9Ǿ+*^7 %FB&MXB6 5hXo0+`?Xt5$w4+\C>|QYk=|nK_i^2 7sw]3wLo#rYǘf@C:BNV=5T7 똃-΍: _ʮOK$I \4A@s2dx5݅鞋+OF+-u.nR{D5&Fr},xMq" +endstream endobj 4075 0 obj<> endobj 4076 0 obj<> endobj 4077 0 obj<> endobj 4078 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4079 0 obj<>stream +Sp$pKz.ݲ,X8:eIIG)s1ߑ 096VƐ.M)уF> ik[ܮw%tR7c5w8±$ +0Uȶ}ı +2!D0tGq#[Ζ +:GkvXY]1(ày[m:[uz3>xp +$ԗknӣXqWrZ1>MslSSKJ.jI`S Έ"I)b\33P0v/عnS1sq~ОuF$ u7ƞaq L79> Of33R,}'@S:5 y¤UV +&8fѱKYiXPhqdMU6ϊzb &v"i1,W Q5F+5M -t=}W~3Mg;& +Rw|z6e o1?1`wV1rE>VG|]jK}Vc3={RgΚa%BR8HX!Fg"EjBvR\Eà-r(z [! 2=@]62gQ-Jc sC14BIOK%Q }\ߏJף$m +endstream endobj 4080 0 obj<> endobj 4081 0 obj<> endobj 4082 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4083 0 obj<>stream +)/1@*;_Ieqp3-#"r+(-5Y99%쇇 3rd!6so?uX}xxjkѭϟu gc*F˃>\Rg'@o2ѬGDaR*T}*ơ{Ƞ=nn[O$ouffۛ"j/rD{0* +NXcbFcDS_$ԞzyيiFĆ;3 d.u)78KZX(QC(=+mu9Tcx򲧥ߨFyN>I҅JA_Tl?2mAb\੉ZRwkCN+ZhW>)ݫν\+ad(CXNµ>ʿ\-C8]jݨߛ~+ؓǛ@l播]MM_ϻ,y\=űLJ||5޹w]I, T]O}Py 8+(F +_3AtM$+ɑx{$ȀȨ\q{ Xa#% 5'hWǫ7Gv5jr"3îz喵NeF +endstream endobj 4084 0 obj<> endobj 4085 0 obj<> endobj 4086 0 obj<> endobj 4087 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4088 0 obj<>stream + ^̒ ]C dzwz3ygEMh>W+mY +ИEpЋK9_*Bz+R%cjk1@+p`ڋX;"U (҆w<=_ÕjZ]Sr"Ѻ5DJBAg*yu&MIC鐨Jxɩ6`A> A|K@bOX$M ]K~^4d$%7߾3$66!FL}|m.!ȹYzXgTd^WzNzφA}<!k\QpGfyz}U<;9<ŽUz)tT&CG3&cy@7-4τ2ſyXZ`n e#rxM4őPH(![\\I(^Sd FS 3`m/WsE"PFn. 話N=2b Ӌ5iT]xRb.EA_WwUa=>r=LY@J.kzQN\ydfl%fm";&Be-.>JfJOF]!D.*dg)%Y?,ƈ́4mCʷ/%$;\H(<kL}1.w4~"汝(RGkh @q,tKk[SD +tF*`̔NqCP. +bx,wǯ_+yeSbӇFp]hѰa.@]X[/$nx[w&h TxMo4?B(x@h/. $8 ͫ!JY %|⤪nGVv9('H3`7!NKH" μ#" A< ֋̮qʪ r}ef\cEu"Mڞi$qIyų>AV K;Ⱦ7czp( Y  +endstream endobj 4089 0 obj<> endobj 4090 0 obj<> endobj 4091 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4092 0 obj<>stream + W,Zj8`_`k~y`K.oKP@ˈғ۸vTcGYZ*Eug8T}7H6eXw->i8@^{-./@},C܂s`8紷14e|6 '%g,|4>((tu¨5b4q#uQQeIugQ{ Tz +O xZ-2dR &@5^9>*hD^jb<%:5:9-!%q]Mo:X-Bd'p3Ky-+paSfrOHM(*"гcg2_K?`͙=z#UTDj9MEfCp8:w CQTŕS+1# ^z P}Cfћ5GQ\ԭk-O54<@F8|Lʠ^BO_/p3H@Џ3P 7n(d0k8e^ʥ4冶 qVb}}rx/)AsعߎŨ9Qr%,PNgX8zDۆ]zBb'^2[OEׄ1;4dvUUbTe&Os? C3 kN9UP7bw.{"ꤢneR|[T5 0-kEhZ\J>I``W:UfPvV^ 9S?<T5Ο8K1YM\w Qpo]On\q\ 뿐;KV5E>rSb7=)zDotYGWie!Bm'7=SW Bw T;~!Y[8Gg3uxm @',_P7|Dy Jt/zHqWR^ +zԥWLv+jG3ɽ Z3Vn9( +endstream endobj 4093 0 obj<> endobj 4094 0 obj<> endobj 4095 0 obj<> endobj 4096 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4097 0 obj<>stream +-nzkf2/hp{ɳ T' +;~Uɂuղ|3#LOR)pNx0Ɩ#HyT+ػ @k,ѿ42sjF(X t6 q݈ξomXX؋ 4Q + Su]-ǃX/ԛ >(K۪%;dDO%dg )MXirGJ1[z᛾^DeaoMn&@e3NhAyd\@, ԘU}þ.X§4%:ADADx%ז2):o~;K59:+?XsR37,cͩ:ٚSp@8IzJWZITշ<`SA0tVڊ=Om/0QHAꢬk[SG6ףмom> endobj 4099 0 obj<> endobj 4100 0 obj<> endobj 4101 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4102 0 obj<>stream +,h~09 ނ$<o2SQڙaY^Į#m8;Or)_.%)x05'pN"wsJYGd%H/f)+3|=K5k1pyY|mϐ ܘ֬60d~C<;յm*RH0ro+g=7sB#L\ +䟪a.WAD&0F,6|| o]A[mw#V̹6 MҢ#liOJ-G^`-ZD= 8(֔ՠ|[ڶqlo`juS& >dۺ~C?ۀ60F#E@8OeI:`lU܍MnIRf׃kWM @̲͋&01ް1%Jo)tuBШ_~(ֲPU}b$a .#hqYx,ۼ'иÐf  謭ȸez <8 3}jJ$cK,`nh]W!7~U5 ;ȈX)NB:w…+((($F@p%h (*Z32}(]ߺ,PAZdKTN;Qofʊy 7K/3T5Q]ͧ_Pc$/e28ۍ,C' Ѧ|lO)|em ߀ЅaUfG=M+T*2, . qAT/oc \:#P]q_)|uB9W_Էҷ@s[PbNeF.8LS,(nX/ tHqA(kq4 ;5^@n~ /lQ +1,>ٙ  uoӿqR,MS#ޡhLlA#SW"Ԇ\[S pt±3MdtN^j5ΘVnHV50k)PƁG0Y &s&6uix☝F:=e?3m)9W+ Q UrBu +endstream endobj 4103 0 obj<> endobj 4104 0 obj<> endobj 4105 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4106 0 obj<>stream +"1M~1 % +^|Bnv{ + ͍ uv:DIЃ%HO=Smc0sʡ{bAX.mz_BX/eH.=T-vNu~֚n:ؽ,]er͕eIG) S֞c[Q'OQҾh|_-^62X^5V]9|x >uA Ditѧ1yp[HKyv|%rv#[>Mݣ2Ŏ):@A*IgsgT:^ +mƢ SAW6%ם@4Όm^:[u1"hmX_J,sahK6p矨" luTkQ},eݪ+kUߟ `}a٦n.$y..'.BA?$dlS\bZ#x6b! R,!ByQE +$x> endobj 4108 0 obj<> endobj 4109 0 obj<> endobj 4110 0 obj<> endobj 4111 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4112 0 obj<>stream +Z#2@A0hiFJ5_}NM*gI[]ܒ憎c9[pZ<$Ң U|2t)WѫIщu\<}$vtGOɗ-N\-k#2$H0 Ix+Mc1;q4r6jr1sv +F|Q*ԉPvM#יG?mfϓ7C+vt1,e#%K$c{gt'}y\H8lN 43`U`e+aKka >""ݒ/?hN# c6,Gƶ%u!ireE{RwB< 7,>waxu '*hZFSS~[GJ AXQ \| :hihp`:}%.mxqcqI<> @!bZ>LaNW={*B/ 2!7p Ot5PeRˎQʄ蔿yNxdkdv9cjMJ]넍w,G:c91XcrLFr}Zeڄ6" i}pL-ݯΖMb,?hcGVV38W=ZbG4"7ߴKbS`RNnxPs2@}SL:@ uB,zyįw3?}^D*C2q6H}jޭ #%bvҠ}:`5ġQլ-^5N{i"CW-bQx.?crnz>JSva[}T%@*)fQWJ%X6ˆ^NKE)ۭN1[EHL*HVSSb =||ekaZҖf"6 +t8i#Jڑ:? fՃ7寁T7\ytZ?XgIEp&sqTu1TGw=6op2ыetR1Nڈ:Լ 1'.w +endstream endobj 4113 0 obj<> endobj 4114 0 obj<> endobj 4115 0 obj<> endobj 4116 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4117 0 obj<>stream +vpjY.._/#-2 ywҬ hW+TyUG6O\DEUjgjxaK-2*#)R7 +0$Y{dvX[U^965&*&]Y3'fZjC>G wn^qvYQ.GEh #nѧ66x2fH]8( .n~\<9F#!c| !-fR`w⢐by]ٜ<}LzǜXܦK /˖,'Iԯ9oZ!=w$NV %"1^Q3JܫWT (k]فblk^5X.pb +AK_z$K`e:^ $ܘ+1;?TyMVmغTf.vv8 i3@C/'\g, ^=G7ZP1>f_a”?lpaPMvZe?XqC,mӓMOLEJ` f;PWyN{KIp#?G%pFt*͑o6Lܻ =\U ͺr"J2оM47d?[clLa(mbrmx[5  |dOUG[B'0b\sC_haf7N2֤ ]/{:Pv(8Dfik{q5pp_/}A5V/U|8'|+Og'{DIH%̫3[nz1T$"R&^ j;kX]Ǖp ."MR糮{&; ]\SJ{Hu5M5.lKƣ^ +U6ڞ-9 +endstream endobj 4118 0 obj<> endobj 4119 0 obj<> endobj 4120 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4121 0 obj<>stream +UU- CQHR;m] +|ܠ)Ge!+X0VØ-+ܟE*;{b@w, O%u-[h@ +!;.&b#4%,#̓#'ب12c((xOd" ++p?:615'<_Or(;-Qm7x#c<@dA*hTqq Ҏ4[֐&Vީǿ{, RtRʠu$YMx3f`8V~ A +Zyl1FvB"/ @CsG ݨ=F ,Ǩ B2D?3 !n X'O9*JGRXt +Z"^B=䰩OvZqoh.nn`S٬3IC3ʠV~ d_'t/Qx3m1: .fp4=PI,GP +WX +endstream endobj 4122 0 obj<> endobj 4123 0 obj<> endobj 4124 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4125 0 obj<>stream +$0P4r% h<5Z Yjp +wLpu{Do8.Q $2 (O8{fN7Շ)AQcO-ٷK%.f>d9@!˲2J2\\5x=ZDʀ2 y,hU~îҟɞ 6|ȜJ%dOaz#GAf|BG'~`%422A]/`22kqu@Ovì +ٛi۠mB6ԽOХt˒8Oot %^sq+WZ2|>rc`% Km(K[w)Wk/DZA:sݛs|@ +XaXsPbyP,^5t͸,1GŲ3oM^5[|`=N'n^:G\(~nYр:܆`Y6T/}?˧j',E{$aE:daD`)]laq\O+.q,-['\:-Mu5{P[m!k$,= "$X,Yи=fTB.Ų,bj)N"Wڲ҇CjXІ:Z>Nݚ~2-Y]I%*pöDs;= | $xTDVPB7W׎z=y1ȎBR& Yh!Bl9X +Qk|G> endobj 4127 0 obj<> endobj 4128 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4129 0 obj<>stream +BD<2ثMr!YVJ>} =Mul(m L&eiVGRX%5mSm%N.$v _xkW>GeXHu8G߂V g=?u/%E< :B )Ռhlx1PY2Ӄ3b:Կ&^R +6ڡ;:IpB,G[fYU `*8wIiVd߻/86wzeg©O">!{~稕In +ѹa&**gO% 0m N%돦+-ƅA4"yR_i:v >le׬$V[E*סpԒ,ڃ///IlbdG$&E%bxNiyh)>}8\u{wRJjp߶I6{]0)J/ KpRaNs5g.8s&1@k}:w%W:(%cB?&Zc!ub1PjVj"Z#t|w J˛&DSpZ ?>B zJo8IyuOAچN5O/*!kJipܙv{R Y +62KX* +<2o/K]1h(C&;oL-j $j[zQ0k;>p̬T4^ͭ=cys/zM8yJ՚ 'F?0Z l㇈*I6jU$ddK)mg)PӐS?s}Qb@S|dx]8%, `ZN"6plbb/ʁCҥ{J?뤌# &N|pZ!Y=M(g_RT`R޶ V;^ f:o)P*2 nvaw}4t?Z># +tz 8 +endstream endobj 4130 0 obj<> endobj 4131 0 obj<> endobj 4132 0 obj<> endobj 4133 0 obj<> endobj 4134 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4135 0 obj<>stream +!춈K8"g Cn}-~5E D;Xȗ2|uei,aXz!|,ۖ,ҹM0:=6Chk,a@wwZ3q R&"<G-M=][12nJfC&{}qdZɲ @[> +Mv*i4T PҧxQT7y}Y^)yWL;'R|F ++ + *\uJ@>-RYf?kGz0qO.FσpIF ;q8?1PcB ) _h*6eݠۙz8~ tlmm6#d7(5MUuTD.פ# E.L\ rF?Wϡ?M%9( mB*Gob5,tdIЭ:(lOSxYx@2_ y7P*˞pCrlدlR.֙dvdyH:j8}CN[?J'gXkvfb}+M,O]hX/F 3ʬh' 2hfl'R`),1XNmEA5kO̢nOh{ǟX}l Y{k_B U9VbUh?: g'H qBHkR$,Nƃ7ݐ~_oPNK\YhML6\ph=+(7XY 6*9GvO:|YJ[v&ʃo1K" +HU ]DzO dq@Wiu:jXsS߻JFI$op`rZ> endobj 4137 0 obj<> endobj 4138 0 obj<> endobj 4139 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4140 0 obj<>stream +*@h5! 8N _(jU[?DGj\> :1ZW>x87JE4"Fk7hSK<}GkX 7\:z7̔#1ܧ㒓ŇRN_s֕ۚ@(v-+j&JUđWD,bJ=L@3o(nbwbE7P{篬QÉgDT. Ȳi9 Ќ ɰAVKo5ƾO`;PdN"fe= +\Aƭ BL'3B"k:v*C|MŁgp_ JPn o}e{i{`. 3WV<̨6it]n{nL%eJ +{8d-YFY8>z\2Bo%n&UM;$Н-DC"v9["w+4[(غtqmh +)7/c7+K>}Tq_6bA0aEm5ql! +{۲v4CՒ_Z|n*q28F5a4cFilyNV+!>HkLwM +C{%oӜFV A )ʣ!Wifn>*r3AId2&:ҰLSd\S(*]wf2?$Hb.Q1׮fGfZwk,c("TMoicU+)%lQX%_^KvJruš'MP/1{9Q8I?Y8l)}Rq`$V\)ܘxN whۯ]38C6+~_~Yw/S=Q^ L 3,&拤4keΉ{0)C3s"l_ 39v{xyV| ve83-66@(RQ x!pnd +endstream endobj 4141 0 obj<> endobj 4142 0 obj<> endobj 4143 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4144 0 obj<>stream +T/"ihY1TuLJ#̨ӡl7nL\.?D8P9}p4y + jʁ "2F179˜-&q[zO}X>e(dm& +e9yAuKm+割003Ng@GGߵNn ++ +1px~yɆ}^i0zI gf_Kx>,)"y] +3yOԂ_ѣw&|$221Ak^Fe%z;$Hī }6"`-&U_zqxLo׍Ϩ|̿yƗ5z\~TN?3! ,ـJyӂ@Y .?h\j Ү &JBH#P!5$;:viN/立 -4 ]vn0Y-ٮnܗi;wQڃmu|>CUrYZϓ@ƵCr8a+oYsWKSʛ#DQd +XrimWzoX ^p#eD'> --viKHuH1?݉v&OJWjX߲@!c75/R-: 췴'=W3Ig#MV.Z댗ꁺur4UK*o\XgvxQwMNi ev3#+;0eB$ |J`;ҟIS3շ(Gn6Pz +endstream endobj 4145 0 obj<> endobj 4146 0 obj<> endobj 4147 0 obj<> endobj 4148 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4149 0 obj<>stream +"s 6x%oVpa)FG&⯹{t3_aߴMt}}"=}ίx~E<ܞK;oY$՚YKן1FʆC7bZ:أw٭ƬY$^b31Ug#I^QeąCYcZMS:aVѥWuefC6J{!`g#wU . Kf">WUKZrԁ~h$j 3 G-vpk" -r{g q8Ako2P|>㤩*}/e ՂP6W}%G/ŷ i7wF5se8'd` +5!=d0j=?Lx9Pəߤar.X>Kӊ "30YםgAPGŮ +j>dǜ ԸkPxF G㶯iB; Aɀ**Y?EavO@Gkh+x :'6Z--mut>r 1G|4wAZL8pՀ^-*Xp/ *ra'JJ׋+`@w4O\ӂtnm5z^Z9Z[> endobj 4151 0 obj<> endobj 4152 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4153 0 obj<>stream +1I],AoAdGw'Oakl) +MB.-^*|cπ<̽3YQ`[ {tfnPP/Dp!o%`VuYQ'-b]uY +eCp̟wny:4DTH_ڇEo<gMP 2i$58":-wjs"!8&.ޤju0xo.:-prORb{P@wKsw(7s!lf5,ƺZɗ!'5̗hV}۳"qLz HBfY(1ȇDe.hJl_$!/*t>$GgF^C _TI{z`=ٰ $_$ywټK8kf>t]59~KQJ `oXM9:hH-KA&JsQ֛"{cDsӉ&!Db_Y-8/̾b(_im[㰏\)jQ%62 XqE~[f_8rgy LpM]O2hȝӄ>Wj싂>4*F=9twG%=A uBf ]]W903:4V 0ߏWݻ^SMѩ^>Y+|ǢUC) 8)YxfVp&_2m/_,}'ڻdhO1Tjə==*K&z*zeZo:$r@&B3rB? 4WqqWed|72M8f/v%Ov4@PAF!)ë\iڿJķQB(n|< eE mr +endstream endobj 4154 0 obj<> endobj 4155 0 obj<> endobj 4156 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4157 0 obj<>stream + QBq}tt4!+U:gc^yxgg `#+ePiZRn)Iۂ{_<d<˽T:: H(:r"Q#i-nG3a=3~z_)b=rMTF1K//(@q!(tmHh}-' ĩ.݁Pen +I1NsQvv~QWXHXgg7EgNRI2VV+x ?b7i2 +A >U(bt6\g驤δCjy +c'k7Yfg[\'}>oq,F̓,|{ovAC֦ 供LαudC\Xʃ-,2 I1GFL KenJc{`vKg<&m9lgwHy˗1sNlBl܏5zvkig=v<;{U+,tHb_Q>jxG6F(զ#04ΞZ>1;u,]Hs{ţ$ƕO99NG'OH Z/G/6SPLIyb|"w+i\|,<^nv.%B`n 2%#ۋ(@2 >Р9E%KsS>{910|#}ߠ쵢CZofBW6 ֹ\֣mi*Fϊ3]VJˍ-;SUd?E +ש Q2(-/^=I< 9$;FM-dn*c# +`/r1hN E/FHz͠ܚqurGq2E>A?q]E:5?)eH5 Ux$ʋs&j(oދ&\c^./P-@#Uk>GO^YuWFH#3Wmx+0J4v: e? B\)q+[J:|3Ly#i8!4[[_.el_e}$xh1IQj+>K]ߤⷑ^ʓ +endstream endobj 4158 0 obj<> endobj 4159 0 obj<> endobj 4160 0 obj<> endobj 4161 0 obj<> endobj 4162 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4163 0 obj<>stream +TQ@!`"n\-Zd;q@LBCAm7zψbI: +5q#~OYKgAhsME8jVhv@s<|w֪\X> Կ޳m\C42N$'cUNv;FZhp SCNz3ZnJSK+/TuL{͸w1_wc?ۈ K/o2s&AzƳL`q:okVB#q܋~D/eBA[1ͦY< rl`U^l4/HrvGH!cm{wHw s&27](*{TqP;C?=3b=|ih{(<תh~ӵk0IP|(9 +hX +n[Ƚ"xBH]\V+q=ݪ~Chs֭9 HxvKvQp(L-6 F5֍ gJfdZ!Dx"b{]]O(+dej6XE`,P8܁UBMoMAh5_I"K"P3rjů9_>X3 Im~ UDS`;ͣS{Sʸȣ:hĭ]J o;N}BR-h妒P>;JʺZݟ_j}ҮO86$%#5e) +S׊ؾ3N7x0xdKŭ&w-JLjmlWy1^ cf.\*_%]DxƑw ^\%KvfU,NUM3el/Tg8 D(&V{:L)FmFcNw(aA4QӁJ.8jc#DŽ-"4nV6_dž|8=׳!#~qmcc'oI^ 6©0c"5XbOe j8|}N)ՉwE͹&mJ՛ˆ=_,ޥ@7hcuS{ĵ; ΆGjYV߬vuS6[K,o57{{[}AJt_m)XSg/ +endstream endobj 4164 0 obj<> endobj 4165 0 obj<> endobj 4166 0 obj<> endobj 4167 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4168 0 obj<>stream +`{GHN@=L 6R/Ks <*'z7o΁`Ewc!RRVDJT =_B3tVFpzH*5md:oBî8Z3 @vaa̤ + P4DHY1 X\,YK!fVgj~n翙-r= RF警y-%^ST +(j"$@k߀XF+sI_nCN@Gj:5@y2(.{|蝽&6ʻ6xV4|ZعbC='zK>* R@+͕ڨavq&[I'_@S}++VݠѺ9+OAʲDyǞ7+81F/xR.x8\W,9? btPC;kY& +1"Jp. 2Y_G +?W<w띪%TVpwm5xQ͐_'h>՘95lbHݪܯ̉3#;zTM9dh\4n8mBxRD,+[͝ `ܘ0E`[Mc)gm#Ad͎|+JMzh }7%XU2tы9x)YcxL`!`=y}`srxl:Z_S2\IOkg,Ct:ĪÜHs} T> endobj 4170 0 obj<> endobj 4171 0 obj<> endobj 4172 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4173 0 obj<>stream +Rڐ6j`fm8d @`Èy[jhW=, +6nF + ʼn$:fWͣ%}eeSǪ Op|4TךwvͭYRzũtښV. ?xomtDݻ`&MB檘5*\1y5L%L&{ ++DPb3.'KR7#Cv7|)_N_! I.1rmɪd˙A.FT܆-e}BP,(Z?Ad)^PR*+lH3.f·_(B#^ƬY^DD֡ Ӡu2fxFKM俉-W|b|4TJ4+oG)ܶc2 [e|FRLt` \6o0I{r ]Hzr>:onu8 .eVBQ6VT)D󉪶D+V/񞀣"lD* +؞&_jR?_j\4&!0镛ײ4@`8\Ik;%"3;|[Jq4*Y=%F^4MrPFa4]#ܾ*d)7Hn%vTCWҐmct7Y뙓jrP䂖ZpD? (£Ek2QؒrhmJǿq r0W*˅]WXoMi>)C(#{6ƛ{g {WG7ʙ +$,TM_-vdD, Ȓ I"3B!2 U2>||T \&ypNN]m#h]7SLep˼lRt.a wr@db!> endobj 4175 0 obj<> endobj 4176 0 obj<> endobj 4177 0 obj<> endobj 4178 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4179 0 obj<>stream +Y|^eǐɇQ"q9ڑo4)܌Ũy/Va]:EmHN5׶qm*^48 X )D'sO5$cvvPG=a"&|`PlݯJ:Д|#TJ54//W X=±m>҈x3&4h F^Wau_0\CD0W_C잵S*=|@x4-KQ`Ϥ2{_yy_n"sR}K + #xJ#aߊKU}r F{h&IKLk mp'ۅ; &ب.ڤT+,2QJ xxK&r'٪;tk)>0EJ|_0emX0S +M׵х;ؒc{zƽ~6@={z=.֮-[ۜ>fhUlny`b6kIh De8 +;Cee +)x%55G1|РC;0_m\1vSjQӶ b.BtFA +߰-=rH tZr+~`ȆPQ։k,5*(~;&dA+p/2Wk_zcE0!BT1;v@}b=xFn- /DŽ/t}+'q9 +Z z~cBY>ȖTʭ@q~ˢZn}Xg]$P { \ߏ?2 +#G+QEgM=E"fMzݢA5LESlpŀR٭om>V/6}*SCdj|hES௚CwG +ϓ\k5(xڬ]  % b4I}̜!,YHDS +M\G?hj4.3o Q70#*Bp%Zs6 m_,NgRiٍ+ł64"d,;O /w-()Vɸn'd""i2!U1! +endstream endobj 4180 0 obj<> endobj 4181 0 obj<> endobj 4182 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4183 0 obj<>stream +-`,KC{^]ʷn:f[^ umg>j{VjjScs qH_g\U4v&>^\@:~9Dx! D)خ`R`CbhMK.bj[E '#\ʼ2GҫW̐ŭ N{M2aa(Q؄n?N-& lW}*Z|$z̄JWn-zBnxU}A=Wsmo,|<5b8]l|sHGM*Qo(kߗ0buUH!Wޤ;~BL-zgs[@"v[wA +iQ]؅Lm}chBn&YoAP@7>ݭ%w rJn_SKt9 ]q{Oq y6`/a?r\<,*6U]);\dR)JmC]s5:xPuj (hL{v 2]!|B)fJbɚ3n )J"+X +]JΘNFu`局Bз!tSeYq^i5;W}2tC4 +IS5kBou\s.=['c]a] ZG/Dl#+o}{) p?fj2jurvi?\ +endstream endobj 4184 0 obj<> endobj 4185 0 obj<> endobj 4186 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4187 0 obj<>stream +- n9OdAgow+Oש NjeˀT[' `'ζK8M@IɅ_ $ +HK&,PytdݰL6H#ayPM m]edRY\W- QSNhXyzJOtwtX:z\.U|.&9Y` jb"gnc/-$̋yu}޿mP\&3GR`a$NsXShi)j#l+hdKk"wA{z" `8zPnXl F!73%p]KTZ4 +3E +J[#C߷[5'⩑BEsݦVY7*w%r,} ,٤& QRLɭJ_1v7z^'3%QjĐ#sLxJ6tP"':ԎxhLl9 +4O9|o:Ɣ`qNm@^/[+VM~㯊֜~QE)u +Væ3qFkVW e)7 ^RD %kbj:z!FlbEye!%tL\}Iܣa#PPE0Nc91*!V_|Y E42) R(M HHPӕfąPEbɡo þ}BGu/C%2\_+)pIm$&}y^v_F9+`QZX.k@Kgt<@ŒOhgvXQu1# `gU"_D2V]:˒Hkr]ujS ~v,Dp@ǮsVǔ$<[7P=4KT_Xo iܐ)afo-hp^iy{@ =F +O$^^ܹB h.k(á؎҂R2xmUU +endstream endobj 4188 0 obj<> endobj 4189 0 obj<> endobj 4190 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4191 0 obj<>stream +#pmğ54-6l6h#p?Z8KXiF-}Q5VE͉Ǭm 䥮iB_mD6xF"g|W~@J*TK_`)em[RN=`O5&XR.)nQr e(8"K|<$i:\n.W+{Te8vR|)ʉgV'?i)M4 MNvrmk +bہ>Zt_MKCivӨk}-8`F$t2.30#";4ӣ0@Q*&M! +/EHv.K{z 3G*#͓wB6|Ђ5gL#ճ%2܊Jdε1vR +}+8Y};*T=xq >=0[1kuʙ{St`̇J_<hBM:^VfriG)A$*Sy?$}%K4UO[tqhUt2 +¤[KylҎ]tV_@(1Ytdwh>7)m:|,}gzWٴI1L1秼|x?q}%vVy4O{q6ѭ~O"w."r"g;ΰ{*69S<:$chhli3UiZp/8>gAq%= YɎK$['JT[wR;g@\nk2haݝvH{HT4t\&yk\,Y1JHpk,{DxD}7XU"j5L`T= +endstream endobj 4192 0 obj<> endobj 4193 0 obj<> endobj 4194 0 obj<> endobj 4195 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4196 0 obj<>stream +Lo@ױvνȰKR-;BI8/}9RG`L65I& cq}1n%&;EF Grewѝ*yG& [=A`N +U +%06 %t"W8 d ӍuI +KY9;=tb>B$*%maic!tI{]&V]ǜnlB;竟\HS&cP> endobj 4198 0 obj<> endobj 4199 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4200 0 obj<>stream +̏Kkd?A2źdgqYX6cS=3A.-DWl&QfcEsq\.2l6x2dWrZgɎiȔ~IYP8-!sE},cF5ؼ&S|h]?\.^(>k :Zcd-%E~.)&-p?K3Ŏh} +R1)ܒ4Ⱥh9(<(: 5iôRKuWmw:2g_ {3\7 ه ('E 2d g=1-3s6wa0O,9PB f%-~'wvn%ն:5}1J3"j5 wg]GHhTUWחp(59ڎhm> ݾ_ o{`Yȍ#} | C-[TJH"JEafS7%o[?Yz)_ [9㉋ |%\u/f˜d<{ uX&w+4c>deW@{ޒJLFPtr\gRv/dCuP`I#G;̀1jKj5}A"/Fs}B_0ldyq.vNxϱ*+Yo!0n茁 mmqp~ A)Ik3.J1 +0~( v!D8p{xIvE%< =9ӦFxA=ذ:z۳!uDD-hzS6 O9ww-fgSs0AS7FqCRCi%mX۾.##nۙ;ú +endstream endobj 4201 0 obj<> endobj 4202 0 obj<> endobj 4203 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4204 0 obj<>stream +ׯ5=*^D LEuUIQCXtڐ1\&e;ZSͶ7cqW4\,BO~Vjgg _;O1Dn6ؿ5CdgЈq*X$[jpP4{,m6I7>dwt7`~՟ꪞKhkzUW |傆apE/? +q1"@:ipKq)5`H{ܭ!j̈< Vո^Re;):g?Bdl<5 \OX1P06}K8f3 ] _"G#o!|#bѽ>\Y$.Пw"Rnuճ 0vyI.F$l6Mkϴ@&N|59QrDX8ST͊%{*5!f* [M.^]"Q.?[ZJL$D:4j66,>iׄzBdDfLxI)kKޫ筑DwǕ'\~*T=W2jK%m>^h;#H +=`=賸5k`t;Bf(+3W`AGGk;?t?s_^@~٠SXx1gr:'ʥ#WJTM K 02.k>;KKk^!" K7RbzNpmU60y(39 h"@=}8`>5l3pUCW쩽<ۆs>0LѳǷM+o- /ߵFhĆsӸ.@Ḷv|y,DXl6 .hzd(\6>Ca?ŲBzo4،\aK16s-٥~=^}:]l +endstream endobj 4205 0 obj<> endobj 4206 0 obj<> endobj 4207 0 obj<> endobj 4208 0 obj<> endobj 4209 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4210 0 obj<>stream +ɨ@| #x/i,j02"Yj"EMxIa8n +)ȅsUIP2CL^Ґ/"k8.bFo-j> w𝜉ft_&pqNhf{?:^@c?%8PV##]PWꛅuQ_-GW +[fyJYIڐ{ص$7DON"Ӑ nR׀nNo>ތ,橠6u[:s[*z̗AԷE4)poE]-Ԗ@{Xgvjf:0nesoAw9kR)2q/ew(r[ͯ[ @!?h'T LlXeƻrQh2 + "gqLٞ O4FG,9D#󙻣rꝅ#WI<ㆍx\.J)j6-VCDDzg᪒@H1.snmz_AY|RumxSXx[dn-j),q KCe5+iPGa+gzt{5js0Jk1/9y3E3<{qjGQc-:@n2:pWv_υr><ٚ^`D/X-2/Q?Fj*]`V۬,hEP'c JPlE& zq&46wA[.l l\QN^Zu{s`9(KZg#Ri!5+gg?:Jo,IHH,ކ'va)4Ց$!cAثc}0EyU"xYDi(mށ/ߞS`'5yj~+咑wNS%#i,2c H6{D+b,~~!Rxh ;9-FEMn /b4^XPX8& ~٩|5z26=+S2nRI}>@`Aǻ  ]D'c*8TOKjtP971]!ۡ +69\&/bvG@.[USO +endstream endobj 4211 0 obj<> endobj 4212 0 obj<> endobj 4213 0 obj<> endobj 4214 0 obj<> endobj 4215 0 obj<> endobj 4216 0 obj<> endobj 4217 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4218 0 obj<>stream +̐ ; +M_~БNjp GPXbz :=CJM5χR_ >=KҨe0ژW_o rlFM^8Ͷ"6~-d>|#P]i9,.pYD6R(L˼^bU&.u%Aē֠Pͤ_ gXVu P8&i*:3*.?MO|t]/%XȭOcImxH\}vx.yPAQ[a)IX%jA/Oz\c>f)(YrE-e<$妮S#UglfҔ6C5>( S4ȟQKu">:Q+OK#HSSCw 7-b1$IP.<=gslOɖQ1/qOG}g[m|Rn7;~% ifc{L= ԲqVl#Pnοdj@,䞄=f;ld_|'BF>y?$bkwWhSX-!qq%ĕm $>Mٞy~2x.TiJ69B3?ȫj_%MUwH]'`Wc@BMײn6|)"$,aI^\6ԁ|лOf!- R:{W/O06JT+nA-cOBTUl"wxI(kfN`aE#&d%~)S k6F?BN+R]ueۛ>+l`x}_ UΏ؝˶Jyȸd?F29wȾM;m#KٌKY gQF#;y]NsC$ FVd3WĚwFV 䭜%Q9LMgyv|i̹ډ#V}<@}zW!fG3Nx\=_{B@gqwZ$vםR1\ݗ[\jĞ3\V<՞VhU7­~5C|Cz}(Cw۸$f`-1k?oet(|.fmkP8+䊈E`,҉ k^eed +endstream endobj 4219 0 obj<> endobj 4220 0 obj<> endobj 4221 0 obj<> endobj 4222 0 obj<> endobj 4223 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4224 0 obj<>stream +ز<ؚ)yV-S!FW*&,3-@Ec#W,W.|q᠊0ȸY Q7aWژmh\c*/:*Bg\vesfZТTYV\?d/Ns.Ջ[0 +y u# =PWR77y1(!Vk1Cctwu]!⫊HMVm_TD;)|+Cf+ s`}zձ9wl-8!BGTmeᚯ ʽsE~8-H +l/@=F6߃ ~ +%[ĺFiןQhD1+5 m;D-^9sIx *d0r;kܷĎsdkqC?*lm֓t%.'JF"cج1A.vb>T|QIUIL@"Ul_KH}fTO@%`x;qFWvMfA/xd,&78/}]v:a?z< +endstream endobj 4225 0 obj<> endobj 4226 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4227 0 obj<>stream +7޻=ViqR,F'~\SKpgbL9n cv] dgNlo1 bv4 Оj#o }tg| RP Pjzdz๺t{ED'.b8}U%_pjM,*o/DDZNX&I dCo?;q3!sVZRE $(Ckf`t_˓vD[UEIY н +AD9A令5a6zf"mvt[A \˻̗흦P闊@ی?.@J ^V7t6k,d[qpo7sDLH+̔pVBBYug +endstream endobj 4228 0 obj<> endobj 4229 0 obj<> endobj 4230 0 obj<> endobj 4231 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4232 0 obj<>stream +KNep dt:g6fUj7e洩13<+gm"Zrb L)qkLj _Ј3ZX7?9U";q勮д&M3ݾaTx}`;-QBBc3:`&bz[(`;^cĕL.[sxawjj @Nzc9q]yE/:~\1ȝ J  ӭlR-&掤Wj&ҖNU)Lp0yyp UxV?!@w9ـŨ"پ,o`e1WZWgU= +$"gЎ\6Ta%cU1G5g1甤dj+xrWe 4fuӓ|'>9w\E7DϗUuP{bPC-` +endstream endobj 4233 0 obj<> endobj 4234 0 obj<> endobj 4235 0 obj<> endobj 4236 0 obj<> endobj 4237 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4238 0 obj<>stream +'p"4 ^Bv.jO{XSa. ISBwُ\i涰#WlZK}dl-SE˅_6e8XoukMOA6=V@E\Rp17'4F2QN EW3ު#%jq;Ud,kb/Vygo`,&?sh$Őr~U$>"g/- 4{\4lړ7 e tG`B4 |`vtvZ5PGӼLG$f0ViyK%Q(}V څ5:5 <VGsD'H=.W%Roej>ks?-lItD}kFvj:RjC쌮.|D?Y83!XG@ۢSћ6G~;E]Z%6{yOj(V^i1A0HbX3sY6fݰvEݢl+KI8^{%Teh@)+hOx vLܛ:\pOׄO> endobj 4240 0 obj<> endobj 4241 0 obj<> endobj 4242 0 obj<> endobj 4243 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4244 0 obj<>stream +KT(2瑑Xl\m!j,$$BĻ+Oٞ?/S?TAɐZs-!*ܗj?yzFd;{\m$utEN_cb1PMȦ ]OenϨJ܆ rV3B-n*X.:%+sn;z/`1iX8CTrdCi4Rq)0A1?6S9w@Hf}:%|0'p/E<A8C݃@~"foW|vq8LmtYZaJnhG,Хep,Q><ѰJR}}06j'3"ͰnmyEr>D6zKB R5MQeZ.fxW+*kB/&8qjK[dy?h>p-96I2'.poHCһ,SRCb%\K *siPHRmI-uѶ˓X(jeX+1S+Jß{찏 y7}M+3;%,ɢ3;? EZ8QwTրq$,M[ +4ZkMd6φF4ލ݀o +endstream endobj 4245 0 obj<> endobj 4246 0 obj<> endobj 4247 0 obj<> endobj 4248 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4249 0 obj<>stream +ϥ( 3>߇-te-d*+!t$i+mƲDx XCOs(߁۷op)^A%|<Ƨ‹0OWdW~3[\Pzy ek@cK1N~r |ȟ#0,'s"A%uvUDɜ5$ +4$w7/u%Ii٢^X{V%xVo[%OX%a,ͮ_wbE R%caQ^-l|@X< `3&'>b#FN8{ ]}ݝGVf=4]A.Jp򂊳]K΁eu_uPDv9 +԰\;PYRs^,o@2γżr0p|Z0;q BKV`ԃ 5m0pp +(.gР1R: 볛ͩc F:\Il-a[\7`5ar~Cnh c7g:_&@LքEe>g?bq6{N4x}$[Μq4~dI/t47 j'ف9&+ao+n +χSfBsa' $`ʪjm5L&z[O&d!lq\2JUy͞( rc˒#@e,z tFa݈mRbvRe. J ,Z ejw4t(j,$d Vd(-H窰#٤oU;y.}ާp^邨RΆU0I'Ơ ɽGN]Ǥfq#uW;A0џ_6N~NRNĚG4x&xЇUMO]T$CaFȀž +endstream endobj 4250 0 obj<> endobj 4251 0 obj<> endobj 4252 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4253 0 obj<>stream +#$.kԴ0j.LY00S޿FRmkZW?te&)f:I?*)6E`ym +q^~ :^mJodo4hTqEmHlh'OoEOJw(kXWʒx1?E̜#Do'狿C!GuQHZd#0t 0MBLe ; Q'i;}u( 'Kٟ"?;\inzxwu>ס&{)nO@e&KtKiB;i1x'g,WQ^ SjXq27tIמ&`0 ޟBuvK=ҳR1lO-mg5='VoŔTީe6}VdLK-:C@t~{YsFC=$qN|vk+$6V%Ɠ.?æD-9Vy'_8QTn9Xhz Fu2sBwjdۨ{x0؊%i.>&fZs )<;;O&ic4$d_M?y3 +endstream endobj 4254 0 obj<> endobj 4255 0 obj<> endobj 4256 0 obj<> endobj 4257 0 obj<> endobj 4258 0 obj<> endobj 4259 0 obj<> endobj 4260 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4261 0 obj<>stream +ǃ4~e4,dyŒ $#w mB%?OykA]!d#dQX?ιρr.Ȩ쩹i HXDm+3z>Ar +}mU۩o~FC/C%ꔍ^ =Gfn zh +aMMx;TqZ~\lMU0X;])%'DT?0 U{$h@dY8&!kUaqběC3V?Ժ4Mri18cvG}>ge <&Tu=z#׹ v.;t -Ւ&-ŸйCG%0_hdv}O$8@k3X8,Hg Ά9111/ri3'tN:Y}al0{yz۬LG2fTkNt+ÏHS&ڇ{>FA`6|ݎ<0p2]}!}R}.-'b~B)KfEN8+[EO*.>|kd!j@?/g*[p%)y}tCbîZf٫/LI]ف9gκ:㧄Bwf-|[ҥjzMI^샗^ljG`ܽkp3NS0 +ξ* JY=٧0t%"" +|gzD5G`8?FƴDR!Plh`/$I$w ,q*iF/ +LLkA`Xu'{KAڠp3uATU4#slW}UAh %5=EF&9$mξ)A]BD"~i,>%`QN[֫ ΁(;AX*~!sL3+X5'+Fݿ 5C1tA3%=7\q} nWbC02=l> endobj 4263 0 obj<> endobj 4264 0 obj<> endobj 4265 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4266 0 obj<>stream +؉!;89s_}gY&ZWxBA玚c}2)[\YK#X&ҭ⼴LW5ěʦ%xFLkx@S@Z=I4ԌIT$ӄkn- +KLU Wꃣ1 q +@ٵd ldhQ#єZ-*5"7P|і_ +ԭ\֝/M/"̇& aVAim#PhHܭ2f"B]PfZkNjV,GD6 ܻRнIwB{9;JĢ#wGQyq}ګ1I(P(/ 8k#őH9ZaY5=-r`5+s"ӂ@'jKeZjgmr9n5iI|D/_YeF`h ]>A3϶}ţy+ n0[%G$į؋Ka&K pG ӛ <&O\o~K-o6lv)gk!܍_[TpY)ũ?d-_9-^vg R%g,.' b=\益xSQ#(Rp_2B.6KiPwq9|>]tIsmtewÂ9c>u]fzF UK?aFiڒBlرNqg^uq4sy<_mA! ^Q'{8 vuĈ2z2Ze`c +%Mȕ2BnوySbrk(;W81l,Zm)۵M/K!9\UB@,4mJ)l+*ab`Bd8p ,LQHQR3zMwߛaڏsЦUy0+6~3VOD`m`&`AcS&@p[Jm،0s墮v';/3휫K$R +=%)付&.0#nrI$E 0u3&F1&Xe3xAw}GNW*_vA +endstream endobj 4267 0 obj<> endobj 4268 0 obj<> endobj 4269 0 obj<> endobj 4270 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4271 0 obj<>stream +ij9.1 (u4iukw0 jtWӆ|mrnG*<'oE[)) /y26FgecTo_kB6 >|a5[u xZ5r=\뤅zB}*>?V̥slh;thkǗ.רβ39#-. 1BLn>wJ&G9ucgHT_C3[f5?|DJ׮=V^ mcZctk1a|,SNzކJ}f?Bj aȷ(Ǩ?<_335mHc(1n$9(c[9B^o{UA_BJ+jK{3E{"}=Hk27@ Vc_K*uHM6S~c[P}VFN-ȦjYHMIna܀Gg4 Owwrȹr9Ս3ua{ӠDnKM"}ՅD ").`@`/.(*gxjP1]ͅ&Iɜ׌TKiF9`jMo;4 iR/Eq̻R]]aQ٘cx Ad(A>Nr읪PAfddnd3+7l...-CuIImH?0 ټG#Rd*=*l5qUOSdT 5ݹc6徦:DF_?#۬B<4lֽo2&$ϘCCN 잿4<#xc?K> endobj 4273 0 obj<> endobj 4274 0 obj<> endobj 4275 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4276 0 obj<>stream +6&oZMP$:x'5.7UƘ q8ؠ' /Cg {uu5*@z(B#UAJ{&Wǝ,m- z+v*]@n4WIWw I%459Pnӡ5*z6Еx {-Dc7MoM2z󹔶^Z@`")jrIzEbKGCH!q%DqJV#:Bfo Sg)k"=| u(Zs rWA-LR +/no&/6޲Zsyv<)3O/lK'?NnМo]£V(ڇW#lO,s@IO.`*e&`~ T9>qȴTۑhC}]M!sTg>S.~%H JBNř)ck5SGˬwlwqF,=1FPQ N)5ϔ8'}_@Տ娆?-У`mukC0W AIQΓ x_o5$}nI?0)õ{AC"6{$mS{Bمw}<v?-Knl_u^toxzIm#-W_?J fXv]Ij!o ,ﴭ6Á!௥MFPܼęҍcinux,Hƚ%( {z_t\ߴ?<;<_l>ͨte?i~yMr01U:XQz))t gS,k0>jrCgcowzr§]({jДI%f[W'a!@8> endobj 4278 0 obj<> endobj 4279 0 obj<> endobj 4280 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4281 0 obj<>stream +ϵbǡh M?e%- w:Кh!85p3YpNLiMŧ - !̌{y uݐ"_^( +t~>ya4YJ8EV VNVU3 y"󜗧D+oXf5%UW~Y?6b\c]==C9#wZ|\ڱC*T> endobj 4283 0 obj<> endobj 4284 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4285 0 obj<>stream +dxYl"Rh@T<UZ6@;(QB +s6`AϬK~-<%!n(|gFXJ +k:0$E@DACwm~G[$ BCJ +vU;}`d?Yhgg:6"'xMˊG#Ҷ~kqR)`4ԓnt$ V-+T(!Y%|<޻ډuC1 O#fqC҆c 1hOaZqeцa 'tMǤT4+0%)]wH {H\yPC> %%^ԚW97 %.kQTI22)9)V|E#>?LpMUd[uG&B +=$mi!^%O&C/ A B5h%LYvn0ʕv/o;o>Ut,.7l 73=ѻ2 +C5Y&G#/%Ym؞Ώ:_7oOذaoinG=z}R-ӟ7m<4-)@fC)e a74T] +._>KVQs'0֏]3fםA^6)Ko[z[ U12` L)e&*Zɻ4D@Yіo(`)/bѴ{D`: 5 |U(e[SwTE&q]YfuZ6fCSCCeqLVXk @0D>I +endstream endobj 4286 0 obj<> endobj 4287 0 obj<> endobj 4288 0 obj<> endobj 4289 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4290 0 obj<>stream + yrQ5~'?#9)W\ySctS`|L}66S<{ym5\f"as$gqccRUCRq)O5Sɳ71KZu Dr=Aanֱ^6dQ^$^+`^$O%j Eϰde5iHTQDr +8"v-: _X|\ߝq\*W\3J g}Cv@(\EB h.,|l8IӘZ\蠔ىn "R[gtj p@`OB"# s/s9]UUiU 'f:6rkKncl3t3p ۴oKk!G ~vYXV{y!V>ck5:Yn{,XRh. #/ìVQ179Uf.>=W$"K +~u 'L"u\ -JOƁ/E#c7XVA +Trr&a=HuUuw>ou縸W#l&<%9|Wɂ?p]ኗ/ib^ +endstream endobj 4291 0 obj<> endobj 4292 0 obj<> endobj 4293 0 obj<> endobj 4294 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4295 0 obj<>stream +g(OIF6!UR{G*G;_RK|ShN r xv96VJK$m:?##:i +X 5cֿѯK +mX{$KRV[P1c83bDŀyUډPD}˨kao-A^RQ͐ny au׀u?IClK-Tuq8fܘQY+z[4~_2v<0J07 whd@Џԗj1ѱ;.a}TZ ˁ{9s|24 ,}$vx^Vy- hZSn Z8pe;P{9F~Icp[?Q)!PI>v43ɚh<4ݸ,Oq%]\69\eVJ烜ʄ\Uax*šQ|WU7D(miji/D5QP%Y*kDAT q -Gi?E& CYiy(Jt|4s^YRUJ[M +)ߪqt\sSd@SXup08ڱ._&+C sǬ$1(YQf74,~@DyGt.\8/5am樲?-YnAb-s\ 7jxj2JbGONȹ'C.z:H50z7\O +o%i p>ui{@bne BzWҥ #ڤ-5kjK|T7l8qBmBɐ2@$:!1@rΜ41vMb3XDC@NT+pc7 4:30Bs?Ò۩ԀRt=ow?sO>؀W;[ : 9VW.}Z >&VG,`*%6bڎnojS}M&@ u.a!n%(ř7}MA#(5OO$ߋ*R;rW,j +endstream endobj 4296 0 obj<> endobj 4297 0 obj<> endobj 4298 0 obj<> endobj 4299 0 obj<> endobj 4300 0 obj<> endobj 4301 0 obj<> endobj 4302 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4303 0 obj<>stream +䐬cJuDwA +hޯHmmy^qdE'Iދ[w9_/Gmvǰ| }v&ȣM_#G:kA J=EulU,lDO~Kf="t[h)V)mBá& +NbUKnZu0 +!*31($Kx+Q5> endobj 4305 0 obj<> endobj 4306 0 obj<> endobj 4307 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4308 0 obj<>stream +θJ +|P$(T{2? +A42%Ip`HUȻ^!J^Gv 5Ǣ pqk@bSc .!VOj}I /7Մ*}IFsŰn'&Uk AEb&36sL-! +ˍ틹@*Kg_Fr>5EUiV]{ZG#DZPpO~dȘY3[1o<γjX.LGTW<9̱ѴLu ~2m}L*⯒HZ5LjvYܺ6+k5O9o<*B {.U:7Ր)#(SPkxbף,-AP(ac|Vf^C;gv`^1T$¶Ӻ!D\OynpNJtRဍct.Ö^ $e;Jb 5"gL vt\6Qdn{lJ:qY쳒p&U9Nؒ֙q?&HX L.ϖu' S.V5J8z+.c +c5UᘂlP%o5jkE- MPO0'Yh(;T;s_(,h +endstream endobj 4309 0 obj<> endobj 4310 0 obj<> endobj 4311 0 obj<> endobj 4312 0 obj<> endobj 4313 0 obj<> endobj 4314 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4315 0 obj<>stream +'Lƕsc#"lZؼ(.õ YqwFm~fu hot9I8 ks &L!:զ]JsH@ѽmr=[V70guM E?kxPg p+3X&Ȕ0*C xS.h'dXJO>]_nߪu[?,8fQ+.}R&z}Ըp|$ב0LGpτk|T?gU?Ò& _&>8&wePCUCXiZa{<ɱNh{jd)-y[{vK0Jm[D1Wb{PM1`]TY邈epn&#O\m? PdL3Q'񏂝0bUcrYq=T;}:-p )܇)^#1F[+2L=}1S G_*/~%Ho:<xCF/&ϥFk'`-dpHxYJ|\@N*9M fbzdWovAe枤gUl6?bM29bDk +ju/ٛ˷L?iv=v_ JA5 )c7݇΅l$qN*^@my +pUW鲴4,r +ɡ3, yDYq%S~ S3k;RlQ T^djBrgZK"/M/F,, +endstream endobj 4316 0 obj<> endobj 4317 0 obj<> endobj 4318 0 obj<> endobj 4319 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4320 0 obj<>stream +zF?v)XUIhv/N'iJ{I*L4 !%j_ P촺aX 6\{}ׁEHek!2hou]Bv4j\kKѺ+[": `c\UHpky.U^d +zc͗ˣϸ.5ŌD57:k&(^ ғ_mI" +%kWğ6nn>V)D-_X9fT< $& Ӆшyznj†}Вp5LǷ`WF=*|1hj5#/4Z[4Џ0KKc/ƲB|)[C CYek}d8R "xD d"})k>p&u6ǃ ~,~q6V]Y+KMU5uW$ PC kVLa({ &o:Q2!U3^}$6:&f.Gr6%Ȭ ,mf0951|# XIl,r]bݮ<<V4i9 )IIC[^eOMw൰^2Ɇ,~D]oh2r9R,r @GWO_=zuOg4zEHָݫչDpTSOάbC(nӟ~{)-BSP'zC+N|&&zK욳ṀPL*4t&VeeB5KlS@ﳯ*ir7}6]'&.ZY$>̀iA"'.OS+]*xBFnbU փ\5~4K*Nۂ?w1/$˙#aG!QiҞzP(REh)h]hOP۪dzMCeփe;=i4_rV6#nMR Y0 FLead,^Wy/i[ +G;ܬqk* J!=Rf#MΡK#,-Ii\l㑚O$0|rsзB ] +endstream endobj 4321 0 obj<> endobj 4322 0 obj<> endobj 4323 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4324 0 obj<>stream +*1/?;6B$a=kS Zc0ӈi-P̔_kr<?˗3yɑ3ġ!MmpLszPkA5k|P$]r}?p7x)fSn΃ +5ª4ha2Dt\[}3[ 4|gߚAwP2LUJEz.WDb$gÿE+ $?<:,EĭȄ`=NS}gۺ5vLNku,C]KAh\AhxiXUN,<[h!ݝPY`f|e#auRv#<ш1d^MuپDwtW 4kU"P}2js,sYy,2LouTiIK)VrP*#w]\5FW'B‱K$r0hsܻӮ$qAnalmFFjk1S<ŷmUtް/G(' 涽J +MBWƑO=RBWLZґ(bИ&ijhv\[f(5W&-|ӵ 6L߇+Kz +endstream endobj 4325 0 obj<> endobj 4326 0 obj<> endobj 4327 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4328 0 obj<>stream +/< t߽֔ Cr ޡἀ#9'ՏuR!+Qg"]EW/Vo9C +KF! pgz&aÀO Mɱв[~DR L6"N>ֹ9G2#\ݣ@0O zڊI&YhZ&ӐaR컠a/J w(͋ުUu'~uhWVL݀5 Fi٨演ez2t'/K.pZNcVLo\^ 7䍼6g&1ClZJNc I6>} *GSG_vX_Mʝe{uIZu=) %Y4X +sY{uߟYh+D?ǽL?k1~ն Xv'W^NkRCG߰'(?H.*6Vjo+0EYhE+K,.2%͞~twyD*t#5Xw:F-]\φ]5,R~@uF60Ltq9i gr%=oL:GſmP`񞵶Jj"EXMž[VIMf q!b^2U>8C[}R߄BY! 9zs(/|hwYZ( +좂S_q9GVuY0[mkQBxq3nT:Z&nm2"_kcm\ceX)$}|t]sQ#ptB0;y,"D(8Zؽb2\T0p{mk> endobj 4330 0 obj<> endobj 4331 0 obj<> endobj 4332 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4333 0 obj<>stream +FUSW ^_=̖gaˑFPL$k[Z|!"+&u3Ј hZL;ho7!J~T/ ׵c,?1*EAzцc.*iWB1X}CC5L)ܐ<̫K޺\^32\i$/0“zY#C +ȏo'{Z2,K +`tҳ&.$x$R1"g\G9u C)XZ{ +Ѩ)ִ 'L bK/0A@dJRv*kѲ̮%#3<SIN:˳!"+)plf04s;" o2 r4RqNaAY~&I4-CA_ɮ!R:UN}2ު,8* H4O֍tSv"زD)jG3Rno핡!m-5W/5WSGxlr1.R8k̿qaCbI@E =RIwj*)t\Rr5xh\vF_sϢZ**"?;V64|)xCe#rXcJgoCyE 7=OmuIyC3B\7Zٗ b~-݋Md:YA= +endstream endobj 4334 0 obj<> endobj 4335 0 obj<> endobj 4336 0 obj<> endobj 4337 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4338 0 obj<>stream + JԒmVc-NoTpS?}D -syRE"lp(8xj t;@˪j@+ݭ&eIDߵ1-n1@N҉=uWjM x'-ǫqf'YR]i)CxFRE,dA`Ihp`/:sLqGL+Qkũm4kFr ʐ$nĒⱤ`t⶜Ô't$L Áj#T*=*Pf#ZIm§aZqns*u쳷02L?*$F0wvIfLt́kY[׹?y('xe+w8z+}IScӽ޽_T0IJҸ̣A@o@k!Tӱ=ӜRDr?pglADJ 2P&Wš +&8[omrjAWr]r Ūž X}" ZYgbpͺPOC"a|~J 2e Yn]hU<ǏaźQ>I"͇[t]-ۚXhnaN*=as㉨ظu|7бg@G`MKTuHKxKP]NmVY:ҿp8cƫG҆& ,#x_#/Ww: '&7Xx%y}$o|Ya^k`VI"~<;c lx֧Qn-.WX( y՟^C$#[<ǚBW#.'NAڡDh(dDa+k`ɛW8H .&BDUwFĕ:{Wdu +2I8-(bIAޞB~]#s"ǰ%dR{dbw]Q +endstream endobj 4339 0 obj<> endobj 4340 0 obj<> endobj 4341 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4342 0 obj<>stream +%PHgg-ݟ!`(4g +jC+i)ayEe_Hй9k4vҹsqyZ C4vTzPʱ8"AޅV@\8 e_Y((י?'1Yؽمw[@!u3` UC[n,V^<ե2kSNc: R=Le㘜@Q<3gq$|#T`q4lK41r}՟ŏEW%DeX5l8T4>髅rOE[!£S=d[Ni5]"(لs}hwp*WЁ$ +[% Ri{l3XZTfʚ\Ig&[H#DeBr5wj_tS`ScX<]{`Z=qu՝ܧ a=sMAx"c(|3tEXoVXdϥ-3+~ (PNQ񛫑r +g&8YFpb<=$cN}|IO v×瞏Nnr}n)H\=͹?J0ڠbӂ18w6+ҿgaeu/\1,>HgPۂRK( Xi~fJB06`# fm.X*3QB6/|0+57(멂tSGhSn~ ? +"|UګreRhfү"x$՝ --, +FBV6cLN_-PSLu@nG& +C}e<t J&Q{6|ԏ-O@@μbwh!" KP{HoU'm% +BCŖ,.Gp fVC# QrTbL▶m6~;Ùt +endstream endobj 4343 0 obj<> endobj 4344 0 obj<> endobj 4345 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4346 0 obj<>stream +,(/(LK8"55}]χ3s۠%|!lmDžKత=ۏ{($m%; b,vXN޼؟><7 V5ʧiDmCG=!. +Ӫ,اYfᮠS(ٍX:S(yrߢhθ|?OO: +mElr74FNkbJvmʥvj1o rq!1B~thؽ\$.{*WtjEhF~dGgkd,:Rp{ +;)i92_/z2ӂDxiJhB . ߿3|$ghvJU8=YPVᬚ*㈀2>aJz2zHқWqFC۾}[X4"?^Ah݃#Cq@$U-4KH9h<P:1WOj\| P;eEm xE(j%r FGIk<㗄Ǐ[1(pÚu[>uuiʎ%vi ̙f:%c~Bq SABLsDci3l +r,6/h ,_%vTܚ) +Iݦ%x/%-kBC91޶2mwdrvZPcՕ3Rfd XcP.K_Yl{|p$9FY=5,g/̋W.@:[CMѝv2_.Ίv("޴xJuUwiO +endstream endobj 4347 0 obj<> endobj 4348 0 obj<> endobj 4349 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4350 0 obj<>stream +܄Y|yEVx&ڐ4oJB%*X)04刍2{L/U!VYx1GT`x._՛|x2K1*j&2pn6r9]# +cĝ^kE>Q)n [L׶_qt%ƌS95m'V(Ft$0,7zÄ/*OAדTn܀* sc?C4 @_dǃxoH8*0Cl牲<\<&x_[ŏGyHȿH)&gw|ܖʄ6>Sٌteu#PWG੨-W44{~,A74U|I-a&c~RnvʣtI-H5Kb)Q:Ԏ^ڻ0Ei͂6*J<?|4taFIӪ3gg}{G|uJy5g;"Ʋ)-đ{;,nZM͟Wl1D*S@Mcor~Z_8xD?`[V!)`{ll +=п6ε!0:MwL vX%ױOR)d&wPZ0v2 ZʪeE +endstream endobj 4351 0 obj<> endobj 4352 0 obj<> endobj 4353 0 obj<> endobj 4354 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4355 0 obj<>stream +>;&#kFeB-UL λݰ%ǯUUHS;G}l|+ˇ~^ M'??6*]AWAkRa0pd ɪXF9[ mqsLC8e➁ZWA:W@զ`g &:`t <MT{*C$jsp Y(#쓍NHFNm&ޯl"dOT$'LOlč.ySz +#aZ?G)ː% +D-uQpw)B +x*,,HRm0 vr>XnWU|SFfPͭЧ < 8 /M Ofq`)g2=t=X9umU@HW)} wALqAL Cf>?yYn8eLzgQEk q|C4\3$1{Bj> endobj 4357 0 obj<> endobj 4358 0 obj<> endobj 4359 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4360 0 obj<>stream +ac+ GuB?bk#VhjCzPbв|4M-N"B[ ORqGj'i#|h.QHyZ@S_ ZW(0UZ}t띯'ĥ +U^BG Q;O-̩= QB"]Ij͢n(gd(^,QA{=M01l| X'=.{yf&_ $ǕRK;MrK/E-"M5ڋ>i\s(UX U֓S +[%7kݺ02 \-x=ܭ.O~TWDckW2ZuUQ4wd +}gvhy`3d׋/{PK޺t53 q;F4KJA-ヿvIA)kwLFWxUL":E Cqu H}1 +Gu:zސ/ \,nĝw2DKe1D3> endobj 4362 0 obj<> endobj 4363 0 obj<> endobj 4364 0 obj<> endobj 4365 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4366 0 obj<>stream +K+h,)| sӤV`0kwΘPYiCTE-zS ]ο[^pea s!z>kC8`zEn~$(2:9Oo_[` $d;,D2[*UT]C˚O_|'W  +u+"vyzF=r=5@z&Bn;$UGR2cR5}JA1/J L 4J:Ȕ&7$ފT2gJL'ۭ/?#0keGHHWDw.OI>sf;5+(x *s&>#NIip ~-Fs^m \'ێt^ٗf&ub˅<l򻱬`"&'b?5&,H{GEAzbj}. %h+ٞX.x3M>[[yj<ך~,hyfxRޘy &a@ԖF|W)%쩼j+|v&Wz+wܲ^wpTǎ̊q2Ap/Mh9ǝWq$5W~U 9?o5(9wf禄mZ@1lg;1Qj>Gm]. +endstream endobj 4367 0 obj<> endobj 4368 0 obj<> endobj 4369 0 obj<> endobj 4370 0 obj<> endobj 4371 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4372 0 obj<>stream +ۏ$rW /{7GJS獕s`sܛyA[ ޜS mHUɹI剔Tt$T7$2NR0Alkm֕9=e] ǐv5g$%{HK|cqм; VܖGH?WLëRGʦ6:i|{ vECE{hR+۷ܑHgz*\ kZ't⎲SHI;x8?GD0Yv{o-di 6(}$^idޙ,|IncfҼv=YGl?1tTGSͪ4er2-t̽QUd;9cI5 E/ }0fV{:rLĔ)q^p҅c P|\\џ2c-G<R#Y ^\Ѓ4 n<`'mM *MRTs,?̔)֫QZ5HI|ȃs8@"2Kr7yn%LZ 1CW9m?;zݢ + he=zn-%y%j$u ؼzUP{6[{b-D4B9)neg֔Cn Jݳ6_yRس$ +ЯpqE11Z$bp|'ʑcբB +\[[xu[%2 E޷+W,<-ʐ~$Uc^_?#, Ѝ(/5i1ulwauRXFt?q"z "b,}B8DΙ_F 3A,NTPU3ٗj%joat*?SxPܣ=+a6^_J{/ەXq0z|#n +źTѼ)qNN4,,0=.o/t+- !Lu`Qx!Z!MEwV׃v`M++g "zd,Y?,_V^Ǥd?gF%\~˃LCMTΊ&[y&'VJ!7P)1c*|xiWS8Q8  !)\&LP@ LPT9{iV9D\@m1-<;:/8O > endobj 4380 0 obj<> endobj 4381 0 obj<> endobj 4382 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4383 0 obj<>stream +dМ[9aew^e)1z#TmYIre`*Pn.X((9 +i|u0ʭsÔ\Vec`n<^ޑ^*h NcsJYάXqn5&{:'?֥a>;H֋Fr^%,w/a:wf8M^%:9HvY^Թvԁ S2D}Q)ҨcqqԨj-{j[ݝ [,]KۀDmoA{#gH~"X&ǹ'}GhUkU :ioEpL-_@4Ҧ6nӐń|~fCz]!,`(o>g +8 +|(~xN;3oCoލnqQb8>{+0F ?oQK;KʞqIߐZi[)q^+)1,VSf) +ʦz5i`4.)M2 +endstream endobj 4384 0 obj<> endobj 4385 0 obj<> endobj 4386 0 obj<> endobj 4387 0 obj<> endobj 4388 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4389 0 obj<>stream +Vm::*X +p3xfxzi{93D#IPY0!|W6dzUpӯ"'ARb>k*Mw!IMiG}UEB]#x]]hM +!&Wm::t ՗{,BaZW0*A/9 څCH!CjA}3Խނ*y7l7qI,yf<`4>,Mn" +a8~ s)l䬩Vb$FrBȊ;Yi{Y oGY7CqbI5"&24CgV ဘŷ()$IU{]qGJ9ewF7O\_cSZ*g1 + Ykk֓#4{J|3I`؜gdŇc;tB/Fz@F/ј_~OV +_Ler (\tw VEOUk3M `B +}A(H> s>֘B?N*NӖ+ s4il۶7KJߐHmHߊåzx٦v2:-I1nSvW8JkY>aHdSN8e5OKH+$G^^j r_MyU͹iN;S))1#'Z`Q;@ ]c6pTg -XK jY`^$W͆$uz<5}Vongàj4~XAg31H0ftHރaN,T9piNKvk ^= +y_ꊋ%|L}+D褡^ψ~cgӂDԖTu{VP>)dj )$\B99mNE pb4J>5 EHxu=ȷuA~AD1'jHjd;/x +")n6#ȝtHQį1oa yJ68*ܼB%cɸ99S3˞'o۫2$N^vF񃓽OIVs9_xzfP`У.^OF + h^O3' +3&/X]k^ +A&t[\q- W%п:cd2Jz* y$[5sf7OrJ[-M1"h5VHEwrt=SS1[_NxKm]2Zrܠ$`pBL)jenbL ,lz]zG> endobj 4391 0 obj<> endobj 4392 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4393 0 obj<>stream +¹r8`l+KW9߆"4pMvɍ"bocܔ+|uG⹾!hJ#"na!:unTaTX`rߞ6!z-I|")8ߊi"f'Gv 6![*uw{BǖʡHr2C7J6V)/kƔ)])R|C|@'5S!K ]#|aMbcH93z?g-9($tP@i&؈j'̓+iя.ԚxtxΖ4&w}+b`;sIcͱeNj PWV}?V$\r+)ЍA-F43.;`00P)D P"Y K!jf uCN`mԧ[ZGHЕuUsmkk]<|~|, h,kf?}qe,g BD%! Na oL~~k^DZ&ϒLx/[k# +|љ G};Bۃ]5GJCX٫$Flx9b"H/)Ӭ+j03$iՠ܇q¬x+:4Y8b=3L%惚 > =njylϡ85Ħq =:ٝs^{X +/BAuQ#;`iA󮈍)'(To>pWPzJ<2im(t\?7伷'fu6 tzjCL2>{m0Ъ T捇\Д5[>7׿_+(z_]!m.] :kQ]8f*Aҳ/%^ژ͏5#.F((=yN~8Tg9MrtZ̃˅ 4y)`kDzA2M.Kn^Lι+ڀ#/c#;eFZM2gS)!7)3ah5yfo2\?Z> endobj 4395 0 obj<> endobj 4396 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4397 0 obj<>stream +v}id=V:(^o< |~۠7kX(5˦ե"S|*~4]dy) Bj?~)RZk +YMzbl} H#MnmgC A\jȠe'J<B%E]?jx Rr!sƸo[EmAUAbhc7~P8Fw+o)y"i,+ChybY rIR^تQ?7aXK[FR!6B.p>F)^5hu@u… GiĿa9MS,& +-UgÃ;$h!LSl.ê\E +=:Et +?1f-74uM?Y.@?5z`f.V|]LvtGIb#(!4* }TVśl~SvT(k[ngt(ZZpfTO/OD$n OAD>JDy9*g~CE-GEj4^4_tKjȕ;J }N +\kRzDOLy {70pHfS/F)|N&T}(ZzvDHWAбD#2Tfq\;WPoJuI LNUil~}^ Z#g>_ ڐoӖ^Œ`j2( jLKƧU۪3]` <,`AX/ՂIU3vzm@ͪ* bmWsl(|s` $tefy̫4aޖA}Fp+hd+|YiJ2FMr^-5:^~?4"'RUdQD#+\LrIs?%(a |je +?%~i4 鵯!oNQCAGBh:.Q6^tJ-~^+n{bjF +u#K>_-D r0ij k)(Z>Zk6 +endstream endobj 4398 0 obj<> endobj 4399 0 obj<> endobj 4400 0 obj<> endobj 4401 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4402 0 obj<>stream +ƇT'YوQ+Gu1p!>d84ܳ5؅VtK7--+5 D4"_D)I@/mp-Wd-bmGVSp;FYfK3itc|Xh8./o(ɧtGڗ3ZCaYg'1J[$хP< ɦ]EL Qޘٹ̧*S{5ا<RJc`JNi9k |0PAġ :V; k"~RKXi:eچ֐sgݦC_t6FFk4GK)9+3\AׄV}&GsϠ͇S~k{$Ș5qD/D}T<1uU~rҽA"֑-!v!6KbZu tdPn$^1 4y1̲}% +ɫ;J%:N#v^>nXv;3skru=`%`eX@v|Qt 9_uhM$xxSi4åGތ_l Q: ԮdhhǬc2!H(bA6_X{bhśA9෺e9 k1t.CG2>I?+,I։kԍwUV gZYKvN#3jZxjOD֙cfH8rYmwso.1wg`К-}Vֈ6n--XJ:JPP@H۽ro䛊cgL\oSr9]o[v-G+ >q`N+=Mͼ +zo'u uDjϞ~]YTE)!'-h|Ւ駤0ϽX!&xhkǀ)WaȝS)rK`PԣD]OI\wbt'Y T!٭%ŅC7Lhx,ڵz!֮|({$U 7a? D`=*O#1㶡!H +endstream endobj 4403 0 obj<> endobj 4404 0 obj<> endobj 4405 0 obj<> endobj 4406 0 obj<> endobj 4407 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4408 0 obj<>stream +$jrRf +ͱyI̺-cDG-1t\Mu\2|žTOZ(h9%K'qLvkyq_[ؽɁ>;:^69Mz5nSV{|[I]`x@EWP4+5$;<;} M<AnWYS9yl4k .R 'C ĘlH \QK""SLu%žz+>0+H zJdjwg.NddAߠ+4)!1%7Z ^޿k]vT%ǿv|mSH;JfK)Nh(? w-gm?)'K# ?gD£,"`~5|`=BuNF>>rZlju~SإC&mT!T8l*W]v#IA޽Z0^Bx2e-MʥfIb4g:谰F.E &#OUYX#! oLJg'}7,Үyȯh\xjUԊ,]4Q簲86MZ%`]]̗Ap.Y\eeK&# [yjR w̟Pd 5lk_K# +uܘP=K9mv+w'ZP= 3Y:L[I{9|{`>l-!J9- %9~2%sx-͂XC8v#.ey^kd1Nqa`B&(9K첺FU1e+݇Aɛ~k4o\~9)D[28}da^GiKhF܉uіGsXk;&bVٳ9.\V`RQ,WI[.Rg vHű71-[CwRsy "a{PANZ'nS  %A1&}?&5ZdϊբE??ND eg;CpI$tևra:)rOtNgz!X$tm_;܀cesFfro 3R^άMmbğ?Cƍ&N(G0&Hm[gv/ +aSb 2&edc/c 5w~(0У,xxAO=͙-=SF/!]tK#c+6U*"$Om6Oh#g~`(5 U>mQ#5 +diD,uC~WQJ # Q&c@0Uz<рiw];y8uOȭ$Z|Yϒk o3 wހ̂q5q{[:8#ٴmQs1_8vs֣LH%n}7-1C(XdV;|d[2JcZkҋ==([*}*%/?,].0қA#e5B>ԃJ@Yo}N5ZZ_ .o[|7%^<_w%l)G''t}MD}ڷ`I +## +endstream endobj 4409 0 obj<> endobj 4410 0 obj<> endobj 4411 0 obj<> endobj 4412 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4413 0 obj<>stream +Fܖc铯+?atu/@\ W3RAJh6U.B\8s SoВڜ2 p.NsIKow|A:54(;ɕTړ'5$jD BI͔y8mQZ͌@(ڈ&^?G}\T ?-AUvcpWy0܅NMlٞA+ւGYBYpEۏ! B ^y,GAFdAʃ]-4rL& +_ͶF%@_ճ(C +o5ȐF)e_O ),,N!5?n"| `@l9yz rX@$OpZsƭ?xZX }> kOF?zG*eo Ylw[+9+zRz}|Ml`H*7+ nӇi/ 91|1rE9c` qts'4cA| y52ݟjzJ &gI&luAQ$dH)tjd(mtctG4I{4'΂VNع& Uk$6' y$|;E@5 =&+"DH$8Y> endobj 4415 0 obj<> endobj 4416 0 obj<> endobj 4417 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4418 0 obj<>stream +Ua e}܏ѯ3{Y0YV^L~waf㗩 iM!Zc,j3• |ĊӋYC9F>^ ?)vfRf~SXHD_;+H{eQJ +y7H$njO:bή^Mv_u9{nFQ^< +) ԍg3%E2/_-S`o B{XB?ItWum5C_M'Y鱅W`~).oٚ-r!wߗ$2<ǯ CN(FS B윞埶zVKIF#)Aa0h-a?;!R"+k}TnDH˄mR D*Kީ3[qywnE Wrc:yUYeč_Vb฽ Rԡ*>4ׇuďT+,$D]:'7S{TE@u@i$JVKBDqHV}s';)G8[ZF6WI<@V0b/TGD&rbe%1~xVz%Ckm=qfies<RocwZ&E52YXnKKshb9NH  O}j.Juy'tB(@'8jurŴɊضb"#hߒ Ǫx4PvYWp eLʨ OаHi_@TjUQe*:M:'&=]G-rd?xd)pp5[ϲնsr1qȄclG|;6g4[u 4v'ac0_}p?f 3 0L]`hq$DM@LXa"f60' $yi7D\U 5Qۣ=h 'n{pA1_$trŽAHZU~=q;FIrucI"=KzqTNWpG'<)Bj9L +endstream endobj 4419 0 obj<> endobj 4420 0 obj<> endobj 4421 0 obj<> endobj 4422 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4423 0 obj<>stream +&P*r,1UI"y4MϪÙT&<}N"0@)tAeփ']FTZ]7bBPz-GpT2%`9COgiim1kc1 F<[Q( h:@B،Q,AڻrU}@z:D!N;D50Q$0mF(m T1{(S]p`';EwླhjP˖T9 }HLyۻu_nCκr(Pe.*SG* +V:E(=l,Q  Ԓ?g!*h8-uz'pfp|> >ڄb9S+ bBf/I;?C)W?S!fHZz2fEemf8;Yڟ#^IMʤ'[)@M4nc 8,H3dD0C@<'K mo2 ` +i3S0ZRug }Ο-GPbPzC{Iȃ(}"v>{6|+@.7ΛF]#K\a~7 j.ZC% ՈWNKwBLAGPk#),3v[NKP#.C1H,_[/_\杰ԉN,(2 +*Rshjb4-cmb@d􋈣/|t7{TIhj&dMMREܘC_r~΅F [<C~v nf8j4k{=/Fb A7ݶ{]wЫp,]OSz}Ge)R%%ߴ| _exu/C +endstream endobj 4424 0 obj<> endobj 4425 0 obj<> endobj 4426 0 obj<> endobj 4427 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4428 0 obj<>stream +Ԋ+e06:6;$AUD_r V2j5 jh~5:dKmI? V |[,*Z2lR-P;VE94 4Ň#A?,iUu ?CH?>e! 3^/\S=R=0#=PyvcH _$O,mZ8'bcտ/')p|x34_PEmƒ뫽YW u+Uqଗīh8P+CÁlVwN]MLPzb&3EE bZUf7Oh>@03L^?wU,{Ѡŏv-7pry,z&"I.旬0bѾŒK*W|,XGK *S)Upj5U9B m z5`~+xS'[,Ah>.%gCpř4tFSvCR"(:}&Ds@!*PnFx#܋l dgS;sOy`,w2nI* ܜ(;jϽL5h=?R=Ô}2{0Z?_r@(ct +^.v`zJﮘ +VHObzG^ ~G2ig;sOxXD[%bF*8ӆDglk„W +endstream endobj 4429 0 obj<> endobj 4430 0 obj<> endobj 4431 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4432 0 obj<>stream +p +;/dTsV5" jDҊ\ Ϯ אޭ3hy0}V<3njh΢:8hyt| ģ7녘.aDW'@H]AWDcV˓б2etzVvuCΫR`Qbd]k4COI: $\@&kÿ-P!l\Mv\^T @yr`hL/J63ץBʅa^k.ZM6s(#|SxyXӢogE҃3q/:|eJXȓ~u<MI3̈́(a}5 +I5ˑA83>%ߢM3SUj))?ڽ:H3ਚ߃j_x$W!?| }-hV`ՄP4W) +p -,YGZҎDw` IZ"H,EpiXRsr{&F3J*,g{L7i`mK ZZQ54]5V ԯىVpU?7–R=%K>;V-W 9TJfZ 0V˒WBn992d^{ļp8=.07񒜁4Kl%s3!]:G0F*6kӘ5V0O!_{osH1| p6uJE(tkKu,w2eh*zn!Xn"q>xk+N(3St{9>ύ$ &1 +科;0 xޗݟD[(ڮမ(#= )]B.`ifD?xi5n[&~H0;?GrǿQ<!|3> endobj 4434 0 obj<> endobj 4435 0 obj<> endobj 4436 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4437 0 obj<>stream +H؀!0h90YE`) f&Nx22ʿ;c?;\]ּا,/S0̱^%(;đD1;iA`$ p-2Cd>`Z Mn?|-QPr}AhاJڐ GV:CX: \]kYǥ6WK~&F +͐M UT4ļ1+SE8.X $gb`O1XVTR9Vٷ 'Zd"AU5qU|o6Su9b4?Mt]ml7F8" +CYY=*KOG}?xǜ> endobj 4439 0 obj<> endobj 4440 0 obj<> endobj 4441 0 obj<> endobj 4442 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4443 0 obj<>stream +$V| Dz٦2$q /Š+} F}#/󛡐:*QjߏݍTŊ3SZROm^/7 +Ñ '猸nY wtӇBg@E0+A@' uqx-{8ú=7o3lSZ+sя9=2 Wq(xu)D6 +sKē*^z3ѓ;;ۻn v"PQ +KbX{6i2)57Z2~ Q@Lcyѻ`j1`J +5zeJ"\0`r u 5ȡ+V q vK(XCQj+V-obxrc~zCN[8B hj޺-Dvd;U kx[SXj\(lּ0- q e;F&geI3-Nܙr/jOFjGBhRzI_6;85$ySʉUhb_dBQFd!WYF.L 1=m u5l9B5qL`fs-zԡ%\hűx<_v2VGSB@G2/?w}*{GIZZC?֯y+"ǝWR9Cx y\64{OVfhAq ߎf-^%jꄮᶪiCBAvюv8:SEzF`д6f/?莀Tј.zyk>;Z8 `|=jѠ>Bgy)rsvMk8&g4fL}ܳv(~zUsDmE9?,RIRCg~0ARF.AC80OpST"ﳯ 0A =NU?wM_37~o[vi4(黷 h׭Oot׆ mR8s8? h@.:1]⩓ݤq +B$sZ +endstream endobj 4444 0 obj<> endobj 4445 0 obj<> endobj 4446 0 obj<> endobj 4447 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4448 0 obj<>stream +ñ N%z6Eo-gmƽh+\ *TVpc{ETk7iӪ +Q˘y=,18GUt!y[ 'sOzÑ0/BJ^&g<('4CIQn0 ka[t;p%=6D5_{wD6fOٰQc_71k,Z +p<:M~m> `,*=J4XB +͙PQ}!bg3'J}~>%Eƫ{,Jq{ԄFZhl[_!), W9kz*y\ K1 j&cM]`PȠ|u838 AIZҌ{|;k]"Ns/ZR.Q>fyFIw]:}᳞C">ak2`f} o0lzȉqvhwJ$d!=rB6~YЭY[pEDV +dڂJ2YWd:TfR +/w۶dKoˣ?#Iœǚr<,w\, b+KqHRi/rsgB9.-L8o/dvƟ:?5QԽDw?0| +Ŏr(?u&K jKeAxGwK{Ms8! aD) -""wAT(0>i; +q$m žU"ߖ P{β)/בA\SSyUZV L%~ Vv$ P ך4W O]gP@5}M08Ͳ,!9:u'`тdǐh?Za_y9dT x1sPC;-t ߕ~y\+/vc:a b +endstream endobj 4449 0 obj<> endobj 4450 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4451 0 obj<>stream +b64Ƶ.b!^|6Uj4ZuA x_n㤀gg! ~qj&~ 4>ym+*A(ANYöΙobwpֲ tPW@u8(xCCX &$uqZ1.OF +[XH%1jSFHU=sDjy$(y2Wx[B.m +N%Ws lȵ܌) k_./zj4| adp!hg#nFh\gL#x +5 ]1QcJ|cG%i³˥ V%Iu3nc60Sz/Mn9q.T7$b#(-2 +endstream endobj 4452 0 obj<> endobj 4453 0 obj<> endobj 4454 0 obj<> endobj 4455 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4456 0 obj<>stream +s/3H 03ozihLjE\S6xL>إc#8g)ah,6 ~zr4u|;S˃~= 0wU }F+)w swJjd}< +{Wy?́wIdŽ?oy, +dޝI4ArQf\#wfh'qt\#po~kO+4 *VK)UNE-K\@^A0 fxhf `QNr.*ht΅ ڛBpY;E*ϱ";$F4[-+\2% m+R\=o>|gVusD8@ +d[S]W0-nyZ?бcuJF+TPfZyծ; vS²qcnjͳ7EP0U{LKIm!:,7z[)Ƌdy67n0WkkfzVjW \-4tk 1~N61!}a2mf[mp^xut*.Hl +{%~jl>jJ{|o98 w34Nd) +MTÑLay< +23[?.A>J(=)[* 5K[69W$sT7c/kɕ`B.L"R;|>KØAjV3K?"W{Af頟Sv5\.N?\yAw 阰hx;O|ǘu'7Y%Qۇ8uSņF"[ӱ`h c?F]D:x`5՝>=FMV}VRkMPnٵ> +LMIVq^m9{t<|ա> endobj 4458 0 obj<> endobj 4459 0 obj<> endobj 4460 0 obj<> endobj 4461 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4462 0 obj<>stream +S Iuϫwo*ر!0n\%dpa5 IҭQ:+~& `T7YSڟqԱ Vӎ-k=! +E.7\qPYh&m3TǮſu`mE܊\lXC\~˨q;Xos/Gy}i_~' KFA*=b=&/1EYOnp$PU>aDIq=+cWf - {fZ\X)7ã|b +:evh"m#1۬kNP^]7#qmTrbGݵ9q6;dύb՜I[ߴ_n + +9ULSxwV "›x`->w~ ezAߐ8NOGL#W'@䠠:{,pn|$%vtK ?݀]}aH +g^9q!wG&yڀ_ $ĕQ +ڜ`UҰcdVG #1.G]Np ʍϯV +endstream endobj 4463 0 obj<> endobj 4464 0 obj<> endobj 4465 0 obj<> endobj 4466 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4467 0 obj<>stream +^Kga"έNKu~qzo.vx;Fuh;?B7" ׺N9y) !Go!W>N8Z!1A 0m#B1~A 9zĬ[2 +x: #F8LŅ) +ғXBe:SFXW~TL&;҈!g f-prPsHq{=ݏOՠQOa{xrt]޳UJ!JMqQN ʚ*zbUqN`{pv;ܬO=$O3ԙEtN> 7#:ȯFqp6Y?ٻ^\,;,+Gw|>j TU^&:A W5V{'h_Yhr>:tkU_pKӸ}MuYscCu/oH3˥IKD׌_-W|k̏敒:GUIrYPTaų|;)p3Vxy-(\gSK$5FqY?Do)zݬ>Y88FMN +?ץً*8ݙHhۥ>}LT*jHl#05UīO8/feSm/ͫ.r}$שW&늳4HpZ4_ qPSA. d&QW ;1^fxb7AlM^]>RWJ%0s+*G!(FyD +j >8MWac𽰸+t>!duڀe,9Gm!>'zCNfӅV);cvhP25; +h%CQ/ǔa"|W@Ҫf (vqVn42u{>+IŐ-631g(phꟇ֊ i)EJiniw$}V}$R_ACRj_2gkEA-#X͝ 4pˡOODs;'Rn5Uŷ,(u/'ŷ8DMN_A(BgxRmScv +|G~Cr#q.f\ i5~Ġ) +endstream endobj 4468 0 obj<> endobj 4469 0 obj<> endobj 4470 0 obj<> endobj 4471 0 obj<> endobj 4472 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4473 0 obj<>stream +obb'68J]i6h!K\g@m:B2hulo>'YC-JN-=XgAlofcOXQNw @pbMeG5OSWuU =Kc[ m?~%yPjo+[}XK+Iښ'%3Y^f=>M1_NP?FѸ u*yPGr~(pְ[{X<lHTӢͫ=R: >%T l0y,Mo= 2gLb9_[\FuU`Rn`A/@`yn1'pC|7 +X86RZӥ7*"W)vze A/.DfYAXNy s-Whx.kl\xss1gF9%Tu]'g=Uz1o k3H~4'zRE>ϫo~|zOuο`IbvBү %] _;$ +zi > endobj 4475 0 obj<> endobj 4476 0 obj<> endobj 4477 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4478 0 obj<>stream +НO$h}:3_(_eCMF+%4;]`XNȰ}]9|"&)HaME`>Y:BݱDTa JZ r(Irrfv.A-mW٦!@$X*UwxbT&PO좢*:-kbY +UVB@Dd2g+ƑLO΂lß**~VPMT6gEws *W=R2b]ˮ?z>ɕXHj5Wp2TOA1c$~.E[E+uI cˋ/KH#%U zz<2ܔ3kZ*{^XB=B/Qy El!7PG{? (ow ]!8Tk"0; +rpiXsO;ҳX~wɈ_`kmض6C^u0X Lڋ%=d rGθo fwZP@sxkT}0 v!5 +]"bGp  =t%%2RJ|k³ntcp[LP p.h*R)2c؉_v˽~䴰=CU +%x_ܟTv Vd{+Ve40`܅CR(L2E )jokl2wjF11 6Va ]:il 6ShmgLzރb Iv#-(wwt + ~ + YPt{OAx6c~*i%{HS--|-2r#dR\O"{,c{BAzͶ'H IB0y- +IB F7${%/1h98!c|T +endstream endobj 4479 0 obj<> endobj 4480 0 obj<> endobj 4481 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4482 0 obj<>stream +Q51qgNHpBߵAY2;ʄ*^+6yj; +.bFit\(,eNՎmlz7'f4#$10"Lp!h)6:SXg9ChyЧ]{~XJ &wZ_"8b +6k \,~ A|Eoɻ\杈.%#&>gt?WjU4UR*:Xw)aj +3=ewu۝Nohz ӶG!+.Y-Y a + mh +:TMl_YbiыQ;wNۤSNuiѱG{M% M&Y!z[@ffh]ٓ1CȨzӈ"rm> endobj 4484 0 obj<> endobj 4485 0 obj<> endobj 4486 0 obj<> endobj 4487 0 obj<> endobj 4488 0 obj<> endobj 4489 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4490 0 obj<>stream +|EN'{MV1wkD.Ec3^-koo/IXPR]JSWv*!sOcwovFJHQ57Q$ tJD>F|.b㽃ĒA'vs;($42sU䙲g8Y~.7Z zeݟQɽIyц<2o*Uym7OQWGJ>Ob&k )pf4)Ѫ4>лpxp!AƧDK$|uSJ;`Bav:+۾}Ta Y]]. :ᗕtbiƵ89LM3J肅U>ǐEy(ωDᄕ +\Bhjٓp +%r6rVRisMI0;4ÙE?&I0t- LĔ'o-a bc9!S[lWle Vp9N+"檉#Zaa\;%8nvVZX| r>=+ +߶Ew*JU~#R C wȚlMfF!+݅XEu&h +ߒbY/;X t큠r5Q?g$&$^ݜG'x}=4^8>>k~ѶHc{Cv! nA).-,zE5LؤHb2;C4 "k~X0\#f N j$ĽֿULHk~CtR+I(Z!sr{IO,ܤ ْH͖у>kijQ$!kߛ,O),s֢}\H}u Ǭ 7N~,vFf/ !2dܶ ڷr.˩ 8w*Q܍dF0v8L]WY8/]4-fm=z +;*QawHxe1õXjB[c&8bX~"HMyԥ<_M=y?w˪ܱ%$MD"w؅2сdC? +a&6 p1#2Ve'?%-`"s0a +endstream endobj 4491 0 obj<> endobj 4492 0 obj<> endobj 4493 0 obj<> endobj 4494 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4495 0 obj<>stream +&qBcIA̺΀RB-]RئawnEhل,`lL:3WYjRz+q aŖ~`tBSoθN ˕\Y~9IRzS^Sϧ%4d(OkQS5)8n87{G/CEbY,,h$FM3a; ۛj ߆׭Y)5w[;{w$ "l-nBCWh ,ꔮh];= c3^Z2/“:-_׃@xB~:D#2}S @2+WݸLL>}-V!q +!4bh]Й-4|Ous2ff_QSdˡF{\x*zRJ&LӰ=(Sc;zQF#lhTULr E{92'':[ᅅBN TQca\r&#0q?7'> K3$#[/GfE-:`>UY#~;p;$0ܤ^#uӶfC:w1(:ں_yN7(Q&f^Htw @}Lj㣛~ 9M-#}ZY΋˘T$fZ-B=4@NM7@f ID v ;nS!ܔq͊7[]%﹭ +p‹06N}j~ ^5K +<$&ќO}%VILBJ\зc='!K[oEƲѧaiL-Am՗JB2QƃeגP9s76v89}'"η= Verk~G]vאUEhO4oqajuQsDx3UDԃOUt[Pz$$WSѓVl4 +endstream endobj 4496 0 obj<> endobj 4497 0 obj<> endobj 4498 0 obj<> endobj 4499 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4500 0 obj<>stream +opT d I?ChTfW6MXד Jg `\ץ^ !OMamd`5+7ORgd@7w-XYVڶ6;6fF ෠EG^eROW"%*#"vRtw+,~N!YQZ@]hMݫu$tYu]>63D0TcIB5a@EOOhh^f 7x;wB\ɗu֙#?h 7go;r}4Ggfg7%t:'e>~ʒ&!([]ێ dw2#ƺAm:nj+,^ۊ9cmhv !wj{`XEEMQnLw7MuYC\0̾&u-F7>M,r`a4YZr/!H:!p Θ7=YB-u=Dzer'J̞ɯE,as()RPCBD@f(>z}iLa&_ D +Nf?lOmF+],[ZrП]>K0Ԥw9nުЬ%q)i['˜ahCv,wjOY$a*0!kc<Ut&ǔgTˑ-?W(D/zZO@UY3#G c21u + %Ӳƞ{R*F?FқOV9¹Hh/xD%%d?Qt[['pL4qC $%Oڑ~P ˉጼ@Btb%|YAzQhd?a{ď~;ҼNFdFZxB~@j@ɃrNT ==`ƛ +!=FgÎo±b"h˃G&fO*2'[!uߒ7(ؤF +endstream endobj 4501 0 obj<> endobj 4502 0 obj<> endobj 4503 0 obj<> endobj 4504 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4505 0 obj<>stream +gZ47mHje.K[kQ<(?R8)zB-%4(CaAji`IPAagsEWivr 0FIqtlYn<9{IJF~.TX+ߋ5s;g_(VcC4*kvR$CQf1aF cѝ iq%!a3<{b!{$ OcX\Tcу)FY~AVeu4G Fւѿw .}s\ޑ`l©~6ż\|Y]/DO1d5QL>@:i<@58M61ӣsvu9^ vnKi\Zr·(5eg +U6&] _wRRi\{=d+ӾN=w+N*e~s&CU+ULVк0?Ga I`ؗCGw&)h]|~z_v t܍w"^T/$(_~  +endstream endobj 4506 0 obj<> endobj 4507 0 obj<> endobj 4508 0 obj<> endobj 4509 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4510 0 obj<>stream +SexV:9Nj757xp('U~RB"* +d)VuH>c必Xڒ만? g_LjdB CwYU~Lɹ~jcKjʢTf+(&v!8.oN> (#/'*ƜbXn/e& "/JelVlv.$0Ҭf V`,k^8AEi"p7dt Aŵ鮏d>,BL(6 +d `e +omp;YͥrIb>uxHd5Adws(՚FxƄj ^ӂt!!=K (Ǜ 7YHGCZE6@ʩ, b5us *<UQR!Q.7Pp$ߺ>}FH&Ԭ +\9 ƶuiFI#&L=; +"l\T`n1Ǣ2׎Jj rXǷ8߯4Zkl/jXoV>[A9x$ Q"ܕS_MSnyPwnK J%6r8@"`/#f]l1-%OﴨFMug=W +#ƭm_S/Y.hnحNA%-erHy"; *?RYr#KeD8WWN>yx M%kn1Al.t/N> ~3; u6&ԆR7; ܡe11m،,wşJZ|( حǴ@A&&V=yA: Gb_:Շv#fpH~s9̚қ Zu=TIוla!{/نf`ϡQT/iG8)> endobj 4512 0 obj<> endobj 4513 0 obj<> endobj 4514 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4515 0 obj<>stream +m- TkTJ ēJzoO7G:A8ˆY5U^Kԭ&}׉k;$Mv F{@}q:NumFf[G{p^ո#9bkYN, VmpcPuHgyQ'xx>f + +   +'&T*_GF>0C&]{F5?\ +v)T{  r '׋lPr.-_0mL7﬘ZN2&KrI'Dk)p]kO u$mvR(ܟ$J4NpC֥1 FB8ns@~iVLB0OE^qevf] #2&~4U^u!$ÉnDX=v#8 ?ȐΤ2NC >Yc"qN.CN7uI|> endobj 4517 0 obj<> endobj 4518 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4519 0 obj<>stream +p~shoaڮW5NXD >9p0R +LE%)志6r:%4d.K"y݋+ycM"f~IFpU)TMšP=7 ȸ86~NzIr{*tV#-qupخ Oi.V=A$mmyVe^~; ,JCI ?Gh )*IcuthVWmھ2!åӘ{x?#~TTr78CO!&}8i,n*^Ah~-kgJtq xWC썂eLJU8l=Q &G ΣFk3"=E^͎;-8ŧ/K Ui՛R}rbS:^B9Q|dEWN ׅY%0Հ 祳: U#;@`}[w:ߤ"SGAfN7b"}Ab╳mfQ +e$unCdqa齓swa˨(-L9cF|A@fUĬP\Ȓ +\6hQ#S/ܓ'/]T]x" >Uo3l9Jȫ0V +\ 2䱐*نwc+ky6%#rc gDVSIU~_sTln &xl57t+R?@hMhrOIE/~~쀝Vʶ78K6N`x5Z.$zؑ;K_~$tj8tsCfNvsoqoP)sgb Xԕ0ɡLȇl֝UMCp]/2Ď9>З {Ep-??,sV'قo喳E.T~hUKV +5"E Z971šo2bd :k gߘ K@qyG0_T_H6'g l-i ׮'u|RLJN +endstream endobj 4520 0 obj<> endobj 4521 0 obj<> endobj 4522 0 obj<> endobj 4523 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4524 0 obj<>stream +n}4<_x.G0_dYjJʋS[l9#I|t uIuǭ @,EzOm$K^ DL +i:pKWTo0hAX=kQ5[0 EeMUč4};C\S=3s 0I/ˇkDB4%d*p=$D"~·4?`BB.+ x=CUS &L֞r +H=7bc5F2=Yl3?-#;w1^ +nn$`2Xp徃MD<9>"c #4h|;0$8yz:@]öhgJܙ:ų !i& EAuWƻ.}^ZE8Zt{g=#MU^nbIzL.̇+S +s5j-Y.s,P&q܇P9:<0ypEdK7>q 0~]SJ90.`,Lp*0o:xinߑF@ֶK d\̶<'t⟌7@5q$n0zf&c򷭱7 Î:yRWo-3ip,ǧm|uBkpd^=t;Жؼ9dmA3]3י<?٘j PD`Aĥu4ĘQH4B҃F3ßv;ئOa>0ԱZuo\[bycBf)F t>'E3[󙢖/ }@o ꯥ%:~> endobj 4526 0 obj<> endobj 4527 0 obj<> endobj 4528 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4529 0 obj<>stream +?ÃbĘ&; Acg:u[id +vx/,EF +YБ$,x`U+| +X*iJʎR}*z2=1WGa)qຠdz4ق^-¢alktW{WVMo ׮2Ze[TԩlNzJDA[nuhXտՙ~`TFvÁJY{eŖ#3EBGgua;JZKj+E `P#e8.Cr`0<3SZPBR0l]ץ#qCl#lV ;JAXT!'-齭E~f(*E1{jw U\+\)}/%Bg=fue!J>MNK%5-Y!0Ci0Ue4~u`DaPS=X-1tG.]pp@3 +Y3WU͠95D9tK#[6*B2ݑ-zSQ*Έ u, yeac䭄W#ޖbWܣ okC62h{!=y7]{:ӂ}zWdSC@\ahaAP!_W2?;r.ރ9@} }wEwTӷ'aªSF i +endstream endobj 4530 0 obj<> endobj 4531 0 obj<> endobj 4532 0 obj<> endobj 4533 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4534 0 obj<>stream +u&C_4qѤg;-:D_Pj[ +atxÅu=JOXTG&(_R΀>e !b{ܶ5ELT)9#o m)67cLĖġ2. t:SH\ps7G]!x ?jzS!@V0mr.0&QNvk8zr+c$V3Zk{9~=d#0;4OE-vUV}^OcdܫIvFJ#fZl[\59 KSelK^vd+w|8(Ck,u +[v2zD&u%"whǚLsD{S4aC K}A9bz}Hbk^ĢT:13ф>)0V#J8--NwWpO>ݼ*lk~"/X5/)x #Z2v΋Yw_bٴqtm.8WJu_\,xY ?;~ Uը7lhoz4fn(H,ƏK ,)إ)\Nda4yȥP31x3;~c#/r f2 ~=B^S|wC,jg nc169ۺvc2CS!>{Z`OUΛUSU3S^b'j ELޢ֎+e6)P%Eeui> endobj 4536 0 obj<> endobj 4537 0 obj<> endobj 4538 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4539 0 obj<>stream +'t@hjB!59;KXŠH 1˰u]w"B1hȆ:ۚia/r7/Wp!l|O"[p"ubsI`jv=ZZ 9[J e7>?@8p2qde?Ygs埍x =<٦Iu! 4%ȻUH%@z'YVRa46Q@j&GzD0a)u ~W@4Ja%6 ؛ V8LVqǜ ˬn'b*CF?l.0M"qB"m~s$T#1y"l|{'}AfЍrؐOOfl Q>l$96`ٰ'"4C{ õc'{Pl>[}UU'OM; vUzqloW#Ҹ45N7-6UlRvK"h$b'^O1iMC50arr*Vg[wݗ6BM*1F^}U" UJWܑ8A\^#h=Xi:[9XIs0 e#J?v?Dc= }@7~S *r?EdgO6'),n,`]ig@uT:(ΎA!*TkDq+|'zG<3r28H=]wɔgdj>T &'6JQބ clyYz/Cǰn|Rlbаi\Yv ~cξekD%^ň =B2 BaBaHW8ebv/bm, q¾scP]I݆t:~|,I+% %u\Ir8!k@vz1%;Hp2u֓l+X,4vo`v-OM^;Ƥ{Go&᫷V^I'f·5iȳ^ulL/+XVJ]_*CC7|'Rí3b`lHf +<%>UUzR"..0fD],!.4 +endstream endobj 4540 0 obj<> endobj 4541 0 obj<> endobj 4542 0 obj<> endobj 4543 0 obj<> endobj 4544 0 obj<> endobj 4545 0 obj<> endobj 4546 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4547 0 obj<>stream + +~,nC ;uʹ֫67Q\gRf r W_!`=uGf72N(۲Nce3dec]UquZDi`QG 3z]!jTe>m;uaG#@NY_i֑<*w\{Ӈ+}Ku$ !'Ý0ҊHօi.I69:'|+T0pHN/B9TVJw!f-6]MՍ@j5=ml^Rھ.R2a{Axo'b?@>xu;`t^ +ڼ&M>xYw6(LCА̉>X]O.zWImx$D"f6XywVᙧz<wxUn`7bo112 +endstream endobj 4548 0 obj<> endobj 4549 0 obj<> endobj 4550 0 obj<> endobj 4551 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4552 0 obj<>stream +9O?S?{a!-[F0(~pe"Zk5ھOCQn]5V}mmAȵ@ +nXcxF <7X|RkĶnσY{])Ey)E%jE,_i3"jZ_¥MvvF0?zo"FO\ 8ԔSKPBŰUqyԻF!w7I7cb hO])TU#D#浒D^Qǿ:X6ޜC8ѵ;a6VLߵ&HL#,q=uW4-E.8 UNSkvW""x)L!C9#ᦧ*.lעFa2"up"8աmOr CC_4چnY$s ++H;ve=5x!R7'E]܍:j)񑯀|156?HX٤eDTfY%|}QicgIdJ,]*yԞEu\1[JEwUnc T37v߸k+`Cu  0Z'O5Lk@@t-ӵԅԲ?~-j!3Y}zExjj³9ZeoAh|振GE)%|} ՕJ4{Vy1֜f& '?ɭ9(asp(-לsJJ( GGI"u@FIIG0T)iXЃ42TxdqnP6Jeݨ +-1E}}8_}g('nI\r'H <|Gm~ek:La2\E +endstream endobj 4553 0 obj<> endobj 4554 0 obj<> endobj 4555 0 obj<> endobj 4556 0 obj<> endobj 4557 0 obj<> endobj 4558 0 obj<> endobj 4559 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4560 0 obj<>stream +čxRmR?;fMD7a .%@#T}Bw~E\"QP ˣ#_Q^jL4[],2QM@ ɮ+#nV|e2> endobj 4562 0 obj<> endobj 4563 0 obj<> endobj 4564 0 obj<> endobj 4565 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4566 0 obj<>stream +aLo` +ɘ CTCRʬhfʧ5YA7 $zbcFhs<^&Z ' +c%yHmy[1kUVr!-V$]iM:Gɘ,QBkOxI74?&w"cgpPhdm罇4xX'9dm&Q+0n +@:4Bɂ5EsrAQq?Hrlr8 \,78FyUjF^X=&RސTsʆ!Sn<?$9V-gRz}Qx$[,vOEZ!ryMzs婕B!y6dkzU"]LE]eL|~p|BA(u#`_UD lC:ӽKC TVpoO&T`75*|!Mz!bCm&p.lxj~z 14>`;`7x7LzAoBKl#[ԚI:,?BL1mD>?qtóF%6: +xPi D@`hef=t6E?%H;3? +3pVy z w1R*˩IFm#aRQ8:(Z3M]FJ1jy[EU̖;wX.ǟCSPDgxSh֔%AS //,AD; :>@7s>հ azN{ A5׸7HfyU*];i( 5˱荄XF?4?phaJahpWQҟи{6o ˕Bi2fVnu""䖥 3W fwE?xx,87h&4<_vUbyh +endstream endobj 4567 0 obj<> endobj 4568 0 obj<> endobj 4569 0 obj<> endobj 4570 0 obj<> endobj 4571 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4572 0 obj<>stream +Ii/G :PܧQ']O$*\T9>w?}87A),Hsr 2Bp@1Rgm_:XP5Гv0w@FC~wrEܻG훫 ǎׂ Wi6mCFVG_\7żͭOZ^S<|wx>/ QsF3><*g ΐ%x34H|Sv)BHY-uܺ'2sh~q-8sL:]9lMLzr{Mr|'yppb@+ <&/:)Lג{W;[4Rd,:W9cQ:Ѓ,~ZGfqdYq`az;*8VPbf']x -wi?I,34`rVPu~~ZQ=RVλXWjxtEkCo# ֬y5j`RcNfVigr?/\r!2Bw6m! ځH\w|9,LO] +!Ù)Η{HAf +Ө۴˪PL(-`_/އ1Gk{N$mRvw=Ro |OG(o>_E7ʭN'J2tZ$ށAILB䚮`w5=H#sU ?LJ5CeoM }N*de4j+3*YΊ{ +endstream endobj 4573 0 obj<> endobj 4574 0 obj<> endobj 4575 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4576 0 obj<>stream +Y|r>J^m."5C* \)PUsJ?lMo|lin>a~[O\8#VwSqz5UuiuYg+"jrtR] ) +Dl(( ΈZxyҗӕ/{s<1^pAԉT+( aVp-}F`/o1v5 1| ,vXK^>.;>G${~4py'R(e H}Ac&y9yaf~{Кs!)T^@m 1A ^fBls+}DN%B9J8²CAL x@CB$w2RoNZ'yX +~G OMOQֺ6=ML{.uZ9z nrb >|m[WDp16%F|FwJP^2x~t .Ѥʌ}h}+&>C ;JDyJLԲk¡:Pd#o`H]Co @mȀdܭFiK^*HţbAL+t}h %%תkmPZOYnE~fiߩ?{ |u,| 6PKۥ!ఉi*9-cð&ּF6_7an\ʃ<:^h\d)Pέ˨\`2ƴvm=J:EՉ7>/w/h?:ތkHEtr\Yy$OXƠS<*c4 qq5W {=zΡz>M(zoFnW&/UJ1o3r/݊:Mj9S󄦉C |Q ~ +tƑQL"z%VWg&TPdǤާ2Rdh?* II82 +endstream endobj 4577 0 obj<> endobj 4578 0 obj<> endobj 4579 0 obj<> endobj 4580 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4581 0 obj<>stream +dG|5`{zЙ) +ǏP:M4}'$5u| +ڥrcٜaԡH>TI (spBA6,{얗E$Sʿ‘HJ>y|rc!T ,2ZKO6p>r0z{=Zu{k/٠'ohu17 %2eM'tmt'Cլ {@rԨdK8zA~ +\qVIyjay-1%|(P`3>CqTlLȧzGzS"Tlw\2_[oȗ&(e[E|C@id/رjу _Qg'IɊ[NbbgoQp0[XXg+ HJmMٿIK9ӡ#8e~Aˎ?6.]?7æ0[wtQ2OA3tOCiLC.vk]؄^*eId16 ǻ,&9GLQYOt C2ccBTZH~%fQ(?PTʽ9Oඃؘ%;s1MVtbBDSnZۑ %@;CFomB?en[̿?9:5Hd_~Qv5!k((v f aUAof͡#$rCq.MC"Zs7cWWwmݔ5q6\vt2D$*BiqWUx=umōKi]4_1*#D!;h,&hƟԡx{ Dvb[f+huyuo Gξom]ݏL 4 jsPKSH)[)x6 #q! \ٵje:꨺[bYhP>5]!(4$(\-wZqwɿi`& I~hL?(W2Ns5#rwۛ\&g8zg*ȋj-Q9*J+O+莪)V(wpdUȳb. 5eQ#Jy^r*#,ٖáKpծ)heBP: Ǧj"N0C4 %Vuѽ[ُJnWI)"G7HgZOj244چӮPG +endstream endobj 4582 0 obj<> endobj 4583 0 obj<> endobj 4584 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4585 0 obj<>stream +n# /]_s_8V^%2܈P45HTzRVImw OO*_]s+T1P{Nj`J֝h)E'C8bA7h=t+Dߕ(rG'r#;p(uؿt#!Aϲm̚fB׫eW7T'_7IBmQt-~g}N V$!DUx]JMW}rkX1P+TXms" s48"VG]m܀a0I:$4ցK{7;: +)m &j#_= ?٢}S2g1)L:֐t|WtsVN&?:MlH2dU&j:Sz;!p׶8TJ:=rDUrrӬo> endobj 4587 0 obj<> endobj 4588 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4589 0 obj<>stream +i) m?vPx]8A~=_TV"Tz!pD7>E+x:M`k W\KOmuĥx҈dFY)DLKja '5":CQ]3ZX +€5NjdIO O_J(D0m4g=jD⨢;Neo%M/4LK^'>ѳ`oW} q^}𖓮 +U9?Cs (gsS+˾vXp{%FSݝ>HF>yBKVr'KJPզe@DF`qk8eHʛ41r|Y A*| Ogȯh[ӯ ul3/ӳ>7+ >䝟I^1 yzR:adkkeV z4{ Iȉ IF+IeuAk*B{$L2ppl"Y/Htony7`O#P!'riirPo7#(c//Rȱ(,@h6KHD@4; T 0+ydMSۋh PULM5 Z6 /PP|ꢬ>N)T%K):A NV7q +}%DLpaJ>° a/3{QZ}O˷S5v_s> endobj 4591 0 obj<> endobj 4592 0 obj<> endobj 4593 0 obj<> endobj 4594 0 obj<> endobj 4595 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4596 0 obj<>stream +0LK/@b[_zMv(|;<tp=nĕOѮ:Pp0v~NSKH`9ıfhbmd!iדAPI[d=NB̫[:dҏd`:*RKt­qhvm;76Z8N1 \mxVsC}Gǽloq4?1/4(s,`'joK#Sܶ0DATNj"ֶ{JL F"Aa->-TM}Ӷw/?Y<!5e荼I+-^)tceNH{v=F^~إˑ]z',)+|&5;C ǪI֧AOK?_ }3W~VZ,"᧞WXx3Z?ýG_VMz.M÷0d̸+K>a[{ri^qvUS}@_Unwcƫ9LɈ1mV {Ig +"ٔd͘WzXn"}oBJc2[/ # j)P HZ])p%Y93&Y{eQ +/#!`Eٿ 4q!# M.Ϋ/Ƅu-bcN2&.Y):xd!O;ğ[4\|A;E? $Z< :nϟ.qDsѷz$K\ DGy0Fq"G9)oE~o1H7CjwN x[60x; o͔ ڛk@C)цj9D@r"9S] `/%SF Ey?x);BN9|3pHTRIm"LCm_kCE;y5Ac@(ר|("!akx)5j88'1,0@?eOŐy·2[$j|KFf;O˂HOFG?K4l@rn]089ʟmn^29x$#-Øu{Ӄo#f)]%Buv$jϜH%] -؏KE'WChk\!T:T)>j +endstream endobj 4597 0 obj<> endobj 4598 0 obj<> endobj 4599 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4600 0 obj<>stream +eBbK*T}T#"buE@ cpOX +skE'?v/rCό'LސZ.=Ye_\d]1 &:Z yiNs?>2~wv%R4%F?tZ H&;hH "mGwjgc +|s?euPy4OI SUdS{^7u$FtkC#TK&Ha+5+θi դF;J{<| +xvJ!Uj" BZ*$H˩)M:A3h% [e6.Ik=q׭dR UEµ `UeLlhg_ֵϙA-!u`t}:"n1!kR$jB>%Qz4KTV4v!htU}F6 c+8qUb#[Ek n]( S! +endstream endobj 4601 0 obj<> endobj 4602 0 obj<> endobj 4603 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4604 0 obj<>stream +7Ժ9Qx zKW] 1Vc䊑:Kň՛O.pzzg ɥ;_rG(Ճy`:>ߟ]v̎ +wSs\aGE~֔mGs(~kHw-Wmdc;&=dL55ѡ'! < ۝=/+3$7)c{kojo)i +*8ZS[HSczɈ,{Jv6g?19R|r^4]'KݎKS :P~Lڂ ϝA͚]_%JG{5a884WO@ԝ:Lb KL90m)z$ĜYxt 21C{&\#h|(t)|J AJp0a"uDul Q_4VȠ.Lloe.Bja51N)ՀTrd u<k717IL 8fSӂghS186!Ojų +endstream endobj 4605 0 obj<> endobj 4606 0 obj<> endobj 4607 0 obj<> endobj 4608 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4609 0 obj<>stream +<5+ F4쇅Z"01 o=xm̛Z "Y?ˆ5bl ~N(iBN LJi@OW_ !r\@<)dVF:5;>a#꒾ec G[tWrmG?-j_$M#V|vQۇ[ ˧$׳QxUO5 +1ap?=*N ^ +UdbHR>E4p;f׵$/u7b뎧3L'S.qMF2i CO2/$q+VuAPe('VGh D: VIm2ᖏ-^ǎlIeqMK Rz >5qH@FqF_g(`Mgl{nGlvXeNJ2UrV4a{R#Ƞr .^tAW:IjR6X!U߀İ@*7NV:RD]6hS8]B|& CG[cDS5}N^ +#rU_'06Hs@f[XZĪ|ﰇ&PK2>8e}Q{5J5ƒ#9gL + e.zk43 +endstream endobj 4610 0 obj<> endobj 4611 0 obj<> endobj 4612 0 obj<> endobj 4613 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4614 0 obj<>stream +M0-ya!ړ=蚱㧍잎[rUgH [3W\+Se6C!X=$)*CmH#:9NIZ'ZR) X `ܰbh*~{FU"C*kuˁLBpB A9r7$c?ݛ/B}d|ed|uPyt1jl?qW '\SB( iu~Xq(]Ȓ( m5|Cvxlj)!:v+NNv SB>@b} +T [G*Nºc' 7vXR=XT>m;@D↌8zk-h{>uRyC{Q{["[KX\B~pËcIw܆Vs!|WltҞl|+|?JocrWmꐽgPX~X8[D'QIYmdg6bP̄sq79m:* xa6kaLl7×yˊ:Z4zBK"!R 2'A%Ԓ{m +G;@UA;*= ;h47]\()]W#y;mC ; iz y-'T˒74Mʵm}[j`6a5ac9^|Νןܱi.X8#2 FrB>$7fᰄ ٜ:Y|!:̿'JUܳ 8CE6 !oglbς;cTtD2fP!ѾN>/L> endobj 4616 0 obj<> endobj 4617 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4618 0 obj<>stream +̗bD劬~G2Lq8ehĝ*P9P/,#"t32nY"[=;i׼*?ibjFɋ]Վ(wXB0e:Xg$A+XL]؄P{cJ%fev-Ib;%{uքF&7 MVѺC| 0^]6g `l &Oݩ 5~K+S-˳XJ%YzYM*%_J?գ^6@{B eRjj|G\q3[0tyʙ(7qo^bT39l=ooKؠzyZ<yh'gy 'x)Ažg川rIx"i(_MjZӘT$T7 0%9u(FABZ!#\ '}#iy\x WuL߅A}kņj:q9`!xIw%> [.?z"da*2KJ` JNEydr>m* ]%cѥ5ȧ`-,ϾX71UIA ҷ5AX!e= +攒Fl] ܘ%@T1ӏ?0(]`͛\*`aOZNnaBsPr)%ʅ*m,ZaScv /sOɼfZdW+c,{-+OzK52rdX%.`omߴ9q3cSDrAQ h`55d7K1lܛ1i+cm +)ʗQS <(yK%x-ߝ z}6b4Xx(џ5-&z?Б?CI"CbE53%%Q{"T[x(9b^r\N@{[s*Yj8y@XMy e@Ab3d#p"` +>%f=:z ~SpI ynm9 {%_0 +endstream endobj 4619 0 obj<> endobj 4620 0 obj<> endobj 4621 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4622 0 obj<>stream +4^f8_zs%-@+?Dyk>B|s*g38PqkdO1qwϚo^p8tzh{ڄ9BR@!UEx%]Ϩn(<_B- 9%G[4U!|AH!ቢK뗄;,)|mKDI>[ye d/$tF7uRO:(|7b`y>\r=s((ԇ%6'H`P%fNȄ-":᳨ +*6s!qGCV*=* +FR tܧ up' N?} $gr-єpZgWHear4iڶI82=Ή/} 43aLfw+LD09lǀ!װ~c֫: +᚛6e)#7+;1֫1Chծ! GDIzXcEF +endstream endobj 4623 0 obj<> endobj 4624 0 obj<> endobj 4625 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4626 0 obj<>stream +>/*VŚN_L2֚hSp|)cmts2$h7T].[n됳L+YQlSL4,0 &qUW -Lza͚/s’U |}Ȋæ&=YG]̖4Bh$r罋V$ +jXŌ.O;QU9pr$0}ͱrӇG1*fNpm8A}fT 6lSp|ON,7~=c骴g>Q $C0 yA`/vKםqaT2r>*>u)xIՐL4xŸ'vIw49] ٣o٠?z\g/}~kl@i/l|dReh X B6Lӝ9-'-s6&fi4A\6QḿAeH*l?4pl~; -mɝl0]f W{1?Ǚ2fI* +/= } +[Gmr/͚"*6z29^J@K`Ģ"VLnv\;ע +endstream endobj 4627 0 obj<> endobj 4628 0 obj<> endobj 4629 0 obj<> endobj 4630 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4631 0 obj<>stream +5P>z1 PʉZ\ z%J +-m˦pv~ʭ$` cG¼Cn 38pGxrs&T9u,}4μ؟oKJZ7k69; +zXR2rGADu +?xKS󤔒~Ii;0h/U.V uҙRO@qB$I"BX55p~&37`huno^(#A&j:Dۏp6 }fOӊ\Wwj*z|P8Z#rY^QpWytؿO>M *վE^w |aF +bKyf]1=v.?!#w)Z%ы :]ON ^q~S{(k9AU3%L.zB*q :zE\af~&9S"ͷ1 uXR5[xP0Bۙs.,` 0=r0 +Џ>)BE.O]/윻,-.mH 6 +f(?PCzKēx=JCZ( q@Ɛ|] +endstream endobj 4632 0 obj<> endobj 4633 0 obj<> endobj 4634 0 obj<> endobj 4635 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4636 0 obj<>stream +p!D8ъVtw+ȵ)<$r~msۅ쩧pA]Ι8a5~RfgCw.ĂB1]iV3l!lZr-Cʚ)yYtLbN*MZe l8ZΨTg/g?= +0&ARϦj9 .Gγ\f8eiF};:xurG]3%Ǿ ہ ŵZD*1ĻR1An\r>4oRh؞@ :A'e89@%y`v [^3AO`*1TV4|&Jx-F~קKN1@KDkH}Ji+(pSzgQkOH(T=TOM_h.dr3-[ TߞT-k'/'TԞmE9Ti8L0azmr>ETw(!K3R082bB H` +qO[H$BBL*T8p>d> endobj 4638 0 obj<> endobj 4639 0 obj<> endobj 4640 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4641 0 obj<>stream +[mu؈v +w \S==|Ӌ>i%b*uc,T‘k@Uo& @M}tXe,qVm7>ܩoHkM *qRgcUo6TD Lоm62 GI^ƺ?~HնSjlዛ>\cHy,yY EIɓ` *D 4FNU 7Z$< ;?WS_ P}1C?zJ4EL7y|eۿ^ >3S2JedtsG2N4F Y.ּe&~ب^PVn$H}nT!; UPxVm}ZVjZ}QuGi /PzLCLA4Jg{OV!UBU̿e/' +0EI]x5MOɞDA@"EDZ|RQ[ TuK +xx,ptu3N=Sә ZGʊ;+5Rc~G?8ЇM;}@p񕧰ykY&?LW": v]JSw4)J7fQh#=:yw dr3Tf#0}y}LT~ˌ7z87*:LwuԄ+d*DlXT$t4GkHG;ψj F`&ٔQo K`!p}|w(xC_ָշƪ/1@p]6́AI\=&UMՓ="Fe͵׎ k#%'܄G۹ 1WVCbgas\*0 `/Ldh~bD% /}n}9eptYwy#9!BV9)`^S׸ {L@J4$A%)?agW4騠+G˜/&! xLdYR! pph*sn[r1es:O/ ʝn-g{I ǾvvG E|E :Gh̡P1z[\>s-C@|ԥ_"a؛g{Gp|G|UCk2ՇUJd//f +endstream endobj 4642 0 obj<> endobj 4643 0 obj<> endobj 4644 0 obj<> endobj 4645 0 obj<> endobj 4646 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4647 0 obj<>stream +|ߜzue%</EmG#Kk(ٙ 1Ec 迵UVFkGP7(+S#4I2`1AR̤XD彆ۂ"1 -]a4to=j%mxQ +D-;A{mqE* C!yE}F䱵x8h5+$$nƤj@O k:¯[M#mD-*DBK7pXFJn4J=Iwv]$T@lzm0~(w:}`c:lo4<%ѨZϓD 9//8{>A* m%Po>m>[u AѹAjPT`3s[:;ݸz%[vu)1ή+>N2iko^5ed%`71ǕhJ.g7yo<IִSR@CI9mf씬,9Ut>O(M!ʧ!j<~SpÌjEV4}gI=K+q"jNZB4h:bLL zi 楇.q,9CKcAYn;|Ra |)F˯P_ +t}u o+.]^tFχk=~Ncf",{ɋj|'W& +;Ҳyw_.NZWyXƪ3>: +endstream endobj 4648 0 obj<> endobj 4649 0 obj<> endobj 4650 0 obj<> endobj 4651 0 obj<> endobj 4652 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4653 0 obj<>stream +b~%Hn̯"q£hV{a9+󣓟b&ƏLkRg9?x/ y&uzlڱK`$|pxX;l~1Qxbւ=ҮsalUz3!+,’&fn+;嶉PrɅ3uF}.ZyC=e, 9.]N[ 0&D_G3^Ga8M+%?!5s>ƷNKj6}U5sB 87]%iKhW*^0!o2YUN>yΙ'!:֕s찍myp歯s@UT+k&C]AXYM/|[$(m1 $ es7F>LhCQ 㽜?e`*xe֠h.2nS%n loCHмSbjZM?ŨD֟֩Art}FT|sWDNdlQe$oӊ#{j^hor1U[27w}*]VQV>Jj6K' LsMR) Z֚CL`h+ ]bMNSriSEq 1X>v./ pB0SKmȻ2d|%KsPϖh;D8@k=z~ԱomA@UU_ڸٸh-Mu`3j_*Vz(͈h 12VOuyg9wY5%3ʗrkDCzNVT|RZ qu` e>¤yN``rjs뫚hj?O5'9 P+[A:,#P(aݜ,tЎU]$xL= 6ZN U|tC4 +@j[4W}&y 6[U2MŲZ \v,1~s^4]-WAgπ9} +endstream endobj 4654 0 obj<> endobj 4655 0 obj<> endobj 4656 0 obj<> endobj 4657 0 obj<> endobj 4658 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4659 0 obj<>stream +}{pu7]*07$U-[ՁW#…?6^Nsx>>ja0a'g? N>%p859>s^Q S?)@Jzf] +3Zㆫ q&^Bܤvc4^}ߧιbCy+RRQ=?':9Bk0O C9X6%竩VCmEbUC舉tG 0`vP;g&Pgb2"nd*vi5yr45ˌ7] 9g=wUc@]qjkꙣ˞\)L5=O@pFcfWD|Nj +tUwQ\JWrMX`bbf7SD\,|GI'ZIKOMui>7R1Reuacn+\!:}7u]Ln-AC)ϥuL{6]R4~NSި+ӠV1Z&QTT3?oGj+k07E)\&m*t ōgLf3K -KږqtqvY{~(zFt4&%?:DC_Iuj6C{o 3Yb|cd ef I/O;ݙ^hڊS2BYEcΡ5k]QhѠz~LtDb `e UKcm;s< μ4F򾩜zf ӗX=?QɟZ΢=I!D=4J(w&cy> endobj 4661 0 obj<> endobj 4662 0 obj<> endobj 4663 0 obj<> endobj 4664 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4665 0 obj<>stream +[k[p=w:^;ځ+4@,EEFOEOٶ2?sOUoY=&W]}>bWuHXR`iv+m(JjS4=[m y*BQc5\_:O U:S EL0< + ϞVM-LPfjvyQ6 dAa[mHAVU)_3JΩGB)x7f\!QA-h5ܚnVh&-sSJ{\q|H'bMڿ.lqo?Na(`͓"_䏽br/o6{QG +-*.6܍U'`!`G>ÚǂxdVWi 8aoBE,,T@tji|0?'\S}\Μ:%)۟O ! }O2˻֤]X-*ENʖ\Qrˆ`(pM~aIfͥ\ Ѣ:r/-pX^aI 3ފ y8s&Jo(Ar8Z+M:s5aYa+ds  Z\ Ҿ` +a[k|Ń ˏǷ+*ԥk)ᔑA3tn_8I5A+g _C>ŕ5_%޳'AG_;0xpdj"&*9o)L052Ng(Òo]{餴緌7NM.hM`ĕӡ\T +endstream endobj 4666 0 obj<> endobj 4667 0 obj<> endobj 4668 0 obj<> endobj 4669 0 obj<> endobj 4670 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4671 0 obj<>stream + ?Q}IkaBls%ëuoi$krxg޵叁q䰼y^폳|+ZE g' TGTTmtD q_[Ṏ^ZuYWkx fJw/þa:I!_c?)iEOSz_a~Z +5DS`r<T*-&v +~;v6 H2(BW" pr%,﬏/JfEZ` ě'(EshxybG-ko6L S%}GW:M.oTǧ'mqR4'S{1wu(F2Tm0`Uy*_ɶv3izoڦtB3}l5AϚz@'Cˮ2Me$N_V^$^|n a8}35Y,3c×W,U>UF|<O_kvvvGE 3s,a<0A}?k$ U#EyRC%T& >Y M`@u)9zDLoE}KP|z gr^*a}WӡǗy:.N[`FMj-*sr=m""Mg2f~/Cbrbq{G~oʿm4ѭ.M^Q vq*z1NKdwGOͪ;RD+VA-Y#.N]UB'F Ȍ*+x0*,UN0A7n;l#0]lh$;Gˈ#t<=kt쓉Ex{닽nנ)tH^ |An&ojE+0CPZSJ9)+ +) lqȡ4$I +endstream endobj 4672 0 obj<> endobj 4673 0 obj<> endobj 4674 0 obj<> endobj 4675 0 obj<> endobj 4676 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4677 0 obj<>stream +|ˆ 3Kj"\ ~JySlbYJܬF) ?AnJMDӮL$IPπɱdKߜ6[%EPAau: SI4d GVB4U(ln?"j +&@h쵱j#Uӯɱ)Qt`Ɇ@-<̤ fMC["R')^(bfP ?bʧxi sVILtpKy_~,W;4~ F!iBS[ )П˷iUF$EO@;J,󎼿=kt UNkhY}.LN'%/3#{oᥙ|*D*3Da +0u&G"w%Ab' S`Z("AMxZtOҲ'8 !68v}tAlû#h =i }v\;4̬CgHս\wf!=qy[2|Tlc]*#'5İ!\bUZ^t( p뇙EO}a|Pfk%×l"!.qydp~m9A[`cN̄رO|AK^oRH/[!A x)'~\Hi`m+|~akCܭp0{e鬶esزa߷wڜhe5X<zjɎV#Mp*6{#Б_NQgqg?Q+F?C.)%YjxRwO32B KTBуO3s(Uw/̘&1 +endstream endobj 4678 0 obj<> endobj 4679 0 obj<> endobj 4680 0 obj<> endobj 4681 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4682 0 obj<>stream +t3@qF`}%g8vxJ$Gj\WN4cR^Fuk*A&Si.~HBKfrO/5|iǾ0 LM0fUPVc#KBMR5t%W ۶\R#ȌgKaO[N/J UD/\>S NtUyGQ_OpK=ͥ;Ho, ĪN]T~km%w| GЦ QᦧsFF&i5H$u7Ao@qIz-擌j@5&׉VڟXjCh W҄ +_u_׹HWγXrdK]+|ylSޅ'|(t*o凐 q^v;`TN %\fRm~:W0=H;|G޶'_Z=3cjMN` WL2zt?(Tצbaz618vQ%Z̧4Y2X4wnNvpnMᡫO 뫣tߐ,Ѻĥ b4#A૊,'@m1+]WbVU,;IaOXh1n&16s_˧> endobj 4684 0 obj<> endobj 4685 0 obj<> endobj 4686 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4687 0 obj<>stream +X.P> +[cF!Y/rɇU gDk7 btTZᦦK3gI q{j=iůנ YqOlfm$! ( L2G;r eО\1- +ͬ6gp&U?uD9V1ru5OX5?Nv#hL^`Lŗ=FA-@1DÄq"PbNÅAp"BeIײҨr(scq;Y^z.6OwR@k$>UkZ$I9Qp bstGRpaqoٍ,|Zs7 +ϻQwS=k:%}=|R|8 =ajVgN -5h2/\-#w#/vMG{9^M +E fQb̡Hg+-;&XScܺcHSsuiIŰeѓ~Q7Y ʭ;ys'|Z'K2/vB\gI-?pS8o_N/ƈ̮cde&_Sf/ "0@ɡ)XnTG}(HYIЮcDXjCftK&̛CGF1M]u +endstream endobj 4688 0 obj<> endobj 4689 0 obj<> endobj 4690 0 obj<> endobj 4691 0 obj<> endobj 4692 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4693 0 obj<>stream +~ I_&3U# ֓#jTԞ$]RsM[ڑOj273o~# _%q3'K͓aKsx*hV⃮mQ1aݬpt؟:*>)rh9/' ՙA*C +|?R[ +Wy%3s[j?/)X9)(FY\~mF}rЯt .-ƽ 1p8Ā-`L m:V}7 J1jd0І՘r2q,vD~oS+nEWZ>ku6V;cH%$i8=}o ]UT\*D_]UmХ<.D5yQMzliR@^h^WddI7Ƅ2,`qDm-Mիv/xQH>G7fAy6@+AK5bPqYǰ]$2jʎM vc|8{ g#:,1ڊ8.uKW^)r@L%N*uoFχI)K̄ج + W~eܼd,+Yh̜9A\Н[T{򝀵R8q`)K'qPіF*| p2ނTdMUAthe19лm|& yH$wha.FD +8Zk$pL(elFUH{a90jR>m* Fhfq /?yi(XcL>]Vm@N+/^*&;(+Lf9 뫌IVJwR*4bz͕t.OY$lRwim@ =Gt8C@ACz̭b 1Z^ ʼɄAL{,GPqY;yySt9ѿ\BIeM> endobj 4695 0 obj<> endobj 4696 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4697 0 obj<>stream +P] VjJj ]l ZS `0.}'>TDmw>`mdu!{^9fñV)2Yh3CNҕdrbcs7O$#Z ~n/ 4?gޞ.ryk Qdd\h/A@7~ؙ]<.F`\V3V6'i +&s,ن'QAa <%5 D/\ + _| +.dA#Ο=X<.uaNDTKFN X4bZEDO1# +ThnKP+=μAfdV|c} . ](߸~͏Tw *:5ma~`m8ݷ1D=@,Vjs1#}pvs -4D&i, +endstream endobj 4698 0 obj<> endobj 4699 0 obj<> endobj 4700 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4701 0 obj<>stream +я3:uBW%g l͔Hd3?P,Ǐ&R VƭDq(VC. #mze{o= <\$fVDjUb ¼v DĨeR?Q&:i;{ܭzIOa99P]ao1Gq%KyOIRE"hL/مD nf$m~G#q'SUM +l)m߬_OpݘbC4N]\K-Da +x֛jE{^2nJکo]eMzzNn_zPzDփ* Xʄx5H +՝_ ~c\X݀L-4O8 ӳ1%%{HYr[! +_ud[e5Pق ڼ]f9vo+3O1UH;}Ht`b \“$W:6h +vVӔVl‹?=שZ*辇@ +#FG~ElB UJ2oJ2X o#YSi<-I'C|Z`OEJdZʦzxG:.k$utHywusePE"(MLE&lWZTU̕冤MLI-]yʻݝaqPQEORbE7l7J23bj`lueSO.Ja9zh~=X9ig_ `P~Q"Q= @^*9.ML"Ԃn+V9-޶$]`916쒰A5gk(G:Z]tne܋]kA-g*d,-u%VtpPFf\.p@\ATMflYPDopkR`h¶0B@AY MWkhxh<*}o:e%u^|`oX6F,L\?dT$iپzH=1ER _}n6 "z3[`'IR l(@# TH-Y:@%sHK݄Ju(lQV/~̙]J){X+V?vKܐ]f6eXnR dJiPLt0Z`gh%_ox =e(]d*cP#7@2h6Dg- 5 ZELM~tJpdq)+I%ܯe^hd(LjRO +endstream endobj 4702 0 obj<> endobj 4703 0 obj<> endobj 4704 0 obj<> endobj 4705 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4706 0 obj<>stream +E,9Z[u}x祈M)5Ćtx3x)ZSA)JF6US-=s@i{I%l{rA,I\pQLszt=o3lO%6Ԡi,٫1U@4rՇ(EA$*캥f>N}E;lN3hQٍ2}m͔E{,p4'>UTx,%A12z^!ahAiEN⣊7KԻkt={14uCevMhذ=gAXGcHІ8G`=TmzX-1.GqG:IrNOI` 5Ҕ6ĖzD^3?UNȤ5J_{]̄+:U(ԓfz!Z LQ4dե.So۔zq&Ԉ " g{dբțՂ)!_M~"d` 30xS[CA&rȨTysMIx.:(iס +-֙ S]TVdڪH&h9y G|] W !zF=[YSK'qZT{ۢn|^+wW"q֣:˃hy`Wfa^(pd x9%r'FЫTatM,ygYBi-T+gQ4 +endstream endobj 4707 0 obj<> endobj 4708 0 obj<> endobj 4709 0 obj<> endobj 4710 0 obj<> endobj 4711 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4712 0 obj<>stream +*'/{ +v[jXt-& $Yz{@1ߛAvO߶RnOٝүjJTT{ü[C>Hm۟&,^x_axX + xb۵Sd0 uiӎrRٯDIhNix*-]dl{Ch6NM_;QUۭrJeWBZǯ71Ȯģ8MƽW pkFR7e>R]%ߋO61FPl{E t]$FMq~rAqzVxo !J0"tZuںD/ӫC)s[ϲ؛_}~fYȼK%dF(vP=Xw$ +O3%3&Ņ婼ffF٦%eIAFd i * +zuCmq<t["eX0I>E ,e:qj"5QmJOg]s%naR83[Ov$œS. d%D( M ]J# Zv\'l ~$ `? 7Vv7尯 E.Ozzg\(B7{;t N'qN]9% +<azQ`PZL2gdFs滯yE7fnn f`/F +JŅUX<^P%>ѵ%Wk k8IW?Ϯ՟JkLOg3̛ПهJIEk[zh5GDèoڟcׁ2:$l+5Daiq\"òJĬ}'cj.\עoZY{>p#CM7Li> +{.2a.*{MGm 4t`'"`HQTeK9p2i.~r'8!G T"_) *Tw' *$r)$@%.v#JD _S?Tׇ5ݨ n&>WI&nܢNjݽ " ɰZ6>,'_ɇ:#F"_"`2ILu$z9hĻXR[|]O AA|~fi/DļZ~pbC|M5!7 ƴak۾v_2zb?jݔGt\M#\g|зjm+lBTNد=yzzq]Pb-t +(1A:8efJy!Wx-ď'6R}KgYWDGp;0?6u)9i> > .N60({A]E Dw+[^[gಈ2 Ȅ'/H܇o &[чZ O7WD>&ڨ pkFzJC@ +endstream endobj 4713 0 obj<> endobj 4714 0 obj<> endobj 4715 0 obj<> endobj 4716 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4717 0 obj<>stream +2 +탄@:{.noD,TNN[FI<1-Сjm8DffaNo>ަG +>_7އz{e\nn07CϺe!Jۣ/6#XSv2a'',v!",2MH16)92}Ű?/Q1zq( z}7U9D!=+66lfdsRSE:\> ޵%gb_u-'lk$iH8]ԅ{ADd)m*6#z]ED[?~XVK|-ōeٿۇA2F)B=9u'Uk]8-C8@,ymCEc=QS+P@ F(JQ<ϩc]U*F# +PD)a(|dSj$Y\mq&ō\߉I kbb?T +Ny5,[|lD{+n+qie͎?Wuy!58F yPJ~iA 1W ZOTo G-?*X>.Ԭ}eKC#֣K6,&'UP[[JZ FBjάVR*H)_tu؞€8KsedGԏSfF03V ZMnw2O 8)r s0sY Yˁʍ ?5cЈSLAGf-vlf) FHRrp9cFAVg~ Mv`n͇%Cn!Ko0EAEhކ +endstream endobj 4718 0 obj<> endobj 4719 0 obj<> endobj 4720 0 obj<> endobj 4721 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4722 0 obj<>stream +"k1 fw Bomeğ"-Sz`_,A@q@H+zҲ奓[}\ MZRNm:}O);4ʋ?u|OMc4k#b1 +ݺnȮopחt7^L +ΥӀoz*1S}\9M UzWvAҪ~){"\9SD%(lV M]֪AG)oLHu!ee-Q$(3l;D [yAVZ8 +4E[ܖ]RH\CRi5^ƫB>$X@I034j҄7v +"˔%-*}*O&Bb'"]Bš+qB}aПT.b]avGFa ,R +V.MaintXܼQ*2,%iYkˇxYB+ +K8)?%G vF2Vtbg$VJ<+^ ұB4ڟYU`ʖ^“2ڠc4e'I SL\AalL~Ƣbs{7vqV`n{FwI#C- *5sS5@`H\8ܓjL߂}3a mDyΕgwg$ACr+Kv.` #F~Pĺ +(SS +endstream endobj 4723 0 obj<> endobj 4724 0 obj<> endobj 4725 0 obj<> endobj 4726 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4727 0 obj<>stream +c+ .,-& ҫDE`:^nV^7 [~ni#ms YCXT ZqĞN).$nEΞZ ljECF +;<߅xOXv*.7/A'OP0ҊM(JPS@[܋~x!>A)#4_*z1؜ yfQ`Z9S#4 N"5:y7co|HjaKkdtR +HOz1"c+]{ּ6IDrW"Ij9xH&2GV1s-S uf)=II;ZЯ.>EO)5_ˬ 0J.SPog +idO }lq2gK06dr-Mu6? A!Q")D2΍8별Dt7i +X)@+|}#a;6S#MdnĹ3@0[-f!4Hb"2}=s},rN\ u2~qsYLk X$8 +endstream endobj 4728 0 obj<> endobj 4729 0 obj<> endobj 4730 0 obj<> endobj 4731 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4732 0 obj<>stream +FH%AGg-xw$v_ܡDeetgHicx}uܞxxMZHF[|M`gSJH=k'<翌=w[>Г GOeɇȪ4t\Kx7K!ΛIC#"l%j+gZL># R/Zd턅cV^Y K݉W;`ЫgL:xJ-MDZqEV,\/b{fzYvDC1gx4"S5{x˘@sU&"~ܽXpy{:Q]0 V?q|o+NfSΑ܃5;DZu-^^ڏ̄ joX3L8Ki܎'$iim0˜όh+U'3\Z E-:9 ]X<\G1X;9L, #qހ#o #,,%DѢ/1CR\ypa@0ƑV{FE j۩NG*fv4#|x|w 9 ΂Ej֡JC$,Z'A>L +\^ЀUuB"gAI0d!LKN/$Eٌ vSKi +SݲjC,6/ q<'94x +endstream endobj 4733 0 obj<> endobj 4734 0 obj<> endobj 4735 0 obj<> endobj 4736 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4737 0 obj<>stream +`F+RjBxGŒXZ]?"%Ra2?Ư>} X (`>mSyE4pAfqƠ1WF\UuNp.i[]^|Z\1 +aj./,nv]&>H>PVs p4QȜJ!ߟ%3sBÔvrW+^WbK)QzGb(RJ򇣙eJe"57nS.=eL(b65b6N +ݩ.9qb$je^@ְXlL0x3Q%l(;"d݉ʬ k=*Y,7^|+b3 7ذ): 0nϠF|/M3 +^@Q /ANh0dhE(dۏեp'-(9_X{k=7oF@oҼP:(I&k:NQ(2ݩ͗P_xH:~VOVnyy2QWzf o6mXbY^ *J43˗Z>|&M>{P5_b0R8FI)CtSZ&5}(8BYvj'5aC,gI(UlU =ݶ\e7C EIڒl>)̙K~z>'9K)g\qލF13O6FpHV+j${\.?:p7kX<^mە?w4j|`C<@Y, AbR[zߜf[3/"p@`Q-='hn}hevLj܄ +*SKN}( +kȕtϡHRZ<b .{ݽq^fj=pᭋf/A9F"N&@OHVB +endstream endobj 4738 0 obj<> endobj 4739 0 obj<> endobj 4740 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4741 0 obj<>stream +lW]N} ~wv^LɉSעĖi]YnA„op"9#OZ1]ͭԌR,V-?}JL"F"ϗb)esP?$n( '?BZ̙cOp0Pv3!}3_E 1ӑO2<ä嗀Kk5Ŕ`"o܀FVgK"`K1~j& Vè8~ݞ5wI2jHh{`d XY. Y=?@ ٿO$\3XS^(?ݟ=sɹ֜ʻ %8'dwGf껳pK75lҠ%]y#kdbr@Y hbIXAlWm8_VFH,>]͋Z,PSb՟&}ڌ@҇e8u^yg;T۱ +Z +7 Chbh=sU&o W EZy2[|K[BM^1e~Ee 6BGp^pbG^W=Br7lʴN5n9?<$+ ^+Ťks[,w~K1J')1%Ӈ[3Չ44'`_gO><<f[jDaU4D z`U )1eXmT dSgTg!-䢃S6guؒ xS@-1_ nO7pO h . HHľ ,fBO+43bg=r9:U<@m;oN;bFaM!fВ#!𵩞ro6ҋÿc ʓ (ւTaW vbnI<~;Ftz<22FuJUv(WpX48|uY7xꃤ}L$W]@Iy 4y'6U +ˇDoO\ %Fj|uT1 +\Q5$pm +endstream endobj 4742 0 obj<> endobj 4743 0 obj<> endobj 4744 0 obj<> endobj 4745 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4746 0 obj<>stream +ɇ汦]4D>}BOjJ!I*@R˝lxqVM"F ~V~M-s1Z +NuJ?O*9a]v2@'xv"k;~FFޣP`3~ceE EZd>y;9G:Ż**qGĦ3bNx}R qwQ.TaMK\36k1d ,?:حM ^sڄUu"O03_ ~e4 u۳yBߐ|L `C xi: )09LȓP0{R}gQ9 )pMDBvFشn%ܔhK%+[_:&1آhEB׆-8SfQ{)*7C.hš_ƨ{XV;ٵCj?!Y;Q.ZѠrуcMRQn;kUfR?שݻBop>گ^VVWl•ueZ4G@R iROO/KAQ0mFLjY+ VeM7v?{c+.,hcVL_I+2*!6f}?}ϾTy?o%H?<ur/3F?'] qUY=`1;#~{{cҕẙ`]XUJ?l+Aň3\蔶ͮ ghrb@ +LoMw!kuљO=}LL1)y 8B㊢8BZoXHp\ p[v7)H fŅB| +endstream endobj 4747 0 obj<> endobj 4748 0 obj<> endobj 4749 0 obj<> endobj 4750 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4751 0 obj<>stream +DWY: Z$xϴޔMj{-Ӌ WsNemK9h7M r#}'x"\ٗ1B-(~%O!(/]^%/k_h9 +(7CZ#oKǂckSMmBKl ц {BJW /b_Jg)fx4.~0Zi1{E8x}nƽ,㳠z?DvG^OO?)O'$(&I%bc=FW-D@` :?n5o<2΂-AĆsO{NKHGYQֹ %4@AT^ŲkKHBO7t1*yW;~s".ff|>vdI1kZ%Fns6Vw"Йf> {8Ts2eE!;PY#@$ϣaf~[T 4&dl:]P܉o:I:UQzY<8p(-Z˨IڷDSܨyJ6/j +JrYC ϚgM4ӟ"tAbZ +&1bF4ӤX%EE2{&T/\YX·fu_[^Jr.b|xscU +endstream endobj 4752 0 obj<> endobj 4753 0 obj<> endobj 4754 0 obj<> endobj 4755 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4756 0 obj<>stream +Ŧ=A 3?aWls]UߊBSf^ ʏG:"AT^QU%*">ϛاyU.*#"o)au漱܍M8;%QH8D@Qu> hADĔjmXҩHۀԒX /}cO>G|"t/SA\O)/l9$㜕C^w#& N*:|n!; b=5jŷNKԂ@&QyɦƔalLUYca.D)o8HgNdS|4*Yr _vNFiבE.L,B?LOx\GCkTƘ-%yDW<2ܨqQ}X;;S͉c=QɷyF#򺛏?é9@FӮE_~ȹ>9O: *603p5097㉛U>/en3߹ЩH@]mbt] 8jR8A#/kKV'+92:ve3u;/U.)b & Ճ~Ka@\Aެ ;[?|<.}uT#R x{hpr BOەQڙ;[ᅔ!Ll?X^%"ZGJc]kNr"dRzPERffo]x[OpX*q rJLB[ÐUnZ?;'Ey`A՘zvRWL|%qzEpkd]b 'q?Y0V0/ㅳXKCJ҄ #_PMzcy$ +endstream endobj 4757 0 obj<> endobj 4758 0 obj<> endobj 4759 0 obj<> endobj 4760 0 obj<> endobj 4761 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4762 0 obj<>stream ++Lƀ':4I{aXeĎdG@uыoi7hDZ.#gLX] 0>Y:t^=\Cq.(ٰmBьQ㪂o!h2nxLf[XkE0+(نx#.IҼ2Ϛ(W]SI, Uhq%dk2-aaS<t@2Z2LKr)ۃU)@0H +"'W7R 0ϸMg\Mxcy*?5;XeRynN;Y$g.,56:n. yzrSBlakp "X.3[S?3V$_Бt>9K݆wGs"{g$\IۓbNaƠNHph7מՏ6:xTɀ谻?3J K]7%5 tnѣO"@RԢ-D$>yN4 XtSӊ}uj,m /+ ^=pYo/_9!35\',sΆؑF$btC:ry4_\ao0i~-EvH91A>5񗎅ғ˭Cq;sa7La}^,.|펚QZCc!9j߱v©̳76:00‹|od jxbjN ,ߤc~yT` X#EKswnfap0_O0Wt2.g5OZ pAT%Lp\EE;44t=c/ D *׮~uLJUd[_Z+bt |vѵVvL<L(7>}^|wL}B$5y@\XMs$#qs +QBVW EC +endstream endobj 4763 0 obj<> endobj 4764 0 obj<> endobj 4765 0 obj<> endobj 4766 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4767 0 obj<>stream +82И3r@&;*m'",ܖU=bmōe}2,Jjdn?܆>:>@MQM~6m]BPU22}빭@]~+v(Т +/"]V]7Qr38;5?R):fwp JH'CVZѮ桲=ϧ<7}n~Cе's p͈6-0{~"Lhrqaua*19M ,m4dnJT.H=S;2Yq& +}k#=Pyg[#>:wp&C^4ϊv7% +z65U2+IȜKhqL>v|XZyV_VЩD>5nTȀ8-^M;ۅnkhpFTuخ 7(,^Kbi\Ad̗6{T!.8&=Ȧt_C}nX9zø$[3L#"a1zz7H~*7tÏr_g?g;p +fE&ڤ<Ε DIٖK&}r %vp"[վlC_{uO +&| @=xgZf 9 ";񺍾}k>ZBó* fzetlNJK*|?XJZBZc'8Nm!`G*k K#/jb^_ی3,5w4I#'q51S,l%Hj7}z`Q"(F~>RBq_RncCSgtva@Qk+y:X-B1%c*L:@ +endstream endobj 4768 0 obj<> endobj 4769 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4770 0 obj<>stream +t]-670ޣg{MyUOc̓%kCMxPIp6ԉSagǸU +QDL{\ӠJ '?1*OzS="훚i9 Q +E:C̲5 K(QMCޅq+\ +iUQ2(RF|l16(b3PBDA~MFIe?%yE `UwC:|DdOCя94$5)BcQG<(l+rl\COi,5m͸7("6KN=ثzK^oBҾքICOcThb-{%p"ݦTD-\"B_T\.>߄r+Pt RDB +endstream endobj 4771 0 obj<> endobj 4772 0 obj<> endobj 4773 0 obj<> endobj 4774 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4775 0 obj<>stream +|Ys>lE&OEQ7; Wr[F2*'|xALGҡ)xEMPHip7np//C%VmOy%jycml' į{?΃,K6ElAE~}Y4Gu;BSсD}@;/ %}x"ok hAV 3Wf&Z!cW4)y2%@τlfŅ8Ec<8=Gh \OmJW#ašX.p.)]tj24;-z!RG#X6{[bkF@P,Dd9K&o[v%6IԊd>{Lf _U޳G~W?7t5~NlU'MN+'ij1AEQlqQ +b~oaKSXv;靼+={/m!HVUk=1= h2M(3'[7XC]_d'27xݰ)&%Zs0^JZqVZ~Z]Ţ(@jiĎþG"P9a:!xw]j4{5#QY3Z࣍qތ, +>;|(kwՙJ493շ1&Y$2Lļ@[{ aٛ:IHI~=NN[GhMĢ+ݨӠn=p!-֑mЭ.Rhp-5aef-K%G"h) IBt.+Y:DN3IW&q寻 kM׎HqWT9`d+^*abT DF[翧`a Iߜўr+ f!Cƴ1_KUγE&%B`(IGEҐ~+c#Zt +AÒה|;iPm%}:rŪ +k;v6%7bm,j_왳[3NcDJRcohs8}di4d4QHcLmKH<<˳\NHyHH0A +endstream endobj 4776 0 obj<> endobj 4777 0 obj<> endobj 4778 0 obj<> endobj 4779 0 obj<> endobj 4780 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4781 0 obj<>stream +;%$j*ȯlAp@ԃ(>O vR~$dh'U +|q_#!JA;U` w>Fo5y(wdgKAۘB>U,ϯ>s[ +f݋n4@xl=).c,Ìd!qQ+Yz^Ӵp qOG_fk9eCn | Y"-(+.tWW^k??@5Pl'B<q/)iDNyesb:Nw!Eb2& A $Mk0l¢K9[z * HdԐ(G3?123GgH6@Y44~("D;5UcRc.FWY$&z - ֔2g^_.Y`'uds#g$h59Nr6g +⽣]' Nyf`[+o;)w՟Kg&HArLX0fmnرӛ^6䍽Ypw']JFo99*.Njs1 eo42Y5Br|85 F;w5c;J.&lX"SvxvFFVɊ,'.Ԯ n|[uĥj<2WqN-V=GRk۹<|[FQnq$+of%& +3̭eU:a Ź ~s>Bw6~׮Wdڰש$gXym%;:_"vP{h_S%Ffk6@(XGZ  OJBM +TF#HL̍tDJȣN1|%-fj _djg1gNjΧG|3oܙ*WҪ5jIº<+enLn)MBQX)\$#lO+@N7R:JH|֏i #` +endstream endobj 4782 0 obj<> endobj 4783 0 obj<> endobj 4784 0 obj<> endobj 4785 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4786 0 obj<>stream +ΖkBsMU^v3d/G#W$.*{ݏStK.Zf77^ dY 4R{kXK|kw_S9_gYn埧ڵ irg'WY}43bxai26>e5Eޘ +TIeJX:~ =k5+-!;}R# 4}8,"MoȻh +cEYR%gAuBX"iPckR"ڛ)xQ7=i`I]fHyJ+c_(-e+o{ +e SD_* My6T:0N-EK5'+o>#1eMC9H9;^B* cC} 5i[ڹqK=]/'5-uW G 7(*n&-(ޒbxSd B +XC1?&Lq4Ԍ^#>3Gxz gxw9oD/TB(ٟ]&)aՇ!\!/ԌP$KGHS{1} +JN5ԫRh[D7ea}wvSaJwb%O&Τx@_UL[=(#ca2/6l뽬#>,a,b\m^UW2?D~V y[o]3.JBJ^u?-s}!&@RlDc TW ų Sozx<Ͼtr@\n3x5W&5k1t,JӌʐMwp(zyulSNNc[/ + E[}sF_t૊87s83T*鞘n[nKaZ|ގ>"O&!qX'YqmqƳ|AM +endstream endobj 4787 0 obj<> endobj 4788 0 obj<> endobj 4789 0 obj<> endobj 4790 0 obj<> endobj 4791 0 obj<> endobj 4792 0 obj<> endobj 4793 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4794 0 obj<>stream +h{HGf>Yҥǀ^p,3k-@v, &HwSC#0tFeAB0kibo9-Vx"H͋g5FP5X{0#ImykSQD~<ǍzC 03|aC}gj+"_ y1jޏ`ub֎FcvewgY :@g7kWH '[;7@,W ]s qA:&q _<\[ Ee=-ȓ Inú{Ph9i5@,N,@3p?};_" +lƨ}{ 8qcv\"B2ColZrqMd97iogU > b`xw*d71-JT3My72vbJ$rH +aT2{\xOP f:הih-yAs,j }́N_o;qC巻eV ܋03 +#0CǞ[(I4 kṵJrMfB>Y-,bݱT&)~[k`NٛԐC֞ Ufh*ؖ/GyH5zg@QČBF"P1 ..-ݾj|o# xM+5`Wy*z#iSG}<臝ے'( ++\<Vma1f9] Zjy> endobj 4796 0 obj<> endobj 4797 0 obj<> endobj 4798 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4799 0 obj<>stream +NDgOMH,6Nǥ=v:' +]?l[CY1ue`ؕBk}l5|Ou/٫"PpSKKQh~b7q ZܘD=gD>WT/C9ѿx@ /]: MMSF1 {m+8@#A!1HzAjiΚgWV5.<NTːCV=M37IQH2V[*&^ktI"q++W35͸3@I,<^@طUJ2JTC&4.5Vq'gqdrt2d,OGҮz+|`xprYDvI\FN薒0e/`V(y+9 0,OwHQȎ[dRv֤\"Yu2U&|(q"B3q&9mHEwyEn-%'v5: +j?<:dKoP(yxkgfBϕa:' ۋMkmBWORgc'.PFJioDVo?X\\)А2N5E'1Z7.p X +k]aHchdɈ-7k +endstream endobj 4800 0 obj<> endobj 4801 0 obj<> endobj 4802 0 obj<> endobj 4803 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4804 0 obj<>stream +mQ"FPU23_N 777՛SyW1kz13 G߁8JKAի"L%܄ Ʀπ? x6] u#xNЂ/fwyoRռ8;7g꫄qIcͬȞ 6p +endstream endobj 4805 0 obj<> endobj 4806 0 obj<> endobj 4807 0 obj<> endobj 4808 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4809 0 obj<>stream +_5Įؖ_ +' +mcQ&"2n:z=:1f~$"X=Ɉ[KDhzHhkiF^\8fb͌RoT(y7̈́xD_Md;U 0(t[1z-AQi.U,#0F\|{?@UYX+7hÈY-?{6З^1یhPX*uXBu:ҙ8]8]c~eqc2Zθ(\1dfX`:m,ybVL |҉&6Uݨgt1Diq47L$ +L[C5sA V!ɂOVSC.jͱ8ba2[* NBQ%Bǫ8EL1*'? IA/X#3gh-%[̔OoU@5kf-XO|"gkMiimFE5nyR_UM@ %] q-%/_tuj};.lNgBUxK"SK>m2z3 +endstream endobj 4810 0 obj<> endobj 4811 0 obj<> endobj 4812 0 obj<> endobj 4813 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4814 0 obj<>stream +/;{++y{%v:;m2gC&Tj@`|fs:P?_u_'߆l(E܁$:Iie '?ҝNJ{nK4a +ùr9 O 1O!:CEbބcߡE8V1҃]WqwO(bϽؠa/ +r lJhxTp@Rc +gsؿLFr~C!Z| +@ +ݻ}7-æ󝂻- tbPf˒s gLaYb{?}pPg5TLdNpƒG X>1,{*)!}ѺCXA5dx6[+#.)V j|Lppf):CD+{kH}V Irbӈ0FEPTM !6@]~c¦텑jb0pzOslnej$BJY~)GӨL5w@s);(2 /ilQ:2`h8 +*ܮYI#=rs& 2Co2}=wM*W˞+̓2떃eVY/Lv!xZJ#"75BXo%Rytinͯ q +dgjLoo侮N2{uSu*{fN[4敘#YDC49:D=+G >Úyp6k;y&W.ߜlSs6*ei0b` eV۶oC +endstream endobj 4815 0 obj<> endobj 4816 0 obj<> endobj 4817 0 obj<> endobj 4818 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4819 0 obj<>stream +pM kMGtu=xȅؔ>֮t +jF >hrҧ;>hv~xM_KŌQrz7,UL\౻{Flgma|DDiDސ6X "%22ʉ̆͵r]dD)8aʐȜfHϐ2y +ivefgrxzz?N=ylJu"M=b dp43bfH)_wq㮙봆كC{Zbàԝ[Yi Q!RE7Ya L4 /F n}Z |::$W^4}KQӐK`k fg+ UNlN7?@v)i.[+)(Uiκ;}#=(KFi1"&܉/F4g8 ;x~anY릕Ab8$Ϝ&~|?i۱|Phǩ!iW1$X^"R ļ8gFZIJSW62~O$=෮pǏ9xQ~e.iķ1fZʜ~IܙW7'(/ΝFc&Bc `)y/s3Ի L9P\DGK6)eGlͮD~@iPSHߛ:0JAb3ɐ@k!duP5O2cŀ*N|WjSolkD@ID)2 +]]礳FdvIYT9rӠ$*T۳>Z@-91 ֟TfZsEsf􊑻x5]($G0cCK:ь> endobj 4821 0 obj<> endobj 4822 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4823 0 obj<>stream +puOI3h\K^Tb~|js*/̢HؙFǸ9,*8@G +;7 `Ym9{#+Xu|4{\{:Ԗx~M5x kҳZ0U`|eV46烲u$\KB{:ͭz/9PKcegڣu'˫$`liHe +YU>} D*f"7I묻VD /u7".ؤR +BDu2N.7Wxbx% Ym4/Y͂r/ ~ vqwfX>zQK1 +F5Xr̈lvs$ehyCUo0g Ѕ!$kt&zie3Ƕ),/LȦnë>p'%|]vQUOKڞ#8ʕEfIN1)V$,mQ]ۦ0w +endstream endobj 4824 0 obj<> endobj 4825 0 obj<> endobj 4826 0 obj<> endobj 4827 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4828 0 obj<>stream +͖ԯ.t?LTRH;7v7x2s7'$!ef~q\5˸*BFBf{VUE zإ ^hJm튔 +ADVnGX3#ȕB/fwL9̤ZŞ fkJ d;;z&7^dK Rҝ}^tZ_W՗EY ,/ܟiL"&9& cjI\7F@wUO 'N Pq7#XN?A"cjY'4 iºDfLqIȧ)I6Eþ 2:};9)O WLoBnܞyI7 ,VS=72"YKpn@B:2{)نQXY݈;pG n^0k bi>]D7"yD*ukw\}RCpw F ,jpEWqTj0ʺq[!0=ԁĜ +Q 6Svmv<ؽ hkz#?mRՍ_ 7ą2b}tq 4S/EQSB+ W- ]TأUZD)HV + +8EMM}% Up>ۗ)3:d&VB",&$`* Ƥq*w?k\SMC]QfI^Oq~w2F7̥$?zˆ x`Y[ɑ ǍĄn-bR ňDd$45`,^z^p-q!)NtA> endobj 4830 0 obj<> endobj 4831 0 obj<> endobj 4832 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4833 0 obj<>stream +wS YGkI Lȃ>ulx2ذӸE+T%󏸏BְR9 BggZ*uMXTP-7}t(u_oEȱ67*/"z53 E5!}Ir3.[C.?@C8\.Ya[p؈X&3.'FKaH3AԖli-͓6fR*wIE0@"gUX&W5{TZveUoS4Gd!&5H9=[+-ϊ*9=1uI"\4j!GiGH`4EI^n^Fe#|EݵGt宥Ek1ImeJL 9uٳ"Hdt܉%H2̼ 9^dcl*}üi43yHgH~BIeGy- b俈:'c INsN(bUZIȹ d כ/p&iF[BNr-M aTF/֒t\\pώXmH6Nvϝ%мJ0byvHzqX#P)¡k {ŎSS;NtS4b4$!.+QJv3ZyqS0 +endstream endobj 4834 0 obj<> endobj 4835 0 obj<> endobj 4836 0 obj<> endobj 4837 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4838 0 obj<>stream +(*;>VKKE~/r^7+ : ($htoOc:ȮѮJF$=]S BEPa+xώϬڿP"gcyx|K@7 @mFԸQt|, }=g>찓MHppJPwm^eW,^$\Rod=ļ1OTRfK@6;7QSiNm :Y #4}e?X:pۊ?ǖ RD+7:n&?86 <^X$tS@xOS7l'=h|ͱb-L-4+$Nˆ_l "ZcXo@Dg/9b |JQMgODSC_K6S-RaĒTbUg_)صg.B0%2tǏ)Lk|Fj<$y@vtEyB>N=Wxz$eQ 0!aLWXY5xtҤ#;a?SAy'l{IXV"ywvKW-cy>[duPA"Ybo&Y:!;f @MeB][o v0$O +͏Pj'.wATErX7l/kQ>O'hmgvN}ؠxгkV/U;lgɃN,&Dn B1bQOU @QZ)ͧNZEu~ ZP1LY`O! ,-La.GtU +endstream endobj 4839 0 obj<> endobj 4840 0 obj<> endobj 4841 0 obj<> endobj 4842 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4843 0 obj<>stream + L~GU|C3{ZA CH![`гGE{KTEnѾ2XSs4DS +Y؅53-çSnaTRO}3e#o)^ȇC +WڠVK-,i"en)Zv^FS6c?Upj<]GidO]:8A"WM +d['ޓ.nP{EҡSj~S&Z̝Lp,\MlݣvX\W޹a=;=EB V{Bc~2 K&ɕevao-$` q5'ĩ/ErKFHNЍ\]X;.z*0h]B-0Qŀwsb*Mp{ɋ=d;wY#ݦJ ^'Ǯ+e ,+s jdP(dit+Ɔ|&/ +2t ~"/0g yYz4JB} h;cI +D}kBBZ}'l.@Qy[y,՝LUMdF%cs*x^LwCK9i˗meHR^VnEJ(\!XM+=3Ҷoކ,`qp&f4j:[J&2Em>z +Qkbal +J) +z(#۾xXk{įo9l;T?t99G.63(}Qa*^⦪CP=|UeU`*+|p}&)Ld*c 7=Z =;$>$NpbI!lɓhP ™Ul[ܲ0DPXք<> )x\}.pk3.\h@Q^p qowcW (уE +endstream endobj 4844 0 obj<> endobj 4845 0 obj<> endobj 4846 0 obj<> endobj 4847 0 obj<> endobj 4848 0 obj<> endobj 4849 0 obj<> endobj 4850 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4851 0 obj<>stream +ݨLE;X#"U]۳P4+hq B 'AYdr_2",RIX>!yKFePSXWg_U3#C֢EyEzAO%P22'?J}|ԏ䮬wS㖨cEGnj`!q%h|8T 9X >f2[F.&x,ݮ^1stvlK1~ԪMA +cu}ۆٗ|)FL[{j\~ض.61"qgeS^UOouQozKDM¯4/7kAyX,fd_:h&sˉ|WH\g)9إƑo|" _{nzA'Yr"ҪoE7r z}mwq?JM4sCϨI.R*Q`cru;gJҺn2͠I%ŨlV7:-8PZ#=Vw>Lo *P1t#Qko@[n:ղr6 ++Yތ]ҙTT*>B(ޑ013{>wuѺ#݀ǁL]P +w5XڜubG+l!9uHH|=[Tk1s(Q޺,GÅ$+(7byqK3+QMbe)h1?9vrmY-w  d)|FFɭ́ɻ# p%⩝ps+A 凉}ޞ]8IyrUTeq* + mA s6~-6LwDPX={;'ONq.ZNMH oSqּspMpqʶ݆TQ<ON}50msܜ{msFyJakEjG i9WD;2n\XhS/'PAԡ$|$\rM_Aٝv. ƣK)έ|=bK +endstream endobj 4852 0 obj<> endobj 4853 0 obj<> endobj 4854 0 obj<> endobj 4855 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4856 0 obj<>stream +~!r͸4;M h6,za5zqlmr֬!{W(lT>$Y,tH偱ߎVME#olޱpIgO1U ™ے\66Q9>+% 5U!+B( }=wŢ= FL3VJލCVùqߣ^IR4n~M"DUhiDC\i!)=5ſ"~r TRX{8ˀR kGl0KBcOH~|z>X={&S!fO<$ 1!{0M3"h;Z8*~~T8LwAwR_\]㢕}&B .5K`g6&[M!e`yuYSa^Jc>V|}9YSL"*?ނ~Da>v}\ͥWA 7TV}Q^C%ZHMTLf,`)R #+" NK`F}.TBvG7a)3/PHJ8͡5 dD=7:",ӅB"?~ѽ<f ?L-t4tRL 3^0J eG:ppu03B93{*/D@LO4T)w@ tN%)o7D_h^z,UdN&]V"AʫShjdX˜mfC'L& ^iɸ{AVPsb&mfA AE(@Bqf7TA6mIUttb˗=s(\".~ō!}ts85okIC+ W~za|<5KP$0)@]pk" uֲix +rqi; +<@Kg%) ZY=^DwX6@" U'ȯBw e}ݨg0A4 nmv\tgL0Ƚ+7}p YYqt?7/)]ߑJlyvbgP _H7 K:IK^~0a{'xi~*qEj8 ++=!rxV_YֱI{ +endstream endobj 4857 0 obj<> endobj 4858 0 obj<> endobj 4859 0 obj<> endobj 4860 0 obj<> endobj 4861 0 obj<> endobj 4862 0 obj<> endobj 4863 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4864 0 obj<>stream +$_ޜ +kM23:2FGg=c잓hc踶>f7Ƞ&Y.$/RD$+nee4V`Z;2(O_)]9̰K1XgZc(n N_.Ŷ83P<ߞGq|CcY +!?4A 85P$" ŖVS*Q(8D4S ʩGE!;.kHC2A|Hҭ`x}YƠvBd,آP6f)*o<L2 Xoz~|um*P1+;qi?tmg\mJv$3%v"LQKgwG.D&VO݉ŒIwᾝ]) +Gpoz/g1#L`9rխ2i~?gegz9҃St0K6=71Pkh+KֵqKwWwu>qQ QNc/, ]i%20s*K@?<. +&O'Zκvֲ3PE+P-<ְeZ|/jKĝtfu++"Hܮ11nyi3W,f:[FUP{o,T27r~"7(t +^JgcQl `0N +endstream endobj 4865 0 obj<> endobj 4866 0 obj<> endobj 4867 0 obj<> endobj 4868 0 obj<> endobj 4869 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4870 0 obj<>stream +*oOf1)ҔFO#bl!]*I<ېO:cjOߓQq-`}6s?C;}Q9ƋR4XY$M{(1X^7KS}<-'[7­A^RwoEb,z~0dcBsIb aLYZIv_j*/sb~##b kyMo6gh;z`;4.fF_fS V5qs|P| +endstream endobj 4871 0 obj<> endobj 4872 0 obj<> endobj 4873 0 obj<> endobj 4874 0 obj<> endobj 4875 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4876 0 obj<>stream +\yP7͢v b>ʎ,Yt"uj?kiL,ZOREYALeg zϡ ]= z +2-*5 )y2+%' Zjt :Zǖ:Zp/>$iƢGwj~c5LF*MkJ<~.V8&k/1Vpq\FUgE)Z+q=lS "90$SlS>!WhE1T%;qYI0GWIϚS9H̓Q>@-O9r +/N\i~|m=y( Wu +/EU,-@qd*migT <# ti #4FD+щlgdI~T-T3 ys<¢eqۘ|)@ +4;4x⌒ꦒIdZZ~!zr҃O#w\ݗ[f(L^DPXQͭC_KI +. -HtjfXvjr ^>7Q!; C3!O^:rl!7=OO>DXU2n kkif79$ł]U}q~a;zBxi4otxYθ p/oϒy1!֩8'K]o0|$ +hMB SOj2\UPj"8DlʏngQ4ܤH5{Fq|+-W1Iw}ئaJHf +=-3Q.^efL(#&BB&@n|ۄ +C; (oEW 8I{G:Z6O"5z"97$BKRB"]+ +s韑(l @-2?xn–KddVQOP +4 US b˸Mc: Bސ71 Cf(.rٿ5?ބ6@mOjbxJYnA‹ u( ĖZO4xb -S ɩ _ymc'i`hSI4SU)uO4 _^?Ov-[N{ ! + +endstream endobj 4877 0 obj<> endobj 4878 0 obj<> endobj 4879 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4880 0 obj<>stream +ieJo"u6Dx}Έr=}l,[YA$ln~``WX#\@vWl_D"2rSê.}:M?"{ԌCWZ7`OY4@biEBG@X"N6  hu{K;).>̐+DiHY5;n(&%f%S -x1H9_XGԥ`ΪgP]-H wοr40:uH7J_"'QrEǷ|I0u0_wW|7i8(eJ}fx.Mդ ,ϗG}&EʩEIH^i.y=*g=( Jrb +/.`8G2V9ˇ!ש.g#$ZGP:y +ILn_ϣ囯G{':=;!t beIݓ%*Q@Sa`Qla6e݅C(u8Y-${s䶴rJ޴-H8 ɹv3#kl\P+BR?UY Ve+cpI?.S=@DyD;8co$ jmLBv#XoxO¥P@JnsNFs,GV> endobj 4882 0 obj<> endobj 4883 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4884 0 obj<>stream +~HUK9"-Plb]q+_@\Q-oxAӣ2~2$ oZo%[%T݊Y/7ojs,B1u㋏S `:p(b NJ+wռqۂSƇ"~7P˳IG̗a͍*jM Q〃rSŐ]e"(s}Z +s%˷ev$viZRoTS9o؇Z1HGvaQ$N"RWd)vb 0 it7I Q#Q:7z.pJwR|֎@XVM +JFL,HfC*];hÆ@ y,8aA~'Y~N?W.'h>6'XISȷ`%tefHণkVp +"#U~T )c" ZSV0)D<ҷ?e33M < g*$I$H9}aEEhUBH +^GkK|`$ ;rɰSIIYYoE Bh{4{2e{m&ǰl;&jSi6~Dh܎Է f[5N><\is B]j_;J>sŗ8x@[~j˶ /vFژ\.YoVi;Rǎa~7:$Gs +Zb 2G\sK5ˢ2 >q_mraz'TMlTo*_>9!E-PX<x$+sTl*i&޿-W 9-xWoб#? +`կ[y "dQU9/6NoUIn4ͦ0u dױ)2aK>4`Z&& n)9'mgA7d )ec:){sTErٞ\ |>*ẸBuQw?]",[/8X-%=^6qESjv;4ysSΈs{HZLG_ Eoߠ +G +endstream endobj 4885 0 obj<> endobj 4886 0 obj<> endobj 4887 0 obj<> endobj 4888 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4889 0 obj<>stream +lחE;ʃg0+Y)%¶&/v36&˝ud/jr~jZiR P} S[8ȸWۧh-ܓQyQML`?vmk>req82OP8K#1aD{sDq_37<'.+!!De7\\0.{A7]4\4TLY 땶t. v;*zW^D" +CgmkcLuw`%acyDږ5Wu+/#8yZziT] X 3 +FF,DNc h1VCV,HeC|r$+( Xz|VdA\UtՓ0?YiK"4[*̘$Fs@ѥU*m

> endobj 4891 0 obj<> endobj 4892 0 obj<> endobj 4893 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4894 0 obj<>stream +}uV)o |Nh^[Xyslfgb?l*sٔ,D$FxM\jaU.g8g3.>G>X$ɵ`ϝeS4>M/i})`L1Bܬi# FN V aNG-6Lj+bPwkZa#%UN$D+t7.fĸ)U +? ZqAr kFz'Hy6W (o?nX.~6e~[){u,V|@nMeS19wSSЄJ`j+M9ɝvj~^:hTaMB.& .e &w[ IʴAj\"2OGUA)%IKa0k>2 p)#|Z;6bo7Zc@eԒ;P"ENP%<`(H ow㡪 $Vc^["d+GL6Lcm %PO RGӇ"W`X|ٸZPTŸ(OQNU[/%;\vQz . ]9 oh\2#D*҉F>Qq3;q;kO(XGi$ ԍq +O>^ฎx۹sXr@ wBZx\bWǴ,c&5k(Go"Ѧڄ#Z ļ1@Hika2K7 ]ϩ{IZz0 :CPb9J>ErioP9L>TQh]̹ZZMQW +^WT.:Nɱ1t+mYˏDEԟ:sr/@a{auJQt JNXTQ%mMB Ftnbii=z8fMJȸ õɅjp) ]zx']鑲*\dS`{<0U6#rߤI+gҶ&5Ck֑!.T!2v3ϒ`Q^ƨ I!ݮHÐKqPE +endstream endobj 4895 0 obj<> endobj 4896 0 obj<> endobj 4897 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4898 0 obj<>stream +°_Tfho0cֱrG=Gؽ;LQ&QK,gIBI!FGKiI1`Y| 6.(G#rc/j9s#n߹榁 no$"3l2e鿍Ki9ً[y2o5<%/*q)ܶ3UQtXq@n5g\e=g6~>&]z`iQ)e60 +7˗8X'RͰ| 2\S%fT_ҍP^Rw2 .q~ۍ\ ]FpvaU? +@L*dynes{@pnl(D /#%za(/DXYdvREh +Jb@Ll.OEjxGKDڡe%TOii*05:C o>[5/CE _/^Ri{V y% I{m?^Nk#V{^l]5'NTP>Us] =o1ϗH>ʑ]LC;ݥncu9b*g0zct! x9z511ڤ]a,NE~15I0 gҪX߷"(Rî!𥐾nnB^BG$ӕh!L( [oO#B +2%[S_Zns:)(ž}8{ <:ĔuE]Bx1omc_lGn8%Uϥ2=x||nû}ź7_rr0c&3wUenׅyᕕ#EÌЋ7Q҇ +(=(8Ac $bYO'xZSL}<"YRۻ0~YB9VIb:4yذ@s cw ɲcϼx erd8i4[A/ +vN*f?h}/*3kI`8E^е />GE5sFᘖVsmj2v[!+p:B +endstream endobj 4899 0 obj<> endobj 4900 0 obj<> endobj 4901 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4902 0 obj<>stream +";\DzoW#7TO܏EX2&gaTCz52\z AFt"prߑz-mYgn3g~Xџ[ҾɁ͸湏%J`,ۧbl);mT_~EPt"&|H"T8Z +IG䒞)9MsBX`H6UGBja]g]^Dd> " %UKCגl9A??:KPK)0MˈluʪA h^&ts nC"4](US$qSڝeIA۽blUT[9q8R9^1H& ZgiԮ +endstream endobj 4903 0 obj<> endobj 4904 0 obj<> endobj 4905 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4906 0 obj<>stream + . Lx +=XvE<Ǻ/|JÙM:ܸrq;YPmܙ2T$M|kכ>q#K<":ГH: n*}Vs0褌ô T$;-z]&8Q{9+M_}V$*>]"ѩff*1<|+1Cs!۱7I]9.c`d G'CtrN;2o(uL%  z{JecsU[Ekh)*:O:2Ntg1e*GJVJzy&1cl;wIK1<KnVޱSv:w3F8I(D&q41\_cLm3nRbgܐ{ .NDѯ\w㆜"Ql*sc˭y|.bw5mFb n5yqf3"k3"4o!CZ +"D]]:L~ +T~Ҳ4 #d{F$bbuf׈W/k뱇=˔된PVW* +endstream endobj 4907 0 obj<> endobj 4908 0 obj<> endobj 4909 0 obj<> endobj 4910 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4911 0 obj<>stream +dl[TfO7LЋA +]r4ߞemw3 ecj)υQ K>*Ri_!OYQboNR .qV]Pu5[pukϑ`jw K+ I.HAf=I˯eT9:ӼT:pG"A);ΊWgt)"SKQk#׉N=՟~Na VuEuۨ:'wzӞsY%GfL2~=qpت{glPԴ⦆ +Z\`LETq!Wrd6E1/%* )wZwW=t ȏעIeUnw!4 NE̦*̢2+ZB6gjEh;_lzkxP飌;LNfYL/kj(ﻣ-2LQ + @jiҦxeJG`·=o@m)E9T~ґZZO1k/j +endstream endobj 4912 0 obj<> endobj 4913 0 obj<> endobj 4914 0 obj<> endobj 4915 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4916 0 obj<>stream +!iQ(q %z R n Zt1X S4Ks54Y_ P r&JdUhLn9-Հ?/[mYE҅Q1"&LsTf]]n.8Pc_gT}*m}:ֲ[ +h *69-5G`%Ed*l +t%Q `;wn x!^(.TZHKM6.*Ox {O??¼; +'0xC "04M/{ɳ7 -߹oc18^Y.h}{%0gHq4o_}}u,yagv@Ǩ I>RG1yQgfП&Թ@[7px~8u5;vm?w‘+raY~JZ mfzM&O\Pl1ƨ=#FsI@' v[nTn{FXe}9η@@7(H Ȋ;#΂QkFCMEYp!}M3W];iʏރBE!Zh84"t!Ƥ]ze OYa:Mݺ :Y_{lSߓ͋VN.F$b\Ð5*Z<&Ima85l':&'lmǤ'N:9wZ +J0ȍ '>k+ Л5Bix +t[;s~ǒre +ө[O6bn:,>z6`|#Zq̋P#p ? JAnyha >饴>h"aX][Lhbyش6iwfQI%>\W7쇞#l\^P x4S`_gb[m?ViJH~1Tc wxeXkm8?Ve6<+jş# \)7R +h+2Mml0{4 b Қd6)BkEf3L<3!U)N!oM~jlp]빩dp51%J ;+1%(u#W'stIݩԂȫm!: ‧L+54ߚsY$PX'2ϲc׀D;av +endstream endobj 4917 0 obj<> endobj 4918 0 obj<> endobj 4919 0 obj<> endobj 4920 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4921 0 obj<>stream +mEu6Hj5< +لgu},td(H;DM[翾`d…ېp6`&ZáTy\SB$|wq‰߻E{|(y +EV2:U:bnBWF"39rhht i)ެb(ZzCu od#ZC##/(4[ +#1`-)ilS(ƔG]L_ms":0 h'`ŧc)WP}ohqUOQ &Iy\4%Fd܆Th3oZP0d6Bꟃz7sKg.ùL7m~q. (JoAvnF6IKV|5wss !hh5. DXu֠7LT 5=/gL\[v7h)YU "CdcxPb 鞾Kz̓%T`" j:%\w$6 N S}WWŢ猤;\3 y +KT\&]zorBt:k1JrUֆQC=#KK`8:hV3T8 7,\/@3yOx&&WD3E{ms )_)L^62gā䗥r$6$ @*sGDy° +endstream endobj 4922 0 obj<> endobj 4923 0 obj<> endobj 4924 0 obj<> endobj 4925 0 obj<> endobj 4926 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4927 0 obj<>stream +@K5+~ݻa@@92T|{ḴBs%Qm$WUnΩ0Z_#9UGIαc/;t}w<%7' 4KT5qm5փƙ(7~q/R!Y XBp[)1;3\ O >DhO:@ӉRYiX2|q޻gH{W#ū9apI!]y5(#zHet&^_o +%5Êً7j4^lr|n7/ِN$38uX;k\8 X9_ٟZ.Ml*Ԗ6t:HaV=h܉h#fb +X]/Zwso&Y To|H^6ƝQ0L߁mr tn?,^Smb e33})~zO@#_fIb_*XqLhm/!4:K+U"th 8_7.;0<ߜѱmU,* ?zn -[?S|&9x'ƯAe"!Qؿ"myt\i'zJ}&\WYbsjϬpxBZtm xM8m#u-OG#75:-]U0ȶ![wF 's\=9݁'> endobj 4929 0 obj<> endobj 4930 0 obj<> endobj 4931 0 obj<> endobj 4932 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4933 0 obj<>stream +Fcg./h+n3o*өxd7kjA2l(vVO5rx~MϲZ,L{zHqRڰ H頧^Xs7|ypeg_8Ͷ୍|yH7J &?ovi:SAgeRڅ<D&:YcL!粒a|m]<;uW`U@ѼsqQ kpl'83yB%\j?#UrR)BS; m)h"AE=5^C㒽ݖdjimlz@Px2_b˅[c=Iy.ZPAd;Knj9d k bP.Vh.퇣f"^=F͇9L?/E'֘f?ָ;a˒5{5O9/sLwI4 +W7 +_zNqu%thW'Fӕ[2p +cVWv/H=LYlGP.C2لыb{))<>kwW,N *>x*q>)s\IΌӹu&\s$v4tDu^?|j+Ճi/Ŕ@GxA +_w +8 u.~6]@t<~eQ.r]ϸ @K61ʜF+=|;}83ecL񴗒qo B9:VɍSpWBO TjN#іMT᪂k"! Eb`I((Jp\+`8p BTP + +]Ϥ3#Z9'ݩ VYV{Dgg2SÆٌ?+Ns +3݃P~VrkNI:`՟q#{DOuUa<Ȑ$c힅no5>|]zٿJUqyl7Kn'&xG3դS>10B׭N8; U6KN ;0j@HƗF~*we ]26 Kx LMы(7Y v}>Sy+FcGס4G>%ב#JC=a殮-ɰ4b&|klk~!M|VJxL旧BpwitH3ҷ^Á1 ,njOX6fd=Ǫp%U6> endobj 4935 0 obj<> endobj 4936 0 obj<> endobj 4937 0 obj<> endobj 4938 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4939 0 obj<>stream +Z_u~+8KrU](ExEK_ SP\iz |Qz>'I ,i/G$hBy# !{.E]Y~{rՑo7NA1sx܏ H8wUcv򟽡CJY]h~ 78=q%g<}M6}Q_Necx#CXN0:B1b.VRX`0# +X~\[r\*1 ~\&6Mߨj$Q1E,pe`xd׃irT0cac;3%NBX`߇UfIq65dIR퍬\ÿU&r1R#^1kv t)c\wí\4B&qzzq\WIGi%29r@Ν z!_i>%ﻲ̄q'7TF(cArÞH IaZY\2ukчq,m{_ ekB8_T8 rM7~^IV WmhHtqcB/yn'M]>ApvFOf @ycaKl"n0bq#t\gv42H`$.6$P=f9zJ~}:^E}hѓ0xr%30KMyk D ?GjMُBkW}qF̆BzHMYS'1, )be}h4V>Ǭ93}~ÃԦW2'^yEgBnw >SC$hyQ3%x_]YƷW<@y9l7/$M\Vw 8@*>.7$B5"ـʨT'wY< +J!cjFD4?0Yf& R`gv͂y4 +endstream endobj 4940 0 obj<> endobj 4941 0 obj<> endobj 4942 0 obj<> endobj 4943 0 obj<> endobj 4944 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4945 0 obj<>stream +P}\voƝ)`<C \ߋSܠzwN'ˉz +ԏI3z6G]VBM={G"3m` CUo-.8WM<-_$6TyS,6QLpTNԝ8,m)%$&eONH+ioj3z 8(Lk`goMLQ2ʰMn C&||OCY#X#_ԟ_znrS?IE`x0p1}HM 0cڑE;mDb|.EnLgxpoޢlMqAJxePv1Hp@'MBcSz>(~☬,_H\YnvwG\w % !~v uk4'P\t䭃Ur+oDA9%?nFEkSE;:7"V&p|0ܾaX<杋v?/iy_p0b j@ɭp-tin>̏Hm#XdwY)vmc{֔8-|& &| cem +v^??(O7ZL|8Za(F[ߠQ71Ĵُ%ޥKY6VvާѤ02"@!ZcmL˿$Ɔv HWzo7V7}=˛s>QvEC.,r_#,xgY B9|̋֗[Rϗvm}s" +'AXҍ,5>-NBƅL&'S[_/r}p`u#%j MViXy6M +ZBi!s}*5jK LxQzfryÆ_JߎҫE! [^PO-QBDTA;n|#6̳4fr<6eR]' ^B=GX ,McR3FԄYj ~ -0Se0f8|ETl/TT摣b_!VBRC6"'@ǒTd}vS\2AZ/> endobj 4947 0 obj<> endobj 4948 0 obj<> endobj 4949 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4950 0 obj<>stream +biPbj7RG:cpnR@/ێ|G׀IRHhX1z(ocČ +%e>o@Ί%ppR.wCc=TSӲ!tq7_!XOk+4^T +q vpNf48M]7iqșTL t~1p@ltd72nL~ogќBWEe$W%O5[qs_%?ZDcy] ֩lg^5c&"TVtQhNZ?^cj4.zx;9[)@T z'#G4ޘ髅dϡ;<b`p\(!h%TݪC0qwgY{xK Q: 'X\LlFJvsI@2Kij ٘.:^1>r}è@4$|e?QZ~.>uyf~5d7"8Hu%X(Nznu +$a@J.;O"#,*q]gn!v[\[b#P6)ҽ׎omz'R0QcAxHj }B +4>bgJѡUV'3"嚉oD +sJ;sMBiA/ϲjY_RGZh`G +E폽96>Gb[('VNk+"h1Gc35de{s^N,̠鷺*dw/p%/ic<trtel5FfPaE,kZAQգ 0fq]3qkdϴ#"IecLJi]b?@3~ V +o,Jj_Ǥ[(S>XџCXOမݓr%MK9`ZQ@-Jfǐ%e::Č>QGvg^Bͻנ7Z*/Ґh$-ԇn`qLǹ`pC\FƉ(B9he_!;Q|O +XIÁ~JpkL> endobj 4952 0 obj<> endobj 4953 0 obj<> endobj 4954 0 obj<> endobj 4955 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4956 0 obj<>stream +Q eL)P\IpNd!p V$yńIqzd/iׁfV;#k|RkdSyi\ i@J JS4} >{P^ᖫ\pk9ܬ}F^A:5Vi &IE,A-^xu>"16Vj߲G-$pJoٜK޲}^dHPQ͊ZeB=yE `zYa,dL930F{g(*޷$Ϟ۪,%.Z-?H2X哀19jT%`UrhC:[8 G߹׆1 +NpjLk75]4ѱݞW&bA@ef!y7RvX+ٸثdX3FtAH1ڙɡ/"%a4xѦd3`O7=c6ܯ "YFUG٨O?(cYvhwP cVX7y`eAk^d.^Lt˘/ș[ nώfOGnm=WCh ]`}Ob0[T'tei\Xk#>0`Xj{rYdm 4pR4 HB"uYQ0*mXeNVs&㞊 :NqwxlH*/]7:WLmwy淠~FXع#3(Zd!wa +F4^/&%ۺO=jʥX_qދ]?ZHyFh;CaYgE`mhjNAsIʜK6kS{od|[r4]ٰ19L/\aaU׷{ H.^8~+̅.JSU 0`/UjaW + +endstream endobj 4957 0 obj<> endobj 4958 0 obj<> endobj 4959 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4960 0 obj<>stream +2m-t|D ZGF=ѠgcUPt&X©~免l U%e'=mD0`UJg{ >mBFqVP< k@̒Iz7B5-k6kBl;~`?yTl Thpo%ZH \̒۫=Ylq +>38+2w<5jXd ?3GG? +} ! s +Yۉ_G)G3$E9SK|4sV!2~,`f{u4Q,og~VB1[  >htqp7k)[;H |~7 y!:|zR؃cMI~~ `ǹsl$/^ŗF6. +ʈ|A_.x62ն>M&Sϣ$ho: YѐDHC W{*c?K!5vEof2{j,z?8gx^WN5WSU?Q2>2L?G?E!Ns7,Fth{M9tTZ)]N͉t.q.7͝^ouNa\P֮res LxCo.Fvdmx9*_칊|LJ}>wY{-^Jb~{x2v`>1N,Ӽ +endstream endobj 4961 0 obj<> endobj 4962 0 obj<> endobj 4963 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4964 0 obj<>stream +=2?s"Ns!nc*{U`l(;h(MjDkY*^J=/srHñYANeG\ɟ&nWJg泵`xNcAZ +AkX{IWZgQa+g la__??v䤻N?e=7$ӯvnTPaLǯ>\CW:ҁ( B|Cl8ow5Բ9>տuaWktbvV[jJ 3Q=mdzDؐ6Bp`!qWdw`r ԰˟ q)5`5xKTa$ kt6 a]\h*$DtJv6,J?àqj G nS i΅І~,>~dy ֓yddՓ0fSAԆl㘸1>d +0J]?gN%'2vT#0bnyߌ Cs8/t!̾}6`&v"~L-BqT5KWf + :eqq aO<^|t+ NBNAyO H`nZGd(=0 }3Mۥ94E¬3D,ؔk[WoЀ7u.X̩4`/@MY$/uQX]%=fi +l+k`d+M&O+x 32)M>#ˇY"[ (^/Y_V& + ,iOx=8ʯzR*egWY=Le} yL2ԵQU?S:`Z!k6ez¿:s<U>a?\3M, jX-JzGM CQe #4rj#LuM2cFux>G[*כqbkCc Bْ%nf%diaKᖭT~ʤɗZIL0R^yW,q5Yl.8 xT[,Hh*qP\ eMڝMOͷL{R`+78  xHZ }m&`X6`0 "\@¸!2[_^/?~9W[jW֞je 0 +endstream endobj 4965 0 obj<> endobj 4966 0 obj<> endobj 4967 0 obj<> endobj 4968 0 obj<> endobj 4969 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4970 0 obj<>stream +CBr#D~Zv:DZg Z9h^ @ (]үkOd/<Ǟɯi*9ت|8pHs#/璊4ߞ&*3ϦC ܈&vѹXҜ&qJ@)ħT7nҢ`^cis7fU^Y嶊wzFi(WQ5k +)wb+uN¢}r&<KB5АN,)' +ggOfPVO3yMK7܇a`.˽:%ΪzRic]>iE6kɄو26 RkF®Af'yp<<N'C4/SEW54 ,;;ڬ{&cLPb`3p̪ +B-e%~x?=dFUӔ" 6d"]t*^)>A=z'aB-Mː- bIV#Ҳ¶Q8O&MJ@*-qHDԝ +ni;DB2̚IWcy㪹64e7/?̖[Ohji,!o=y 3cT1 +ɨNrȣ#u"Od7KjRNg*cns?@)ozդAe#)x")9V p$2XN +bJ >Xwec7DzB hJ}I!c*p+g9ꡕYhށ`Vkwm0,/.;hȥ) ! VP5ᗒ|e9yV"&zE8ϺO"[>s0Hg) W6r&iikxzQȠRT;aidPV,7 8qPu,uΠINn:bxB +}6awn`E*xd9{+y_U5`5~zlG f6ھoELr"ҝ5Nw&}J +6%QJ*%_ͯ¯@*_awl +2]:S ja*γ͝'K&5Rxv ,#KhmT;)z$"3e/mE1SJ1֧CFDIE [Sz!kRu#P}KH.:o 874[_I=2=vX)?mڬp%Cp !x{vxRBa j7Z ~י#%[:s9H91^L.Z_+yb>޼c5_?pr'[D >x,@/Z;c?083=JSE-%mξ%]iO]$A Y00IzkЗφYed_ƣb`m >Jae%evךT?FWxp4R~Ga7N4(WB 9_[zD +endstream endobj 4971 0 obj<> endobj 4972 0 obj<> endobj 4973 0 obj<> endobj 4974 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4975 0 obj<>stream +瀑twpdm8L5>k]gJXg&23 u eϐõzG7dvdUahu֪ ׽zRN}|o\׺L |t"rj 1dk"7'^о$qg($ &kVuT_ sOް8[)Bq:9ʼ5X@]*F +/m $ji `QkL| +:t6hHW^ — !(:9Qږ3x5>~}3[S*6"2I?s54*Ǧ082ʶF-F%PW)ԨϜ&hX-VTe%O\)Sz t@ wB2!by,߀*⅄W!9qi˽E~RgS8!M:'WA d2ڦ+!;OșIBPP!3pRvgH$V <'SkP u%1_}Qy Zw@p(3#Cw2vK4s mۘb={JR0mѺ0)Fb|8Gk㫠%0Pw5 ^P+ݐWLUd0W:r*ƸղCKR +-v~7eCkw0CBf`CH_)Qi.#">[֭̆\%AOI5@: lL.Q~ϖ͛rS;Vד {E܉2u+g逭'j>FEetbd\|5a_!پA]AWɱم.kEx ]>gfNJjθl|> endobj 4977 0 obj<> endobj 4978 0 obj<> endobj 4979 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4980 0 obj<>stream +|aLhSQS}K i+햻X[S eݹ>H֊Z$U>)fr7X}[FV8tXdM(% pqfpFhV<^"šBsLț%|r;yT4i^ʚ$\Egi+[ʏ(4<,LgQ&["WX̸Ot~q"6;Sd>2')'fy4|]1UJQVKY +6(v=mx;YNU`iF8nfH)Ur#K 8p ~deZb"X?MZzoWy4 T7_ChlmGiKfPTu[fl_/!_a =a +ʕ8::."$ G;jnDWcR:#G GVȁ4^$|Ep]V[\Qbu҃$"Տ 84E"]` 9ju5nu*UjÃߚQI\ƣ\zޤZ(E) +~seHS'*AvJ8Rr +#2.8"by*6ܐIeFtС'~ +endstream endobj 4981 0 obj<> endobj 4982 0 obj<> endobj 4983 0 obj<> endobj 4984 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4985 0 obj<>stream +:= p!˄`gޙ= "b07}V1~M}sHcc;c2v> t,(~kmTʆĿ tMhqM_j婋uPV`" +!V'Ca +Jz^_#A]3[l~LbVdwΕu9F5A7 ve/*rkθǾ L3yW\e#F_#oV݀2ʑJ>f:MQKwuXX)ŮeʝҤ +KsҔ樸{z<JR4JU1 ZyY:35rօ2xT!o_XS' 0y-GZ?}w5c94VP=“)]g`4*rPz|ܮ$}ASatߺx GM?Qw+n'=7㰿 ,FXX e9açns4wc] +Od„ݘ-2魕tokʄBvԜB(tsj_yE KS:etk>U[nz ңY5 +O PJjj^SMk.q\c=~9юW> endobj 4987 0 obj<> endobj 4988 0 obj<> endobj 4989 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4990 0 obj<>stream +2pZ~MÄYI :Qbe- ^O{%U2'酸*=(2^M_E)11BCCA0dZ1ycq Cb݊x7/"DIh뉒%{Q@-0ůT4)Ŋo];"G"D2!]6ݜd;)5Hi^ⓚ9 vez9X\P "9K4q Saim*iD$\^<ޚq1%(\D R# +#9({TeL0Fm-MM: Rrl],] L&fG=_%>Eʉ +endstream endobj 4991 0 obj<> endobj 4992 0 obj<> endobj 4993 0 obj<> endobj 4994 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4995 0 obj<>stream +i,AT5<]:`?x`f,C;OEB˂?IaZQ|\_ɸU2[_ӝ.z U*ۉz`) `}te@1=y-~ެ>OҬP ]p:^h 6xbpgc<:]046ʼEkvI1"ȵ8At$psFu1$@jETW g ^Lp7HB͙tXBAQRp!z͝Xj{'ja#Xo;A l38pv :E |WNjh78`{\佻m(oHΠ +bg([,L1qgz,GsF\ix[^/{AӊZ v$qA 0pH? {:U^X2+OAĤ&dEZPI'6D&ɋ8ٝSM\x.4ZRi)C:D=ںXc +eX̳2;Q٨ Y#)rX+>orJ%-lS(6>D=ٓ~/.Tn=l`<VTX +[7X[)3lvg "u"0~M5 {4k+Iyj;=XU72 ` LCu<).qwTSӥ=D5!,/>$)J;K9)_^ll4"bzN35AC- p‡<9({)϶AcI +Yq:q"kdփ>|۲suiWg]P8 jnt:Cض0TvXG;ȥb + JL@g]996 >蕀KvaF,D +endstream endobj 4996 0 obj<> endobj 4997 0 obj<> endobj 4998 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4999 0 obj<>stream +)T#Q4r<(]D\B]$խ'M;`s >B&dXʿ4?`j6WݠoyRQks)u$b!17Dp>߶]}?!؉2BfGVXh.֞-^ysk,eq xD|\G/Vʴ[O{hk[+baIKpUgɦ@~TS:Afqj&\k 'qک3k`v,XBL7&q +ꁺ#ɽ_ˏVj'>j[E?=UNs%#C7"W8S06!9Y -,] J0v?Oo!'K+tmWJ3y팣Nu'i$z"ZG% u04rknK>9am֩]%c]="^z#7Kv[( #"pwV~VYCufIWDx ̅=XX%,Nz@źyFZpd}/k"aھ|ٔL47&jώt #zRHF!EX&\ 6;hQ +kO +:`/gJ.B-BR lWfr]]ܪ?ۂJ4^?Rb#hGcrHش8Y~8Ijո[QYSF ̋ 3V/ڎ߈ ߔT(/ !-ukM|$gnpѳ ]>]ic̦Srr$u%2ELJsr:Zu nQ$,rZ8I >u:eõ|~Tn˃ґ3̯Cjb'6*[ߔneLr"c@>IR=Y}67-N PsELws' 1ᷮ@:.":\b88zkqHWVIg%E5 e'ϖS >e.ag[b ړ:_ v8T Ϙr%Ǖ)]!Rg(0E9Dcm +endstream endobj 5000 0 obj<> endobj 5001 0 obj<> endobj 5002 0 obj<> endobj 5003 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5004 0 obj<>stream +MUk-`Vx%Ɲ4E)mBTE$,ym ^ټy:}#aPVGYȠb(JXrSrX]|EH +g%67 w=.$1xF6TtXjc>*o[X_Y + j#IY7UE:uGC?6bBl=5hNK.$F]QlP" :SxJ,=1%F2:qNؐZ .`8_`#:L_𲝃gqWM~4q{,.ߚ':nDbzxK޿"n6CtNU@a&=ڧ*ŧظ99\g²r~U>Uy46Zr<޺_ځ7ħޥC^'"?SB؁d5pZyM[l꿷u^ܻpA愍g`MX *m&iD%BD/,h5b(Ⱶϔst8>PCl@7J2#Wf˙5e2XjbnVO"}Q@Zx+Vq!P47{\J/?˱om, sjT +ja)Ö|qxZfe3t +;% $I5 q I>r3-XƉv. #$qN9ƯF\lpLo@KemkC<܎?,(TsQ v|h4'g "|g,Y^TV礢Jt + ,늪yʹ@|$8c]sd)[.Dm~-i#Uů#q9нH[om ^]6 =<9 \ ɐ(IS=K$ٴPa4xQKʐ51>`3Rmkpbv1vr$NRf*䣉NRW2jiS +endstream endobj 5005 0 obj<> endobj 5006 0 obj<> endobj 5007 0 obj<> endobj 5008 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5009 0 obj<>stream +X= ui'7A][-CA[>;fGXzy%cx +/^ +L`۸Õ{K\Yg;+9Zó9ڵ?UQOd3ٝ>KQm%Y59/AAl8R)@yfVx8N5 zjCt`e;~־"Nk¼]>6P^RYZX,<[ ;rWj͕3}/[pMw"})`p3Izc47{aR^:6Nsz/I'X|w[&kU +m"?;)f[׺-8hM"*.-`;_5v2 ~L悐W,9XYrD➃mTCsQy_Y`|1^YѰgҺ#RMFM t"5OȘkU%; }{BUTqY uχ`)d: jIQ1ġV':9pHg|r V)IMX|\0;ʇoݎhg])K{z +gm?T:οs4L@`.&D4ϔVSɋtNw(W"Ч뀑)MzGŊ EdfKS$V1ğ*c%eQ#,빰UOk. ~Fɐ35ǻO=;;*GKGֈg{haoTμuqxE?8B0`YKb2ُk㜭3vƦKRځPRہ+b`TzrcG1-TiNmKzc +$A-Q"Tò@L13]RlNd`Bmh"us?襑ѥj%d]Nsc]}"dI[c=snHZ][Mn<1&<##P\#|3QENt> endobj 5011 0 obj<> endobj 5012 0 obj<> endobj 5013 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5014 0 obj<>stream +1/N`v˫6:$o ن~.x&H+ؓFֈ7ze E"CpE  ѕ"AI +I>߼7M1LE.N)X6ɟLʕH$?z! BP["~ r۫Q?oރ9?yߦ,m#CZo[mυͮ!~IkM9&Sy#ibcYXX>fFX)IKߺ@O7+]J:%c=]nPz/%-)5 }8W#9<"փ+D@`62wq:Ƀ0~+tdLU:gd%E>k%*sLdpG7vO1!>$/=i l_+PMpmoo7 zN"r?Dr޻6J"aF  ./y7%QmJ:[+}֨7HI*~YlA*v_w6XD YjMMFd<ʼԃAHyq<>yDQp.ͬ8eg]UxQp1b`(3&%Ldz0DȞ$7;"S1*R\˔O$N$|RMzO>OϜ8.Rְi,y^EZ`@3wپ90RqF˗`'fW& R.Bރ\TXelU&Ha7x Y8Ge j]w ]fSQI|A#՗5Dmn +M:63l@L2s 4 +endstream endobj 5015 0 obj<> endobj 5016 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5017 0 obj<>stream +;axY D2|xU +%nmo+:y?1,;o%oa*LE6X3ے"㉸ + U܍R!ČevE}F@wi\۬H zaC0 nԵV\#t9 b)(n ~V-վe}Fvgd+3I<n4bhYL'L"}q; NzR>TDΒ= )H]\h@/0ԢD/ZZk\d#!GУUPklt_QUh)J L̶%xԉGlϧwӨ!>+iMx +endstream endobj 5018 0 obj<> endobj 5019 0 obj<> endobj 5020 0 obj<> endobj 5021 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5022 0 obj<>stream +ƀ37bvWXz9p +QEs-&TjKӈޅҩǠvT̩@l0.mcA׽Bؓz]~zr:̟IqL VԀTm؄Z:_Ǡ#J|C!]jzhXbnZĕZ]"p3* { .d.[3!Y@9?yδ: +ؔsҤ꿤b9^NƐ.Mf !}s5c2yrE*yXOw$Ժ?SVBP5fu{ew"^;;D ۟8%tYgƈSbUVU6ti02] VZ*aꚶdl_ڥCn;>5ruQZ4mgx_w4|wC'>:+&%fRD&U?D& rt=zy~I)1p&_'q@7\]^Vۢo+ +t]Nѝvq䙧x! W}펴^@\%Q~}߇;W& +endstream endobj 5023 0 obj<> endobj 5024 0 obj<> endobj 5025 0 obj<> endobj 5026 0 obj<> endobj 5027 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5028 0 obj<>stream +eb:H9v0'cB>{-'},B'@V=eIz8, ߡ1q\LP;8_4_<٩yQBpxyⰑm.:JwΏ9S^zY鈍#F ΫP/H}`=/EG-ѢMa* ?zC"Zj =*DoܘGUF$4M; lwk$7iנ3#pD֟l{8i.QC"p*18zwa-<Y:̩xQۅ%1RIg"c(Uek#eq0%xONjGC܉ w{ont/o1٠9K lT.ĀzXg.vfҲA M)8\A)Wc7`'+T#Fg<}.X_L}HiWl>ԈN9#{)J6gJzHaƑTՀ)TJG&d?1aXp6%&?X 5r4bx,? | MB|5\^ R@B( +3RBwLC{;3hz׼ta3'7js =UƼ)*ӱҖDarFG"^>]̓n ],}c` +ۈ f> endobj 5030 0 obj<> endobj 5031 0 obj<> endobj 5032 0 obj<> endobj 5033 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5034 0 obj<>stream +4:=MGw>ɐ,A6iC9)`pݙ|Ou + Yulޏ;dXI9'˸Tgު_>w ehb$@;oBQNU+Ig7$tڽRRquJ8'3&h PN?ÕkHdx $Շw!QRNdp582zLGeBIrf((Uk5RRi%pi* TEg^M'ER]à|چMU'bDU4!:{~~^^XY8䧍AU<^mΥS7Lsw]aW }zc";D[%yB.TV!fU d ,72ކ0D쬪3UǏLs-hFDeʉb"𶆗\`s\:S4ލpC~נaR&7[3ǧ,S?/{ml2{m D _I*q5:vM oqr%1|SrI!wK7wk%Wf‡6^{zN+ \ iJϒi!4.h8!% gy78Q8|d'ғ§Y. ], Ui?ogjK-6it?8.oU92&k|Xj-R,4#'[nD| 5җy 0yKhC07?95(`̲ߏϖqnNRQ2k$۫]q,OifhC|30{Z<8ogu\nnAN?(>]RII4RHNTrO}mSظs~Ҭ~Y=R2^EhXNNM=TNPa>+ 2y W$(xϔ0՛Ϣf`Vuzkic3dh%?._3Uwo>͍r +endstream endobj 5035 0 obj<> endobj 5036 0 obj<> endobj 5037 0 obj<> endobj 5038 0 obj<> endobj 5039 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5040 0 obj<>stream + l_Zo.g_ b7^gqe#pq<….wd:?IV"_'PDys<%D!y3Vw⧸ʆFu`R9X +c ۦHʯ'DPkL^bqVlZ6* cN(_IrS稤Sc{qQKWe*GPyU&10=6f+="pYn+˧;Y&y: ?  `DUZhWcy }bWuFT!iZ8?>.\Y}Cri960[F1Ia*R'[H*{,0ۜkV +@z .,r1Ν&bp~GaȧH}yssBtqkn:A×ҤDS;vFi"µK+yw̃A`g&$ +{Y؇|ANL`jv)<#?gJ|OTWnWاl +D)m]95w QseiJ"1W;yUmAm mGt*DQR*1.cO#'w H\ց6]:l`Ƶ.9A0x'!o树k)RJY62 #w~DB%ㄿ ߘC&ua`y*]&O'gJ \_xܨλ+̍e$@-AOZ>iXw^EyЧu(b~g JZA,6o2Ϝ!Ŋh`";䏳ETM +4< <0D#~ל5pn:5׸M5 V{.A!;AB"rNQ@ aHZ=iz!'l +дa<>-$l0$wyb3mD4p*}ќѳ ZaĜێW;R'̊-WfsߌWT)87ʟ8$i4%Jp 5 zc a\ݝaOal,Znk,ubAb:_hݵHy%~_F@Pe=!phd^jW^kt>g6 l:^/s6mq%חG%/eJ(i +/y˃H@ :-%δ1V%@*.uMR26 +endstream endobj 5041 0 obj<> endobj 5042 0 obj<> endobj 5043 0 obj<> endobj 5044 0 obj<> endobj 5045 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5046 0 obj<>stream +^->ZViju4[tM1q@z#xT6%ٌ?R(S0UC9*]rcZ!پ}[i.2gϬ.i ӣӫJý8/ET:[d$pޔ%ަ=\Nǥ07Xwt< wcr( |Kpe 2aY;r~sK@w fQ)zxŊޙtm^(?F-.zaB7%ΒLj0uvf 7o,-9="DzQ2($=}r+k Klk<*gs0":;0bK~\"QNZR3}DJ=| +lNʣ|@"29v|f=@[qG/K_ʩgmr9ebʧۅA/А`NeՄ1g+A_E5̾,VFkR{֝e{ޣ|yըvV!UO446uUE"i8(J3ߏ& F@z_HG wu&qONL{x;H:ŭKsVDqSS8H(LqLQZ~avx>xN\R< 9uunӊ:U8&0Sr{ā./rdC +endstream endobj 5047 0 obj<> endobj 5048 0 obj<> endobj 5049 0 obj<> endobj 5050 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5051 0 obj<>stream +iAw߇ji-\v.4!壮-=M qV7"VK0KK 2 Lҙ3gTe۸*Vrvj3F EMkKcפ#>HdRd>њA.c7TU~ IRGGWy$r&ĩAc|t&@{S_{dx|bHf726 jEig#L6"FeY]IbN+E%I`ԋʇe3^>#7\ k~f'0&,jcDo CAӖ+=YvNA/>#.Xx-t+4vfu0j?XTj#~\4d%891" j\}+ cIΒ]_pz), A\=O<0蜚4qΞ%$&x*n@Q#0l{p8y!K=&b5#_͘8`ZC/mIw!`zڈ% z@Z?OfKA;:InI?jEsXkQPꖛM7&W#C5O:h?MJEAѼ~|gLr_yDXǣMgI& D^ +endstream endobj 5052 0 obj<> endobj 5053 0 obj<> endobj 5054 0 obj<> endobj 5055 0 obj<> endobj 5056 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5057 0 obj<>stream +is{V/2 H'Hn;*pFΏntH''+u$iCzi"H|\.uJ]PH4Øvk^ E7ֵBf~?KP'ѸrO}4kQbll7 +.tw֞Vwh.y{~FZUۻZ%Ւ!8(rAH;axB=*3kd|0FRUnsͅYPK[J6*fhldX9E;&@Yt_!-ϿZLZFb/fkY >vzB׉Z} o5 +n ȳEB'ݔT*ihg8Ꮾb&›l,DK b_N6ߝ2lv5*nTQ8Zw{Qn#҉H,kq]8W Gb"{C^]Q 2Q,)˗7dW#ȭӋT+D=O\?#Za3NxHrꝅsUHBꓱ*нU}\2(S/q uRЯؕARfGI^cY^G^ +KYFlK8zkw#2 '}_&wx i[Œ,Lq57vImhgB.SbD'ͤ +endstream endobj 5058 0 obj<> endobj 5059 0 obj<> endobj 5060 0 obj<> endobj 5061 0 obj<> endobj 5062 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5063 0 obj<>stream +ZL +ƞ%j}<фe%tu$S +:ONtKfߟ0%h[sFϫ8ļiwb0Q-V7.# ȍ`(&P ?um@ySFa%ْPFXއG p V*j9~n_ `?Gsm.y NBbtSL'26VnK,۵J5>AД.+`ccP$?ލ˜F%E ].߄˽'Rxyk ØE7h_m?`,!K}7Hf(YߍQz +kUXb`)w^¬J=#ofbG!1 i?=ۙLav:r%K-$:m^F(SIsV+2p̐VGd0 /@y,Wn{;PPQ;ׅ:`(/=ukuv8fg|!1gv)[N]Z%R?Z.ZE޾gbucJ5m, r- v-WZZ%f[ +0&8b)d MxU7G'U13/)Cc@9,ԣ)A8څx^C>?(\Oԑ%GEW/'&OB2|zYdm,smpnRgV8j@2㴪2%<\mw$9]@=IMuÛ3{Dw.i\[ ϗp53\YyvbG"S>(_![hf8sppTy626D|zd4~[ÈPeVݬnVF@B-| Q0sxc־7"%bBoWmh+ӡ+&7vGI' }mfY]͊\å}+Q7r1C!r2ezP}Q$m&9{ +endstream endobj 5064 0 obj<> endobj 5065 0 obj<> endobj 5066 0 obj<> endobj 5067 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5068 0 obj<>stream +KiS?;99GJދnciW@q Ts#=a g\pw"7*"j*eҺ5o@7@m{-:vv4G|n\YI W1L$wRڶ 3]@/6?tHӕ\ǎb>XlL^p&e\fmK,ڧmEhrSTl0E7ZW:i:}}&bd0%l%s9JޖS$FNCu3-ţQFM7VhJ@m_lh*LyNOBjAL劼/?$ ;) _^ihZRB{;z_4i0f&bY%׮ŕ@) ~z- ]5GPN&l2=xùVc݇ q,Xxl?2k#nqMB{C/;U׷`p$|s*oJNEX,C7d:Πo^EUn,WgwW.w7 ܋w ?ۼ>WJ] Kxwh XQWzZ[/Vo0c'TxOH _ۍ^jV}l"I$M!91&X8Zܿ_+K,m +[?-`8c#ŪXZ(W +endstream endobj 5069 0 obj<> endobj 5070 0 obj<> endobj 5071 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5072 0 obj<>stream +u-(ht`:Ov)0)9]=;-6q>WZýUā4_ mt +cOKxG4o(o+w'AC}fcCsȎl3Ȁ6Q9JoW50wa$IϞTq(sEF4<&6\NX,Fw8-|wy( @*j1iKXo*w5VE_'*=S#GEWg։.`g0?kKPpz%)Yh +7nOYY D( 07ñΈͰ +endstream endobj 5073 0 obj<> endobj 5074 0 obj<> endobj 5075 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5076 0 obj<>stream +/3g4@a>oY?4ŠYk:8Վ`?)LZ"gF]IWakK?v_a +Zᣇz=:{Y(LHX;~IlZVٗQ$U#<ҜjIш>kF}c'ա֒bA U;Q5MY\wMOg5bnO.wU_J 1cόqO6"мPYɏ7]QE''fS۹ձ5;4<8Ƕ-8S,ytqWo2ҮQ`"Bc1qx2LTe<=NUO EDz5??`1 lY%R(Mġ +ַm+IEvF52!aV >4է{.* +endstream endobj 5077 0 obj<> endobj 5078 0 obj<> endobj 5079 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5080 0 obj<>stream +fڭkšB t9?- eﱯTօxe^j$j,Hqs~sy:RF^>"ɰEJ^~{4(Bdt6Xe[-O3PAC*( +eT+ݝYV'&n# `C7"-KeS#WrSk~қ:,ZUQ+F8z 끃Jc}!:9Zbv{/GFYV;2'k.7d~=gv:ahE8,4!K58 Kk+.θ餮_^4W*~ ڂyAvˉq62 !Eeh͐#Q&/sїFl'`ĀHJ  gb\WbR5)% T鼿D5p\wxCED;ӕ+ 4|LA*+6t3bI,W|991k*"FD;A%[;M`#^+^Ц8;*gR~+@«|5N#PfUyGnf~gIR?T(x(7 > endobj 5082 0 obj<> endobj 5083 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5084 0 obj<>stream +"p,q BhMQuѤClR*+OXԜhlK.&kWgo2)ɮY 1 +*"N:%ˈ;E ".NM:8i^ ++7̲/"iQ8TI]Bz["`= +endstream endobj 5085 0 obj<> endobj 5086 0 obj<> endobj 5087 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5088 0 obj<>stream +NL@4JW2wWNQТsk>09w@\եUmO qCy߶8Ǣȼ lws8o6}3qC2Y!~Dx)/ߢZke bC'/“AaaáB++nus~IjͣY, <&4n⛱+||ߛ~e=pH+[%}El=P%BⰍ[l)%~N)* Q;Xx_*[I=6cPvETPr2 Vth~~"Y\j"Vz<|ҫ4K+. ^8mMp6#l}??wf}HI#7 ؋Qb$6ajtX r/"3NN;Z_|j@ӿYYwdv~#1\Qi$*Sx]:i5>_!8kINGa27ŔI8mBGT&SNqZ,D ,Y5?q|Մ%&%c}YN𒽸L_} +{1Eޥ~>Th,ӑu\whe>Wŏy4<bDZ\mZ`kEYŷ(?}x:@Ll I޸=?L0]Z&oAW{ed&݇j )6Q6{J`.ph2]4*y*)BK2B~Y=*B5SZk+rp_E%[>w? d}4=fN t>EzrH)95pؔxBDK@3gͥ +endstream endobj 5089 0 obj<> endobj 5090 0 obj<> endobj 5091 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5092 0 obj<>stream +~$[-k-uZ`a1E*F7/4>BM! M +yn^GN&!-}d:2H9BwY ;3r7Mg5Q>uT?ո8Pwl6` M>hg]q!e@zJ=yf Yp-HWO wF'*Sl=Z,ܝu%>tҫoB ~$8FfsYx+$׿}|%Dv%!i,x`adb)Uv gPAys;)o1Hr+tCy"L:l3 F.6F`{T'ӋwuGM0 +i# ÆhG^vn*A{ZǓj $ֺe&w&}ז߼,U#˴r UhWjgt,H&*ړ$v{..; +Ì}QeAZ+ ƄWHs8\&( +>/}nZϊRbM_A咟-p#Ӄffl>o`yOƯɌZ٠d0"/o~(CgKLҴ`21`s槨iEd0H N:Q3pd|O/qSj>sfpBdmx:6A|>9 *=*{ؾG3𘸀;GZ[ߪ@0ʩ:=ymgoy@0f$ӿI}񼫀YUg  +endstream endobj 5093 0 obj<> endobj 5094 0 obj<> endobj 5095 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5096 0 obj<>stream + +ʛ9R$d|ho1 l`5HMʇjWO_!"yg'#] +^]U¯橯X9 ]urпȔ]b- [.Em=NO54Nz01b-,ur>q?6hjU~t"(}4&՟DO3n/8%3OA>\P|<5Q|X<0&g(m90W`z2 QվݴQ2ٲ.;;978-~ g4,71d b'>׺c">dƕH2džGldA\!sӝEbLW$ȐdH녥JɫZEv2`]BSw|MQu4h\X'p^6⃒]|ۈL•fSABHa(Lʚ@V> mcDuFnjP7Q&ЀcަVg +IR:?mVꦦNt4(Jǻq9U. }˂BL{ +endstream endobj 5097 0 obj<> endobj 5098 0 obj<> endobj 5099 0 obj<> endobj 5100 0 obj<> endobj 5101 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5102 0 obj<>stream +uSa843~V j{7mFLwT073˛ [7օvM ,:^[tK&CruSVL3KwZόr&ٻ/ 3R{FoзNk:O% +\؞6#e&iXʔ/\6!&y^7;T^l"HhBժHb gCBG& U CCy+w\oڹK=>oJ۵B\(<{F-06FJ:(#͈rʨy𛥲0i*rԝ]XfdB[j*i<6$г ςN#_*{1篔LtAR)ɨ) +;TD^iFc];t |r +Ծ5v3*9YЍ2hB Z.Xp +nQAV&p k5XO8qqO.5Tw|-A :K-C`A15L4',p f ' S&<ƝIoSr&|oZ&F  + +T :nu8OwҼҖM.1NQgENt篃 +U.> mhHՄ=6;)unQkeh > endobj 5104 0 obj<> endobj 5105 0 obj<> endobj 5106 0 obj<> endobj 5107 0 obj<> endobj 5108 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5109 0 obj<>stream +ԔpvcfXG+lBgDg\)QhjHs[ ߭p8@?s٨q5:(T=q oL$Z8Sk7 qf_Oñ^ w>x_F҅u?eXUJ|?:i6]JUF$jq!:!w=tDX^ HE]Vj98ONb!IbDP}ffH,Ps[c[zu=KLJ!HP!eMS1˺hD#guμ1o@qGJ:< H=A-'U%O|33cيWBm)d@(=V2)pƍ9,]>IR(5'xļNG?hj< +d-8@ʪ202 ֑씌=O˟<آCm<͎8:eP>S&ƶ]=>lQOXu8C.{P[ۭ']ap&mx>OPT /x'?.úqolH?+3m +#|Q!;BU0;= + pݽ;UdR,.6IwdܮT<CEنoѷZlΎW$ u[.t |X6Nb_[Cpp4$7w<`_pXm2r m=r<{ !=v)3=EB_+:O&Ѣrau{GOfEdCd*6.KXi)TTjJ%ċ4S*N}#cY̳>0մ 0S Ww BGb+Ȩa^g91GX& +U1`zo-B^B)cDc~?"n>lЄa6( :˼/.rov_r_L;'1DVZfMCFD#I0*[q)y3v(][mH| 2~VC\q!W&Ȁ`OL bt,kJ=(e/Em[.h[!> endobj 5111 0 obj<> endobj 5112 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5113 0 obj<>stream +&9ͦ?:΃;Y,j͵*geKsk$ΫRQJUiluf1t]SL?FhY<B TaW/)įr9^G;oKoqAcdD2y-zG_)B}9bB vmEQ$/"x'7T(&(@z :]{4us(9 9-e]gh]#.oDk>l^SP]s^ Z6d|ZyH>\<%fiH fdM˩+\lB0J1lQYV4Vޥd +͈8&&2zF_Q5jb0Sh-{l$֚:mѳ*}҂c>]hŽS""Æ$4l޾mVuHuek\?N.4?)9 +Qeqv +ytYȍ*xpէ.‘ޚ_pI?gVJ>^l;̓l;THu*@7) +4vT-d\ʛau ÞL:쁭h.d,7( +MA.ppN!m8gFmWqxx&C#Yˋg W)6%gY>K$b>Daԭ1obse3q`>pd>̶2=hV+1^(;VC͕ +]F(tBU٭t4FxMgEh^+\saRA{Qse aY +endstream endobj 5114 0 obj<> endobj 5115 0 obj<> endobj 5116 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5117 0 obj<>stream +ln-FC "ijlzsn8Ň1 P#NanF~kmdNK' >%>$0gg%6ZwVS +Vh=?wfBᇁf2%?)Z; ĨOvXV.ϸ7ً56!EYkqmq_s#Qv~?^T+ +2@ /W b)*\%5l(@POBЬB*I}|3I6w%!„%'t_duv̗pF40"P>^0ܴ"-~?,Lt_!/+X:Go|Uy-M + MG x#Ye8"԰A#;{/]@νS0jt6$#xRW<#rS 6|gu}ҷ>Z1l3$W=K7뤶ˡVj +endstream endobj 5118 0 obj<> endobj 5119 0 obj<> endobj 5120 0 obj<> endobj 5121 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5122 0 obj<>stream +8qV)לu3}V]cM!y|4rqOLꤾ= ( L;fD}OdUm=n]ebH|R +ZJBT'0h3"H>qLl_rPqt (҄z`aM-F][jvjQ7Z<;v>lgoN0M~"L'Bo{fQT.(|>aD/Z.X\nL=PiHgwW|"l%(EN/E5.aG :B#LʁYD +٭piQM,ԼFF-FȂ'ܶeȧ<BG.Xg +LC񢕵@ x2auş,+{&R ?n͋BO0D@F{lypk!暐vbEe;WRZSUշ+yyS9/DB}jxU°ԁ!TQ∇A_nB{f@LZU8(x%`Lt03G` ÌMQAOamm"t7$1 +1muJ9axvVԐY8ۯڙ%K"6l,+%;%*LB <7B`$OYkTbiM#I.+90ܼP>[ApHZ6d?%)o;/.Hؑu1DZ]<2WEK4#!@׉5uժἜQ~q)!@=掉Z19NQ/GC65{#^t,1~kōF$PۭL,y-{f "3UMQ;~9Ss#@]O]D gs,nH-ILT +endstream endobj 5123 0 obj<> endobj 5124 0 obj<> endobj 5125 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5126 0 obj<>stream +^eIQ89~bkX ,_}INb (6E^ĈKx?]9")\aQ,QWco9 ̎48)%Hn3'9ensgf{Ah4I}sկ>K lSc<\ck21o +8,Y̝or< 1?eiƭW8QB%$HAs:KX`9dbhį|`PC@\@.M + iXbz'b$x\#I#qҀ J_7=O.s`o&_Wf;-@D)J'Uvh$Hֱlyzzy(&Fݱ;$IbNrb\ !Hߵɭcx\s,㦓]ЊtUlx6I9~5E_IKG) + L-.P +:Vʮaz‹{`+- +9ؐ"#mTQ3vÕ_S՚ +endstream endobj 5127 0 obj<> endobj 5128 0 obj<> endobj 5129 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5130 0 obj<>stream + M3=g:h&zc]`9|pMJ\?mm~"nw6,}tHffۘ(tb&' F6xҝ:1&37߷tigI{2v.jP:#ά"F>29xz@SI'GQ0m+ygtq6C?(*^mt#P\k(NQ6zuِ@ŭzˑ T0מQ73R#PWg + [ |f}> f;"N˄z,; z.%ƿ҃؀ǒІӏ# +ͩǦ7_8ȏgϹ]äb2SײI`'++ _%_Jt"vjƢ4C{&ʄ84 bg +(ѧ#+92o俬i4ߗT<%R%X좪O[ +/sqf[8ՎQqKQ%c'7Z5gX< : Gaa.!*91kN|+gD~Q 5p0 "+9 }@*Ү'ZcuKEE=&k5+Ԓ,Y[n#vA[:#lXzoQ[7p3NJX#+bmIU I:N;tXwhQi>F3*-L%'܉y. ͎zN +endstream endobj 5131 0 obj<> endobj 5132 0 obj<> endobj 5133 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5134 0 obj<>stream + ZNFA^cOωрw G{0{A&(Sݲ h`xt?ZE~g44'Ѱ6߀28 |BHTK4Sm^fM'̛#!o+܍IEς9)We{IqmL破c9cRO|W;+)ޣȩҷ4:m= f.a8`Uk]Kq>DDs Z y("UXkH*3qX`E^imDrתBH2NDk[r, uTPxfwtLI&so֝Cn/\X-1MR)1DeNWib[W/SXѿ-[ +k{ t20bw^DU@c#ityaą jd#χi(=}&gi^'5 È4}tbpA7؉?ly$N=62QL\ۼ*^^&eRB'@'wioܚ1A#`j~<߮u +endstream endobj 5135 0 obj<> endobj 5136 0 obj<> endobj 5137 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5138 0 obj<>stream +E pCɖ-J+u fzš$38 S [ IHdf-BW qyV(.ܫy +k`K4_}X@1vU鹩V0KZB} ;2?˓(>Fߌ0U|Ec-8R[ RS-: eDH샓jJf.(wj ҁIE ͧ9N&,o[MhbmR2(F=rMlnY&jLy4"u!h MY,3_L$^o]n&6k+F@DZz>9NaζŌhw@ +6ʳ8ϥCDgZ gwp0j?{m:^#;Taڲ𕯯b +endstream endobj 5139 0 obj<> endobj 5140 0 obj<> endobj 5141 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5142 0 obj<>stream +4f^I%eNHbB'cRkQz_7" fZvY/R@[~H(x&ё5GP;E9el&YJ{4!)-(OW~&@Q]T&.RėuR=<B490=9D ŲJFLu/Xzתmh{rؕM0P15w4b;:Rq&=6+2_ˢ2T#k~XK9/V#`"4z?0)D`q.˰ch*-%,lGhhYa {A|>23vҋAbcUFR)6/&G4}bqASQ+1uOEj߀az 雘XTh)޸ qyyjX5Av[f]d&(tuto,QwZ4-8 x@F:,6cXJs +q3As '[ 'ʁ=e\NK׌w;grsX7Џ7 +J9'D3FS4W -H#qNanrÜ:J@< d{_U +ut/DVGJhc%YjNsΓ +~ +rYo> endobj 5144 0 obj<> endobj 5145 0 obj<> endobj 5146 0 obj<> endobj 5147 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5148 0 obj<>stream +K> Z0E>C8&d#}Ԧ@p' wS?TeV+ nyj.|`) sr4| +C iknF8J%f6d!V$l)}7&M\X^o|f-l=Yz5S`|o$(K;hSwǿK*y G +bI YHqw\טfEМr-GIN4%qh狛3 /Ɩ8yywQN\ XT~*WK|d@e _$\j&zMn"K5XkSK|uK1:3N8, r +n2s8Z Ab/~KP٬"栅fY_Ȩ `,ǤOC(SXk}'B2NF:ru\oIi0C, B)O+8#I"e3i=,ÌtS+|uy1ܛ*8,fG,aOw)ÊV$Ciy[T_LB!re`͛1}_1q+yN! |.ōWgg,Y.cGrrNlEgF^`7g*psia3]^Ma?ob?,uRKAےR7HΦ_}@eu +ʬCK.1AAAN{Yjk?V[懱83]aZ~W cHeJVt3#0fhҙC)cy%ڝo& E>-5ut? -f\ ct?O|{E.:YΔ3Ru~# OwR qȑEC.}5u<ʺ!ӁER lhȏ+Qq>=8 +#\Tmx˫X*R3Wbk~"$+TTqXa J"C7>vfs 9By#1A'eVR +t{]W4!#M$8b!|B<ޗ `.Ͻ4A2ĕ9\eVކ-5t77yfcR1[f0iax +endstream endobj 5149 0 obj<> endobj 5150 0 obj<> endobj 5151 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5152 0 obj<>stream +Rmdxw'v*D>k ec UAH֭eCaRcUH;`>Pk`؝\3|.{d:/%8$mROuЯTރ WN)1-tIHߤ\GF'0> +A_~ԗ.يC =4[21[d.zJh `iJEHor[)kW$xA +#:=孓!`c 9ӧJ.-}kNB?|R{$ +0sz˪^|9)p9;X&Xᡅ5 _h 3LgdP"G-:'-L=1r]'L̉8Fv=V3w z2Js¿toĉX+ݪ0K-%s0 /$&%i\'edSyDD=&p% Y |Kp63$UP/ oD*آd!HUiWcy𮿺S +endstream endobj 5153 0 obj<> endobj 5154 0 obj<> endobj 5155 0 obj<> endobj 5156 0 obj<> endobj 5157 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5158 0 obj<>stream +xDMOTQ -T6ț\ +A 1$ hC &ma1PM%hDWD ):NG]"Ts[YrkyyW؛ɶ:ݛ_ +ݞw0jC$傡;i=_bLRDs/sέ%7\a^q}plǼ QcH&W.6oZQ$υ/%0d6@5%DwJvS*H?id:zwS4 Em 7*J)\n~l84݁98+T=iqPM4` CUΗ|b-Hb+6Nw%O+ݬ`eğr2$aOjȱiizaA[+܍4*xv`Ls7׍gі`Mo&I^h4O+ +8[w }On7^bگk廄pߠ(J>4y~SܲSE9{#0gfۡ-bƢ#cݍv,lڢ>.y"3Q;ԐH ~kr, m- +$28g^՘̄-١fz+eGXa)Vzu‰gSwgCHQS@m`H=!iF z҄Mlkb82~>i5=Xn${'w׆FJJ>#̭"[QvJ7\DoCF>4ğz!Sג + NA4ﯷRMu;i %Q KlLBw((jegɫń~t)$Տ!ާ O4LqY؅r!bo+BhOONcIFυޞSw͐]%uTڸY$SS̩Ƚjȏ1fgȃDβDbFd= +^œw2b2Pիs:WY7@K9HO$B^zXl*5ѧC@ۇH~HHS7\V MXD}B<u"(Ok)O4w(? +U׃5M냶fܗΖ%d Q +endstream endobj 5159 0 obj<> endobj 5160 0 obj<> endobj 5161 0 obj<> endobj 5162 0 obj<> endobj 5163 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5164 0 obj<>stream + ^dsZ(_Q + +A (=Yd_;/qd]E?YaR:v3.+DdܦQmSY)f-{{O94hw)/ZLMʒ0L*.GT:e* X3b&~ỺETmfA"ҦtY*{]ɗY/ >dU+dR " ҏfJdN0P,sG,|7mˇ 㢐Y 7 Ƞe# qo2A]ߞa,IZe(ʴruw|Ift7CPZθkehu C}~q)l1Q + Kv(&$eipRS5: Ny{iګ իYѼgT#.7QSo3XSC|r{Fd<|97>oޢmnHǬw:nqT#QNPam^ۃ6@D~]]EDS! + ϩG|bDb:J# ;KSH!&? 8`~D.X"W^U񱆠&E91x`ۼ"((.-OfJaǦN˼@&3i6g OikVwvD-BfJ;.S1MI A|:+Λ Vk** MCrn)v1K rSDS5Re]];^Ia@x> (¸s<; +r5Zfn8>\a|#L#17w5v?Z o߹;8^ԵABI?guZcZ9wFВ*4|­ +endstream endobj 5165 0 obj<> endobj 5166 0 obj<> endobj 5167 0 obj<> endobj 5168 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5169 0 obj<>stream + D=v{x6 /Mr\upw $!kX2:TзAɰݥ3 /KYEv닧QH;ޣ9mጔmKXz|N`XK)#٣beQrMP@Gv#"<[(#1 d2a|~I +g/ +a1̩LO<{n؟vMPݛ8?EHj6HY8_Hs^y+thG8۸i`,4^ԞxĤ-BKQ&5TC}^ +8yBjD08Jf1`'hKb>r] + մ՘}_qMw#F +;Pan n~e P[}Օ~'^dX4S`AfQ:p(n\uFPJLH-T(YUV(I(̩t=iY2*i*kEԼ?Q|04SJam8%ru~N+YO`Q2}r2,Bu&^߆t:@{.Nd Pզ餵@/xT}m@;g%LR P_^s&T\*CTƈf1ٷjUR5!yKc+2A%I/ʭ̈́-K)I^nmx)pw.{E]FPLd"k#>oH{[c9ȤjNgdi?Gs Jطh1X-Yq,V'45`%yhFg;{sX;Aw}07Xlp\l1>C4zD楼 jIs Kj;.1IxT2Y6b,օERG>}Vِ5YGeg +endstream endobj 5170 0 obj<> endobj 5171 0 obj<> endobj 5172 0 obj<> endobj 5173 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5174 0 obj<>stream +V3Y&c |Dc/xa QN%l>F=;=*x9"Ί{6ߤ kǁƎ1~U ?~TjmPFeᅻmpX? {oߢOw5?J /]`^Yč+@5xSaߣe@:֗D_,]i4U~l66؇!>)հOc8e"#4rPQ/!quH[w)d} I%[EHGӮ+7+l{8W-UE7v|<5W©]ihҩ-Xg3sm<%d@:dC15Uu{҈{ίkt^5jLl+Ct1Fц 70sEz[,G!i`Vb := wu%%bR+X3څnyt;nrUΨ CVkRg-&'1t}o!?2-C&h%+]`T큱3fJbAI +|  SY'Ը {?5%R$G쿲}sȅAeH:>GMطmpl,ß} f$=q |G۰nu%4I2c^ q)33~ReMk;?|UYtj:5$**X%[Qt[%[򌣳 #H>? ]'i@Uy{2RuTVod\EpVr,YpV9aZ"iKM8<.ٻ3JxYZ#}=5C縆s OqSMVjqTKlZ( Dʂ {*'(=񠮻u9O] a,І= UI>NDEI +endstream endobj 5175 0 obj<> endobj 5176 0 obj<> endobj 5177 0 obj<> endobj 5178 0 obj<> endobj 5179 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5180 0 obj<>stream +q 78AS-tjô +?K3bHWdv#l?FĘY-G'.,9f[~A`x4E +ɬ! 6Xa^iu4X[eWH`ﱥ̧bDg@@+ɶ4s;=J6)Xda =~KAj[S'1K&c:˹d6NHăb1jY3$i574 L,%a}>bv >l0~?jn( rwD̦u6VOn}Erp+k>"B̠u +{.Yᰞ[a?LȖ@pRiBֺXha;̢>y.B}# s[bY^s$GeVLzhΊ\U~ĥijb{hSx4N.w>A4uă:lr"bWGxsI&4 +UNB(2*UvgV%Ճ4U# 1NG$"+ 6>S)ؽn1P`k'Y`˾SlB2ds8sԱ춒;e>7rΫ3FC˽;0`S/)aN^{NWzciG[]oqo>QSIƱtvΉL.**,r)}œGH)x_+Cl,mAQY$ MTmnB3k ͔ C(5oޒNNWX.7G41qm%ى_@857w[vvrl1 |>ΪZH> endobj 5182 0 obj<> endobj 5183 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5184 0 obj<>stream +z5G8G RQJP` =hקI8jm;Ŵ}LbiZ|S2bE`ֶYsg>ňa73&sBզe -޲5S3jc_O?shd01(GS*4]6]Le؄[倀‚ ? [tB +n:lz¦$$N0Y7} F teδUJA%+[?c 輓q|e$5) $, ЉM\R#0R54ٌ fS҃{xd@s'zv =R:o^ϫMh, b\*D|Xqq80T.;2͵w>B?;̔?fNתG0G(iC ѥ'#Ӷow/J&q-f}VKVcOk p}#d%zE׋b5.5Yq`W3C4zOXCP>F{TRͥN/ȣȽbVS7YPMu6{NiZ528e]zB7v 4xhn$eiD]a^ LU,8:vkžA~!BrI(' we*KQg%4J6:?NvOgYΪ"5FyiGp~4䰼Y9 PN?-?O&}d+0k32 No;c!sz,s82 ˈ|_a +x`lF)JbVe -fFH iVѥkPw,5Gi-_6T3ڝv(Ȏ=srl$"'tpZt(F3^ $݅cpb+NFaGՃbiFw !y1F@\^Lj +endstream endobj 5185 0 obj<> endobj 5186 0 obj<> endobj 5187 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5188 0 obj<>stream +e8i  sIgnmyj|sNQQ"yeP)^9!+nI]=/["b͜  偒R7/&擄(<(tm ++m_ARБ.Uy3WSy{099#@3å 0o\;CXM!q.^x7A P[K1ٻD۞*YOE5 Hbf. +#FA&fh'=CJڋ0Sxeܸog }ʀ;@ UalIfyo1ڶaEtWbX@<%mlIȨ/9D-.;gOi8Ҡm +}VH1kʿ-};xr&tXy`$b͘n~cB3O[gW ,zuE-4κ"ץ'N +[p̣;y/`eJrc|]U 쬻p(DcrUF,FuwR?l4of"J,Xc;w3(3+:~38];8` qyzzwg1= +oaE f?^&IjCL*ݴt#mN$b !uz94ib c>ݍhfWb 饳p 5gu1_syzVfryNAǔp!fȥabf+mX +Gr6T 1~bn"8l~(l>x|?gÀo>vi^n wS\8mL0K஁δS͖%Z|үo2uU8ϰ}g%y)q^b-|shC=_Wl񅽋QхoT֗zMCMyUOH;3~ĆMP%GyR[m&d +dE4$1~GwP&(p4k0&Z}e|(Ζ||5=ZL[ݫk*f b{uI W'&m/ 7+$j'vZf/@M \σ{#8">oPu͔O8 pxgrMo}y١ۘmQ/"Jlf@ 7t=/XF;ݽB@.aэ_{f/v4n`z +endstream endobj 5189 0 obj<> endobj 5190 0 obj<> endobj 5191 0 obj<> endobj 5192 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5193 0 obj<>stream + L-l1qX6/VƃIǞH61h/Y/{TͮE +hُ,QO†ﻠ 'nKo|ڀx!7Ǻt\K2!(yR YmܞDxyÎ͂q^E̊A CIvvZ-%g04"1dih`ٹ:G\Rht0B.zH`q&Pq#Ɍ'}Qo5FC%7#-|A|ʜ ,/9ZW~5AʽyT4THd+@4Ekt+F&K2GB1JցmiV,V Xa65>+&D~rh).V<:vܒūNa2J0CU~)w#vTMr m:#ݾ$uxcw[J6ki/|{08w.eTy$R*tK,+V-ذ$ n-Q[ +wڎ M6n ^&vA>ς0XAjWGG0iTjŴ^i4hT@}d;tr40}[.X3O< +oBf.U[RPJJjOgnj)q}p-uahy +cm,PY +bv @Z/R1ޡ]R39D7YWM xKJ4+NX+`/T%/3:/)ndÆ!yn<sBփ,䔼/-dY.Y>( lfbx \}t(|X͵Hi9\=U4`1dTSZ; #De0$b̥Xg,cOvu*ɧgqIn+81UdyҴJŞzwuJ~N:ٞ0.|z@Q- CŦβ Xix e;K)Q*ITAF(9J:s|q폖waOZD1r ZfRRWJ]B"jpA7Xܔ=ض@q*,Vc*gpī&> :i]u +: +endstream endobj 5194 0 obj<> endobj 5195 0 obj<> endobj 5196 0 obj<> endobj 5197 0 obj<> endobj 5198 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5199 0 obj<>stream +dEl#/w̓`J5^qX,Lf.xۿm'YOfTgpmM,-=-=RZ"#ewIH.bn +|K城n<] cygCd:S. +,(NyI +i=[SwLno,F;/-^&N19;V?Oopakdܪz{YՒD'rR!fڏ9]xkś5Pβ /2PRFIFר]F#{|u(dzD +#4 ,(&ӉB +3,g z%;/:ܑcO7Yv9DK nIWKQպYH$\qk'q!EwrLT$=`%'J^yB\Nǘ@n9%lNq>+mdx5"Ɲ\R7 lOj?0Y:HkH$W=wֳЕKRѻYq3+*ka[-ď6/Ǐ`5f9)ְer*v:V9򝡑 +endstream endobj 5200 0 obj<> endobj 5201 0 obj<> endobj 5202 0 obj<> endobj 5203 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5204 0 obj<>stream +Nm"x!w +RGVt8 sIM1vO̗ޘO%X`_|JeGa=kAN=S=_N mrC𴓅e;=$0)l-PAPI( WImvu]e >A܂A0| du(]7(H.d߇ L; kAĚ;Gfͻȏ Ã;fiį.p;fe@p8L+j~XM|w ݒ:pCsTptXСz*fU& +F%ZUn<>DBY?uیlQ> BKRdiٓ+t4,\UbKӳ89oKL!˯@,`0oUv[1PJ10xM=9YHW@ VEPH[,L۵\Tz/cRq%i`sgB$GRW^/R ~ $6=~/ +N+Y~OVrҍ&)pjvxT2 Oj$dߗwӓn/-%(Ffl:mxagXi j+^cw`3wm;@[/'PG7R{Ct1!=mFK2.ˆ檏xF| M鹷w kR65 1̡V}sW T@RM45J^ttx#+\3L#qarMPߡKD1<@ o[e pZV~Z;E.?*)U[[Hr72}зu*$Cpg8k7ա=vӤWQ6w#c5-)r\o/Ji"`=)*+ls^wUD t@XcE6˒LةcG=sCwM$<3ܫ9@]cHk쎿B l_% ߀>^r_t>iWPOCi϶9 =sNUm [<8:71qpܢzw??f?εȝ$ +endstream endobj 5205 0 obj<> endobj 5206 0 obj<> endobj 5207 0 obj<> endobj 5208 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5209 0 obj<>stream +w8]A ɒJR 0S4Ws]*rYql!Qw’a@rn»M `|NYgگӂr+/U$ KN("H`zDg>?b%Jgcl3+;F$~˽ ݃]fZFa,Ԩu޹,Հ3C/A209(UOXs1ٙm9L:YK)n|֤n85nnV~מ콤#IL_Ȃb֎;lj`Bߴ|l vFL-b{@9t$^T-tgb!s$42W/-Kd(t~1Y'\(B|n?KKb5t\xH}T;^O)MeD(CCMY%w[|?6 (h5>,Lȹ;1|)Fq_}a❠"S6p,.Ƀ'wTi&H>-sq QPonRWޛVxeАA~B~Z IYndO{<3+l4PXmxJHo跃:H0 UL#՟蜛kv|nLO2WUz/NL9]ExTKb36IrxBQٲVQM>nѤWKhRy3kMp\Y[]Q~xΧOfN(61:+CV1Iuȭ*1{U +endstream endobj 5210 0 obj<> endobj 5211 0 obj<> endobj 5212 0 obj<> endobj 5213 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5214 0 obj<>stream +,>29F<1.4=Tet2 +թ'dw3~%نi@JKuYfDYI]MUwv9ˌb>ě 1oC HH)oA.oFMJrf.Le ŧ)Aq~T=(9.k) ì;>\N ƹ +ڜEYO+qQ}7 |e+.6][>#,YֲNKBMeCʐg(Fyd`Ja\Q^A/\C~[X>ԄLI q(|l?l!7?OLKc_N8@n i*{B$}x0x /Op?JpaA0CɽZY-%lK9lk.h11nKIjUÍ|搯Nv5VX^{2Ha-yȺxH$mEĠ}lXۋ 19]i鱻$ = } +ܒ3S}9gOڴfȄXDH_Bl=5QۅW7v)0@5q2F/զ;~DRzb8;o-tc71w7KJc6t$Go$P؏:d`hj`ZbF7HC2J(~X&q` { RI B7e; +endstream endobj 5215 0 obj<> endobj 5216 0 obj<> endobj 5217 0 obj<> endobj 5218 0 obj<> endobj 5219 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5220 0 obj<>stream +3 a Et'&"m윀ݼg3b3\\o#ux_ׁY ӵqwW"!,__0n6RvY ngKLJ-4΀Ce#͇S#fM͋$Nx߇sRmaƹOVʣȏTn]d1`7P|>scf?"~RFf&QbcԥR|^#4)Qb`8B-AW0(̄gק*u *76 KN"PXoMՅ_KH *C0|.u{tR =Ͳ!~6yê,(j?R GYs?fN ~a$*0l,`koХ37VG@DxI#ZUtW f:@$9V(*cz{*XM4L +NF~Gy֯:}js)0-zr]K:si ʖq nW1Q R[CDMR:s.p}V9YmphB'6 O0ll{Ldlܝ|ѫ*`/J\6w9r[YF Dcd + ~ANI Dbt!{\1ԧNZY==2ˆY3(gůbɸ~aآKt3S:r0pʕ?in,mx>p{F+hPvPDW' l*YY.NxwtgBvn`1]GAP*i\m/i]f O\> _dK=3 ~$,iT&l씅bz8}PQug"]SqC5?ߠ +Q!{oCofFb`Vq3~lrq~GYVp7GfE93[^u~k ˾& SVhb99ntn +œ,aCɝt魽D 3!_# eA ~},x+XozT$:=eWt0GjyYdɻB*r\4SMAJ% Jۙ~oxEM Wy<)T 9G]p|(ynQoo 4'\Æ̝LVL & +endstream endobj 5221 0 obj<> endobj 5222 0 obj<> endobj 5223 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5224 0 obj<>stream +tqz$X%F`g;Y<+rU +#7A,ލ{&< b[eV +^QBlhG 5#!)9& +m}6`*on5p1|fYU[0[2$Fepq% *5F`X(QJ VC2 K/{87BO{Ev`R2a&:[efn`, ?&b}X9~{P}C [5z$^r,T0_w$w:@/[݆ +5RԴV̈څK`Bp`jFj+pPOE\z,*䗲3/9;sQY:P:*ӾBd5Z׊8T %*jk -_4 Pe""< x{5f+kq/p[w!J//wӤp35?LzJqDki=Z p*ax4iDJ Zׅm>t]v`u + '9q6%<šKJXLiUx Ƌo5nnCiRTK nōs +C`@%iA* q[鲙ׅn~HXk,4]^-d4e&=gwމ[1 [)W}Ǫ$,UL|<] &)NqFGMTcsCH?b +FUA3}Vp.c 3YDdcYV+|Hh14 ?25Kg諂Wͳ>E [PM:d6h}wΨ}> endobj 5226 0 obj<> endobj 5227 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5228 0 obj<>stream +-\xyT(mA1,vTiő@>զE{=j`7#7?&-Ry?QNG!vRgi+HfZt|*st|>XN_q7 MV*p!ҠZ*曏B?n%'gNOL2eҬ +T Kc/xYyKR5ܢY8/>b?K\j)U\NV"`D"pW=hYDQY J`c͔BgC^)T/cTsVhwjS\Ot[y،9 +u,10EBΞk S ?<(*xQH(W0x~OԺ3r|&/Bn``?91HeM¿0>_%'*\g^9{m # &|X5␖m3eOܵDۈW~zUY $WG{NndҙupZkq}6߄oiJט͎~6y;r^Zդ!ļcτh(K,vS<_a*A|h $~i5.#ਧcI*~z +endstream endobj 5229 0 obj<> endobj 5230 0 obj<> endobj 5231 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5232 0 obj<>stream +ͬ~)zM?J!TY{g9 !c'iuO< +؟9?f<. `G>Yr!zdC(O3߯]e0 DF(rH+~[C:btA@ƄN" +Jg6(=WFY'(Yv)3zV ܯ 8sQXdʂjY!'nՏ@`õp79fM4+ ޑ >ӓ2j +J@UK1xP7G瘛*t=\RNP[ף+Jµ-ei0*Wj씲[z|o ҩjBI W ?-HHxXѢ?rrYZAS^*.?DmRyye Yn3]\pB3GU͢E@guzuٔ9`ioJ鑄2HJNsO1eCr2Wu%ßuN7oR M +3~d>q| 2H휨HNDٟ+2Sjy͋VD4VLlz5KnmSW-ղ0 nfH +endstream endobj 5233 0 obj<> endobj 5234 0 obj<> endobj 5235 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5236 0 obj<>stream +Ul֑as2#جpW x nr*-OzA̙*Ȑ#Q(Cr4ȗyKFRKyIxewe WoNHlm[Du)/w32|J(4]²*2+v^V Nb/XT}{L{d +^ܗ7+0'ߛz ȿ;z&-u+*E˝y8UXXNo1L&BZإwq90H&NÆD6+SJUfKI%ȃK 5G"$ tUIu6P͈d 95zm$#O2ˋ6+hHt/I3 zTDb7_%6u4׏;%D6#CE> :䦿>K1z{ eHw>55 3MQa4Vd>ij?I='Ŋ@zď;8ȍ以@>Yn|wžLtbzhN/ÍN`,l4AAq\2j' +6̭4Û/; "G8W nOSOaQJudCw5/GS`}rD W9Cp e$ȿp[ΉS|I^Яt+]w߀YcCG-Q >ZjK{uu!jN:dX P?c`6bN*jn:H-QqHIaXOy5єȒ(vؑ Z\+ +߮K2ᓃa?g +endstream endobj 5237 0 obj<> endobj 5238 0 obj<> endobj 5239 0 obj<> endobj 5240 0 obj<> endobj 5241 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5242 0 obj<>stream +I-*qv'cM֨MXz6 Ip Mi + +ΉFuA9|r.`r1ظˋ䫒) hZ6\߉(g7}nFtYo+=2G3 %1-3McP frVз(E**)mdŎ YSϓX4R+PLL9U@][eLBG`~;(HQeј&YA/ͳ/"> ;켫/~W2x{ k\~/N> t%HLO[[3K.[z\%zH)-\?REȋaJW3j%5(`p_hwigFhr+DpQKks$m^q7wqQ͖j2%M +#*UA((8OYq#:l!ʖй(.?z +Jf0&Ȗ֍Y4^:a7Dr7$b O׹8Ͼ_?,"Fu 1TET +> endobj 5244 0 obj<> endobj 5245 0 obj<> endobj 5246 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5247 0 obj<>stream +*]י4/ )@;>MJ$n!>~0e\{d4r.{nRU USgGzGl%c ]=hr@\LFJFX7@c*鎩ǡG^8-l ʸeWFzI"Pm6yS?Es\^JQHG7xjhokKBi7]sPol|>q]=}Z|R!li+a -i#嗮z*v# DDy$}?+8,b~5|MP(m}]DŽ BӰ`_0S+Gn ԫ*fNr?=YTXsLcHcqaڄc"҃ 9o-x;Aޠ49 Se7_5dFqxV>66YJ&+(<y OE4% +ٔuW!* ƣ1ΐ嚺tOJ)1 b?9MF<VX4ܙbZveU\OO'4@a9*MMB#fIy2Gg/prOaTw:u)wcf^vSQA zlgӆ7͡`u_J&TT +-d%Sn6bx [${| r s!1 +*d4k3tnӨg@> endobj 5249 0 obj<> endobj 5250 0 obj<> endobj 5251 0 obj<> endobj 5252 0 obj<> endobj 5253 0 obj<> endobj 5254 0 obj<> endobj 5255 0 obj<> endobj 5256 0 obj<> endobj 5257 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5258 0 obj<>stream +p+ssyӬ6e7f"fǧOi&1b, +,ָK",CB?bCVz`ӵ̍;%n~ݘC)ùn~V (Yo&y!O`A!Ԛ[e@ @"˃52aZw#(<12_`V)ˈbV4Fӓ s Y"Ҍw-".o.5jVWiԋ`Jax#X3,5}J\)| |ǂe`ό䴼TyR5)V||̫/>^8f-mK4h1~vBi >]Ǯ:Q1Ac/X{R9s>bk$⎦ (0] Ӟ\w +HPx tq7MTn +1 V[&nAR\Ovmvi|7 GVEzը)d `8c'ί+`H5̄PﯸoKN NDJx[Mj48;dAa7Ovhx˩Eե&A>^ũtn׃{)la1c?\ 4ӾEyL %I!=Wz_ G_z9l2,DŽ0z2}ßBe:KNA=A#z/0+vӛ'C!?*ı0+_4r)\pșVB 0& ,_BF~ +$nMmpeLÇ8<4oN7~3ajMwpKкqNqPI@sDv{嬽y仉6 wB2hg#d.g +yL(5=vwؙ5<|0Y/co=З8Ӭ1d9zsBc٬cZl8BO*]v%S/BHLq.ƤAđmvt$sy&25{"-I3(zOBTyU.Dݹ!!hGdיnG $>deSŠ&qN^~z33͕3&+pbS8A!L| +UҢy#̈́qwCtWZKl +ڡᓧB gcJt3N;!Lf-~~{DUm,<]L+l:2wz ]Xqې%)$ٵo[PM|}`ɱqr^)r̛QY'reƺjj+ՀI;~hvt3FQݎ^[Hz% 8ʸE KJ-Ctް?`(T@Kܲo.llkvٯ` OM5[\i`0!|(t +v^ +endstream endobj 5259 0 obj<> endobj 5260 0 obj<> endobj 5261 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5262 0 obj<>stream +a)|Ӗ!1OSM}R + f?5v_@sX(QH%|SᲅeFHqRm}ZQƟ imYÉv<HUv`-`O2 p.6\X%i}%7x 4tȎmDdºGu_Va'lNލ+Ie6;M R[A,zpx? l,ǻ\M;&O +ɷܨlj뇩sZ'`luOI•FjFoѾ> endobj 5264 0 obj<> endobj 5265 0 obj<> endobj 5266 0 obj<> endobj 5267 0 obj<> endobj 5268 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5269 0 obj<>stream +r o +?F{ 720@5C)*Kſ.S0P{_7>d[nM2t0Z0i35NdH}Vڒ=0}QoNZ8ma#x@ +lB +h[CzK?!9 ,$,(||<@$w/vZZ8#*kTʲ[:&cxKqi +a]&Rhb]T:>8#OЦ OxrV). Yl~k#kW=UỌo"dЀٜU-̈bR_@7.Q} ,5qMoP%^)`!,{؃1Q3ixlfR[<5MB@yvFUľ +*ESw tmϘZUO+;!lEtUZ ʜ[Zp9#M0aׄ02Q\zJOCoI|8*ݓ6b`$w{Zx݃F9MMV?şc`Vb̜nĶ=_UFWh8S]H.:/=rTʒ"~kks(rẆo,>$v2`/_>IUM#1FF%4o+ 1-z5.zgO)4f҅jO )46lG;#LOǁ\+T4Wcc4 m-6  xWk2 Ę)PfU, Q_M\̠zB ;="7D*IjK y<_ڱs{PB0$\Ziqލ몶pϩCZxQ-R/ZIYP7Ck?R^l)*>9*!uE~E,h)2uJ鯉ˈ؈ +endstream endobj 5270 0 obj<> endobj 5271 0 obj<> endobj 5272 0 obj<> endobj 5273 0 obj<> endobj 5274 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5275 0 obj<>stream +WEh b|{\hm,kQEq:wtQLpc!aKM|p)ľu3 (_4 WqvJ~0HݢQ)%&S@GOtֻoXpR;;H7, l|SA@ղ;9ͅIX9Igf:Y`5{.3gq‡2^ma}&&RᱩX٣S9BĐ hc_H7^&Ɩ#妄D`bϫ#^0(3P%6ÓjaiW!]y-MG[YM}KkRqIBJu%\eY[Mz *ۭY519άBMUϕ'@f ;quQb|Z{Ц? 10dn_l_Ų3zRې:ymvAƻ28xҬ-mBM.PNP$'h`/td>Jɿ`e+\vi}L O@v Fʟf@QzFtV=Q$_($~* j`2=C%Nq7DL0l.ufٿ;TBfm̳,,+[ ς)-amr $Z(Qa)M T"׍l.)>C'Nftqe̸$҆V |?_,F x y&U#뙙߈Slq +q;D3E =9",o걱e% +%gYKSc!9H $ < 47̕d(iJ^,pSպ9z\UWYmr3ೢ +endstream endobj 5276 0 obj<> endobj 5277 0 obj<> endobj 5278 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5279 0 obj<>stream +҆cjMGt|x ]xpd$[*- +(߶jŌX2@[ЄɄ &ƴ ZISI+ +M8Xn#a{#eg~ja9 V]R@hv*.5IJה=k< hà&7060!,21e0sz5rnikaN`9nf(.\)# t`Hn_auY.Ѓ7='5& Ep@P¨ZB?ո3`xoߗ9;=$'!@L*)\O @W.bgՖ*eϥ休h6IAȿz!Qe ' a TMimz>XY* EJe&BBKjBp/oWOcc1{/J 4X8.mVG.IIhiʙ\Hy;Ŀ' +n4L@j&?bK[<jҙNCu8QpytBbi{tΓݠdV/FE!Yc0DG@U> endobj 5281 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5282 0 obj<>stream +djjo/2 /vOc{h_0? Hz$^9\E .k|SQ_4C]_qv%YNn 9n˿$vtW;Lu~J{5PLdXCzWk#Pg6`ȼnݿ QA܎ж }嗳t]ziuY7 Ŏ5ĄX0`ݳ8~Y0xK41ӸytY5eݬY'5HB v"GeY[1̷KR'fU`HʉL<"*)`oU]9N9Ml)[g7d=z =g Ruw*q +endstream endobj 5283 0 obj<> endobj 5284 0 obj<> endobj 5285 0 obj<> endobj 5286 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5287 0 obj<>stream +,:#jt=?iզ޳?/6#MrzS0HeX'_膻d]$0.~hN4OU:`p?溎2BdVOզ3==o|pگ$L/忥 σwpooL0r9t77\a)zS878.tȯJI5ҹ1m/Pb+T4A +L0RMƇRdIZ]QYiA&,^26sIs(o*`ڰ⽢feN8_E.V6?+#ٟa湥*m|ާ+㍲]uJ HQM=$us_RBn&JOuWM)Y=۫ۜ_yt :$f¹r>z({QqX'6- xT"w=3a?lU)͖rEJn]y(^~{WAK_41l7Aot]ˍ[d'}ATl;bRϰpDK(d-cz㵡1vڗuaDbA?} '{ZqJ鈩t 2t6_`s$m qٟT'ЎA/W_N\e<ߘBD6?aV`QIkn_8\R/^#`UQ~Ri}051χ₢OB >*h~WU 2\7ɯ؜ +endstream endobj 5288 0 obj<> endobj 5289 0 obj<> endobj 5290 0 obj<> endobj 5291 0 obj<> endobj 5292 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5293 0 obj<>stream +7MnψMAqU$ QEfuݧ0@DӋAywݫu2 + CuG섌))Lkm]e[`{ /[HFʷw 3ܬ U;pPMNe^CYݡ;d!7o1z*#C +&)6ʕ O,r% +DQܽ*|7Ll?V*D?8BLJ!\+> endobj 5295 0 obj<> endobj 5296 0 obj<> endobj 5297 0 obj<> endobj 5298 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5299 0 obj<>stream +7ܣ Ԓy3O0mOj+zo'Xa(ZJ/%#ǒFB5HdJ[]-HW( l Π.'+\mZ!ѐ웎\jc0yKR;)Ymw΅hZ;,gk[.{ִd}C @[W.K֣,[f  gzתSj>y}6EG+\ +8.I+[gIO6\2`J-ۤ~E6D1)OL|dZj적ʺ.RKU誢iTVJ,jpo H!:+x~*3/&RTI(]d8B]QpeZ5>ϩML]rSq9}Svmd!pWy ͢O[VH+C4(ΆGuRn>oh$3՗RJyMq#d>2ŊjE]7s5c-7e;HF!rhSR~WqۅPVSrGd<?'RU49Ko_upRg*+7cؕG lW!ڨ۹3 + +5!͸Q=q*GIjAB|JW}~8rJq""65<*'*h9Cm~w+ň/"/伇ʨ"d%HܽX^*::V,C>"Voȸ'pXc30rnJr^AK~؈Z7=$EӂWX3w] UgǍ}:4{ˆ{ƨFFzuTk$3ݭ6O.+kZL2kk/q44l ?fiOs2=IfMvhh +HT67['>G؎|F>!O:~va"GUqq|ΥdeiVj}XəKiܦ\B^E3oo4_(sY+ +endstream endobj 5300 0 obj<> endobj 5301 0 obj<> endobj 5302 0 obj<> endobj 5303 0 obj<> endobj 5304 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5305 0 obj<>stream +_,hמCs Y BB- +(q?yi}}j3Ɍ z#W949"0@$GEt3QֱȻi-+࢑Fٕy>P=y9s8ڂĿ=O+HbXOzBHk[@Za +6x4()V(ZI;MN᷑ldVzW20ep*ૢYWx]֨uz>+ճC]kGzWp^sJ'2Ц%Č;tqaH.E05GYzrDȘՄ%yţK&'8!Ui, ZEb 6J>$^miQ{ _yP,YJJSK +R'T@m.i:/՜E#=cZ]GJ`:a3.<;?qfG8Ӄ7j]ĕ +۬*SZhe̒YR܉Q~ dn)#OeB@밳ʳj{Z?H $jg:uOnlT7]tdɮ;!. ͠gI`aKLwAo-ڡN:'5fYpzӷ,./Vd@E R[ +.j̢6yl:NRXӶO} aS l6(2\ybɓh;kB[䖵$^V~IM:]K*qč~MRmߺES])%AJ%X}bO|k H$!!fѽ6cO{GM0yzva;ruS.B :4 !alqzݱqJJ'|eMF;}XEc帚ӣĮ-ڲLv!N߰#E_abS(R +H*!^I׽}Ja5VE"izOssb 1/tăMiM)A5Z\hgVQ Ұʮy4-U#Mydr b#\. |Is ܆HB+sUbuwWjws`Q^ƶ,yc緵OWIÍ))pb$nv<[+uTQ-RH 7_M};x,TbD-mɫdNE|]7gl48++}0( ġ9y)ȈEH\t +Vnl=\1O;s#oSVَz + ʚf` +7)bK +endstream endobj 5311 0 obj<> endobj 5312 0 obj<> endobj 5313 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5314 0 obj<>stream +aFQ/^XWz]MO%|Ԙ8vs* KA{.3*$Y 6CSV/]7 nJܞ 7fYzip a#%)[.`HԣA}+O46>xnMyBЎF^'z,Tz6Y򻪝iHEYS88+2F]IA8(&E w>݂`Y1/,bg`^\z 3BWWx9EH.FN?~nV/"n>AؓjCUe) E{Uz E{W0RO k}}A^+QWըajS1[EĝQΉ $G[ +m'"y99|?׃׋iTxR`:]hc2 +/kƟz%S";V +_Q#Bq{Aft# +endstream endobj 5315 0 obj<> endobj 5316 0 obj<> endobj 5317 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5318 0 obj<>stream +L>+g0 YO=:XzʀJ>o{g}}R@:,vJ#@O +W3)Nk ף ~Iœހ[Pá^u*+T5axKn6=Vi*&Ki]Tw^ +n|6,ނ>~^%IIx7jiݪA#1-!lj^!j Y6 X ?3ڱT9\47NSut^mbj/dk01Ƕ{N)RÝ@3MܸpΟQ n%b}1dyjAav pl}ẑ n:#϶`1:d/gCp? _2@.-Tg[Ysd6*Kz.SjAD:s|~L;:, +.E/ňDL=2SðyQrsbHI-%:SrRӮ˰Ӿ' xe%ٸle m 0%~pJ*9FBU@f{U6~tcUFnt_-⦌郕1 +pKa/oc+Wd柌X"7H9[z $XEH=+ MneNX}Èt(]ʽ{$'G?)z!bQZ \B/r%,kI1nij":q66q +nEos$]´E;7fUh >K>#&GT1b48^t,ҟvb^Z~>_]&݀\ *_c#Z0b1$m襂@0brwN[h2w\!(){?ƪh%盍J&P]6vpƳv5룢 +endstream endobj 5319 0 obj<> endobj 5320 0 obj<> endobj 5321 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5322 0 obj<>stream +}V~;GR*ÉI*dVpKX5SM5G쓿kj^ t=UzKV`mdܥG'wJۚ g;UeT0~u F]p\ +a+wq6Iڟi'0xWE} yhS@䦃+d&{)U0QrfQ%pqf/Һ3l̻jcH-?Qi[ǠŜNEf3T8폎*yB'L/RºODX#0Br/y I9EDuv>Abӕ}#D'۾vyd.ѯ(2!Bll_&; +#zzbP̈́?ZzOM{%jNj.DZ.Ti$Y b &$e@כ5:A=Rß2cH P>8{H_[|pď@EyL;wTJwVCĶI8-ՠϤi`C,EmLi9] +JZ)<&7f\&l5!x!po"x J 4O;ML5R5 80w<*icK-}jD< eWla^9mq˄/jJD_؃ ^+~n7z fmh$CgM1GyZ7Oj@7/m}@~Z\9q{SN2,zg} `r۸},&S)K|,UB촧 ( +endstream endobj 5323 0 obj<> endobj 5324 0 obj<> endobj 5325 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5326 0 obj<>stream +\Zwo;A"VYKs'34<L aW#[itKrt~ q\3$0$e{`w guֺU%^Hvxg~!ɾ|FDL\k7Ő\[r:!({CyP%Oы#캾aW~C!OF8sP3QL,[.ȑFՍؘ;ge5gEt{|TR90io錁V\PwXr{GTT pdAna>-w[^`扎qũK8 mUx`Z /u 7a|q 9`~/%q$BČ:ʔ̩ Yd^mx;Bď!a2(oUZ(gD%>p } %܃͒b2 _ @B$ q" zד9xe3mh3ﭠb,<#V[O%%)Y5`Z)2V,ۤ +ڿ b(Nj85b"dnHHa4_͗ޮ&'3ClC0<@y5GѽoՈ{KB6)t.P0KW3[(A+񂄡LSm|'yǞst@`^HNG7N:+) pYԯk<ӗǜC)C,`l?օ!+CWW`+GS_WrgWHeBN^fJu5$*tH +endstream endobj 5327 0 obj<> endobj 5328 0 obj<> endobj 5329 0 obj<> endobj 5330 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5331 0 obj<>stream +YЉϠMps*-@й^Ī*ۼf@b}tCz{8jΆ" 7tO;cҸYV%%xR`v.if~xTE< Z 'ITj3Cu>~K0KVݣe x`נպK=xMBҜlxZ7 +7J(t8Mbc+a -.nCaZ[UuQ}զ'H9,&Am.j+ܠ o(Ҡ#gTJE[k$Fn}-i VrO`y[ `zS cpuO}(VƲT8 Úyj{jW}|={j7 J[~#xo祵#8w`os/g"=^g[jgUʘQE4 sZL= HebB,Fw")n@chIb32=ak!;x6諦~2z> endobj 5333 0 obj<> endobj 5334 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5335 0 obj<>stream +~7[t2 Z,WbBq >an&V(*c03+t?/Vd"^ ?llS &E";2bn ;ݫ.lJ{WT3T?&B^Xٳ& ҵ /FM#)7:f _C_bQH_I$4Qq l+(X~JΣl$<Rlh+SѤ,/NLn*G6~Bl<"rs/XU@ݷEx9AOx1691Ӱ4&e_F/O8bXpbJPX$2B$6KU=ЧmǶeL,9-UӾ);o|#r(TZjm ~m[XUda›fHd* +%J~^{d›Q.<$2_}h \GTo=U2cn~ˡ&׵j~Z T %޹!P9;}e6_j>T3.6ܯ?J[>Е-jC8O^$yCaEq3@hpe]E<1x.CվTa( Xx׽[/|]50SZd|S]e\BHn[na-_eEQoDEI7m gZ(+^QͪF?G䩏Jn[rSZtߑh&Dj` +x ԝ zE^9o](y?E2@ +endstream endobj 5336 0 obj<> endobj 5337 0 obj<> endobj 5338 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5339 0 obj<>stream +9l~ؕC4ٷpO[;{mK^a뷎U[CPUǠnRʅmP_wtwvYnYyhͅV*?Fr2"V"'rKnzqQB[H& &Iv{{>n!͌B"bWϦf %Nqa?SwAM$q9 $M'z;Y'Lhw\omNH2} ^CO),CCLz2utGn-%{nզc8/qʹ"tU%SfZ#}rdj ) g , +GKvChq\T)mgİA5Kƿaڇ$2{Q +{L#dqlO!]ʝkMY?)"=;bX@Bsp^ l{^2}`H^bE6(nk3{K*RvpeǦ!]PW❑r;.x|S|v]psӿV3DR4CbF7 +#:ISmDΜEq-ś5Bo))ru9eS[gTpJIaZ&> endobj 5341 0 obj<> endobj 5342 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5343 0 obj<>stream +,ϥP+b WXJ؋̙In\P/~p6 c. ɖ!Z9hx9m.}iq LOP*C \a+5{SL鉗Y" ~ tX/s~aYIVm0Lv YeM#epކ^3gmma¼:O¡I.I*P[ެN['Ht~xX]H>~.٫1[ +{.ȖM@Mճ3T +&H`3՝ԮhB@)y (m0#1Ͳf)TPo)œƇ rbHF6z5qXB_8{N+J*ȨBxPû[i_PґO#*13I)- Hn^7V\8/X~e5+ҫp:F> O*6qK/-Kv;r ߾7W띔W%[1q;p05ѽAYsc/5X4oLd@!{XHޔ}?t,g'2-;84&/M &W#cW_6Q#ռ':'Bf8 +_I˴ڌGd;LPofP*} 81p0cξ˿f;Ũc4lr`W!Lk.V g/.éۻE"lQlc$zQDw/cXꪕpǖ(|bZ>BT4HHmU~{GK>FGp9cȮ(9"~*͓}G*k 7݊H D +endstream endobj 5344 0 obj<> endobj 5345 0 obj<> endobj 5346 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5347 0 obj<>stream +6> 2Ԗ-EƲ:kb ']x]FGdLE0AYI4n*;Cϙ,+Cq۰Usͪm1`BM϶wj35T0d:=Ar38l5%ݟ0mՕ.@}1{XWyD% + 9)C>t|? +endstream endobj 5348 0 obj<> endobj 5349 0 obj<> endobj 5350 0 obj<> endobj 5351 0 obj<> endobj 5352 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5353 0 obj<>stream +38^2v΂$P{%.7JMY9 a5ba~ìWk@ +mԤjp9}ܗg7MlVY4gNDPY*z|| k~Ic^d@SfF{IÐNzAD”H&6g9{yҚ3`ݧ|ס鲱f-͜9(9RX|/aII|w݊uz}8<1h>zir=ZZzN +o}_OL}m9sܺ*!RiXH0)ݙ% ,:?%*# UIS+pWh_VaYI=fV1lWRJ`n榤?%C +ŀ9T^'ʘ+iI?شt Qv 0Ouo ّ2.5!o+=]dZq-9;%]XkBo5NP}:&Ds0WY%$ͼo.r}+7B3Ѳ'pthWqjv-\~QkƁFdG Χ_C-j)lk"eAqiAFd5ѥ<$:v{A1E ϻ{S;}E=mTӗgBs;9X$ ŊTcn,fLϨgQr-֣{ލ!9uS> endobj 5355 0 obj<> endobj 5356 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5357 0 obj<>stream +@. q W(?n6/+rS2]o}54UYjwPr% +c){V6 h\ ,} $GYdY271nѤs,į"WQxg$oթvѠ}$׏'! Jme^sm4ja)_>zPԨ;Pzq`OZ枏 hGs\3=6Ij9x(FhRpH"/'x_zr[;(eהdw2res qp?!e3qojsWtu{pK|ICeGRƼ +^bH\j}wǪgwOJp!j j?*6mP,#H/ek)r5Lb.&] mp6KbPuauL>nD7ԦO%Ҡ'RΝvP&@/嶨sϾ8YXiCSְ K>(3⣏GHrzQ]n+t'j6W O܂ث>0,o s"5z-iU$Nn}B_>Bi|'ݮQf#_Ac$نvC~vї˵զvTY6ɹ"1}lWhyB}<mBb$Q>\z>vazG:Y`rMg?f阤ۡG&[U_!'bMTGD0,ØɏEr-į|9l*B#9_,Z$A.k7s[ԒrJ޶1{; +3ZiJwx> + +d qߗ9wp$cH2.0}0 %?Ԩ]bE~ "* +endstream endobj 5358 0 obj<> endobj 5359 0 obj<> endobj 5360 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5361 0 obj<>stream +KZYP[ ڣ$)uUŹr<}Z<2KycmymN:+%pwCE陘Z +Jg0g _}\f4vszА@mBs)U ?Xh5E\-'梷ؚ!v}52(?-K @MKXMc%ꨏk),@4 +Z7*MQkm9H Bŋ8 +eAB1\J=ݥoo uoPN (~uX6e)n ʳ,@#?_=3442ZxnA皠)=0u9E" +mӥPf}lUɭ@}=!W)ir;nK2ބL@Q/k*C)j$yr!F/ı%;>j9Xy^ +4US:<'utj:)\v)`{XVTVLf1 D9yXƐ53;K+E(U%B V)4zIt+c&ڀ'UUsC(CS2}PZLTe3^R`hTY \X{G9fr-D`!-E)/U3} +(i ;|o齘mɐՃ|VJt7r~x@PyC]:\,l:>rsh5DpziCo4C\v4&CBa]֏\H<>:䧬?Yߜa#@'S4"n5$RU|@}k4|HUr ɺ N6)*lQ]9'bfPE\խVZGqiI"9IbD;LPj6: fk +endstream endobj 5362 0 obj<> endobj 5363 0 obj<> endobj 5364 0 obj<> endobj 5365 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5366 0 obj<>stream +keQɔqdpuN}}ٲ_쮓DjU|-~~*-@`@~%n'%p;O>UvkkW>>\~/R<e;5U}УRLx(w]Beb84C6jfϵ˜m<7.mRz5wp_n62'Fns|Є06JMnM;*$;- y-x="K #L"mʉƤZHgFDžM1:]m' ]G!B r,QNnl +L:cDFqSj!FhD'$R Z|`:z'>xV *Pnh'^xͤC!F?ECeU݌k;mGP;Y9fBtY_ZM[w55X9"PfA~ pH7RR}rq +c/Mwbz +1(QnLiM|UmYi{߇8̉j-Dž?iVp󜆾TL7 }IlgcCr ]`S"d4> endobj 5368 0 obj<> endobj 5369 0 obj<> endobj 5370 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5371 0 obj<>stream +KY k$tCx%+;"qC8HhJGa xII!]e_^zJ[^Q-BfJZ]yK\r]vQݐ܇gΠkZ]t^fXN?h7 S"UyL4"nY.`{"qQC}jϡ5Ґ "xdF[=j1G,Y<1y,YJV6z؜jXHn8",gFϗ?EKV6/#[[8hoðn>SҠcPH[u^,L9C<~V4uq._5irjۉj"rÆl 4]A'd%4E}dmc/?,4fk@+,GjcgvqA~gp Nc1P\xW2G/XD4g~j$$3[yG2`Bq'8A?>{ɳxa3~n$YP!.">bKJp+r8Gt6tRv]I&z! PӔfg}Fh9b1AD#؏bUA|n΋q [ٕN.zD*3[YetfkWbS+Td.~(ʚkhݑ HʺBiȬQ` 4cE+4͑(z5,K2fl(7F򻤇P>J,]@ o,KF{v?> endobj 5373 0 obj<> endobj 5374 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5375 0 obj<>stream +\;ٝ1TQw*T0x9=d|v;f> 9Ś#BIH1}RUppiz* 9"ԨXDwq%_Vϖu2C?b|B鮠1MR Gj 7\"y+anD[n %[NgSxanty*]O),Zfk(sSzyX|Zۂd[0=&@d'O=^:[Oq(- :Έhs7 FG('׊Ǽׄu Zdt/BpA#m.a?fQR% +?nWgK0܌yc/ݼa*`qǷuI +ꨒӍ=&XXU^>Ԙew, 澙JZ 'Y _8*j5lG:u#/4Qj0W(A_kCUtXJ5VohCTGbg +9 b F?:+^᧑QiVgP~a]JAuXbMuX*KFCQnw/|> endobj 5377 0 obj<> endobj 5378 0 obj<> endobj 5379 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5380 0 obj<>stream +Zd#!k68oX4tac#8kzגCո펀b+@f ;`y,܂wjYkC edKld'@`J g n5_}0YdkE*~PM}2$G,؁dv zO!  +BlP!"G_l !;锈u诸)Z0/o%lȄ=w1of\#-e}9JXH=a52M3-D8iﮖ|V7BB;@**>, r03Vo9.+~S/Փ2=x-Ėvv)$e[ih?0MڈB`tjCK6v+Sh6D!%J*h2!vսbzw +2Rѡq ٪Mn' YtUpչ$gP:mz5_9+KXȨ 9B:ݕbΘzÿ>vT5}(S猍<%_|hd;61BCF3li$$.$[<+ȁ0f~rO9v5`cZգ|ee$rA3yоCЪXW_gu]#KS}?P.Wt^ D)%̓ +&s\BԶ"WS6uxK|zc:"l&J7y2͌tRZŹg5Q#KOMe0a+s%w:)/ّNK^cc|^'x*Q޺,tЩ^vc9$yz2Z_>C)!h@6ؠ盉 6C B9P۶?+1\L7?Α.:qgւ̠nNgWW*XAњ> endobj 5382 0 obj<> endobj 5383 0 obj<> endobj 5384 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5385 0 obj<>stream +K+n3 X蔣d?oY|(z +#wQ`!я>=C&v?#$Ȯ7op܈whޠ0k>\6.g`{| BQ68ۖdfXS]͡>8hgnfN:Ɛ~ +@lI*Q=RSSS4F2'wE`k>;ObpqUj̪PpW5nڶ9)]QEsf3@ 5G0qK09z65|аk\B#Ēgj[uE[vܴ!\ېLitIй2.&eNA 5 Akn8i6=~2g|md&=7R.?{Eq.j~&~^UTlh5l"m#R-r]eʋ-У:vp\?:qPq + CJz v +Ytnv4;2մDa9=cE-.$%r,~pNP|}[!,X!R1Tcī=uQ{Kao<4&H0/Pߚ@9_ Po+Dm=]ً +9T`+NA +2*-'fdWhHդ#0yßR,R5(Kvp+ ԋXMDAU8%i(&W6a'ꬥ?;5cqICU#&9sil W.2ULob+56UdRW=h1tKqpZ?;XǟBp¯`|qK|h ' m4z%MMo9AJ(ZO?& c-[30Rϑ(2u-[>3My%1%&Rt?/:&)/X߮KN;,gjQO{-]Y'J.´d|1juUeD5?g^0 pKOG3Q֋{dNCʽa!;f=8E +endstream endobj 5386 0 obj<> endobj 5387 0 obj<> endobj 5388 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5389 0 obj<>stream +f1T75OBr2.-ym^;Jr?m=zTMܜV;N0FXȠgɳ+o䖱z#bN-D%m#j$h(Pnt&'p +$\ jv/^GY}z7a AN=RzWk?"3Vgj<v?ξ_{I .+abBQCbF,3\6#cy4Uz~㦨j WמkNukt\|k?MZ+Hr;JL mIZ(brf\6gvٴq +( ΚeTc7NwLV%bZ`KS/\OlfE+:[{RO{Q^,Vk"_Ǯ';ҡXrHvCGѓ۲"hX`5Mjr>8piZ/f`"@pt!hnbwwxP.2t v/IGC,+ӹú6G}81n24Z,-)>„~>="&OA?~)<1u<9d<~'P<q4-S T;ڃSASAf̿mf P& +endstream endobj 5390 0 obj<> endobj 5391 0 obj<> endobj 5392 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5393 0 obj<>stream +Hb8mpvL c-m Z,t]DغvfG7 9Ν'_ vAz4 hqsNd#1箔;,,Kw۴:W,Wg(!hɳL:Y;YM+QX<< [&a28G +J +y7-TF!:G>`WF,JI5A +:'[Oq)sIӸz j Ҍ/ e >X)u_Х +|, h#JUzB>04nS}' +AxYRgYuQW& +Le>T7 _=: e|Hll]o =s~D~ /%aS1O2jRI/ؘse-lI۔Eܽ;\a#t>`;3F5v-100ˠCĀC {!|i}9QTZH/:𞍈 +yOпV > orO:um]{E~t{uv BB> ⁝)+KL&`,"3q~0? O&P&W}B-Cw,p2I,E_і':ORb> endobj 5395 0 obj<> endobj 5396 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5397 0 obj<>stream +dED.*QS*kLW%<}.nsxרnxdMÉYO3%`n^-qAz\0ъciolu\mYpPpΦd ?csVVV1$Z}GO_Sl͂lR$lv6Dz34 0UX\Hk|fL^F͒q"kNHU`<, qjX`(:HмHJȓt1KTA +skuH'%!:3SE2w~ Da!>P >NS뀛I/p<4d:rVޖoIK֋B[FڌU{)SH{Ig5kBktZS%2+$rMAA +`g@5F>(7ߏ2Th+!;lz{!;^}SgE3IEM1˂5>`m ~ (պiAS? +4Ց2gul?w33sV!f a@xLfz-֘oy$C7a3;r ۖFZ=S&e!$9^ܸAF +$µ!se^uuNʺK}49kRMPU5La#--.\k،:|W'eb1¥>Y:k``P!5%D{zƔ׌oT d3A +endstream endobj 5398 0 obj<> endobj 5399 0 obj<> endobj 5400 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5401 0 obj<>stream +c*;YIg%m()PC{gCƨbvc n8.>ŏ</ssF=rʐp4V#}ds>ke5r +))Z,s n h^H&Dg\2_՛]q^ ܁0սfnW˹@6: sR5$4uc;"fXn4HA3=z>S9x4r:!T XduQ̒alvrtAӵMƣt3a +l]72jPM9d0$dxP7OdqK1&CIgR)W<@HC CA֠S)"Ɯ sH/l DHdI)"h'T`CFu)w>.%iۃ8ӗ]뗦ɕ 2Ʒ%[%T= %yիfɗXQϊq'O̺~ PLi`}d0%>!I>9Z+ʼnU.zJk֏3XIbz- ҡU˕`C#|'{*Tw!4dIDfFUu/oֽ J(Pph fw1V @uH +endstream endobj 5402 0 obj<> endobj 5403 0 obj<> endobj 5404 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5405 0 obj<>stream +WX]fr@|rR=v?Vԗj2KpSʼnB %1-Z34s 56=֢dLJûY;xpKԓS|MdJBRd@|z!O$"PUF:w`d^鍑W&$$ݝeҘ=uӿ?1,`U=c plͼ|<[jN}%z eBP["ҮrR2k۴(*lnS\䬫M 467.H GjGD=Xpws2r(:PqϊyˢX Qw#=?E ڨS +{\=  +B>Ǡ# %Jt]o%]~I-gQ+N#mQ"C(c?vkX`C);nڊ8T~'VM +DT9Ɛ3$-~ITm +=R"KHÆ&ӿ_qrzrMY|޺㹀Vl[ C7zlf=a"F rcTZ5 +I~6xޮ44"jO=)rtp[hiKʎ=07muJX-an'`2j~~m@B. 4^kG M$Vp]1z  ү#4} ˂'|.1( rbBȪ| +N)~Ic#?#9|ƿPXH%Hc8 \fq!lV aw7 +,~BBfԑcB}zx捋xj΁},+CG,;,m68/l'&qT:苬ݯ#W[)R +Q Q6>6g¢(/=ѤW쇮Y𩊱jWO_Ic;ɯW +endstream endobj 5406 0 obj<> endobj 5407 0 obj<> endobj 5408 0 obj<> endobj 5409 0 obj<> endobj 5410 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5411 0 obj<>stream +S_m1`*y?cU ,]݆w7+' W #o܃l-f|Q# &ss$cl-b0A\wեq+`2ZkE)8`/y {Ĉ7q{vCR8kipp\뻇/2E~ ^nZ{0d×W3H@ncR(2xaGA@22#7gw;HDi4J j7/,t t8z8LjoL@τaN:WrΔAG{[݄jk4 ds,e޾Qv|Sb68$Oe7,Vt)FhH"o/y}J6S'=M)]1\E>HU5vU-~1/.ǜB_eDmH̷De2RIf)hn޳݇W* q%u?s#eDwVÒ)}eX> endobj 5413 0 obj<> endobj 5414 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5415 0 obj<>stream +>'t"P$W_zvZ{Wq(6Z<(~RM#el ]O*>DK#Iw: M0+ObqW}ƌ[Pwfp͒7Q< Nrdٶ/ I90ZBRAtI۽ lkvKm/VqƩ23-.ZGbP9{nK^g2ӹhX_ܭ$ ot5d¢lLVGabSz~c"غz&,[| KuSD+ T^6+ACGI̝z-L$IZ5#{\njeGʅP!ߪJ"<Xʼnd4 +9+KEOdR1;V.lpHI%7.淯a?Ű P0ph8]b,r>Eeδq( [g>b f0uA oiQ袵\-o| +iAQyǿ-o"%z>B<7ujS '|v,4sSvjUj^3>Wawea|yp13kdaPLҋޏѵk6@R|Fts1W?;K9<2<n;gS)q]x'W'uj2x_Vv5/lps,)1p00bqIu,h7PCڒ36Tl[餣C(;$jk縞{HBx莤M~Dw,!5lΔr +endstream endobj 5416 0 obj<> endobj 5417 0 obj<> endobj 5418 0 obj<> endobj 5419 0 obj<> endobj 5420 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5421 0 obj<>stream +A,[w?:U .V`DV3R< T2rjN3~ 5z] /8Y6@]U][F#RAU~ ؎qFqlguEDIBgw_oD cEg,I%fII5ň=8DczFCf.s q&0XU*]1;/j*k97yP̆@uB7H 4JTZ;Hv{ޒ_6Xjz + +mAj&R(uƩqٔբdKOw* +og^.wxng)Xlt7Ӧcݤ~ZV-#kA{su"쬀s V^Y֎!\+Gm>o7\>H2M[wx$ۮ_rҭhE1Pi01w/޻Gt{bfkWyY}'l[><;`UXV]!Q_a+&]7^t" 4PžpDV;z}1˵@6!0〙Z8~ UjwOaU`xqfum_w8Ћϊ0J y_M +r?{Um-j/)rEB=nFۊeD+V; 88́Q˾vBp\1olOXlDܶVV0YXޡxғ(~ &>y -E*_L )t7Wi/3JkƓ~?;P9† =4~-}]EY#?i> endobj 5423 0 obj<> endobj 5424 0 obj<> endobj 5425 0 obj<> endobj 5426 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5427 0 obj<>stream +2r`pEȼF8z9B0m?9 bۡ҇[ۆcyθz(ϏʮbPitV%K9u'̰D)s[\𶢋Ux.}\vBw$_qQbxM>#{#TE9KQ  ՜Bgg42Q=QZreLK#FYxȇoƏ4C̨>S-I{\kcQ Qx&e&1mrK' Y9h]dJ}5(9Y=\ "Uϥq ?܏KF0)+H"oLrTHÝl@/On K2 Cۃ5CaJBO:S%zs uVl备\bcro3k&~S'эYhn\(T=P`^goK+z?,CtF ~ +endstream endobj 5428 0 obj<> endobj 5429 0 obj<> endobj 5430 0 obj<> endobj 5431 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5432 0 obj<>stream +?k{Q M,kz"?q W QIH_fG0]uh1Q{a♲28DQ%i,_>jKe&4qHMxl$߰NLt據hM +0\I[gZ8 +Hnq11S B\oê%6OejB]}Z MOQ8.o@y>Wߜ8ޱ@:f A7HIEݪjJ3v&6MQ%)u&k#Ʊ"SEWG-8|&:|Wۊ =جУF +pC=g@ܳnww_@f~ wTɺs!̡-e4r +G0J́?]?@J _:[P.VzGmJVCFhO>#lu*Es+m0yLuyv6jKd +endstream endobj 5433 0 obj<> endobj 5434 0 obj<> endobj 5435 0 obj<> endobj 5436 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5437 0 obj<>stream +I=Z`:)r~_Qбg$hyyzݻUNğ.iJЛ~XQ和%2HC n%/W IOLpE2v7Є9bc6dy\,;_en/ 'Ohi1S*TrYy 5߳kzn[imY+8 @M4iz&^Gҷ_Ȇ9x]SF  <[qDD-nr3 ;Fe\&G ^S 9X%2}&imIރ]r!Ê=h44<̊6/7/%`(rkMnA4:eR)ïCe{!mS ͷ2hq\3K2vN&a| 6OV)G G^{pTB\0IHH1fqy`q!yPr"H։*)08|N[X'3? 4{: cJV"&v` M+ +Xu ~?YoGy<( ]O(^fၟhwشD=,DAj]x6 =\an!!nӆ{trEXᱡ^^؍֠a<$/uU5/wR}5HPR!J1U64x"xw +}WA7`{|}s ? +S {@pkQb ; JP K5< hULJχU_H2[&%{h&q;j9wuCZg_[LJ#Sukp̂.%#9A+rXf=E?H56Τ\hL{n`1yz كއD2JfhU +endstream endobj 5438 0 obj<> endobj 5439 0 obj<> endobj 5440 0 obj<> endobj 5441 0 obj<> endobj 5442 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5443 0 obj<>stream +19ZZ`H}~mQFeYs(Ǧ7@}$|Yّ4ퟅ%-p(5<ūVaw2RW +qn +wHEHCI77/b[KKp#&_ӾE.6] ~07fmFUipʨ慼ɳ`Кm˙nL4X٪֜%ܣ~^d|Y1btM@ګ~ah0ަPb 'R$CW&PObc*MY8CH/DS +IM.އ>,Y, ?IM ȃ"W*r5"4$-~TFIu׷'',Ꮫbmػ`d' Ȋ=k) ++Hf#K 5:#o|`;[GC}P$ npBS4&u|@|{ƒˇa8 yGSLݸaH"2 u~Ǵ".T{@Ym],(N ]މkzM[0+n^13:T]E}&)EVA n AANA0cەHEL]c/}҆W49pڤD&iy/ OF0-ZU]mj"RRwRT=%QzZ3Z>hsH94 iQ=WD4(b>=aޢcFD?!KjMcOB3*ٟ\_!N/=%͗ +uvX;XT5f<ۏTJzӹpe̺g^^X͜GqygϸI Frk+HɄ |>ܫs.@a.O0&Z9ci](H^[C^SUhш@xCg Џg4r )47bRuێ~DF0`do "}\ks([TCig +D$Y] hI +6(oX!(͘xg,"R +z=1\ +endstream endobj 5444 0 obj<> endobj 5445 0 obj<> endobj 5446 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5447 0 obj<>stream +^)#nfgH^_|1Iǀtk؆~/I*wZvQrhhw1BkzpSHaxO>N [贃|& "'hjox;G 4:Lb"ꕃrQLOmltc_AUTJ6_{߻Us]6u?KwU +W'R|FqQ?r,k?|A xgt0r6s@V0aNMP%/ݪ5@zfInjt88{'B%C,?{8hfk4Dv'޶ơ>Jog +{ 0+b +Nk-LI{.}v#M +?k6a_<[}U +z^AHc%HDӶq}˯g4e}kg:Ƕ=0}\dO``w!r}wVɄ~6 +_XX^.pvAxēC0_DD"į`6Yc(FZJ($4n '=F]()ޫ%%|7LRX({\4*Lx"aZ%mD Zx4{R1UNYn0Uq A +^3*`,:U{*~ӞJgHXnaϢ^:Wʀr\ɬOt3ay]u'E GCiKouM}}] +4 #SF|5]xLR|JYA5~> +meelG,#ٻn{#˚D>ʌ1D1mf@zrz'@I3BJ!G뇹QԹq1fݼY + qoָ%wY4%9k@ra> endobj 5449 0 obj<> endobj 5450 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5451 0 obj<>stream +xlOλ%,׭wQӂi4GSb\k"f'!SHQu+4jBN͙nz`|X## E_ƙnqv ~au~`/b5i/4xGabGqv.du6n<{5LeATjAhBd#εrómqsv> `J:֕jno{c4#:W\X6E"y[@ \TqxlE.mѓjN ՍpZM|@.B%B gp NId$,5h63앰yTϲ+7z#w+ `[9/I[iS\nޓL,Eܘ-ܐM]jwY{GQX<`q M)_p 4*R=s{ UNJ;*bmT3YnߔZaSU&0%# 7Ei/<C/g}>!ԑi6UX(-jb?;@6V}r]lV/D:r{nFf51R~ih}˪łzBGQ,,u{ +5BT U!c@r8RƨXb &eS0 PE +{6-Ҋ(nU_I0v"r{oOK;Lz}ཡ]-[e%` rԠsџUfD\%D>ޜg~ +endstream endobj 5452 0 obj<> endobj 5453 0 obj<> endobj 5454 0 obj<> endobj 5455 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5456 0 obj<>stream +{pZMW XJZCU%N8Ron +&2XɛJx;C]C^^x-$ >\)=3<8eϩ?CIЦ3,OFɐԯЦ}eSS{۹tY)`Ag4s]B%`Mu+wG@|MX:D8An6W9&DRhk(X܊o_.E͔)MlXjϪm:Բ + +\[rI>!ܸ,CӤ>Ts9)4D^aVu8>`L> $8|j^WQF-K ml0YY/OG^rvHaEe)Gxg4F_5w^}k͙e5G98k=ecWn80Ů._7Ae:Q,ډk3L(bsⓅ`\ie@K;>7 טyxDU? &8Yr83|>Q\=cP<'1c##[yZ36P!|..޾f:j !;ȉc%hD,-DYdqOm9Q +AoF;Vg72ҧ9ע[Y.AJ9!&Zmyu[ i4SoL|l Bӱ>|;ǾQǮm#*upb' ct!Mv,im/WowEiRt628n\+8) d[d)\.5JYHv}i  xIeR&7!o姏e R-'-I`T 6JV-߱Mر0|aZC+~ dsx~++_DA؋ "ݧ/beC[0F`Q s|A5 ]31+3߻6[*d1y '%g>}AZR*K*&C3[`_= Gdg.$ߣ L^ȷREiWQDĜYg,Ip0sO/ØFAΰ0y:WEw٠M WO.r7 qDBnA`Xd} kޚXhsX5:(z۫o̯*. YkM"IZ2 +endstream endobj 5457 0 obj<> endobj 5458 0 obj<> endobj 5459 0 obj<> endobj 5460 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5461 0 obj<>stream +|NآATh! +hoPy0䠳N`FoW;NNJ7~a]KqKiRc0>Jd0Oc>=r]>)w٪U + 7_ƟL#oӍbOhK[7mnp;^u: +$]sg֙"{5mx>-D1=k"9 ԖW`DN0pK!K]hT(2[!lͤ½O\0 *ؒQJ)M&z1Sዦd1?;ɭx>fH )/Kbg F+2XÖI|7ӱ4UQfObGFͲ +:>|o %A{"Ox$ϻYtYqBac;) =¼C9SCHM{~~9t +@q}b]&G+uށR`~Nf/lc>>/]~ɾd"m܏ADz%PCZ05 .o'q"*W,WaM׵foQOo 5.IԷ"3{o\K܊jV'sH$ۈ4&rtw[BâQ󓃺#,c^vP7|x^M4|x[|*mHu]ˤ1 potK@@gtr U7 ;sv޼-Kգo7idCͧ̕PoAce噛#{",^:ID&"%mVwǑ!Nk)}T1]}[]bBEXf\Xbœ1'b a|g.Yͫq-Z!\Y.IxD=*Eq!Ft񺃈;9bV"7!D!ܙy'ca+|v[,gćrU8z!AyXeMPHso`(? N<2[;RW1 :'+,hᗪzh\#*o~eI78n171IHڻh3D\uyHd[iHJ5aT#W~6A5p޷x*F]ANvF̈́dW $eׄaEkj=ڡYe+/tq>EgN՞%ϧHKZrr666=RO}ͻL"Vقɿ1Gk{>< +endstream endobj 5462 0 obj<> endobj 5463 0 obj<> endobj 5464 0 obj<> endobj 5465 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5466 0 obj<>stream +zMXmaeUcp("Nv=LIlg}8TL[u)rkk>_X*7P #Z +)P`m1Cd>j=AKvU2|Z8AO,b+`9>,9i.o"iI/8hh/џ$si=ސF:MZ!6J1ګ"$& S.]!|7TcS0g,`G,[!mg1] tI3URD(}kR%swg(=; +oń.\R*.Q!4rQn4Ɋ̘! Ԯ.Z$U\^2`9K1L["H7i OdzRܠlj?T j[.\-J^)Ytqn!Wsm`L^9XkЃ =%q@N[E5Xb{*nՄ۾0(jJ;E YGj"r18^zZ&2 X)H_i4ЦaP"8s';Dz\zӍ.Yd1Q N?=Ɩ~䯲X]̂H;]c#%! +endstream endobj 5467 0 obj<> endobj 5468 0 obj<> endobj 5469 0 obj<> endobj 5470 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5471 0 obj<>stream +Oo +@4E%Ex +0&l1+"pcשzɴxt å|Wzv#UHD E +sl{U%܍/hZL/`iPSA}4Y_n(=p՚?8 +(MqJ0!ōNNIQQ8Aʎ(f`{ d/F\?uOSd8E EXBďՕc ē!wbdD!o7 +<8o{D -#LP#gn*:淿pݿhw(ioL9V/72yqh`Ň%cf-RIOx%j17y̌t6#>6z,s05CC,gDj(u;Ȕ]ho +Rڑ[&NQQPQ{6-٭m1g'}Ŀz)D E@i3i'Pun|ᤝ"- bo U4ڄknG D<Oh5+-\S+~鍰 "5 L;4}MtR:L~ù'PG-B#2bp@(_h.rlfv>k"h.YNa25FQbd+6QV.>Iu4&?JKyx`UA]$B|~Y<4w~N4!qLz+|~kUkƘ\( -F(U0O}YLhٸ|Fs _h1cSLt;ԘGBIoc i0x-Q(vPvnH[c{ !@Fvj?϶AN̅ e2aGNqq 8l`8Q~(v.c"\n=+xxx(1=˳>סQqY(GM*+Hz%4pT-b}y>d9'F +endstream endobj 5472 0 obj<> endobj 5473 0 obj<> endobj 5474 0 obj<> endobj 5475 0 obj<> endobj 5476 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5477 0 obj<>stream +^?co7Ĥ**_IxՀ|xa!^}J,5Y(<&sFmh ?OVw(H$Ε DEcڠj-6y*;Q\ݯf/;Dr7}!#` +9M\]?}nLW,,' 3^>9U,nqfWf4Qq{eJY:s;YezPs\"peN+ ڌh394,Lޞ-K>sϼo +v[FnԧΎFOh0}Qz] Ro-zûO214?GVP $g|GF DI$s$GdAaɴOMNj ϣz3k)+TO$h_ Zs%uW$ 2g*;0D >N>ٸOoU8v@0) +j⭸NuC^CWV&ch٭J9rtg_CjOIqVF@(T6"_ps굴z|ơcX:9E1 s`eO?U=&WO)wjoF5?j:A8V&n&WGc5 +],ZTdXTL[ +dzP&Vqc}g dL; +G C;7\U| .J Mqv{KW.h/ RѸ<:PLv +x }tB+4fyVl2 kdW GQ'+ȡ_F"~ugYNhܭXơ(; +M!b~  (x qƸSOX0ZV8;w*G J rO+pUR3<eslsT[& f!xg?|9eUPƀI ++r&Ob9ǍN RSǔ#'z0ND#FӒ )te{:KHP~CJאjzk}fp"< H!9;lEeV%qWL]C>}㿗pGEgPڰOp-Uɨ}j!5Kr2mÓ!Sl +=7@qa;= zĻ>x:? +m",1zxo,ʼ,:V+Ү[UY~ += :X(@?RՒdz'j +endstream endobj 5478 0 obj<> endobj 5479 0 obj<> endobj 5480 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5481 0 obj<>stream +lT^v= s!nMxe0}!OZY_R"5qp5 S)4ͻ|_HSy 蝼2tP]*{FZ3jP)ƪF:ݎ05N9x +_1m;˝^rh&M`V#dJG(+$e`9:7njjTls4SmK!<2zyW̍{wWwlq4¼<ɐ$T\z@O-tF"Qw5]%WM֏b]W#7´L?`u/hGee>FH 0tza֟ɱXeL&[vZOVABxk['桕q&lver}F!.!(DwCt>gCݻroWpʕ&佬˼b'ݨWf8د2%gVFNpgmI߫qZRiL, ۫" /(9Bh3%zg#i΢j'B#D>eh#7 ڼZ_fiF%Plzʋ *bSdy +qS'h[DG2ʈz^'uJ$׹G֩(%A'M +15XdJp>z$JQ%dHGn.^ Fp0;66tr#i8_ӧOhjoHU[p''0x\Hn Sed}fXy#cD`N"֕|14s@?E֥3H9VL ?!u"r$FŸ.j1T_MƉ$#EjA{X9YyxԜ^)Y&?+9|m풨t2H/L|/P +endstream endobj 5482 0 obj<> endobj 5483 0 obj<> endobj 5484 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5485 0 obj<>stream +}:hLt"~}CLNF(4rgmQ%`حդVAYLd9d{e/XOHq.B ιr .z.:ihg-Xq-XCB{ +>h:E]hȗ;z +v^zų|U"Drw}q7jÆ𨷀>c,o÷8a̱d!6 +]m1+@fZ@T169oN\UxP!7SKK kF|&5Rwc%Z #U}t&D00%KcD|_k?1Y#4prc +endstream endobj 5486 0 obj<> endobj 5487 0 obj<> endobj 5488 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5489 0 obj<>stream +2+UQM w _L6я^ZsԤY`rtZL}l1xck|my^.0 0f!~: w$I}Ҿ/|ML<_ċ9Fy*;`w| 4 5ᶥ.kVJr#s$[i2^/K^tk;^Kwƣ7N=-Q)v6rpw^`H/"۞a7HzuZ;؜S[#7dmCGU%3+8|&41 #:xP_:>HYz۩i%=ңmPjV`ėd՝[s0 4I7@ycnT__"LJoCXli$âʨ\ʈ;!r&쾶6o'Sq% 8&WDILÏQl_,0<ӄgnB$9:3r.ؿ޷KV1Tg8 + $ui@lQbdf7]فZ΢'+%T~ 42} xTy*6+4YR,k>"?oE΃? \i_[%]l7"$IR#1~q~wk'?)V %C;#"1w_@5\3\5HK7/vGfB +C g̣R@86bZ끍HY_)ciLiBd pDPo#!+-({96?蘪H Da[xœ^iRj֘?t2@sm7qjAS)^ ^, +endstream endobj 5490 0 obj<> endobj 5491 0 obj<> endobj 5492 0 obj<> endobj 5493 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5494 0 obj<>stream +(f8b.˟Ԍgi0 p2x7e=AhzASQx= :>5 J4#{i^c ,:yRYH*9#Qj2Y)=xDXADTƂ6'p0J#/)B^ +⼢׾m( + +&f!\LO$:if!:~T|iC_t7 $οYZq:o".ךq +?$ ~($gkaJCF+!1)u:O?uj Z$MoW{:<[/ _\4>.|z9֧1k"լYN.{7*jK!@~p + rSqJ_/- r%XtY0>&6)pqMP`|:@"we&kMBUsP]y $h: b8ip }&ӥIR*1n,{h6 +=9iE+nMVR2FJs tl X^ϳvN[Jf0&zahlw+,iU'|8T"liy7n"P(b#Cm ӷzErLRcQ:fIt'㭦n > endobj 5496 0 obj<> endobj 5497 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5498 0 obj<>stream +r3@.MpNG&ِ1=_shx =#\hFkBu<3629u' #-VMgU@O)+t6P^-5i(f̿ +}~M\8Nb>BKBN0β: +`_̞<p4 +%1.j^2)L0Oa~zGSꮦT͋̅P?kcc\h#c` +5g")|J 7^-˳7}=H`j>>{РZZF#=a8('*KH$NZN; +"`^*E^_ v̓w'hz o1b-E<j˿きΚѱWڥ8=LqJ"%6FR[cjZcv1N{QL%>a7#7֜mµAru%8^x\?&Ur-kdT +endstream endobj 5499 0 obj<> endobj 5500 0 obj<> endobj 5501 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5502 0 obj<>stream +qwMiо?KwS2o}_Kt@AA[he@A-d$EQXq@Xvk +AP]5ix1K4w)/gF|cڎ"8#ɷ}kvR6ZR,z5<(rNhY'UJEFݐc2`bIZp YdA[^^Oh||QL`K){URE>H2젍3{k03MW^BCT(s ?ާXݚ.].(t pu 4Uf@Bw4LK% e*O^ sm_ێF|eT• 60no0h|z  \ + )-GU]%WћkB*ʞ:`PBZ@Y|Ŷq6%ii_'PA)˥:ÒAR`QN +<̓<#Ch ޫ}5 ^1,HEͮ2TJJZ@GAA0e #ՃjDnjҤl1cw 2nCzΎҜUQoǫևW۪ʾzoqHJl/g+0M 엜v՜n\t̾{i9щ?:HE„= +#U7TGI938'sfi +endstream endobj 5503 0 obj<> endobj 5504 0 obj<> endobj 5505 0 obj<> endobj 5506 0 obj<> endobj 5507 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5508 0 obj<>stream +Ն߭),늼a@%h5fJ|ߩF}|p>wҘi~ox#iR`'Oe6+rF6X!iyRC 8qxA:BbqcCO6ad-eUÖH۹Os P֝Yx UXB4=w|<'s _)nE=Hc݂TL^]zp!+DTz'FSD@ w|NCoo!8'С+|\%4&zc6 gS)>U,1^61 @-s _la B(;3J Br]YNxBBt櫯A#3#/!܏0&D4!7) і?kX'k| N"{IB q؇[ EoD\C$$E)5oNX,O,|",(-Aop"TCa-8)_Ji}c`vrojPq|OUu.FD^[-< GjGIDI6Vlҡ\B i%ѥ%b L6DVT +' j + QP(t%Х!W:?(?xўH3Ϡ}'ku1+~?W#=ѬHx-Trw +OeuKUs'މ ދ-ޯҪnnTA;.]&аm) ss|N}E`kHaGc*xBtgOtVmlAlU(v/R[x`/ǰL +䂗^Υ'8UPr_=__eW8"1>V f|vQ=0]*t$moN$:HE.!:59] @◫% +^T2 |) q|AHP2Eh$}jFpO6I'At/5rdҵ )pC:ү9+w3˨6kE-AJVfsSM6B>yNniWqh>}}|+OOvx?5Qo _Dʫs#(ГQ<⪫OJz# 0y-tZ~a$ f[OPqq$)N]hL |z{J{4e*:@lm)Cf^9O[M(#QMӏP0#9J z++N +endstream endobj 5509 0 obj<> endobj 5510 0 obj<> endobj 5511 0 obj<> endobj 5512 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5513 0 obj<>stream +܊^/U|C=_ouTR[3\x h$k@h,Rw!GZJ4A-IYįL(%Ȯbjknuns؂-Ql@G*  (MimF%ew#DhQnb:UHUϻG>bK$N[\6&j}bl$Nr48_|Yo)Y 9鍰-WDIjͽr_2ܸf(X.@uAue\-@K8c Nlz4ifIXiKya IpέJda -B8+TN q +J$Cp;H*_Х Z-pA<`{FhQл|g>IZs6;s4k|6Fݎ6[T}gzVJ8~hsur4$Y!89q4ofM @ȏfޕFg? +"W3LJR9tΝ7N:|:VbubTṼrtQ~D+~A0x$"YуKIJx&p=hc +"q7Pwd pl[*\<퐵2H9gA(;(,w|1;iE?i!r#RN!a^UN#"-Ǡ٘O`#Y0B9b'۵|֩SB=>x7hZ(mj쫏Xi.P\e􍵥= WT~U4M4|_(8W[m( ,!+Sd{xCƸcqgx臛G2"WʁXhML~;#@" }[OovlN`]Ci?T-'B_-3]+ѽ&R*KǝԢYGzW.g# 25 j /?yF?yP9tOC 7g_d^c4'b4&Dar31!`W? `agffzlI%iEGHLPthO8PW`vi7j5H=#( -x> +endstream endobj 5514 0 obj<> endobj 5515 0 obj<> endobj 5516 0 obj<> endobj 5517 0 obj<> endobj 5518 0 obj<> endobj 5519 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5520 0 obj<>stream +:#MދOs8Ih(.8Fzɭ5&bLr]N 1꿰*y)JOdQe,(-͉`1$ 6${t1(q̰\)/$[Ҟ ޡ>\io@ /ϱe8.K+U 1THs"\&@4O]:W\ra cFx߇0U^S5Ӕx a)"Ho^#y'`k-촇=8:p9aW^AO`oʏ(G ׸ 0U5georP 'L-P{?fK>>tS:A9z@RpfY L@6٨;Qbv0oy\ar4)Ne \B/9Fn$~mv@}p@4di㥢%p )r;.%V +[po#9>O^-L:kͷyNQBh%8=鮵K 1lYFΟddW*/ [$w;T[U_@6/;۞]=:>8<0.d2 Q'Y|DT1㴀UwfkQ6OLr3a/]! 4pnՐ~CQߤ \2{5bQl+36Ieu;? ++$n"$!$:=6X XvI dঔ pOٷ!1IABhޒxtǐ!u-9@QQY7uw5 pW˸}:!|?j/Iþ?nTHXU4(UǵN̨uWw\Pמ8~&ݭ6ml;ݝK=W|(3=ϢjWwNq +endstream endobj 5521 0 obj<> endobj 5522 0 obj<> endobj 5523 0 obj<> endobj 5524 0 obj<> endobj 5525 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5526 0 obj<>stream +wo ,Uj<0u8HpE=S^ǂ ]u"3O@z X 3vTZh_*f"A˧ٖ@ +84&Z,oPcT\~7g|_5ͨ"ܥ]ɩ8ޙmzCQǡ0Z-- u령e Igܸ7@HR.W HQ\ {ה DpФk4Z*ه[ߙk$m722 ȃI8[j8h7\-勂j.ׁ5aI1LJ7pq?Lu.6UdmNfLh -dtXOvQj~82BjmBNoaYafZ{^/ +Ȝz2(zWb,<|"2Q6i86GY]_*U|bWZ0P,UA6'Vr"[6 V+ + uvFXTpJ~ hIio x\Jїr_ l;HѠBVs@1y9Eٻ] 18> *KixKYtdz3O"8uxҵ8G|}ӄN>P\R'k>yJ<ȀsxÈ&/ZVK:}Z<Ɍ^.Ls0j9l SsBαqfJP#Ϊcr#=٧cq+.g.!D($#ZBdž3xx 8W<sV@aBTBimH%DMc?:S3]01 6uttixp= +^id%8)t[ֺt(U^VI +endstream endobj 5527 0 obj<> endobj 5528 0 obj<> endobj 5529 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5530 0 obj<>stream +H1|lQ!"`|\i35f5{7H K6$%y)} "2># [H3M=b(ϒZɨzπ, p.W +hL'حʞ@ݚ sdT~8yٞ]Ȉ6NqIݹ<[^/ɼV*9U{bA2λ.%ghTљs=_";u}ku?8F0@u:21퇃CfJ\&YnR+c֞x@cvfe<6)w U Kɞ] v=} 5~9eT)S] dwEv/64S +h0.oM=C&3itSI5m oY\m(xHDEm8t' +endstream endobj 5531 0 obj<> endobj 5532 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5533 0 obj<>stream +5G5`KbI^Ҫ<ر:DF{FmsaEǷA2?TTKP-~WD̥˯hö+p +njc()S'm)%+s4ɯ5IkWtaTSwjԹ0 ҋ}b7y@8R֚BLIub9R>raʎ{!tϴ4D8^!Y&F/r>Ȓ3|kEzo8 ÝX|sUr1Q^EC D2}!ۤ)|[c,~B)դQQ 7(,/:^ZO_¤y.Oﲱz7/MD2 +endstream endobj 5534 0 obj<> endobj 5535 0 obj<> endobj 5536 0 obj<> endobj 5537 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5538 0 obj<>stream +<]x\pj}QOڤR4wª=(CF>4رt;4M 4E&!uhq=I `W!'ƴ (/\cm<|,ߐ"Kj5=jʁD$ =o._!uݳ7755b2w.7eM >.+h$nY>0(iQ ޿$EȧޮS;䯌U +RFO}~Y4} +eG%HeFQFf\~?՜/#, =)֎d^<$Qf$ӌrr5{1"A"U,@F;M/UGA _s(G!1,GRqv!`o>$L|fp?ս ʿ>{DiHXK}T֝*9LZ<.'^*Ȣ&<5?:.#Pv}L3w>ϙH$``p-&In>BPR^U7ځN Msu! ^>!>z "2o ؂ @KZކ(E:! ᾧE(T 72ų882oďo쬕U)Az(͆N_N*ݪDW>'j`)93Aim,eT3%ͧa5w-7 A^w-J' j $ŕ$cZoFW.K59 1@xEJ9q,, I> "zi&QG{hN WOk&ު;;޳fBi1`F䪣=jQ嘉xaE&g l?߶,,d=OY7}u\!iukSEOvłˉS;q<C@f 9huj4{Sކf R> endobj 5540 0 obj<> endobj 5541 0 obj<> endobj 5542 0 obj<> endobj 5543 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5544 0 obj<>stream +/'ZxXv<':y"(iY~nytiRtV֞{,+L0?0UTe6M$B0@F_LZ2Սq"V/c:.U!; ź.B@5H> 9yyrf풐QAy)%N펊hR},-6!PP6L̅X&S|)\ϑ +aKXZvOy`mr*C AXz?Ȼ'P{ Fu/1^̂{!1얰GR؍~fu!KkuMvzL }'Ҙr@AIj aId`vHaF->̯?i)~liOʽ*3N"]lCJ.mCH|. 5IVWAP:r"7WY딠t5)T +#P%ms!=A$I$soUY 7OnZWuD60U~"bjц VJ61*Fٽ/;6q*mi L&\8=NqE^|ěJmԛ\y#͌S3bU0Ȋ"8ftvL6(5@<4 zK~mb-I<> endobj 5546 0 obj<> endobj 5547 0 obj<> endobj 5548 0 obj<> endobj 5549 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5550 0 obj<>stream +bd{hRsoDx邀TaA#Sy5{%vQH ڂ[Nxt[hl vN혠of]Gђ l9ks;5BE_8˄|aQuQ};s +8ygQ]k.z.^m mxc%k{˕YPwGq&ڱ%~A*xp 9j]"nlʂC&; {pNy *uY$#'KI&h9+Ӣ$Zp~!>"Y/Мbؠ3])t*QnN +3Wa;E|RD'yH^bO2I99yɎH͓Q)n#.h ᛓtYR`SY0ʻJ! Z\v˓dB`Rxz;)_J w2 ϑ1-df+|cpe~^PTF.n9PV6ui%ߗ ;W3qaUhnU[(̽ ErZl.LSJ}U3WJ___=FI + 8gCg0n[F(yGwG0F$p7GK=$`=Na;3nQL`j _NJY3ڊr‚NcZ9Ŝ[6cdقA쇯WR|0ٚRԯ"t+D.snj.8C? ThxfS9C`rn_[rՂ> endobj 5552 0 obj<> endobj 5553 0 obj<> endobj 5554 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5555 0 obj<>stream +Zi,w3zYUeo`TPxQhXVx#.IףT/T|l0%p3\~ +lЇȬH +Ciq5Vlj7|*B,CH Ll‹Lx|aeq*,cоFlqdJy!'@4 RF#rH bݕ/ov-66D}h4rK['9fpKOE5ٺHޥ +DcM6!6`Nt6'H_;!WèF  :ʖu:;w 1.,4/,7!WcC]¿|(y牍6T|C'ϒI֜fPNVCA0=fԗqވ>j% +5X8q[IA. F;.a^ZoxWfykz- UY:v<^5CyI s X}~3; ^Dʛv_tgFa\#e%9pcgJ\6FגʓHUv 0&MW;z }|/h*h&٠jN+s,{g#-Wo"?\PipG)+՜M3,2F":1EF +7c><&~88 \vOZ/3t!/^q@b|>~FX ܞ> endobj 5557 0 obj<> endobj 5558 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5559 0 obj<>stream +~KH\5X+)7=|CŌW:e7$wտ!l{NY?LX+&T,PmV.!lo-/^ߌj oO>r=x^40#`ܿgvِ$ > ZlUX)Vrvu3OY b&Wо0xmX>J9ぢyUh`5.E:ze= oNÄzꉁkİ4:ZWyU`[!hbO8)[# h[4ׂY1LOkPP5o7ܝ:\3b/W(bR0C]F*ISQޠv}iI />foD#xiNEIwMrl l7O*{Jm +endstream endobj 5560 0 obj<> endobj 5561 0 obj<> endobj 5562 0 obj<> endobj 5563 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5564 0 obj<>stream +MK{dJc4!4[1G; +V"]5I[O{GAW'=bϤx2FqMS=حɑ,^@Y!0 bhJrMF_ݳ$Y<5Y[ܲ2 Mm~-4QcZغyR$.&NħAbcBy)`r΂{qH=?(tCyx+ˊ62q4u }L#q*0կsm?aլB7r2!WViJ/DݲVÿK9E_͢Ȳ%ac#I:U<[Bf>hk3gk +ዴހvi+L,-ǎ@t<>q:1ɎrZt(Yew +ݛb7ā^B*ξ.N̽Ob& +vYYڵUE>ҷ/AzIؐ[,C4rf>YJƮI.6 ٢Ҏ T6o j#GX *M Tw՛B8ʃJ}n8r2:b;puK=t%1z[a#pMYAӵ?Ǭx||G3]nFJf ^r89i 访F` q6ܥbnd@LJ=oD546,Υ$N68|É)3Nā1N`ÆEsZo27\W̔n^Go6ֵМQ%ۮ\]iHwһDBRB俍wN芌Hk|8:|DB~vףP]= ٙF6⼣s @T "Fse(|X; cB\1z6j|aQ*dYpPRs8ID*hOe6viIےF<qAc>i*y +endstream endobj 5565 0 obj<> endobj 5566 0 obj<> endobj 5567 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5568 0 obj<>stream +ec6 +endstream endobj 5569 0 obj<> endobj 5570 0 obj<> endobj 5571 0 obj<> endobj 5572 0 obj<> endobj 5573 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5574 0 obj<>stream +ܨ%y=S%vKKЃEi>k 7ɎKb@yD!jiі*(]P -Z»[橑3wræ\ ˽H+( WF_z }?ËM׌W-Tj\V$*E0t&=ʸd/dj̻,R->EWM)uDvY)ݐ:%o@6 hWA +wy ֧$; Turb'C~om*y9MnDи{2;1Pb[2;8x +d#`2r+Z`k[,rRmė7}1]Ƽ; C4X:Q0+um᠂9x4ORQgJ& +v1W-tc4 =a'%9`m] -Hw"UіY;ʻ{&(J%8OXy|`8dafj#RAֹ_+R{v:؝DD KVu@%vōo*.rvu2 ϒ= +HMXym!(<-T*5Zs\OL[֟|q0ܑcC _Ꜵj4Y)LRօU=z7Aj Rᬯ +Nc5 W?ez/!q a,3?<:+i>Sjx-lJL 96h +z +f؅h}gd@̀{HH7ک034?dVBяY;LwX3DndaN*'oAGP]a> endobj 5576 0 obj<> endobj 5577 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5578 0 obj<>stream +Y w{B@ݤD&?S y]%5 E۝he\+L4l24qg -V̛YRV(J[cJ[u⢌/be ?PW#ddu!@?%7WNm?dgSӍ>T4YZfcfȳN?Zgʛ,`<F,:5."i-'#jO_%h5LuD]^xh/־6,"}]~Fd";0j`6E{Ɍ0s:Mm|ügi5:$b 1p'f쾏ClsD|H~ JA'8wԡ{'0n_L2M(l`%5wiZEŦNx"zNy'פQ Zek sX> endobj 5580 0 obj<> endobj 5581 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5582 0 obj<>stream +Z%>? Hk%bNgO %zS +u} <~CCm%TwdW7sHX hTuH+^f,/>58@VD.U] c/ GVR7/^o SiOl/-VEVnvmF'c\35c-%Fe(tNa0xI`KGe#B'P$XN4t +[I7tkh)̜Lc8.X]!^:o~Ior$U55G;(DmJu^0zqlp"gEȎu3 j{p do0:`rd Κqqs}7bg49V )x{ ?7 'Ɋj`:`3.h,d'@40.̗!p؇u x"[vp-xzűW}iADf~ ׄ u6ԟhMmUa*Cʶ8ŋ%Zz]x4 s9eG^zb(:QK F=s*A}>`oH2"AǙcl: Rgjxn%K{ߏG>t6"-&P mf*09mPC}Ғ~odD?{mJ3.[of[/]pz%h2 N#+ "%_ŏMHrޡrk`5*_-~Ay)0jIQC|L5 P0c H<.{u _:)Or ?9[c|m!@XT& B15Z6 "E> endobj 5584 0 obj<> endobj 5585 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5586 0 obj<>stream +7wO֊{GQGhkzEK,=`@3 Y]:)^"4(.?'A&̋3L#4%/meN[Y$E @MwDqCX OX#'%D|JO3H;DwDJhٳxVN_`j ]MgQ2!Ў>cnjTxXmTRxNQeGLXc`ãP;t {gK伊be_[V*F)b* Om?.tE'xe@RBy)3-ΕxzR/pY4|1^꾧Pi Bx[=8[t +&c!iZ1kNj9j\(%Ub%H/R`)&%PWW],TDC{3bߓ E/ JB +endstream endobj 5587 0 obj<> endobj 5588 0 obj<> endobj 5589 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5590 0 obj<>stream +M?[;I;k3]%ZDQQK eAԾ=p(vpUᛥ*1z;EG6kؽ~OO?ɤF8u>kkۣ GȦؒ :6-!n,*0i)ml4ux0Lp#a#šA97prT 3o V*p ޞ%3Ο`,16[W|*6obKj^o$rVk8_z5 F +g0_#bz燐\mr&T_83u%Իg ~q-xFw3}Q>͏7LYYY^\Цŗ`Ni_J}?X#^)+ŮԼWwG Ù\Oq#>qXvin<.!%8^lW̖6b~nj)Cqݣ\UvNDSYIңqx ]? +7 +[ׄ=%sKTLeND; nCuHM|V|$~U8*\OͰmk>%_Arj 0Ž}Z÷smQ7alܼ:yX=šl*ay,I_r`s%:%=(ZYm,1B֪T0G#ynm]"&=Jz,*_.*!e>cb>=ws8uś5_6#_ˁ}?:(JMR`eTcUNJ f,Mtx7& a +endstream endobj 5591 0 obj<> endobj 5592 0 obj<> endobj 5593 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5594 0 obj<>stream +zmGf,&~y ( {p>#,I ޶>YvkVCJ'} `?So+iy^Kjߜ9B"®X6(l!-T.-+!շ bSeh&3f12IO{c@gO*l6b&΃,pAP޲0*Yis(Cpċ*}5EvèɓJ@:9t?|cZQ?8q uwצ f]׎mmp5= Y'ȵǢ( + O + jaav@STΔAf%G("n\/4:x0d'e2f(9Qy8Bp..$ժ9Z{ =%kLݾ`=( /[!9wH!2cpZM`"a|m"uaԉi +aҀ>Bɩpa=1J oL?tPt^,O_뢉)O)g, 5Ǿ#'Г eL_dQƺalV3R%=s'mf3[7Z%Ө 9ɶ=:!_boz->IEcii.iͅݟyѠɍ)J"3Ǽ+&?HlwYX$Ș +|`pF#"WZ´V|zrc98"NS$ NN4ji~pgafaPG8:^0aR;J ;͜_j/EKg*67ql hУd8926!-A 0S&NFfHŒr-N' +r$D~d +endstream endobj 5595 0 obj<> endobj 5596 0 obj<> endobj 5597 0 obj<> endobj 5598 0 obj<> endobj 5599 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5600 0 obj<>stream +PVtŋr=vHC -2Yؔs+n9Oxb k% 88߭i7F3.Ս%w^>?8`j]_oE{IMl]<V;b(PV̅ +%mR=mԝDz$PP%`vzwܡY澔?雭mHwܫ %2MV1b1$ άΊ9* % ;{bYWx>D4߶}hGK]۔$hdf":lJTD=òv4]XVUt(k4A] *-C,G#xzf|P1i"7w Tve8wų|`U7?2C9%HJ 8VHV|hT&ر9 +^iNVJ$Z `3O=gJ/hXK= Gw `6¨S$/;) չy8cdy{tŏ`p`]Yx>ּ:? }/h_R/QB9T)ӄo&.N(HaK=kc=Dz7(YkЩ4lFݙYW0ϐVF䌊̠˦x +u.ݏQmhObě׆M BPrH%`<845.rvb9"F!K +ZjʔzY4dO2zQl-;i+=0{*+8XfayBXst7أ|$jݯWAL> +endstream endobj 5601 0 obj<> endobj 5602 0 obj<> endobj 5603 0 obj<> endobj 5604 0 obj<> endobj 5605 0 obj<> endobj 5606 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5607 0 obj<>stream +^xWTr8y›vJr0Bh Agӻ@19 F D>hHwGJQ5Ci7\{Mh4(EϏ]% +` (/&RP^dT-_{/ +R "Rt|/ #rr}-+?ռGĿL +Vvkzz`$RiIKg UJEF<mrN +s9o~q-zMHg69#Ά1r H="9:hP%t&EҺ}@Z]G=9ΞvFDfXl!9 iBf-(|v> T˛= {DF]LYy?HwYc&)itRXS%=wl667)ꉰOa[fGm?91?wH3n\Q|Q\G9r_o'׎xPZ!08XP> endobj 5609 0 obj<> endobj 5610 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5611 0 obj<>stream +ð`,>ߞ|JbYX.new;ҼtJ +f|p]Hjk|I.ܑj ֤ސz0뫇,?D?`z4Lj?F wc0}Ě0Jbѷ\~ +38×k+yV,8O'E .hWd7_E3LCw|F(:XEhk rߘ90h݋^ B?`'" qE5>h3eVrB +#S0AC\"=D}jV9l}k2#J t&&kDy#jGQ&P(=Yy:<؛SSs+fLԖ9"/R'D^ +T)"0K]Z_! wEvLng@~Lʘf͗᫯.fx71%zĉilғ2[\2 9&S.WDXHD9ǀu(rWܚ \mYDrjaq +*^$UH8rY _%]t2tYq*mrT:|tYbI oqļߥ8>@ˊmP ]L:nOͫ +6xg8PJ+ + 9husެ?_~s'bP9tTpZNwۊXix} ?ndSyg9C:ݔhPe|d-*O>asJ*` F9)5eg!IhIE#/طg7_QΛg]."'HdmsW\pїV/͘30}6w-8u2 F{WlG]KkvYs]"c+HO^Ր6~\^k?5%2U%abV}&p tWɬJ)6%zÌ\?76g^ A +endstream endobj 5612 0 obj<> endobj 5613 0 obj<> endobj 5614 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5615 0 obj<>stream +qwWYůAp?Ԇ nwؓ3AuC6DՑֻCL@Vo87P5@˦!SFY]Z~ШJ{Q)I!WĽMpHȾT.z~=T|]?-[6}HNNRxVhuuD k/S5H )#Ldڲȹ<-)` *<|D1O.& +Z¥%D}U +Ww7C2Oj9ˌ< @>EOl 1lF[f67yv11YEF 7r/fl1a]8^b](-60KddgVXT/˳ +f.7rB쉈~7h[(--A{$=4Wxs~Fy +"ɥYHHtEd ;d iwClJ)|:_s=\H%aչ(j9"ZTH9M+o)ThF٣Lnي UcR"Lܔ;~J +UH~ײRўFQQdY %}9tl +̛BP oիA\E߷OtnHԵxdžaXq߂wtF~v%ɉ%_ÉX].2 HY,<$x¤ +GIh{weڏj7 ++@X?9ݓFOZ1-~jw)*JF0ߎ3Eb/ڽNz]s5fŜ_ `|ݴ4+>W%zJ(h{IZig5|嵃ݒ֥[n{~d3Sq1q:X5U(0"l؏uvȑq5.u> endobj 5617 0 obj<> endobj 5618 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5619 0 obj<>stream +YI9_Jab!j< hvJAOq:*؜K&!u|`-7/'&pnO]MǐQH|ެzu478x"bnmvi_B\8Ϊ*Њc{VTXMqPبzM G? +9^sFo*C>i*f&=2iH|YMOXiP7뗅fNկge@A;ѷ@Kb}d8z=g280tETT8)p{hf?K[]qзvi L߶R [!AƖ-Im[YGpFVl :Y Ncׯ| w qsgQMl>r7V48Ыz0 swFSJ{n;EkIg&p dVShgz)Rx-s@Jh̽Zv.ca8XuNhg}ѻ3ˤh?'񜷎0n +fSݙ@dY)>荅Up/T]۹qGj7kkIVntƒƤ +~)s$`c +endstream endobj 5620 0 obj<> endobj 5621 0 obj<> endobj 5622 0 obj<> endobj 5623 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5624 0 obj<>stream +ty[3+ca((>Du ='rN+8tgH̗hXoV ]WԩCښj(roG%~xιWrPAzR?wcύ)+hѓ5 +0#*.8Rb:LĪGL!K{.Z \ևY}T5O^(pԋ[(C V2nX@ B|k|6e/D{"~d+\Ǎn̅.WKlч.b̝togniї e]g҈ЍixzMjlƥ:L0菱J5Q?Hor00g|í*+$%27t™ãf?9` +XbOmD{?^XL%1;2*KH4Xw]餬0ńNAc{,S9j-.2iY蛤@T6Ѡ+1D+;ôJW\~T7$,{w"K@OcI"OC3xk9.{^P[#ĜǤ[ÐkZVV Q +̧4> endobj 5626 0 obj<> endobj 5627 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5628 0 obj<>stream +GovyM@9&NCٕCWޔG' szcnHUL;@w\*h#oYH%1 0+ mOUG \_,І,ǁQUg)aE82[В_np!׳ r[?fe4Gt7rCg1zgNS-@Elw +j0Eˈ}$ +9]0|)/ G405wœs˸({$[|3 @yx8eL(Ow3oCm qO/|ιˑco,,} L213Ʃu&n^~JWX[ ۖy Ωv+_*+jT>ѝv]i_ЦWlG_.*ƥ 1ATReZ=5WKh/ UFtdO^BD5'"15"l{tkYWH}ഝ"rz[?S`=@d0P{$ I85|w`Zu^=skY[e;KE5= ꍟInl;ǥ8c͝y4;n$&I|EBcXxSY(lȿ83IOi|P4"# ӖM&I4^33Y0glƍ +endstream endobj 5629 0 obj<> endobj 5630 0 obj<> endobj 5631 0 obj<> endobj 5632 0 obj<> endobj 5633 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5634 0 obj<>stream +@md{JXh{; +vT24? .@Bʀmަar"O䩿*Ėi@z0 Uꧏc5ء,\GC< |(ɐ19{ 95-3V)vHC^ +|*$FG|xKK,_uiaP >4iFwۥz%h]FWb۰{қt Z$+ 5;̫Ϗ]WT$GK}m(hbeɍ7"n໤h;,Ϩ:`}$53mdfq0a3籙-$ ʞVV)]ٛtbNa`QL%Vђ).D-הC }Q 뼉žxiZa^  yH H8aΎ8b[ lS dE{:'% n9_y׎U6^`/(2<4jxKpV/Fw鯅]FV{y{tG=-@z-m<$M0ؓ[&VC3$dEJnfs}gPG] 4[<"Ѽb5:Ȼ +endstream endobj 5635 0 obj<> endobj 5636 0 obj<> endobj 5637 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5638 0 obj<>stream +ѵn/鳮vJY +:S'Z# Mg|DPp:N%UP!B;cjmaYrbtY-5`5m+RxT<}[wVRS?l)4ChnX`NKg5{@wa>,`%FFT[* +|d{]pϔ #yTjIg +-\~bo6?jI3[F:sIߟ1˘"x 2 +%y||ӎ} n"x=#M2ǔᚽocL)ySm [6QiKd0h$Idۏy77A߯N)r#oǢb4(ÙMM<^N3*foQW~Ef;A=c%_I Bu^+ +endstream endobj 5639 0 obj<> endobj 5640 0 obj<> endobj 5641 0 obj<> endobj 5642 0 obj<> endobj 5643 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5644 0 obj<>stream +#J8@}&hlb8/6W>smo~Na'_K$@.V6:8iZd'aLMh ;$?ӽ`.i= r+ %o@rBS\[ +F%T)/"W|"hDvTy#fDO5ď< rvʗg g^;H2( F_uf0l;0f󯣳3 Y)QB]R[8+ǟ;Fm/U}H֨|FExE6oؐ g`ճTVMN\%+gnV:r ,'lw'4Uvc'vUjpa3kבB_N#erEJh%ӇNCG~m`@J4HYE*!j`L܆3@w) R6mn1., JGFfQM'pzPܝ}>sW7$s0'% X8(x^r|^Yz +dy#̥$=HwrBu}) +nNX!XDXX{M: 0NTâq OYK/il * Zg%х 'ʖRU\_D*gQOϭ,Qap~9V"w[ >5WATveFn~<Ю>;Z0>J%Ǻ9(p}t[T2)l;F]s) JUAWz5{9ɒ4f,Ƙ;ŝ*Ig+DzzS+,H K"`#Lʁ'fL ($Ԣǯ:0K:_"lb>G27qlhseT+ u>PC&;=M̟vC|t\˦ާ(h4 :+9#IET}{ͪTu\CW7f@(I;N.NԜ(3Sf}32rzvz/}ׯ2`7 ܿvbpIDeg((B>Fg])7=͜m^gPf8T +endstream endobj 5645 0 obj<> endobj 5646 0 obj<> endobj 5647 0 obj<> endobj 5648 0 obj<> endobj 5649 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5650 0 obj<>stream +VnF"զk+I=DjqN?Nj4ҨoYBir95]в] O3g{d~>9uP"|\S* ' l8Acm8Y+r2>Ic|m`TO$9:c)ќL\ڙM5F W-Yd2OZ+V;܌~ Y;%6$q"4oUIY 5'|Mh, Y'C1mU)ƢBNṿ3$i`6$A%;3il#9b{S!{ЋPT06N?- +w 0GЂ`є6apf=ĝF,H[NV?n>*^yu&wc/^Ӗ>{eɣ)(sf)Lx[+(1_== \ PCq`ޟ!d^kAHp8 PC9'zs[XSMLǓQB]%sDu)ӱ =ks< o)ۙҰ`59 HyZ\1Az( q"PguAL/O1%w5nYL^= `0E;+Pijb 89 #\VոOOsmlL`@0G8 +endstream endobj 5651 0 obj<> endobj 5652 0 obj<> endobj 5653 0 obj<> endobj 5654 0 obj<> endobj 5655 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5656 0 obj<>stream + l W8čXAӀ6>؞w깭 6TI DtyF0yD97UNJŲvU?"Ԛ|-Z6D;up[:[9ȎP7vڲgBTɷ#\g6tm˰6|C/i`6`PԧlI^Om(s +;)KS9[RCWo͒bb–H&J茔GM+}*z/KqX$Xw()bՇr|U- `/Y] RF!TWcaX,AC@:5\..bJP P`#1^xi%OBi:pSaaIڰJKk3?Z)i. a!qYa +|ۏP_:5O)zbuj?f\-Y]oRoЗ1_  &{;hmd O!l_f/"-A̝=650p.d/x.((.m>yc.u +y-˯H![Dnnꂮqr)&N8,u/[y\ߞQ(qeBHPEQpc*@`5􍦷 6({#p^^ "\qDrŰA`!Y*^ +endstream endobj 5657 0 obj<> endobj 5658 0 obj<> endobj 5659 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5660 0 obj<>stream +@܉)D8l D 6Э*\vpQ'!CG]aNŋ7Yo6 V*N]߱HX"nٰGA=(FS;[&39HC1L4 GdEުo5MxTkqY| ՞UQ+E6?mM muc:ba4z׏HIRzW޷S"Xbz1~⹤᷼.1c6 +6ia`LXL\^/N㲖dWk;wn\4bWbdEr_!=,̯ +JU"9Po)55X0wP:9Wڒǒ+8KT]ĺXDsn;I|:4 A,@h |e-.kMθ>h}` dձ Y7ÌԥzXQƁIGz╝dϤVghKJrwP<=l,uuU|?k^R{yOlȨ3$+/> endobj 5662 0 obj<> endobj 5663 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5664 0 obj<>stream +ב%?r;}z ]5ǎn*@<D7C +FJMp v9z {F2?_{v$А7%w:9Po"! 7g0k\rvN ;Kg)'>T9ڭ| bN&^5:L2Q.L`%!;ih$^,zZ>G2}v* +p8%^N츦nK,Iѯ<{^K*^VNЈlRshp6=-~ Wpbe" +hc=,&TevG\]A^Ԑ1v1`:$!I`n܃F I]ؤiŝe0 a <7$8Dz4*ڼ8b1WP0bo7f%d"ĉlҭ]^>qASIVHU%5H:N_Qyt~ˡ~+}!aH rnvb2ƞ|>n^1:Zqx2|c$݀v"1Y6L#5>]ד9i91XT y}ZhCn(Ӫp5RlN}zqaH\y'$BL8nƈqD| b֌6 9Ze`&ˁ_7C=Վ27?Ct0l== +endstream endobj 5665 0 obj<> endobj 5666 0 obj<> endobj 5667 0 obj<> endobj 5668 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5669 0 obj<>stream +~iZ*ç|6_n]6B@H4FS\$ !m_HQ8 /ʸĸb+YT"]=S!&R|6m0wMur[_x6ZtE357ʯ?hZ՗Ɇ~C٦CW$Ҙ=q)M?\t+_ihrS;n,/yCR 9f-'+#$@V7:7M[\3pف74F*ꄙ +Q.%W%?9-E^3/%sS`Y:V@0#mS԰'I}ѧ`CI =1R鉍!\xR^ ] %l^"XR9/,Ƿ| `{wLqSӾAt9 o8&Xqy`vx +NFs.F՟l,=g3p +{,tM%.*Ē,VbO?g)rґ4| +Kb$؃`\&Oܲ6V[ITLm~oұaV@ۈU3f]3T{Pѐwe.K)HS#B4rJW]6ԓ[ןdɝD!s~x)+hNOi u%g'b"*5 t]J\ ]ȻM a TP伝fQK 8ms QZRxҜP:/-爁}RL5U6SL;GaeWNpԚ!а_O/R]1h _M" &7!c$*iV|ϴCjD)~XT4ƈaѧC0+!,T0uk"iٶIzrwoBUr;Lm,lu +endstream endobj 5670 0 obj<> endobj 5671 0 obj<> endobj 5672 0 obj<> endobj 5673 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5674 0 obj<>stream +IId"83(9%K=mz_.3yqp>3NV6vZ+]Sh2\%< kz{'MʧE,.cQ^yޠO@#edxoFQ̟W8g?"N_A7F΂rg,jD e5U|>:p9Y0B7qg:hxLm6#'PO}x0A#r/prr^7 q>bY +ж}Gg cplcx69_dzgAA΋_I}ԇ@8ƾ{(אQhUfT)Hs}U + ^یTNP{>SyZóŏT+^Kw}7eohvP="W?t^rd&9U'ӗQf(),,@l> +gdHׅ +"2 ,?[ٺa,2u7p2)r\Gًk5dh=@y8;ǻ`!HbCe񰚤 ҉mpcȓ{悯Sx-G!q1FM OVE tC\MgBDrF'+C P,4N7VgO:?9/, L Vop.7~a:ͥ8kPG]ŵٟű[+k26܁++U0󦑆 dHzOqN(OzI@Fˍzdz7oNxsc\cRvjvy5cUKɭlZىk〥 +D-p qCAOP j޾ MLEw> ϒl84~t%1r`b35 )JX 4 ĝaٱQDB&ܑaQ t- }d<|Yp?=e*e𸢬.=@uXʆn$rIc9M%j *1W@wQsp-\^ +1l +̅rmyiuS휸H!|UOoR* +z4@ =}{;ULG,@" }J?5FX  pK>?:.Lnw{*Ҝa~.V!t *^7rea;b*+ ܫ:8dI:F] N9 A\.@XR2m!,x>@~dK bti}.2֐k̾b0hVC(?arNzN;l3)B|!!5ߊ}H3 +endstream endobj 5675 0 obj<> endobj 5676 0 obj<> endobj 5677 0 obj<> endobj 5678 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5679 0 obj<>stream + +Qte,R`E\DKJAnw Hg¿ vfc)7nrUwrb ,VƇ 5! +j%dk3/8vo +:I0_.oLX;K.ddsdI^6G|N]b6G$cx*=\„hq,m#~P ȩ'}şL,40oxSwA9^BfY4Q ! + +4 :bG-=^֞ @9΍]Ba1#I_E/bU 2LyUXkfX% Wa4#%2EVZSV];]]I0.U +?ŵeb+$rH|E-yx'u]$z.0teQP纡27W'dۙ(R/Jq=ӽA?;YR^-צ 3}749=^fނK;7 +g/Pz; S C,y]؈3g5 ">С]gu3Y*3eWeXO*鋚r\ agDPlkTbkn]#s!kO7\Q1m1[,}skjlQ4ޙ]?%Oձ}v1IAK8}يCqx\+CcP5#%e(6Bxt-7d>B=d $ +]Vo9a"udWv΅3`rV.1'QueUbj,ӳLY&,C++ +endstream endobj 5680 0 obj<> endobj 5681 0 obj<> endobj 5682 0 obj<> endobj 5683 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5684 0 obj<>stream + =RcKӤSF+( *J="4BQ޲>2Ŝ! 0 +BXd[skdn-VY K'BeHZ=hKM`GI|UKC +Jݮ t +čȮ+?O~[Ϙ1N'K$[,@G!DŽJ1!G*i q^ͺAtQE]ooƁx;7ph ==eE|?[$É4!=ペT +lq[xBX;/TkwD <=^F8GCQ٠LT> endobj 5686 0 obj<> endobj 5687 0 obj<> endobj 5688 0 obj<> endobj 5689 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5690 0 obj<>stream +q #Zp)iH_W +sա܉Gfr_d$r-ڄv/ΡnfLlؐsɗDj:ϦɲsDXzr(|!+5;,'q!B:70@ |jA`. Jcv7ݼnc 5RyVJ^@IT6ZK[DŽkD՝); Œ53p\T:]⧤l4:qfLI +w\X%%K_ _\XX%-L >NةCMI*yDuMoOYe; IoVoȯ *X 2}KO:瀙> w:܈hUB9TO1$Y J挞TO-dbM(oY, Q) nd=?k\ ,eS}tPu8BVm.V9Ib5:^@no chmfG3%Ȕ3W.,|8MD@GVN~8LL&N7jKhӚ6PS$iok~ ʔ3B iwi Rn`F +V4P.,>$'݃Ah KE]qiإ|A fS"m-Y57#rJw?#YBw2.~}U& +j2'g dUn8>.+m{c:\XL +v&9IؾO#؁Xw/k{F-La9w9GnYп DpGՌ_ x`yU +rv +nk,is|@ÇmWcbnf 8 $3?4ƟPSJbkg=FÈѠ:L>5c=l+D{?&oyeߍ-h2[(HF ȇK'FS>-e, +?AӱfBI asӣͺ̓b*G[$@Z +endstream endobj 5691 0 obj<> endobj 5692 0 obj<> endobj 5693 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5694 0 obj<>stream +e[`EGiU1au,[{ v,]dkrfoܖ6Ay_SCAr$lTt%+Q R>=\ZDM,dB=RK" aj<䡊ZÔb![g Ґf8-c '2d(Xk:K'|*co0%i&m<__)~P*TyDz 9<p#=rk_@ioB8wNG& mR)GN| zTioUU{h,g1Kc "ha,d<s5Oaj +AU޸\ +*~܃IU}*Y?"ȯ=st}ջ jFC1zr`qdZs .z4q:BӔe=g4GZ@1|Q +endstream endobj 5695 0 obj<> endobj 5696 0 obj<> endobj 5697 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5698 0 obj<>stream +%}C&`ngRz {y@nS/5I'd%>5&ǡNem/[jimM}/CAg<0\*h!WDַ`tBڛU -EJA2uU bu/*vte;,v\7F吞!^:h7Ly >y +ƼN|Lme)XpuMqʀc%RFVSWWgPLfp|O'"Mª6ImLM6YZݧ՘ XD3ND>/,ArQ[8)i((d5ɠ@Ru`oDW}ߴ"0gՐJ +c,'pX(O!aՍRD +pibZn +gDc>搩J$ȲhgTv^4OwgcmI/Ao :\2I/+GOoiA('M+,`H)5wV{3o=I5L3=5qHJ' +|Cyr&0:(wX/@YQVH,͕>_XC%0=xȎ_Uc|jqX- +endstream endobj 5699 0 obj<> endobj 5700 0 obj<> endobj 5701 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5702 0 obj<>stream +*d (l.aDRmU"`@'*,,c,HΛKC̓]py4|:11ي埯xkҏ`4>ȑ,%pA+W7 ЍAZ泎 =ӄ4R]}*pW^m{I+mswָ3-'eZPЋ3.2Eɛ7>H^j.Cvn)o Q[R|Qcp&Sٔ'3|8.t :zaJR'OrT>fҬjeNPCqhߨ hSY7o/Sj\VyN*jҗ p T˩lSPikf䵳<4qU!ƣ& rJ˲X3N[\-5F25Dʷ:) D;gvŧw0GcCWCh0 Y ΪJW?v:pNH`}W'|iqR*y oZM?/ wUb¬¯rOf`'璮SܚL?]=Aoy+}%| 1~,?ny +u|-B)|M A1P\O~r ;aVLz3BH2 F=f1z#캘 'pIz 5|\<xSͩIEDNqo`{[Y>+ʄ1[nlpTn +94E =)qJuOO}o㷖# +:wWCO90.϶@u{o H{̙~T}S#Q +/]Һ4fnnCEcOa3waCg$Ƕ׷;]2eg&bN 8` =7|Y(?ߟfU䁜MHMtE,hY]t%ڒ +endstream endobj 5703 0 obj<> endobj 5704 0 obj<> endobj 5705 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5706 0 obj<>stream +4-y. r^i^HAWPِ~ AUcצdwyϟ=WxlfDC76[;$cz\v{%E-yڣz1ϿA '&/іFk51OMJb(//ԇD8 a"ipW; GYvfP+٦?Gs:z1ʂHдJCFa@!v`F6Y-6HzX#"cb͞X܈w݃<^TFvJ%֛LqSJYľpְqEGz][Dk} zh\b < tTU`i5<">^Veo]jaP&[I4 q h $QW6R_n(;ЫoM x Af LE&/QBz9[ɵΔvҟtӎ8 ڭHjJwጄ ~ 5/O8k"9|7!<b͡*7S ֵ3X ugEqԪ/)/-Hv99{lӻ2> endobj 5708 0 obj<> endobj 5709 0 obj<> endobj 5710 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5711 0 obj<>stream +H "^?-DWdۭvy rT9cvzBV^=(Og+:`_xCJF9 p.Iǡ z&ThoK7h:%Sh(\5Rq_g-pp"gPdhO's&Nc H018ǥI8hêBā.H >;;2mghA!"4jzƇ[鞎lXej,-!$Ah#W9:$$S( ?vK//217m#-J3:緈)[yP6q vxEQ=[-2I}AI߮(vi5IHԲIM{݂:a'Erx~;8ihRX'R$v gxͻ&-=kdi"Z d#{ݯ*fAMEi\"^Fw?mKZD2%a@f8ԓ`2/Dz{PxRX^hG(9!/ԻP|eֿXUgvy!JC]=`٥j\jQq&PK7 A<;ɄG<Ҟn]j ŴTX8߼*/ _sgFC3JjxƸq(nsD4([נ}@+ bXw [HhU'o,|&L8aYbCU@C h3]cR#yRPZ2Ck1#)|ogYV:x~h7O#(Q +&J Y\i*:@d`ōOWW[O9ݿm GÒzNɲНc]~ +aHn &0_+dS4hD)u "<軿6b⢟FTݪ oؽ]:EϚ1βΖ8`xw >PYA@/c"l IN;dE>&HڌȅD{25CѷK \=&cG +endstream endobj 5712 0 obj<> endobj 5713 0 obj<> endobj 5714 0 obj<> endobj 5715 0 obj<> endobj 5716 0 obj<> endobj 5717 0 obj<> endobj 5718 0 obj<> endobj 5719 0 obj<> endobj 5720 0 obj<> endobj 5721 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5722 0 obj<>stream +^(ʹuٿ%J'+԰0@UO냢\>[/J[VLU ІCr:==%mm\F# R!ܞ{dQJ6h8J!ı/oMdN3.H*%ٗIhƧ9AZ iqD< .#&!~;y _C}WueKHzm|cd-]tswwo +>Ji?&v~L 틼Hو] nD:rxg `AV!-9áƱp,kCA>z7Pbznd6(Դvw-`P(VӷכIYǍQ&ɵO;EA^V!a ~G  .8PL3Kp~ .eۖR?b +endstream endobj 5723 0 obj<> endobj 5724 0 obj<> endobj 5725 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5726 0 obj<>stream +| +7,ǀ)s~ï<~Ӷ*x׍HPr():4W̯6.7WIo7v#Ej-3'%ąӧn@X|=1DLCv4O"1EkPah +G< I\GZأ6~(q[d#EzԑTJȨ̟'/ (L4|0>3ZF1Hz5#e}/{Xw|r Ȥ_"^?bLSz=k2KV6:/7V;8W` :O{ӫdE$X9k mi6BTSI +4݋hQ{%y6y 070mmV^'\Cw yI vʎA.wFqe+ORA! U6{<ٟbY_FhS;9X#PXZSIy`YpqQ I[7&!"hN)] A.4haH)'* +endstream endobj 5727 0 obj<> endobj 5728 0 obj<> endobj 5729 0 obj<> endobj 5730 0 obj<> endobj 5731 0 obj<> endobj 5732 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5733 0 obj<>stream ++X,77-~_vWXoT<_<4^~?Waq$kUrp4,BXA4Ʈ8XͯUtF3ħ[EaQ1zik5D&m..(i|< +9216wJ;VU~K6~f@Ab䪒BkCLhVղd)2nnRnUÄ}s7KUgĬ$!R4C7ɐDܱt%[d +-7o]eDZbQ|Wx{LDvOOcī 3B\ڨ k8QG?JCɻ;bH^[ms22DR#tHDg-wxe +[&Ia$_VQgFkeA;*aamɿl-fG S1I9=8m +_?a*|o`WxhwcTNM2hErMkV6YM0R?UQXaK0C_o.S_Y ܀ M:ho%RD0)Y\v(T7,{$]0Pjbos}%bX0f}r{Ax:;%z~} "T9;jwa;)cGuWMU;+b 97`e0s|q~1FDI5cVlj(Yi(GYWQ., o̕Ct +u49 ӈej(F⭺3d"P+xWr?ϒ~6 +ULg[׀xԚ>ae,f7c&:ֶe(*tɟ-E Kݲ"3tl%3;-Ԑ>O0oYߘ"qt*ԘTMlm`L|*&rU52-^1(عDWsy#/꩚R|ꍑ2Jew,92Fb2c5X^B/XgɊI#]o6FZ5KD`_1}+luk┃MSި +endstream endobj 5734 0 obj<> endobj 5735 0 obj<> endobj 5736 0 obj<> endobj 5737 0 obj<> endobj 5738 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5739 0 obj<>stream +98r~}Kt{B}my`ܡA&;t,?<{Q3JCn(;"b2CФwI-Ƌ*q`ZU*GtbF5tNZ,CaЧ^ +ePʔ-FYo%$}32ck`}وYO܂[1YtҜT$,U)fP|;?X1&! +oRLeAT޷`}1?o$ݨ+|cƎ*!E0/zR%e@r\&ioO|PSdWe8-? +N!pm%?$DpkphZTTh\ KJ/64! X⾬3@"]~؍YH­cϸ&$qsrr-1Ha]\RSaEIG|v;Cv@wWŵMqp9gt iM ~c5X#I@C.2^ +5&<9iMN;Q;b_2!q;:.Lߊsla҇ +u9]Cvl(G[ X38T;33Xm2Qy(|l3@?'/҃]eFūW*雿 +&{Ͷl2 ܮ"] 7K#jhӂ4+@hȠ,QPIZqH~j%K"J<&5T5i}􉨀3nP5}"=I46k lH vf~ Ե9~ +Ze/쎉t^(+8ΌCD[oK-O7zv_X1 +x +endstream endobj 5740 0 obj<> endobj 5741 0 obj<> endobj 5742 0 obj<> endobj 5743 0 obj<> endobj 5744 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5745 0 obj<>stream +2E1!8ä'Ԃm6ec$+G8Ly +N78;\3?!T?g: s"ldkV8G⏒KS$? in6G|/5 Q:u#5;4F\ u,GWCQ1Yg'n$͚i:P鶹 Ga€! *fWs( l4!s5q0^Gyl0zSCIԬMhmp08Hw#d)u#gHL(K`4x2a{L$@0_t9gVaF=5?Wc˻F+!O ݝDMA fg~Z mlXp*?h|ĵ^S)n !2^]qڦְ.`1W06d JƐ~?}M #C~2f Ii@19(m#XV[-tMQцe +endstream endobj 5746 0 obj<> endobj 5747 0 obj<> endobj 5748 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5749 0 obj<>stream +4ํl_Yccۧה#O6n2Yz&s(;ˮ#3Y(A3q_?_ݼx+mXH`l灰h*P6W@UG"way[Gn~w SqӒ t;7|8{W\:ٚFep6q Ok%j5٨QTkH,,%<@+y<\',sf]ߏ1hm~ ,S{8DwNKS(_^J! +V5THȁ?XkXT`\62kfu/{2_d8I;xS~?p~yʝbYFYguw +}mS5sn}.,M,n h~HP K6r/= ̿!Y;8śui9l2!) qX0BOa *QGf- ju*#2'S~L@$H瘙EK.H8re.^UUk6i* = ]& + 3ՏƢ*;`r .1 ,  flƥȣ &gUhs(<7QL1tvh )Ì8.kQWDDH.lXG28RD;r D=]z\Q584Pc>c$0;R:p +12tnEn f&e%T#~JЩ|PO9<;a>/Ufjf-rnA +@|i؆tҁIzw&vqO؏ku 9S} FiUΗ-f7~̼%E2W:&5ÉtyR|AT}۪ڇgҝĒ +endstream endobj 5750 0 obj<> endobj 5751 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5752 0 obj<>stream + + '|jǔ\Rn;<5v%[{EO(>Kt^ g +!dC6`㨟nOp1烣{&jxzb-BX4L;LT9tڬ+*#8(Y4͸̷d|Q k 7J<]޻ ƫ<&)^5[VNq#lxTkߵKm&<->l5: pNRSlFCG{*9䂬 k? C)b:)EC>j'er9)%K -Cs× ^`'F*`u[CI& +endstream endobj 5753 0 obj<> endobj 5754 0 obj<> endobj 5755 0 obj<> endobj 5756 0 obj<> endobj 5757 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5758 0 obj<>stream +y0CC{ռV8 \_of/+>,PQwg\@!Wg<4.@#xrڪuޘOȅ幨t}nUV-V*kyw+)l3 Bm1"µ Ě+Ё"[>BhK{Yڌk{=5xa%9[i UwO7%HcEުYۜ)LT[MpPx5ρ%Uàq{ sM;g`ŒMw9| 5[Bkui7ƣr>Iue ,.W> F<)$}Mٷ[E)ūr9wFeVd#OwdyY_e#t6;&i%~N\I% uY樷T'o:5Sޓ1b6)8*~Q+/$KJEa;yFIJ;/!~Q'RT`Ng7>S-0dیtyMs>Ԫ{W32 Pyx55_OE3#=J[k.hH|C~ERRұEr>4qB@Q2~ipׇqlfWP N;cr +^&/K8ΤLa u&s3TbjR ݮR$q k"W:`&5.$TtpW+IM# Ϟ՝=X2ţh,J\\ʸrpVdݏ٨撉:w7hhf”U2gr{^<PdUz? ІdO!nN%N06#t ; vNXw[ilcϢ +Y?|G:c]>k0v[ +endstream endobj 5759 0 obj<> endobj 5760 0 obj<> endobj 5761 0 obj<> endobj 5762 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5763 0 obj<>stream +ʼ"}< +?^kxj SpݔS46E~-jﭳ'vmz#&2%$ي+3ήm(5n$)bjo w[3|lC=GFń̓ ڐ>B +c~ݵFg0(YY2kb6}o~a9 ϭB~u +=Dݗ=5ҡ"}uh\ uP TU5D{ܓSm1(}M[FKD|ȉhm@N.mmMl%mJҏoۥW* S/4B+~ c)oG4}.JST9& ?6 +NfJrjM긤->>. x_}9l@K>DIx<d1k'"&]kn=V}E>j<DfsQE\{+kMU`0 +iKɍ[=Tnq,7Q ,!zj: : ++w $.**),Q:}& 6l;2}XT{T,3h7n{ȟ9iIt%oYF"nWwXYR&l`_.ƒTOT,r|eYv +美8 V6/r % %YgrLvL ES9/> UDҘ-pOyE};یll_KC=_EF;vHlpA"ט +9Uͤ1Իɯ1s'C%kQS'2h=xG]dQe +endstream endobj 5764 0 obj<> endobj 5765 0 obj<> endobj 5766 0 obj<> endobj 5767 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5768 0 obj<>stream +QGQ|ؔh>-ܲNJNNwIA+r0W{ ;iVnH[X|6z.@4Y@1rR$ӅT b$̒JBfB17m!htچ + 6OИG"0t8sYiYSk j}Lܷ Ι{+cj%?g( b1~1Qux_?Nhya1 :=sà0-u[MK{[iq^eǛď"۪(9SR~;稘ֿi-_P%鏼^ 6gi H9uߋOl2|D!Ց!-lv9 u<|rK-apߐ<*sTceA}@VC%L)L?j#^ ־SOI0,PןpBׯ@EyڟJA79,n*bufwG)zū({OkM'VQ +$6:`I^&\b0:Z!UMQ&]07PKxAtS&F6x[3U.v&Q$cKev5B=31xdnquW{Pڡ&x]‚nQ cȪidh;Ƀ/ V酘Z*FIWڑ"gqȐM̳'W> endobj 5770 0 obj<> endobj 5771 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5772 0 obj<>stream + -4D7g&ZJu,C8`{qJr/MɨNgV@ +6P*'ߓ삮j ~ONI͙` _רi7L˅nOi7UX<8I0 hYWQ_^E?48R:S#]7Wd%J,f(Eta5#B/ng +F}K=crH1D@#z*;}@ CnisRZQj]E2LC c[7뵉znEx|LdZ#^ŗs^iעLN|̰"y\d{W\;"l Hg#+e;-rX!)=Y=dmhwی \wM-TG #\kYN&=EEV0Syy1r >d;8<@nO(-%Gb;% 2QHpQi}_1rK~D?5 c{[;:}'VCJJ+pX 3S^迆Iqu_ډdlG1rNGG[P h60-auaG>kve|7x8JCYGLRqR@|<|gC<9e^}M2b%$]Cḿ5l%,7|’FqO4W2]cStmD ۉAT!tݠ 5$[IUe~6`&XBpJ,Sjۂw ~aO9{Dj[G 1K`MV&i5-q GtLV8| ODOv5έoFIOb̘SG +endstream endobj 5773 0 obj<> endobj 5774 0 obj<> endobj 5775 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5776 0 obj<>stream +}}U ]˕u+D9_.7WYƿ_޹\P`wi zP<]R4]غYT& pSQ8HzQFmm]N0S[;A ]d88ɄIV5`ۻ4ڳ8S?#'eeY׺mRmڴ&C mdkhQ"+K +UK p +o9EWʞ _FE5maK7b-Mo$0C/ח?pc2!c) }xdC Ş>2\BoAagLtu( 0À&q)'gI*UO"o$EQOAFbPp|<<UAkS,X +h+;q:_Sa_|F DwX;;)V|%4#> endobj 5778 0 obj<> endobj 5779 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5780 0 obj<>stream +Tj #"8S̴fdzJ@Sdk;[XFBU`u(%6pUCsuχ&4TdD#_L TX:~i_3Vڛ$*kFE4OL=FCj)0]e[R9NMvF僃K8<ﹳ s`;iz4"L4ډڎ}e);p451b`A|F6<+>#T:bp!B + { +K_דcվ =6‡Efc4Y} AK 䫏N.(s-[ +9]tVLP}:<pq--" Y%7o_[ >?òLɴ.e2Is ENŌ?8 6Ju+tG =ΌmJavn"cJ>+FOsvAޗ+kMI:hB\ڄ )C]pqRݺ%?Wu~0L{ŊTW+@UUE vT VXӁy5K.jnр)ù+'2oŅ΂R۪ +L 02?.JڇtH;PfY*0I9 6JDqpoC0g^UZ0`QvUNߍ K'DfoT_- |M++9Ebl ܬ50;]SEKl`TSrOH(ϵ+Xmfϣc[{@lw7K҅W\l4LT }: Mz)Of"WW$D1eC?8+V +endstream endobj 5781 0 obj<> endobj 5782 0 obj<> endobj 5783 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5784 0 obj<>stream +bR)SBgX8b:p8ޗ +"`-Zj<KƬ.Ƴ t;a4]m3(Pq9?E9vy&2 U$^q@H0SecAPΊ9OQMR'~(,2?M2-+Ӗ,/?"0@55;y4KJM+[o3jp0s `8@4c!õB$PKyyAOu>& +iEI/.=յDQ7{tRZF[IꤜRy^`VMJvUiY$[Tal_4-W|VoZ8 @d7Dnsޑ! ?4@SZd-2t%{K}Xg +_В.Z]5ewH?RJ/d +endstream endobj 5785 0 obj<> endobj 5786 0 obj<> endobj 5787 0 obj<> endobj 5788 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5789 0 obj<>stream +Lu]Q C:uF$·F +m+%h- NɰZwV7V dnk[{if}sЦ&!9@F¬Q|Ds{6Ԙf`^8D5FT )Gنt ,*,  o aa4~~ y>?:qlѦW|xl̑^_|&zU8`R /EO4qrfޓ%[]+(^? l:c86E^,¾A'`cKhbl|_nygܐd>zJ/<{[-yegF<LԊh״e,E FVh%Fjm)5giڼDóM1ot8>OUח3͚xXع-2FJ?PWIlV"FڳUy_ l_'c59=Pܛ<$FÁty'Yv +}&0)@UCh a؊ 5!݆y@.U^7 Qڑ @[G@(!zyN>,CRh(] ˻N9ׄ$E0aP%jAX'= Jl`h3Le HF4m9 +&w7?~3oPU 8tuҰ頮c{ + |ٕ8@6K?E7BR߽! = ZMc)&'U"ƜO9ԭp۠n)wK}]g*TH5]S7+xs$MOjB3,?8j$R-s޾uq~n64և^>Nmc#P}9^AXCX9Ge*R{> endobj 5791 0 obj<> endobj 5792 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5793 0 obj<>stream +&zCTQ^fΒ[TNfms&fk>ey`C_tHjG5CHP)ŧ@\A)aU/ԦQՈ@h wg9TUZ|ϟD5iiV{ϋ7@Bc؈\F5֞ c8nR 9H(z>$yXrB\ G+dKW( +m,6`=aLVK +/M5T:>A>1=(WVb1tB}?"kF*e7֮a TP o=e=Ѱ.􂨙^W@49GSFkvf_CI^I`4Nr#{Ʀ9@Փmk6{rܨv# +|[sN JQŃe.g q|϶rpBTvLKQtL9^^T9VhaHc[aў 1az ÷" 0ס5F9s\rڲXM5|b8˅)~R^sD̶ỷ##зoQ¬0m-FƚxE1,'D|(^ Ds+!R. ~hOK)ZTߏ%Mk"F3~m,1SrAo@!02Yd +Ee/U J`:;g7h$ +endstream endobj 5794 0 obj<> endobj 5795 0 obj<> endobj 5796 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5797 0 obj<>stream +(UIEN2G,+VR ._nPKXԹ\\P={Od -mEix{mROЭuqisHJƤX⠃I! =jxej%#>ήP %ь:d} H@yכ7ciyYo/ja`OkbVb(zE9IzH7X+N B*8@][8&*7Ԓ0$< +VfؔTP H 2,e4#HyT{!QdbmRŒQ-`,ʠh 1u(.J f=٠ +/0"޶G%6Lk,W6j&=VX^u5F{'MgxvumRŘ/q@;e a0û} x/T}ذtOMz17-@  +ּx$3l=Έmb+ ?U6 .4_SE2?UmAuhجc?%mx*rhe,'M lxQcWY M;-ޟ$UYl=p:}vQ(x@㏶Qós/ij ıȾW~[ e?TFP1˟ϗvUEl6kV,ۏnUIS/1UgsywpLQNS3{P)PSuJv+:ݽ#*m.~ux^ i.6t $hbz{DsE!P?lGvD6bYj`J|ק8kR!7f{eLrDڒV6 +endstream endobj 5798 0 obj<> endobj 5799 0 obj<> endobj 5800 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5801 0 obj<>stream + XZLtӹ'Le11_s$?CGG2[/CYY+Id0tNa ,ކ~;Z]E(jUqW^#ֵyt2*PzS̭;A:ntvOa2ZvVM7߮M?'Ӎs)m#ufɷsm4jw?$b +rWhM]٩|(iE-pI"Kh ?\:<+qM.bUw\6xp0t!{H0>Ib0 ' +F,T] #?lsrE7Z tVuxa9n5QHcBj2NRt(.:H<b=r5BV~-~"3c2xC.d.<߀"7чÈ$> endobj 5803 0 obj<> endobj 5804 0 obj<> endobj 5805 0 obj<> endobj 5806 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5807 0 obj<>stream +V8)=fyNm[ʹrP5s%6*&w -H8|XխԺڠ`gGh&<5] s:59{pQ~/o=CvTڵFe..bi4U{"9il!n84eL :B%bȝR43 +:Jg |eF1fY&* +{^MTu<%x0|#B9rFÛLt{q;k'F]ho=~(zX}.&uxgt Gާ]ngO!o|AtZw cFbZ~'\A}_{AfG{b2`&qzZ"_yi#QWD`} "!c[NZ[JjҊ9PTLRݭDX1ړJ~cNؼ)A%(Ld ݄bFHΩ!vDTΓqM[|m vӉ\N*bhW2m{26yU +p Pcwh墚.1mb,VS@T *5?Q9w<*R?nt3\'@ʨ|n\Rbw>Y3LwHURU~+[ +=9 +9zĝэ2É|i8^_̬> +endstream endobj 5808 0 obj<> endobj 5809 0 obj<> endobj 5810 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5811 0 obj<>stream +=ћr*/[ץ_ˠ&h< +k!`E|JOR`6Q˔Y}\]z fh=t ċ5|7 ,1w6S>E12N2RTi%d/H9J]{Q>xi,—W=*ٯ)ޭODo1?BRwH?s"k(YGUPJL0]ln @(Qfp +ED-deX "&YXXD̳;D=7-?Jtq-'U]{j0?W6o: WWKEl޿]93e 5eʕLB2D\lnh1&㒦cx6-ТZe7g,׹g=\ԭ6V lkz1rXG 5E 4QQÜgEe^ 5^'q|.PmQR*d/zZ% {}ܡD%N~!D RO}^3*a +kpVn%^DÏ=.8{߻C$6C]M[ *W@n?: GP 3 dJz5W] xUźyW>$f_;k;AHvr9=2.1՟O Ҙ}2HXW梫SS eH{\)@2uwԲ*U Q!{ic_ך $9IjOBHg*^<&:>[AEW:^t[̜i3exSUV&7'I [f.H +~P6ye%FZG{%у)+܌gZ +^ G :21φB+r3?$RYtr ,øxϋ*-, x9) +endstream endobj 5812 0 obj<> endobj 5813 0 obj<> endobj 5814 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5815 0 obj<>stream +vA솕0+v߾}v%ĉ]IJJ)Ob?R*ePFjm%7)*g:=Y$Lj5|ʅ^6@z|YofHvۘlՠؓڭ%zgfM\$>3LE`>l{x?31(1 f+sTGCh⸟i邬rA`e"*=AY[Ei& H[ <ݰD6.^,@ʊJD`R%$ď#sFx'BQ{y?' 4Kֵ/|]Xx-F2⮼,֋`l( ؈eݤ"0BoS6r䬵kWk|aV + +%abM CWU*'gWLbC /uޕՔNМA 1 "{~I#/ld#h֭Fo&/T9zkU)q#kq73YPtf?p #RBuoikD˅)R7(atZ%L}0$_wG3nP 7Kdx<4~iךl5HMKZ?!C G^x꧸*2Ws*d#W]V} +' zB3NJOwwASݟGU!J8 }U'\>M4)ˢrst۾k'$j =*=ړ(AP0}V7AZX]{xJXI3,ER#Hb:G:US*LjuGs ^T59r`5ȅ^%O [vlP ϷsI֑S\,ۄ=i +M?Y~LH$L~43,N.#wjCpбv\Iv֓\K3hS4bfDE X*+gU.O +=A9ĉh۾A +endstream endobj 5816 0 obj<> endobj 5817 0 obj<> endobj 5818 0 obj<> endobj 5819 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5820 0 obj<>stream +qD=V)Ug-V%e0{TO +x OC8KԊqFq5dwzSS./ȝlNbGIU6b}:t&G5H`>irMeIk!U5drCreNGd[+W _+9HDH<}5ܐۯO*"ײޓ:23]Shne3F/wM;WẕTcej}q®6G5sBT(JuC1P(M ;@Em|7Kxi"@= Izy& p?%$!a8n凛%[Xd +ݭǑ h%5v;ʅigXd\!6w|M-\NdOx]Sc8&q +B|Y}CP}g ˩FNIG|l+(wJGp7ڛx͹H)oV2EF;̙z=mXLz#Z/:nDi ]n8'肺a(љ֬i(Y+4礻X"$%iL4m3C)˷7(WE GVEn^^w0aͰGyfًdg%L׫Y!?֑xU<2T6z,}PA jE-Ps[o3W7uŒ@ Tdf;3> endobj 5822 0 obj<> endobj 5823 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5824 0 obj<>stream +Vy) 9;E[:hQ/{h*o"KB_7Y`}'=U-!_9Q| ~B%vݨiX +ThrH5Nl 1{uvXreJOeb\y~#NZD>5ckܞB]FpcX式b9=U G2meC/sd@o5+K"%P9gw-T^gN#PX*G)c !Q!Mr݇rY0Λl`-@(.s~~5MA($Zt;RO?'Iy9"%K%Os7<԰6''0Uf뉬i Vef' |BNK/ L96['o'ӣ9WjW#a )H9]{yQVe&*)<kGc +ĒEQ4fc_#tZ2 虸 ι_ +# '}lp &5"jwȸDʹ->P✦޳cxBN:ݬu,HWA}@G;<rjDkJK 33^kpNQe8ysPd> endobj 5826 0 obj<> endobj 5827 0 obj<> endobj 5828 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5829 0 obj<>stream + }-* +6J ?BICaPϦkhitN>C{㎹r^e, 9bm3|j:ue`.IмG<'5G vt FEh<#EڮB;w{y &俑N}8t~~ǩq13cU͵K/Ei9|f +a >{ !\Ű>a :8 $ ԢgZ|]UBbAEp9+ܴXmIXF=[|IrZiP?t7k5d)KsA&X `wY)txV2:AZ/ >tI0Ć]^!5F[@pI37Xf:mLȃG'C_Z/9lT^:oS̮gϖԯ#[]|"}-h{wŧɰC޽+DZTѿP|ٺ$'ԏ޴4*Q&ȫ) 6n9b lVN=zge.rŵ:zq!#B ;HdˮwW3Ř_h[y lh*WM7M[u3/fR~EvfOb=:gF쮷fmz?𝮯0.#${Ut^QN.f-;];@ȅ<8{b.ʱ +#mP8oC4{c +endstream endobj 5830 0 obj<> endobj 5831 0 obj<> endobj 5832 0 obj<> endobj 5833 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5834 0 obj<>stream +BN= a;ݥ VH0K+~Gƣ 3k +~e5V)H*8Z_%*&nkU$K( 8u.bBM%XPpbF4tsd´Qpdo>ԃ2 +ڿk:+kWRpOQ 7&0./2YH$Ɛiaz+"Tw7 +a`s=i!USU%rͶܣ~CyڴRk1qxväzZS!tÜVligUe8Ӧc9A>bPHb&xJR*qҎN 5u &lN +/Agz2=R5Fy/49ƝZJFNKhO8& rqZ*zbW77 މ:E"(]\>?,MFqG!nvf2Jl6NwM(i䴣h{юM찴[ $hȜe"71TB# vski>fE_x>*yrAzjHO9"|. Q-uB˴Ѧx\t32Me.myVmڛs3{HIi#hluqD +`ceB'\lQUүMȄW˺h$vUoMpJBpTsj˵Vns*Ȑv@Af^ۙAdcZh|'ocSFw&lQ@z.~ۂ@N 9ǽ"LRu*iU2lFtTOwʹfGŭa&Ƒ4O$9S4wndMhea$FW]eDV0joyq[=p-bjX {Ҟ + UPHNɺ(htagXv#k&wy3gx4ֆuF.I +endstream endobj 5835 0 obj<> endobj 5836 0 obj<> endobj 5837 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5838 0 obj<>stream +(RV!nc'-fRda/vr1^Kt]Ym~Hmbѵ"V T:Kb4WwJ0{#6Aj+} E c[Jf[$57$F  ݯ`yf*ߚȳWjm[|ԬhSW8` ^{i&&RՆ26Vfji͋=`e͂UNctX0B]" eg#FsTCX!C(xCT +M%vzο_jOw`>ਉ_l(/P~oxqU<=a(ׇW0*zڟ I#|XzHT^ !K'9].BAfl/φ42#gˈUEE&ƨmGHv/)˟&zM?[IHŇVп:DT)LW +sRIt}?/_{i0y1qi螶&/ (YЮctфX>igMߗ0{Њ +endstream endobj 5839 0 obj<> endobj 5840 0 obj<> endobj 5841 0 obj<> endobj 5842 0 obj<> endobj 5843 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5844 0 obj<>stream ++Ok5Qk)rl!8ގj$`)Bk9 Ea{~_T"N$D\D!A⛜4o7u̡!CMV4l -1w H-]m +" AYvt~$[GiotҫW,;SUi ~Br[":gvԄ5$2vH"e ^oZh$S"QV_>GJMxձNhNP GqP*@E)ҘdĴrF(ږA_o<4{g=.}D M) +Ze1v.:6nwJ)6eVrH]d/,=q &#/"}i3lfaK;7l4S^ {)o !H"܆(S9lJc("gh/ݔpb +p!.֮8=ա=//[ 4 .)TyW|O:WDJNCYT?OI#~Z3 +Gs,߾foVŢ +RӨ/F=wps߻3zs/*mhŊZ^Ͼ2_O2OFuJyuEn/SH 봚cQX7'kd!N$1d6cCs,O&.p}TSX㙗RГ!=<+{FwT.V17v=@$'\(:wxV4t! Zg5$|)pRsM D& doz5Rw@ƦkYՒ#":P D]/ڊuCРGpj8N 3ICJsƖ` KM,.Xx.E&<®j@/g!F qBi,n`tY/;;XF#Hyڢo (tX6(& |aOKğl y ~)x8r^Eޙ(8]TPeB9ϼ%n~dH )UYh]f^ԩ !_m2?<@pR1tq43fsF4k"}:7я$Q-PQxW;“ܟ{]r +endstream endobj 5845 0 obj<> endobj 5846 0 obj<> endobj 5847 0 obj<> endobj 5848 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5849 0 obj<>stream +K?8~لF*|AȍUU)I +Ј"m|Й75cUGY+ +x,L N +3f+AiPL8o1+k+f$ +W?3?hfX;- aZ#1 =R.ѺOcQjFPAH?y 򛱽&B'{0}GZYbM倞fqhx#k}\X0M-U w_b6j'(V:^ʡTԡ\*s@MXQnEju2@r3D_"PKˊcePHVh&GcQƛ5zx1)AYनXQi}HpYQ5Iڴ/IqAqȱRkwwuܯD4_r[8 + @bSDU{VxPɏP>+yjEv{$v D2'G,Nf XP`5rM/En8ԖxO +:m5s'$|!Ks@egr,BnQ,eM.u턾 #0v>MRh{(WDN͡>AWLA113M6:6=RK$Wױ (I2R]YFU.lj!I:ؓDҞM:;;mrWw.FT6%[Ǟ6/!#i;g~g],Q{E0B]Iy0>E{%N;.`t 9cE|_Gom'Z{ƮM@7vE4U%+1C; 6(`%θ 5fO U5V2Tc}LۅTns $7 *4,5ҩNbl wO0HNs;^2#JZCx-V?/EЛ ,?ly, +U a Vy~ 271y#;.=u+(Qe03 $Gw(!N'윙׋#z wb +endstream endobj 5850 0 obj<> endobj 5851 0 obj<> endobj 5852 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5853 0 obj<>stream +}&qfBXEe+^k%dRi^OwcLljsGRDG^0>V}\YtCQȽQ[p-zj3a]B<nȴ|8a 3)@CspmW(r$ |Uk>XEf{$)̐Ț]{eǝ(y*(j>áJ9#``^bo…}jNj:ߢ(=mbZ&p- +[3 6ɟTxhB4Ģʺ@ğI2?Z:d9=XbaaLෘǽDtXT$yJL%dʎSqɶ샭̓HUBV] E043a͙҈ڄymBa +u/ݰnL`)֝]->%o# Z=r Ҁ +.ae3=e2M& +yd`z.q[Pz֪Y'Iw,TIK7ũ4jLP)7Wi᭧xt^ hhc𼄫jYG峾ۅ)],?5rFCJS_iʒk*6M@:)tS4s|~&2ϓg> sCN΄g Z_yhP\Cُ !vԪE,q +l$)^ѥ%$ nd_ﭝcQ,on̵/\?/etiB3OsWϛvrP1|WCoTd˰yAmH&uq}4=@7>hT3yWy"q+r:e6m<vplL&ik-Dl`Li\b{hí +endstream endobj 5854 0 obj<> endobj 5855 0 obj<> endobj 5856 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5857 0 obj<>stream +B#pݓF[ak,;d%\b1gwA :{u&2ɮĶ43hΈؼR _šBs7i0W{]:ٞEQSCo>n?4̗7p*WXKUݎA)u+ I6W 4NkTzֽXD9r5ft axFxDJvM +9WB-> i: ++<{5<*+j~]G HbV>u X{nO#c8M{ּ 0X&0 Y#&._o-oiraQ(;+qM^s44-0gɊua%]vAU.v`s6@ҘCc@6GJlDSnP8Wb[ۄ٫Kˢ |ݺD|X.pmDE^54sL fcyj>TH %3iKΧA +R0vpI"%\`gI98QV/ j$^<窰f3WuOH.BNySy/!md~GOK9NvRq>G&JovI~j /g? +O_t窻}$az#CF98E +SO`IJ2TSR=k/t$rАA7ΫJ cJh}+cLlv!3{#})[xqkhjPMH 尵,LfO6Ggi5 2 lvb#w-[;6V/z;[ % '%< 7ߴgQ񈠑mj r[ +!Ў6YB*꯻1/.i缈FWv;mZAI:鋰 +BpUoY +endstream endobj 5858 0 obj<> endobj 5859 0 obj<> endobj 5860 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5861 0 obj<>stream +c˩)q c) ͹6˶-Gҳ}:>EeɾeއI/G8ӌqR!Aֶޝ42ggD=c0T & +z$h莿]yh'fm|(RQejp b~oH"4K߬ +.$F4q"|`ǩ8L^;ݿ;Cp_z":(1K#Sʻa浓L+}W0’i)!??Z=9.1\|uT>Rw~=4;q]@k%G x7M] m9y-fEM `8!!>0 a,Qdcn5IG9Γ U obzp=̰н17 η,2adB(H|%Z;3 q|i!lP\۫X'uT3 +{,ݤژQ#gaR @P@IH;$m띗:X`CnLuxAP]tnߋd]d庠h \8?q}n45SKs"T5OD8T$Y~}m JH56]ӫo־=\-t(<Z,?`peZ|ZG\oş^`ěnbm/|F}_Tq)2JK u7SK\`4ӸbPa:Kíww\Dvb<#^E% +endstream endobj 5862 0 obj<> endobj 5863 0 obj<> endobj 5864 0 obj<> endobj 5865 0 obj<> endobj 5866 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5867 0 obj<>stream +%EZ1 *B3:ظUӗRZ0@ZтnZ w11mܟxr5L;֚6YwE6Sl;\)  nLRīB%v +ٳx6ac +_&U.&@Mx+]QQȍtio5B;㿿֠x!] B*'2&}Փ?D;|,]{~Çpj:`M eR#Cϊm~#G!I]_eB(;vG)R#s`Tݖ^[%?} +yS<>g'$`bIsvZD*M!EJ;d>fB P'zV&Z ŤuV:UkHV%7Y>c,~d>*犵Vq8w=CST(LfTYɶ!UDžNj=PjgU9> endobj 5869 0 obj<> endobj 5870 0 obj<> endobj 5871 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5872 0 obj<>stream +Qo?.%yMBf.a%* iaM$[dz( a=LFx7P7ã_,潜G׿zzgZh@{ޒ,/+: ݷ=|xv 5mf`$d;&;yrՃu$ȍn+K aN[^; #z谈O<<:d=@*筻q:h=mD +@>bA@ YaƄ#,V죙MDwK("i:z^.3fN֗[(;5O@Yʝ 8|-.yB ;jO7dt?&#.Iaa㽚*Ea=p'nǸͧq @S픧Q@a?wb5qbi9hP&_/hFis1 |ٞ(qu05\-P72'~:3D$);S}ۘ-$I|T2v +i&W/8ļKg+4\gi% faI$Qrwsm{V0K:3/k )Se^pH.1J +,GbS6ڬѿ̂H>[󛠠GCNG)+5n9ķxG,ԥBk˹Z1h@?oOj ڏavrxis fK\ʃ yd9Yߢ(ZknT},-sthD\p +Q JYrt;7Т]zr +Czkbu:P>A2Cwb"]:.VuHPT5]UtH>{> endobj 5874 0 obj<> endobj 5875 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5876 0 obj<>stream +O<ʳWp+21* +Ikc&aղcs9Ns5L5,iMsT+9?hdVz"ɚ_%mGD 9QbDkx`̅=q2vL?)bsѼ3~j R^a&+-I&>>);3'yb>_%`;d0X;> endobj 5878 0 obj<> endobj 5879 0 obj<> endobj 5880 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5881 0 obj<>stream +<4ymN'p5!Ab⇅B_#ɲT6_z50ң٬6: 2U޺_/gF/MwxPzSs78]Iq:7%;9oQ]ŻwTF}; +FG@_| +3|,z ~}AX6$ɀ:ʱX%OjͅG݌xnY;D8<]cea\ 6.`$B@aaKظH͝D:kxt[uy\>hWV *"(ؚK㺾.Y.`sӘjب.4lT#q7O`]Br'W+I`gNF􆱂 ~ҭ;?(?-zSyG{ IBVoO #'#,ٗkEtaB kQ!0.jUVV5P!tq~y=>6z8>^ d{1)f9(8]&%0KjM*-#6w3_Hmٮ #OK\Ǒeۺ?fy( +XNSc~C@D2L*VIjk+ܸ"ж>=F oE7GW~*TjjCsgPKE[|K_p7kݾ$gvn^frݨ&4FZs++\7;~z>}ܫ1w"t{);I o,RKgkYSʺk'eKz>/w=~z 1ﲍ#o #]xЇEXd>F/H('@==)aB9mșcfӣ1 +endstream endobj 5882 0 obj<> endobj 5883 0 obj<> endobj 5884 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5885 0 obj<>stream +T%oLOq0ڴ8\_XW!cVLA%HQV}SScA'Uq#)YA&Vy's^ԫ>iCA e;ys?ė('Q|!ViNX1qGEE_"p~d K5DhL<&@`_(0jX,nsիFMhj8.פXoݩ{Q6b Â^ iO,{GV4Uҋ{> endobj 5887 0 obj<> endobj 5888 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5889 0 obj<>stream +}}R$?䉭b*px1j_[ĉreHٽB# jJ3`CIjW-G栦3.D } BwΓ-t/$۞Qv23crr,N\[` W*" [<>>La| d$onMq~]^C3wSqoQB nn^Oews|0DӚG3o+ J +n 0tZQ)G P2pXSV:YX|]nѦaYhహYze8#T|ET4.ϖ 鮖X۰cȐ 3&'x53 rVTޚ4JKy+hLNޅ*";2= :x  +2Qp/V1d,Aҵjes.Q *L+jJmn9QU -(pؕ0S%(hf' …i k,%PfCˆ׭(p7^*v!ŏn_5+a|jN1!Q+8Ig25sM|'?h'z "LjF2DQʇ3(Mnt~my#I,e@;[lH ])+ϾW4A u^OMB?{P^CBY87{6i&NT,|I5{bQD  ;L -H3'pr +endstream endobj 5890 0 obj<> endobj 5891 0 obj<> endobj 5892 0 obj<> endobj 5893 0 obj<> endobj 5894 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5895 0 obj<>stream +dz4 tZ=˪ ڼI\VCJħgJsi.%+9~Jߢ˧5TT}ƙ9+؅'>y6?\=tDtHqM.㿵8Dty[4ސ07bYեFh:UKz\&ϖ*;[8&Ar7b(AloA7n +#O e & +RM{[+P#b[טG\C>oГ)ܧ ʓfB nMf?cr/롟=Sx";+vMvtk~GpA7Unmf I1CyâW2Ey_6fMڠrfOgGCu1ԏ{uShkɪ.C>}$y/n`J4#܁D +)᤭[i:vR$7z &( iDy#]NA[)!nɒs)P8r{^L3|\lP>:bnxO팧p>6Tt'>G(?e_N"WPs]|$&`vhpsÖ씖yD*0L*Uy)p5?XRS +6OxF޴Yla;U~PrٝhrzRL&)W0]pJ-}<0WNP0a; Րx5y?Za/)(-?Ȝޗ/Ꮲ[A]X1eP($&V";3l3ӕt*xpQqf"܋.'OI4FMҝaW5o|y#؋R7eDK;HUnlC}750R|1Mz2>H +endstream endobj 5896 0 obj<> endobj 5897 0 obj<> endobj 5898 0 obj<> endobj 5899 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5900 0 obj<>stream +yhC3a(|l3IQ 8epthޥ)Ib{|tsmS}q]ZTk Ssd\]܀wh& wbV:$8 X[sdFQt9RjiQJ/w]ȽTs_ƞjcl\峞Ÿu`[;p}T~lJ_ptDl˓ڔgUn ^mM4o?j_'l8YhvVwMkԐQ>nPԑ?) +Om.̻+1NLt$6x!;[][tA 3 +.[&(]T+h8J-| 6eAZ)#h[\vtI +X?TLHiĂQ)I"ԋUg9B +endstream endobj 5901 0 obj<> endobj 5902 0 obj<> endobj 5903 0 obj<> endobj 5904 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5905 0 obj<>stream +cpbg%.x劚j@ǣ˃P!m3>rifL@Ώ+SI+>m̚Ú aֶn{ͥt~`"M'4>Ҋ.QTΩOyO jR=w)R. %ZHD +].2ȺP?^SvAFި9`ǼqHDsCJ|NT(Ώ>ihF,1Rh;=J:(@yDT,Ş>nO/JefQFZ*KKesB ՇcsküAwP)uR~YĿ/iTWhϕ(= qY;05 +tzLQ00.@Z7 ((3O{/h%-2{RDEܥJ5(9/ݒ"}Ӵj>rУ+|z;Jft9mD&52!U]67( p13-0ׄ֩L,Yq.9NxO\iWqD`8 nzgQaKZ'gdjN* ya,O]rܓզն.UNA~``}+/Q{Xx4p#B..m%vP_vNpm|bC, rxtܾͩ$th M, T~+_ ua +VaS8-]NΟ"٠:<cƟI)Oh.]mfz)I +endstream endobj 5906 0 obj<> endobj 5907 0 obj<> endobj 5908 0 obj<> endobj 5909 0 obj<> endobj 5910 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5911 0 obj<>stream +֦.nTg+#mǫ^B@>^w]ضэ+g9@e_- Y0UP0g1{Od-S[mA IXA,"#22Z;F@J9yJlܪU G( à<`ԗWrC[|E>1UM5 ++HĤ! `߁4pErx3kbI9^x4j^¢ nԗAe?ox2(Sgzڏ8s~{`9[?`23SZA/YInBL'[bn |gI |@;*jT3SS(B?Ðn>7sb\BSNF6sc37 ֪LBP)ilz;da!ڳ"%xWJK&eiN ɟiOʛYϱ@Ρ9ĪVF<֌Q\k,_Hgc{kqΖAPO“dU +4l3K29O]:Fv'|M3,ɺ}Σb57=\-/'qLU +4]tg êC1>%MW, 1\jLE_㩷q>nP?Y:"1@v\\ψI]3d}Hl[WS$CJz;@ezX.Rrq0WEAѾ, " U\p/\*EdK3+fR +HᔒtIFx(ff F-eJ/Q _g  o"ȌkHkiE˷k:q6߄i̩bО׹tZ)};KˇVAP-+Y4qs p>)]K5@.Lft\ߊi&/rl!~yHMَ_\K4/* DN>1 ߬*L$ o8ZRQZd<7*Y(iW+7jsʐPhKh<޾sU~O[0T3};QPG9kMe!zVx[֠@"Ezǟ2A%uĪ(1@n3gqif)ThUJл54a?։h>oW]`9Vo*m1a w!BYQd4䇍|IZ mX2 h.{r9qMD(\2q*E*AFӧYAkD -}e;7zC02&,g+O3P:Oɑqhp3bvy?}W}b'㬷x4t~&MUBPQB50̍MO.@p㗨*(-Up:^h,:?ޕʜ0\nxYndU +(z<Ò{'BN" +endstream endobj 5912 0 obj<> endobj 5913 0 obj<> endobj 5914 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5915 0 obj<>stream +6H?DΗ 6dz; >M}_Zk;KZRMa+j˹ #WS!| +8k ˳ƁC4aG &b:éQv4էy +ؙr&J:,$L~;Ƣ,]U+m4k| '{Lg(pr<Q*Z-!|ίM񕇮I;gJ8QMK,+~rډ ʺmhx]A6ZӬVPB,"-pc~R6Nbuˢ|=f#hpC"h^92%X~k=G +%2'ojAcoRstx,D3PU|tSI=2lW Is6x>uؼD̘jyi%4L34M=0{mwYiXKhV],mrXVytx]u;1=O [!x;:.a7{*QU#͏:QhfӉjC74)*T`CpR˦-!GS}<[9bU7﷞T`rZDH>_CXQu8 +endstream endobj 5916 0 obj<> endobj 5917 0 obj<> endobj 5918 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5919 0 obj<>stream +ƒ1=OeV9 !>x.@KIྰЫNd :q!w@c@c %)w"Fkj,7MᐟO6 *ԺEfgՔ$k ҒQIDSZBd(p +USV, 7`AjǸ Ho)=*,?i{.ʇA3TÁa܄yEڜUvyO8|ghr. OFC`,z 3' !Dx r-&~MA4+5>(iYy=Ev/<#eMglß^,KQ}#[Q\ .LGs1]Gh3D G WG>H)ڥ4.FVCIp=$ϘBalc?N-S k? 2;RPunv߳)sOObW܍Yי+|0?H v9Ƨ(Ըg=HaE%ZQ!w6*4QO\efi6bL`kZyJy9?9- ܗlV:_#uCE,E_6 +OvY lG9gF@CGV/K{A@~z ѪaB\}iQEFkW7hr^ wt\nEJW8hbE<8! zzzK*ٯBۨaK$.JԏSe]Ӟ&GhP5vfs5WVR ^#}.XjMvy2SٝVآ+0 +·wCHO:rDxģQV~}Auwe]&c^ĕDNGH8 `&j9JOR Tc,`CyE? oe1! +endstream endobj 5920 0 obj<> endobj 5921 0 obj<> endobj 5922 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5923 0 obj<>stream +,W,Z#n>"PU/A&NGvϘh6;Jl˽{\WwIG`}.2k3x-@4tivۨ3 +G V]r;< C;X~ncI/Ue$˦kZ PC7UNbJODzŁk|^G#'a}4Ƕ(54ݓ*Uv|3Ђ\RXcv# +8*<ڦ|d+8L&WEUU >edb҄ Tb#43Q4I +y +Ȕgπյr#yM +΀ƁxaR;mv6x" "}ޙ AІdH_9*xWIiZxn:;K_DRA^-Q#*J!Ğ~r6DKXVj+5_5>Q-T~6Fev(6TxdUW4j<IAod7' +5%';c^=@BT;Zk$>+w7Ozözж2ŗ{% rnٕ"D E=oqu.rGGjȼ }J `\\t +Êrd8nlxKoCc%e9G? +endstream endobj 5924 0 obj<> endobj 5925 0 obj<> endobj 5926 0 obj<> endobj 5927 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5928 0 obj<>stream +,uLp;\WO"}Ed\e?~Y{ ϶v0GS5qEOݓ1vv1I709wG):26㳅5ջb1>\>49%Ó))^y;v]KVk@հx\]x%w(𧪳#P9?'apo{N.~4DL448Iw79o]7*Q,"?~*ܮmǀv|RM1 klkpϊ}Ǹ!JW*SF 0U L/T<f6 ᯥ<ꩊ~5TI(gc .ߍwqy4l> ]M{;Kqz [p畧 +Mo;6!LdRVT_=h|hg{}z&qvݢOI]:OidT~UO8h)gGb?+WUPQ™kR1iwܷIM ;u~cL +Z +Fl +1ʢ=mw&drAwm>0 gꔑAb$cŪbԢ#]{?'#LKo<Ԭ:u# )1r.e8=G?Թ}.FwMt_w_+Bn. 1/ o%m-"Mʀht' +endstream endobj 5929 0 obj<> endobj 5930 0 obj<> endobj 5931 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5932 0 obj<>stream +%=&Wj O=.U V))E1VՖ_^[~=*'w̥ͩkH-R!mlU $S +ztӰ3L|%Pե[MS7I'L 'OXƼ%Pf/3[@́${+H+N0_=ȈBrsWBխ{!ύne;2qsë6j ĻJINP3&H'LL,2jj!s;ǃ<ӥPTEe==u'jϳe a"n%$8òC;RQ_5zVٵs@҅&$KQcwCdd5rP<zbBq5?LؾV[IHkYRaC_\ɵ\GϑQ&x1C )=i.h4ks]ƥGLW,&[>\;Vx@ѕ; h{gN h/4J ?{O 'k`@C9IU_Y1-)(*?OWr_WPJ)/ +gga>ZI4MkL361x}Qb>2]i +endstream endobj 5933 0 obj<> endobj 5934 0 obj<> endobj 5935 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5936 0 obj<>stream +.bk5a>@}B]aԷiϻB=RgA.&S4M$(K}B?~ GU5cͻz2c #8#$OH~E X+]RdrcŠR7kt"p +|VH:ܠv)!3J(Rto7u]ԣwZN]bWp$#.bqNtAFRqU!'eN)uxK\:+F'1Zg# +endstream endobj 5937 0 obj<> endobj 5938 0 obj<> endobj 5939 0 obj<> endobj 5940 0 obj<> endobj 5941 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5942 0 obj<>stream +d[c9 cQ%TiYRc6Zw5Vȃ1lc?OuӜ?i8Zr2Ie9dCW;KLТ2'-<;&wsw ϪgVYv/8M)dQ4oѵMXT2 q8#I=֠!'R t S6@i:űSo;b%UOݯ8EpbM1&:SD/XE в%JI mnib3>16I`W=,!l f6 /gN}gD߳0ZF xY +W!)b4M$ }","$<]ȧLflqѷ!8ض \ llt %"[pO S?r|>jJT\lb2Y^JNR)adjDagFyِl(j|"$qZtU&$)Աn^R!OSƢ&Ȅbo#@UL(XCdO Ӈ;hr{T,"_Z9mEXi 觔 Py7"wtb#Yͷ6=T~`EC>9 $re&tk$ %jT2l؏~0ݳ!eD:( ;`?'h7*zT/\2)L8AP'zB« 4kuEڈzTZ(VALIuN@^b~Y}gMdHsLy&/S])SBV@,q3~=ۭdsn@ (]L%E-(x| +FfmKYDL?Nti,Y$3~L`-KBy.X}9*ϪeIڪJcN^#uq!&+Ie5!6pL?@.[NQ,--?" +endstream endobj 5943 0 obj<> endobj 5944 0 obj<> endobj 5945 0 obj<> endobj 5946 0 obj<> endobj 5947 0 obj<> endobj 5948 0 obj<> endobj 5949 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5950 0 obj<>stream +ΒQ7.L:0M_;^Zv:f+8:oart'Hq4||n1!<4l孽qOJ}p 3ਚb~uIo.D(@#XLr PP+ GIǽ|Pk]h~KD.SBܻ'@K/iެ%,?qCOEWG5ѱ tg[,6jIF6؎Y;e6-,3:qEo֜;^#<t2?KF*lXf"R"Ңi23P~eTX>#Bl+Dٕ&hBv@<_zBKt!OgQ@8ȞWWذQp + +1@Li6ltLńz8gɎ7ҍA"{!?7_ӿIPF%QQ Au݆0F_hj!է+X C8>}и#WR+ *"9EXZI;L$i%s=ރ7*-G+Yeb0MɻqD3oO.7.h+J. Fђg ]ʸ]C)ٸm(৓Gފ ]}(V pl.'Njب%mq0^Jx} RtEיZ Ca!*mOADx_\ʝfAP'~ DNȡ={E: ]^eWJ9Aݭ"_q! 2nȁ]$6wf]l]Ud/֏T1\|%)ٴ{?",Q`&<%M$Mbg)ՖՐ&:ohٳ3hqx > endobj 5952 0 obj<> endobj 5953 0 obj<> endobj 5954 0 obj<> endobj 5955 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5956 0 obj<>stream +RWo/8鳠Ԏp e]Wd9p%$X9hb*h"܎5f҆Uf +yk33/%yWZElzbI8^؆o@f>,M2]V@-[Ӛo3 ^C*m؀^ۨ%{H[-*p>ZfV4#BJFU(Z҇bF_zPn^uLImnR2Ln_.EM!IT#t/ 4;K[VpwOlWڪ0u8,\~D ?'zܮ0.qw/x.H m0VK8(N'3TqS>چxGNh'b[Wd-M&%wU?<%ؽ"A̙ a$cM6+;6ӊ&Mݧ v&b6\bqkFd,&K}61Y"`ydDf*#Gni`쎖?\> +ML,re gr#'zu <)l +;hѭ֜yT(T>St>*f[IHn*et +qbQr.*<.A-jl[_LTO:xzx-EפtMF<4Ya)kh($9:+SHN\EEYu?Djv˪(ZEl=P%T #7LCE@Ua|æ+zq7 +4!EҊTjP~U`P"ٶ-^8͎8 OZYc%x> )h3|!k<oFK;`\1Fӻv0 nwz["7{ 0]Owe +endstream endobj 5957 0 obj<> endobj 5958 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5959 0 obj<>stream +{΀$X#Ђ+>Å<H=]V^+t@[vRvާIJ{˜y N%L,;tl,0UI<>N4>k-mD^٢P.杽DǤhE6o\Yշj4.qf@Ŏ,FzK8T klIO]#]JsVCO +endstream endobj 5960 0 obj<> endobj 5961 0 obj<> endobj 5962 0 obj<> endobj 5963 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5964 0 obj<>stream +\=qkIo?9^o-UbbYH2W?<|sC +.. +KSy4D2ʩp]Oq^GjLۏ\Q6 ѬNᥪ !*n*>0Σb,/,g&\=X4eVQpTȎHuAf64@;Rpi ?HƒdCjwbFQ.2fW亮 GdP*S>5|/#}s?`KNIefUHOZz=Qe~<>~!mr {n} l2bN#4 }4ygU}Y&\/9Lqo0gdտRieAQ[x\lq1T:? 6< E;<*d|Q-B']r.pI ߕ:bk|9I^cHwD{!p5x8-4kfܴY=tVq\)޸x |5tG 뉘2> ^&ys;r)/ACT(?4gp۠-YIU3ٓaAV쿟{i{0:pϣ9٠~j&Lxgũ&wXiGɰx#̒`P=+hG=՞,8'lW2,o$mPG 'VW@-GEb@iCp +4H1pJ RqjQj ˧XV/>ymrӬF&{Xpժgn5vm³Gfh_ +endstream endobj 5965 0 obj<> endobj 5966 0 obj<> endobj 5967 0 obj<> endobj 5968 0 obj<> endobj 5969 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5970 0 obj<>stream +qeVܜ`֡ԁtW4U<` +CC"L^s-Y}w-gvJLݫN;75[@q tNPY5U፮6nx$o F-"4<`:¢, wCy hn#V=G `z̲NSp ,% K߱ It<, : X\߄L}; dۛr"Tzr +gL^GAJMMTI0fBg%Kfػ.o*F +U+( c`XFm0&z[V,$Ŵ +>^q50o|ɽ$Xd*R,VA3qb'@3!̧7(N 5zu`-O_s^@M2HN( )|F] +5jnodЋ0vCK"Q{<_!V( tPlb[ 9;Ѫ&Bád4XJ~'K!{<9N`k$,%1JO+=TÃ{+zB |#Ǻ9ךլ_#tN ;~!c/ B+4Czgs5,^)-ЎNi8$_ +endstream endobj 5971 0 obj<> endobj 5972 0 obj<> endobj 5973 0 obj<> endobj 5974 0 obj<> endobj 5975 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5976 0 obj<>stream +jYSo^1T?HW;*[+lI^*c˺XљO }P-I2lvۜɦ8Y}o157)(Nf9WqrEڐ7I X{|f'[OI_l$o#QJz .pK#GN}3qۖh,58̎{27ޛtZo!l"fHV5L&0hr8wݜVb㚂apoDg8DF~ ŻڞeJnj@iDJ7&PN˃GîWάn|yϔ,p#fbkU/AκqJ[-kv J +KH+ [@7uG{L|(s+swOH[6hhb>xvQLQU&JnSc5[ #PTYDJ|Oi : 4a@ 5~O?t$޺EK$ԗӶZ;0fnDv PxigL@J-&& 0 ST,ݫBiVnΦXGW6*_7t ۇm2eϊ![ +Q gxsߦ`j(? X}XUIܗwO9a_i)"] R+F.;LK"r,˔:8G\W=6FRE>Tjb pK58`Jj +#Λ XwJ)`N_`WI諭')e'DQuRc0?%yD)7x̄h5$@I|ŮŹZJg)qFy<:-K`Z}-s uK''g̬9NlCҽ‚RЉxᒢ:k.Ctl0? eYV>6Ԁ]7=T_Xn^lxz ^渆 ]F=7Z;+kYܚA;d"y&"|?pdv^ga{! +8_(u%A :d3c? up;Kj +6FvM&uhgw9`4 /)Nw@kr"A.K="xf'ɰ aL%HvRZz3仕rO*yOp}C m~b]Th'wR#U< O8/ppuψT۬QQGAJC7>r ^!-#x"@iﵞI*XU\9sysp0/ +endstream endobj 5977 0 obj<> endobj 5978 0 obj<> endobj 5979 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5980 0 obj<>stream +I?>e%c]F +ʷ;%i+O샫v_1HOo_'+ E4bt^4TnfbqӡttS!  +T9D$O$6?uh释M/YveH ; U)`~uZM֭w|l.vhTf$aKuAx>Х뻞8s?q,em >3"źBЕdUn]>N%] 8}bf)ڮsphwt؞hD/E>XM4OQvL<[?Xw%pݙNm8|[[{a?[Qoi-fj7;yq ?='װ\OH|TסŌ JN13lq`>mdRBI'JED/yZ` ϵu2 Hxˡ-b7׀5VU)GM5YWKHNYxd~Y&^`K=,4] +縉'?DЄ C篼:4{gŊ9ܸ&t^NfjZ,DŽMQY`] EY_:F@ zgm˜ +vk'ѱ +վNKh jPYʩ&?±:U(k[7D8gV_"4"vp:R%6.~q0cm_6SUG]X-7C0Y +Ǎe#_{*I]+u=9G61?+G[{8cp J F] !?0t_V ~I\ʶglF6W] +endstream endobj 5981 0 obj<> endobj 5982 0 obj<> endobj 5983 0 obj<> endobj 5984 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5985 0 obj<>stream +&PBP !yDݺҌ _/OB6|b.9ILg ` Ma$G@DjRR7G7m$(o /ȫV2^_&Œ=zCr +-ٗJ@B*TDjԠu]G2x2'#@Xn^.(9H5amU3/fؗ~kG(='Ԭ"WA@|J=%(UBŌgV[>BQsOh{1v8BYCB)r*xbCZPsNL!SZӬH44`י[{\U"߻'siwd_O5 +@-~s;]DFA`>jPi>nHs踲 ᔗt}>ᄳ-6' Oo+„`H!r7E"CNa$9V%tCyҷ3)9و#)Mt?8&Y +ʴz(Ihglu|8Y;L_hP};1ۓb,ofڌ1:_G ~]`Pr._:Mtٹ?|=`Fd WnV.cۦʲ|1t} %g`y6%u$E%12?"q~^|jeGAqi8clڛ +endstream endobj 5986 0 obj<> endobj 5987 0 obj<> endobj 5988 0 obj<> endobj 5989 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5990 0 obj<>stream +E"cPEG++W͚ttj cߏ<^HNIȲ{kɳ|Z&v^0wt֦x50 fԻ:mIXE$9a + S(sVk.ʀCuWC3,; w%>W}~p ^gAa6U uh\ʗNz ؟2CjU,va²cXҜ<v)J.uQ 4bG,?hrpmlҎ 1%r~ oa_SV.cu +endstream endobj 5991 0 obj<> endobj 5992 0 obj<> endobj 5993 0 obj<> endobj 5994 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5995 0 obj<>stream +N]D+\7Z@b{H 9d +9ʸIlڶM@P(EmeXf$7]ݫ$s/JFm>'V֬G5l EW/o DDpGH_^QYK]6#5oxGt 3qvE dJB.` a'ASh 4VMϙZ7L0Mtko:)7KU0'pY#+"2ݍV`nq=3?XN0LÐ]ɼZLlʐoڠdczv`9VP7+XhQaSs9f~므wήDxp;G7Slmr66z82$/: }g|X4ޜ3?Tc s^@roKɹ`/셖kf=+HeSϾ& +t9X:|©仮To3O}pU(5u9v( QΫ/fqB|.Ml˜pMFo Ӵ5" QГO{5CTXmLLE댗zFO.ϏXP?IcoEr_%6lzcA#;3"^s5qS1p}P_`` ءav5ӷ +@2[yqOTk¦ 7 c)(S)]'C&&jn?>-z^R_$c +"wu`GY3L5^Ja\`~ YÉ+^j]f^72@U<^V̶*p ԏ2Nnohic9uChI$%yx< (hf.|.(g +endstream endobj 5996 0 obj<> endobj 5997 0 obj<> endobj 5998 0 obj<> endobj 5999 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6000 0 obj<>stream +f}: Bd6Zךf q+^@ ݆R=*(5n`m25>h HP{`׎]cC@}iϛd«t (PDDO|~UIkCWJu)Ȑj+;֫n$,X)l6?E+cʆ tTq8*O!Q3=UCZ?   +Wwn7;w`f.M->Y@1n> endobj 6002 0 obj<> endobj 6003 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6004 0 obj<>stream +\ӧTL#E^py+#{+Ɣs |Zt4L^ҝp>Ӣ6 +~ίb|\B9 r\%WЌ{ϰ{U'1͆~1&^} +^;sQe5(.| ^)(%o%fnh,e-IFA&#.b%~&.)@AZ}wFt@ġ2@R9M\?2Xf@֋,ri'Y~ q ˰f/2>vF(NmǪ핗/ g*2!Ƥ':uEj,FDGR}<,/tv?3BN7$ O Oy]!I<;c5B!׏:ߡ@ךh|KY.Th~hv;}о~WQgnN'8wZ,$¡UR"q=t@TBkJlrnFH^}-/n7)iCUɋ`߭ d2KdwZŞIbb@LnxQՒkZվ:l=7yw,@Bk- ] C.s9 -7-oYrÊ'\rW<'VѮSX[<+53" +'gy +{?'˼xo0!͡GFLqo,~OM~6}A?y3cT@-\> endobj 6006 0 obj<> endobj 6007 0 obj<> endobj 6008 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6009 0 obj<>stream +%&eYBκNfnv1+zw9F7GI&" + z$D _)h*}ڠXݛ.fP~T%[BAu ~'h ?-1 X; +yn>w exi3D0B&PuHE?vS£)ӑ;b E?L '۪>uf=kI=:0wsiQէYx<=)Ex|5si\z􇉏뛆CxX5F +jK !:6Ty!c@#X\f,u BT=>{32B<(csq:?ud`JH f2Kjuk8=/]rM# RQF}n,|rmܩa??{TΆj͝L1Fc[ $)ѩFoCh#H[w*S6r+YN+Y6%:ؠ i>ⅷ) \,,`.qan^@?ߙO=ϡ3 i8/4`b֦lmab+s5Rt/$~N 1| W1[yբ" `٠xY=8X/ +WX{ +JMb-ʐ7ξ" Ђb¨Y5WK y мF՘׫쇍}"WXU> endobj 6011 0 obj<> endobj 6012 0 obj<> endobj 6013 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6014 0 obj<>stream +y!EЪԌc: 2ŋ2F;,JVcJ m @MTK,m^Lj!(^P뻢/cm 鱲~>Ǿh & 2Ջ4cAwln-E= #ϫN0pNJu)^ Cl%ĆFX. WބUU| Ǝ&*ȼ;VI;vG97B쒜VˮzKǘmɅ-`!Z(iQ (>CD^'聾Ixݘmn8~=I~kA jxÄ9qEpvʁ'׳;2K\Z REID9 羑aU2E[U'ޤ g⑹J.S$90V*,R}bX#+,Gj22>}JB%wTƀ5:fqGzY&_1. & &ͨH/q}dr[_Gz*B0'*%| +LS ۆ\[+ Gd@iHoAAx%_3\=ig1?吇 c!U\ӈiC6 ;0bŕs>З(b8.Z>d=Mҿa׆v^Ysc2bQ6޻7lW!}) Lm璛ぬ"V;rۡ^syWƎ ѥg7ɕ;a]NfZCL O*Hs 0T%Kj ۸Y޾sr^U7F̓pp53EM1Ux0 F~fkw=՚(u%PIS=ʧh;~(8'ԽɈzEW)T&e:nI]E]mD.Pd 4vDbV&`̨yz=N:Zv>Mݏ;L֛{pJ-usVx 4]irN恁mgoHC#hU%|E  +endstream endobj 6015 0 obj<> endobj 6016 0 obj<> endobj 6017 0 obj<> endobj 6018 0 obj<> endobj 6019 0 obj<> endobj 6020 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6021 0 obj<>stream +k:C+xfjMLY'=38,^,Pw"42o9Q_@A.mύ4)>=ΐeTډ5I?4Gj4Gߩp=}"#s] B&E_L#X/U&I c3>iÔ@'46{p>*$0bZ/,DJ-j!bHt7dx!AiTYU|Pi+Jmrյ6 +:o.k~jxxAWR+P6ќ%PGo_LKwɑZׁRҲZJnp&A7mva9C8vˍ?N5 odkٔgbV o==O+c6&xqzW OK_ݳZbȠ @c(CojgR@:׻cv;p& Ob?&upXl 82ʪC% /k.(E"-i3! U7}GبgC_$b!9b02)sץTf-qs2 +0toDžݢ%PU5J=?)_t5~aq«Զi"92_ʮ@LW#ԉ& ;Z8dT!׽QG$sL=Q٩"j)ȃٯJX +'LJl4]X{`u0jwa o1 +FvKu!#NVL%\p? >)J|lpPd> endobj 6023 0 obj<> endobj 6024 0 obj<> endobj 6025 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6026 0 obj<>stream +=ɩS#1 ~y~ X̲W6 + CM-l~݄Ӹ@X%2s\iSWυToF;F@XɯNMBp,BN\@M?"2 G=)AlF\5!NVg;AڕzMUT fיF{E`l{ōMMU1RFPlrdw.gTcw\ӳ;,:m i|5|ԙBh.Ix >VAAgBڗ B , jߒVlBqԍ.ƬNh h5Lms`KۑE *}|$1 +"m\If_Lc2a޵D^"hvyJdu$7,̿Py q_XX. Z'Vib&[#S²>"Ea0N8KlE^soXK f7X|h >>@ 4Mg̦g@'!]* {sL(F~U϶-Gs3tu.)Υ9<0p6k^懏PA[!=έv*7[|('hq.] uw_k}f#pD( ﷸQ@/cт?* c ,0H3\b^?=my} ?>a_+p' C)i{(N:TY0j jw&_̋Myb 5i&9 .͇)0Q)VlVl*1櫦TX+…\;g'#];KGCsGG!AEyA t^a% +endstream endobj 6027 0 obj<> endobj 6028 0 obj<> endobj 6029 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6030 0 obj<>stream +am5[j"#6٥$}hKpl*x4GY0KUsj߆pDՕ$tI*Ov,J:3[@;OLX>~Hk**fOIpro9 b/D Zf! ,ueĹp7%B5FCj תOv}k`ˮuF|\RڇT pܖ#n8ːSfJ*7un܇i-!:XB_Dng H1쾥lH4˿ꪟa2dLRz q:]zX}(̣ l`|vBvFv_Ua2ԅrf˺(tm~Փ ƉY+RSo.gZ]:սkQHd#?V&?j?X|Wds0_|-2ie[6XfQ/:c|ϫřߛ{~} !ܷ`[;n%ӄ \t卺 "\Oha3P"_y\pIͺr<+LRAG*8(63cch]Ľǝ7w9~0NMi2m|O; zD0-wFU| aE[r}tJ峒Q"Zav15n|ZupJ&B?|لG?uQ>z؜(h}$4Nw3jmz??>~vC]8U Fłǎ +}jmx&ǒ RcF4phNBE# +endstream endobj 6031 0 obj<> endobj 6032 0 obj<> endobj 6033 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6034 0 obj<>stream +dmW>tU +x*A]5|@lNNsT6Stˆ2[6^F{b7uPnwZx,(& +?G!DQ ݴ>wK~+ 1K1k<]r☂5Zgaet +'Ĺ 7}`yOADUlHX$3: x /ƞIP~GhIZPW;fr'Rhgyiܳ-ײy(ǵV)#^naW맘VȀ^FGhwM--ADQ4SF'={z?[fvvK1dPJ +ib9vUUO <gI5VȐaonBٜ- Xu䯓( F yNQ<Ne@bůho>\n1*w; ђ\aC{V,OJ7IToH6u7̈킭 +endstream endobj 6035 0 obj<> endobj 6036 0 obj<> endobj 6037 0 obj<> endobj 6038 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6039 0 obj<>stream +DތX_[^ou5Q-7u eQ{ri܊'1r1,44 H˛LuM 2lx/ ߨFyˎT01^XsCԭE#p Ve|DguM Mۃ:8(jE(\_J=%NJ nBe +Ӻϸ!Oï (wM_'T2`Zq0H vOP¨1a $ 5hg}Hv֛oI2(L>M꘥ZjUU _n"ST!h 8/$v~Q5L&my,Vw戴@6Ӗ6xHP\6zfC= 3հmۀLv?DFpoznd-mm1HtxΒ%%H!zHLX,PIw$լf—GJ7P^Ο&[#n̑AB![/=UZ[r'ًں0g*$ L!S&+P+gR$0*4k h;yλ`mlXU&CЏt8Ks~+q;5V-&mK(2h@}~~ Æ g?\X Pb\&2|؀Kr{Yt4HfmǢDAF 'QO3oA-6݅ƂLM=a!c{jSiS)EB5jB u&2vH@r(DSCRx@j83@X- @(z3r2@]sBO$I"Nǻ(իg%>GQXf,z##ҭzQ_gb`,W-=wP^rt ÃBtUW_[hrd]YqEDl}"?X *[͟9SD9B>KGiM&li:{M*WT14! +endstream endobj 6040 0 obj<> endobj 6041 0 obj<> endobj 6042 0 obj<> endobj 6043 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6044 0 obj<>stream +Vތt'W`p7*XZQ t\=4¡z'm{>w.~ vda3sC<|o'F'ΪYevOXIA9f+M]ލ^L gM̪]ˠdup4y1Zy/E^C>4ܕ4emis=OpP>}uhJcXSZ@6s^ ɮ0axu}B8A#qZezra[V +.4,ReBG5ubmٝV]ı G|*UYO/Ϧ=phYm-^ތ0πt{ "t!͋RsڷNhg-06S)' 7؞U)aiJ~N;2 S~vu +m.aE}%C3VIGeh/j{Vmĺ"c, Na,Xr@Q5!Vʆ+3&] bV%r[8%AAh]C՜Zb:MoP8`<&*:W++ ]JdM1`!@P3gx1|%C5)FKI c>0)39"9{UQ긭~adlrv-MPWݭsgk2ժiɸBLt B8r 37Ș  +qR6Pc~ܚmt:H^H=h׿k*eV5"tar@* vT;PP"8Ć:ńD)S]UVC+QPjNWA(`߆zChTcko+2v}ܩ}7||dT)/㣾 !4`x,-%lFSkS->M/pKe 3:g'{xudOq,$2[)^f,sPrj_ ؒI(9\i𾬲~̈́1>͡=嬝KhI +endstream endobj 6045 0 obj<> endobj 6046 0 obj<> endobj 6047 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6048 0 obj<>stream +SijMX#ˉvWsJ0ˠ@ M@'ۖeШ»n}c?\n#L\ -'l#-aCO2p zQimOv&Sjݚ%JB>Y g0%kNFr{-|R $0%ᷓXkԱ[=ΞMlE[ +~uqyI|XhMWu$a]v?40x-?}WRi_1j` %I`nȡfWq;L3f%{S*$yf1@?jŊo9y=Cޒ.٩6msNcRysqbr:xzUzB_]vOMU$4nZ9AeЩ"  tI,wkfnNK%R9d~Iֈ, pD =r +勖c(b#,y}{+vaՕDP)a\w};V3ƑcװFV8ˡY+3T!V%Ɣ-`,?M@ڱA\>(/%_R[Mb=_i7%ePԵm׈}S>^-KBxc$l[Xh''nM~K +endstream endobj 6049 0 obj<> endobj 6050 0 obj<> endobj 6051 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6052 0 obj<>stream +DKrZY"UJi|A"u8[Up?t2$ʇZp6صND-fmclG5}Mẃ<P2NR:*jmy2 Y[P.1iN{8;򻲌V/X *~7皤uuy\l!|g%N#t)ЎҕJDĞ 5!+ÝqیQ;@Fgvf6Yt=Ab.`f +o-RAwzF!DteOB ?}(Qp!Rja+BT9\qhw9DFUm+> endobj 6054 0 obj<> endobj 6055 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6056 0 obj<>stream +̓3B9úeY^JE(s|Nqb=k{i%:{^!3'C[߉ LB+CvO {vffQ[B^z +-Wa@@ E&{:6 i7ҋ~1/@3?S~ri6ۊK|ĄX٭궆\ﵒ># F(fR*npw'@2KJZ@b s޻=C C,j,RW|Ozӗ /xoG;>qȦi3|~f`8kbްn]xsʂm-PEoBuiq}ĻeW&"RJ4הQr-UG̎AnNj؇Gb3{rv:N_,zyPv:(HZYO,f9nvl+^w1 \?Jݧ /dfx L+ Xxi\em J6Ҕlz52샸?GHՄ5y'$ok Gma:o2`[0)MRS;gz0Ll ju.!BQ#OJ)KN:XKaiŝ%Y ʖfNp1Ar[)u> endobj 6058 0 obj<> endobj 6059 0 obj<> endobj 6060 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6061 0 obj<>stream +`P`Z` Udtuބ-5uK$khONl2qEg2[nDΏB\;ԍzCT j(D. J% ONұ8lscP'~mzTMh4$RIP^7aiݕ8tb)ݯdVC)DǶ`+5᳒d{V Qwttd8mMj36&@ab%kV&GF=Ń왗,NkR"0/M"stLɵ}g%;ۈL%*,C,M\5J'hoxTxD`@ߠ.:w7X; C}&|,ff9.{D#UIq\w| wX +J%{8-;XӄӆUѸV r8w˨y *{Me;,漽">y~ºyG+%mgSCQ y`gE u_(ӌt )d-hyC9'v`ϼ!AG \ˍ瑉+R|X< rlYDbyn}! ~Nnބ)vo&X|w! ҁLX sEȷCK(;ѾJHӟ9Z4ȚDy3B3йLY. N"AJIEgz3xBw}@Ha["km|N e>2Z9iV4 gYL60Y g*LǍԏS3d;"uZI[a(241MÙF"72"r*BrPw"S}֩ +([+· .0ih)UKjZVF\tE^QVZQ +4X ;`7(F=iɧ Q9_:g"x9riKq:<'WYus _du,4ZN`^nG= 5XZ|ز'] h;gjCB%˪PzDttk&fJu.d';XK,(޽|q*@/*4s`t4åCQ|P;zZdB36! *QTS RucO\|J,ELQ +endstream endobj 6062 0 obj<> endobj 6063 0 obj<> endobj 6064 0 obj<> endobj 6065 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6066 0 obj<>stream +w}#fYN4S1?&uSU;)U9dC^HԊ 31I@;JV o"릒 Μo ~U=tƿzLHg_Qw46&[:~f '~\C*~wLB1B/"Vʻ7 prN^cy#;BU(kW͒u3Vy-BL}a=C|zD1{32 I뷧RxI`c<;%^FBD}]Ne"g=$nj$߽섺ҷ$v;͇aJ|ɜydm{}pYbZCKQg#p#|N;p|+ i=$p9&ZR#B7>l>c̦ e۽O֚EuRyjrLQ{g.pJs:(g;Bf۬I5gvR.Ao%<6;vRqZmT8 ұho|&#.F p4;־!=ꃾ\{)ق +U)bd܁h%$c +qg"5˹۾{xyyʻ|McvqAaw}qmr!N0 -LIG[Ӧ[}X#i$ۿ=4Rbgg:4rU^Y0˛tr}$&$Pkc鮣6̓_{H,8zG+D{ FߜHW!_18 UJܯjz&x)yCQC}tS9q%Dud :i]HV*uѶ*"fwa5M7G[DQc9xbNJ{}QEKIM +endstream endobj 6067 0 obj<> endobj 6068 0 obj<> endobj 6069 0 obj<> endobj 6070 0 obj<> endobj 6071 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6072 0 obj<>stream +\+o!ͺ5\(e?)g]$ŭa_V'^ oҌ[Kɻ׷P k0DN}E3L@B66 /?~3x+ɩg=:Hڔ|g&'KҔ^a8P& +g46@\%s5 ){'}5sS 2i8yQ5^E d(K>S)sA sl9og28T39G +<؉EKPF$ rWCêq;QagMGB.6ٻ?, ".|;섦C8ں8R/5^^o9v,ރNhpFk} Cx5˷`?*~_`v {ddt-]2;7t QB cۏfa26;ZtP MC%-oV>XjWp'ȃOz-ສ^!zG1p-k Cg(MAҬ@jqOV0;\*q:pȤqjyz` F̆6H-C='{ߦ*rK~ 2+{_#.#W;ׄG#$*ypnX|v[1=ʫ(A{>㋷}5}(I@F]wh8:!^;aP^hz *AT'=&ƥ:4| ') 6RP2u0r`91j}T1,8b22kTxF?A(MG:<Òh~qߘ$ݫ$Wϧ/ ^-KMAuKQhb{q{Fr؎A +endstream endobj 6073 0 obj<> endobj 6074 0 obj<> endobj 6075 0 obj<> endobj 6076 0 obj<> endobj 6077 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6078 0 obj<>stream +RP{kjGi;O,nd0PL:#qGZ}z]N"]Zܱ3ot轇 @r)n%9G"; gU=)9lNf=@vq7Cڨ3‾67UYiACWw3|]] +,U^kjĆ +~v'UT\VΓѕү ADh?Ͽ6N޿Kow줝B7熆D_1V/!,$GDצ|v '>=x\= +^ݏP.y*[W%h4ˡIZH +$8FC!SAqcY[$auAdZ`D"PHF7K81+zS"O 56ꭥFolIo1]X('pp*/ %UFu<x8og]nQĆzWhmJ/qYIjߪhWVg{;5RT0 hˈr0+q\Ծ{X>YR3>اR:$%Ž r!n]2Ou/g) ҿ g=^CPaHB@ogXT=Vŝ]ZV/~P,}RQI#ـ-W:Ҏ$A'M^q!?4actqQQsQ>KɾC݌sme@}_oX &{ $vFF.3_d*SaK_*F"؆CjtNˈ' +endstream endobj 6079 0 obj<> endobj 6080 0 obj<> endobj 6081 0 obj<> endobj 6082 0 obj<> endobj 6083 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6084 0 obj<>stream +*M'S +I(d8#}1"٫Za]]?L`p `v;$>뻪H\ѭ +˄ m7TE)G<-P{6Oh0y,hR @d%ALLwURʍͿ(X{a8X(kKUs}.aO"vq`Qۇ1sp;JeA%ڄmj~^#A\K+uu3שaD~&u֙ZeWRɲOMxTp#J`BRAnr'/Տ)-fOvLx @_Yid4f:?,iA:jh58n6FʐŸ"6qD ?O3lto~QdDsqB謠ˠP;(&^ZrpFWN0[REOê]4+)ˍj-Y˞̒YN9/OCymm>L +A +|7u#O()L@O$AY c\!&ǀǾM1{8QyHǙ1wm5Uzo{"c5!Dv ׀a>}sfC=])ؑ]$AC.+1wZֱwjAQ:IJ[؟4ɱ HrmS> endobj 6086 0 obj<> endobj 6087 0 obj<> endobj 6088 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6089 0 obj<>stream +_8X,x3uwă{|Q>K@J4us ᱁j&~vیN u{Zh;(Un5kN+eyu",m+q",⡳_8vA : tO;_`^+ $}5"1@&\58v>Gd!bTbo؍ `Ӑz{Խ#^0!ґnmmɅt]48#yol)UGn9oGMyvlH[ޒgk:rkQez/t7ЬCcC-[Zr%=R!9S?Sؽա/cJ7+? |aL l_"M`~Q +;aD۴SXZڥ@y4Ud0.L?Ulv98m;1M(PUSn{aB n k#.ZѠ/@C8yVh)G߆2lpy0u{r1|jxnsLM-r(fK.}䦶 +endstream endobj 6090 0 obj<> endobj 6091 0 obj<> endobj 6092 0 obj<> endobj 6093 0 obj<> endobj 6094 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6095 0 obj<>stream +@*(j10[ cjJxtWś\X}hP5XroXi͜W`Z w6,}3j"EF1}>kZw2bl,"\iCo.AeƲ0ˇ ~4\%)E +9Zg8H!հS[O B_c8P{OKt&YoEBycqrģ,4!3,aR/y.CHKJ:5Sisk>qn':}eH|DLK}f6]RASGJ 3 M{㇖cDAS?v}ܞe3ojwB~NX%.М,W9D3mv"#{sbGq;S+Fm)v &7Ʌ&A(6T]7{"oa"W[w0Xol31kZ$P]mYh3,{ԛlxX^LC?'VP CLѩPn{.^ ͙؄92nf7o'~l8z-Zf`- ȑM +R}K =&}  I"9{O_@ﰣ% +4+P(0OѽB֣> endobj 6097 0 obj<> endobj 6098 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6099 0 obj<>stream +3i*~?w1r#'v}˟KdR_Enk1.4 "i]Pܵ8R%EE@P&wHԉ1:nϚSp13#oOf:1PwSމ'C&=2-k~]GmSx^ƕƗ|+n  ]s*<#w%OIw9_;RqjzTz`Nd 7iELdH:%7bnU6#T'Q%A+a^€Ðe# iT8_N'|&{ڡ\[y +Ԙ Ѽ$5t8mД&*E2u{4mѻe|~p+Z G[_Sn(^|2nH'=nƌh.A }a'Z|>櫿'}ّ|LX$9"D'aB&bj)ݽذ<p+X\(7eoo٥hwGi!R>Z}Y z6586 D~G ;0 +1jDL@-8YRJ9Y˯S3ȗ2}"ăXI<]jUm=Z5?@'BBESYMtChiP`u/B-lT(1Ov +#7![>4 +%wfRπjɃM\|mbctpRUW[ȵJ7,k* m`>f$m/Jgn.#Ϝ+ɬay=co(Jj] )^Ej~nKu \^ޅt&(04c#$y^͂Zh{hS pҧc%w&Nb_YBGWIFz#fI.yF +G1$@iB2slY +endstream endobj 6100 0 obj<> endobj 6101 0 obj<> endobj 6102 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6103 0 obj<>stream +->Z +c)GE-@ӄq?b4TN)m~,A`?f_OS89AUYz6k#~ZN6yJx=HDLl4D&NYmG9 Oő{4I}us6Ug_hHc[Οٓ`! d!ZpyrVuc [2&, ?R=.ߟ߀oZ_9jK1 [P@DJz,^:i'qԋ(++L.]MB<7s=ՄWHɥAwHU{$ ;_KoEp93/3lLD??(/[6$ X4&L0 QvԨ +F} ,7`Aw @IJe2AbbY&N"{ ҨT(Gh)'KevA+*${PWqiJ6̡Ĕi he.FM˹v uƤ>&DlQdmr.pcH(Yvq #"*;5) $| ׺gXG1 Ȅ';eQCV$Ox@WZτ,Fl־L MG9{7>$[QX)M7h͝7M OǕ.qoVv|K8 J"XԠ\"W|K/Z: xAs7Cq b&708H^3 ('$K $H4> endobj 6105 0 obj<> endobj 6106 0 obj<> endobj 6107 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6108 0 obj<>stream +^")wVd"eL`Еäu3hNR]S1{eImxPGcnj_x l9\xjV#/? +Y3E}p-ɄpvG&eo:Dc>ίUNQ#.2§B-XUw׬4m䜀3#>] ^dbH7cefN5MF+1tn(d˒[.ʨa YKֲ8nqŏG.@目ɧ̨sƨ[&Ury/efj-2@YFJ?KLش;(l@f`9Wu"%hdGjR*7sLz- Ņ)6 N#+v2cn9 NzFiKS̔M\\J).{IpK\4ԭK/:uV+2.B"إ`:jS6+O/N%M_"2_h|nf 3n4N^6 :]XE* 1&R'<;~;ڭ`h]sAj0 /#o,_j2b4oAe5xE6 /U qhW*䰉@k1kGV4zS{{#̪̠M~J͠hwT%~8@'udom_S+ F7M I$.a/:l<"2>OCFwv Z"؜ri?Γ܆_O&HiCm YYM,М^Ȣ= +9{n('# +endstream endobj 6109 0 obj<> endobj 6110 0 obj<> endobj 6111 0 obj<> endobj 6112 0 obj<> endobj 6113 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6114 0 obj<>stream +lQ3ǭ0wՃt#caZP*o_nRZ%oHN:'JfQR<%%^R89NuC(ShI!KZ``ִ(}bwʛuKVW b#FxB)%]gIn]yi> 2kl(D9 A~QxŏyJ[PЫd>G@#93YlS_Cɉ@B'"cy<2;ٞz6S6Gcs7vOBL 뻮Tf[/+hHKlF>l3`oy;>#29:F8Kk?ƌj:S(^)1>jk'6EO)9R}$h( ±eRN4hP/ͦzͪ/gʀ)_4* |9P~{)MAgFe.4sgV]? ӭJ6F17*'z +}?A)u*#%F<NRI:/RZ|Ʈ[c" H.D!|m}9iC$m򼿫k@nZ3*sjf|n7K߲}1|j?hev@<8Y8kdUm 1Gx[6)x@ Ql_kinlA .%j^붎Ic>-$c>JV\Ϡw${:{҉N5$Ra:)'#$,{V֪MbIVR{ݠY k @``|:qMmX9$,DF9AG +3Uif V_6P>AM⊮6(_jšBP{=r:>X1,D pTvo62 ݊ĄtV#m+e0gtt$yamȡ@i`*2W? m 1wڋٴ`O0jG7dX%^&:tX3tt֥,qZ)@u4|_AΥT ^0&Ց .ѡ(yԙ? qat R\2@\]_Qn.ocAc} XTQmiek0 xat%X2؝|bҀ +X 9cO2<NT:R4[/ZVj/%*%-TM]yD7[Y$~!6^.<>밿wK aQ +Fp%̟К& +d>,JzX>gF | K_j"[P؄>u''MwrfRM`_: @:b^ oGItaG]]E顙5:\#ҿy"zS1rUe|Rm9_C` 7KQVK=IAxj!\nlAÙ}Zhh6̦w +endstream endobj 6115 0 obj<> endobj 6116 0 obj<> endobj 6117 0 obj<> endobj 6118 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6119 0 obj<>stream +__wpZoM@'yXuJRjQtIӟQm GL+ } WŒ\\|[sGߘx>]vzbs rS vѷ<-NM+XiY3/Rj9sMms2=ķyz-AB*aIBɥA\>i(;s_waӒdž1յj@6)$P̒S%4u"J7yYD3Y.<˥ݲ"EZXq +Y)8_:عA|I ;6Z"-O mg +&`~IS㉔Xdj#*>{Tg<(Ousf-(Yfn]|I}ep{DŽl vvedbf RWbmQ{pȚϰ @4A2x`u4ZíF-ad-ʙZG*l[Vc:ŠU>̢ݶ ZVW6Dq9*>%q1X2L>`!0#e3ŠB2.4=3Lt+:_1LӡL!-] њ^\}vEs1$ih@+vIE1 |-&w7|1E_vRATxS*yHe*m;꽟yd +j^^ vUEEԒa?%|V[%m<(J zH8 ]ҕI^riY 2W;G fA+%Nl6e]ZQ@j^k\|-5rjn +9ﳪ=\FԳ?|%:(aVP<*p|W>M®rnq +ޢjl +endstream endobj 6120 0 obj<> endobj 6121 0 obj<> endobj 6122 0 obj<> endobj 6123 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6124 0 obj<>stream +Wy"Wa &;Y؃AZam1N` :n-[ ‰ !ޝR+?]hBL,Ϟ ֋HB wεC>̉ktp_w(4O,W/zM5vO' hmRaKyӌ郊__4 6఼^BD( |{Uj4.>Z(eNZ-`:a] cV $4׿ẩ)'+ OZBx# ?u|> endobj 6126 0 obj<> endobj 6127 0 obj<> endobj 6128 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6129 0 obj<>stream +y" ܡV|mpb}?7+M@4rL_QN +ʧq#: w=kcUl4 5<u zolHI5S|lG#j!g[ +qRЌ@ͦߦ1mg+MKk0ɚ +5ߏǹ`}v+lzjCc鉰?RFڃPKʁ6fE9{0Efaa[LCqc$if*,sSe6VUZ ^걦S=2%admMJ#R fৌKBv+zalCZ[U{!./b t$X6!:Q\lDZ-y¾%_&yeak3K~ εXl%=' p>8Dɱ[TT}EgMY7;孄f5q-Gې}|f3=;1} UÌ/^k,Kk=_{ <-G7*'}5}?\7;[I:* d > Ky uj"?A1,$ ۈƨ[jG]~dXҌYu9k8R=~ÖkA˄2Jx= +endstream endobj 6130 0 obj<> endobj 6131 0 obj<> endobj 6132 0 obj<> endobj 6133 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6134 0 obj<>stream +mgriڢ[yǪ" }+Ȟ~;p O&HٵZꇹNȇ9kRkLumj$s%%T^:x^=$g e᪷nOn #LVE+Lwop6㙸Sx[L rgfyc,?}U드/ASSm tN6KRk375{*"> endobj 6136 0 obj<> endobj 6137 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6138 0 obj<>stream +cNd $ݻ4G\H?qΞ1T_K-!G߽AZl;9OfH[*40\2E}N=RWP%M|bx8쵫'[^[AC͒Q,N`ᚓmƍk\h0 ecKpP5eSHS!=G2po [6:4GdtTgh[#}!zD1"P<ˬOɎ:jdO`s5m`nB&%+uR~`-=Sy;6ƃK5 u%?%qd{n]B7QMl^7@o(,\Ó{9 ea⁂ + ʼnu~nn%5TN܋OS, אAUsd\1nWJWo8@o:3M&uT?_u[W4~[{ +<<&&RKP`njN E4 ?SכǴUPېuфZӅ^ Z 4F? xwfj[6pcޢ8{mZ@0$JIܗ ֣Isc=t@O^x"c;QՉuB<ϟw)/P4^^1'TUt&믰z0bF_YЈb&(ӕe ]ivulBug޶3׆qό 勖 },NJ O^zm 6*#L?ij8 IK=ZWv̎ ^%'^[I nд6\4b;qĭfU!_Q=Ryyoi{gbkC-Ob'%[QimDI}-D $0f;՗! +\Eq0Hogs+I@Ғcȳ T e IFt oAS~a[EoសFY1}z4O>Q䯭"d=`) +E oꋘ6QW`u`_ +hۃ2*`RfjԡNEYX)~)8fZdGnjd +endstream endobj 6139 0 obj<> endobj 6140 0 obj<> endobj 6141 0 obj<> endobj 6142 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6143 0 obj<>stream +s1Ž[Yd OUSxt!.ogR+2*_=>_t>:>p#v:;Ip G\K<%zQm.k9 { AE +_BH +a|㉵+=`Hmy U5Q׼un_ׯvԝoYϳ\Z "aa/5~y8C(̎?L&DyD^@v@(AM0%oyf +c-r]VZybI4Ŵ"f^]d\ZTe#@hu2ˍL,YA Ur׊_B0.1?%Rt8{ISp啧/ݳ¯֌*̧:A::.iKPxl(I% +QѤj#Ju ,YԜyքMezMeeWz0/nf%TQìXRoF:㐮\MTcrHIpn (]UGEeIAc,qb8 +_r+ w`8=HL{-˜)7К`\ndZxӨ38^bhi4VD+RiNpj-[Kڟ +endstream endobj 6144 0 obj<> endobj 6145 0 obj<> endobj 6146 0 obj<> endobj 6147 0 obj<> endobj 6148 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6149 0 obj<>stream +9 +h@)Ѣ ИwuPM9n\hNW*[PU2D[L4lC$}"%?#O:A'$"2_ar]hK(Ӂ ŧۿo>9R_sf9r6RWRN9Qv@F7Bؗa2I(a;m:fN%Iן-Hpyfk8;֣X̣G|xjV. ˃h> +~Ƃ)1Jc(r@I+7pFt.ȳ6}84?P$33?%vgtᵱ#2]yv1D2fd\yG)鑴)3.F=ƑGF׃*_cI7hFaDqg0ytRC;_dE,delbj U4&VЩ}Q{7j,Z#0(Y\ѵi+AuHI6ݫX%,T/B 1cEF3 +MKfOk5?!Bu +FW|[LnKfyW:c(Yd-X5TP;sw-8"O*`Hف0k*՜n՝@wݓa?h4R> endobj 6151 0 obj<> endobj 6152 0 obj<> endobj 6153 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6154 0 obj<>stream +'fxb=I=ďj$ H|ʨ{Pljv E^w Oo  }%EMdly1\ + Lh횋ؾp"$ߨXR7g7s'tO`mXADx M‘<8ކ? j3)l.0w9/(!T(T㵞]# _27T?@ܷ[g6!)e'Ui5#97Y.wTltUã7FVy<胿Et>!~ؽ*1@qqǣ _-јG5i1:lSwQV1?{w^ +.лYUcn !hkV/ \x{{&X6z:2?<#9AނţDh`ђ7A;vjGEB^tnn3v$!ֳ3ˣ3jLDm$NJВ܌(2;Oud.wg&b7!X^5fܻ4yqRڷMWF*͎l BcW2XliDQgXd CBzf]:jSǨpbZE_k)l1Z 14e!.Qz#X6F +&amC*á~9uN90qŜRwڐ<n7E ?ݎX^)*v:Xj86dP(kj +(^87aWK@rN2-2^hҭ|Ֆ30s&(0IO ٨7pAUO^ +fAR W$z5 +鄅E5K[ѩ +,$u +endstream endobj 6155 0 obj<> endobj 6156 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6157 0 obj<>stream +vuR&wvj $3մk0|{ {哕ROLКc˙zʼn 4s0`8vMwÔrA+{_ 3||, tImo'BQ׍Ȇvj4ɻq$xLB%~_ʎ v9 E0\f DBWa8].MHl{Ţ껙}p9k(4DDU*]K>~*Qf@ogG`\@lʋRGkjdw^zHMȅHV Rl2JH|iD ؉9Bi +endstream endobj 6158 0 obj<> endobj 6159 0 obj<> endobj 6160 0 obj<> endobj 6161 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6162 0 obj<>stream +۵\EɥFh:d;Ѐ-BiFojLV4}{ j fq:0Ӈm!\y>vN B>PW<BA Kkc}XxkZ!!D[d5wj꽟fI,bO[g)VX.{R|GAr̼}}V(51w$,h_. +M??:At7ӆ^bQ,7cˌcr÷#47d˂^!e:g i: f\Y5Liw.hP0ogQ2b0+T}+X?Eų_S +c)~ 82箸dGXCȖ%Sbɓ~^:mQ4D}p&5K+G^i|Di\>fłIDyv*9[D9LhLN :zcbɲ/]dz z^@`NL{zq]Pj4-S7Y ^ASzK50 +!FP +9o`5zPFӣǏ05)IL`.@UKusN]m7+MZLC&g6qcCgJ=JdNYl-%t9\Ut5UXKg?.O|@Fj!#LzB&raȬ&r ;}lp™1AT@xظn7!o{- m(,>O;pua-L;+3mdJ`lIQ]I6Dn*vRQ;alՒh}@M=g[Se&Mif͹Ex:7 +aP<80Vtyg6Jʪ vȕ 3f^e#DC9hzOSfRdHu5!J:P`# +endstream endobj 6163 0 obj<> endobj 6164 0 obj<> endobj 6165 0 obj<> endobj 6166 0 obj<> endobj 6167 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6168 0 obj<>stream +$Կ + iD=UA#25ꝷ8'5(DL?o=`GB:QnO 8/N$ddRs۵49ƬT6_m +Zp?]XW@uyKrqQ@t.Gܾh=1l!ޒq@ݮde5vQ8ϴHx}E(ꉩ ,yBfL } 1[XD~Q9~Wv~,C"#;KE-օ@hmm{$rrT1_ 6p?W +gH(V/OlpWVYT#/^թÎ +֫ݫ rEJɲ?]9zy}y$ izL7(Z7iEVh~xh$C9uq?^`B^AQ_J +KU Qi@VcT/Jt%]O>bW`J/ &mv {2Xfy;riwiDWVo(P=dop] Es~ Q4:a܎9 Һ{'=ĜGpo'a<*Mv!2_xԕ ;fxՃ8ԿHx!AIp=8ĝG8:7f' ' 6go1M_Z+ ՝r"˳AfgGkD&JYڸt?ةV  삹7}Xp~4P`8mW1wZjO֣f@{&/~]I"=3# 3c2Hp_G ltAm!JR6.<#9qx\!t= F`U['E\iO:> +endstream endobj 6169 0 obj<> endobj 6170 0 obj<> endobj 6171 0 obj<> endobj 6172 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6173 0 obj<>stream +M;|eTar*e=SrF0혬Ḁ.CobhjIAy*Ǭ͓RddRso}g\Sr~\|D!dKU[Tm/ӏVʆʵuYpPQN50^?j9$=T_US<]@.]QLJ84x - W0&}\VyˊOW4Yo>4nuRD >F,׳o ecl*.W {]Ȕ3ZPشbu ۜ1fH0EQ57%~x\ bc(@:.涍0ǖ}1# Jt:ނWD|us(c;n[uYSg)gpb;:K +3</k fxGÎ-橘Dᇃfe [(b=HF C )0X%_;7.J .?$^|3[EPŰ_ҝsIÝ0:=I} h䐶4e6 \5n-O)ޝ3*aoX b?G(-2(NW1)= +_ tM`_Ex/K`ITIѢsȀ|.Hi(z{施EVwrfn1$l!ND#>0]̛*NRA5>FtYĹb0SZ +tPyuRnkCe5s7HHhTW6Z=\:A8bFieٙ. 6htrw8-]04eo@x ,rN|gΑ!0OSwv"ʬɹ -@ dB['6;E?q>{IL;!'Jx O4|v?PQ%dpm?ró}اb0dBSj䅹8ci),IZ> +>meىgZU1l!d= Yw{dHGYR$:T-ܾYjEVn:(Qs +IKm0N/W=S[d$LW}B};x7|RC 0jlݍ΅{Րt02՚8O'/e]*0D$ +endstream endobj 6174 0 obj<> endobj 6175 0 obj<> endobj 6176 0 obj<> endobj 6177 0 obj<> endobj 6178 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6179 0 obj<>stream +ikZjm)j2խ=S^*S6TV#"Y5|B]-VJhgj"sKD +yazpdt<@f'xl;R=5@;P.=t,16]/m5`S~ T&zsCєd@'y SgU>-d>>{L\ip*$}EAmߊL ! +U<}uIqCcef{[6pP}_b6d`aD|R/biO{?qhe3lEDUJQ-J"-h{ۏh.n6H3 fIr]|b ѷk7*ؿ(᪁x9~GE|l5M] +KίZI$ +&ySfhIpɮqhd2P ڃ2x|gdƢ3"~q-'aOC>QMf`H]@ܚdI4-?DkyS'`;N6\S\=;`c^?Iv*xظ>#mZvké;2OՐJ| ٠Jky%ټ*L [ 9)O>Yl7 +k6J̅ԷiV;1L'vy}Zw(5v89 zt9{e,ZbL"xEF Θϻa_$QEG^k:P,@sުR`$ť yELЅ\/JICM1eR$ :8EUo/%h)A'߁/)M| p2Wj%)uOQZӪp߲.yp~PHyA3T:aqx*[ Vm_tRm%IW3(I< ӄ#HK<39²ߢ`=9ЕU1KMiNj + +Z/l6[tWc" +endstream endobj 6180 0 obj<> endobj 6181 0 obj<> endobj 6182 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6183 0 obj<>stream +?\Z7,nπK$(A'2pb{l)Kje~ϟoW**BS.?D(n 2h2 בco<CmWI2]C}ﮰ0Tj㺛2Fيoh ?zb4Jܞ'W(1(S^POg]GGuAsZO_F"62c'qRAy5 8熚KZj4N!G>9[3cZ3֭sF=pblU(quh Ba2\vbS+cInӖ/u 3:>8OVsW3DЀfV5҆,u }AX]CnU͉A-ƀi)G~54a"Xu0K$Wd5c\ȣɔkr"P1z_ȻH =s;gϽ[XTPv2gz+%ؕEqOmDEyV#lᅥtvo4}|Y5> endobj 6185 0 obj<> endobj 6186 0 obj<> endobj 6187 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6188 0 obj<>stream +6l{$*戮^ʏ>)힎{ۅ'D}Dס%]˰ݖ;h9Gz8R\MU6djpLDJ4NT7o T()\/ח2df%GV; +O8b +:GZmI* gRxkT}Cx_S?c#pI qc~m ұb? ZhE Lx_\J+R[K(>V҉\;EhYkDV$hd#[3/8b2DQ:T[ xܻN=A]] Yy>!Ed\!7|ړ2cZFrҟ7Suyg7)Z9߃(μXLlXV!, +Tzsg/aԘR'Kd6W#<p +Tg OvU莒G_K^'GO"d$mWcEaK{^nng:3 UY̜ +ɦ6%vn7ŤжNey> endobj 6190 0 obj<> endobj 6191 0 obj<> endobj 6192 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6193 0 obj<>stream +!%Kqg=[ɵ>n,U~")aR"x_kH,RoQːu- (u$]:@YԒ#`D'{Ke/.7ȞHQTX7<޼\eN" %KZFe@\*s:wVgHo1J?ř([1*tzo/ߧ[8>2-"ca[I9$ +endstream endobj 6194 0 obj<> endobj 6195 0 obj<> endobj 6196 0 obj<> endobj 6197 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6198 0 obj<>stream +l~Ę*.%3$:;# [ -i@O&ӆY nIPuk+4WVsomNVH`v}vTOvak Z?E*1NoX77whsAʳUUׁZWa%Я@Y HH1B3p"侃2v0ߺ]] +(0z0x#m]CxS"D#<$^A^NμB٣JIkm~KsR`D> L46oO[e(3}=vvoѿ^ώwyi+0/ em6 +K\0j#7m*ƪB2Z(5')?|6V p 6_X@X ')eZ:)s*-+ĸV\`x-v:BF>ߗd_Ujl][ +|OA9M9`xvwQ 0xؤidBA;Tf"T]v gEPS~s9"x 1Hzw60?=/Vxs"('iݨl8Ŵ \@f駈}|9,Ak0ţ`Uh[V.2V EIPag+qNjo+jO20Wž/R/q`Wc +EBrJƁF 2U֑&hѦhC QqT鍡xbЀMP5Tl=0T,4TMڤnAF?>;A-Q}}s P1!&/bҤĵWM +D$3ǿ|eoN|%m^ϩhxg}bo+3r +endstream endobj 6199 0 obj<> endobj 6200 0 obj<> endobj 6201 0 obj<> endobj 6202 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6203 0 obj<>stream +䟪v.a%m:P-&%\kC WO2/*TAp߉ѭ*s^O3)UM~,z~.#)„t=m#{D ] +Pt5a`7;͘]h|}$ˊX 4Ч7ZŠ`}O.fsq 64ne0B)zvPAc %ƭ^/GӔE@DU;ю>dd3oPA&=es_DTdi^6+џM>$;,,EC.0DL$nmN %Hr +ɠ0:pFDHu/^TR* pLPXͭa ^m@L~0&ʹPaxzčh!ᘱ>L='ʏuR9D%~Ln" IcyݾkzUka]!/c{{[%'%2z!DLIQ{?6kf jiܺd; Mg;z+{~+ݣ?pŸ&N;IQ_u@,>0u!U)ٙٳ66m9j=}/lfp8S@7(6WT0kDCLEoY6")}+gј`!X +?ڹrV6l#b Cmry͋؈ICTH0 W'Kg41*28Lu5k6kLI ? +!) StqHs"x!:j +endstream endobj 6204 0 obj<> endobj 6205 0 obj<> endobj 6206 0 obj<> endobj 6207 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6208 0 obj<>stream +Z pq|GkQlMޘ-5ˡԴ,ps?cJZS$ł.Fmk-M?fvhn&5:hte I1]ZCx#-'$=1u蔺A?vUPzLihBxcyYuJ9z2yHw@{2 7$/*}9[@G|iE%7\5o*i2Yytpޭ E4AK 5;`=0wȀ$]\ɴm3H:'@]udA]@.|!zQ>ڪyhS0^х$iC3eIhTTGNFQI#tA8 -7OxCKkSUS'Vl΄h"I5o:3Y?&zbq&,>~㧣)I1}ߟ+5c* :Sk;pmwi!?%2zTVJo\B证dYl X.(kna$zk(rD"h 'Hb@M%+Q)qJ*>rb~zȏOr"i$u}߶kpĒ6ն@o.ZkCX?cBW;{ӓCM?b,`'ܬW[興(ԲYWnu'BZ +endstream endobj 6209 0 obj<> endobj 6210 0 obj<> endobj 6211 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6212 0 obj<>stream +* EjSPI+}EӠ0bY3)C^]$3NVi* +fT6=8.(g1 +J6 .9PKDީqQ:E+H.P/%1S|9jȶ_3HD`j%~T{tCc{TU6u{%!7U #6jź2^2 D;yEt;вM *5tM8CVzɲ'گyHx]pu#@30-Y?3_@HΧ>z ʑeWZ11B{rS{e ݆R63a)l]SsTM[̇C\GyGq 8!o̸ +Z!YV=uxB4=dq?/tۇt[yEQ)v&hMi՜ 7۔5kDr\ӁVG>Ũ?K>b{}4ʍ=  i=*vC?"ʮp'͐79jE?fgdc7j&&yzCqJ[ +ͥ%Yu왷ݒhCb\hw%\wx0UmȻ@sK=Pܝjo%gd^8R̈\$DE $íK + 6_͕G5&dz)HEΐ]T<Y#rҾ y0/H y9J>r9Fi h +endstream endobj 6213 0 obj<> endobj 6214 0 obj<> endobj 6215 0 obj<> endobj 6216 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6217 0 obj<>stream +f)Ĕ^b;l +9 vhadž0ßyne0IDx2cs_x} 䛀:6ܼz՜f`K<`7ŭ XF=U%U"Z$ ++eP󎓝[HGւWۤi Y1UK +uH:WApؓ.ڗx^kk᭸)]ThØ[6bςFE0a۪&1"#º"GÌt(+jWV\\88@`Ƒ_!y,όb§KK4"[+wwV*XM+šۯMʗ7\xw?tR8joj1yEC~K h(^Ƒ.DD,Rh%^X..xc6RJESzrh 9Qg'ROȯP-**m+NjФD3@𝜴~U4#k̅|kbq$fY$'ηSݕ-CE ^i.6u.ؑrYë́->9`ϖ|Vw N`vEH}3g]ҥW)\MT%V2|D?O{ZxDgFgW2Jfa[3K C57'7>+vD_u3+ݤ~it@]eNY3%El-PYJ {A}$`Xz4)xU \;ҝӇԔ槩fGo}YnSoXc|jH0esȤ *eZ{z˙ؤRN7̓L; +RbKfzRAqHRץRa-񮱬 sA +Lk~}g925Fi_;ƇܻLOo6XIcnkyN]c/1䛡f/9d +endstream endobj 6218 0 obj<> endobj 6219 0 obj<> endobj 6220 0 obj<> endobj 6221 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6222 0 obj<>stream +O+8?Iύv#l`.O5/pX&Y)Kp-E?ܓ.1?eb! ѐMNwa!yho:y%Vr!W7!:dk8 *Qk;В"b[@$ޜ|dQ{)qr@2`+"˻ި?]_xB>qH<> UظT\C7~rHۦI2ٳISw>s5~;LuzX'qvfJ&x{M _1twEcV+⫡x1Sƚ=?&5 nl4~Y]$ۣٞ׍dgW#:&bzDfhaJh([(l2?'d|a4L9di^]gX*þ[zm%v#IY; ;'~q⿔hVj`|$XO"O=<)>uiTܼ/1 L.}{˥CHNjLmݯQ47lB̢`JQ!irY5{mN:]_Jç'1w9 (`\C z:BC1Vvgya +oR~oWC+EouFB5#MvbT/#u:xtRd.Y:b?P,= LzЖ"gM`@(3 +ttN9$f18K2/ u ] usfT) +OQ F+R~@XըHϦ%8nz'.@㠕GYk"􃖹XgC|Ӓڪ@y7,0oRu('z> endobj 6224 0 obj<> endobj 6225 0 obj<> endobj 6226 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6227 0 obj<>stream +ESFaQ1W&e)+OO}1%%io0냥sJpOD@=:`ZԴ~g#y2'; ;.kդA.eCx 5?@O@s[ņITMerʯ5dN=ϼub腴AիaֽL': ?ا:2˜?fa( J-4Cns] փ,LMɜ"zU@]>kkD:r(UG3*D[n挑ܾV|8zzӇu*Q&>tqQ ZSMZXx5da+OUlQՌ!ّXm<)rN&ztwqt'r(M BBldG&TH̉ʞ? ?Ii-&CDKIKS5OHtz/pO|Kheqȶ}# .Þ_4&rhHx-eMF8kk?EϢ1jMmPλ]u<7n{n ضƢ^g ]ڡe@hpg#V$EYc5oBs4S{v '6ϼ6oTs?ƂqD7M(&*PsՁ_dӖf2{gc0;ܦy/J/b a]~DhNCRBa婼;4(sRt| {zJGl"6XƯ,%K?,ozfz!PỳS'߇'Q8]c[|Ϋp"?밑by\+w!rӵJGwSPw.MX;n)QK* tԜbx7(Z$i8X_?Pӹ&ۡQW^qpBl,T8$;KQ2v M,+Aus:loBCM 6 Y>ԞGXl(^jOc +endstream endobj 6228 0 obj<> endobj 6229 0 obj<> endobj 6230 0 obj<> endobj 6231 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6232 0 obj<>stream +C]f˟0\ߴ(DlI-aT~GJ2$>T1|0J@>)׻c _ | ҳ0peQ 2tJ֐;~L% lf1u9\1}Ϗnz,ު *) {?"Olf큆W27t1B? Է26rUNL3/_+%_v4*g&a~8I5T<M]E6n9œy!a#-1 +J8=2K:? amΔ2Agϯؓ:InRվ2`o ?:ZyT# B jAoKD{lՁ͋o‰` t&_8E)5y;߁&<]X2reW0bv1vZ; GRW ^+9Ň\Ү 2| q+Ž: mEmdGN4;qqyhz/IzsE.ו*,cOPy6"(AHЍ[~ki:bS`=d=8(=,f GjTs +ܣ|b\41G8͑ zvW0ҭE S^S14.HҫkH;v!t+huh8b(I*OR [84̤C6/0b5M r_YD"^g?&l]d߁5EN)@&GcpOܞOF=_k}-8X=]et9[uN{A|5fb@EE.}{>X&x<'C8=̲_W;ʯAM@ 5ٸ&d'p\T +ewYT )% 9` +endstream endobj 6233 0 obj<> endobj 6234 0 obj<> endobj 6235 0 obj<> endobj 6236 0 obj<> endobj 6237 0 obj<> endobj 6238 0 obj<> endobj 6239 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6240 0 obj<>stream +\[gY#h=xEip`E;V9cy;wֲѕ|!ox{s+<R@=eP汀0I(mmĿqTワ2nYW) f(K[,`r5W呒5A6[~<\܎YJ>Mj3z /8N8Z,#+n3(#-no m3T ㏚2!j^8b&-*kÖ&:cM64+9Q*͟QK5B]t6uki + 8VOR̾"Taz&mvxև0zi z@86P7:k=I~晍OUvgºS׫E70 l4finDJgk˦"PiztLP1J>#1pY< + P}X$a*>* di4 ' 'X(O,geAtC'҆hRH3xi> endobj 6242 0 obj<> endobj 6243 0 obj<> endobj 6244 0 obj<> endobj 6245 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6246 0 obj<>stream +FYk(c&t6XCc\S"-cbZQ*@uVRōx7ë3L+U $^CRsĥֺD&SY<$fAQ[=`wya2lfm,:=8K$A׷': ,g=3ַ>F=$yp'4uO3LJu̜df6;iHByt!O]Iu(?!{Ex /6N +'QGqԍtܦx-2,`@>AGu8wqA-ֺ Эӡx? D؅"?L]-CM%dwR{cP56la$Q7'mg6tS?;҃8.8R"ceOA`!TNټιmuΐK'mFgnŮpbşLn/!^UOA=+S:6~TX[hf$:"UL` q^i2n8zp}Ode=-;Zkw)_)W2GvєeXR մAT Gr6&^ [ݭ{]7VJ՗;^Dǟh<1=ٶ+=RKiks^k^a-uJ(YHSDomSt\,c4qT%E'$)Lp\˻a1|c:Dd'caC!_Zfg1 +b/(p!j@)U+o2, +cWGYcT^(Jˢ-- 0dO_q P(_ v語f=ǧU/W[-(wi/rA8L(OS +#oS|G+IO +$/t?`Ѝ;i:az> endobj 6248 0 obj<> endobj 6249 0 obj<> endobj 6250 0 obj<> endobj 6251 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6252 0 obj<>stream +9I=;/P7x}S1zGQD,Zh@+ +\@BPB⣐+0MK b;~T D_1y? 졖yg y*%5tςZ8TvcuUUȪ7-ZKĄp-@ T,~4ֆT]pZ!(PmijH_7Oirq=aZ~7z)B?u*#8#6f|^uI* (>8U](5%lbV1|ccT|tM)w: +I(ηWtiMbJ4_0`+Rj\to[Z MQle,ASU8F~t;?GViJia0ȅ + ޠD淋|N* + OsCi랳2t<[$ߝB᫢Gs}4ٷp6XO:+4Ԧ ./5MFZP}F0]U5A2,$SOʾ(&h"v–  SyFKKEIDHw}+i~ 'J]Dx6a_JzU} F;(3tWNt[Sj!ոs╗amΈ:Vsy3hrkAʧg4Q`9~]ʾﶽ0s` ;'S)OT!A==YT`ucM!,QR^-uNl w11~ C%&60G^+ _~M!]a[P.k(1* )V-T +LD}+1hd/ mrjper}P܈b4T|#k+V1J$d\8M%g0l$jT>w|@6LF(.4˃E +Br,0t; L_ [(С `/yFx1e APξ[7?^>k7F"|0Ly"goB[% _[Q6ٴZ0o+}'iә +i?W@ :vPH +endstream endobj 6253 0 obj<> endobj 6254 0 obj<> endobj 6255 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6256 0 obj<>stream +D N0mf1Ofe.pM! ^{ړT|SVHBn i+)LьU"91X$@Av M#In'z}PeY u-76^t6^OBdV!*{j)ϕ}B ʟh!?)uE-Fb:~{Ym98aE!%6}2=˺vwFDV3e4Zz=fvi41bu "O9y;|ERoof";9IB5#! +4uGf#h'4ZDb+,qU'8F97侨.8ėa ?%=9TS}?D%4dZOZ`+[ev)v&%<,X M{7xbAr&NHsh*\ A} 1//@UM_[Xf_ga,xy!js{OTc +endstream endobj 6257 0 obj<> endobj 6258 0 obj<> endobj 6259 0 obj<> endobj 6260 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6261 0 obj<>stream +52:l`%fZMv г\|Y)*h9^̘*_ӑG`=uk7>* oV +GӄNajޠ0,W8Q9E iq\(f2) ne_c-w}ߔdp-p uGz{u/$EM1oyCjAdqj&beB;|p0-:{Q'ib)%N|&eD/'8)52| ٰ6Y%qLny,6| 髪G˃_4μ[1tW=@-p33İÂCs$:o 9dAu"PPH>#mv)%јl']a/6+FپY焦0}S'\9Cz?#%h[, ~hx1 XL/Uiщݟ:\?c~6|>VҝwĨR/}WȪL9#nN,VTO)4H+Nr܁[Կ}ڨu^Ɣ ayHB쁲V X3j+#1h.3fV}=GNZU`]: Ͼ^tVATJIdEy}ʊ$n0[O|b@|"ShOZH V?Xvam*}y+@qޗյ'B#&p{!!TunTf$:Ma坲)V;ۙI2EQ0?p ^v#Jw_y`exM:x4?륳bc4>XdDŽcH lIn^e/ﬞ(|i*4l&B/ +endstream endobj 6262 0 obj<> endobj 6263 0 obj<> endobj 6264 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6265 0 obj<>stream +aӨ3Έ/Ba*65$2AlzrXY(ݢ˚T"=1Ú9O p[SR +xXI:g׼|2[\0Kc`սtRMXv}P ޜDU󛘫{:`-]xdqpPuABPZTa˜6}/u r&4_*~Es?N+Md<;mm.myMǩB&矐3ӟRsKtv +Er+X1gMQ-BFJ3*ʜ_fnѾ=׍ZXVv^^zHmׯbO.2vr?n qg -(܂ P4XS>-߈?{I7hάӰ-ހ7 } s^.v9f( zM=%IRaxw[py* ƁT,,'jM1YJ hJT23F%Qiuis >mvu,,Ltg.jfL@[!h+(6SޣJUq"IUwb:Ю`}vS؏>>IS`&2cz@'` '3N#C4{BLtn|LM0}S8!|%P3@ͽU<^qg7Odm$o~d%ZvCCӁNQg:rfr&>'b 0w4KDD2 +N V; L) ho>nER;h8bѧ 5~/էk7$Rǘۄ-4DtRWC:H 򐁳DEpxC~ 4FA2$Sa7(;9ߢq'.E0@z}Rj $Wxj:2NzpdQsc*aS]skL,|k:[@otf :WOrׅ$͏_,z@6! )=S$SZA}$L~›_$$nO^WHZY9P\8kP6ڼwRJڿ=Wfx%O@.8*uiƥ;F缆 +endstream endobj 6266 0 obj<> endobj 6267 0 obj<> endobj 6268 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6269 0 obj<>stream +m+yxrN5'<Ls9ԎRN;" +؞f#N[5u0j9D"n[LPc;_l iK{? +.>M fg\ZʬInf*[!$r6dƿk 9vr(\`+$cBY7gܒȗKZgF ;,:t iJ(?}8lC Tp Xq_9|"_K$~J'>g۶jA* 5Ff|âi@Oشɔ'<ɟ\̥+FCp+&$KZ)@;Xj c!9 U- . )Jśo2W?5#Byl:˦.^&d*r[k`,D4ILrYwd&Wk6%cxG.l3ͼawGUmFT#LgAO *[=FDbQ)8pOt FV3yKX3&`0+[Օғꪜ=CqN=E2p+S~z(ڦy MAj J0XE{avHuZH-GLfLfUPB +^ WPGŠ.UQ~S ; l,'c3;9W8G\ ؿيAobf@Kߎ^nh eqsR F]ZVj Qw<e%`}W2JN9S~v ɬ +endstream endobj 6270 0 obj<> endobj 6271 0 obj<> endobj 6272 0 obj<> endobj 6273 0 obj<> endobj 6274 0 obj<> endobj 6275 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6276 0 obj<>stream +7_npsq{M3¯,5Y7KU.6NL0sw+32+"DH c_k8/ź+#[r(!$f`nL~Ŀ[")hDL k\ZC(ۛc=7u|iĢLC\ėV*ҕh\sl@ >Y)>$ [ųxzRX͑ :gvI3Zfx5*ypQa& +7 +d}Oke-w:,|"$XmAaO]Ӡ]Z(v_ȬELar+3HsAY"KE gr7 )0p ȑ\μ 2Ps:nܥvyV:j%޷v' p󈢨=A3ᲯJn68'<Sq?r35nVY\<}W& Cc3C8"%vjܒ[8V:A!ck_WᾆTgb d/F V2G f +ዱa1V?$g%=$?#Z/b94ԔxU2f؀ =wzh}3_LNS(po8j,pjp( x g2U*sܣa6Oi EQ}SZt5V"[ؤFvzOO=tJyZanU0JЗ*34lZ _-Dm(d_!BNe<(<:b#u9,\:7}Dt0s8s̰Ȏd5 z._"y~ - +!Y.{~i yoMxGuk6,,ͪ m󢑈vU&{lӏM!IAMtCpl38puӊ\avKGbb5f)$MDpBiGZ.jµb<ğNoX~[bf Š~L>*nΨe>ZSm=<,_Z{΃>.?3|VK9/v?uҼpTdc >lB{)͓VU:+[NO +㎯S֣2< +Z2Eŷ&U-X@{gM#,ʈ9k:/7xC+kL{k^0H{~;5"RY!5p~`y'܊IhZq iQG ;g'FܡVoy +ޭCTx3TJLNi*P> endobj 6278 0 obj<> endobj 6279 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6280 0 obj<>stream +"aSk@)铣}hAC"U +  !%|?KFIg G-ӝcUHu*)pscHh'< *F#q7qmBJ̭ZѦui%cqIJ]WkvJU0OL0fMA9y8/Nd0)⇖ M)R̺kM~A4ְn"$5y).3w])ǐ"kp[ϴbй%[)y"Hdcv-i +|{&}I12ORZܼa&jњ)f4Q${"0=0m%'[&iry'"J_ND=);z'Y".&""3{1+F№ٟdk׳Qh Yk>7T~lKم`mK4X3z`}Ft +\kBeT1;;C J :8X]/ߵy`y+f~-I ⶚'>^`*z{wl&2q*=:Ȯ^kPFk~؀MvEu1}bك56ZP <S._9p+nmqݻƸGkLRBm8搃帇 +]&g0 ;Wv2|.2-cin +xA"ﵢ'Yf@jȊRǤ/Et@7V +u9; +=~S⛨)>D0shis%kK+߽Z?؂$pj&\#`iA)H+Z\w٫hB,89z|kF8Đh QMd"gE·|J%S6׳\n,bI|[Vݏ>|:j>{g38ź0M҄|X +DZ-W/JA*,4B@DZl lYV?CeĽ+6k:.>ǖ%!ឃE8m#Yi?a;> endobj 6282 0 obj<> endobj 6283 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6284 0 obj<>stream +:4fӉI4q5TS2 +NwF%Mb .?Y-蘊{_tzxY$_3K+L8 |3fRGXvѿٜGwwi0#[`6;J5BnT2^MNU8 + n 8 LT䟂X +3rs(iQKW|pRv(RN}9WP҂4u )qF&5!n, U_.(Ä[ji n\1 jm4=Dq:[)na30DPy@?w?FJ h!4٤ݎC rlsKm4X-Y7&Ciӟ$Ew):2,肿pAflם`:84mɶ Ȋ"=_bMbCm|LHv6O3{9x; +B3j{$dۯĮ\\g5?NyZ7 Qsn)$k+&;3Y> endobj 6286 0 obj<> endobj 6287 0 obj<> endobj 6288 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6289 0 obj<>stream +uk + J]3=6 &Ab_itlZUP7̎yc2pE8k6maeSM$2P1y/O)Jј#5IywSpz +OuoX=Ä 8s:wt[:I q {Sɠ=k>G/~.rroZBfsl?"L蔼Axo|5j lqE"<W=OϜ]韡fda/Y9k YO Gco^ZU4s}G?뼝?J%|{[ o!(~w+=(V)-oo$ T^چ퇁8U agQV^aĐHR j٪a6L_Նdž+Nj-{Ynw!?qi}pP[ +^T6k=燃jDz~tN7dT^woAQz cssąpl<%PfU"ë>sl>)0uq=;~ LYD VlR.P7rPV`!":^a/`5 ӊuRq5/]&kkO@咐QXꧺvRcø3LLZ}Uu;8D(x+" 2q|E"AyoZuP0kl,PoLd49O+9ouD$'M8 +(!C5oߺ>ٮHJAq~ wՅ'l:E*@tJYA-"Q2nS`fyrsDNxxil(ĢTBGY$PRZOBmJ?T뫺h XQF0qM1U&QP›{[ҏ+%E+;m!DqX~v@K&'K'M&[,l1,)v JR;^d0m >*Ajh3vt ji< 6Gʃ^g ͨT]Cԥ"ע+SF@LZco"R/"YHDzm0J@, +endstream endobj 6290 0 obj<> endobj 6291 0 obj<> endobj 6292 0 obj<> endobj 6293 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6294 0 obj<>stream +E͈`~W@L/SH4cT3c)=`I5|ZT`K$5jR{b 3t!}iyJ_1*< Ht6!!*R'|a5mSp\IzM)7L. ZT4W#GB)gwy{_?md]Sa`;Fߡi? mJT[e+D=iWUB kd;NTՐunV *enh0 p8%"Ƒ}腕WC3%V4s?h04G ky +wCq`XҶuPŊB%z\hK'kŔQ+I9,*nAk̨xgO'ǩ#Q4NeNk=aK:)CMaZX2ۗJǴz&# zQy{ _8`]@0=Ys ., #a +r+Nuh)2YߛMQ;, BFw]a $3:K y'h~j8,g3i'*#i%VN=8܊@G½4i?rڏ_Z&'˯ا<эFl7%jear(B}t +sm0_OQ>nJjEj"a&/PpIC$+_}c3w֊EL2]cGSʋMRaF[T0YYU"OcoRՂQ+ᲊ%y]S۠ٯ04 ̆db/xn$2$tlVݽe9S1N+A_5OnPM,}! +endstream endobj 6295 0 obj<> endobj 6296 0 obj<> endobj 6297 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6298 0 obj<>stream +F8p3/xC,oLu[;dh% c07;vxQ!*lsW9xrPvH@K^cq{*6Ҍj&Ūt[*a+G*pI1B;2AȽFiv `>S$I.5&}ɴ~$5 +XUY/t.hL%EM63|4[(\OG7;up΄7ooҷw olD*8v}S͠,V!fC?t~jHQjU%4k|U0A ,YVq[]PjƸ !2mƹB($B*'CU=3l}ãuhe}oֶG,s,dԕ^rvl7#/9mW X mGOrֳ0\[t^M&š[Vb ;LdR+zDF&dFh*%-3hV7 +pK;D/Th@Ya״`2_!|͐Q^ꌼ] ?~=Z֜Ja=rK?v+1: I&Zt26:7$j<;"i٤)0<8B.%"~ i~ Jբ@n 8:a('}yaF +endstream endobj 6299 0 obj<> endobj 6300 0 obj<> endobj 6301 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6302 0 obj<>stream +/=2CЪk[mFyjʃwwR8Euu]l[Xu?r'h *Ml=V!deVԱ2of;CU ] d"nk2*05q$Dߺy9`2(y^)7(CܠrNYh~``b-a+-X)-a |)8}2ɑ~ۇLцƯ}B!wكDl .%D$PGEXԤV_hߋ.?h@t- h|%a`KjM/Y!%387pW9LWr7G)pom]M,|\xp{FZ(/ET'kWu#:;<m%ٝ}/uMO~nwm1'@4 "ѫz5ik nPRӌ9̑XIZR6~#?B[j<8crb>y(OLrip7S2z5ϒAhp"Zٝ&r(pT7h;[B=Wn\ + >V 'FkNmiADܬ-8_Plf GIrڱfE]PY-4yI{Zx>°Tk)voi0ÿ-Joq[Ia~r0|s29 f*Ew) oO4~$]*w>C7gx,4HpH~wUn껐 z +ܼ!X5l~Ir/V}Qi8d/wiJ(zu$ƨSLZ!dW_^6AL,K^*gGy[V :p'C.y{ߺdZeV2T֌Ɍ]@G='"@0r",s +endstream endobj 6303 0 obj<> endobj 6304 0 obj<> endobj 6305 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6306 0 obj<>stream +ŷc("p"bD/,Ae_Ux|0H쏺:@O/oU>'H^7 9>2-9=~dj VsuT@Y` += Xr_]T_4r[ל@GͻSi@.d cCyPc_^>[Qy J {F=K˙VZѩ򤆫{ RNda&&g.C|a.3_Pw%8c +IHsf6aJ+C5sؙb}c s5'tnGjm ϑ03MgAkv&~ye=^Mls<حhXK^FߪVԅ%`{P0ѷca^?RWHڋYxl@,j&siV%(4! T m:tklNLS[Ƅ#R!1U%*QEzFwW=Ƨ 9u:}j<{<-@KarjYUӌtw--E|(nT#{y-HU% Э?i[y$ǯѺ2|o0(w;z oxU ͻ.'c0 +k}r|`oE'}Ef0rG+xN2HҮUFt޳f3lۀ cG |(4=~-~wQ?IXȽ\bsixx-߇TpL

> endobj 6308 0 obj<> endobj 6309 0 obj<> endobj 6310 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6311 0 obj<>stream +ORp+*jh/GɛOl㌤(`n'ur7Lj$7]\rr1p&uވ|EeXa/ٜNȒ2siY +Hj?L,v"&Yb>"j6G*I}\tY "urnzb1-?bUNpcZdf\tZ:Q*dvo12xe S$q#ĶxQ/$İqa_l%)>Õ}P'/19^ + ͘>6b,V],{[Rs@7Hl΋|?zoulc3,5fw6䡍> +B|eptxn?lX杧&CF,wrV"x˂eIjDWL˿p/ %)~xDg,.27QN,c!y]Mv/͘o`4 *ɔLHET[ /;~,1=|ךY2&6~gxzI\S ىf2LgHl2TVCB]1ig o?Y e= x>#djB NOz_EHK&֣!>nMӕScL$o_k骮=pKweeS+'.`|[`+T8@+#lִh +o1^c6YШ9:A*p !±|炽q"w# }r }w} *>@J:! {.9ǐ9™;05 cZXáDog<(jŃeAQcլj?rg hpWZ]<6n\tޔG'n.K^ؚCc |W*g~ԋrW;1B<=7?[N*q aSgӳFJ~ W_-L@đ;E))V$fX +endstream endobj 6312 0 obj<> endobj 6313 0 obj<> endobj 6314 0 obj<> endobj 6315 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6316 0 obj<>stream +; Ŝ~Ffc'gB$+]L:8EUSEn er*qldljh=-sWj g|`=ӺCVG:+McхocS] +щm:(>7S)D %Ō_kvh%۪W`'ʑi]yfmk*FaK ~bE1fn.y柉VAC9hl滙`]&ŖE, ǑkP-]#wt >j9I$96S飤g?~'i,(-gf vD=:gʧÑe[-wh58VO}$Mh@[0"]_[Ymb܍5.QH-gOv"x4X |siU۽1vjN}xwPӍeÆ1"JXnAdŽm+,.:=)kck+],➟Bת`"0|n4j/@ @xӊD*ׂn Nf7m߹f~}-S3'$8g 2 5(`$ބ=O}um1O0i/EfM-#"|֚6s`V)@e-1UHc{Vjlԙbϣ Z pHl]j)g셂^?'ċ޸d:H2 C)z<ͽTݑK9>uCrv$3>2q~[E /P+Ey\J16*93r5~ R%(?85CᨰVh2% :5mO~MX)BBeSFe]E+%(1‡AGiP MaQdo a8RDW%+ O;Hܥ N0jO +m|&#[Km˲f|UMXq5*:lRcgW6TB1X{ dT %r%V ".9=beؘl(w[{a˚I-Pc +endstream endobj 6317 0 obj<> endobj 6318 0 obj<> endobj 6319 0 obj<> endobj 6320 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6321 0 obj<>stream +ѥ{p޷p^k#o 7l~cux/c8x[R@/9TZIH.H>Ik z4x(Q+S o#wz̳+R]W߁3@BD(i!m6[n +E.lTA>IFIj"FWS),@1'w:/*!jC>"X3HA bL\Y Ĩ=eD:/w"5>=ԉ߉T$M6M5l8|͹f? ? ~mQ=9S=^ *6=oF K#59XW +!{KvSK5pb -^ѡ! !q5-&8-Vf%! :* 52z bdHx8yˮoh6tT N 'W~ Q'X.VPmXv;1]Um> endobj 6323 0 obj<> endobj 6324 0 obj<> endobj 6325 0 obj<> endobj 6326 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6327 0 obj<>stream +*t\[vJ\4N$CE#6J/&MX0~Fjc$I;)K\ }SڐeoM:FNh%5S:EI몙FGWj2 sX,ZV]?^_06ͫGbo1=E@^(ݪ W ʠ^/fu۰d4߷?Qd_pt"[΋S 6w9`K 2t04jT 2>L??s\M׋/ԈoÍFraH(A VG40XsC Fhm:"4EbuȶfQ}VQ]9:q;bK>Vۃ ,9\[E[P.8CeUmox W!w&|Wv! ol,Bύ4X1Qh#n^)5kشF;./rk?^uXrkL04E'Rw=yq4CDLdɀ* N*)s喅Z(=սAæBo7DZd)uk0\V7˽}9d:-߸ +_R+Xmlu] VH\]%.> endobj 6329 0 obj<> endobj 6330 0 obj<> endobj 6331 0 obj<> endobj 6332 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6333 0 obj<>stream +G0f߱,'RITO Q;T%%;mCekbQK<<RS~^mo>d]Z,pd2.f6+>a,x`XӖ6g&>NlmqzaL""ž]X_TKe^^8 tk 6zA\ߝsP` +jXMv9OcX.1ž[[B.8g +tD&sA {;͋uy@l:J`D5 +x3i2Z +1Mxn\xPuI}#)~hgoj=9et\ֶM^f&Ḱ zuƋDƏ"ݎQE9h=dg|߂L-l]z!JaKO;8#K;/Q?c]> lgbA#$Vb{Gg݋gY]!}iz guP0HK,nkvo=UFRQ?!>pB8mE)3 /P_fuه]sKQ7}}C VuH#u0wXoeVO2o7-۝5 2;0lr"5w-uAɭ <5c'ϴVpK{36ϊ kz?Ep O\AwDAda]cRː 4uoD } +,/ׇHd1;°e}͏w捂<$SV2ԯvĆ}-ٔABg/A[~Qu<0;]d)=9YvEyYkM%e شǑRݤmg4_)u~_k.Befe3J[^,e"sk׌K#&}7Xh_s66.~'`Z,61|"q'F6qo +Ȫ}Z((G^ X h* nɨQ=WoK>8RKjn#f{<PG~`2zތjI +H- +endstream endobj 6334 0 obj<> endobj 6335 0 obj<> endobj 6336 0 obj<> endobj 6337 0 obj<> endobj 6338 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6339 0 obj<>stream +ID"xq?IwSOQ4%#/7Y s=:pp-\ Y::}]\FaR4*qHQUG7~WѲ^1uwh_*{q'4ƙsBrofg`2Mkvp'O +uhŹDḇNǟbwc' l>?A |MnǩTK6<(&v~(GYu/icKu6wQ_.^8ڞUIR؜0esޱ7{P{~{j5^) qGb@%u*)ƛViG#m<6B0?PKB#ò&7L1"{lc +-LhB v0BmpCyae#t 5f:(lbG{CȢخ )%TvZ F1VW(ސӉݎC5VƗYZ ߟiN;8GƮ6:LJnƵXvpY&Ӧ%푵oGy.Kx\*ŕs~m?oHGX5kk1B0nQјwP{@Vt;2Q!"ݢ=jΘN+ +}=^\Q>a=нQAn!Þa=K\.dޝzMj)Z+~BkSޏd7]6nŻ !VɨZ `)`"0qaC[ &u4JԒ8Ug30Z%mӨ"·pEf2PiCu~}=֘(r-j rL*?.3i~نM*b+l $C`ҕ\<IeTkʬ.{ +S;>-)UtV7JN!> endobj 6341 0 obj<> endobj 6342 0 obj<> endobj 6343 0 obj<> endobj 6344 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6345 0 obj<>stream +6Ж8)T6/{1ĝv8p xSc +> +f+h}Qi5eַC +h/0-:% ރ}k"!ƙK(ׇrH}`ЧsJyK@_ y(!,5%$txSE6h ƛ8.״:dyIi,~дh/@4,$.mVxV<$/ iDk|Puݘn^rj)mw;:5͌b]b39Všζqf6I2'(И@)VZ^8\tڮQO:8@i]4%udlWXFufFӇ!G=C.ce.QʫvX~G~d5G`ٿC CG\*kϳ4h +QhR,P`:1g8M7yF:xt%-wfIhxm2AzPZ/*{yPW` >hMl9l[c]\ C4wlDWQK, +endstream endobj 6346 0 obj<> endobj 6347 0 obj<> endobj 6348 0 obj<> endobj 6349 0 obj<> endobj 6350 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6351 0 obj<>stream +?* q3híK w,d&߄"Ö7XP +Mh{!%]lHږUdEZ-%qoi`vCy7K1d4ci9r0JFk}"*$`l!&aMH :c^)5{űO#.et޹ȡ"?QRJeY<; WS^Η6}]D-[rrm +meB?M޼*DV_ȻJ46ȁb]T]\(>˄:`K@{{^^$5Z˴T>nqpJ/E== "8#]q֧"sCcJKa:2)<տ(e;bܕG|H~t)ZT Hu#y?Hlpŭt^N>ۧ넰}eUB`ד_׋hŞs۾A| z3!{Rukr|/Na8> endobj 6353 0 obj<> endobj 6354 0 obj<> endobj 6355 0 obj<> endobj 6356 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6357 0 obj<>stream +\coD'$p%O~pcݼV;* z)E3&4C sf?c5m=a/сeW2^wgN[t@rveZd!+y" +$C]SPJيS&|(0(sFE{fy>Y>?@ +Î72m]纳e#5(ڂ6|z?rQࢊ(rԍ]ZY\t}-MUJɤ$5&?;t''JY~gȺ'SM:; Q~N)Q0V8*L-'Kd?-aP$dy>P]f$RneHi}t'Ty[K:?M~ck +]>|nw6ԙsz׍ġFacXQ`s04s@;xes`{ծ9vI \A$-qOe !gqDN)@Z)t: IvX1gs_y hcu&F17/kcBN3[.!}^e +wcLZR lZ)o/aPf]ͳUM#a2h}cwJ ;D/I7#*fGo~ymMm%6??ul}u IJeiɉgh P0sv&HX1eTC~S 0oto9TLhGE8窘#X(o?GvBG'ˠ]h{E+mº*o*AF_\ZJC̒QoH\xbsh]5fR9t<U + d>nAW~&LCk +rIZ`qᒰy t#}tZpBRg7D9ē-:mOxϸ q-!0~i.d-;Tb! z?A),Gh` k6Ty۳ W> +endstream endobj 6358 0 obj<> endobj 6359 0 obj<> endobj 6360 0 obj<> endobj 6361 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6362 0 obj<>stream +nvhn80:WSH_4l}e[#ESߞHg3RˮlaLCra >OSm>/,lEM0{eh\-`~E#[5(fal2A _24=17Tb}T 8ct 6-*/ymco_~> b5@46_GE T@Q$(V8CZ-2NVw RXTN7r_r(;TBiGBW0{@bQ]ڃKHqW&H%.h{)L5}`_E:횑-J1 PKmo"D鱁SB^\bO^Lzaw\eBEzu,hj[S~ܥKqhvnk7T tQOK|LN(%U>Ke>:]kN*6V(q|GF䷕ &`ɂș.) -^c0B]%F'HPc%c~$A+CibrDWD!<TRJrr(SP)J bGĩ HSdxuoemjg([db,g6BFK0傽5ߒtx^fC* 27Om?$È&JST]i;~3J%T3=;Jj*Dzn`GHb1; ъ# APRM u +yr$5qVR +?Ԭ+p2]@2Ôp]_VML-TUtmtA(j"j1q;*^]Oy "6N4|%Yu5!BƤ!@@2q +endstream endobj 6363 0 obj<> endobj 6364 0 obj<> endobj 6365 0 obj<> endobj 6366 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6367 0 obj<>stream +ǖ~KIDȪrTuCٻQkcXQӽ>?[Ha~:.?|_AEfq`Z g D5g\C+35i5.5?ϔ_3M{b}eU+В{~U1:v>2iyBΏ! p`# 8}ώEٻƧnKZ$f$YH9:isOq".]U: QS{ 2jX"9X1fTv5 A>?' ;T0f,Vφ!<.>%5"9p:^DwB8%֕+Dʳwvb1_+ygR,M‡%U( (+1\bI<z)!q\|ڗD)qhޠAu]y3y @`[s`o_ɫ*w$!=Z-K)+FBנ܀T0vaLw^y[u_ewA"lvc?@f 5VC]b$'W ׂ + :k&v!\/e#1W rظӗyt!V}-jXTT5GlHnABԆEjqP_'H@ 83l3\ĉN!! +< Sq1HăL7cɉhޢG%v7ҁ[i&qphEˁ<ގ5c?wrU-J;6>&ÿٵ<ل~Fan)%ԍG)C4`?vuwt&UuLtwK<t`F[n^$[À=/<ה`H8%Gw;“ aJx†ˆA=xT\,% t cTpGL`)_Y e1 (X_*J\ +C>erZVrqD  Rsױ⺱#?bK)4E@+R.ڠ +H%/Ncy5lACF}J|,ydm391P({zK3VKp7+[,%{/ܖxYN%2nBS$Z[K/ QA[1W]D^p]d`/gy}*EMT3d 6D%/&N6OM30lYՋK4Dqnƅ]01 X-92-|V +C50bm/·Qg1O Uʃx1Aa-|]NҬݩV];G!X(Qܞ6Ih!ᡢ`>f-),{lI}Ve +endstream endobj 6368 0 obj<> endobj 6369 0 obj<> endobj 6370 0 obj<> endobj 6371 0 obj<> endobj 6372 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6373 0 obj<>stream +'`fI`Q5C+qRteب"LƎ%DeLM8sDd8vC gALFck|+Ȉd5i0( +-Jw4U\\lZNlT{JLxL7]bLM+ m7 kٶpj A\gӸ+.! +>akчh#aUB94|.AK~|pʼnGN E[[Waб+\Ń `^]'Awќk\*m/­P͵N hZ)U4 :(j#)&)XnB 9IK& wuNs;{nLMF7 +Luޑ5J#& FS)ɴ{Pꋇ0 7털 Nt0$MD<>/M=1ƀ7Wgp1lmʪ ʏѨU3nn#w/z)_|h# {B*MaW.;v,U;5F|1!z ;G)-I3uf[ΈB&N Cxì!B¼Ic۵GW+<"BC߱ T"E=t~^wfhoǏ)w-E]2-BXy)&5<="dwTGtėj~= m1B,Hέ`2؟g'' YFՅˊZ1 NY IyAP6FqkIuX?^a}j^<ΪMj9SSe>1Ҷ=6:Bʄ@=ŖAYIVwZi114_;kBݗZ\tF%RSo̜?j:Ĉ8z 5|m{U0߆0sA{%Q{^R7~qJYVS$KImp]5Ə}P5[FBPZS_詰)TDs؃]aB[s@P 7W6)kH'% $B!Ph sH|Zοa!TH+ЄЀRDԊD4IU0]u-6~mgW(0Ik %`#u[_Q+V&Q}ڇt\kNd7wwwRgd=@W{gE4~Æ#KoW[D6&r8tĊAg:c@ON' r.^Ei= +endstream endobj 6374 0 obj<> endobj 6375 0 obj<> endobj 6376 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6377 0 obj<>stream +X)r&9Uh :f(b ߞfsɹ _BVWL1̌ S`WϋBCE Pݞx,֌{whvT.*k߆ ꐥnOd' P-rC[{ӫinyشhR3\URF̨HtgmOh᝼[)Ad!8Cf$[&EЀ #IgmR ёqK]f7̲ #jٵ$G,ߤelvf'SU#^ ߐeu6{#inoTXwz669`<&؅j*r8ZXO]_>y6BNRkJ!~mկŬ +iTHσdRwDNrRldCh#H/?Y/ˑCbeJ@AMǎC>}rR?VUR0YtX#rdm 6ŽUKzJz` Ii QrTWE^D &D 1g~['zfmJ=R1zKBhCh9 ֦??`z +{#34mLB9މv,DI9KpWD*LVEK5k 1Vr_O31jq|gV9IL2iFC5MZӎvU^9E3~\#${2>ǠBEhf'\AK#RȽ*t]]·Ox/cYwQ5śXy c%;W݈!;ac}" S=_N.7Pf=<6 sLR,pghs?5J 02%],RTuس9R~z荒e;k &qѽy̹ڰZ ɖ"D.-ǽj%  *޴9,z*u=@f~O5.7#y!қ~NWq3 8ID?/ȃp*-,زFbXb\XVi&V( jQpv`ET4 +endstream endobj 6378 0 obj<> endobj 6379 0 obj<> endobj 6380 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6381 0 obj<>stream +.| s?jtz|hh_ +Ev""IG;݇)*Twڔb{ +u|dqcVmhQ%R#E39&w'rQY>̮8V=Sp0 cUe/]ŏ[NYNU9ks3ڂ.O^_:gCĠf'A%JGB]^r]0d@N? F w]Aѹa.;܉D%˴*V&r@6M~u%n L7Sն|&)xH86U(H< mJi@A/o Fyxގ頎`rlw5VXo#]V록̓Ծ$H#g#InI7nRBق;;Mb Ap&W 9Xp*yyזOS^OtM>GB,miKCKj01[|LucՋ$!n$CSV:R`r],1CSVq'g582UvJ.Ag(]t.{O:{r\mK70=UR%دYyLS7\߫_]t^m' . jt5+@V;\d(@h+wVU ^feU`֟e/E\@[5AzIEpB +(\U-}5_uY-mD!.!=MH ;ٗI UR\΃cmbaِA\xhuJ{jLգl;DI-Yrv"Uɓq{'cL P2KV-=҃Cfr,qՍ8 }Q&Rּ#:o$wC >uBc@q\T{jQ^}8|ᡚ#~Gd?ňupK <"Rݲm +endstream endobj 6382 0 obj<> endobj 6383 0 obj<> endobj 6384 0 obj<> endobj 6385 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6386 0 obj<>stream +P6dU +G >HAq˯GѼsy`^UT!~2 l1<5&v^bx,[٢lǴycJ$Z,~aX'V۫`N՞Agz- |xiuB}}CQi! T:GM୲%8 a%3c\FqMɓCT֌xTkiw=aK&YSl0UT J쥅* r Zbtp11x2+1gh M~)d+d:80o& +cpklt22BxXb"@Q +endstream endobj 6387 0 obj<> endobj 6388 0 obj<> endobj 6389 0 obj<> endobj 6390 0 obj<> endobj 6391 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6392 0 obj<>stream + ڌ׸QvS3@t7~hwJH^ ĂItرvZT^ɯ tǘQ7tK5Wat.܆ɺU<XAe~=rg̙q y6<` p*^7(F1^ɰ۷gKzەxtw^N.ܽRf!8 <1rF4(?3R rFBU;]Ux6Y0;mG o2ÄpD0OOyS-]x{~ +&)P{ɔeC66QdMSt6kÉ=X)KHR9 PS%?RqGa$pD,' +7z0DЁ|_.@Z >Pq&ÀtzQmlr彫,_SNXkWeA,Fa*0'jq~]s @ WRKZ=ҽzGb [lR֩PÎ) _e )($+h9F'y+ag&-M]NBz1ˉuQ@ȌI6K!]7!1n1fς0s!uc[ϓ5GK}>{eMA<&P&d[R9|\%ʟ\VtS{YhX2haz7%>AKsͅ3OӞuEIe[N?i5RчE,KզCWiIB:G TF.lj.U~q{hT݉ή9wo"?Fʑy;ҧOӭ[˼) +Xv{^ݳ-aURHmAfmSɥ:)b@5tage[]ԭ%b@PmU @<.>|R;-;+! @p)Wނ?!ƻYqC,vϙ9H̋e곒]ι, ml^e쌂q~\@32 fY|pb P\>f26%|};B,p˚HsJ`+"ڣ_ dt:`/v YQo(Jc>L̄˺\Kem<6mT.xK1e13Nz|۽ܖ=>^Ɇdj=N!uR=iVA>xlŕt iz_X -F4z= +endstream endobj 6393 0 obj<> endobj 6394 0 obj<> endobj 6395 0 obj<> endobj 6396 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6397 0 obj<>stream +0dB fp^?a+,;'Ӕy 6)ᆚ&(UhI{2ni +{79Jgx+\rX`q8( ~Ə^ӂNϊV j?L4CJGng N;贬;@+τP_xx,">sUx`pJyɮFן-Sn.gau,nk-2<=R$FqEC2P }/l G+9 N@ţG3ǧMluOEP'3HIfVlf 1lo1thUxBjiǚ=8i@96~g*&ȱ@3aU^gݏ')emKVi+Mv޳R4 c,S^:iwQkN)";|RCG xN0)n|B{: +Ր oml,"({~h]x)`܁PY`k$Ф'CИ'r5==,ч,^?KĉmAFl@&1Unװ +_6UlՇ”GHnNj+k1>,ޔqW&.%Q˲9kbiN`ߖAݳw*Glj dPqi,]Q 8<{rN+cIYpui|0k[Ѹc=M٭aS=xs!LKҎ+GU]8 Hkկ,5MYʈ@}>}Vל-Zqe0Z˴l6_.nЋ˾Nn1`-u=?B,3쉪nW'SXG5e9 AzKMnVN{ vk]۽}YkyAIy7Xu:$׎ +endstream endobj 6398 0 obj<> endobj 6399 0 obj<> endobj 6400 0 obj<> endobj 6401 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6402 0 obj<>stream +~!O3KpwXՃ4oh$p=2ML% 8$g\|ܒqoi_[hO'@F`&\9܇zW4w(YC\RRj|65`y fX_mw5~'v45 H;jwM9{-98} 7}UP(9C]ݜ_YRF ^a"s +#Ika_+)yʡ/ 7~RB3us x`CgrFHCk)s`˾ۨ:A8 f(fFy8eaW*PRs{!QSY^ߑ\%chxyegX0}z5z187}GR0L)3aL3("9uXM"Oq Kg +оͲ^҃g-ck(0MQpJ΂h,ckcP'^W lۚڒ9>Eb?V28uƉ-y)^,R \L'J"vg!Vc{ / R P)Nj)JlbU_v|] kF? klg13u`&#YB/.SMɨZw> endobj 6404 0 obj<> endobj 6405 0 obj<> endobj 6406 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6407 0 obj<>stream +ɅOMܭVBY8^n)Yc粦dF^FtAK8nʼnYc hN^P `JEstϨX|Z!x +j-VȜ ~v rR_ =|K=*X'p}ց.:N%iU(>խk-5Bm:7_'.J>w"PMr3%OuΉ#ۂ ;&zi^7~O$%T, ݧS]z>eLmE=9ZBjB EFBXtR4R ?PY{x?*ct09MpTx HO$Xф)ߠyr:^<d;\) !6!,ڷԱX;&3K}c@b$P[mmh -GW:d̹ ,I |0ⴉrȰ9 ;6cϥ荦(3N"淦җA.L,/w% +Zg3,^`%QN!}$6!7ڐ ˅K"A324τf:@  FlK [ /;n~Vt"'b`%1 |QYxzި6nTTY +9nܽϔ@2㨧 sJX<U֮yS=ŰTtgz(_ }GTn>S/u/wUw[Ndz6_m Y )ayBqeaF̠MJ,1hj&?Փvz`W"G1 f4PLxC3H_SHf3^Lq&T1IHtbЉ)6[\Σy=Z= ʚ'|JkJ=8GVgW# xMyt7Pt7zzˮHF0 +endstream endobj 6408 0 obj<> endobj 6409 0 obj<> endobj 6410 0 obj<> endobj 6411 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6412 0 obj<>stream +dI +s?tkVb*E*qou1n7 nPI Ҏ +u_OqH3:W^8.- ^c#wP0 aYC.h 6;,|r\32' z ңŤes;[!?DYU1fy˚-9ō`y`oX<^QR{ۢ*4^.{nǍ*Lnl0_A@>ZwXG8W8D-)&%BV&:Ė#Q5OGfJD&,%%,(oMP@MZt1 wrGnM-a׍ ]dZn"h*VS xKԯׯ‰$へ|knu`@1ߢQ_O쾐l=5'Bp 3s-KbL[$ +.:E!i%#CnTW7Hl:6nCBO~qNZ|ƒ}mQUw`?rvcQZѐ&P<^I ngZ*6 Te" +Q(9L9.ƾ,р>δ+7`̃-"8\)CVfjd9Mq-ΐ|O4mEm4:3.o01'?!\h.VD:yndT;/]\n1h9}9eҶΫ.Vj٥~5 +ٽցo?sex~mᛰ"j> endobj 6414 0 obj<> endobj 6415 0 obj<> endobj 6416 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6417 0 obj<>stream +(hK3֨ܞmcRιzo>h[ 9}w~oG}Jscwgܙ;(eHQkaקH4muXŒ;!{& ζi'laN)_.i~{51@SU# +29$he;0B <7ؐOcF۸+֩D|6Zene,gXUoh z3+Ρ^%u3Q`JdzطMzdKBeFikl/sDhpxYnAeVpPY?H|y;%z; 0s "6[78xkײ$6 8TN\iaQ35fZ3tqgt0iy)]{&!.t--Vbs"A- +< U;ط5Ns0R ]HhispJ O}Z"#Ç Ï2`u?=|yq@k(+{WgL^BNJ5Hv>}Dbʮ@s1gzd +cZ0&]젺 E8W +CJO" mn ;hXRϕI`:q*CݵR:W:t]"u[olAYԇڍo%/Oj.PXw_E +o^:m+GٛG7DHV8Vy; +(LsD\./z3Z'-Hm-Ye)Dp1Dh{%M|tZOǿs$GG h۞K"x@=!,V:vEl8ZG/9Aoev9@bEΝQJ˦)Kn.D.}@ +wjp){CCzX8w +b+D +endstream endobj 6418 0 obj<> endobj 6419 0 obj<> endobj 6420 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6421 0 obj<>stream +HU[GEyJ + +LX;'OȍC +x1-1K8n\fAI2*2]\T +tR +O!~Y3#K% !Qϛ(@9䴀g]M){mد 3 luLNm Lњy'`hVSa|:q4pb@;cLڸ@ޝQZtk3s曱w>Ҫ%L@hi٤^by-:wm:xVzP&98ǑbWk +Fj pO ;RU牮V!@P+sJ./cqsW/ͳRbn1/!z\/#. W90vȌD +&tLN=47ϵEJI"S<0̜#s852Z#4v; C + e/2flpFƆ˪Us HF tc :ZVEtWc9ݓ$lDŷL#zG.I+(. /^O>F~t`{T(dq Ë/JuQ#Ü\:=0--^Wmd_k{I_ȱŤܒy߶!pL BaLr HL>Ps4U.O7%Un8߉U%nėHU^ +` +?S;NlJGٗ;pI;z ad&ع~o{{9„A± +ң;lK<\kVUR +؊_hqwd5 Io&j=7LF0W\,IgIQ"0C<[t14W?Q7JKJ'h*^O GY`ௐ$,eAOp/mp(a#l~<xYԏ,XFg~rb;eZt Ilݙ;:(9P~o⯋1޵q +endstream endobj 6422 0 obj<> endobj 6423 0 obj<> endobj 6424 0 obj<> endobj 6425 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6426 0 obj<>stream +1.і!% w#z# +P|l[eld ~kr7W*:~) +Jv;I s7.[ CoD*}H;sùxv̶(Ufw/{8A +ʘ|lt},-:%s+S?6\QkguQrҫ515DO¶G&÷5K#ۜp.SnOદʑzᄡk7 Y,Y1퐐ВjƃdaD$)Gh ʷ <~Tr^V9Y [\QZc[?kGnȮ,+zC؜m@ڷ\= l:;PuP226{eQh<U}G"Ot}nxwϻe3f ӈs18otbAn~&Y7:xoM6``CR|5&کgQ]d#l`.WHA"5 a9-7.*q2zi֜GQGll!c3˫&߈HXukʉ3Q(ɣyid|p) F^F2] +e/j @&R2g~Iij0ӀiIv̏z3}4lq_AE + Fnс3+ZiZHgt +endstream endobj 6427 0 obj<> endobj 6428 0 obj<> endobj 6429 0 obj<> endobj 6430 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6431 0 obj<>stream +O\Jy t@|' vLÔ#NZ&e+Ա:8G-ws&X;¯m>82}# Y$;< CNSCeXa_ cr|oܡO6kkzŪ׶XKcO$L]J_6j̴Alo +H ],eO7 +bZ:vf=U pAkN#MH ,ʡ.x[Sq e].{*\*I/2 !,$קy6Z.څ>MwGxnPf8ҩ>Ԙ2J ‹;%K A(OV<龨L&e˩]=, VhB̭==e Oeݯ.pCθA}Y*>,VT$Pr&wfLP'<<4Z"gaYk=s YvF6ѩч9JȮKy)k5R!xOX}阘8OSY\kX69 + &*7u<#ݰ,dw.giJS:_i + ѹ!sW?*=윗WybaT5wHJYNJ 7aj!Ĝ,`$Gьςwd0uV> endobj 6433 0 obj<> endobj 6434 0 obj<> endobj 6435 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6436 0 obj<>stream +Eܬ񎳯[&YNd* e"M_vAM |{{Mm&ʌ~t VzNHPHM=S>ɵ'4`ɞ[5~o{"OBnCp1s=flg2{ ;WVԬ'v>Y=`}y9t$P]ob ~Я(ZE|bU!Gvu&1m>* QB_*W&d84V  +3Fs1n9q9>14g|A_-fZ +b6#؂ S[` #> endobj 6438 0 obj<> endobj 6439 0 obj<> endobj 6440 0 obj<> endobj 6441 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6442 0 obj<>stream +,M7(ziȃj9zm{O3&6,OSNIGͩ3km-{Av֓wA5T {=Or_:m޹]PNS[۸"u{GŹ,X/'5o ~Ŝ̔ظְ B'wRv$/.L@eҀy0m4]? )ZAo*O VOSz83_zoz~$ + !VjB9 @f 7T. MK#Bƛ!7;e8Tn}|x=PBr}hEL]n(( .!!3؂Bt^<#ݡ`~\c|ˇO:E5IpUƻ,mxo'[5Y ˧R3˸Ӓhg5ɼFޏZ~FSd $(׽R*ٟ{sP^,2-Q j#|%`  <ӥjp(ab̟W$鮙8N~ "fXQ裐O{L&8G DR̬-~*0 s^fѕMͷl| +w'h$47g!ւBޗ4q(3f o֝ue,̝'pω釃6,ե׃/:CJ`>YwN<Wab$r03C2ίšzfdPͲ(^LwuEݣRE +endstream endobj 6443 0 obj<> endobj 6444 0 obj<> endobj 6445 0 obj<> endobj 6446 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6447 0 obj<>stream +Ae'Z a}_(ڂQ-c#m8;Y͡k -"cG@TF Adw7lp9K2v|ΝD,<_:#zicl".DfI$w0HS dқ +ob F9/v7@W1 _z耻qS9dg(y +# +) 51> endobj 6449 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6450 0 obj<>stream +G('e`jH5d}y~:֡7a@N_yUl֚8OCԢ.R$k:c;Z?'Ct"O H= ,StP%uPG]$+*bk?s`uֿy"FQhkY"y3~@:^ÍV,? yV(=]ؠ׫ͩt\a|ۤ/qF %> endobj 6452 0 obj<> endobj 6453 0 obj<> endobj 6454 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6455 0 obj<>stream +./yo-I1z<, {eKP oZq3k'uG)I; +g 21k`Yx`f=kl7M?QL3ct쎋bIRA_hU] :vIK N>*2.e#s| ؘcmb.!ޖ6Ы~QwJe#+[聉{\3Lv"N{g/%Jl]"cFĶHRAcN t) Q.[^}DžTKՁf q 7(h22_pNf1WA$:ӠyOS#2oX|*e.̞8r(M@jHuA.+H㉷b-f޷^/WUm)^WV; T ^*蘨M{N,{ENjHs4UMI8 +P&''݉Z@clxmn1~ YA08'ɬ8 +p o2^%fb|/>'ꖽw -|]2RSsW'I#S\-Xstu?@SmK;MEB{W%*:,8%1 m@A/n,^x̯fZzsI,y͚Ià40p>z[bʼnR<>4#25/ +/MWmS{gZLҕV=mz/e`\t +z'$f:1H-NGHyF;mɠ=u`q!Z6A9mޏX0L+ɯVݬ/pg?v$ +g9f&CL +endstream endobj 6456 0 obj<> endobj 6457 0 obj<> endobj 6458 0 obj<> endobj 6459 0 obj<> endobj 6460 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6461 0 obj<>stream +Κd JO^7?3|ퟘ9 +NM_3M;ۼI$f +>u³zn~}A5op+mr`Y E8B_=L|r%' v0+f(Z2TjoC9h3ܢ҃/ ʡQ.0N?-&YF۰*VP`=]%$o*l*gfji-jܱkX ӂFztdKPD&f/ +A;!@c1??, +8u[F[?OA=R2]<[B=9e@apaȋx"j,t!@b\gظQra+D+m1"daW43CG{a?cVu";nrAd߽D+T6Uyl`o5PTWIw(>O c!\܅AuO$G )xO65/ŷfY5/kEŽI"eRMjy˳_ڏ~#cp۪h")@EUd:r|О_K7*VVƖJ@q-Wrd*%mGpWAۿJ2m5<-SU"0 T&1[N r7艴eBԬ_֌mOQW$?}lWvnt|÷ӽڳI>0Z +g5M:_@VӺ- RK@uȩAnDfCe[ŒW*[K2)T%FؽeIO%)@]lDUG%+4 =J7_ ۭ}w%3〽O3x.TH1Ap/esj+^GʍwB|p`39r4iSQ0o\c1RVYbWJ<=eZOqNL;w2b낄:l }uĴw"N<(FN]{$ L{bbƠ6w&ҙlw<"@AX@O.pQCf/{& +endstream endobj 6462 0 obj<> endobj 6463 0 obj<> endobj 6464 0 obj<> endobj 6465 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6466 0 obj<>stream +ch&FpY"2OLD1#횠Mf9R|_=#BM^dp^+Զ;(RJXN7 +:$>'k!aX~>Ǯe~, &thq9O\5A⧰$ +Uq!h"?zPCYE>Q(94.L.`A%>qMC}K{R/TmtisZYM. TJu,:YK~_~Cbp,$Z"Au4~0wJ* 3kj,I!O OXCWVdzcɞ%8BCT!%EE&ۛv],OnYL|*!jmn{ƱfRXv2Uv!: ܥj 85\ʼ|]ױ'+~DztXN!句6 fsuYMC~7L\vAV$N쪈o=띁W߫z{iYY10֔R#I\]קe*DnlK%|لd?)2Å[hԂf*0݇,͌dU`ăzG)9*UJx໮ 9P>nq nsQ(86XվP%͂ؾ7B'7Vۦu}{aQHqEj'`(tѵA2^5tuq{ +br@K/.U.AGرk3|9-V1Kl 'F/ە +.%^놯%ӘWˆZq,Zsc5ILmG&|`QŽ Zr)v +h1vO +endstream endobj 6467 0 obj<> endobj 6468 0 obj<> endobj 6469 0 obj<> endobj 6470 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6471 0 obj<>stream + c{ppY̗2H s\br']Kwq_ w4*? 17>YJTNp%yR' 6=/_Ͽ/ܳD4~7~GP4]HP=1k%Sϭ./ х*[|(MȹG|s4VWXpjMbxQO%stM,@42ʌɆY , ‡3#y +endstream endobj 6472 0 obj<> endobj 6473 0 obj<> endobj 6474 0 obj<> endobj 6475 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6476 0 obj<>stream +wdSloP},=Yj"vƛlbDJ0n$uc'mc^Ome>NN84T ,iBkLaO9_*:WFh`+-&[@- c6HexĹzlq6O +7\2cmDE z@:ض#}?S6I%VrMφ +A&v_jbY1>20l~S|iC^Pf\Qourڛ+Ph1(Q%^D|?d +5zz= m6ĉSdOR_d}O7Ngg2UbaoR +s|c$JV0|)4e3xTȀ]t6(]'PP?CK5ΰX_4*K?@R))e5x"ul+S1;VoPź34pƝܛgDȷ>\B+a,ddғ+Cr VJސpKAphFՙ\b!g#qDPH +ӞI5$l!XvZ9) c5!po܈.ܑg\߸B7DWvI\/ `v9Edd@9>0+S$o[Qˊ"L+XaV+cŸS- +\Gp<ݻql[ J/GBHxAԜ(,Ґjk{ F|c߀d^D,>zbs +endstream endobj 6477 0 obj<> endobj 6478 0 obj<> endobj 6479 0 obj<> endobj 6480 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6481 0 obj<>stream +bĞGѰYR:SXClHyC5;M ơԤ +QT yljS\ O~bVb-0ZH")dD}2Qgz_lnf؄F~[gP.`.lHRF9C=1H[yTp*29ªLͶ/F=H[᤹gbB:IQcSȅO#g:NH? 9Kv=4J(Z\aMo=_y +eڭ8J n\cl_C;k'{X~d7+L&65 VWh F݊ }! i?_欢tӿ&Ҹ{k/MmG X =g5^ez {SB EQЬph$4rL:˯;#M*I,|ɠjo$tbup!2%yiG=0 +???l؃d(Xfȯӥ]% =DNL͋d!\q|򫠞˦8艼sT $ ҿ=gx4cݶ`9hS .O8dO9nKMMf8ARX_ĶJ +ώ,zA" {Qt\}1tNAs ٪n5_EulQ2m>fbgAe> endobj 6483 0 obj<> endobj 6484 0 obj<> endobj 6485 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6486 0 obj<>stream +$\׆$ 7 nKb|wMn=)m6 U8i)9xQ]7mIJف+xɩݏq2잍m>T +FTkxM{B[ˡ!Y1۩%nö6e( Hq Y- yJ?;SiNor% PYfJ!צ B10(R^źeQyAS#UGv!xcy.yq6Qڂ J6MuI"< "C$P~-N}Y,OԪ4nD MGHǩJJrvgZ8ʂ-3Uw$F`;=#bd&<jT}1Oz@S=9ɧ :*^d@=HQI] ++jrǔQXmC4鬚a9GXO7Dp,om$`\ޕ4$5W$ 7+N.XXMOm)T K:QV|'ɬFaQ\9+ZT]׹r&hqq@ /Ӏi;.!A+@` +endstream endobj 6487 0 obj<> endobj 6488 0 obj<> endobj 6489 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6490 0 obj<>stream +6~ c΅t+Q[&;:;B0H*t LO>K)FpfVʻүwO7f"6[D~Ƌ(:q`ItѴMNr6ޝi2#`5,ֶiPjSqXn[Ԯ{d٨~ }'ɬ -H G06 +Y=|QqTP·U! 5~B.z6PXw> -jœH*$>*E2h`htd +Ckej)Mݵ֯{3G"NH( O=#^7iߦD +ʶj:]\p^GR:n鴀~(dl9r*6s}Vc+OŊD/I1Μsӥ`Z OnmQΥRl=`4N7K CLs!9Ƣj^nK`*6]ݵ46ܧw%u-H_K+%^ԟ:> cNZ)x +9̘;!1%>P +y?-'j~72A-Tr{(I>$,A׹_s{Gإn4Lyn ǁ2ǂfnѐ @9.[oi)N?04?:a"k^FeQjmGD1k6Pߐr$I"fDOAv`!(q^1 Ҩ>,N]8qt2ƾ!Ȍ*',9ˮS5KֲG͠>;W͋oW# S5!ψa͢Wszh9RZgrU+׆X{\MG}}rqeCh +@ dQ b)#+רMj8Z緊I"x93{C X'qH$k{+8'wm߰Tq!qp,kԄl3Obf:2%dmهuCcߝkv!KE8Hf#8H |po'^Vފ%;hoq^^QRf2ǁq A,u_uD_g +endstream endobj 6491 0 obj<> endobj 6492 0 obj<> endobj 6493 0 obj<> endobj 6494 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6495 0 obj<>stream +-K+u_c_{n5e54Zlso8L'CoX_h9S36ԄJV=6^3nZ$/j5قIqe׏V%8CQ 5hyeͱH2IaB2n>>@Ca0KGKbݣ{pkE7t'OAd #Cĩ-g9dy쐢IH:_j{װ-*t +@oD]CR!I1YtmS! TP{kp䥇Ż +r-!1ܤ qFs &#ުOD՗7;ۮ/#B_KȥWpF*dve yB`gH'kIa|Sd'P_Z'\f,Tu9 [-g2P+M0#yTD £rSA?=B˝r(XwՓl Yg*'rϬNn5dh^QDz}aE 5ėLS~&K@@HS\99Q2, +mcmCTca$zH~]2=,+O*9TTM9!9/M3m\2kVXI뼅?ɣ2P;[of(P}3Cw|E2T;#MH{Y+ItOm9C[^9U\X2kjo"+g'8AMWW ^4aP ;g=e;WĨA%Fce!0= (DSJO{WZOym"_[CAXK~&x~ڒoq/=[`E=틭Sk&#cáXlq +mc8 g_ݙJ॔bx:.Б#|B ץSAE ͺ6X黁1:'o=uD6) t_qn7yv`UY2Â0|:¸H6)<qsT,c8#,uZ \)<"~\+5JzRMt0%j +endstream endobj 6496 0 obj<> endobj 6497 0 obj<> endobj 6498 0 obj<> endobj 6499 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6500 0 obj<>stream + +(&uS)LMp'J$WK&KS xN].Ͽn<==]"lӋ䈡 l~o'i~;s- wGy@v<ɸ~߄%nX j:밣pl6OL+;e an-sc]K+'I+^4-#LgԾZI*/?pDd24iVg`h<-0䐇%P-A/IND]V9u k/$RF;ON(1UXN@[<ϤW弿sǾ4AMB>cyYh+d* F*o6*G r,x.+"$Ć0svѷҹL_ +endstream endobj 6501 0 obj<> endobj 6502 0 obj<> endobj 6503 0 obj<> endobj 6504 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6505 0 obj<>stream +5vOyp"na{7t/=. &#ǿi醻БjJ<ҷI=3W1ێyl4vX>!d%K88`.>?Ս06~sxۂ#"'r]mRd{dY?Wd<"M6ʻ$¸ѹkk+7?IE=4"90<\E!Y*)F H5ܕ& s.8~yKՆBkB"B+yZkV(U!+I{5bzΘORuH' hoD6>ޞvu*` FCڴ^+ǵDXI΂7cZ:c8b_uIUrж9u@y_aeDPKꮥrHj61`+{n H AP2Y Y@ˏkp┾DWP/9G8/>'jZql} '=ht )XN>n*s4e%LẙA;M( +)Z"a҃3}w 'ɖ=B*tjg"7X 1کU=jnԒ2.`f$Ace"^$lALN_^UM6_s. .ꕁ"KhS^7-ϙ e]҉9'MnAjXKA[`Tf6:CV;\l :0TڛF_lgetvW:yLYBWJ=kм>hl& +bK L*|X%Ro}^`NʍoT:6y&=yU[NP)-pJp&x"ԑ\ _6N&Ý`cgUvɗ,phŴį3Vi +endstream endobj 6506 0 obj<> endobj 6507 0 obj<> endobj 6508 0 obj<> endobj 6509 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6510 0 obj<>stream +H'j\ܜO 6&ߒzgF]I4C­$1ԅL,CSƦ%^7'z\c(^cmQp m֞}G)^:CATbDw hwbT6_Ey@2 'm%sԌo'ZJz"SQQΣ&#^B(p[$orD$ +د{y>[[R"O& r g/1p76sU9ZunDz ~Jp0I:h*)*7vn1@ɰ%ؚZBRP M18q0$b ݤNj2s{ЦNFck/AI270ue@RJŽTͩPv?I`Pa$֕(֛˛w9۽~=gءT_^ +endstream endobj 6511 0 obj<> endobj 6512 0 obj<> endobj 6513 0 obj<> endobj 6514 0 obj<> endobj 6515 0 obj<> endobj 6516 0 obj<> endobj 6517 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6518 0 obj<>stream +OQazcQ #;84zk=_0WPvGiwI-kv- 21nFPJ 'H4  HJ^iv,$@[b6׶p\- -[(Z])azcpPy@kbW 2$N$c9:,qb:;!x2R~QT8 zf]'! ZfiZM/$},S^mZ|߯1Ke +8{oZ[k:u>pD ,!#J ^n99h.mEb^_,dV_{ /%m.m8מkMc_l* A:߷' +!D25it]qcTLU$ ~'PjplθEcTKL:Oơ?XBN(Ə2cЛKdbpz3)~fJZ>h$я0"\'k1z[9ѼX9-NH[{‡Fbv΢g`.o4H{F`)d__!1Q_TΣ +L*>'sz`{#9¤鳈\ <$r,rK}''=a :Y=+e&A`kbL1wZoz US4=`wr|{q +endstream endobj 6519 0 obj<> endobj 6520 0 obj<> endobj 6521 0 obj<> endobj 6522 0 obj<> endobj 6523 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6524 0 obj<>stream +=n_frzK +%i rGqA5d^U՞PcS*c煍,"eJã[HgxnQ֔/D:r[&|(k/jg"& DN?]N"Ccvq m6thW; +@:/A70%n X M"y>1Zw$Ƙ{A1IƊl\Rjrj@,2)y1/ L1uy%98D$ %yd~=QuUN,r#K!JH&PbgߏƛrĮ\~q@F9\1U8F6Έi7kAυ*y8}9Z)(m1[grWP|`5#p$IȢpbS {o0O)A(nu(!t<j̕kpTᥪ dӎ[WZR=) 3ѧq{Ih,c+aIfp 4T#GVZG)4F" ѫ FÖĢ؂{;zXj +,'AFt 8u8bX_@s~!J YdD:6HLetWw+KXaxa;\ҞDdc,8)y~Ep=,S +٘=>I@6pyȩlp` #OOт4* +&9pkC,Ԇc;1\jjrCz_WѶkr@7?KߝVH G~?q=ehrKWBpi9tqc61,Tj+%ž`Ws5Vi`$c tnC"ƶέgɡ E8Ni~ ) 0h pt=ts>Nw4t~~6sdU˔]&efz1Zq GL=(f'GQĩiu?_6",ǿ5v^ r|IFlR>.M9wBĥaW&S +endstream endobj 6525 0 obj<> endobj 6526 0 obj<> endobj 6527 0 obj<> endobj 6528 0 obj<> endobj 6529 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6530 0 obj<>stream +y=$eo\;9)G6,nd9dn.VIX;I,b0~\:~C .H.:LY[18MM +ݷ9s-h`ЖDo7A5rqr1g·u<H/z>9/$m_8vJTJ[F?<X@3k+Po[EA3{IEAF <^\Ѭ%&Kzw) >N\9Q%NN"N.VJ&Vkޚn)g3ɱE`ʜ#˸ S8jaN|F_Kk4ސIP\{]ze$픏(% pbfs47&W3%DX{F:f08s]\ +߮q3IGr@#6V(@hEoF-Ӝ@ n_"w66gѫSײ& 7}.g!NRUf(Yt5C c:z#Oju+f6+ +lU9pZ.=%wtzx: vsDoct!:ONf;1٩.!c`agmm)b*{ 3Mx0rU,P,{2 +Q8+[_|%Ef_S{`zNDW^PMVGY.p%^+-t\zdzo_z0z4R8@N?p!j^m>YyܙjO1 (8}m_!J>z&(& Cȱ;MlX}Ýók >G 4pը{}:|O +endstream endobj 6531 0 obj<> endobj 6532 0 obj<> endobj 6533 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6534 0 obj<>stream +w5{- 1%_.\0\#-{9[dduFWŒAI!I5hHQt]kAgv_K0<{{})W R^vof:p1j㯃`wRbw8]F 5PONGbG:żQfnߧPRJi^h$m3)Fs2 /D_v5h +a`!d?BX&DGl=aam<*-@mw+y%N~6#2-'ez}G{l'=r#һƲ.#b+A5i_ +CJC?&%d\1ahάm7X- ppxz@Z ]8W hcd*}r#C/.UQJeۡ2\7E?ת(-z_w̡&ap+(|p'2G$.V4X&`Z(uWF|rWrNۭp 2j"3 ĀA!F@_<_TtZuOů#iׇr4f{`(~*%|rtrYDuv?~b͝J˙+ȟ1v^m\SPK S7W̷AofscS}&r;kjQ"Ι&d' +>!DQcu 4Wh9dA +endstream endobj 6535 0 obj<> endobj 6536 0 obj<> endobj 6537 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6538 0 obj<>stream +5۞lO@ J4h# Kȁk4A&Hٶ1J5aEu(Rr=.-l$imI +oi^@p\W!}t^# k7{*Z0]Nx%nmϑah>&:޹K%?{.\,R %Ϋix +S[zH5q&^7[j+qh./>'6lVx8PoeLJoDy%Y?dؤj#MTW~I#I{H#_KCP*2m!$ss)-suGDw,H~.kH 17g`lM9מu1uK"xFE'-WbDSD&@JjODr&'V,WrFUA=gi_joO2hxܔWetw?OMA8EA>`=.WSN\JJ=x7۔[Qv" +۷DT mnHyŷŏu6 cbyl٧'V|jh49*",l7-١ͦા~8tEuGe%!zۜr?'_v5n/ޱlRQE&<ߦ._JT*) ^9F߼37VMi4~e 5JY4Ap rYKدTaʫHAI[NVK{qƺwwPkTd6"{]gשe BʛjtU2f,)e1B ؁LUdTQ/R8b,FH= CH$ĺO0]7^Q4v+ B9,Zu}Ewp?W4?, 1Y:Ӵ)mҾ \6Ѫ̞4< +endstream endobj 6539 0 obj<> endobj 6540 0 obj<> endobj 6541 0 obj<> endobj 6542 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6543 0 obj<>stream +B/@X@ +KFT`1*Jr"b 2<lN9`g!M?8*rۆҜ/.Ѓ{䶴үw]#諶rsĜ|w*pС ^gK'5ն~zg-ܾa~eR-,%Yi<݁a?.sK<^/#2uּVolYoxXhd03E}ҵ MhBxsPjU2S>i!0"X4.kO02׸ %^?MUE\߮llb1xwc_%QT6h:V+T꼄\gހNFR^TR=:7't%0 Fi?.=g;8{* tgx $ dO .}>ǣ"[0.[NvN L73:]0@71Ɛm}X1p@6n"q{)FVTRf|fbQ{(`8^ezaPrQTsN-Sh=oBK0 \Xcޒ- lbQ{̄$ݼ0=%fC(L3| ` R#[;jRT{J9Y{ephXj;%4~>n7ʼn +&t{M|+afs oN;"}erѯ3F-}t'U@`Nn l&65/5 +âӓqr1oc2a~mC\V/j߫G,&QDnm&"fy_jXȓZ$h#|O*.HoȕS:8acujA- *I~lY* +endstream endobj 6544 0 obj<> endobj 6545 0 obj<> endobj 6546 0 obj<> endobj 6547 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6548 0 obj<>stream +[ s5STucK +]fSͽygu%ϯ\Dp1E`^#/IqU,w+7dȗݽƉ_J̠@CͯNpS y~> {sʣxz~#HJQe *v+Kv='%C^}9 ++SLJu{%]r 4TsÕ!D&+W _E4]L 6g|\x4Z{:\: + b2ԍ+&&?6YrmAGydx-c@h9PE%JԮBx1H\upǰfuxo"> endobj 6550 0 obj<> endobj 6551 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6552 0 obj<>stream +AH^sW>EP}%IzlW[7quԒwpF53 \W(] Ɣ;?W0Gb5_ԛrx%ףqA]w+(926d>s$LMօ|ojpIՈ'Gtg4W(nx_ByfԴ*ɸH[C zrnȴ . ~.ޡx40Pt 9]ΉHUAs "m$AU9iYW3i\ F(V^77N Oڸ7_w[/{=´U} /X ,hp9ѩS FmEwiÅqJ/䲒քKIdz{qQ2 LZX-2[e,tvva_Z9 r-BYԧ6|J(գ H X"5! ?A;Af_``?|HpX? ڋƹ"IH^Z#bx-D8l+ŵ\VgFsglFMʨ)_bt?zIZSx9SpL{%>1VI"Q)F_+0l v/$zNX xXfzB6sSm,l?y#PuuPm״9p# #3я l5WTMro4?ޒoFK>Upgs|D:bP|$aUVCT%-@P4qHhCkU7qL~u@ +endstream endobj 6553 0 obj<> endobj 6554 0 obj<> endobj 6555 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6556 0 obj<>stream +x&}0G:S;P#|ַTST_$H ^N4Xn>kz'9WOk/Kpr`$x '9 H^݂|rWn3eCCOGW +rR + +qG!ACM߈g| |oОJ[ < Rz%!tXu02%Qdi(X8g( 8zCJ]Qu;ڴ{I0 hKxEC B^|\ޫCrFK&)J;2^DC3LcL_gg"5fQW\lyn(J&/_-p&e@B`(\(:~oSpO˜5j QCh̺. wıQfЄfޒ# +Aɴ҅q#m*%h !U1m qQfax]a|WF`Ѐ ItX鯟 r2e߼ν]sn#ϔ :4v/#kƁL09=K5)vrcf ` v(7a +bdf=||o|CdI_nSâW29!XŐV%[!qBeH%ɠn ]ȤAΔۣCa-ҖPXZAQo,ދGBg1|| E CHV4DA2s%^X +ʮDk,4~ :T?}na=]5Y)=̪|`Hq,I~R'49Z*'۫MYAՠqQQ>WĎ!8˅&vCh"}\[x CkQǞDf.OCHjճ@>Ur5IX5SUt-2KǦ +endstream endobj 6557 0 obj<> endobj 6558 0 obj<> endobj 6559 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6560 0 obj<>stream +nOhx_;]C"A<~'ڝE#6k}X.5} +Пf3ō0"BEY 5mSn5i S*Kj]FqH"o&(9ّH$dW2WBXy$2EBreX<'>FKO~!=O 3m/iګheJ/q;ߝD_{р&f֕irH؆%Q2 2kM"'cYOIϕܖ*fO=_{rzXEm 0OA8Xu.43 6;qE@;!+r XPғ"mdr-Y!( !Y: + $u~b +%Q `"EY7BDG[;gJŷf~XﺋA-sxx@AZ_@T-)ctϵ8xjxtϸ_b q:IyW_-a!PZ (4e vR..t.slk~SjdagɸޏM~殏Ly^o$!&Ő7 G gL90\)¼6-W.w)| +gFƭ(dV˜p7H0B?;)ßk'|5~ Yq,}],b*DRUv!2p'++;cs dg:[.Mw=i1՘JX@86jezηmh<=j>*Xojt(fn~ZSʡ* =P@rL=c,Kq?ڍ/ 9* ܨnfb1tlxv pSi)p~ifB\Umg,`;9;,^G E%~/٧uc"ꗾ\!66%e +endstream endobj 6561 0 obj<> endobj 6562 0 obj<> endobj 6563 0 obj<> endobj 6564 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6565 0 obj<>stream +:6덃ǞetE(2%6L(M K*IےAziMx+iZChT)3La)IuLۢ0U{&c[> \̃4 WMls+<:4 YƧRI'O zڵ `KEe';=P"(p=:ü'|V+_ -F|ba&+>å?הjd*SQr$Ѷe3̸FO-!qjm/0?rĵ<܈L vˑӜP\bJ%Mc{A<N`W8ԃlOsv.9 tn؃eА&1&/3P}15cRn?S\+l$]~D=T=zr}o)/J a._+{_r&Z؝G!~iWYZZЍ;k9]C'd}#t 2/>\1-34އ4ԃX\\ e{a֠ 6JG+[;GŞ $.ϖ~Sz .jOXB +endstream endobj 6566 0 obj<> endobj 6567 0 obj<> endobj 6568 0 obj<> endobj 6569 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6570 0 obj<>stream +fkvj {(5'X4U u;%'M`jƶ>,keomPN&mϒ<0h)/o.Xa#/yަF-UtWo91\?yxg̱Zz\&~N{-ެT^)>wP]l@>a2`%^Thf/ b(d*XLP QAzR],Ծ :adrL6[B=0K{{NjFƖs*N']Myҝ8T >[04 qX :-Kby#DMȢxʻթzt:;RطJu?T(R&ć#_^`D\> +h;'+ah +b? + SObߴ8]q!ҟHDrk(zr~CvB$T0ˬLXUբT܎H Tu$E)cr fI)QFjZ UN$]P a2g-QR7 3`^*x$ 1 fx,B2kJ~jWZ\CzVF,SHr]1>7-*DXen +H)|sP˜L?u1XЙd>.jVje+z7"DSB N ¦$"m-@u +72H,DbDS~ .,J^H%x8A}XCݮh㦧 k~kA|"qbp鄏@5Tw iMOGfP`jLc +xә(L4WrʂjxhMJ 'ik xW;ZV51ęG?pp7U<^%GaW{Fs(2F )2~; *%\@*tW߰|/Z:mpQr`p> +endstream endobj 6571 0 obj<> endobj 6572 0 obj<> endobj 6573 0 obj<> endobj 6574 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6575 0 obj<>stream +qwNScpCe$FE72wIIku[{̘4 +E \M:G0X_)ݷo"QFaGIѰjm.y_9Iϰ\+ +Ԧam󑰻B2_5%Ca40h7c-x_/}.~:RnXV  .#|>5cjj_m/Ȣ"(VL9o;XC_af(Q)/ ǡX~xHa { +0RoHYm@JzFP[/5&C'&kͣMVi6E WmJSA:'Mq2+6 M @!l"_Y| :>Kp{"IIP0pJf}&kF)V|0%hp)RX KpOe/kfu,65g8 q +~4dQķ8?}$Эϒ +x9Ŀ0"7BJ ~I^+!~_DrlTA*\ul]6X,U]7e4I[+?EGD;DQM`o4~-$oP \h$p"ȩ µ`>a5\Bs$7=:?ɊGR5o~;'DB';6=m<ƨhTG%dϹ_yTW`ge.1.u"w|.l&N^ؚ-m2?8;4+-wUCAgۤ=@[vP6`l};XܧUԄk +kc_0PLx!D4KІf ʔy~9cT E#H 1',䙔jp*pWÁF$Pʂ@vt<R_!;_=Xʅ+xiӥ,9e]P@f6ze0[B*ޘY\Eʷp~4q*Z h2g) HYCtbF^~?tzyDD=/#v{+1ېp7 q2XqDj=2K%‚R7:&r\=dYQ> !µ^jT Í)ӳҺNa-|_zUl<D+b? D2h/SSAԱ +endstream endobj 6576 0 obj<> endobj 6577 0 obj<> endobj 6578 0 obj<> endobj 6579 0 obj<> endobj 6580 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6581 0 obj<>stream + ; jְ58QF׫={iӃs3ۏīI|\EA Gg֙ ԗ+񴦦nL]Lli8_9˜< 7l Xx4݈u҃`r48x,پ6-}$DR[|}F2NR +S1H)(P>bư(GnӨXPjC Z<$)UOX)-1ٳHxJ_mw\`1w>("'$T +Fˆ`PiqYY>+ kl+N7neM_sG{f.s>~rh_;Đ[ou.a +Ŝ;4#6\=+hg`u1%&Z«FHTfت+zʼn8I_% +KjnF Q:@k.MCVX8vA#O3ҊPHԿOc!z+ km018G Zm/$}]/B/>oJPnʥ|^~zF wHN/6=~V8[)ԑ#V1 MpN)cƑ遝Ͼ_eFj_D蓭 ٳk@h` +H-e< eŖާ8B=f^^8G-p)$xXE\g4?i 6n1 +ǒ$qM͏˸Q{VD CЩg!#gEL8c*M>+~S:Fo•$skL-.6.F ѓq|6b9Hyuvmn;h׺{UqGX<&QzUJ/1cOuo+O !w[Eޅk6:\ l(B +endstream endobj 6582 0 obj<> endobj 6583 0 obj<> endobj 6584 0 obj<> endobj 6585 0 obj<> endobj 6586 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6587 0 obj<>stream +eb\~0",s2iGeͩKAN|Q"Dle2@n}e.Nv ҽr2.%n4"( ?Rf:)&JW,s?|q11/ٿ_Rk[TsZeru_G`Xj(9zkF0;rg7eC5)6ndkE,ށoC~ r..(@9P9iD+Qg NC96brڌ ":Sfeѡ߽ہ֜F,j̀%^(,DL-d >30 Jܚ^R:J*uR+ZoJ3;MoIN +M5.MWa(_hA*K261fKi~*UC|kix`bzP}Z*Х/DB L~$DK5Еݿ: Sn'h` |!Qeh6tYfƏXc9Pt;Tc]N`夤cUW jVy1Z{ċE(gsZrID|^KWANA=5o7DڻpYT7pb dk砊4ia, +xiҟu^0%0QL)`vB# ~/pvvF,Ti&d sE[=BGiv\: ]]C݋rL0dE>nj!jD^x.XѨ H5G rOZ[^d,5չI@Z8{>e`ܾ̏Iwi d+X)GM1dۮt~^iwd8Xm A=1 JKIX< @:̂zIf>S^q jp7%N3GS@ {nuq81?UI0]jJ9ԼATrK֭ݡιKĔ؇[ň8!L@yϳy=ԫRT7jFQ${#_HΨ틉/I%m; }]dQ_)j +s@)*4 +p=*del +'yNpNM%i%|E&Yt(`Uٳ2.G@l-_MJअ a%ؤig(_Az9r2c 1UiX]m|MraՖ5~geXRu 2:8 +endstream endobj 6588 0 obj<> endobj 6589 0 obj<> endobj 6590 0 obj<> endobj 6591 0 obj<> endobj 6592 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6593 0 obj<>stream +Y0;queƍ#,Q"RNwU}o̎W-`o>!* %iUѦq2s I~ui|.$q3yHB)< +,`#&9$E\x9 Xv{C!f9{Cl\rFv,Q6QQ͆.ҷb".lVeETئ8x,퍌`L (MwI+Ӫ<A1ahs?tCgYQQͼ>Z(.gC&+A]nn+%z& Q"j@egޒ4v3+%Z7Y9OM(C 沴a ،1lUTIlPTZry2R-t~X1Px_.gQ`oUv"Uwbj6ms +%tKZqZ㶙U8 3%w%ZKd"sNorɆ2hw> +f\.oxŒ7fR/:3r^Y8c(Ln[("Aۢ +u(@ E3 3 4A$e/ٔFה8PIOC"2eOp/ӏfxĨ8ȇz*i&,8ڙ{9)1cy)${4dUGgǺV!= +endstream endobj 6594 0 obj<> endobj 6595 0 obj<> endobj 6596 0 obj<> endobj 6597 0 obj<> endobj 6598 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6599 0 obj<>stream +Cb8[9 >Di +a iWqZnn uV Vf`?tc*du=$vaxUxHΚ0elYz`8[qFމ {9d;~1.,5 7 _" md:Oưi#hH8l;H|h[2iaBǪJ10i4 =y(=»pW AA>k&4S,oûET P"&ۻyBzʂtI%(`'aU?D5ti˰5(LQAykx0ɾsn臀;LXj k> endobj 6601 0 obj<> endobj 6602 0 obj<> endobj 6603 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6604 0 obj<>stream +hΝ\W3 ;Xơi"b]u(DPU ڢC>TVx욟ð Bo1+C2~0uGYc0J KL.dKOSv0.W͇ᇑ9FoT3rmYr 9PSlڞ7.WH!WkIx䖚w(ɭfZ]@&|"yo|]Jؾf:K%,_>WQFQJr N#c%W0=y*Sq\#ɥ +pnCȋmh$ќod`Жšrz/%R X:Wv1]!,{eyd;. e"]+}o*`#D5kslV>Tg`GD-D +ꘁ:8^:tʏz8vBzE'fJ?6EDx0k͇BE>wW-I,z=|;ۤ  $ 0L5" _s$2?i8ltfqItpX^/]L+$D +`D Z3gg2z@BU)#5z`~pj Ta&ۃ"Ms485|Q#!*Eb:Wx*8h^&GR[Xa,UEk>e+0/%W5L #e:hڽ=֋EvۋQ5>*E?@6MVhg>lٸ_qXbd6jEQJ:||e댹x> Lq~il>f]6귁ĥ{SG&^7|:poy gWI5#K(_ AFVhH fXt79kxj'` <+ 3`PxʹIj0- gx32f"=ҁ8NIYs\gI1hr#%/D,s?N :\'D @7AO+0m| EmZ"*`et h7=PB?|'Z2I)rQf9׀fk!śӧX=2@kJ{?o<"o|>w[j)_Sw !˳ @RyR4AWzPMk$Q@О4٥Xc9S1pJ}lQh8(&ӂ`WskDw,F3%YlZ +endstream endobj 6605 0 obj<> endobj 6606 0 obj<> endobj 6607 0 obj<> endobj 6608 0 obj<> endobj 6609 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6610 0 obj<>stream +E ԑ$C2VÆ)=eCzuq|e%.ĕHQ`^G/Jlךg Mf}sǚSD +-1PÂ1ڄrJvd/ 93(Z|VWY 2ʡ;ш<7U|kT (-l`!cZ XQG5Jy'y-&%)wɨg6mQy*/t 7GH%b raki{Z ?3x0;MNz.N+1ᗟGT;K +7`ۨZ6h6<庙g6ą)ΩJuz3JFS \:5Oqh,a}xIvm^׀N}ͦEyDt_;x|!sa4^]_-·X^Lp^H AܚaE UPe#mJuO4MI+ GKb7ŧ觳F6|F3ɦ'E|o0lj,V7eк~VnIP3 3UL 9!ۀ5sy$Kt,4>\;c*[iaOlZe\&2Sr$!(&Œ)HsGh_'b%ldh]XĮu4&4pQ 88D;xKL՗G~-y+Єvܽ; +endstream endobj 6611 0 obj<> endobj 6612 0 obj<> endobj 6613 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6614 0 obj<>stream +%k2{6_IJONR*/t +hXvda?팢S<{t3n} +e'_IH|b*K|yGl9q(\vFE0qrT)VcI@..'K>)Dߋ + ')Q׼ؓ< VdyTQ}Ow n;ʶ['lXKdž:\TU0+W7MxL0pgr!4w@-RgF1y?uĦV&~ z R5nX򙖋 ys +YVCo<&J0:(%YWR<:QϑXd[u +3fEhW:K`PP'b_c_Zil{{!}C U \MoadXҵ㧣\e: n +m +1ThjfbpĈ3ڤ @9".%4|9S ,QU=8(F}'R bȰ6Ѿ[%EHAS? 8x,HXeEm +M9FI6S| H1G FeqAly~?!9R4[Nt$J +NY+\ώ1mٳ Jt9w@`((uO 5fAg@h\I|\/iD10?;!TH*%*kB.K+4%JFzظiShZMT FvVsfL O5ա};O# +B@ŬhElCS"3 }I$N sGB[6AJ`khm@E Xux>y/!ұϡy㽇WC4Ģ mP3v6_wG^6R󯽪"xM_%/ *\pwf뵄6jjYykLɾؒgD:Ȁrxr +`j%/,:!6}` &h{w;F?mC"r;Cpx3*:}ߵ0=8buw]ݖP% +endstream endobj 6615 0 obj<> endobj 6616 0 obj<> endobj 6617 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6618 0 obj<>stream +b4pO/S7Uzwç誫 #L7 +t l 4jy{Ruuo/2#,˞DUáC""{}vΑe#iӓ +%G++Kll Ni<5[5_@UT~PP@vs+}h@\_EKWֵz6}1joڞu@#c|2)&Ȕt2 +' j W\ Lgf/jOpcTzY-J=\]X?JRpEmK\ = YJ~-YF {ڎtO-8HA(kɉ4f鿈 TlG ǬiXq&*p] "V9 (xRTr7߯W+x~=Qa@vhay,Cmi:L Ce#fz&u҄R.?c`ZɹN<%߭ܙ,f%ͺ+_ +O<w Π c!\}uY HT/⁁DLBˬpv'.) f%ۓ7 +7@ +Iˣ: iiù>*{RnPv{++G7Խ~5][QZp.^5_Pui\ɼ:Ec`hTl戰V'>뒨g-k-IنpSH@%Yɉ +گ1%P(Dy+IZ9ҡ}vIN7 +endstream endobj 6619 0 obj<> endobj 6620 0 obj<> endobj 6621 0 obj<> endobj 6622 0 obj<> endobj 6623 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6624 0 obj<>stream +c3BuDo'eߝ}EaTD[ᑾMϓ\8i\Bu^CKLʪ1 1UQ +g8^a^,k +4o۶Lf%US.+K[=:Ts:yd%V!*W>UnZZ^ >& @*;Z>B+2}4*g);x=ؠqG:gNE1{g,yjU>+o s1 >D~:ZTD\])ԞxIZ00?l6…!%i 8C U9Xn_j t!<-ip0Z;z O'zJh ,S \x\ x*P1@%_d,mdVcfu/Gkz[_VY|b&p/=SM2,-VQͶ3+@Hsg|JոG&$O2Ԃo`UŲZ1SS0@yOEkR3ݽIHq*0oR_[[ޗdkDK]ۦpmvh9߻'4n6#S)\qk!LC5UQ(@c?% ++' j,fn O翢Iɬ'Xeî> endobj 6626 0 obj<> endobj 6627 0 obj<> endobj 6628 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6629 0 obj<>stream +^1IPϡX{88S#= rs8VO +~5Y\tmpziL>"!־AfX#V+d$]!2L?*Ռ"@񆸮J9ۘ tzJ Yܻ+bcg yL̓1U%i yCdg$5q ֿw&sjD;po-as&ND0x׼Cܗz߰ZOGZ?B\pu. +zn{ALͰN}"UꉊYtʿUkC<r^pUO'wnuG+Wxx%[C)=#?7_C'UѺ6O n,&6).|cn;ޫk}pWPTR DX5,ӷ4Pǣ4~GY`%衢(雉pppV{aZaixقYC0ǜWMq50ۄԚv#!W†Pd)Y0GI! +Te(OÉ4P5Umn$-n = 5GHa-,&UtSMe:he +"aqN'301~!Sɦb&I.NV- JA{zHQ5+l0LjRϥ)kΦ_@`&m'!uv6 sNkSkj*ٱ,_גKHB'Qa?x=rNCCBd5+ sL}ۮ7n3eB8Ż h9KjH{.m&W[!6wS}nFz3>RNF +-CÜW4"Cc`>GM .8R֊4K/gp[Z#n3&){zo4;HQ.cA]Cq^ daĴ|K +endstream endobj 6630 0 obj<> endobj 6631 0 obj<> endobj 6632 0 obj<> endobj 6633 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6634 0 obj<>stream +uUe'F %or +E_s}Me?8 ;xdh&**2kΕH2 J)!A0ڽH-V:. "*]pZO_)S`fWEq0F}²26 ٹug_(qUdFe!jYhYT:Byg+0ZCbp[; +[4 )or??bB tB#8ް0DL!TB*)Ya*#}u=&97cpZo 4y("X)Ms~W9!yc`~D=H/F} SM#d$~r?7]_؛{p!ا y`WMk^Ek#:T?ȗpS68WeZcL,ge56~uע +)d6'fOhTMR[P|э¤1EOeH:8{Q~o4E&65UKl=-n''Mۂg|.Sz2M|6m̪4d"jU݉&(>껴{YP-3 #V{>GդpXNY8,O]YRY+g@+/SGYh S by0 cߋgqn`K+j\Q3.ьsNS Ǣu ,8ir +endstream endobj 6635 0 obj<> endobj 6636 0 obj<> endobj 6637 0 obj<> endobj 6638 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6639 0 obj<>stream +;nvaTr58XƢ37btZNN$r;;YC_k]G }IYC-YM$ًZ ;cPq΃X&XxUZYqJx68}1-kM*jP5玃"TZ'ydSCi҂u1HmM +6aXz6kH4܃X{ 9g=1epS[/ GoZ)'{),V62 Q_! :dv5WDm1cJN$ DU5<d X,J|0 OR=V%י$$?sPc?[P.jLqeY +^x' 9F+7hX%i}h ,g}*D[kU;x.aflφrcO N"x x1vUo3;z"E+Ok03tVU6͊KO}rnjG]BuNE.ⰲL1xj +uTBZf˹6$&>i;.NlilzGra22MoΛQݫCHf4% {h]ڨM d+$`@%}"sݚY oW ZK<~%C,D5&BkNlmp^[DiG@t7s"r:]NgL#3N=CWg +S}L]qc|,3sDLOSF%B 1d J%KF)ˠD4hm$<#{?ʝ$VGOەMե?8;Z |U%rҤI"3t΁iHB̦߄7&80 #]1;%_Hc8f*K="UbX/чDD2ېUEZ~X"mOڍbNXC?~D:H+s_> endobj 6641 0 obj<> endobj 6642 0 obj<> endobj 6643 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6644 0 obj<>stream +#s%ƵlL;eY +w'fnHVҮ0xK y "H&6OnaSPum`Hُ|r)o5FLbN(cz]* Dv O#CjITS /@ʅ$7 ҠV0^w;M>]A 04 #/%Qľ#IɆ^nq v]d!2; |k&Q5ooWw#ެ!G5Vջ sNt3BI1O9`qk軣g]g rK;dT"~hzI~ǦĖEՍ 3|e5cΧVt6O^II*OA(_Mg<剟%?Tө 9(ʦu}"V]8L +rKjjt1FKөgRJMt]:?= 3ez.}eC3Rf \_n=r- v4Mۂ6"&xq/&\dO/iLȅfߌɄ{%%(~hU?YZ7?6`Xh\A{JL=cט <G^} !mU2EYobY] d=3@nM%c" +J0Ջ,+%2l?fO+9H 7V5k BLy+;5#MJ`.]6h> +ߝ'_\> endobj 6646 0 obj<> endobj 6647 0 obj<> endobj 6648 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6649 0 obj<>stream +2dXM'*i񄿙S +-8)sKiZL+&L %dDOsoVK㪨2 M|&:AK;'( I7!nֹA1JPf8(=ŝ('H|&&x-Ub)AjnOZNj>ɿ\|LI`-oMoy+x_t$2~(aws?]9%Dl4j{D^5 v@imzc|y:%m] 2sHeJ.T1utw9 0^P`BVn K $viQ˺I뤵G Z)G?s,{jVXw"HtKI~q^yBqȷl3'@#zLTX4bֈGIl1qpe(.CZt+*({q/Rhq8>R:4{;=۲QiDaa1e@، Fw=Č%zaN?L$@fI~u +vOӦMnW\W7o#=CHH`#K5@B#nK6mgQG,6Z#iE._IrſMX;lf4]bzA` 廞·Ϫ0N r5RS}I&_" +uO +3^M+gFu7)8I +endstream endobj 6650 0 obj<> endobj 6651 0 obj<> endobj 6652 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6653 0 obj<>stream +C g ."yNҢ!EEL]˗iSc:}L=3e!.nɰ4픗80I Cݍ? +\ڳw n4%tk :F(U8t^:P +ϣYlkC ?/',ι4ㆱ9,cGv~cU6 kokv)hԆɩQz[k{(| 5Ղר~ou(ɕvq7;p:ʬ2Zv-8=?a9. T{l2N!=>UIQP +qm2#|Zq}^"oj36$a;.ϾXd%:7;꽡bעK wZ-PQ;.F0 +%\Yz %<3C9[;umW3&9/ibոr.]  ׁ'=y:Z:FB!ZƹkQrNO&IJCOBd_eZNSkpu7ܢ@=UKn=Oto.'gX4C(T9l'ql&#_;Q}4I2ij_|Btx8{_;n`֣rSE\Jph> endobj 6655 0 obj<> endobj 6656 0 obj<> endobj 6657 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6658 0 obj<>stream +.ڭe}R~rքaIچIſ3:XSC'1ľ'~QeW-r쵞EΪݣC6Kԫo% e4t~ )Z=ſoφha iH++12 QsA!\`l :<[FJ4- 2(1qehֳR kl!>Ƶ}DuBIߩdag58H1:u V oo6[ ᆌNLKa+HLwEՊYf1p5)2ߝ +9U=7=~ ..qsYwvwC?-<<(S 퉷4> endobj 6660 0 obj<> endobj 6661 0 obj<> endobj 6662 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6663 0 obj<>stream +v9X& cU&d}g VxYMejvFL#Ā +g"Zi,rObeY{ɲO97=/'% +"Z栟/AО4- o +$ih8̯o{ !CS +X2ڭvll^oJ>i֝pѼznOG%nj_#3t|stA'A|xش> ,`vip  { #80Wg%ofE?Sbvʶ + ZnzSH >?>Ћ:WA$r3!;HQ8 j +?+G VLR#_v:z4Gkְݟ j岞 9xop5y|A5d b^gk'mpS`AGhK6`ӽz-N5GW緵1AӍhv)Sv/ڈQj.ָnTte}\Vn\b +endstream endobj 6664 0 obj<> endobj 6665 0 obj<> endobj 6666 0 obj<> endobj 6667 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6668 0 obj<>stream +DuGq,ElY%% ,jAN%)(7ƽ ҇`8Bxy&E%wo1p&g3DjJ Aq8!a,KJ+^S{ZF~clҗz8-;Ҙ;o6cnQ{#U\+ +Qa>LiKVԌqϱсl )xCMu&G|ttCΉO- bA55|s'&N@2!h)vtL!ޚaĄݐClZ]bo"sX)īw˗я?p5{rBd1鼂HxŒhp՝-8 >䁷yuj&yg-ǢDS/F +r@DD2x8F]rMA٬a@l<`RFHЋi`=v:N`qE-~ے]yH+ZKeexRڽT ibp̙tyXF'q: .ҟA<֏VLQ3TBk{fsn +r~Pu2u'693h_[SK(nnRio(t[ZiQt0ڠBQ[/Mq$Zw/gyϓ na{AnNfwjYhf!撾 .1B~ n-κL!i H39c#Tة'dҤ,lX3j׉} +՚|aD0Ɉ"ϼ~1VH'`9VH \l4ٿܐ_RIː8J4N߮׫d"f*Rwis F*p#.Rrj}lGIzr͗ lǮ?7&Jxׄl+Y=N=\iIL9I+Fjbm5{i +W)򎇒{SRgS3=ޥmϋ#l,þ3A_U?:3U  PF fyBB"cgT:ʀo. <6}R.X +endstream endobj 6669 0 obj<> endobj 6670 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6671 0 obj<>stream +牽,@pS6tpnVFNHRM>'n> +d-=ߝ:Mnn4?.Yw)KM$˘2J}6,o8RCfLڟDG[fg1Ֆp+qlC6 `4m 'ZRq@7XLS6cYA񢱚;{n+(v<,&`p> endobj 6673 0 obj<> endobj 6674 0 obj<> endobj 6675 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6676 0 obj<>stream +akjn9l +7 ++e(!E<Ž^9em?L[ɶAX +So? xɒK XZʜ|VE?id bb插a+ Ofab'wIgsABP=hvtqes#[ ֍l4qC@"'Ri3o瞄f Sc#Pšaȕ`%WѸ'9Xf-dHs|%f:gZ}^;BA-sC5 +yٹLciRN%K?w].`4E@_hQݚn0L9;5\|8 Y1慶SY:#9cXuHv Z~kxN"GJ[B"J##ϭ +{c9TL%UM_Kͫ9n>#l 9j``s("Y [rHR3MF< @≟#,:-NzBU-VDRAG4s{6.MH[,sW3޿!DD@>YZE[E}=/v=Ϲ:z>p_"3exf:|V(Ŋ<=!#Ȧ_J|ϛ ;@+x"d4-td +a7`҉"G@N+BˁږX޾'vOPYgK + +C~^kJ+hă2U7leI/^XX@ G!s }Ķ ?"--YK;mz2$k~_9odھ'Mrή@)~+a|qQ5ҧ-^%a <?R/0JIm5~+*nD4uDj> endobj 6678 0 obj<> endobj 6679 0 obj<> endobj 6680 0 obj<> endobj 6681 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6682 0 obj<>stream +ʬt;&oXOH) +$cSGB6 t gtcMlƇxN1ᆣ~{ٓOVy2!T5v4XKkT@ֽ_>lÌdd^?U(-T!Gx J'=vb:'2}Bu ԞAX~ۣ[`b[F㐸.a_w9yG|vCCH큑]̈6-c7'"7_@C`{@qP# ԁ6SSt(v0`'?r=a#t %hs_B1 v;TǧW:ƄF@"Q)> + (CNf&ӫ;0p̛̽9j W'|Yؓxf=*w>#>f vBpuc&G3y_+n(]O)h<<ZzBT'rԞBN؟17L(˺@ +2`;.Q4p©_lx;5-HeOxm4kzS`bp=\3n>AcmCL[cE +endstream endobj 6683 0 obj<> endobj 6684 0 obj<> endobj 6685 0 obj<> endobj 6686 0 obj<> endobj 6687 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6688 0 obj<>stream +䪈qnEj>݌tz1: nn *R4Qܗ#m Kv\w0[* +u2‚_[\[k]u=}7B2PtjLHu_zd»jƪYbU"h+g|!B[cLNUuqKEan>irdV7fiq>4qN*\ tR + +/O_W_2i.E[Wʩx j:Y,w3>5]*~&!&{:Nw!?xizeh瘤X{ +s\3m4OlZZᆣ +d o|I{\eJyx,!:_#{u=ۉ.ð>-wXUq70pge fEuM)OY?]dpt v1Maΰ+p{: 7uy^M/ i@˚L<MszXn b"<PW%nd],xm +endstream endobj 6689 0 obj<> endobj 6690 0 obj<> endobj 6691 0 obj<> endobj 6692 0 obj<> endobj 6693 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6694 0 obj<>stream +moSaN9t*t{Qƿ3v??ؔ\*Bx:sTX0{ !%3tN8X>T57*@$w>e'|np"Ayհs8hU]W~V`fD|tEjš! (Œi![?8 l?moOp*ovYL Q8ٟEgۈڛ]`Q_+Q棣Z[ȟ!A˪KJX0AIҳy,>2wtى3n9c%dl^-67,bׅƆa=,B|Z߃ؗ73*>ɌO3qN|qTrhb&,Ky!h +ûYKhӡCceUnϒٙ=\]lsrOdﲲZ=KVc$霨ߒQKE,*̩RXo-49Gl_2}n;u +0L{P3#HW%<d.ϣw-nI"DNR+V% uy/aqE1;c[_׺t@РvƜNKhQl=4z\wmx5KO`kx] Tp^ϴ|Sx?5<~mХy%p;Гp1 #36Γ#Ԁa >kꂶIlO/,!]wrUa\],I1`o?1ZlMo- % o72Qxg|kSh5D8e4IBxs"C y ERt2ߐ"G8&_\.?sʽ 1yLC9 cZ97cKi2PMYӁ@jm=&.khV IQoIp矽ުU#Š&oLHИbCqd J“ŔD۵GBVSל%_W({P =XTgM}menNUo|9ɯIAcGl'N? {)шhxp-d}W9\=y&&޾ę5.sڦ#q|0= a7a;}guBaWS^俞#NL@s3ԧ::*ucF +jcw +endstream endobj 6695 0 obj<> endobj 6696 0 obj<> endobj 6697 0 obj<> endobj 6698 0 obj<> endobj 6699 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6700 0 obj<>stream + +5f0c2 w(X!gjiD}'Ɠ_N2.i:*}1O%uMr?E^ϡęjKQQ5Rf)[ 1lOS|{7>sW:4bnH8IЧ"TƇb)zcxdD#_0#SӶgnw[sܡ`~b bCE&<)WXp<ն#v@g)N.Na'&i"31JWmOuݾ EРGx=`qRh }ҀeMܦN͉AiTaB:$fDs[z;ܗ@jpYgP A(B2E `$H f_3y#eHMۑZآBۀ6!/x=4I/rbgAvܶnOhhfsf(ӥLG7]QW)EʉQg}m>v\D%Iܕ4whN#Ϛ=w/ Sb鰛,LG3>LMQ9L6~6(RerB^DPsk%ȞHd `B#]MΧDO":B{>(x{BZoNEem;1/@XE D@(+ipV8䤷xXϺw=]$A.αxaRI" {-LO0/<;p$adK)o?3nmAiLxyP9QBg/U 2M1f4D= +L-(lZ£'^$LrɩAm3c4{@3C)Zg +endstream endobj 6701 0 obj<> endobj 6702 0 obj<> endobj 6703 0 obj<> endobj 6704 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6705 0 obj<>stream +? $:8#q*5~ Yx TT8#/DK]j<!]Iu(>ݾ+v*nZ2nq[莾"&46-qz9 h~}^`|`~n~$ˠ[0nr#,:?u*̒>΄d6~eeޚ eQ$0ZIv˷Hco丝ܥjb,;~+?XU2pFG<$k}k7ii|jt#;xXOH_5kz(K&[𺫄nlvuuPt^:l^ +NZ7]φxլW+Z-D7`Eby*prU㦮"Uq6AzԪR 9hlTDC^XN;2׾:jvt&J<4fM"m㠒E`Gwle-c> endobj 6707 0 obj<> endobj 6708 0 obj<> endobj 6709 0 obj<> endobj 6710 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6711 0 obj<>stream +S=OX.5u>ł/8 B}7)̫i=*F\}eZ,+fruoNY4gۆ>_-N3c ,PA=9n p, 0E ELvSAo%a<_ȿŎUzO+6om91x6umKr2~SKT OHc] bK}\qX^ܞ!XL0v0 ?`ٰM.("ɰM$΍"7L.c}6/A}7eށ 26O5ч]eHœrC'D!"`_mz]b5ݞӮ'Eߜ<(^~{hrR@2 rG%`zOZdr'~H*ĉUkjY Հ vI\(Pii0R*4<F@ve#hƺ&7y0 ;Dw;ճ`m1P +endstream endobj 6712 0 obj<> endobj 6713 0 obj<> endobj 6714 0 obj<> endobj 6715 0 obj<> endobj 6716 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6717 0 obj<>stream +H(.ߐqƖO){d섙U(>aƖ1^A>(H]SY,<ye@CRJtA.U01U;q*f`$U޾֦"}*` + z䷌)>5!\E +oQ%u_Ў&Ӧ[ɩK⩇ qseG|=ێ;ۂNvBKo+: + kO<B:v2'NiN;Y~K5ދzZ؇SuQ{BTObͷtɾUoeq܏'|?HR5D%gXo/װhGx¸jd谎xS;6@g_[o/H]Mq d%=.Ǖ͸1oK+Q"C#*-Tb&CŎԍ#Y qc9c8FЛɈ69yc?؈].XiFpX'!Ua}s +endstream endobj 6718 0 obj<> endobj 6719 0 obj<> endobj 6720 0 obj<> endobj 6721 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6722 0 obj<>stream +[r!jOjlg1{g_۩ǝ2T 0E˷C^Y$l)[>.N[P5vRysJi(/X&4f8g3wF +ͪGPBTj~4S0aLOv +\p=bI! +`ݱs0B"殥ך٠tzXA^KZ|8auX]HДwdIeoB`d[,V|_KD0%dz(l +:a9@KH(p}#I[,}C +259 +^:⺔홵&m~?c7a2Akjlk IG*O?_-53O 9> ;φ$?t T6_8N;.6+vMî@f$s= IG;A^S$ bs#U@%g؍c՟`u;+H|;7YT` j ?v +v;5ȑLX*JC)JpCMėaݢb:T11,bji~e](h `wןY..ަ +endstream endobj 6723 0 obj<> endobj 6724 0 obj<> endobj 6725 0 obj<> endobj 6726 0 obj<> endobj 6727 0 obj<> endobj 6728 0 obj<> endobj 6729 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6730 0 obj<>stream +W2JK<55|j-߲s2] +A7xM0'Iֳ?a:Z6ic#j>V$6SzFRͺ8z-gÈzMOJt;ln\+ '?V/FCX78pRv]KܽŮ2?qw(IX-H{w5*8U@)}ԊWAbX=I6$ y&\>Ą2p:٧[/xj{,Pr!im2XkĝadщnXNkhK^{ c/:#؞H2>)ԗO;OY(݌4p +TU/I!JC %P*%a^c^CgPowm_LF#wb*a0UkRƶkJt$iS>1)/Qp+ P?4 .@U햛shJEz:dvM7hl~­SgD*rRF,2w-m)1P4;Aar1pdj5a.C'š q) bKҞM]഻!zd0+J 8 mXf# WMy)?|yc<å~m$GnƟGMwLQj#L/ + "v(r >)BXtxJJf"KQ# Ӗө."izf>0Hf%[N)DZ("&)^a"3$ts_֢U㆕[{1܆اs:uL&[S#rrJ@6n<ùCh̔.?E2"yX*.Î +U(}=5^2Xӽ}}\_\a<Qɪ.8pbX>PͲnZOK M4 G. +"AYף֦~ikMc5'a*t)\LZ@I{v7_a4:txЏtWPvZm*C:;Qe]/z,2@sw@ +endstream endobj 6731 0 obj<> endobj 6732 0 obj<> endobj 6733 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6734 0 obj<>stream +O[r>9 rQrTwqh ln{K Jv39eͧɂڥJ阼K8ZxӺ)"o>ВRxzf67 LUjhdP $HC0fmcH)!gC=XD2z`&ʬt|30OߓDj BP{qF;fPB6dӱn()LsZK,5]U&xbaV8xezL7UKfE/Qjflrf<~z#hfZv\X\  +RӧM8j"iz=]=t"<X}f^60kȑ z:%:wnaRW|cRc1$2X+0PYre"&}#cAf]sW؈O<#Rair8b`2Hr&kX t/Y_,g 3ċZBG +"]wQy*j9Xpd4趷VFy4VꨧBF(5 `T@ cWkΣB4JC?.M ʸ5d)9ʄ`n;e5{6Q↽7?~k@Q"Z!G'8& C_(Ukei׏9|B1jFѱٹnMo/uuB x77C\ -ygPJ-F5Y['Y +ڦ0y4팬3C*#I|ʼnx%ؓSnSГ*Da=qe&sɅ^A.Sv,O1=Qg;|۪*y dƫ_[~ +"e$ $'Q1F`#P 0uѤ X +EOοԶmʛ~$(ʼn ~EpX Ne@=M<)k%i@A`ld +endstream endobj 6735 0 obj<> endobj 6736 0 obj<> endobj 6737 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6738 0 obj<>stream +C];$ԑ qѳ/?҄ }Lt{ u!$K}S{/wF|23K?$wO>?M [*NN @xqD*L =eF=~s }ܐB4R{%cYˬTȒyLz[[39&dL ZX1ykP wJ8HBx&r YtwvTQHg۲jeNr=bpey`GU]2ꢪSkG.dBӣ:oS븨h/6}#XFJoi\@?.k67q u.Z_U先)ӐY됪0Ւ߻dgۈm۽lYUu>h)d7=6AbAٔ|lDbPqTDC CvSiIFaAd,[q+!ޒ!PDkCjL<1OhJQuJh0\GϩS< 0V0.IIwwW& +mW}!*v px+(x.ZYqPfG=]PF"T1Q\ +7> 6⏁S›w[AM_/Kƃld!'d\A6&F2 +=8hj~L/0ױY| +endstream endobj 6739 0 obj<> endobj 6740 0 obj<> endobj 6741 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6742 0 obj<>stream +3"%{yڋqoK\;vMj<8- d 7%)#顧\IPF<|̢{x݆Qo9 Xʛ$]Ao]_rhp*,Y:X5M@rdj:3іOFrױ`1*G7Z5.$8.%!UStl !mjW"G %Oc +5D0ߩB'02q}Fץ+}Ѕ + #[HtRYrڔ +Yge`oH 7s~88̨ +p`>0N@P=I: 9P\ptK5h=c7Kt +iP.l6 +y}pYU$̟7_hDb?n90Q#MCGhǃ&( !DvBQAhFˑ;z*x:Hjjy+SF5Ԫ+{Gr\{눝62GP-.0=§zH`E(6"n_e:z 36}v!A3Գg2tݯ}nRLAe"#+T3ZjV蜇ous^񛯜sn~J jfLdrb(Ɔ0 RA2C+_AO` A< A+7DWSv$si2@߆:N Zm +yeke|\$U~"M-T頏 4 2Η ^ Q'=/]|  +endstream endobj 6743 0 obj<> endobj 6744 0 obj<> endobj 6745 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6746 0 obj<>stream +b|Yn.i 3Gj Ē3&F\.VVp*{i|ѐя{mk3+>|I&4<><ǾP\n_ඉcJ?ԢMf^|z9., +*\DaOaݧ:8~*-WQGX. uN "pHMx˵䧶ᆦjs/^Gd]Vc=%aB5eĹs=+1A:R4N@W]#-07۵4pN > endobj 6748 0 obj<> endobj 6749 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6750 0 obj<>stream +jlrh-w?ר1:BZ9л>*wWlh^WP|>6;-/&\xjn&OQ#"mD#3ՀMOKml 9,h+1|ioKNGxqE)lD1b#@"<aAP'߄lqfJHlC}#548)S#Vn;wh[4 $Ց.Z(mg Uu>?){&NNh8>?gBD>L/{:6NErD"f<o]KOB2:d]꓾Imw{20]vmm'jVb`u& /fXR\16g}8f'[8Wt¢.S"Q d_d;*`(^d` `=0L׷U,-;%*j=QCMRbt~m :F06NdㆀeBrv+w +?AG'W +dwA^lۗP~nLZc>N|HXX$ڽp,wJA==Sw5وmk3}QBȔb"|edoNukk p j>%))+ovl囻|q̏(LmM4s6,k?6t SD< Z{0~F{Zwq\<-+i>Y7иéw'Ok-'ɀpXEp8(LyN_&U'/;@Lw\rTh!\y*8@V5i +endstream endobj 6751 0 obj<> endobj 6752 0 obj<> endobj 6753 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6754 0 obj<>stream +/d7BKH,N-Wy(*#d2 Hpi_w H +c3shܚb]03sh͑*&hqS+艔^Wyade):uϺKy/ + '-ZiW\1v1o<֫/K7yA6@C~ɧLTy3tz.N杂;3N#] .V{l +{mZɖ*əJ_W. wL 5,gK ׾b$ MǮ͔9ky5D^V> endobj 6756 0 obj<> endobj 6757 0 obj<> endobj 6758 0 obj<> endobj 6759 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6760 0 obj<>stream +ф~n]sQeɈҮ0^J$0KbNpqBhK)g$_A52l%qfyqZ C1}T7r&(gf%Z"[e:7< 3m"U)It;s27$s?+\MBiT}bN_l>Ko3hA2%pDUϏYj0j'ӟsD*@p;;1SzF? -zL:xkLcҵLgq44BEǩl@Q#͊_H\ɜuU,Gl0k.k VDASt@uLŕf頩PN,"z7dR$kL!8%J.OʶUBH+>&Ӽ7hR(C|*:_y|vk!B]Ai%*yTv l2K]{/9VmOrQFgqȉvQ 6-~-ʫ?{N#6z/fb~ŘxT",RQHpawB|Ý70tgUV[-KgQg΅±*V-[kܰm!w8Xr{@Bp#d+]Hne=>žm:rN~S+3{HAkDxUo_7zncm$yʦ`Ғ_c܊@=PKDpPPp)®|S?;Wڐ#7leuBo@b^BTcPv<(u[bʡb!aى !"2ʹ+tjBt{@rwOC trSw|ڞ'T +BZ^ћ\ܿ׌60ނ~-:T"*F,F?KrWܝ~ƼX;9|_tT=z d`*v+A$ +y->r[xce6=}-^;.A +J!UtOV4#OƨNY]x_ $D-K +endstream endobj 6761 0 obj<> endobj 6762 0 obj<> endobj 6763 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6764 0 obj<>stream +ojҺ 8V'o/] _"@`4I&P[W?1UkKس5K1V +D=Iҍ]93g5(+:FY[f%6dwq$Υe#^@Xhڀ`N~CM@PAFpm yz )*&*Kt^>Ot Vה)!xv}mEH"I*cpß ǿtD;!(Ag;·5dߎBJѷb]6̅[ +A +Y ͅoe?Ҵ<o/.A[OqRRu},f܍~#w|`RL%P!lsuw '.ftbhYO^{m~ܨQ6֚F*McXas5(dK*3er)d8qL.d \ۯH28$[[XY8%-ՁCNj/-|[]] D,h$)*,p\'w-6X +S$'V#.ZR.I\, +endstream endobj 6765 0 obj<> endobj 6766 0 obj<> endobj 6767 0 obj<> endobj 6768 0 obj<> endobj 6769 0 obj<> endobj 6770 0 obj<> endobj 6771 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6772 0 obj<>stream +^gzr]vfʹT9oFosԖk=fǷ%!)dX \Uc126!UScabe9NWfAʔ6BИ@X~aږ &։qh&` /q1/9W`_B8.nU~_ȭJ/S$f[0`UU?e0\bBߡN=b?s2|;Olg7Qat9 !'H d{;O']Ǝ:_<ƺ)wu'z*DBEyF~0WxB!^L(5k,e cqDG5sͽFyOu`)7ʔ!X/Sxo_w()1X3s۫$q1if >.܆QlJsUm;5'\8Q2q (ZB j]#D +nٹxD )JBnLz&Vz2kѽ.MABpveIKD`k[Vu$$xg|<3W9۩fZݨ&, + Ѱ|keDm_?júWܴȻi0{kHSUYc3#km@1%4B/ +endstream endobj 6773 0 obj<> endobj 6774 0 obj<> endobj 6775 0 obj<> endobj 6776 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6777 0 obj<>stream +Ex;1ZWsnliAUmrt y^DŽd.mFViꩻӴEBqcWƅ֬շ;oiP rz=Jpnx5SF'@o"jX/շb*">!̗2Rb-eAX` ] O^%k9wId):5jSP@,%>Eq硹*OYU8';{Ҍ5z nS'FݿV +UL$K~LʢJHl.*R|23xD[,8 ܮ=]<;Fn5;t<`}RC0G,pO@>`~ #>LzEƨTI(ch.CJAoy{[JԆK`ڷx vmg .Ø1Q2'e1X RO% nۆ|_ jupTGNGT={mPq/{ϹZJ<HBnWfD)(͓b}BIwb:񤞯K;2 EN:CgOw">V}SFVmxCƙp#H`9jWяuH]=CШekŻ Sm۱f ɞro Jal~i ףZ"Dy^q> +oChA+/ +T6E6!ke@ +cy$̖3PYkeGW۬-ۛ %{aLyuǒ0,Tgf-UR `_o}g;wZ$fwG -> endobj 6779 0 obj<> endobj 6780 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6781 0 obj<>stream +KKL;^?q#3ȸQb@ Dkhfy׆-MR04TZK\J> +a~ٙIJ /Dd2r=qѕ5fn%b34]GݖՓ6" 0J(_|u/ކxqY+EmH#?jV-㶼L4zszŔ +`.ݮ}{G^匪%fr'D8g+zYדΖ u(jIo,Z׀ QGA.}dd}-h?xXF9@F򨯀 om`Ժ;P߈P9iKxICD0Kj:f#&c0Ǚ '|`WaLk|.^?~̞k̓WO 'x̣\mH'xFwotD鉹>:V IE ̳, RAL\ +glDJ䲈1e 0[5;>}{/hڑ@V[]5V;hǐE٘ύHH`YJ]O(2`/U>ڙVϬu +@3KgsX]!mA @uF>pF!u(-nM1cuwxeq347ƯyQ=mߏ,FLY}"=I 2ٙư`הImn@CjLD2! +@WaS +CW%"i Sd⚜b0j( HD< +endstream endobj 6782 0 obj<> endobj 6783 0 obj<> endobj 6784 0 obj<> endobj 6785 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6786 0 obj<>stream +Fa!Q}j]GN7/w ;}Bԋhpz9Ģᨾs Z5p8 I \(Yˬi>j3="PNSD  0Ai!&̳4{d{'5t[?G$Uw&V5WVy +cpcB6Mxh'*l- KAhTp}QST.-<)zĘirJJ5^ +_ce(\ =[T B!^Du cs*i%<C=H$I +_s[W*8a[%aa@通DhP&)G=fڔ B9U1#F Q!۰G*:g$g/Mu7;DSt-;F_nd/a| +endstream endobj 6787 0 obj<> endobj 6788 0 obj<> endobj 6789 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6790 0 obj<>stream +D >XP-å/D|e؞+"NۦtJc:73A.JI~Ri%BT;`AAXjַG`A9 WO6|]_:[&_),ล2ྈ(m$~~B$ZjQz=oAZ/ֶ+*`Y t>>1[_&58K/hn*KL45ﯿo aps$^,VtK|Mx1  '^ pTe%>]=;>r' u\c 碈_Q(q}#V!=ɶjT IחCLj{:<*_m> +zbdKz2/> endobj 6792 0 obj<> endobj 6793 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6794 0 obj<>stream +8%ZieeQj}SMY˕O3ܒ30|3VY3(`r=uJ˜]%>F2Tڂ?JI*=|X ?Eπَ10L8Cޒ. љ{ߴm`̆OFmf է5o8CN +dUBDEB0H_"xD \F@z䬊t>hy޹*M^B_BoZ&>WY*h?# +q@6…—=4UyB{YNYEq t({کag|m(dG?x!x|6 +2!w^`N#}JyifaEzKX+g "{lŲK75czE?Dtf.kq0 .RVeomjW1/kSzЅkQyaD Uܰhq}?v- ?YE盅;#|aQqk0ۚ0$<7A0e@M5k|M3!{iev'(iOJlY:XҬT{3Z轮 q$*+8vCZLjTy>t"udB]{]foi7t"6`Lq} aL`HBdNdV9[S.;oi5F/mQTp!t>N. +endstream endobj 6795 0 obj<> endobj 6796 0 obj<> endobj 6797 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6798 0 obj<>stream +cB`Ïews@|'QB[Mr!2TB.s$7]W!kT5ShPBd 貣a[ʻސbsYpay"eowE8h.&&"3>땋3SRlT4j4`B'f4WX:[b4?te!MsUs:z᧬p.srgr{(g +*\=49k|H?7wUCaed%ncNqNP<H!/Q_"Xbn +ܔy;ݥeR[_}փ(~2e4!Ju"e^pԣ1KV%;k\ 3}鼆@cNS f]%j1!0 T|Vp^#kN"Űv. jdIouQqmTN_nKg ))eGr *k~ 'n':[sKoCsu5M|I7b + FGNqA._BGg*h k  zgc*o*W$9R뼉t_CZ .4͜Tf돊WT3<-'@>Eh?C]s:|S\i`ݶr lf8S666 -S<{cSz +endstream endobj 6799 0 obj<> endobj 6800 0 obj<> endobj 6801 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6802 0 obj<>stream +kfb (If_maa:}_|,wsÇ `}x Q&7?TQ'~Ю2D([Kb-aI5,j9kǜP;dcGwKy)xs֨2?1}96#=^_8y/"dgmhW61exr2AU%WdJh!8<SBs鿸6PTB)S{>?#t`&%2RIHT)rveV`8Тrਸ਼Jw:e;mA۾)wPNj,(QxJ%׬ȉII@{}&ѥ,Ocmza/.2uXM^ԱXjbSR@#e ُ;{U>&KAiԛt(W>:+^]%6{ϒR-)ٜAŻYi3sݏ{{ > endobj 6804 0 obj<> endobj 6805 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6806 0 obj<>stream +m`(F}H*Nι={nBr,ZTa; (8! .H;RM#"5v^ |^񳣇Y_-wHY;W}N]%E=_ءR:她Du$<ٯl$ꭣRϊ 'tgY[ Cg[]iu?MTCBTw0؉'BEH"p{L<Md/Ԛ(;0wu¤]@. 7'WE^/Z|S'2X_8u0~@צHe/l%A Ħ*@;βNa43'OGt+/- ulwhLHC"i. :l߳vkɧ'h@}Coo,̤e/2V1:?#uC-ȃ]upHE4^l}ôWf n1?@8ݖDUS=?e XH$B%K&:-9z[l V~뎈;%5knwFiV_TP5X0j9 !~#σMbw :˖(Q8Ju44u4^V)hh`&nG{sϾHc({;७'d Fk蛂yfK5)ɱmxkYVG'Ӥ]+U'bK;1꤀봆G{;dH-+RR1-L|:av+-b#A hm,~%LVMvsV1v/i;1)Y +endstream endobj 6807 0 obj<> endobj 6808 0 obj<> endobj 6809 0 obj<> endobj 6810 0 obj<> endobj 6811 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6812 0 obj<>stream +螉~ 1BC^)#‹ ‰Vc;0,N7о#1<-ʆ3,AYڷa~¥ku٢ZBcsd~Y{X|_h#Aly\iXӥH3Ek%A`Ahph8WhrO0qYڗvװ&&i.H4Z$Cs~-IA} ߒP0{{[@хN\" Fzr(@#$1ԁ[)lJʏRw%%X] FٷIKG\WB o!~/lD2R{m3! ם$ɓbf#񁸛XȞw3 cP + Tc  j'07`އS/ y[@휶‹G  :AgCF׹uo'e,OCF%fo?YH}R +endstream endobj 6813 0 obj<> endobj 6814 0 obj<> endobj 6815 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6816 0 obj<>stream +`Y؜˗3?kOp->BU*3x(&+R~~0<-#*ìw5-j;uU2a ( =H[%gڗ2n\չQ KU(w_\`Lq' ʦ>yx4ř.;Fx*!ْ_HwxFxu{/hNY7(?e=0f15Y Myh"ˑ&^ZS= ʦ_JכvT j voCĝolkEЄ@W`ӠimHv*l~`*#H96mcy ,FY +d(2LapFʔ6SLbG9}׳2C-F"S<#߳$_]^o?F;7nT[u9/ Lm&WA>s ǔQFy{dt2ݝUAgܡ%4S0xbhI?OV,&%l/d:}lg#Mן\U73 JJڄX5c *=껷DDBNi]"1AO"Yu0{m7y$=6QzADZ ~/gԡ`[=qir= +Ȼ[*>v:,Z/$cߛEt۠=^/ș.{xg_b"E4:65_{j/aGxSu2esB (1}> endobj 6818 0 obj<> endobj 6819 0 obj<> endobj 6820 0 obj<> endobj 6821 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6822 0 obj<>stream +8cQ:`ai!YDki4 +ѩ'e[ WZ X%Q~צ- i Rܡ7hҝ +:R?crk{\[@F$po˃suEV':kc`#XBJBfW~)-gy2ix8i-hN/P'W01 uL= + `q$| I4Ko41XT3ky؄۝i ~8e`F\͌1eŸ \̵}d' lHgce$ߪq;6|$;uM}mpv|]AͫN 벞B6(ٲݔ31)eEIZ¡5g0IJaJP-C݌j+sA/U-¤:9 zHfB~]4Do̧jQ@3A#s |vP 1n~k|6r6/0{VݘrJ;-:8B(5RCrgİ Rw}[{BfƷh9iK@'T) C.9JSn6;)DirmZxHyor@W^md`؁7azcܘhl96X]JGVB&j5>w͇诇9iuM*0RYA-\Ev3،@OLzo&G85`iT@eGC5sF߄MjĆ5SOKJʽhq?A\dcQ c{$T~r=2iuf#E86Dsp|ѽjem`1Eo:R/ro +34[F{,>N1|I^"j`mԨ?"$sM F+:άD3/m + V[ ZN#&ڇ3vU E/ ^f>f'~czm]; ']@5h,e@ +endstream endobj 6823 0 obj<> endobj 6824 0 obj<> endobj 6825 0 obj<> endobj 6826 0 obj<> endobj 6827 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6828 0 obj<>stream +tgDMf=|sy9h޷eI')Eԅi!'M2ԽO1FBu7L}L?=^}E*"E3!U/uU`ˤމo +\_ Qu + |;(mݲ,S+n@kuS{7seA%">"ZP:xKp:^J~S"OךuH4^@:ufɘK,۫sZ]QlUC)P]+j*ݜ yJlOoW zn _$j:9 9 J:a2œA[e +8WNj*5Q;DjR{gdߕSԗ +0+@X]D'~ [mǪ@yCnvS3y$Ӽ駢.:W c h|(( Sž94ױ~&t:lvud:hԗK:tš =CK:E{v +[> Ǥwӯ U{ B[SQ&ixȫ8?PXv?G>M8tp=fRĩU-P FFkQq+uUVD48C߾/SmĨyQ?:lIIZ]Rچ>(Jw< E =%|o.Ag[Ud +8c0btp0'.K!g$3!vuZSdU§ .~>~(D?XP^u'ru٭Y n|S/p;Bt2?PZ!M <.$H%o/9"964sl=*nrՍU +endstream endobj 6829 0 obj<> endobj 6830 0 obj<> endobj 6831 0 obj<> endobj 6832 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6833 0 obj<>stream +U\hudp(XL7 p!Sh`)1~1_E &V( o(D̨gnef׏5ÐVg>oH?{n0L9>09KuPq5)\ ;u\w(IG%UQG&|9N3zN&́tr}t ;Jq]QAXؕŒ5d&חkù͗)SU3i~ +%ϗ[Y!q{cimA6yKHT ӗl% iU,:6z)f<GڕjMX1 2cz +/J1Tn0qϙRxfE +g2i>_RFySs5㪮<&Hi;)BK#ɏaTpQٺޭb~P=! dPqBCL9*9. +{cYX| +d#ʈ6@Dj.5R'\:`AܔBye'_I1WR{짇PW$Ş˺;_AT7'9;;-[Ƈ+,kd|%/n2~y2*}3R[-`O5uR셺F$كELQ\/頻c1T +;'VDt_ěa"/yՋkoa46BE\੦NNjl opgy>àż +endstream endobj 6834 0 obj<> endobj 6835 0 obj<> endobj 6836 0 obj<> endobj 6837 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6838 0 obj<>stream +VMB@O_UCeT0R*KGꓝ"E*:: LUᤶK'-/4.v{|[!NEk}Hrg22co <5xMDsUǽ S≽1np"Xvp [ uvBrMC,ՆZ0Qe=Zzl%4yDH[8 Rj(OVwE3[K:~Q1ѤMYHT J> I0dh&E.hg\|C; (,ȋXV%fئ"*ue}mWޞ 6){&~_ +ؽS/X}!uv_BJGΚD7o1}IPv1 'A 3 ipXڜDE|ZQg.93rT VLFwBIm ;b@\͊0Or̹U]%;,:< G=n$M TN~A˗_ 2}d"%Ű G·Fz2cZկ!_8u!,l*#.yvh%hU#KޟܜnskcT9[yeP@]xLp[% Y>#ѱ {xr*'V()> endobj 6840 0 obj<> endobj 6841 0 obj<> endobj 6842 0 obj<> endobj 6843 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6844 0 obj<>stream +E=.6 +}V P5Y5Ƞu>%<[`o00E =w8*!VV+), H ٣ e[Ǧ^jn~MkL|"[+O0Ee"M7cYY:NlYKšI|6x{ڈ -AǮ嫸8ѴuutNTȧOo ~sVCY/ak]:JIQXbρÓܧp7#Gf/dA3qh٘|>FêPlXBq9~nkNtd=D >g34~]V-O$Z?ŀ1L+5 +:G@$vcn`&2z9k0aٞ7u/ZppAy)*~C;h,Ӎ^bYҺ*ccLY#V#m3`}Q#I, +͂id@PT4u=My͆ "!y{k^0LDq3 5 L4 O7u@l Cs)Rbٺ7bnъ L!8 5 ?O-v1_~P8kX*<Āt "<aLo+ Yq'ι3X |JG<= +>ז+}NE"RS۽ţΧ:xᅄ4%G(_` /2;6ՁFy ozC# +endstream endobj 6845 0 obj<> endobj 6846 0 obj<> endobj 6847 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6848 0 obj<>stream +h mY}wZ}zG@ Z N4fIi>LuXjx=B.QKK^Yd ud{ρTG5C9̷ƾpSt5>Q.)NHvq:!gOәr._nD9ӥ%pvI/*uN +F]bgxvvi1o@ B;V 9=ּ #oȉcėbEV="OnIJK:+%wc8suKN)Z0͛ VVx&0#y\s*sFύ/ o(h[ `yѲ?DԔr!<H)a f)`w50 fzE]3Ѡ +gc\ojY o@x(K$t|U=mNv{Ԏ-*!i~[2 (Q"?|ԒdQ][&.b%>N 'H` &v^s" #7֒o6/9 Lz*RV:YF'"Q8gww^bgv!!P牶[ J˃N Pޖ3xIwۂxΈ"}@HKecbZGբ]yxqމM q8Iopg שi Gd4$No0VG*pYh.2f<"y8ERS|}&k=iV%zgCrXQB9ZM=]Y~![ȀbsrlWw)c˘vBL,ͽs)<3w߰1lcbl +endstream endobj 6849 0 obj<> endobj 6850 0 obj<> endobj 6851 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6852 0 obj<>stream +XLJn !*)=Np6|ȮI ^K2?х&RKxJlWK +%J4919B(n&Q#G:js4τs4vX_3Fn wߕit@eikB'֤\9";iWfeЙƀ֚c!blPiaP/&@j5Njdĺ<1|Q}!ִy0 ko)3rw<+sm_wekDDR6/6UkMܳg@|8okNL 5_*4-&gQ(-h$Sj Hut₄Z#g*FfEo As>d 4\P֛)7BFYmq +}@]k[u!W@dyTx*M 3` ylu4X6ѾDoȸ׳pf$5ZFv8;6 MC>{F_[>u<#OKY)Bu4yMY:ἣcH'[#Ab \":a%oQy# =- +@3yI480ԝlwK!2H?4vT Kdֲm;~өA99߿}q#9z>kE̿_I:~b6֍+6!ؽFnOߪ> +#&[JjEqIS`NKI="*@y._ +~ T# pVaesoj+%m9X{QI{{x)l=M|d SeIM3ό;q*M,n(;[XۧO@2teM}u^I`s՚GTj"9"vf_V +endstream endobj 6853 0 obj<> endobj 6854 0 obj<> endobj 6855 0 obj<> endobj 6856 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6857 0 obj<>stream +|ıhM97dy~ eGȟNYm~1s\eq{B ɣx DW8zj%D~m3B'qvSAYk3-&:Oy|bg) +nG#zE58-Tf6,* #QEY( Eojܓa[ {f$:J¤4p-(p٣E"|T+GLGl5 8xÎ(rriP@|aO~6K,4YS<@ |aRqtC7,*2LT0D0X'}n]'2ȚϙZ e^L44ݽRÚ fT6*L~c1E *\קrEfd𥉉I4v-bymA1eg (W2QV@k:F<0O udx" :-ZITUW9]"7"6İVMK*ıT釥~|/lkqd`_d MȮNs=|U =.ڲc0k6HRf' +!^ߎ^#I9G̋0q?.K%[D؉[qVDE[Q"0'^u DO ,>9e?]]Rj6\}JD`4 dÜo` +OXh%_く>խ +<.Z_ƕ`;i =ޯF۳E(&Ȑ!7~Hḿ[wWc@tzI'EzX^'@Ŧ ڍJ,'Xl(=z}%l'c<|wzdqdCvN  z*Ið.vj?Ey> endobj 6859 0 obj<> endobj 6860 0 obj<> endobj 6861 0 obj<> endobj 6862 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6863 0 obj<>stream +י@_⬀ &_B:dܔ%h&$AI[g9mfWeȧ P):XK ǒ$K@d*$Kvɻ .~SWwՄI&\I %rX>?ބ삤"}Ҩk?SC=b<4@KC\d0'ub@Jk/a+|~6̧ # 3S_f5qlմj fS|x~~b^`f:VS24˵?m'zj=5M@?=s`yFǑgFl^~fQꦼƜc^֨MI/+tGb0E3BqN-YL ڄO[:\BvK͖@FS׮Njz "_Lp{U_\9&#uu]K8|6\6 @gF%1Easq^:f,@I Ե:勱-ifDZ.o@-rA20GP5g&wao=0>!݀@~^{˝uZ4hVEVxzZLru F]dI?b ~Ҿ_LL + +_BUs.Ld\R! +endstream endobj 6864 0 obj<> endobj 6865 0 obj<> endobj 6866 0 obj<> endobj 6867 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6868 0 obj<>stream +ņAJH#'ĉgN=Px5qb4do-,.b)y3MG:qRtk4W#|v2e,5~$? IhѿhV;l*M(19KoCAS=VЕXs-nYbIUmLX#S' L@pȋCjMa/%d6 nT +QX8 1/fo2"C2ט_Fi 9F^3Cx)?4Ƶ8AN?A H]}k߶0EaXȖ!䀏ᣀ:Јqʡ;c$%2,nμs܎*| RƞILș_+qW[𫽒#Q|3Pnɰxx#wt?1M ў$UoZ5b6Ms2AEQ"XS&lk@eq苿L@ꗺ*.7熦>*1o%l@:}:*4m% Xezփbkd\b;l *DR7 3dǢ`~ IY{zʵ羻r. j}a9ּ'&X;\%_%|*bB1|Lp:e 宣#2~GMM_E.Ɩ0| nFaRZP*SI +zLmFf9N? h@JHJOB޷FvKi.CCpޚ2]MW#**<Ы!)jN TnP!;TKҬIR3%lK L +L&;ߌ;p%䓄e]OoKZntS޲-Z%Z&6)ZxKc˻lOCBLxT)+v0CZ<9$Xhn1xWmBss:K8bZA4qGuI4d;Yŝpƶrs3dzٹP=; +]t4|ML76i%V °|Y%w0AB}dfTYzi`ml2p+F:5 +ncKDvbLnk'"zi-t_]RN02hh+'@,3MÔKĞD| +endstream endobj 6869 0 obj<> endobj 6870 0 obj<> endobj 6871 0 obj<> endobj 6872 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6873 0 obj<>stream + 8>:m77:&ot? qw(,x"3^8)ܗ)rw{E3=x mev3a >aiں0 %;=nڒ!1$CeQ| Ϣ41Hnqu0-(^} o*`Z]\]`@@J\X  +Y(ߜHv}b˚19e!CD*gc2xMH@S<1ROYs!#ûkuW(i;Uo w K1F-c÷M-yHi+e,2h򽘤K+eV`Va5jķ=J$6a]i HZ+oᘹT˂dEEGr&y7@jpmI% >Ujq`GL߽X|5RZXrҞɧA i__ncYr5T쟪=fʂƯkֱ+d% +jܛsg +*#__vB1?NT괡%fšIp+rd٠k|.0oXܓ1+{oHĖnv0ںW88}(ةFSvtn-vRm(5-fӴU+e~ŒA ܰbh] a`߃B"QIٞ!e7]Rf)H*|PWhyZ,OR1ZOJ7+s~Ɨ(:B#u@Z>%Fwk4}rk5;#\I˅k!bҹ֠1~|> [,57Q,Jt*? D6F}sq* PB"n8Ux纺קsV97KzeWLl٧lQ٥YE4q9*:J*R@~q_NM8U +endstream endobj 6874 0 obj<> endobj 6875 0 obj<> endobj 6876 0 obj<> endobj 6877 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6878 0 obj<>stream +zQ'{;e؈S1z_}rU23%1v}N:IH`/c7Wh`m_IzxHQVRJ x=g1+HFfٸtⷈ$勈Zs -78W#Y\iyTkdNOGf~Rltm1C)†..X6v6+m:4saVrIq1klgrJ|7|Z! +&A(Kpr&K8! ɯ,5 Ld9eVCE!IJٶ2T((t.9Ax?/Aƾ+ =j۲=jx5i)L@>e4۳(D ݌#8URuEHLK@qivX#R46Y={?6lel j]#`$#jj1ʋ_ˋ =8WG3HNj!SU8o T.K?[ׁw3ŗkЕֲɪyTj=Hh@?ӿ^  ,/ H +`}pr@%W*qG,+C<.blyB5VXCh%Vv{ĭD2.; P5H`-Gxh8Tjk}i(凂åxƊ x!gZI|B;|V+N$WҞD$u L/X3q{O^o>"2jj;eɖnӌpܰ"m-0_ɪGLseOӵY[0da~OM#P)CdӺm ᾬL?~2mG. 6l%68tXIOHE ūR$vXlv8/]쬪ϡjH`_[ jgy +endstream endobj 6879 0 obj<> endobj 6880 0 obj<> endobj 6881 0 obj<> endobj 6882 0 obj<> endobj 6883 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6884 0 obj<>stream +&@Pc(Cq]`4A);(p! Θ'{xPdf + &\(/XBդgj0cSQ<[^R;/Xv[3#lKJ9E9+:]H,Jv8*@)89~z`1M>:j.A?z$}4~+3|XU@23`8[_$_ivYb +I9@oo,l 4@6+{%XyhZ~ wOج pPT+G#F\V㰐TK\^UpfdS2} 7&WN--Z7lRRQ5%ާW9v'߆'ai"goޖ({N +!`o%h&n^j*7i5;lw@$~v00@W(?T$ҷ~ǼCc=.i*etJz DtԜhzʁĵI_#^]xtPUjnfE`f¯w'FtWr$?*0`I^;x`Q.1@Qv,XrP(:7U?ɕd\!K3;dcD­\|$AjHMZ$Q-R]go(6hz)F_iH)!&0DIݝcql`^P[e}s=Ѩ%x`J[PuW$5v=XIYŷ'GTV&79$I`@$P|RՊUc5ptY79SPbR` pjZͶ+; Q>Hl"ұwvK$$(QN VdbB5ľŤu&4afޭp<`m6ۋt!h4,ȍWjiDk[cjЎ0-XƩJέtv'b+?*rES{Fj@?Wɼ먞8RZCl<1@Du Ҍ-?K ,+IiF,o]q81E.xym9?L&s)JNH̠p>\Y^>x8ƪw/{؄uDiQQMOwtX7P!V~N$cqt`St[`Nr Ex:w-ߩ&/kU3*P{c3], G1FӋiy#l7W:~8CCr0yP_N40d]GXw=?-cK'љKpɤ٘HP1 U [M8va>>!QrO[8I+Mŭ#og[!p>?lTGJSN|K*/3 +NurSA"? + @Fl@/hڦ@/gsnc4I aԝzĢvv.Z,J@5 +um*][*% [=>'$B2tH׍e9{K B +Ql>O"t\ ,~8'ejF"J8 GrjGd~#6Usc ?]{ncB/&^ۀkNsD3.q juTvZRSI)|)Ep$)x- +endstream endobj 6885 0 obj<> endobj 6886 0 obj<> endobj 6887 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6888 0 obj<>stream +߀"_viK3+^$^ vP$dJh9`[V7 'kE@?dr{R2֏^(Q)PXx͙l30 fzhKAh1& .6%S]8ƙ)UѳZOq )KHl5jVkJm8E9D1"jlE "z&n2nz +Ce^}~3~MzЇ笡,%>2ʐ Y&N" +l|P[HLCP@3Dkeʇ4$O6WȄR;icMLM*o]e?l-SY $4#n6lܕ0 ZuoK"֠n{9f؜d(ȣM6?]fZʔYN^gc=[Q(YaxeD,eHR֦1BL~w~ݥm[nZMD{„B/mH(5!wՓˮ~DK])c2H] c|~ *@4 +JK}>mȮ,@要b検yǞv!h[/`7N .-+ 7Cj6B_v0.m'ɘ`#!-WA-c|$11q aDk 5#n 7:-_'uP}F(&5ա- Vd#OeCa!F#! nWPBkV; +endstream endobj 6889 0 obj<> endobj 6890 0 obj<> endobj 6891 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6892 0 obj<>stream +W On-00Ŕ<0G;=~-:hevoA=$}& ]ꬩ^לh ;!6U#luOTv6{m3`}BnUR}r 8 .LSm,Y͑x.hGQIY̢LFۧYĽYJYѽ~2JK4QJnAPZ0T!; A9hDkxSwETp|h,/HHDuvOPNUJ_/k&儗! +ǟ7 hni]W`.%H_P m g(>v!V +Yc6a˳78*xrgO%DNn`F;6公P^誩nsκ4lZL%@s$H S-nȬ +!D|⟣ULzZ  'Ȟ)Z1b'(Q фQSD{kUĤ04~!j6X|adHVmuHBQy֢ YR>XJ!jȕU\}di>5/!>q|[#g\yTQU(ym-5lOrNgr!CP8AI`F GVz{G +zG O\FRh[ޯi)['/oLMW"C b~-^P=eE\mLf-}Ř`O2rؓ` +IH9vtJ؄/?1*tqh,cDnЎ2x/< +?H8!m Q;ȁ2ab*SEWHys5Ĉ1;MFoJ^Vcc!X $hlD I{\sLS> endobj 6894 0 obj<> endobj 6895 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6896 0 obj<>stream +@/NeV겅,=ϏGQ>V5*kh&PFYtw}9ʘe?瀣RE9~K# an2RT.% +ַST3I5ƒ1a뷹Y]j_G&ܴy]_PLm`+Hji#=! ֛1{5;P\=7 SBJ杳c7@mZ=bnq[zs9Yat}Nϳ?rO^N@-S*ePyĽ314O+Dz86+Մ ʆv+^/d\x"f˪f1H,M<Nw!._E/ֽCvO:k!l)K]a^TԘgMCUV㧓w[Bn:K8ç YYtk(|6:5{\=.(r /l^JvgPCZ FEάb b^n:ٕXG&,D7nK`3ULpjF y[^!`%1@*p.:Ӭm v`72N&MVd-JrG |Y9hZVG$a(孳׹^itFHؐd 5:!ivNY?pھ] +\ۇ;`JLSmru 9s%纚Uh^cViB@Jr]ױ{.:ŅYGE):>iv9Af^[>%j[*fwOЃɾ> endobj 6898 0 obj<> endobj 6899 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6900 0 obj<>stream +$4B4?3zvb/oi dWkbRp?mf) +}=Z +.ۄ]&D {3Vu=`c Y+R-g8@'BTV"Zq |jz#8G(lM `t%!9C|_Z_>ԯ?VGa6 nhuudXɖw-⥁{~M%TɘU(6N^}f/4*o]K55QI×ŧ촾0dP6"Yɼj=cS.7i7Ԅavl8vu +4*ꦣx]%>Eq,;*FWt‚*R(cY耭XGhfG89)qY2ɤ Y Z;BsZ2BV8 WY uE{)W k)½ۖ5Ij `QFq]gS 4[gEV+R׍?-k*P Xm?lP7ў}tg.C.fRx{ƳPȧd(U>69$S&Y K!O'CKO|U%CFڶ&їߠoSۤNoc.fB47 "kZw ցƴMќ9>osz< -8vo9ZQN (p +F^Q}rGuIfR@T9m +1.ʻ[HQlV Mi:(ր +LTp, f> endobj 6902 0 obj<> endobj 6903 0 obj<> endobj 6904 0 obj<> endobj 6905 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6906 0 obj<>stream +7_ 7jG L5EXPl=Ik2Kzs1%I^d~k$}DBvW.oI)/=yDjSkv޿b>!t՞\ddg ūuQ !-ĺ{F%u| +m Zns^XJ=*,p=,(MMY&r evZz䘨pWj\ڕ]&+T$if<`ݏ=K>rtW-:4 t|هi!PßR +_c^Tؘ} E끄#_A?r,$sq˽H-<:lDloL3Ў(/6'1\JytF*p2SV#* :nDgN߰NTM 0bzĢhb5sҹ|q+)_e֥MHZI&=%wri@ ˹K{*rԵ:YHG^oX#1]~+CTO/qQ^v2K +Lb$Æ[G^@ &X3s<2/yasLkU"'3{MQ?dԴ:se="wKi 9h2'eX҆ρZ=B^*ˀzGG4 ,Xml<`U9[`pwZ + '5E+a'(&7 t{/klo>F Q) TwA):})|.-2+eTC uՈt[Y+yQD~O6 iH7gS]6({> endobj 6908 0 obj<> endobj 6909 0 obj<> endobj 6910 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6911 0 obj<>stream +ЭσG"+uMr:N3iHʹr{yz+/x5k-]_·7A+];—s~nL5Ͳ>33InoZV_?Σ|N/1/f;U' %y^iyʺ6P]7ޓ}pxnMVl"eZwL ~HU<ڮ~u]VN+%08$M!nL1.gB4gm8xU pLs>BOi?1Sm~ ih6nSDY@,n6ު \2,ʙꥲZXIkoDc߰ (;TuRD/LaW2܏EaUͲ~!A(W׫g˒^?:[1(akx.ZoȻi &KP6vk+t SŹ6ܘ[si͂^]=Ć㴶%0JZԢ8Ef\[&(!>5ݲ+ +y%,e%ݿ" s)VʡT.<V5sm$SrIBPfO\">LҬ-S&9R0"ůӮfhV~DR +Bǘ& "ٯ:ꪗ?2kNY=TtݙdmnT;$GD2eLv9yׅaquT53̇N + `paa`_,FZ9_Dbv{bpbCafƨD`-E|dHtZeΌeo"g7V߼w=6c,HtZЭp͓a,GT& +УCiVKuQA束 W+cܤ}OAM6L0X,F睅/Bt_ȳ+Hva>gfu5 }þ6 ^R$]]0") *mPp'zwo2LJ4UNkDl![sJ<'XSl0;~c,zm>y(Aj5!|'螙 G 'x 4G?[{G" +endstream endobj 6912 0 obj<> endobj 6913 0 obj<> endobj 6914 0 obj<> endobj 6915 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6916 0 obj<>stream +¯F `"

;#e,m۔OBL":%lw`({*Oc&-n˂iF*&PwV*/Bc$s4rBO-)8%Iia1STGXA-],*quh&6CF,"Q383LwМs%Wޥb'`WSq2˹! ƿM0D}kO ++aoʣS MA +/r3z8j2N*8Y9*WO(Gh5tz!X$NxCx VquU{ӀELz@A9DC o@/bj$uwfd ceZ =޹yR*OßlQh?25lx5 _XZc? +N W^ g&ِ{l |BfO~ck0>pa]%dA\7\QXRr7s 7 t/D+fg`;_*Q@ B`Us8Ca=/ ~N-:ڪY/}CA׺$+ ż]\*;|{U7-NcsSj Ў^ԙ>Y7bF=HUݓXՖtw=ܐY ^@\j!> +endstream endobj 6917 0 obj<> endobj 6918 0 obj<> endobj 6919 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6920 0 obj<>stream +27"Qt&?C04)+0/MwLz9Q3gHߟ(z_rKxI7Br=NMw= +lr4oo +} 6@3ZTΖ#Lf }`NN2>)ķ_$v;10MFųP +GC% vmwF3}VVR_/c{!`tsaRoNٞcne4=]eF M>{xv1SDT RT{CanlN&3j̕x+w&a^z\Bs vnř$2g2'٤s|JrG$$~!at{EobuÞxTDU@<M Wf]u +fvj@fϜm@ϣ ߤ'[;moDPh7rވW#L~ C{cF:oLܼߏv `/?^+7Aaߨ/)'yY'*h}~ٮ1"g#p$>f:aݔt RΎ'I#F"B2~Ey)6O|v~\L%πx SІ66e2 t jhϙSm92MɩXVLڅb5;x,G!õ[nMQ/m5dSS*ނpX_6!G;l8^|bbj_x/,enڇg^`cB%,a͏,~=0yv\egbTdQ@F 'sl"~<WJ> endobj 6922 0 obj<> endobj 6923 0 obj<> endobj 6924 0 obj<> endobj 6925 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6926 0 obj<>stream +5RF#NnMPE̕56t'4Tqpt1SG|{?nv +/kGAgEDtMOxnuִ +S}xRXt!WSwBkAA3)@5 3@Bq7jxDm7')&lXnHOδ8fI6K(+B@|䦽PƄ% 6dV(l]]F'SLjKQa qV/JcXQ0SUdHN2Go,OP^v~pعoe@YdBZdIOUɝ+'xjir=?t  +ۚ$qZYa2 pȜp)@ D+T +E"@(χRPn E$0T,0j-ЛvʪhDYPrbnh&/3e*q=%|#5Ց[Esܩ4\-7J +3̎5kC3֥֡f#ЋJ PVsQ`Z$ 'RHO5sinPkWmA:F;̒&k*Lhů]B4q @_7IhZ[f]tp`ԍd*W^@OFа}CVɹh`,P9xG3# +c2qd +lZ OB?R"p|Z9ND#/_Eg~& +"ߏbs m*9j3JnHmc=籤g}M6]Tfxqnh~=}Q1ir k +.~1 H>0hu"bt+veӵNjiuu΃{l*Ҷ9UG#|<2Kl֨"b 鍆@3Gbթx3$"%A'N˱T +endstream endobj 6927 0 obj<> endobj 6928 0 obj<> endobj 6929 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6930 0 obj<>stream + +~A.,^Dte:IY6尿P!zh.}.GܛGRjmˁI2=5Eי M^陈9k9W&)- +4.LVT{|RғIn^IBiK)͒ ,Y՞feRʠێwC;@MpoRZ⩋'Χ&}qX(.TvUOJPP֬d2JnCO-(N|x}I?I[9` ;jm$E $1-]o)5yOs[)WF~rc9IN>0| b_xzޫ +Y:< +Jlsa /9 +a rE0(~D>5SutáP]1ԴC>- w-uX_CCZ֪Έ p=*eX,jRK}:d=!LO8*ˊa +endstream endobj 6931 0 obj<> endobj 6932 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6933 0 obj<>stream +Y'Im1­ yj_\՟Nb^a*4/@&(0+D&.6EG]ktPixkJ%6%HWV]UU}=t=Q+> endobj 6935 0 obj<> endobj 6936 0 obj<> endobj 6937 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6938 0 obj<>stream +__}nZ=. B.-A8f-9Ec<]Tr<;R[*fs}F>T-U6p @ o,|8[u"Ydv 3a#0/|7(^'N}FL0Ѥ[.T,11{à3*RjXw,Lsav*j+xڜE^ %{v:kQaxZrǣm8> endobj 6940 0 obj<> endobj 6941 0 obj<> endobj 6942 0 obj<> endobj 6943 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6944 0 obj<>stream +y;rr:/ Jc%PVJ  E]:XC\˵_'<'/7([I+Gwg5d;<~B}10]ުǒ5`g#`鳭t~מI1fv&K ITkT<1l-O ~>\xW5E 7ΏrnHD4ey + +avl +xnOt_n1%Ķ1ϸ9DլcʮsBB3U S'\׏L: O  @_رIq=XHJE*SߌH[l3<uH]s+^#O0徢LwKOB赉 T +@+nxznG'ⷊD7YEU\``,Y/WlOP꾲_Ss'TVfS:^xsPjsv 4Utq@9Of.eŌ281q# hƊ|3O$|%Lu/T{,-yZ*# gxk\%0)'B[t i6a"l3%f:0JT=L1!]5꫆>> endobj 6946 0 obj<> endobj 6947 0 obj<> endobj 6948 0 obj<> endobj 6949 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6950 0 obj<>stream +C+<?WOG4̑( xB̳l1,yn9I FݓZjf*yE:.)Û9*!3>r%F>]~35zz_}XZ,m77] ![%D^/ +ܩ]Ai)/6Մ$iBΫOE*+RE|3%LqBܢ ){-)J6l J6YZ[^n◱.щ:useä9ko: v1CA[ :/$Jj:+cH?4%-v&餭q]-1,V$%m iY|{3 h[)=h64@GX,[Zu\무e?`@+3PAᯖGߵZ{a'_k <ia a1Yٚ Ow(}w$VQ؛njd^0_s.̫⾾!lYg،6.s"]֌S&%<y4Eq{Xå % +j0FȨ X0Lz(Rxq*ZpC~ ]F6|++$Bv|ҩ7;gܰgQ̜cpBδҼVR( 2܀b>h|4 30'zƧi4z\{1Ѽ5KЁO R} 0pMr@hO[Z[R.هp{tEq\K, 8P\r +!7D,1f,;Ӳ!.͛#)NBJ=CXӸU\=N$$#"*APˈ3GEu׊W(gvE + "`s ilF +; => endobj 6952 0 obj<> endobj 6953 0 obj<> endobj 6954 0 obj<> endobj 6955 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6956 0 obj<>stream +^caVs4ҟ _x.I?x2yb!h^ `5t5sFr5"<Ήv8|@EǢܯ:Bid]WstHi(II vYVdyNz72/_G㟱!!N>ÂP2KtrGe\aq _b㘽7}h'tW$Vՙ%u`#AAoDtOrd摀u(]+gysM`-DǬyg5jn6цu0(rF$[$v)Jj-tut+b`R&ʹAq1JGtyxOa,4uBʄU}NZzzXz|ڻ?2d$ 4~ qހKYQ[w3$#y"}$v|{e#fT<' ʮsDr^(Aj˗aDa8@OK"I\`ezwƏ-4v}3@;YȮ\~ +ڍaM* !o,]Ɏgx߰mXVˀGt:'S|CO!h)wJ&p.^\= kCWWMKϺ?Pߍa[DWVD$Rf/ع4  pWj;gġ3e@;wj㹒b[MbГS%dPcCA2Gd&P# mFM\_d͝+"FGLkP.jXشr|Vd9WBL?Ttu|틌S*ɼ; +fX0-Y!< ty8 =Z~097$HJ~o5&K9:̤0O/`{_$RGك$aǘ +endstream endobj 6957 0 obj<> endobj 6958 0 obj<> endobj 6959 0 obj<> endobj 6960 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6961 0 obj<>stream +J +hpU)Pzŷr"1lB>?8rg4I r3SXʒs{g D]ZhK[Ǐ,M"o"CSNDZ|f-}x*O>67C-&1WJ}OE>+p>zr`EI%s;5?9ew^\9Y[We,.k}~o2 S Յax8(Or,R7BNS9f&Zsxmy> endobj 6963 0 obj<> endobj 6964 0 obj<> endobj 6965 0 obj<> endobj 6966 0 obj<> endobj 6967 0 obj<> endobj 6968 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6969 0 obj<>stream +KL!/s1 ҕ{ゐGpXt6н +84?1njӾ{d+' {Ěl)t{2Umh!})BM%{sqVgjwcGԲ|Bgo՝kq뀐<'Y:~FU5XUC=O30݄D5/|Gf RZK;bsxާ9}l'PygJkt4A\~x2W +m6r Hq/ +X5j#LSn`^@JWP ~kɯP"ζ}d5.ii5ŻW`Gɸt<۔8man W[z<ռ!EHM)wɳu/ه~ ÛB^[MB]##"Ec!,b]cMo5cm&]nJD]՞U@g pJa:댓dsQ tuz-4FYtM{lS}LdR +' z'  5C5|y_6l0[ X w9z T +I޽87Ʀ]DiʤKpM^׵& mD% v*+"?עtjimҼګ+R+ cI(f}R^zJ&E^Y7Z0hnsAt`EQXO©Eh@ǬT3 *Gk/Ĝ=k?e62՟QQF|o S:LN쵃2ZoW1tz(t-XGTB}ŊP0Ypհ" $Y&-4zjD= C:v$˄RvO(n'fr!6*./!3{(<`EhTw"CK"7h|Xt4t|U.^ +;%"3qۖ= `79pu&Hʔz gŦ r{,ZCC׃ex)B3nS +endstream endobj 6970 0 obj<> endobj 6971 0 obj<> endobj 6972 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6973 0 obj<>stream +\F}7Ԑm `qWywrpC@3|㛗\4W 4}@q{ҿ6Pl/vK^6Gkxoy18;Jr)TcPJ,Zx(yp@='T::;{iw|94RgfN zЕ1Bi[gV8 cO>򶊮}O?H(X¢9Rś?;`˧FA +R $ʦck۶ u^M/ \0%J!nFsw̄ ZBXp[Tʜ n-#> 3]=HO-6@E!G(ni]L?0_(lMo&G# $e'_?vMF6;FckY< 9$ QeTƷv?dak9BIv/2Io'i]JN'%B 'n˰7g9 ]i sTDB6Dʶ&vB|._'V=diB]=ų̀וnm"P \S[GHKvl= +DftML+0&(]rsTYa2AJST4L` _,0 م /ޝr([or:oѺf2"ۻHxE-82X^TUd_<6%1x*.Q +endstream endobj 6974 0 obj<> endobj 6975 0 obj<> endobj 6976 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6977 0 obj<>stream +撵 e[ 2|$' :h==fg!tWfSnHr{p8j9sVQXj<#^ov՚J&{@;Xc|Logܹ9%~"Bmu *g>Yz8K!;TH.۵HG OFOEI""@K-e:Z7O-G-Gjj]#~oT0Yhf|}s7Hqy\WW(P/dž~K +A*2'P?Dvv0Jիu@)-iزؓHXЪVvyT>'c|bG̀vsX#Q/')NԏP!}07fQ, y:n"UsQN-Cku{ !qAXMQ&]sPׅE5otC4ڑ1̎"?*GP5ov}/íT[+eZ87]ȡ3D)mB|ڴ"10i6abL +c|Q+<@_ &#QިJ>u +endstream endobj 6978 0 obj<> endobj 6979 0 obj<> endobj 6980 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6981 0 obj<>stream +NZTPIRȿ#*8UX *Af! Rİ0Qzscem1ptuM MFUd1/7]_J}ՔWPp 3 +N/\0uM. 4Z%HR|]ko*=DP$n +:SB=u=zc48HņH_XMP +endstream endobj 6982 0 obj<> endobj 6983 0 obj<> endobj 6984 0 obj<> endobj 6985 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6986 0 obj<>stream +eig@kr>%|U8(<9c91+Q#p51ԫ T_ٲ7])\-Kzgl>Ok~KitΘr /M:%8"vQ*W[庩 [S]0 E@iՀ/-\% + f g$57,`2D>6al> ;jA p3괥!QO畓w#K.n|dǓkZD ^َ3|Sr5Jt2]UI@P'R|$k?V]fԜ +H_syf8#.E#F?ҀM`^- 2KO+rEh DűXn1A*FzF |LV12;*֋z[ Erd69'6[GIznY|oPdiu\p3A >4_@$w>9{YҺ?+tw{|eA| +`fZ[HɆ}R+3Oo +1LgDa+m^;\۷+@*m'tK$O8o4D-FG1RNm(3 oJ_6NZ;( vh^Ie$jF*"2] OyӂS~-_v97;$I\/۱1y\!H/Z@VQl[,wt@)l!nRj[( *QlYC?@<1{NUFs]'nC}|kۀW )x+G.܍OwTL9F5hsEƶ~PtBsICFWߒR||sa[=`g+c[cIA]%)BE}hh>D]akp +endstream endobj 6987 0 obj<> endobj 6988 0 obj<> endobj 6989 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6990 0 obj<>stream +aߴE! 93c@u73I(&GmtQMVeRaVtM:3j0$7 ޫ!ê?Nٮvx Ek7j譁1vBgso )Dvh(?F+aۺ8Ql`K܆~"? +F7^1OeQ>̨n=?!IOJ{OY\GvXOOlS9 Vl3]IuKg:?B`A.t,B|VO0"zPFc8 /DV ,߿=|]~m@UPc6H4 y@P>ƲXl~Kr'o f"msgZGnDBK%1,wF\H^XC30+RR FO]m?"^nC(R;G.jxʝk&c s^q,ܚY[O8G6V¬t-ubo cqE%(/sf~9tNԮ +I,GWVsC z13 {X8)|Zch{ S>&\B ,sJkӅ 3f}έ*iS?@Y6g6ܜ;hV`S7͍ |}mc?jXmؿ-=$Eg>E=N^PU^][hb/l3ݮA?aAmXkJHKC~Q R)MRl|njOZoXOBOQMSaié,H4c[!Lec? +endstream endobj 6991 0 obj<> endobj 6992 0 obj<> endobj 6993 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6994 0 obj<>stream +ޟ=+p'EQ\q슥 .9M0/~PuGn])E.\CA3ũ xKNqXr/4:F&3Gw{Z_%kK-#o݊]ʓ2N|fcz)r _G~_A6ԟpGg1LTFTt^J7)QtzL ֟\q2]Rq|x irRy~2?H#j%q +q<qohmfM3a>b0Ǥgp$$)sOl}"\.u&i Sf+j0 .O.ڈ')zEhf%+ngl=Z֌ol砀e`cVٚr +A?AY9h$uǨ&c'tFCs(l2,VhW?9xpW⻷kYauڅk) +0O-PP2%ciтW8 )͝UJET3JR]ߨ}!d;gj<ȧmR<3J՗.Ė1 a[a68kqiVwPM \U ޤNNT/mG1*rOv>O^=ɀ\6I3Izpp(7Jm35߶~̼g TBy4H CK&CEM[%5ωK +Z3G,+Dw}zŠV(j8V|ItNjOl {+@LϕѾD}CoJ 4XmcW?U$r^IG9b1JNw^.gj]bT+̿j-OB +endstream endobj 6995 0 obj<> endobj 6996 0 obj<> endobj 6997 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6998 0 obj<>stream +lYndtȅ$i^oyXD^PPq/mej @Ai&3=ZWF_}y}WMek{b(mrsn|zxEuf +mDdQNEͬ,ml]+K20B{4_WcA?%7HcJH^*$Foދd5 +"|/1) =5T;%%͓wK[GիR~+C> +TvRW$‚K?=}bPWA/%rN$qϹn%E)d *ӫ3sBgI/OKGn{+w9p'ǍVÅ2SRUT` +[ p 尹0I7aQAbe/qli z!ϚZʴrgrW9#i#<](*b]hByS;Μ WaS(Ĺi[4ȬBto9{xYӵgjށG@OO1Pk"OාH ޲/m"F vt&ǬS&FZcN_rz$p!iXn^7V_arDԫ"#맂iC/"fQX6dPm?2F8|ZV̔lNN<*i n67:Ϣ"Nی gYvMPն/I/Y.%vJ~Ӷ|~(Ç񕣝z=+b%z,M0,-\2  %~X,h:^614O|#XU4T?Ӄ6ƫX +endstream endobj 6999 0 obj<> endobj 7000 0 obj<> endobj 7001 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7002 0 obj<>stream + St[Q]G=>bvI{ᢾ^X-Cď WPO+Yя) u-IoRylv %gLp l^6XqN67+}}c,dh$_5 D˸}Ql*Ze +d +y9xv~k1AMb7k^4""S5q2a!vo,b=&ۈR"`X3@/ WK7~#uzm;!( xuTXS-( xo +-@Zkz0Sb7Adc<`9Z{:wSǜ`PQ%,CHh۳[+G9~_g ͤ3%\LwSG`E(IzלT1 +endstream endobj 7003 0 obj<> endobj 7004 0 obj<> endobj 7005 0 obj<> endobj 7006 0 obj<> endobj 7007 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7008 0 obj<>stream +% +: C*nۇ9(,jfx. 1X,V("Y^@7Z :2<8DLў!Pc2>ճ5 4fg3K#{ՕԽJ2_19:U|g,4vBϐ5p݀քc" Uz;Z8J@oGυ92D/|06=ixо[H<Gi:QVy1xpwlvl SgZTFXU\)݀&? rIHSTK'ޡKcVYv1r\[}:S-0`0H/'`VT3~z]+Bq dҪ o,a:.ʜ +nN y0aTe}%[CXi9=fPG WXhԳ#s+W.RuJC~AH)` Њ6d)xMiҰV֬ +?ѓ +OC*sIYNwꀠP{NaF0E8XeTKZUBV&q\AI44=C:G)8T "A3Cs SkpU0Y#r +endstream endobj 7009 0 obj<> endobj 7010 0 obj<> endobj 7011 0 obj<> endobj 7012 0 obj<> endobj 7013 0 obj<> endobj 7014 0 obj<> endobj 7015 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7016 0 obj<>stream +_0xL,<aj=z[{۶0Ջ–~fl)W 5}Hi$IZtyqe؆"-vlVdBP߽V̩~Zf>=aps>tߩ+у⧯2f5ALE]LÚ+!r!'luNdGiC=#NJ k4&P%UY4gz4\ p\ZR^4oK#B קY^&ɿRZxB#zB8o#kS͇mb^щcK.Z|PN R \ieRn#MyF/RzA +/  &$fJKueLδS-ml\i:vo:ЬN8Ȩ͗o& i3m3-tiTR1F1xBi-ZvP>q/RC)>}TRRq \QxjkZNIwbv 9vwoFhe|V5 i c/vf1.~dHL4"λ8]7=XYӧ_y̍>;M6ydk=5}])9κ9o>{0k}sϨ8jA6Y/]"-2@FnTsfm"Z5jt=B#=0VUQk̇gR$Yk +endstream endobj 7017 0 obj<> endobj 7018 0 obj<> endobj 7019 0 obj<> endobj 7020 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7021 0 obj<>stream + J~ѝv\J a4d v~ :';h$høSz}W`c)@OF!1VGot`c0'!1.ֺ Zߪ\X~aL5&wS@tä7K%i! 5jrإH2st4пxQL&F|&+..089}/Xzx#$ /#],^(^OԞ2cz78VKTy/U~o=g]*u g\PX:S?) 0b>1!+S R]ZZKXYYKʛJnҪڠQH-V(Ah8 mDd$H$sJ+#Bz}rl?G`5DF%yYC +Z}]Bގ2J(%2Ad3kWx͜iyO4I_Nk3o'C>92{͵Z7x pr%i79=(NOҏd`¬*ó:INjUz+~Jiǐ)l΢aoFrFMG1s5\ݩ L>J8)ƵZw<\ΩLr.B!xah?ḽJC1a%̥™Q(/ahKzy6EQ3?apX[6$[[J鄼KR^[Tne-"{~( `+?%T!̆kj5 +S5"J4iY,6?1aLO'<{~3x>9hoYx!9vsX6ȨS[Hw[aG<D7U/> endobj 7023 0 obj<> endobj 7024 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7025 0 obj<>stream +ŮG沛xCkmCq5>6>Gg0I.5CY2l;k`eJCV/깏c$ѝw\;ApwHM| :p^]8fٷʜVvX5"?[/Mzet/Z`<$G_ +)l!׆~͎UWJrUR |HYdP*_33c^sD~9>ۋθ[gwS.(5cu4g{TAǝnH3~ ڤ.) mVi֭Q`sWh@qKNW3 3of=;*wrJƲ7덭ԸOA r%|a$4EGu)Ul`HKb/Q<F࡟uݯ|Rb5긧[TZ*Sθfcn5ڵd=dEz}Ȃ3DȾ}Vnwf3y1˜NzoehD݇"iEb2 +|kb%&]'emJy@z?_ GVP6y +^!$^Ҧ< [+t4Qγ|U?fŮү-~֏ĥE=T?{ lukTԵk[Wy`Ψ 3ŁHjP*F!U +endstream endobj 7026 0 obj<> endobj 7027 0 obj<> endobj 7028 0 obj<> endobj 7029 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7030 0 obj<>stream + #$b\DB#<'jϛ)` 4\Uʄ#x>';]@تx8n$Y F_lF6xyѫ] [2gx<П5lFl,-M䥟b+SxvBeBAJ.)W %OPfIk)t7<';-k-I.:x=6֛ ib:>09 P 5Y7ULO}%I ʉPkWj*nk*}n8Q,N}wtfEgn1`{l=_R??QHhᐚ"3RQǨf~h[S+3aӏwDG1Vy4B +؏%[`:_2\? u[Yx! +ZUQc[5l%pI7NNyAhCAnN%)>̲W$c|W28mZ۾`Kϑ@UFJ`.|#NMɺcUۈ!hh.bQqh6?(y=b;wgqTX{%gݬOΌNEA1u4nJl2hGƫ tX؆l Q> endobj 7032 0 obj<> endobj 7033 0 obj<> endobj 7034 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7035 0 obj<>stream +$e.ɹ \ +,[;T,l["BwlmF[}.#^I.c",)kn9="^ܩ⠅op;z>ucΙt,R}WS;bk|ic(4zrKDg#Hz]cd_vmLx$)"WۮvndUdfDIZт?? Mz}m}k(6Jqfϴ +v,&*g4fFn)ͮ+S6;J߱N(fET\Ņ,!-XkYA=_~#C֡B-M@ޮp"1*xLd'~C5xpzJ.a=@9Ha(Fb>$sRmz @ ?!?|i$z8do¿K+,O *-}=!WbjpN] F?TԞWA#Yih_-7͑BTk S6wn:o䏼åʌhPЪc8 : ,_Z"lN3c]U|]q[}J;35"߅&\Zfڂ*QQ\hHi"=H3O2vbMmol_twcHN&b.f;=:՛nN;EüA7%ԩbnZH}bH 3fd!uA- ]:: 8XN>`PT~1ėDz[܏<[A _aK1/HvLX/MMD#t=ر՜5āMpc"cri6gb }J +k# r#^\@ʟpƻzc| *5Js$є#(? +endstream endobj 7036 0 obj<> endobj 7037 0 obj<> endobj 7038 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7039 0 obj<>stream + ƍ Rӂuw2-?\ԫ+BQ1ٗQ#NzZuteSqqͅ-*96`pXAnB2,8E$UOQ#݂W]sM[>sbd<}_Tĺ%48nɜse4Ycwn>T!pw0rGϐ EP8$ǂF[-~Gm-LYB nӱ+y$..NZjcFiWf# _@mPwOŌ* lv]7ERSI]>LӒ̜{~+_E"q3rI1,3! +mFZTzߚ2up#*^Wp$kJ~C B3c +endstream endobj 7040 0 obj<> endobj 7041 0 obj<> endobj 7042 0 obj<> endobj 7043 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7044 0 obj<>stream +p ֦,ŨZ += \^ldp46ľˉ~P ,]-+ S%e.^M2:K{ɳ>1GbK3_j|D!|<`~kV n+R馒$d@Ү@V:a٪HJ;&񖰛%ufou01˘ڙ>WiЂcm5w~Or`y6) OP :C-ȑX5*ńñ{+,|7=zX* (eF}Y.]skr|X>c_ 9!4T"I8u76lշȪ|V&~d+.rƑdŹفaYETWc3DP B(vVgR7m[ɣ gIs@"Ԍ2}Pah FCIǻM}q-PnJ!؏U=uaA^*YC:5e3w'Oz !/2# Y1#,p1awgdI);a|~گvD+*DIu5Zd- ݭO鲺ko3Md\ 1/ Pvsae-e T1Ҳ'4W;FEɛd865gBw‰If*nZH/:3#xj(`W4(ߢhՏmR{/ދ=^ cXFo>Vr/ qr]INq&&rHH:I._P +w% =]98~M.ğS0>,I3쾜l]=OYK,nA#DC4|r +, +Z{m>cEL \u^;QG jʀ~CB^5DjaSxj `pQyx$Ex#eڨasٿb\}8.PD~|H=md7EĖHu +endstream endobj 7045 0 obj<> endobj 7046 0 obj<> endobj 7047 0 obj<> endobj 7048 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7049 0 obj<>stream ++ε"<]4јx\^Y.Hl`fKN7jf/ܠ"pkmC7#ɂ}o^4 i\A*ӆ"EFak s{(X1:]V;w@l`I-H!c٦U+ T*v(:عpkZdudc'΋~6̅3.2oOET*V> 4;t#t8f\C l;hߓxCgg9dxiG6`N0iCAA'[m0)jV"kN fg)Ye,+qSQQ EN-xuPaʺɥ"$<^TVt⏖VluFʷY܋cv s0ا3)IkĮh;quL0VHDi7٨LʼbO/޷Dʋܵ&c,[oilhfd^;Ոp$ LqNDMDbF=#fuPն "װ/"/o?:Uߘ\hp r57A=T]8MThcV*l}p2;Ŏ5I[I#ٮ! iAh[Q)ⓨ),w|Z^+W۪z#CE@+0ꡡ{Vq&kZyM+*=KZ?ղ;H P>|LebFWO?pqˬ9y=ͦ(#=$}2[9ȹx%|Y2M .'GQ=rUC?[sƒ9HnUs,@,&T(rCӥiԬRGNo~yG/Ga8w!Nu̶:}?h݂\ޘ_~]*`bQLʶF1W8ͨ""H] +endstream endobj 7050 0 obj<> endobj 7051 0 obj<> endobj 7052 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7053 0 obj<>stream +S~ԅF.GvPEkE<~1~2 (eGXwW-q0=[ έ?<{kҶ%s0Lnc|]E&Mւnio/-* *fMKp >7&BmMXa7s5 Đٔ܁5Ufl X4.beJwmZk,9hTPm;wy8WYb%. |;L9ވ_P_BY~0稆Aw?Z@;r n UҪf`(D>Eڙ`7_c Ϩ/ +M[}C D2fv2dP!Alȏǽ{@8Rq`"t$W*(ܠy W]&heVe4EΤ]<#48wOĚphmcUruȮ TlRѕlFm36gQi#zus˙4,'7nCR̤k󟛹h0ZT"Y5DMrGFVB*ju>>uqu£61s\{P/GLNOc)u܆q*O\)XWCjQjI$򣩓4%^+ r&~|Wb׆u%Q}Q"{9?֊Iőr7iP6 qKO]U(2~+.le>v 'W +endstream endobj 7054 0 obj<> endobj 7055 0 obj<> endobj 7056 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7057 0 obj<>stream +Ɗ|Bu^AQ(~*2CwP2.XXdl!1D,z}ܕ5l(< +灖R 뾆xCܚ[U@2pmDN`;#Oq֨m0v݇gwL}?CJ '/ +-7N`kf3W`o{)S"Q6&flV $v76+ cY7-Ѝ%"R |o?  bS&`Il +endstream endobj 7058 0 obj<> endobj 7059 0 obj<> endobj 7060 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7061 0 obj<>stream +!Ze$DgF{r}| +5Ztb7ig"_<L!8FJZUzr)|cܶB2WeړA_cD6">XGg?f8=zD8~:i u*1c˻ )OΝ + 9w`@-7 W)E/Ḑ+Ԗs$D7bFsO![ !:o[J-kw>x>r 3QӀ?:;ɵ>1 +&?FTY8C8-ݬk%!?7GTKh}%̱Sam>f-ߗH6"osƩ:?yjV!m@DȌFa[Dg> endobj 7063 0 obj<> endobj 7064 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7065 0 obj<>stream +=þU:(P hXfcXG +pZHKSgf&&Kp|]I'0 + :@-PM8F[{Vc\NǠ~W=n ;pKRXvF @DFLiF%#UJu@$i\JnWKg?PN4}~ 'oLcS&>exTT@y N"@\f7}CF7~@ nҷWckn}w Uh*,gXɾzlNw>^\蝚p(0Lk"!P_tB`,kg"SrH +` )}Q`wdfߋjyIFue[)s"ب yz~ +&gD0JXVƳu*WxlC0$SMsaN(~_ |Elw1 BsT{IĦx7rIlCQ^0CsJrlD.- +endstream endobj 7066 0 obj<> endobj 7067 0 obj<> endobj 7068 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7069 0 obj<>stream + v=FK5smk'kqo5Lt21뤖i>nahnyo6*1N:^b)9\FY]aMcn VZP"w}>Kq-vʟk8:Jn20@N~YK/kFZ(FY +¬sipPJMI7gLm^uE&Dfe +IZ}h4ETO֍i;AHL]InHtuEd+ePh~x@~MCvL2(jVھfc 6ٗ^;Laɹ $‡]Q客qbvv +6[ d>g@WVNƊFT?95Mqy2WivNlTWwJQbs\p#XoI"W1,/65tS'N^TT\>j bCcfYP'q%< _M!F˨ѱ>]nAY'®(Lvr@iUzbwfLhQoѦGJ^ж͕ 8ДOWr cDg O~\B^: u"ƤŬ +endstream endobj 7070 0 obj<> endobj 7071 0 obj<> endobj 7072 0 obj<> endobj 7073 0 obj<> endobj 7074 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7075 0 obj<>stream +؄%O =~ҸF;|j=7OJA+(LLrs` v"鲯:>/T8LZft|Xkڸbdž2-h6f/|D/_nL[\&tG$<:ؙ9Qڜ٩/%eLqI-f% \9]yoRN:|êE9 'T4*tx,z-?!)W+cCͬDSJS{d +RmZ;wpqW2F`Z>[U=8@۝UzN`?2% ?LWֆ:y:v-)~AuW.jU%xɥeL=r ^%DKQ 3-_,aB;zNJsb9~(v )ah1qvS(jRrLZxOkGb{5S{_eLoV!L*Ibo^7Z`?} l,(ƵCΫ-p0Aܭ~z~Qzzs;('fZmG[e"mJi5NlIo{oB~j6S6}ʘYZI]@5n%a9Nl^s +0C@齷:Pں,aQӃ~fxX4?,2ƵlccWM+qSdx>;ذutG0???}NPs%-%bvu#q5~Ș|ZpXg4D ~6Ad3~ Шn~eʗ3La>!h}m՝J ۳6ºtAMF`N +|BvuFؤ#L24!6Ԋ@>K8MPj\f rQNȞ~Wy +endstream endobj 7076 0 obj<> endobj 7077 0 obj<> endobj 7078 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7079 0 obj<>stream +b3@Z2H9yg*lMUZK6]̒!Ӝ`0eXXOTd'wo!xPl_ -Wg) z׶J Lj\{_0IP[U+rCĕ/u֝E;_|q.;IiOd6\}z}[X<|ɛ:\,XnK+6|DXFSL(jP҃n0sm~j&89/;`gh#ootPZn +yO9r405C}Wާ%måў*F9xcuwJ>m浪 +t|/JhdI;&tBfeUf r} "XI7YkkBp[U|"EӃaPb\Uj?0U('7lm#gp딿 >> +YVET0[\xH_Sͫm-)E %6}n>@_^Pa`FӍ렧00*ƚ8r9n{2 82Eg8þNbaUQn6F~CqT-jޑzefie`(::vlEÈQҔz.pSJ/>F=_//?OB:;Ia700˱:m -#Bdh(1$J>* K"V9ZJMN91=D3rEljtkgi(qgUKi^ TdsK ˷]e9׮شoxzp{3h~mb Y>"9E!#L)1C.>S0:yچ&(nQ̦c> endobj 7081 0 obj<> endobj 7082 0 obj<> endobj 7083 0 obj<> endobj 7084 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7085 0 obj<>stream +r1f)<6ip'hwEpA)u@%PC?vyroS|Rlg +gy}qE1%z;ؿ$i`S7mĄD p|Yˤ}fSK$E@w`|zҥ zpE~w/2[oCv>C2Dqmȶsl7tzJ'AWϤwM3[b iهcӇߟ<2QF'F./>Rw9RL]JY9#lʗS(óиނҠr; Ϳ©ʢ MĤ-K/-GB ֊1Xzb90iW^;rp6hAkX+ +khf6qϾ, W6fJq/ զ憙_:r.gSm9*cC,lf[)&5C==LizԒLq]vvUZ,^iTrS&tߜ9[)Wh* $9.suAg8cE!av,l?V+MPҖiE}T#̹Kvmf`xlvWinze:#^IyInb'UƐq$M;Jwd]$A .l +Z%%Jy3MPrPR`NvJ>;n$>V|tK@sE~įNT\ved z(0wױP> endobj 7087 0 obj<> endobj 7088 0 obj<> endobj 7089 0 obj<> endobj 7090 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7091 0 obj<>stream + WZHoaeYٌ1x6K7OVҗJĦJ97&mT nl&xȴ=l?łMOr=V* V8rh-<7ֆͥ?)E +K_# gVx &j0؀&vcpV;4lRml4W;%'cqGiX*RM~q%#Tթvvogpiyo9{l>e7 +|}Av{.K,50Yt~;j[fzfZ74`M,;ACW9YBtFPHH{vԲIR 1cD2ܹ9j}Q_X/ĝ Ó̙'hcQ_-EX+rzkb9ףB=7'B$Hs$dkHc"]a<m7dj12xB?W^Vt5u_ +lT{& p&fT'APwhtiW1{G|`6~;Qj'&Ϡ^2?o< C2j1kk<.>zcXZl c6ڬ:1CjVB%ƛ~HT5n> endobj 7093 0 obj<> endobj 7094 0 obj<> endobj 7095 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7096 0 obj<>stream +'WVT-oesx|Cϙ5/!8ʅbZŌ#~WʩЁ\Y1q8nH=$cZKf&N>8?G9txΦGD& +BlM!J#ըn{L=A J5O ql|>e}P`|EU[L_F_ɿwvc_S53łSO'U=uɮ@H4K—Ĩ)kQ@pze@}4>-_ص,,$VdhѕYƥqnԖt[>Zq%{'ҏ0,Cw)7gs' +-Iܚד.T +Zj7xTX> endobj 7098 0 obj<> endobj 7099 0 obj<> endobj 7100 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7101 0 obj<>stream +U.j|QI{c$:5#z/̹,T/4䝴L=wk7je|DŽ@yiT}UUXv+“ubW"g֊[<6s1.-D'@Y'tw[ZN9^8xk3LoAtg ReA\w6X5WrT`VzYj,HYU`tN)gm(d5u%QpzEaXv_f&Fu5ƛk4KU1r' :z&!(Lzad|T.IVEdGuN&87B-W1̊M+[nBaFфZ]Cp#0w'шҺ?l 1%yŀa,N9.?qO`5_^)`^ܙ Cd1(`We6d KD?w3sv^UL+6H`dF_`Fcqҡzl05ͪMƽ+w+o^K]W :\54c~+.pBЪh5=xL9`o9.Y.ŎAvXYSjWH e EiI73nna]s [ :Ҡ@\q%فa74{lC +46ь6.L8I>&#dCgh d+!!P/KB ['ƵcأE:*bP^#!mt %WGx,3YBb> endobj 7103 0 obj<> endobj 7104 0 obj<> endobj 7105 0 obj<> endobj 7106 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7107 0 obj<>stream +UaRjpK~ہB% ع̾y~3*r @sY t`Kl2XWyuNaj$#u&wW2Qb^t1ch.R9-Zz+sot1Zy\eD9c eC +ʲ\7u_Os  ycOUi}1"N1  W`=B5('Υt7dnhz kРKAaj{^D۞l"? 1)!iJRVѸYԌy@gf =MBjn)u}f*1^?gt=T,gv떧*8.yeq 3!}|O=4L)|J'}H>v !-O=%ASB:ǔ -tQ}t`ng{2jZ@f|#ž(.vK g [Xef̅tb'EI,y9jʰ><o—{Lt<5] 2g+ʌw+Xf Մylݥ!eC⏠gZsPbVWx2v_y@6 GRe2tsR +[*}Tr`)[Ey .ΕK3ra_BDnZe2TfM".+N?JL3gI@F=BhL{i .Ar&bo;Iyyf_`淛N)/8..z[[AHH*`l+#WP̚mX-,4*X+|&] v}If1ymp?FjQSHۓh2B +5,-Kh Fƒ_s.9BAV5CQqA55{ODוZWy!p&K}^\ƁN_6bX&eߌX +endstream endobj 7108 0 obj<> endobj 7109 0 obj<> endobj 7110 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7111 0 obj<>stream +D[#6:1.[ 5;vL ۘU!3(XϚv*rkD\ƬIcnR>0@mEph_}\TOKqꦞ?!|fԧ!@qZϳ`9>p%\&"yAJr^L~CKzl{hI v6MH&Xc?ޮ76JSJY`9B"+1"miD7ۆ1AO$j4Pϧ ns7sU܉Y{X~/IA'G4"gof/*x6} +ƬENJ$ +cw@SJ \#h,̰qh<,ͻga.OҪG4qoDoG­o@MA$q,ג> endobj 7113 0 obj<> endobj 7114 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7115 0 obj<>stream +5脠hcL>Jy k}2j8|7L*5HM ˮ/nDW燬R@bS:ߑ<ұ}A٘ K_W'fv lx hp0ZWG~`sm`:VJ#g$W+`Y!+ DW38xa_@rLUj `x3f]BtG($: 8ՈUb/ㅝVT۴U3QPLB\X+U\&QkadP5ChrDynz,'pٌX+w)lFD?{c)2+ng6H8Vh KW?T}yfgՍgt2z u8(}ɲru%%GwEjw=!ّ +f9r +endstream endobj 7116 0 obj<> endobj 7117 0 obj<> endobj 7118 0 obj<> endobj 7119 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7120 0 obj<>stream +k5,D1{RP4n dY^: h$ EdF]pYrj0ȧaf/zl^cdt~廒/\n~7 ;qަ2G8M?4.^j;a$/s8IN3%_XD Ӹ =,# 7N[3<Тƽϔ̼O؁w|$۝ +9IZ׭cBfesqcf7en? ? 2֛Hؠej{OFO@ eJM7OJޯQKi\~KBYf=0I4*5קl@1e3⒙Gj:$DWVYQVsY)gҹ mw޵%"`h{MPP>ΆŅO>2:Dp"ƖpzXUWѤOGIȘb EfMDΙÌ9rH8|ȼxR٧h{:H ꐴ{8Ie %$ꅈ IR9mh&}7{{J2`k$RB0J5H6(Ui>rJvЀ7 t;__JzD{$2{9a]uK÷$FTjgd8?&J|#^nt"gwEآ9BiWɀ}n{V}n`T@nƟڛkUd2xrB ..G:y'nǿBel?DtdF~)nLBw> endobj 7122 0 obj<> endobj 7123 0 obj<> endobj 7124 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7125 0 obj<>stream +YL[7rnT2y̱54ШC@<4ff'V 1;R}sq~HxjyKأ#6qP=3+jQ9[0{0$s-n~+nsY8ږP7ua?\.p'` '􈬦A?~i\] bpv|o/ʛ*Y]VA6P`rZR!cT'|l B=qI1ah; +y]c[n_6XJGBFq+^z3"_ubUD~^Ck}\tV1:Ƈ\x3v3(?>/jo4}7·ppj&:X6e"V`<0 J##D!cv{38ykVgq?+~E\_Zdx-;+oe7ۇ&+A^ g,YPR.ajV~U+IW,rHTdf' ,=3g^\O2 rer<[~üψ~5ڽ]gW\wt +cd"2pCW ORu %c9LBK'k-E ;$ |%}d[{R1v7=tRVP.}tu|Gb 8٧sk[݁T3p@;=u.J-N8{p+f0ԚY`lvڨ"bS?8rfbpT&*N 9ʠ^Q$$4bNIx&Po=^> @)sKS<WSOVxu24^.ðߣ$/Hm"3-Cm*!Tn]75(29A")R#bofjO9⸍ +0Sna%Cép;U;d P%&VZY~#>sTs +!@*[/ᘭHMEmO~ q3tB.Q-(QDTI#‰xMQyPwq|N'5sa͔y-ƞ\YV[ZpjdB$ o8U~yVR;ARN;zٿC-1]`Lh!:8F%&0mr9Yhԉhtɩ6@X`wݣݺLレ U7J!Acmi=b;m=8d? +endstream endobj 7126 0 obj<> endobj 7127 0 obj<> endobj 7128 0 obj<> endobj 7129 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7130 0 obj<>stream +֜,m݂Dvlhέe/wUKG[>w I䗚S _V_g4EAj mU{Ffr| {ta`uOq;J 1raI "bfӮi41ȲTI 5䣍Xκp /Ԣ +oJD& +{fLPt1;mIu +g~IQ仅􈉿yl;A2$42s[G7\ahУ|{վL0GmfUtUʏ`b*< ³qA)Ž4x +؈x .$R +hwz}pTQno 6j_dl$h ݊9( +ftEFE.|h&8̳fXz +"+ar!K{ ?`ؿя L?uÃo +R6oq2TGZ=`\*Ya@ut:l8 VϮ8*#Ae63@? bj>oXhCBVG"OWeB$q8Ri_;+^kH[e4 7a{f;qg +( 2D,C@="/ᎡbmMߑDYOfDO#8lȎ)B.˒hPRK(oVȺX-_v;_+FٖhOZQ_[IVS"T6ݐ(}c6% ;U,=Ñ֓yAZ> endobj 7132 0 obj<> endobj 7133 0 obj<> endobj 7134 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7135 0 obj<>stream +G}D5y}Rn34MoY_?&e5ywQ}fo| 'J7\-wF-~0J)VN;H13ePȤ[55(N55#Q=O= ~ /zrP,F0gb)ok_Gμ /I$$z^5E8],ڇPkr +~l[2e2/ȵ~OFZ_'5̯iOe+lVٷOHV)aU BGA|2@o#pޯ?sɴTpV9P2pC,J✦] VoDAoi#+%쫮)֚feI%j>xazT14Ⴐx> sk^[IΣ>ءku!9'o J~9εH<.o}]*olbWTBsDUr$™`q+.)x)Bd~ a { kF0Z@̞ElڦM޼V]'6}yX>678ؾS4ș +x(dzy?q:Fs̼^R`@?>mDj+}gLεgËh$Ymׂ']{y!ˁ5S~uM 32LGk/ '0\*[ uрW&$ hrQn{CU0i7ʋ~~6U0=t(S fx5IE3S3-%~B-|L^ k8jζghb=6\e.}ZxvV5Rvc$|UaWLsˉD3MBb4[9."XJ#sӽZ7[,6%K-#H(H^f~K1l){羖[l! +:&,P4 + +Iz ւ+(*_|sP.r)䂗,=6JܤL +endstream endobj 7136 0 obj<> endobj 7137 0 obj<> endobj 7138 0 obj<> endobj 7139 0 obj<> endobj 7140 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7141 0 obj<>stream +^Nk + %O@c0D 69շD5Q+ 7;v + 7-b)2," G +Lf0oV}-K1/ +j"f.CL\k4ZFU! p@rZ\KXF RP(UR+_Qȶh͖uFC:30ʴ\ٸ_i@^203?7~R;]IB]4`vsn68UMDBU`+8~8v +Iq/IcQuw9w^b͉.@X4Jױuo]OVPF)|V"Ise.6_&OW*j?ܣd˛|u4%huI?;,:Qp?(vmAB%bQa-Z'63{w$Q\FNց;3-A '#]4$de[]M~3P-eEI 3.BA@0/Y#L]=^ה暹=mQ1I`uB.VLUT dT;VA|/q|#hYt9|<@BU.ht܀ 85 +_JGׂQjoNawr3l^ri9_rٌ=$Sksa6_6o-_P7̆s]AF^@´v(2<'CX S;ou:I(@yp1wg[; |I̴dBN}kq4CqjY J fH_!`ǥPTHt35á +c5M +h0:Ͱ_1b-AD9Ҽح? +.$hpeQIpFIպoV"wXf W+qX +'=,Z()wdK?x9݄Z wE*0iL> endobj 7143 0 obj<> endobj 7144 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7145 0 obj<>stream +x#+Pzac*<6kUKJ{c,uXC$B {ѫ•F]>LZޛaHO$a, E7;h)v.IjF}Qg1ͯFi-1u8h俉!Bc9R4[6qPq'˴<7 EN|ƞJIK?ak<@n|,1d4m)`>C d&/)ԔE?Z9x_5BܶsF/b_[:?PU4sҍ˗ +d7S;T2a1/kk*@{X |nHƚPj'Ss +b8vm6ٌ2{ԅ%p`*)>tc ַ 7ȯ=CxZp{3CǵOs0wK|;ns$ٖ n w2O޸QR@# ='7)%Clc`ٔl"L-UX3d2.V+c "5MhU[dٕ=Sl],h#REQ [[Bl$T9V8Id؝;Z>j 7xk{H#xL~DRW>fL;X&Nxw{q4U7:??cTMěp;fAW \ax{wl{zd7oJ͆p>Si|7 r +wEns.-sPAœ{ͺ8$yf3>T*>&FLY(KFeQ҈cV[Τ@SUxi +үAp)RYYr͇?xQ:̑S~k5e |Jj01oQ Xm_̄.et-?ZaSLƲɶC qPF=Q,6l~) +XV!'eRB`_v"_9zژ( )!]&5EeN8!"ӻbIl6N]B:.tS 1M[ݚעy]ڛjiBrCj(\B< "vJU1* +endstream endobj 7146 0 obj<> endobj 7147 0 obj<> endobj 7148 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7149 0 obj<>stream +':@ؚg1(:e`i P0!܁l 5oAy*T4cYO*<("pQ&4xo{ w^t|u? Ƈ-'?d*w_>4vx*G4%ׅ փs&o󠂶e`V||9AR`a˥t79T'RuRVv(UoO8C6tgEi~IOy-Zv[!ƭm̜Ԓ_AkdrV{봔) n$uVߗCEjRd [=T^IqҸs_?GE}/|\m%=C +KҚ7L_i>bPb]9m jsM(S+ vZh)?b` *:  n`T7>pn{CoГtC* 7RHf Gyܑ թ#   Ke>9I =3#}_/O3)"D"I4> ~E8?YzLY`$i>}*,!Bk6 k<=l<0PN Xd9> k3,xxU3=^dML(|H#@]#w,ʐ;dG4wӹ"?reJ4R CX +}/6Sӝ&*//~>r0D#Nlã )1d(Mnth\t_7Ґg`ZoV3WuX#h\op0ceTa?zhf OtX9;goI,c>}4֣"癃"Ă ƥ+jE Iuuw§UjTm%Ҵ.HQZsbe0a0.M.vVZKʪI)BJ@!zWIo=u~s}fqwd*;V̎%V*Av)ZJ]mmd +endstream endobj 7150 0 obj<> endobj 7151 0 obj<> endobj 7152 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7153 0 obj<>stream +/GKڑ\TjcXXKRr:A$cg axhQc:ojI:zY"~ |"5['JL$AfuK3 !IJ}!e)5cc;R͖%BSn_=Nw1BX\_c)} 1ٽĦ>~c쒗E~J[HO0>wW<Z{/),zX\0 xP"c +["Rîȗ0Cm ŋSz+&+~/s9M0jIVOr\|[KnGiV&C}%d.j}Nc2sVDsEb&cN7-hrm]H1>2PQQ網[*-qY8ۜrLO$#vo-S< YE37D +endstream endobj 7154 0 obj<> endobj 7155 0 obj<> endobj 7156 0 obj<> endobj 7157 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7158 0 obj<>stream +DzE$CߓmS-Jڃ7WM[`g$q PؤsFR,LOMZBrPkb[x8Deiy`Zs/׸ +B\K +zq1Ww<ޛ;Ƚ5-eY(dmsn l&|@Wœ//)# Ay.!|TC3seP iP6$kYQV]VEt p<(QoTo?#,ļ`>08ͻ"G]71(з^k0̒uBu;Žx܌U,(!@8c0&}kxHY XİQTxП?+LzgYAyIdo"sMYAPtJ 2hZ1[3Py<^5'_0`mpd> R"7|/^j9U +p%\_4b +&)SqA;Θ0q +hpa61"$7=`m +~_H{D To=[; yOEIkLP"9x *  $BIɳXb_ҔC79]p ) Rdz[ %\C9fX_cJ {vr:Uu0\_x݉v"[@/ ywz_vBREW8OgN2v 9TŇ|FoaM- +~, +"<~|g:!^}RQsS-ӨMᛍi pk5"VaD 9A$PD#nFd73 +4Z"R4^:MTPTX[2NՅ?D1PhF"> endobj 7160 0 obj<> endobj 7161 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7162 0 obj<>stream +R(4֮]zw'~$";ۧ".y" UuO{1?J'O0L\,WľhP&qZ1v q Rk"c*t!1XHi83SWF]|:^ԀX4:0Rg_5iCfXi P K] U +='8Mӂ5?O۠#5nP>Η]TBf8Xt- 61zض=;#D|a0'C`k"0Sf.:GҞ6nPLYfw`ȅ >`1k4}g$\+gz#XZ8AT:ͷo?tq#d7z:[8_)dl0iEFX1R褸Պ$*8(@K FhS vmG}υfVk*i&q =SY(gܲdl;eaտՍRwo _Ehk,>dx۪QWO4ū&uxŧ-ɯO,½ءUKJ:,\)BZzX:!T`fGJk#ء\uq Q8j0E$[],8_f +HS&d[!ͫ?4]2aRlz46퇫>ۑby,whLCduWf?b[KnI"W5PO O#.2>T;J<*`c݆V(jwv +endstream endobj 7163 0 obj<> endobj 7164 0 obj<> endobj 7165 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7166 0 obj<>stream +,|R{>Jx|ChR͡$+%p{XL4B3A֦MXzjP, HGE +Vl#ދX'k +I)3s(:g +v2Y#7m#gn`^v)|X%pCmTv|WLˀqLXQa >t2u{wo9 +s&.8"G%&ߟv#^%M +(fWIjZ7k?So7ם;yGOf}vkݞj]2ϫ B9*@ gffT7jx`]fI84386]cLGeDT6z@sRF)̦ H'aytѾS.˃BH,3T=&IGc)2 IxBdhbS>%CjQr*\I|ESqV\ɹ}|Bx"RLvO.&$د.ݢP?SCA熽UcAsvZ> endobj 7168 0 obj<> endobj 7169 0 obj<> endobj 7170 0 obj<> endobj 7171 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7172 0 obj<>stream +E]cc<2yl!/µ%R-T:gƿvF"H|i@]>*ӂkz0]PoD +~-a5&uBr([Eq+Ա--t)CxZb X|<RKV!jR•>#|<! 6yH+Jʛ%q Ux. NzzJ˚衇g-L\Gtһ܄ J5 4C|R֦Q<{K{K0X/dP<<3$ksd^mRSwJafy2CEPYl1 |߼3(a࿤HԗԈE}|~;XN݌(&z-ŦE!5ѠBÎ'%C'MOJ&fXǯyCeV9aMLKIDzԱ4K;qAUa6jZaQ=UU4 C^(4=jHh*Q͜eOpڊQČeCH<⦚퀰&鑋[(s3]kOq5g!dȿMqu]$MRXoۈzں.CR@Vf]C| 3'a#^Ib3Os&sn"''+{6ĿEx4푝?1ž7Tk.#v0i+=tY㹈>c u1%¹q +7o5 ?J湣]>t~ GHj?gpʚƩ\x6;t\@ܗRΞ  * u_ڏ\?&}U/op,,$o>M,GX؅pm4X> endobj 7174 0 obj<> endobj 7175 0 obj<> endobj 7176 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7177 0 obj<>stream + /7Q֗l'}b)dO0=l*\p2W9XB]:t&tvsk]ˉ' +WY$w mڃ۾zqy5.bdxxV aØ)58!zU$B< }`U/Rb;W\\w_cf\&D #QУ˸a@ѸzVr߭VCaYԢr:"> Nϻ:h>zEںEye=g yƚ#wߊ_Xi%Y &iY^YnHL_ٿBO熓 r2T@oК(t PWX[>f r1d2W63:\n>B+ZQom0DfԺu-QX-z"jO C}3$"N|06n] ,w?Dm=+v HAWXT +ݑo`%:~$ns{E} Ompٷ0 +t9s##0P "Du u>6?Ǚ)M&249&yըZb $G)g yn|y"9ss}+qjU }cu8lv$ |lm^n;D< 2 <r2PVBaBVȭR +ilzY"q҅OŀxmTݻ}p(Bfh<:Zw~i\䏱6 1lΘ"J&kO}5ڟCaxUbZ^jl4zG,HrV8[6oъ!΅$P `턱EPp~Gz# KX*1*N" ˳8F\_ qHq]@[h`LrUBaͮ_3%:rtts.C';zGzk +eE} |W'1Ձ +DŽ$4t.% ":$ R+ʅ~{ڥى at'MvlhdL&֋9{@\RyC:f[&l~_+XN3;{7u8$U/ſ~Z2nU;9QԯKO|6dMb Sp0MNV2}yFc,S݈G10P&ImN1 +endstream endobj 7178 0 obj<> endobj 7179 0 obj<> endobj 7180 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7181 0 obj<>stream +Dbڔ+l,gXT +OB!GGOvӽ~t>!a"'` lU+·>;#').m U "$j0]7#Md 9Tz2SAOف/~fdI!vؙQ +``=wv[D1#--`.im.TrÕTvl')#5P@i@zƌwϏߌH/20Ŝ*[]Oz{ gpydm1Nxi l̷F3ҳ-+ ;d^O9sֺ؞Q0}{gLg@X9¯eT}[=}ar857I jZj0̐/8_ͤCaYmIU٠&@Ӓ[ kL}H`Qh]-FH' =I5DWT4AUS֭|{A1dHhi깠޽$Y|/9{uA|BhKxa**Jp#.\~D2/{2 ;G"j>0m?+R~&'VCl T}侾%79m<[yL̵eScӞK. at7C5\zdڹ "[wCԀ՟À!.fxŝEݥȐ ߪ֊fNj:jV›ODh9vLl /Kv#2:򁭝#M&Z+zcdp?M +Rd<8]￧) hh#>#_ \kA#΅]52t/5xՎ&";It) d{rb|ްKUȜp䶑MZu#'9'ʹ̚%)e|ǜ!W`ov*Ȉɶ$1)csi|xTԄT4T- wmÈ/gi0K* 1/_X~4d&9Q;:=tx1/=}{bsa: M eJpiDU.0૒cx݊NsԵ^ ߣ'F&k8IdtT$asq;2"@Ƃ N/)` CcC'6&K#&ٔ* ͼ#v~mISy|i6,\Ǟ*.֛KlV4Du^WV\K/_&dLoE^\/1A{#bJf u<> endobj 7183 0 obj<> endobj 7184 0 obj<> endobj 7185 0 obj<> endobj 7186 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7187 0 obj<>stream +nRI[jY娆Arܲ2e 9l&O$h*LFO5whwt+0'01Ndeo]6GIӇj  .ؾIUHL>j?}"ؔ!"yy΂Wk&7#OR,/j&?Nü +(B~bG%X~z3`\a&d_,0Miq8Ke|ُq5v^^okӀI'sI ϻE5("j4Ar/\J~>'=c*'Afmτ$̃QKJ~}2`Kl,tC__m]p߃μ$=VoÓzEhb:϶0to/xSN$3Vv?`W Ďշi-j˝z$5 =[߁溴ʖIRczС^A|3L1 +A˽ua&V`7;Zk6|x(JO^+xzamjA79.(O8Bs&H|@ hG v=oo8nn߀o? +xi6v7 60j=0r`}uC +8i[SS퓽)/䛡RhY,.A> @W6BKS7=iBL"ut2TmI@WK +#~N.TS}\%؝ +͎'<Fqά8w+ċJyi&qc1IKfPEWoYf.EedRtEML{9un98q(u%imyΑ>rУ~ W60ѩ!vw;P4rwF¨(Rthdo +endstream endobj 7188 0 obj<> endobj 7189 0 obj<> endobj 7190 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7191 0 obj<>stream +: n8OPɧKnݹUijH9^p~w{)CRR1}rj"SE^*KqcO')@K"?ćh)ɵd2ecrc26%ξ"a [4®o+0k4Ǿxo#Anw=oA|7ر9 rP} xgMrch%?f82j3ajxV8Wk=qr;3-=Uفya6e//s/=c_q+&}4"nX©"p"nK|;,úa,-JN$H,ݨuyЕ Km!9e0.3(N2ݾ6T6{⠇>e B9k$F ;-=Q0t RC{tX;_^|f؅MR{49q`Ƈ^BR8 +endstream endobj 7192 0 obj<> endobj 7193 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7194 0 obj<>stream +4phN8'9ʚb)V = Ľs |'ɘK9/|K,RH()pE=:8 YH A [+R!Wϧ&ejl`!AN"w)0|I0BqEacQmⓝ`. Lੵ ν$W`2+@w{ThNpiRQWS24NXJUl7Q\{…t|S,[ lڙw'g"sOQDp.ۍM[rҠ@Xu$ Gc[1> endobj 7196 0 obj<> endobj 7197 0 obj<> endobj 7198 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7199 0 obj<>stream +}dL9{0bN!n))BVV[έx]eg۳ ]zU;ܖi4)OM.2ursl8?,7? =Y|lfjhj1Ne8(VuE¦O…f,WR_ |yN'_+~)J>ӢQ9PYt(ôh, +V5NKaSs}?k<7Ln$TWˉ5f YbQ~=\lL&kKݎD/DXscKB)5"/,R"lLpWbn1I2NB:bmT &]:Mu=?pOu6L z;=a ohYN/b fQW6Div[+G\6ENOHjS҉ +3v6bo#[=!#f^XgXz{22 g c[Fy,FputLr+e7:>MsP+-Ҷ,6<$tOSEqD@N*K utS\8\IlރD lN`ReZ'2of+؁CDz/ }ӃCBvvoBt2㢿9bq8}KoJݚ dQ:9C%ꍝєmOkPr۫F +endstream endobj 7200 0 obj<> endobj 7201 0 obj<> endobj 7202 0 obj<> endobj 7203 0 obj<> endobj 7204 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7205 0 obj<>stream +Loq&E~ -:/ +lP0Lr>0$0gk!m_Z=Gw]GY; +dk}خUp\vg2*%pAFՓ|M#SBj!^PK+E_y~ӣ~oS\|iDnsZu{UgiэQȺzw=̒DLyat3_U {+dH[e;brYMU3&c +@3xFg3-:(񍼮<* ]`ODm +fd +f4U"4dQQ,0gcX-G2`mۂ`o}1R K.^ddhlw4fW=Gs^(|fL?[[4/Յ:y;I"hk -+S~4{xG,jD=r8mDz%H𯀸DJ0fWj[\pC٨0#qIyoh_O-b-^> endobj 7207 0 obj<> endobj 7208 0 obj<> endobj 7209 0 obj<> endobj 7210 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7211 0 obj<>stream +:{q'/=w3!Bwu ܓ\1*p6VSҹ%8i's"̶[SNٶ6RTcp:қG".Hq*S͉A1Wۢ!j0@^N-0ʪK7?N`1`]Q .[-#`)ZCǔ|~;vonĨ/ؕ F9r @}ι<)aU5tQ|꟦Y3'e_ӵ<0{hU.l%)?4e* v"f7L:q~8&u;xu6LmuPLE@̼3<&ME2u QI>Xg^d&Iʀ^pe1@{pS(İGjRMNHy~fsG\bȊX|ѽgJ '{w.8C5/Dh)fBGppߑq\Ԣ(8Z#lcڸ`EQ +gth9;7V-kJxz [s\ wMiq*M1٦{;X->Wˈ.7YIۓ'ꁹIhr/Pbg%J;uz?$% et46[沕7ex1τ *'brMuY{G̸w3CtmȻP Vz\~T$;B == +.xD7-Ɣ/XFTi5 4Ew*pGjH0zϞr ;mT7˚4[|h4T7("ZLhbg0^#s4<6.]h<YbfEU+DNUt9l4 +s\5=@gX}h~>/Z d Ks3k'DX?"Kg +endstream endobj 7212 0 obj<> endobj 7213 0 obj<> endobj 7214 0 obj<> endobj 7215 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7216 0 obj<>stream +;>e~-gٵS!%Tozχd9c$-}ώ$Bjַ\I ,lo`6uQ̻6z_G{waלK:be7˼RN2C%K:r@ Ex8 K-d +mɎfz!4 qSP{q5/^/%ZBS2Xgk~x2S5ьa, wSzpSkd74\ >_]Ww*|BHS[w8Yn~gZ7gjW|>iR|uT^y V_I5벞̻,I:䥦(K۬YsxzQ Rl1K3CtQ3n^<)Dn׶x!aýн⊤ӈ/+px[P- 5Hh9sr@pnps @͔m:x_fσKg3V[J)N_w,@4dhW9u{?{IPxdaBos4.#EMS[b+1%:i+8WO=xrT-M +W2;h#φcQ7}f/ijP5riZHG+)* E/*f| +endstream endobj 7217 0 obj<> endobj 7218 0 obj<> endobj 7219 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7220 0 obj<>stream +:.R8]8ֲZ>gfcQ3EfI,eMmγa"OFXc~qy7ຟTAFv> R*{U>(@DeUJloV^By+wǛmg0Z HvVxs&)p)^ǾΘF1z*<2Q< Wm_ ;wDMaڊp4@^C)A8Ga[4AHZJT-kXg3tPWiTc=Dq%;A>\-sbNdP '& +t2S)~Z)'=HxH ?޸Mm"8I~MsW"8GIgs`>d+x@]9"5?=Q[jpp9֤hP.Y3W;׆>THXVBsGYfpG&rp[@dC A/TВLZȟP5UϞ[[Pg(|wS0?, 4,{T>[=Kfx@!I-, |L-lh}JV +!vG@f7T*U + -5"T$b/v޲J-+eߗ&|6H;v·8Nó@h53VIN(oK^z~L?$71?JֽNQ*?VDiWfIOjg f̤˄(Cn>"] 寢g>v[CG-WTܑ191n3>~-)p +PVZ'7f5_DQR iI@]@# t|^!ĠrU#,w{މyv*̩8װte*f8@[*P+BnޏMVX9Ļua]F( +&r/ )RAX +endstream endobj 7221 0 obj<> endobj 7222 0 obj<> endobj 7223 0 obj<> endobj 7224 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7225 0 obj<>stream +ĵ~66탋Gc]s~tW}i +N5\ҽZQ+[Hj}Yټ4){pT&  o{[f9cA 1g. $ə_`xĀh33wjU=[nghQ*40q9ڶ6зFy_w-R5W+g~6rۥ;=H4@XSd|[NeR/FZNNbz0oԹj{!ǰ,=[2uq_/"\ItbCL9\aˌUª,gN<#1;yNX0B[>+&Ǫ8,I#T1tKzz$*h25 + +azT%AUP,DM ? %>u׷κF$χZ}óm"|89b/Si 4(Rp~x^, ڭf"D^~l%1Q&:RudA)8+%$[V]>HDz7֎WE p_ \+nn4ܹ̐'vZ[4>(It~ϔW\|~[~R0#h/Yo@6A`;ؘ/[{Δ.+gub._InvQ`UBcઑ;4jʻ7љ[BSQ}1ex]?:cBEQ$PG$q əO9\_mݹ_%6d6{=>eAI+%sNy6ez6oӵ*1@Jv#Di#_js]hvȥo5e_`?v/07s+^؉/:5Vo{VeSIpb2 +&ʯl]9cv[v<ڭat̤ +endstream endobj 7226 0 obj<> endobj 7227 0 obj<> endobj 7228 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7229 0 obj<>stream +"ҒH>ḋR?5@Juʽzb'h~'SP,?c1ljxܜxs`AI.1~FWRFAc*PiL2螘y +w1v$82TIɊ[-M3Tޚ_ xU E}_7t3@:ev6A -e&`]G *Lw!ǭ@=3 *}8Q?Ɇ2CBE2YYkdk(g0Wuw 6ksZeM',T] g6Y?!Њo^ޔ"RJ>M/M6y["2Qd>´Eኹ}7Khee$3aa97_ JR9&O f[vwEe0OtXH{;l.X% +Þbԧ)?23h9 =$άb-dت:\6EKЏ;n Ʀ(8/RWL#P_/)2s MӖ'6;)_!:C }й|Ijw蹠l4 nc%Ej>Q4Š=3D({vM|ӟs?r3dJ^6j1CYo#u&2栺 +Dl6Qi:۱bP8L"jԹMUSTS*%MnI!x q/+oDӸ'Y@ϴzx9l$T-Cc.'\!rl X_x0铬s,m>dkNhu/Z"K(BQ%K,1e%DXZKZ>yn0 B 7J L]oK_7C{> endobj 7231 0 obj<> endobj 7232 0 obj<> endobj 7233 0 obj<> endobj 7234 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7235 0 obj<>stream +7Hx7\`6?of Cg <9,hQѵSUlm +xP\pҥ)My9ƒ̭~3Omɜ9̎t$!`~axA |$ VSpyBa7V)#7ĊsӹO~bHex_;+^o^ +ν쁭-DwQ4PP>?V#K- Ё[s8k:AU9}I|O_?n>YԉrFC]IwMK*(FlH+i-4S QÌׂO@R W4p-탌8˕wkLIyyLG> H μpG}AWϦHKQ`_t_pH3>^{T$%YvˈN/I 8-pINSW Pe}-.W-F>W c$.Tb\amFH#rƚ_3⩌-9o$;6ha?{B܀2 +5aIdb;rlk>p"X\@H/'8 I/21KЗsr Y89 Jz\`Xm4R_5^y`g,"vjCP.K6i:ƧxlohC?B@ǟ#]}F2,mpPq8h["m} tk)V 4-5`G}?ȿL8"uaj ,thC9ΗODN6$Ee%> I?yrTYfgᑢa B쥴1?)cׇ}c&F/CAX=eTG\MT{bJ;}!pL)Ρz1 `)` +:0郠{Dvv%)&Zs\h +N09ڔ/Hc?jfzyŎ :C:3 +endstream endobj 7236 0 obj<> endobj 7237 0 obj<> endobj 7238 0 obj<> endobj 7239 0 obj<> endobj 7240 0 obj<> endobj 7241 0 obj<> endobj 7242 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7243 0 obj<>stream +r [g(0`2{ꁮfm7O8릀h)]LAf$# E%v)E[ +0w`HVqމ]>ZӑTg)5ӎ>d+,o"SsBKwnl}XAK b%HᾸթ֥C<;_5+@RyF=dQ+EYMQ,H@bVN%?jpZyf v!:!ŰJUdsG~驼k'{qF@4cXT#Q \S'9k0Avy.+X .@;æ)K_^Q490"N`OA4Q9<om쭳)kUbֈelE] b%"aE]82cD)>82As[^)bB +kW{wH7ءBcc39 O`@XS/dYB(SRYeT|P{=elw5v^'++vNć~ + Zĸrka17]nFDh3)04 +OeEf *=/1@-4q|4z%5G> L>IRۗbIY<>ך'̌ OƧ[5uR(ջ0=wrT6mzd1Xh{&~`3@᳛sBQRA4|{-&/_[+|Cxj* SKsD_$(7;'g-Y +(]LӲDN׀B^=)O (^B\ Qj }ڷsQ /L tPwCyvb1&jDh*u͏lļD#e9@cWA𛬱gzI|Y:}=jH0섁pb|?f[nyi\G߀ۈc!ortOtk!+KpSpD(b|kȣ +endstream endobj 7244 0 obj<> endobj 7245 0 obj<> endobj 7246 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7247 0 obj<>stream +pE8rRgXBC2]ݼ|[̝>J^(r | +mu\-3 yFz|狟|P[UGoDPZ}n j: .{_Dn"pzmb"x vtsD}Y4ٻ+ H9+!=U2d$D,*]-B->ʹ܂4&_LTsLG28kuXQ~>5Y%x8ppg"6/O&\*LklhqG2 +G_9ct]b1a:-!n5X?Xs2&Gs 0"TT4݄kfN- 2MӸym1^ܖG:MWAŋmċS;ٿ?Ե Eje Ma3솎y{Џ9;!R1 U+ BExi)Di5ϴmEP `s?(;m&Blad:n2(\2Yw5.Qn`ZR +^cRYeTCf/y$ gnԩ][\akϊ&"8ơtodٳLɾw9Աzt ki|l}RJU[%)}VfusE6E?y )xH1k+.ѱL23gq/ X f=Wl4F*v79Ά@vKV߯='ZJ=]AO((0$ɲ"v_gq -IelKs][4U O~x'qCCD=GI&cwvy?6Co#řuϰ#;}:IzBe&޶p,=oGM_GV=OBhָ_n~R^UW]g$羽 +endstream endobj 7248 0 obj<> endobj 7249 0 obj<> endobj 7250 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7251 0 obj<>stream +_W}zH,V@3ADL=Y,!|ƾ𮸣Ø.-K->j5Z"Y-̺ aÓCnpߪ1\Xuܷ>?쒨kRLNh׽iuj~ D~U 4 PUNoiD? #s '"=Y֗u17sYbAOWoV\XQsgvfyH qrjVT5*!JYQt6 fpmYm\v'IJ41Y8T/$0nȯM77il7> L'/c;jW:3mCd8\z/%xwoJMaX^\(QB8쪱 +i%e‡ľ߇՗?(-Q#) +x%N}ymΊ +*zJzUJXz௕^Zרb~؝l|Y0eDalP.F?Ѐ9r"r$N_c%::g"ٰw[r-DώQ`4S3w'~5 T_;Z3[%wԷ// :d`8 ^bfZUcB_f R]|?uČ_(y ޞQ s*N8>tgԒ +endstream endobj 7252 0 obj<> endobj 7253 0 obj<> endobj 7254 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7255 0 obj<>stream +eK*Si`XtbC|xh 0V*xliЦOѻ,o0QaΔc 9P_P_VOw, +RfL欄`bbiH1qL'?xi#L4}4JRO%SԯNv^"nWWB"%MRmNi3v?t;CgtUCv0 ׂ)ۋ6H6 {NunvBl`}oGqw@=gFB_ )z_K>KbG1q>md~|I7E/qs"_`#}u{i]|p +oQ(P'fn7=|W#ΛGݰ`hO6w?zkȮZKw1'_OĢ 3ڧɲ<ꌉőOW۰7v^בֺ-b:BP?{2WwL*0F(dxkrr>_I6p;i[*)wxG +paLhّظvqdı(Ϳ$J~B88nڇo{ĤoOsI~Po76jd L>Q`h2Vn3>Mݕ`>9S5=20>"ve~;ji\@\ 4ظkO!uFC=wW2vb{#3$]pm[>$}horb 4wI ,rn@9EC&V*W(X|i.;;"O }x^v-TMNɓ^rq +endstream endobj 7256 0 obj<> endobj 7257 0 obj<> endobj 7258 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7259 0 obj<>stream +NdvC,Ij*,X"{4ѫ;vrP8݉A?s+zOB\UWb.R-7 ˟NMX$U0܌@-f~xă N~n9m||d^b Ѻ'9L  +V6,HV>|@;fҜr0A2 `szI6YJd<8B) ꭙ\$ +oζ~˱tHq{I` +`v8EI<]snymd WM]shѥXF s9K u"f=‹r&`3]E!YdsWQsuƔ.hP$~|{s\CLdBIsK?_ N'usMD ^=N:dPH]LƧI=!8ϝH{i&zOw@$0EE2PzBu ~*g4+885((I>N 8nJc b>}xuXL6լ˒5 + .N j `⣀B{I/6Aʲ(L܇ +xь" +Сq-M?ᒊF~d$xsR%曜M5, %#i9,YV5]= f{^dx:Txji ˼i[ut&ACd}4'IE Cd3ÇZGM5ckgaiN?!O/JΞy㑉A&'.)_ eEX2.3A%H0:v * +endstream endobj 7260 0 obj<> endobj 7261 0 obj<> endobj 7262 0 obj<> endobj 7263 0 obj<> endobj 7264 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7265 0 obj<>stream +f={V,B"%kQJQ.4o-Ut +ly\;|HZ5R*T'sU$Bi HCHo ,206ƦqInZ뙮ծ,Grr':]Dn~>DZxvSҢ8^W_eYjkPڎ=m>9FK_Eg"{%s1Oق\ y(Kzy)RZtZ:&S)^[9`,)G'C9155kCPe˪Z+\Ƒa2Y}a1OeѕKiβIMvJ#L& ڸ2+,y_25W>ޛ] ^ڿE8a,ِL[Ui_Dz|2APU:eFdF]*)N`'z.G}M&n^O-WS)++% E H߇ ~a>n1ΐIɭ>@&ec& j4=B&Mpu#x4|>5 &FK2wf.cTпYxlefB>oZ{LIG x1]}`š(ݟ+?~VaiPod\k@4o[䕡˜ +4h$ Hs" <8^OMdɒ\UV,\ҹyK},ɗJ G+@"BX&[=q` a=czIbQT Q?Ow/J":Mi1L_~d +B=J{v Lp^ Ҁth*kW7]O/9]d#-y ivT:O#g(F؍ʲ~ 7 VowXD%vsnSewl|o ڤ>ŗv8@|zGЛ2ϜVLj$nrQV^zS$TpF\s(¥"G[f{ +iXtP@Hk9ª)kZUt(DIX ?i5qාkyל/]o`Ğeki;\|Sº +endstream endobj 7266 0 obj<> endobj 7267 0 obj<> endobj 7268 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7269 0 obj<>stream +}o [k{Ԧl֨sbuue8kڢK +eYv/.!<}pXPIKN%x+|򋈆+u(-qN Gl8\2t@҃* >z('V̙nl:ިYAY?_ hvSdt䎮Ĩzc?[@}B9Z}3]jgw?tZ޳ w|3ƘL7C[ B9mHpD[0!XW?x5髦M|SErAtķ0]ɭPUSZh7k:@Œ{̻pa"~~:P“ g ?aĞb b,&7睛I=M3QPs=g{w0/Ձ`mx65.sA3ytMptKZ\%65&j>fǏ, i]G>0pđLI [nϽ.ǡTt)"tC}ђ+muҋᱻp6$}١ɟ^O'q?J8yYh-AD59ѿd@OЊ՟Tz>e#Sr5IbKM囖~UT0CCm_9'lY$J:ZDcDelmw@^vp>t% L0\~D_DZݮH +^x2󉏭ͫmm` ^f7]p(SWǣJ0&ptw!NUyz[IT{ݓ\`[= a>Za;dUM.I-EBvwk-],D +/. +endstream endobj 7270 0 obj<> endobj 7271 0 obj<> endobj 7272 0 obj<> endobj 7273 0 obj<> endobj 7274 0 obj<> endobj 7275 0 obj<> endobj 7276 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7277 0 obj<>stream +QDg\ŁB͌w^lE bKS0uw*%,5'%Ѵ[p .nԜbUXJ{@s _3B!,͈U擞A)/\:Ag;yvu:ʅ c G(}kNq;E?Ɩ73cBpUIN2YGyz]Y=&?WFjR[C2=^SM/p)۲SnĐK/ֱQ̺FdM3(rwCp@Q殿t9C$1 *oiu.v( ݸ$J*R8Bɏ|1U@jcaRK".VG'G'7I8a.1&Go:تQ09#30 +њ1v߷ȧj%G34E遜tҦ ^91W;|@"/NfHp{9!~/t!GEH;MHC~B6Tu785x-:6P"G_ ^`,Th#sѲCpYDpn|;(9>crg ŜHfr{Щ?^cKi; >pZCU\We>G(@.I8 Oj| ۜdZnzd|{sŀ(^0݄ +I,CP33j\{1Xkݣ+O`)Џ3+E%).o"ikv3KYxG3`+53F Ai2>W%E+ +endstream endobj 7278 0 obj<> endobj 7279 0 obj<> endobj 7280 0 obj<> endobj 7281 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7282 0 obj<>stream +Mt9p</.:mO,;U^94&P\VMz:|F`HЙ>3i<f-IJToذS5b8kTr/do*Qo*+f:{fQug҃*zAC%[[VC^Cў. VXפ%ه6pрfpmoQ*nȨ2ۨYJR xeoIE5_XisV nT,cjV%Uxy5&㚃k/\?l.> n[1gJ//Mam0u;TP zh%L1iĞN>gPGbTȯT7T^ +MSz9 yBH2#x:crgQG%{pWiMa|4z`mZ Vzqr ұj ˇӽ`9 yyKH?BѦR6%ͫE:kF}vY#$X>pn*Z,#[^Aky0w?]F@D=mي (:{K' U 4-UH/8ܥj~0W`*n&063 vÅ=l/mlE4lkRsnvflQnD3NuQ`uرY(.;AT`dvѣ% 6˟Xe$TqCoxxox1"┪m\Tl:II8b홚<+T"?6ت5p⧔M_?H ;n5j҄P& +endstream endobj 7283 0 obj<> endobj 7284 0 obj<> endobj 7285 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7286 0 obj<>stream +YuQ?S\ff[ :0l 7&O=E &cZ7jD<+5cMkڵu[P)WZ7r/:Y3B$ +IG'ⓧt׽ ,ik"$Y!.IV/0O^>2WzscE;ZD3%jLVK׮pǟ!E@PE1/>P3PS~E&|ڒ((7 +gۑ)PX2ٰmAypCĠ#g]`)e FyN+r%њ +endstream endobj 7287 0 obj<> endobj 7288 0 obj<> endobj 7289 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7290 0 obj<>stream +@W 4G݃|\ c8^SDUЫ uE#ETiͭ 9n"R@&Uo?ܴO; Iaܡ+*neR_|+?$ihE>lx JuF+ol@mkft~MrÎCodbڥu+ {\/ݟ %?#Լ6b{}XS\?i-@e8el}mؙT]%mNcLtFpT?S,62[.հ;B~9ngl!b4QlԘTh%Dୈn_[QOTonag*iy+ '^ӱ7$qF. oo..Hߟl͏hK?G/?ct"\$wQc8Ԝ9*qQo;mXX\$=?1 МG}ZQ|a]*jR潇T0&uşsΞrl <9S)pљ^;yOaw\m;>6Q;E+w ͹f# +& zb(nG*(0#yar_֎\#n\c1癕 g1x5,B6O= %Bka2:ށuw$x ƨތ"݃ ~fo%2ݒ-!SD>AEuő &%|Z4qązzn_Tn|-: ޗ@:w ^CVdĺ=|0Ū5`wT]Vb4B GQlνcr_O-xTxı8slUpM>_ +endstream endobj 7291 0 obj<> endobj 7292 0 obj<> endobj 7293 0 obj<> endobj 7294 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7295 0 obj<>stream +үMHO4u,JD|*%Wҿv,HE#a׀ +(M{'c LH2ooW'3Wu*i^A-Q&ڴ5b՛Jz(̌q ^hߪqd49D hgzSzwq;=BM5D꼖  G󉮜D}ʓǸR`{+hm gj@qƑ^:b0s}^Ki aHp i lULKACz60_R'ڭ[Dm$U:Z,13b'ubCL6V l rRqC UЦg^O<|ly0MdlTplkcE蝣fGTzaI =k/'I9hӋUv1oki"@&W ImIdt.:MP7Bæ ?`J̴&ʡ=iZ|"A͞*(}ɮxV`݃ݟ\KB Eβ^`jh.r8o><>a4I_{@*)}lJ  }dv Ǘ dPO}{ O$6Typ'ՠ15u:K#6cM^0}El-9T٩SL# s #؎6B0uu2ŋuA^V:R9}t["j/7oeӇwہ@E67ENYw z{0e6}-hoD GNV!RO}}Sr L`$z]/^('Ï +endstream endobj 7296 0 obj<> endobj 7297 0 obj<> endobj 7298 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7299 0 obj<>stream +J`Sq{|QߦPbCchE-IZl +X_Y@ +&$1T>+"fZ!\XFG#3* ԇK5Gj4<])91MZ-սV.]ylf2J9W˘ij +3Z`ת9`_6'Ɣ:WKbmE̶LRl&A7ioxD*;8gq,-$vO7znF>(!NZ0ey֓v&Q!}|m]>,r 57-۹.E_ŴbHb&o598# Yh 5h\Y$8!{NR*+{Ef  FKLUgӛUC:@<^R`N\TAv +LFD3X v:[MPxӿ7P`hW0!zh%Z}y8x[즽Dt9Yu2G,2!o = Nxf8Yk̑ۖM8$GG%Q 7}84XSksMl&&ۚ> endobj 7301 0 obj<> endobj 7302 0 obj<> endobj 7303 0 obj<> endobj 7304 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7305 0 obj<>stream +,dW&sBc2XMpcbbiLj\U‹`t +|OyD\{4s_Tc<ߪ@JR-S쪭s2gþZ׺Ӛ1I'mC>k]Zv紗UyOIo_<64~]-ulq+֊‰gm|!G'LĜNvϸp闓 +endstream endobj 7306 0 obj<> endobj 7307 0 obj<> endobj 7308 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7309 0 obj<>stream +D:nY?피fؗa<87P{_7 EAz`<1f)5 {2`D ,ܜyFIV5*epe84'kAcF_h;gWoYc rGr)VT7zVN^XfcWS}(2t6Ә{q 4T4Fz:j 5:(pPnZ4 wH#P1 +KOdjcz% [W/Ϛg.չeʼ2,J17Y<ˈr"*dHᦡM$c%,`[=7O `2+p-U/@r>E`ZfũW =WKx^ݞvA;$d_vh F@50|ݾtޥ0#3ÙzeeNdU}K^Hǭ@` DܭI)3:ܶq;wO6Fld!d|fz 60}ߵ I\]=\Kx9)}٤tIWS\daE+/ۖxC d|AS{Sy!w"KVg +endstream endobj 7310 0 obj<> endobj 7311 0 obj<> endobj 7312 0 obj<> endobj 7313 0 obj<> endobj 7314 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7315 0 obj<>stream +ӈ +ggl\4D{E |Q\$L[\b/u-ft]:WY勹涋lf%_ɱ0sw5peWl+A{(ae`X !Us:q{m֝(!S² ٌ`5=a qLڠx*5Ybۋp'N"{_ DN{`)+?hUd򈙬=!gY&.TT:y#FwFWy!̞=GFnn0La8}%&'bO3E}XFh +AF>;FX|H(p3%#(Y47{rb`7z#~#Av-[9HƉ\n,Ps_܍3~pi+,$Y^"Ttjt(yvܿ%TT+*)}vߘ3ع< +&zwPL*m0r2S>-ZLiɭI;LbB3~:F bm"ra `ZD()s"5>]&",I2Ko%MD{h}:j>>5C&0#NEt~b|M4< ]c+gSZ&|ҡwփM)GP7{͋N{ˀ?|#nA6p0Y9hv_!sObGC >O|ߛzMyO,HoC>xy}r[_ G R/bDOrdqۏ^ckrjG!]tSҶw۔lI$VZr\\%wNǐ,6IC +Mlr$ A*0mggCcԑ -]* *VYk7C+Сde\ S]C +6[ne.b԰|֭ MkǭIKV7,0SsdK, 1qwϝ_yT'P'aќnN5@;ֱR\d8=@_aB 8ζP|xvI$D ;bv΀D0Jךej<w[#ݽm +״ }]c;/A#P)fr(Aafd'RWX]8- +endstream endobj 7316 0 obj<> endobj 7317 0 obj<> endobj 7318 0 obj<> endobj 7319 0 obj<> endobj 7320 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7321 0 obj<>stream +q|hQRYõg-f/x0vD&a]2}Јpeݜz33 +YLUL~ /36kuXOV'ts-B1 r3IG3| ?!f9}. 1SpNZ<{fט(tti볉Nbw.콌X1ApO i/ $ϒIա梌Poa,vȝ{%(T{M&0Lcnި?L|$% )}"Li9$ΐ]W؛g9SDxS4+-e{H2~}/j ^U%еkg(#6tbkv=?ʬ׭%5q VBq`J10''i%ĝ}U:Ғ"(j|XBCʤFe^T0oL`"Knjmಬt.ʈ9 +k{|C9jmG<pU9%*Bߎ(r.P0]EFyҴceS(. zi-`3% ½E+zSS}p,n.X7ʁN_)gVΖl, ߧ_^ (I| ޙ{o +q0s~(̂3W +endstream endobj 7322 0 obj<> endobj 7323 0 obj<> endobj 7324 0 obj<> endobj 7325 0 obj<> endobj 7326 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7327 0 obj<>stream +,lїo`גNbOTxrTAk4q3)A_Lr;NISPi}>lcNF'feH<86LS H3b½t, ]cPdlSoLxϬuZui +iAuu[RR&JHXB[rAQ 㟙cF #?R}ho{KzgQ(:eJFkW{֧JԀ8Jv"߫kw UJ{PW OmBcfmY uO*:kFFDla8^w9>黛 dqZ$J]V@]9tgbBLeŮ#1 z>G$&Vb#PU[[hX>B^|TW@~˚\PKcT6ipnLD;{MWP;Z%B;Tp`꾺rs Ԧ; M-b)}M+vȵ2z_۷Ӹ㍙ѭWO*IK :#A~.a/ +endstream endobj 7328 0 obj<> endobj 7329 0 obj<> endobj 7330 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7331 0 obj<>stream +МUqҴ +1Xf1pH%PV[G3Z-XM +9G""_×ɶHu_fcl$e,aO?ao&=*?+ ;?&J▐`E:vXIJ)r "ҿj⍲On+Ő=-8G|04-}+0.(TƝU8d!/ z"NJeeµo%~vM.M|] "S`!exW\I +cU0) V-uFY\2Ly8(qT̓ F,J.&L/(hiDz[`x +zz榻8@1t`GT3 +"D<y(B|QLP/94̖M#B]A944?0-Ϡw"k1穢8=VdĘTr2ф;/X}*"ߡ> Ng5og]$&1TVK4*A1Q 6%4}#[#G>. ERK~*=ml:>qU78CTXWYLվRQip ~c"kfѳ~Uh83Zk?#Tև)?r +m,pr~4+KoQNL8߯ \t +fY48u;e{rQԪyeGrk6 6d@]HH=cG*؟LOdi|6q wȭ @3+ |@ 8^E+ -gJqo|:jr@7 ReuoƎZv^P5rFuI"cA >_Q̣5IP^2ӽ7)~VDbQ䫯,OVYf*~`6zVlEY+dgRKF#5cTF:yIN(q:EˍzQ?}> endobj 7333 0 obj<> endobj 7334 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7335 0 obj<>stream +qQ;XH 4/Yq/Gۘ㦂~= };dǥ竱,9 ń ^[gPQ[ftM_8ssr9Z6$m簂624DJKAelN(mq؄|\VMdpC2D} +:lԅHЊ:p٠zjg$[B[u?;wxnˁ C򵐰 wI&)Q={ ^J7C>߫LrZSW3JUjd4*6`4O+42P-&Eɹк #KWIĨBRF}6(4wyc&ׂ"QIalqqbNqKFF<ءt:q@,X'Ny%{X)(_9tC^ga9v)O?'{E)R6.;L;=>Ԍ=j?bETlpkX]I{)U**5ml T -z foIkwzW) * +XfX9C~Adz+^DckdȓI׽ +ħ72C_|w0t]i_5[rk=r+O`f!^r!n. iZ9ZNhvrx]2F5tD)I>DZ$ (d Ws:9l/T߮8B"Dy\83qBo>Kk =FagNPPsZ3XVsR8tp"[ X:X,۬mJWzu\˜z ܭu^N[qv##Qפܱ A(DV5ǥ|{Gi  +Z0H:{dfZ (p +-8`S0-2ͯdY,7IQbJUn6dX 03']ʓn[`~aϐFʵ +]+ų|F/rTVٗ~N#\m^TH>&4@3IO3t7YLn=}dN"Wim$./׈1r1@t$E]2*/(68VǫWwa0Ol`y5NR[TW:NX6 :Y@Pq +endstream endobj 7336 0 obj<> endobj 7337 0 obj<> endobj 7338 0 obj<> endobj 7339 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7340 0 obj<>stream +( ǹy>=#$WQ +\#um7`NMieԨqmPei:0lU.5Q\,C0=T_cV~dGZڱP~ý2 hd +jBu BGx+4{PChFqQYC @/ 7Bg+gS^=QܗqY1:y=$6f ey@0KD"O--fFf7 y3*!ZH5Up[#@t7~NX۔H-TA(tIn͹ +05/JKEgtN=sK^V/S[NtS&(C:i ڔm@ae9))QY;uYuB77-D,9WyM?bnʈ_0}vn( y׸a҆ >_"9sգn8D_#W?&մz@HЈF +[r[S/ f\uQ A sXRcU>ٟUx9p6RNQawxtK [-wR\ o-8. :¬OݤX$I귴.>E !ٵ~ږkBr!ia4.V{Iu96> endobj 7342 0 obj<> endobj 7343 0 obj<> endobj 7344 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7345 0 obj<>stream +t値;(ti{9 4IU66i 'ۻHo R@K|g("$mRAyj:N9J5?Vǟ~}BQ79E#/JO=kXEFfE#٠8PxKz em+緉U+8h Ѣ+~SDQ@Ajm&]S;"";WCCt_<^ &0IyRF!=no{܏O$0js(A( .8߀O(/D%+5V1Y-5Tģd6a%}S+'aעG7MѶuny-jB 2|^11B% Cv#ͰxVw_)g>;NI¤#^;PDsO+Vp7rL.ۢiپ~(hXJUM[+,^a'윸 z,6RNJoj7KbZc +7j&> +0$Ϡklg~SP&Pyٻ G~[H7e&Wj*yV" *1* >5ڗuByj1؛D?Dӑl;!{o664i}~󉫽L73q"0/A7aEfnPg"rX =8J۳@)BZT5ۀ3݄b)/JAx;(|`?Ս 62|[I6INzΝA?a>ӹpP)"ѝm-1Q AvHHhO+/<7T=%Ic?T VY'tJy;3beh"9p͉kIϦ20`kմB +endstream endobj 7346 0 obj<> endobj 7347 0 obj<> endobj 7348 0 obj<> endobj 7349 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7350 0 obj<>stream +R_rIܟF{g|pstvJSA{v1jnj!҂Ƥt)MxS6~[I P،Jkog"3#Vwewުb׽ +JsI'3a,T^EmϡVzf-)F0c!s^YJvB_ʓ$T5W([+|OyǴDUxԝu,ſ~1|!x' +q/K BI0nX6 , }/:W\ulz6|NAg oH!cjۍ?>E©S*82@'&{}>Zfm2Sïo?o\ s bRXoG3o'OMbSBíy +uI:dD_Im4hY]Xq3YP?9/f07Ɖ@j/h ,nhd\T68O[gB0<\GTAI'}"ӐrY{Wc}i欣 ^^mkJ(y M~EKUmмg%wRchC5U+[e%xXzmR". ^G=t/.Q?|~ru™ h$͛4fzr(sղ͝V$ +endstream endobj 7351 0 obj<> endobj 7352 0 obj<> endobj 7353 0 obj<> endobj 7354 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7355 0 obj<>stream +"++?B/E'$y,r#XݼmAJ6 ֧t=]$++_ǧ^ <y[bzB?~L74A4 #Nr(]1dS.uF1g"aY־hoyLdڒL2Dlڋh.96f4Eu)FPX.pل\Vtı: +!)E=$ó 1@AŁ2;^0i@錭+1XuI2kA o/4*ܠ# N߉Nb4`D'ehBDkb@;pݓ-nuGB|M^obL<m^v)&O5Dӕ 0nQ~RABrV̊ʦG<Do08A;9t'űx7_^6j ѽ`ξaDNkg.tY@vQ翛.kw A\aS\p.###^r+l8,^D g S~y MW.Z!CvEUK݉)u +endstream endobj 7356 0 obj<> endobj 7357 0 obj<> endobj 7358 0 obj<> endobj 7359 0 obj<> endobj 7360 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7361 0 obj<>stream +zWGր;y(1(i djht'YpERI1>V+~y6:V_Y#;0<+{R:A^ۣlu0v[W^7lJclN.LāEJpٛAE8¨aCL+-@89\D ڭg (&*ԻkXu[I@+J\E>] !/Fs-CΚт>^}]L_NX" u)28Eh" r~FS;D 1>sR}1~Cnf 6S{]y +QKHuʠ@ֈ/t>`wdRԪ]ݑ#ӻ+JYCI]i5/aVP'uD5 vXN\2 Uʬ]yF@ݩE(*a1yO34qa.@Z=x|ٖ,׿W0Țld/&~P_K*ـsl Hwg1x cCl o_B\Y~EIUv,+ziɽWFp=_c$A1nE{`p/?W|{z~֦TڿN/DwXy<rZe AB!'E=vLk3*oCmQKʷM\'ؿ|QڛEt]nwd=q3V |lhe;ÒKHLLbEt.xo& Q}CF}6Yx,ED +zFh,d0)1.nsUkˋXiIf;4ٯSM)0{/If9@ߟd`M,P;To)_Xf )%t ' !ٶ>$:. V8ՙcbYϕƿQ};'Q-ij$>Kf'PC VӰd;;9u qTIL@i(2YC%ltQqB7{h ?zTiӉn֬gtkMF&$ C(+ޥͷǼIl^li[ȺE,QyU|릥ܓOeh/X$vEI#Mq/X*;_ +.%~लŊ5}b)# +a`x6?XY3$ȣ''(a{VXX͍\{'~-ɏY1iw.Aav:T&3z\U$^X +?w1 +ARQci׈L1gb@! oI1 uci3 ͓Pr +j93-L_ F0A\i6{d"숇VZ^tmȸ"}@b?gAavyKo$oF#l:01vƳkH(U-QSi&=;y$ҥ3?WnZt5Whv#d +SZ塖&JUC?"tB6,@ +F3Gy`emR'VpBY{nnc:hPV=I/4:.Bv bְZ?8;w=ۏY@A]˯\弉X$j5@)zWF '^>ۜwqbg aħۿh7- +endstream endobj 7362 0 obj<> endobj 7363 0 obj<> endobj 7364 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7365 0 obj<>stream +E@20pJ`1iY󏡫n0,5OAg걄G|2o?ΣhYbJށ5;.ρpGg1IZPdO㐭dBAyQfm +jx0DZ9NYF8h|ea] +Sʗ!w8j0%'(nHzp,?AzVy #8 PTکj0C;wpǰ+$^.7y\ sbfg;iKN"jݏ-%v G;3, Lz3;3 &-+x8B;nΞ?R +ƢHV]"}Obө4xw{OĜ d;`:@Jtdn-=5E*"q +Fn>3'Ft1#JyiiH)dKwsN={vHpL!ZÙT1<ܒݱ*rp+y)H Qrۧ5JH(y2EUpA [OEa{ /6?lف`vB/K~_"\`\|Zu:kz+} =mS,LOYݯϔtR5l8\6pYCJlGFѼ}"L)T.Pl!fgoKDQD.kT`F.ZUS.p|#,-tC+ I-^`/`S-ӊq֗QFCaf#|TOYr0rS:S}__tCrs~y3bxIş{]ВĊ1W޾iЅ~}Lo.$K +endstream endobj 7366 0 obj<> endobj 7367 0 obj<> endobj 7368 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7369 0 obj<>stream +8Kb$Y>' (D1`A-Bg:Y렉A_"b/:Kݐ;Ce1ON ރNL#QguSv<^] \$/~/ z=E;aKK73Rǡvœ{a8 " sr"ܑbA|~A_E]%J~"܅J!'C%gcmB1/|dY 'rwi{r8JVa'0MggXYb|mϯZoS7듶gSaDxܑJCC{0W&P9qp@F9d?ɩHa$Ϫ]¥-"tqE|1"I<~A?HAnӌЏۏL*Qć'g9R#1Qx[,)37=g&_'ѐ)$Yy%qP[}FGLxM#*7-O"%=FɧZZD1/74\Mhx(^):Ô#^,h;#DE_wv[zbhNX +N7$2r Z d2}E1CFIyW 7E\h9sV2/)AmЬpG IrȐ!v/2!0# +05f jj/mb-hv3iTTV1CﳶH2)1HHɟ:/p30Hݼ-Fi,ׂ> endobj 7371 0 obj<> endobj 7372 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7373 0 obj<>stream +D(cq)vMR"J]LObu˖!*zFg5^Jwӝ(X]v8$539hRIMcBOٯ$t%u]n`<}v[_R 2- 'CIS-b=~5 tX*1k7olMF&]E`8 ϘƽnSko4JA5-"iͬ+,J*@¶NS 0A~{.'Wq?\`9؎; /+h~3]籊QB]n.iʘD&"wc$: + #xn9ϊ4&UWyj>.uh#M 2E:F.QDu;idH }ҶG?GCK/5mW{JTx}lcDV\c sNbC5B'|9J;9%G;toqH1}]55x_s9=nH}.W*tN@ܺ!R3(5"c?{Q\}C6 K?f0G'(ş> endobj 7375 0 obj<> endobj 7376 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7377 0 obj<>stream + gd%*i.#5+a";q=oB`f`wf& +%4؟6Z wtr1b}sTC0hZҞ)7{;z{Y)[cɛU, Md,6EU7dUWC5El"ڶ?Y4\אm; _q~_ҁwq5:{#^@)̟c(k,zxOG8$~EjqK& ǸGLg +^*)H?gv#m@LaIŅN#r8s z?|6 N8X3`$z:I̾%L&0х/>bOE)-0>L|h=p۽9(^'lu"$sbճ.fij]D= @QLċTT  +f;F<ɏvLu{xE +:8iK̆弇g;N1.|7Ajo_j*!4-fȕo!qOAΟ_3^c\( cA;!0@> endobj 7379 0 obj<> endobj 7380 0 obj<> endobj 7381 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7382 0 obj<>stream +IءQԧ{M[1o4is@rL?9<әĔB]cm +^7Ě=_^[:1YC&UsTgw'\@72x\6v*:;j$(EQ fE@O)9uz:6mu2n:) O@zZ[)F$᷁f:PSU3!*ma,[KQTAGnj{ŗWD +Ii=(Sͣ-{/"b>rV0ѕ||V]@]b%1,4ߒrW4@l/B2աP4I<ʼ(`* a!cDiy6 Tp3;ײ\zFRQk+4Ƭ?怽0k=_jfs. aCxz:!ͪ# |RG$zGatFrm e(-96W:5 tSm.2KJ([.S'c$0MԞJ,Zz ɳ7lh4$L'SIVU%Z:8vx HB{;0ݫ6e +*,pFjO(N5N[^ C[$`?V#7|S4?.yꜪ;p +mȑWS%e1r+BK_\6 ui El\Qu +⊎ 98%*ݭq3W f;6Wk9@Hhf97z/]H[.oC7PZ) c'[6 !,asәI]E[`ǜ qTJ'+с?+߹Q"] YPA`&Mj}C' ݢ sIhNM}ʡh:rEZ1oTҀ/ۼ%ou4n NW3%,&jUx%0Kz|Tí_ +o#/;< +endstream endobj 7383 0 obj<> endobj 7384 0 obj<> endobj 7385 0 obj<> endobj 7386 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7387 0 obj<>stream +Ȉ5v~~*afQs`9>)Ej;Q2ϣ)/%GXG4M|Hj1Аsҙ>|!/aᅳ=K.\лn1%Tx ZHyW51:Vw;7ZJYsR6@}z,pT'!ϺP}lԗJ +X#?5R-*æ~7Z62i &-橸]ϖcCCc=~1!z ~0Q5BA9B1jw?oa] %u0uۄ]UspȢYO{J{HX X &ƣT?;:4it.ERlBOqr\edH9[84(ÃG\8,DƇF|Cpyw4̌)|RޔKzN@S[j| qO#x}DymB>">3+䘕:6uDbIhQu7n#)j+E>Z؊믭M_;kA\oK:'B{砄@BCӾXK){ X&<9\7ھ.W‹;`Q~-QRLuaÂ7_Q!J|PE𔜌~tp9X&sM7~;rhecWO-JeՏ A̻#` G-J +$Ŋ U.5c4u}!8܉Mʛ;o4:*Ԙs;av%bEP}Sgp(-~2Iw +xnXΤ _=R8ReIkc 8>Yn ox \^;yUعz %Qj%?2eXY+% +endstream endobj 7388 0 obj<> endobj 7389 0 obj<> endobj 7390 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7391 0 obj<>stream +b28Ftg zusTzAF7gZfqb ( +粛g'}PD믏[нe7QrZi SkLaxݓ6IM΄nWü޶*yc;xlEu{*6J}$OI'd1 +WZX&?8]2 c.d" $$$ۑ{%x],\;<]ѡjH p4&m1PVqz&aâ 0F j*bmiBV ՏAalCln`Zo>lWvL NrD{,]@"Xelu~֪ ^V0xiƬ;& G5YB--bj/^΁m*Ilk)1bGdJCἌ .myfz-`b * Y]Yc@N7? *.v^79t$+ 8|Tj@ca0sME91 +v~kx[fMQ;r$pJky}iXpʞ5ç~/Íɟu.\'vv:>'NuݾSy/JؕLZBA(W8\o=q9%RkV!o^RHRa~A +8]Xkxbkfw:=Ax7Xn !OoAnZ^{֮9m'{ts aBr̉sShM}k]UR*Nd3[G'Oʁ]VDد/$# a#3//Ű=^(IEw EX))몬L*/gCK6h9Zōxr[.ÂoQfq>cXy $LJ,<5)Ml̊z +>r_~ĨαQ~ԕ> endobj 7393 0 obj<> endobj 7394 0 obj<> endobj 7395 0 obj<> endobj 7396 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7397 0 obj<>stream +p(88 /ȊoG,X% mYXA*(Um<5/0bR@w9E+Ӽ췼}McoC`%\ #\ z+ RR:eJjnڃ;s tG4KUFƊcHMqBfp ߦpoPNEg#-hD@[ j mOÙoCa!Tl3aΎ5S9 3{gG#`s5m",VLj:/zu'W, 1E5ȬҢI?ZH$S>o|:PV.iofX +ȥ}dbM~elwtkRa z#%%3VCCRw7WEESLtl&E|hC,O՜_Z !\8.t}ĐjcmCD55syk/Env(vGSݚG6RA/Qq禚X>c%8F.~^QlD? F|ȽjBW!oC>m?2'9=&"c'Ԣ\?3 +dz ^E1̇ /];BE( diP J"FlקORIKvޕ?Ԅo-l~J%yI.E(XlفZPmiy+X=}FrKK +X_tDL3E͂^imwqAci~h]VlU@- MKbP@5fIzl㡿mo!q7VIa[Y߿})n+M18=fɡ⪑>WNfײXaWACkɇ$# +endstream endobj 7398 0 obj<> endobj 7399 0 obj<> endobj 7400 0 obj<> endobj 7401 0 obj<> endobj 7402 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7403 0 obj<>stream +j  @aն꿰PrQu(y3s-NwNWv*F⮸ed U̔0Ƙ6IX!.&`)JbЯԇ KeFzta?& +d{Dn~Iu0 sf/hxŠI6raz =`Bc(*t+krܚ[T\-G=k3W, Zdnɫ;˵5#5V?K3: , +Y*-S?av9ْ7sW1OŦK@ngQ!S58Y&F X0[w/Mq`U6lL&DŽ}5V}C+<6Dtķ~܇!ROM7'ML'=WmfWϬ] *[aZL +endstream endobj 7404 0 obj<> endobj 7405 0 obj<> endobj 7406 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7407 0 obj<>stream +/vbSLr)O3YD!İiEYmY&tӛ=1$nqU~9"Yx螽T1)|i-jտrLz"񅚻ׄSj#8y5:r:q KsBxg&?,f[k%H7Ԥ^sѤqoj +g}çdK 3ds[B U /`F@Vߑ<ݶt܆!Dg%W:hXP-S_GWޤ gԕ҆c}7T; ^FMPlA~1qð (pԈL?k>ex F]л]],L# +Owtg@1uުW2a-~[e}|>NC\x&,>\c6gPH )|d2/"{P{a,*9$Q Xf =zmkƑlq/KO;(ұpq % Ո)nvZggtL> 柁sHH`j9 Z UJֶJcD3gww*O4@3}Տ 9.i.2%B@vP|[oX).*ֻ:eKnsh`6&$v"c Ih Y ++:fl +3  0'F0} 4%pkqȆ6?]:5L'!B"d}&)1^0r*}Nt  +endstream endobj 7408 0 obj<> endobj 7409 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7410 0 obj<>stream +!qlS@Hd'඾Yd@+;|5&?}#?|yz~I?&?F_?VT) s2:< |ϼ +aZ!3NwUooà=I,|)^Ǧ m +kyiŜ|(T'[cOIΆǩJY]W_oF*{ŷEY16iF@vEvp$PR{?,):'i/V3AYnpZ)-ccș=$HjUi5ZaU黒Pv&ٕK)QBIm̂7) "Տ{?0^ЦdWP + c~LzKJM񓸬?r + +endstream endobj 7411 0 obj<> endobj 7412 0 obj<> endobj 7413 0 obj<> endobj 7414 0 obj<> endobj 7415 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7416 0 obj<>stream +E3Tb;YrqÚHQsSDofʄ]>Ym |S yev1|WN&B}~HQk-uMTg_gdm5`1_T>tⷿC61HɡO É9,#}km9s~n hWu_6˳Z\3faǚ<}uV_5|ҽ́],iN,fgłDxy{rhT[EG". -H:TKKLM?a Ѧ x<hLeӡUb ^e`/Uyv`I2ֳA-f'Eˏ4.I|_-&GSNegdx1|7[le;\> +endstream endobj 7417 0 obj<> endobj 7418 0 obj<> endobj 7419 0 obj<> endobj 7420 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7421 0 obj<>stream +Tmq +g'5_ liAj 1e:uE=heDDn68!yGԏW% k"E(@NT Ʒ5]r>CC!=9gݔ;􅋴#Uƽ^k 7uJ*:$I;1Ȭ?PCصANk@ES,-ma?\4\v̪}/wl.8lHʶp'ko)Nח"^b2}˾#t,<-B3p&$/xJCzj먍n@3@VE d6ko,usj3)Yog"aP'ə<"xDzIД}9j5΅Ӽ _-_+.R5jKUy%A̍6Ά:JBfc4Bf-J+ I(&hg}[oh,> +1erTC^&`W/Lp02(ގ@5PÚ%LxozTp1"ԭ`w^7߃Q6 +Mm5 lǂ>]Z_g*5n\qa[ +endstream endobj 7422 0 obj<> endobj 7423 0 obj<> endobj 7424 0 obj<> endobj 7425 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7426 0 obj<>stream +B2os "TP Yvq~Tr-G0GkiYu @scˀ -.);i%:~OB+:{['ӞM>7 񆲜0+XX +zONma,%,{VSԮΌWʩ<i }ai~Pyuy$KvV_a#O+4tU)QqV..=:Z# AEPU:h3vZ tۣOl ǞbCşKg;)OsV/u=#IGEd] +ʃn倸_'EC-U +Ilo,Mv`zf${ׯ<|!85h, +Xy4+C= 9o`B=VDF\=M7N+%:]UBC7dC1`̐NJe1ib +SK[g[u +endstream endobj 7427 0 obj<> endobj 7428 0 obj<> endobj 7429 0 obj<> endobj 7430 0 obj<> endobj 7431 0 obj<> endobj 7432 0 obj<> endobj 7433 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7434 0 obj<>stream +{c7)S8 GqƃEHu˺ + (Jfڏ8;Gz]9qcNq4zDns >S "fH;Cx4)=YiEjfU˺*{`ʥ˰?>\acS84do͞@֋(V)ٴ=AYLfOR + ?!LRȩ|`S7 +uv(OTK@ ?\P0xAiS[gtnm7'\|vՑ5~zٙ+"s +`ҽ~tT0&-><("+w9BxQ ?rkTyBn;=hUX8y%oeA E2C|$LgL|*ԟ +ab/ip[)L@ +Ab)VU(Ox߈4Nٮ7pbh kl,ߊ֩g,Uª^Wl7qpDQQH 5#:.p"iQ{܉֛W[p;@t%RH%MQهwnSRӏT1|7shB4BJMPxRFz)/ \m8\ +H%➙|Opѻnȅbibx{M7CL=d|NЎTjho<%| }]J4H _ߞ08TW,s8 +_9SV gʗz:wmo>ia1yu#rO(pJ < +endstream endobj 7435 0 obj<> endobj 7436 0 obj<> endobj 7437 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7438 0 obj<>stream +Z'pdo=m>b܁ Su.rH@ͳ9WN+l?ӹ?k{JS?V`S0Ws(n+-U|CCVVs_,=]wp(7~<-Zqn +U.R5!'\z{taU^dwDR;-9`@z3Dz 1\V8+ "(wHhޡB -5&ߦ\d~ VYLr% pa CXh Rܓ?D.9,{$,2쨏mf$M_ﶸd=z}D459[k߆_ѲvL8&y*+/'6ckK܆&hx/l + jIз'Sڷqdzss1cHr{I6G6q{^H3#d̅0W= +eޔ _W%B| -r9+QK6s͏U#3&!`Mp 18iVpT;`$58={7zp'Qc֯{sKnFfpe@FGt~K(iqp3|h\qx%2.d4ٖNjl:4w;d5ݙOjtQ~GONV +06[I һpŋ@R}EK+/pth.d'7~B   ÿiP5J=?i|4h: Hj +endstream endobj 7439 0 obj<> endobj 7440 0 obj<> endobj 7441 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7442 0 obj<>stream + ER0pIg Lp9Lk@/>\/O WUTJww tȗOY:xz 4>4xDZ~55SMLJkkѰ]:PPhXrgEbW4ꯩe.XokHH/{r3TS”{I=n[ȻJ7/ߡ +b aj։K HLDQXOz$3@mZy{m 4SPZl#CU)2()謹%ϧ1[$Tsh3o-ɵڼUT% w*=+$88ewwmLvF|lQ!_XK#$D#R=V3t bDRa0g2(BGn,X-a)N8$"˯ k[.SWD4'\?Jc$ }$dZdKxVD4 +endstream endobj 7443 0 obj<> endobj 7444 0 obj<> endobj 7445 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7446 0 obj<>stream +5BoǣMOEKz^֊Jg0ҷrv }('s=R$_Ev2P5H"@H/ ]Zust)DhdcEϡ_bwkIv߲q^SU&x6Z;5b;xȻ*;a wÃWT͏ӨTv`^l.}-u_l((R`>h냫;ɚKeȸ ҩ/ ɚD1gaED +KhN75I}U4k%("{ o}[p HfV<+2t_I7z + 8Bx]iMBubF69h+DE'@Pc!Fd-Q}:nMċ&uָ^}Qn0ce6X5nA_Cz,(׽]:CP[x2.4& s$}m4/ث)IX\!w@זLXey"itVWA2g6ރDZ4g}O\,H1FVK/, u0"h2g|$K,Bt>0h{uKXc"kM.R,NsmCJں ;EK\L*qRs?"t?zq} \NE{f`%،-s26,~u~S +endstream endobj 7447 0 obj<> endobj 7448 0 obj<> endobj 7449 0 obj<> endobj 7450 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7451 0 obj<>stream +hr&JNiVjOt$UۏH^Ҋ b$╅zHr8]^F̅/Tb4LfD7͛ZTKv>kHJz2:Y7߇'$M AW4{6ږ ccWBbz~V@ \z&~H8i}YVUƨsЩUVF7*0\0^=4+4=. uQU};Vw%A~p8V:]iq(R{ +׷ +W?෿2,=-)m#mKJASm]dI?ƚ>+ܯH @Du7z;-35 .]NldPDe\e?ىQdrCW||W1 +&s""ezJ!8aM+|SZ< 17(hpz!1W+%(s` 4, uİۀ9-`߰W wa B6YyKp_+E"oks%;pOTֆzxq|-̊$qz+)6*G {"1DPؔ2dk_k +9*?.tt׍3=_~澙/=,W4&GL${&Tj9;o`cmƅe_'HL%C%m֗ =XL1t3p-O"= +0\N]}l06 [:[ANe7U*%Іe<o&}y.){Ggxw2tX,޷$vDZBL-j v|h#Nyyۉ?<3_XhA:b]=s$mX"%4:CbfWHK*cML 0'܇ ;F{Il']xOܡ! a;K0H +endstream endobj 7452 0 obj<> endobj 7453 0 obj<> endobj 7454 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7455 0 obj<>stream +pGj=D?u s#yP-mHro&1˭^|K!Pss.(/ +ӣe]X(Ur?[H< E +Clʂ -6Chغ"df}dP"jOE*`|lҵ.Epdz+;Wv`L&[it7UJΔ'uRpe^73(Koy ,szo|Y#.aڸh7qHVmH/H5WBqɄ Ljs"M;joFHOuņߤ۠=9#.|)+jn=|Sd g.@4ӌ}@t1Y!P{@ `lFbn׶Vfom'qrÒ;CA>ыEkǿV5UGơ`(lgN~VF#8R?:p )%ZYCSNfhue84Op}2 /sW4bdd 8 +xqQoA8|ȋGf-l썃_QK5y_oU 3٧.7k3 +endstream endobj 7456 0 obj<> endobj 7457 0 obj<> endobj 7458 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7459 0 obj<>stream +XSd;KnWFi#|}};:7sy_:  FA1 Q"jpl4_ +Yh"[Hc;`- )JMiۄش?";_/2 f -ū |hr52ĸ40l}i=.z[|/ۅ9~AjG@, eΔpuf'V#xQP%8~2GQ+qkI^H{bK/^3|3RT{{슅LlF ?\ͧWL9ϕP}{d JlKȣ`Xq knix;GF3  ȍAIqЭAOn%8x٢6mt3S{pM(D8IKPKEKQ>v)E:䶄 8xSy䈵{Vl7F*Y-5_5b(̠eI/dqv+oPf:/B.;ސ -U"LE.{*[%CyIL6\P).JwcI#71m'+1 @J8'߫毕4olx +endstream endobj 7460 0 obj<> endobj 7461 0 obj<> endobj 7462 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7463 0 obj<>stream +Z0s< '?>>v~ 0yZ$[O5 <ܟ] ˙v8ڨ_ň,V'%M9^Y1fJ kX(O[.ͪ +Rx; !%0[=t*LHZRUՓK)‰ (D32$/z_XC'#с"1jpʟZݮm0"2?:1xCT=;4!?A8@;N%50ދ)0.V$*HK@jb9JO<#]8>:ovv7j|m^\&zYz)Q@zS@1v2/겹Nk-V%{: +xwޜI2:[d(8{ +T2.2';l]aucDtja|ǯ8MGi>paC„P.at@&M$Ϟ\GV蟟x"i> endobj 7465 0 obj<> endobj 7466 0 obj<> endobj 7467 0 obj<> endobj 7468 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7469 0 obj<>stream +, +tgzKoyܪ:FTcaF>jIBXcDkfreőM]7U *㍂]Y7'^@!P4iSQNcې5Rz>,5Dr Qi\a;RB&Yj +]a\u4uތ%%,$Yq}A2]$ sDFM"p/p'>RN)sC߀t o^IDʅL+ɝǼRX`phuo#"F=q@ Ԑ8#@ +YVRrCh7INk>PZȤ]ߟ>pM׫I *Vcө6x(v +7EnCrNa߆*?…VoGECHF(CS*&覃D/ l|N@NՁu.aO0[5pmGwh31Z` +bWv0ZORRtteC8!E9HdCSNܒW-"BNnѶ@]3.*X V߆O }~,_)OQ!&9EN +^Տ6 P~= !T'oTb?dT!>;%iP,M._|_$mjL50SՕueKtb>Yyi<]+gDEHkeh7@R~GZ (ཬ8J_%avL1RAMJ +?ű.[!EgՑ @m[Sq޽+%6x#ehƊ6nHLu$C-X",!P)`n ÞU7ŹP(5r;\E(熄є<#jԸ@#BsP)0bόg- RќI2YpI V/Xw,k޷ykT*0_af:_A 0D|(e|YCmo2'6lʼ/$S%G S?,"^JG;N܁x6mȩزF^qa6VŠTGY;Cr^ +endstream endobj 7470 0 obj<> endobj 7471 0 obj<> endobj 7472 0 obj<> endobj 7473 0 obj<> endobj 7474 0 obj<> endobj 7475 0 obj<> endobj 7476 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7477 0 obj<>stream + @5@]"LM @:ECQg~aôAWV m;X\(6Yd8l@JO[V?kZQqp.+u +$V! )p4\Y9dCsotOMwE>`zVr;KLƾ;h ]Qs&Ѱ :ES[wZ#SS'f"'hm(16Hj.J'GStK2*snJ;!R`~w?h4|V2s1:@3OD*aNӲ9S I7y_?Y߻d(8l- lg`@A:@D@:#޵d}Y"%\R_΃c @t3b2|Řz20V@=!ѻcmq`{rg; Kc3b З`LΟ[OHGX:zSAnʨpxY +t= 5k[:ұ#vbz + MKpT7 +]C#P|ݺIX$mf!FS!26mmq mVzr4}.-n { +px(<^W̲6 IR4[6=1/{\*wAF'Z>)EO0c-Xf{l6nƎp 4 _|WcZʞkez((ո=iV\*UsL&/2 "Z&a&pd <'QI͒r祰tCΰL iOΔRd(Qwqv<~ҋb@C/jXua΋q t1G{-ȴ$d 3])w ί> endobj 7479 0 obj<> endobj 7480 0 obj<> endobj 7481 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7482 0 obj<>stream +pbmp9kZj9I}ԎPy/~H<V'X^W=#? {4-S Z,['R4>7#]/eQ/rҼnnr\Br-f$lorQP\:*3v~0 ס#+(L;P⤜&+]{~I}cQ19R扎oäK 됃R8$NqUd/OpltiC*jRAw(²%˺B{57gٍpD ptۆsm!Hs^T$AFouM&?T7ITXwnd:V {%MCc4A[ +U]HK]o'`]tQY<Ep7|Hs訩sEz(/^f[>ĥ-\kT-,Xb+C ֜QǁK|GK2HaP\hnT/1$ ;8"5̣%(7AI +L|!/_4їp5⋛%/$?hJ\Ѹ${BJej*"uCH6սj{.{Ox8 +[^ܴ&Bv:LJ[ߜCg%tvv C\Y'Wёds+;Mb;CxN] ;B D^O8 +8wsdF2=Dçod!,:{b' +SެɅgBR˾*3'&U!94)%iN5\4A?x*[|jYW.::<(s̼!cba-+˼hзY~ppۅV(k +"3O( +endstream endobj 7483 0 obj<> endobj 7484 0 obj<> endobj 7485 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7486 0 obj<>stream +}Ö>u#tA+(G˕(tE;U9fG ̷_JB '' 3-%#S{%D rb .l45@#VG+-:iA+3X# Ͷig'??)ojcǰګDmB;v/c4,ᶘr';q1piZ?+w 6QoxmҸjlNr$ 0IEj.>63U<lUQthMJԠ},]o oxǢ +ô@bg}H3 a \ *9&113&>۲FDCTX\]̣3K]d<_oޭ"$F1(,D҆bMB.F(!hic"; vu@]#3` Wǂ4|\5c*o5M-B]\=HbDZU#U» +") 7Ӷu]c#yu@ =41m;-Y.wKaDN,f%.]w-k}`~Rrtve ڊuEyF.h:Q`yL8gmxfF͠#83ڄ){ blBI'x*h-"e ձv -~s&Uƺ<_?chmyLˆ;9ljS7Y%5vV[֧,^aK&|PUc%/ǐF U$Ktktt'w*Pf;.^LtO&[vf/m҅;,biw 5bta8Dpuz[rt.ĕՃr1#olĀ:=ʌO/+6-eKz#e3]L%h!Ixۂ'S?= A2 +\@[# vy1|Yw,czu{T gy'eCA +endstream endobj 7487 0 obj<> endobj 7488 0 obj<> endobj 7489 0 obj<> endobj 7490 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7491 0 obj<>stream +{g(E}}[Y 9ћL:δi -5[k>2ywj0pem]"dI?Fַ-1{G:zC+_!D#.oPMQƤvsMSьfޘ AԓHd΢6}b?#Қzielk-5X()8sQ&+GbDIM,~W ruvb +ᾰMiP/P^'z +}V_A?`ILJ3Ngxn'h)Ԋ+(Μ\/ _]uKa>v4γO Rx-8 vRbn+Gp)#{(3<_޽=' ;r#R`{^0">MK=ve$s:xޫthhA-H &lPuhtnv:xhoS4nI}YIko.& "Q1U?CpΟbT{jZ~(BTLZR@ƱCM4-աBd-{^C"t~6Rg&#vZWϛ2\uP 1dx'VZ~KX%n NT}Zl$/?O*Nz4ekj8 \z5@72E`܇$"A4pU8||#O]0]Io_)~t6;${ C3nWZܶjzR'1j6Kr8c ٢H~4 [&(P6)VCAȸ dG0s0:)AfpuUʫ<8zJCL~N$694Rp+LEw5a$'85\k/r2 +y`u?F:[MTKY +endstream endobj 7492 0 obj<> endobj 7493 0 obj<> endobj 7494 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7495 0 obj<>stream +-012Lzr´4p3o AԜ-tyx@e+7mVŤʒ)98bfo(E=ṳ}V7yo d5 LJIj)qԁ rϳçR!ycU_=X= +s +@3( KEPЯm1-,Ⱦjdkgi"v L(S5#}J+ϐ+kzo5PBv`31ݩv%cjs5\97D\^+3 +!k3鏞֩ U~fɩ) +L~oq `5_R]"aȡ~Y.3Csʣ$l:}iNZNFAf]܋-`ԯ1OKiAK_m)9zp@ dQ Wsב,Z֗sa뗡2ukOO40vjL^vNL68N -CpW~uX$/dfoUJu[Qͯp.pug2K$,c1O[>"B 烞s2窌ڭj:pL +sD*1ENkE~F_C1dΙ7`Ve/# /LA#9<6;ߠ2tt9\l|_.}M7K߿b, `I Vg~YFU .gUT]mO +)RPuZo1蔻5.TEmFS8t:"@zrw5/7]q|v cx75r&\֦y +4 +LaN"q~n"dIw Le61AjMT^-R> endobj 7497 0 obj<> endobj 7498 0 obj<> endobj 7499 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7500 0 obj<>stream +9B Pc3HW:ʔpz9和_pQd $0J 7^dž G-K?{uJ"v]l1j M٫Z(|bS[71DV }>k+GBIp wֱhjh"rel+1#OiUcm$kOFt`Ɋ.AMZZWo2>-0r'4NK$>lP&7:ޛiBpѡ XG`2=rgPܮϊNc[|FKXfڊ+| Z+,нUs\!m3)ʡ'9Pͩxu [LN}DW폿P< (*8W9c:s_5OA(7_^ b. u+]-Ezs%?X:=Rjm+=Ekq#܊W=ą9GעDAdW,"8lj.(1\J`/ @^G}B|!|a>3kR> +4떃k4RՎmf\Ä I"Yg`ߣ}LfW{8ҡR(^Ot 떄"gmLAMHd; +Wƶ;a_5RJHm95w']L34ڟY_TG6NRT+Ǥ49Mq+`sms^Zj:+v//|-.U \Xe%Ề- CLQp^<;0uE5o%N| NUDVCm#YMhebȮ8G;8c9?zGK[J B 21uA +endstream endobj 7501 0 obj<> endobj 7502 0 obj<> endobj 7503 0 obj<> endobj 7504 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7505 0 obj<>stream +)7 iFtӝNtFb:(]inb..lU#BR :8JʙU"߷4!z!vLʷ 5Ćՠ?̠-Qx" T_Gj +J`֬qشp)A:waP휘Q4x͎."͎J B\!%/w>=h "dm5שּׁS3-y,RIs} +i\>e7aN,x籧`أT}jTSsOd73 _LXΡlISMO7)!Hr,5SKRWN8 +/;s6+mE*%R6 4ӗu/ꅤ򪻳 +4u"쮟r٠(JڍXmW,0)k!Xyt4#w3/J;oVX҃'s/3Ձ y\|CpKpWԚzM=-!V[q!~eT +v&_~%(L+IĖ$w!r*8y$ ҬdmCWZҲhPQS|8C~,W 3τЅ!eh& 2ҕ;n͵H4j +endstream endobj 7506 0 obj<> endobj 7507 0 obj<> endobj 7508 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7509 0 obj<>stream +wFuT<910XxnL(SnI*g |>I(Ud +q9#`*3+Oj֍$ +PY` +<6<`ު9Yh۴SG7MmJy- D Xn:nrkG5 IUT.۾]dSgw> endobj 7511 0 obj<> endobj 7512 0 obj<> endobj 7513 0 obj<> endobj 7514 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7515 0 obj<>stream +ϏNվEE4SVx]KKz)8z2Ц5-7,|Z/<ȁ)`fe '7Jmհ!-YC(kWuoN0j,lI;zJ5e-F⚏0cxwt@DlpANm\5!&Ȝ;eح7ҫe-, 0D-j`YeDk͠&k46a?+kOGin:70M\9\3n1T' š9ef4jQ4bmk$3G;j!bH$5yN+wsgT:^iZ޼!<ՓȘ_gu_3WPzU.*e `$2;4&!qu7O&x_?!_l{hĊh)לN<2|F.~3eb x,EǍȢL4LukhdIjqGSZbe&3 + #`IDdH p̼TYjG5@&'0Ũ &6F< ^Po"6=*KV9VЬN8wSvs-'N[ZߏxC28N Wf_633o~X{5UU;WkhBe:I684< SEx6=3\#Y↠ +H[4r}\e)A sO,4wf Y>hs \16A,T  F+&|J4Ε'BPyc~+h(v$Ho +bP8N `͞ {}F)5~"we}~~XJ J>~mνٓIr +! aR9PϵKtbwĮ$kEg.x5;ц\*}Bj ւs6%PXm6g!i"XVRM'2@FÆh' 46FxR+ݾk9@'> endobj 7517 0 obj<> endobj 7518 0 obj<> endobj 7519 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7520 0 obj<>stream +DK3yӞusyjWn +o2q@H fF%#RP±a~0rvܳdf+/t#)^xElQ1+;ΫoÙ<2e`de0 oW0\B%qR;6"/N >{Si4a|*gtMFۚ7{-9O޿QjH@]8;kTԘ}z~ .FeѺ&u4`X`y~5b%֭mg]K~\i&Y/C- ^}'ʒUFbo)2Gs-6Oyߊ7Aצ TwM_%srNG~z$Q6Lq%T61lv1{SncǁO$  Ͽ]3BOd/$v,?6Ӡ_DUmB,tb}j+V^~:vC9PA+yta\I> endobj 7522 0 obj<> endobj 7523 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7524 0 obj<>stream +iɷs'0{&s(IO扉B]~|1+[ MN2E?<hb8TjNMg0 Sg>¤>>lj39+zr BdSw`b+<DwJ`[;.(uc(uBLgڬB;@ N570cL&b:^R4LH +DX `[w`n1֦1a +0g'Ԛ3 ZEn ֢ +0rܥz8D><)=,5pe:wDj"9;#s0FxHQ<'ğxM?;ʏUu3w]8]$pE(MIujEb ߬#&34w7}->|.]ةN54 GL4pJCYUx'sI\PE$ t! +GME,u [0pB&e©A17P=-UTT- `- A>f0ւ9Ғ,QWJ4@"6*ocI1Tً" #q"U^Xٿ7׉vC. + X' /fU fiu3H  kr#X2ɉ +ӷ + $E*qZu.M9,`K׷a\8a_!ՠ(H1j0 m|^x-і1`hXYHmʻD+'N y2rL̩3GܒX% VwH+ ƞŰUXo߃$|hO{,1ۅ;͇?貫tb +endstream endobj 7525 0 obj<> endobj 7526 0 obj<> endobj 7527 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7528 0 obj<>stream +jӓbbʼ}- {I=.::jϖsM $XEũCd!;l>sMR+;t_JwýWT [hQpAنueR*_aݘA0Q!ԋ75@0KXiWe8x]vr>RYEtT- g~q&Y8R +߁US$U;2 OaJ_/yC3ψu} XvYل5~,ox7v%:n?'`xf Wa軾Wc\ } Y= ٣ቐk*`+o/-`Wy 9jسokai9;˳Q_~% m_Tnv}-[";Xn2 +b ,Fm7/]/r}Bl5tc zsL~ agVSsjcMF ~^dt*Yf_Td+a09=(̏l>XJBL9c ͢u$pPQ>vDBq"t>}+%v*3N]IDuYfۆE8=C&XugyY^mW*[8N4۵%- HO0E1 Ck6R:B[y("2|D좬fVWB ƔLH/2> + +endstream endobj 7529 0 obj<> endobj 7530 0 obj<> endobj 7531 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7532 0 obj<>stream +!-iTC׌ԄNm sV>TIJdEBR2XBNEKMia/Hnɱi/ QW`Kw},黢lCyђgORB@3OmnN%y!2ih&.+ԲcD( ӌC?4awW}DY`X9'cI"}E3P|ֵ.1/( 'pcпR<0+q"{Ì} ]&Ͼ @ls:=w'ʬ/m%яuƓk,'LsY`*i)F6en'zU='tuUugd̙ =bש|b"ljRG-(7v'AYd[si"02Vֻf&A@ 6WWfЗl$): +"(޷tU%*`Σ%ҵ ꈄig=uV*IZS097dxq8/†;O!BOs6`5$eBh/ 2sp0N@FM(E~crrj",B*)֒Kż!lDi qX pzN .0A17^> endobj 7534 0 obj<> endobj 7535 0 obj<> endobj 7536 0 obj<> endobj 7537 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7538 0 obj<>stream +ZYR9ra0:t^r@xBf7Di ",QbծKPYuz|)8'U돳\8K:EsTduؠSAI%&i"cGef?2@@Qʠ Xvݬz:'3_;~>̈́$J.JpLs=E՘B >| Xs=h+;T4OjЮ׺aN6G <6 (ӷsY[WVA2ݏIA"*uje,F\ hgF&X f}U-1д1ZRN N`ݭ_&9uMI)VG \*S1v',!&mu6ҋZخȄ(NI7gLe2`ȾG' ٩<宿9bG_q֛(ک zK 0ЗTug/Fʗuxʹd3q-菛 -:˜< aX_|4R#8g}3 8JfN|= /*:@U4fH5&Xܻ+}nL0,ů:ƺضW 7y,Wr(Pc@OJIJj ir5>&l a~eGȏ+b'!a˄LTuYyN,|*s8X]T23ΏvċB) +I0᪜1K)qt^Y”ݳhPzH#uBA:GHS'y|/^=ޏ/4 'y^jgNY`|)C}d=ܳVxD 4>=HaIz?J +endstream endobj 7539 0 obj<> endobj 7540 0 obj<> endobj 7541 0 obj<> endobj 7542 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7543 0 obj<>stream +:gUNĨ@RivKނ<ؘ*-N;T]7Ɗ(哸vE1PjV IR=~DoD-/ݺqdڜ + +Б lRKF;*diU ^JQlthBx 3E7٭wخ="nүCbϩrh#@u6aGcKE+ʤ@hYl,ydI2`v99q +6\Yz:۲\>x;~RӪL2CeGôEc2P֠DZxA/AX3O-qmI.*tIW1WSB+ja=)r YࣖBӑC؄Ư'k> J:qA~.77ضg xx6t @FPRLVHyVQTB; +;qLq7qDe^hݚܥCw븹k]ueCkFhh!Oe يj\DsyXTd9?IfĘW1?3Ka==؃i ,Iqy +|֪Յi'1G=mH/h3)'*ԖNY=޶L3Kld m;ݻXO@ G{m3UUآDĈʼWx @5xvJN^QNEѦ v{OYȤ_++Zһ3yLU3Xl[Ґf h3F:ۚic.̼L~- K7Yt,{r̂͏EJWlWu=FJxfct!\|' [>W4ܧ]=xt'()'sVY1'ّ j=}NVHMs +endstream endobj 7544 0 obj<> endobj 7545 0 obj<> endobj 7546 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7547 0 obj<>stream +*r;; s'8/Bl{j@O&[ak_[5@w]s ;`Hh, +8LǸ񨝵#mXI9?k9[tg1)IEInMb}n9OgӾߝWҀL/Rt=M—~[,?٘rsb OU6Ui3!u,Z G[Ugeh5%sx7e&i4)lЛ]h9:H͘n?^Uޛs)7$cŦǴ+BmNEWto2TЦ! Wl5$}i&hϺTr}f(x}6Yㄶ }cby,o}s&#Ϧ˰#"F.iX q^Rl;pzՋT^8 +' 5?KPBOL9t|N= muD#\byZij䀆F}DpOפUJffgtySF +]96Փ{5 fs7[IQ3?@c@Иaȫ_ +߂)-/{>*\"ZwZgʘVb1=|"nsj%L&qH99 <7"6r#͘o\K{7 I C3s\mquC6nv!1?ͻơzU,^lB|[m O'LГ$A 7)m 7~.,HBI|4+s2XwX=T_vs8 D* +GxtH{Ǭ92SIzBw̥\]-0΋ϯ4? +endstream endobj 7548 0 obj<> endobj 7549 0 obj<> endobj 7550 0 obj<> endobj 7551 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7552 0 obj<>stream +$->g0M.=jDj*sԮ+IJ\ UY}7 –X#j=k>2֣O(8!wWK  L$)A?-oTDFBaCBQGz"WX*Wt—.;?٧բ첐~q Lg$)׆$o}K?>Y*b`!R?N+%`"@#( ZL%8tT<<7ՀceF J!Xܶ?0.ĜwS2&><*lusYS9zwFTz ̶ gfUdo&vь>I0v0,FB.@g~aiK  }1da.t +Ci4: BwcX+ '>$A٧6yhFǂѾ+_cuCc'rsmOaؗUZ My/_ܸ(ҘꭦA~]*|`mo}? 'Br$}2DT3{څAffE:ڼFk2,SL޷,AJLoy2tQr~u/#S&-IjvXTt4( %ZĜp_& +] ũO軮SMxg:"Y mª5VэR;ҕ!muo?z> endobj 7554 0 obj<> endobj 7555 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7556 0 obj<>stream +ЁG)O2gUw߄MVԾKFi%^jOD,/ִ?ق3İHL +L%B٪\ʪ2ϯ(7 >sA +Mq6%lqnmϭ7A +a +B $JՒ/j:85T%il~ĹZmb?ЙXiQ[s;8D<,'UPcOFS-@!ԋF5j6ee;l9d]%!ȟMb,:mKC磔~jN%[w׼b21ȵ'~ԟ;ɗʯ}S45PGx*raƃx5ޢ@&.'Dh Mb??.tM49Zmɨq7{I#Vڅ?ޏbob`d%X1~Zx(ؽO2@R=F/>m2! xʟWC!Hl+Roj2y().5+SS#F;HVߥƾWл |X +Kuk؝QWLg8:e*cT +Ea%'ň12Pv>hOL~ +y 7HeAvp(q!?6 +b|sAM(H4یG-t,/[-3sXL(H`tf-T<-ȽsC™ʗ2(w`Q_b:phiqH'\ VvK~Y-`] _Vjfo!fWsagה b$Ԡ[ gH-phS +qM|:b hj9k0uNo_%Z1ro.m 7%t> endobj 7558 0 obj<> endobj 7559 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7560 0 obj<>stream +VCgf?}l2bWLкFk~⢂7&pr ]]"^v`j33 B]e*{:Inb?f{QzF' [XQo/#Oͳ%,]cWg8s :+Oŕ Hr1y?ݷ` +Dm9!̆Qى1r\xob)8`,apSo-|[vP6$G,So3sZGs{e*d;8]> l*6GCx +Q @۠1Qf ) -Mb+ps N1"O)?xP[ ڥ[Qo[^kY +={-ܗ**~k`%MkV* ; +Yz8[rUX^lM%CþLfqH/[S +*_" :?~]EH PBB"Fci͘4(Q))̮!2 @ZGR)b +endstream endobj 7561 0 obj<> endobj 7562 0 obj<> endobj 7563 0 obj<> endobj 7564 0 obj<> endobj 7565 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7566 0 obj<>stream +3wϓ8[daQN_sjۇRӚZsK#'CK]1\xj6HU~#aMtip-r~N)u5p)0ū$-/H:3@lV.}3(\py—qư;ݰ{Go-q _|Ju f8qե#ρ\$6T;R +QmݮY^nkp b߻ P@v4h$F6,Mw^enh3Ebrr#\wAFpPŏzI?4֢x35뙺 B)"V( ڰ %9%6] 0I}-(OzʶQoPɪ#Eƽc޳gu ~l2Ղ4VSh`cbb6A;Ra/䯿@YEFgܲ=w(l=;@O]_VRc3 {ė M"Z:܉% ljڵCm~2ֆOє+1?1GL-+cnWli a6BIV%p⨦]o{ p]/f+CFzW Og{${^xtLf9#eF5 +LB@m>+4q̬GB'PI$F<-CbrM.bPbICi +-EZƹLD&(EϩK>NϠr85m}'/wfbe CAqZ@_V5rh﫧\o$H&E)ϯ\=tUUf?ojPcdS">'\Br=i]=;n)- + +y)+zW3!iw +PdDa=1ñ +69[p>dŸ_AR1vlmi'-ҭ  +vRe[u!S=/z;0;C_c6n#A* wɣwC+T[]*sfY rw,# rͼ{񕩂Ҙkm\c)pŷ +endstream endobj 7567 0 obj<> endobj 7568 0 obj<> endobj 7569 0 obj<> endobj 7570 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7571 0 obj<>stream +ٺ@i98=ʶ3XlzztE)X/Ӗ.QE+4Ot +$k[ɏ=I 䱟 S$}<5 +F\W t!G$!]qS!'FE95TW/ hnع%U.PL1TH2܄ EA.m3BwRf3l2ZMW_KvEj0檬2dpa}z-gjz'B +endstream endobj 7572 0 obj<> endobj 7573 0 obj<> endobj 7574 0 obj<> endobj 7575 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7576 0 obj<>stream +0ro0$D˹I{I `L5NOZ&Pki}ii⠑Uʐ&˭LwBluq:V>>W64,ې_ɩq53PysDnBI^}rzuhKxK9wK,A7['隑 m5Ӧ \ZcˀxQt;Zd㻷-O6oXBϏ.5{V:L`Pr_e^=^nҔB$#|B#r s "`b0/U-"W`]EҚ  +ͧCM4خzJ,rj;,B8SnxQX$֍Y9!&Cgmo$"ʆ`,c3gٖ Z\I'6W-A7m)B#OC۔6aаɘ=FcCT3nzs3 PzַUznw,q떉$MCX7=iEŎB45!K=鈑7ya5 5w + >Na鼯uے9:Z/o<aH/;Fq}f"\D{4F%eec F$$KM0ޝ`'UJHoq+{ b.r7hFD"3 ߧ*!X9E-0:O k4UzxhsndZP l*D t0,fy6 .)X,w a.>#BI\D]${˦7E0ΐVinLäW۽17`^ %u7ȵ[5^OD~ᆊx-%8w)cOܾ_`nM>E@doUXvQ&n׹zј&.{ 4D({{ +endstream endobj 7577 0 obj<> endobj 7578 0 obj<> endobj 7579 0 obj<> endobj 7580 0 obj<> endobj 7581 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7582 0 obj<>stream +% @b+?Ӷb=5"""y2B*m^F߽ +@ #uR1HsS*m(RCjbU3g|&)ؗ@%R%&a MMMGŃ^Ao$50,!. k7r0 #^?AzxXZ_yVPڬ?$3MJ?4܍DʝISЃs 5ݢY-GЬP :ʃoFL|R04?Oj;,YYo_ӚZr؛_ꑽX%s=WDi9]d6tDگ(f=N4I[5轲gS?i#4Ǟ r= BUlYuCW\ZO;+^b)!&gsh@D8Z; [MP ؔg]&| +H3)@{=񢣥ŸBEc5͂TuY^=UNA2:<OUel8b2vr됑U)ˍoěj)Lh{b3=sx[+ʸ1E(ptH$wo8#[ Y\p{418gх| FJElaHO74VzHZA="@vQFT1떮eadJYD҇apj5y,#VE4.Kږǃ1!W +޼5:h S<^鱲k.!]ƓXؽ%sm"n5TehXnZ"uCqnNՈ=!ZN=~ӪF_kdN3E*>E,O-ֺt徔Q2k ĕhטn'}͡MlnGшDۤFXof +8ӷ٬b`c$qtֺ7)nT"1]HEdͥ'Yȅ)u?P,w;!&fjoб_lZ1ݑbp k}H,Wႀj#sȸ8| ~YZw; {uN>po3D1G?諘&jC $hx.[{vR:ŘO֢/([c)-v" l|Vo4 ̕,i48)H ~̜WKDO^:{X;2јʓ!-i*Mշ׵F` }>;l}k(],Z$3q&w/dExC6+=DCa]wm탂t7=RyGD\(o|]V 'ua8>oW?b> endobj 7584 0 obj<> endobj 7585 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7586 0 obj<>stream +F\-7 gq\JmDŽ:39d3O߾㓪x&wgvny;Zy31m|wOgԘJA>^C ? ,~=粜|QPY~W](^E=WX>:-wN,́;4Qn(Gb;ۀCChM1PtI+JHp5WPajkq'O0x[# }=۲/6j73xm'tv,=m·k(>;2lQ}HD69wa݅6󲭵7.}sw0)AX&BzWCGmHtJ tV02{+?\"AaQt2Ne#e#p_ZݘBAv 0&]4662鹹)NѠuGXלa{@,UO%wyPW +-p*IuW/ABb/9dBY_&]}8<ZJfFlhQ9_J{կnvRmi|6 يfœ +/:Ly zr$sJ̲bBI*izs}2d^T 0szԽa6Û XU0 0GtdFEvwhŦVPXcgۉ 7@`N=RXLDP Ts.~Ѝև"3PT;=аt Ɯgh2_vyQ$ [G U4n]#X<&)Ad9Y[wFN&T٫‘ YLpyURr+;Q e͊f_|kx}q@P\ƨ⤬>DۅCs+dg;@|#g[Epye*z0ԉC`cmWY!gH݆(u|& FS7M7c8\=U%/`/rpL'nB#Js g'Q 2B2)(f|,YʦU +endstream endobj 7587 0 obj<> endobj 7588 0 obj<> endobj 7589 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7590 0 obj<>stream +Ie*@qUQ ;}gJd!V(]fEN[#ˆ 8sgsbKzC~S1ʈUCzb`ь4=r +D TKU\+6iî^V ]BP+ 5殖b^3 +&>ɨ Ajn}l[I]֕ waѠ X%w]_xfFZWgOSu÷ip)_Xձ ops4tJ@o,V!&a0T3S\׵JnT3V z\] Ψ,(ڷ/$0ѮBIMhĶq Ӟ/v0P$.Z +!t2[ǟX#a=@jEV@& iu-(|͓8G;r^5g{#|#9EMQ;oUh`H %xP!Zܲ2xEes*̗Y\^}Jlb~ Z(Efya4FĈh5Jnngm&(dΌmH k^lIJ+-h|ZUC M]l#^>QQb(_" Pd7Y#o8.WosF2)_|n!ZBZoҴ?B"T'?OcgmDHߢw[upʼn~=ariE̶ -:yy +\JyA0xn0LX3P+mOF?:" /;yTqgeuz94r 0ִiFަ =heYHŬ䬱60h#S@_a]Ѯsgw'Hu{yeݻð +endstream endobj 7591 0 obj<> endobj 7592 0 obj<> endobj 7593 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7594 0 obj<>stream +ST%mAdGMf=vܴ!"4FT\ثpt/$ZC&#JX)٠}Rg(,iiWx1 "p_FXK,6z4L'gZǮmG>l Z\C"Z1 {# w2*#filq,M5^ءBCGҦ"&0R1wI/ $ +`ǖz>]._%\֌۸< }Exau8]?e TrcYP@ìE?p qqq'"@9;MnJAq{HBnA;jiqBB55CX$ (f_Ĭ*W>5$Iؤ1@_2RqHľcm$ҏMy`9_ TD#9uu`UYƆlB0ޘAчO?JLHm#a'$*KRY9]%yzfsqYKߑuN#?:x?^ KQ~aO>1߁fLж>^\+~ӃgCLm],QI2ձĝ'̛Ks\q r2^tąo9OF/5#qU{͈kUz-y‹&MQX!)S\4qFĵ=5VkMW¢NĢyCU5h}֣ -\JG78H֐sI c5?]|BX=^x /HeXpIڡf{m Gߎ{uzfIquQlt~a?_y%d[Y0]Q#^(۞}Q |o zkۢT.̔0Y83.Yg J@&nCv +endstream endobj 7595 0 obj<> endobj 7596 0 obj<> endobj 7597 0 obj<> endobj 7598 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7599 0 obj<>stream +%;x0f-4|}YbZF:Z-2u*|ڽ\LoV:0Vy"8*4[#)qLGHLY9-@n;X4 U,UảN06qčO#F}see#Vd ##:ͶhfzEشPNT>e̾U\ K +n"ͧ'"-*oҜfĝᇹD8YJ-dqGG +)1٭B`yFO%Hȷ"*}?^p0Gv͹UὴI OD3Q~ȋT׍LGyYqn4~32[ۙe{D #.DĸQ2 QC!u+2bSs@<O w!Vw6r/;C}xnUFX;9+1u<8rϠ7{DIOZQsdmL(x3 +ȴ} flEF@&xk[jOu>̲<Նc*'rZ3N--?;E?|ي̓a?T0J er;J5sSXdUZ#gW[o4'S;f^4/n&/2N2Ue3爀g2 j29׀NLBMW(%8I'l6ڣX8n7ۯ/ooҫ}'x몼K!kOJPV;XaMXK%oj[;Rම7am(~,.@jGz-XWZbq +Xsao澐 r;V;jAH>+x)CNU0c.`6r`tЧ#AN+SiIԟ%#]1Kt&2k̍X^Ȏc. ]˺d&3u_ȬӒ%ںiϙHiW ,Lz\,Yfy)bu +endstream endobj 7600 0 obj<> endobj 7601 0 obj<> endobj 7602 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7603 0 obj<>stream +7~n+ RdL +f06_VԨVdLY#LJ*Dv^PȬ04aInk =ntM MQWHcmOC,5ϲ/zLU5#Wj1FsGJ~=GR?l 6X֩HU u  UCIܘj#y]>Nб|}C|w+9YyZ]?jJXeZK"'mvW,0,KYg07b 'ur/G&+|15'S X` 0]7RƱLRm׀ZE;-~?>eXn"}g&q3φ0~K=roa䝬! H$#1ڏ N^2Z!臍sqr(fi[z||E%Pc49*a]tLx |. 8Admy@%1ЩatǓO Б=g:Ut8.J庤<99#.>n7#˺-V_YY۸˵j{,Uc`cq49b%xigݕ 'JY@lAlV]|6T TXF0e5Z% g,Vт340c#w8',L: ̵an\-egw$>h3Sަ4)2Գ,^^F36Y̚FTAPNę @3"!iFiZ ESBކ :"ܣ.M3Nh;~b +E$DrvE#;=vH6L:> endobj 7605 0 obj<> endobj 7606 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7607 0 obj<>stream +:\F}0F CBBnъ G?!!zN]k%sFa4Gbyo؁X@M ΰ x Ã!C1*dM^"1^*omT*ËC!1L1;,ф|-vV֋ .#*;FNcOOpڝq 9L`djyo->|v H6,^oղm@VțE50/Aj?j&ZK/![tې9N*݋pG5|$|LW4`+ÖB<%5KtҦ蒌~3BwÝz$!*nS~26ire olCwCXw#H Gh8Z6e X{cܛOJK [^@ q]*|8CsT{@;Ơd 4;㜨QEvIFțD7zHyN[S`פkxk>00H< +]ORT$}[Ui%U\Y 2Uqhr.'2t4&:+'t7|W>&c;A k7GVlU= 6i@j.&2h5]KMdlS_Pqy ?rՖ+z18-C%][ +endstream endobj 7608 0 obj<> endobj 7609 0 obj<> endobj 7610 0 obj<> endobj 7611 0 obj<> endobj 7612 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7613 0 obj<>stream +^a†8nH +𦨶Xh5c{GT ƗD2|=)pI"U ]@V yq1N)17&_8Ȕ4 +YiPhS*)tt ]'z48sb̮4Z_A'.[IJ[H60hQy(VMGMCjv~܁57O8BG?{5aRJA`Dͯ 8n`4.SGRO\;ln%;ˤ&? /?Մ˘Ԣ_DI,I#')`U8+ߘbs,f/L0;i 3nrB-IѓAʘ1rح_\eU"W2ʄX*Pi-{JqECG2{ٟM4BG*̝mbw_{o7PGdhΊ[8DPYQ { +\?\ddf#9jZ+VYE(8(u 2sx[u {|rex❃':t -/:/:`^U=w "nn@yڋm6^}Ɖ4*FS @^ڈ H' +3iNpH%ԯ-ݺK9^lIӶeuF/ec>VΓ 6#8џ;BTB#'6t~b@9 +endstream endobj 7614 0 obj<> endobj 7615 0 obj<> endobj 7616 0 obj<> endobj 7617 0 obj<> endobj 7618 0 obj<> endobj 7619 0 obj<> endobj 7620 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7621 0 obj<>stream +q.dHY4F{X!` 0[3D +nL~@%#do6~+Ee IKߺr}j$} bs<ӨIaK<\⡭dEߡhRfvќɠW2w\Ok 'OY 0,ڀXsHޔJ!X| =SG@0%E~VW?6'ٔbJy;aCǭ!}DL wC +ZjP$B= +ywi5QKlx:yMeHW2JG[b!)yKފ*KS)[Pt%Ν >=lA'j)H؂4Wv[!?tS2žIDIJ\N#5XcJăV6cq:m{e> [g^U/GnDt`wIUwD`BiԒ^x)/xBq !sfՆʸx1Zr:WS_k'd[j1M9H d?SD|X*tSrCFZ۷K:jCbhY1U#gdoy' pO0bAV݁W/'Bʈ /F )XlaL'b=ԅ߮i"Xv"lm +rWO? >E;k@4]-D3W ȝ }07o)}Ͻqvγl"DC4FT%/x2nQ=J3Je;?EfA kz\40Y>/(m.Hi)XY6ܼ2}􉲏5mR,F6mOjyS_jWn4b | DKuahm5F Cg2mKmnR0DU2۸'V}D[,jJYN;-Lt-q)uT$_ء;CK`+#0׍>OY IueꐒaЋ_Lߵpq05>=+@yF~,͹"$f%Mɒed,:͝#䟼q|Y\ΊŶ@ +endstream endobj 7622 0 obj<> endobj 7623 0 obj<> endobj 7624 0 obj<> endobj 7625 0 obj<> endobj 7626 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7627 0 obj<>stream +.^0RfNp{1x('&gJ}Ӟnl3NVPKmcXdSiR4X混GY &(NA+-? e-4A0Fk3)aY5ۮȻ XEzDKƫ;I=.TžJSOY/k[HACmTHń0l1d#buN^Vޮ,t'T)-' +%J& eZ! ;mQi~qE-v$t2ߪU=$L,mMLDO> ZQw$T}>(&3 +SI +h\庮y0}!xvn0Ӱ)l_Li,.EV1Po$`>wHgcR7SQu6ǡU?Zai4j5]sH/M7Xa*֘n]Thx#`LJcO=g5q6x-Ǎ`yDzG6bgOFq lQ(:cMWH)ggZەZ%\~5+l}Y& +4 2w BS ׿@= 5BmyL<qƌ"׷gИ22 jh + +bxݥBȬpZPh c1-\2 tV9F^A-jLv&%>'8)%PEVC?pҟ_F}ǂbCc(^^5e8"fyP!7hNҾ@IK73.' \xҊn +endstream endobj 7628 0 obj<> endobj 7629 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7630 0 obj<>stream +9bw&`NW ԫoSmxa(9 F^GD%Q!B ?ў\jw@ O^B~*_M53cwHad(#)OZxF=7ZiJ?x:h'l3mno>)xN}C4P|?BU^ZB=,¤fZe]qv}`q"bﰴhk5U +!cK9 +.c^",5F( +:5-|Z +=SUɘX8])`z1Uel,=,Hg5QdICwCxg\|x _ +endstream endobj 7631 0 obj<> endobj 7632 0 obj<> endobj 7633 0 obj<> endobj 7634 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7635 0 obj<>stream +gLb U,R`Vg q*Q,T+t7(fʳ d+(M\N:wu~B",3`h]2)/>e.p.# +14xn6wcAWXJܾ-nʶ1[ġJ6zߤǔ%EKGgafCCKkV?9ûԣωt+B-mTñE4g"xXjə%1Z=^oj#{aTMQu3\U[Qv1tB1Ǜ](HCu$!R>wws~2vZe4[7# %; HC@~3\ q *$(+4TE9JF8!Zyg >P.nZ0.ߟux7'Zg܅QdȚ!oF+UX0-o2`@@lrɃ489U(pv=;)\G=!L 4PraG8 XLJxcFL1?;i7a#LAw>q{P2Ua{1qؾp*{%—}UE@O~fx8> endobj 7637 0 obj<> endobj 7638 0 obj<> endobj 7639 0 obj<> endobj 7640 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7641 0 obj<>stream +!nEƉB+n͉QQ&Qk*5Ϥe"]'3.[+gMw";_5$Fx~c[ogZ[n6PEy4Ĵg/ur {ږ=H)1MAITW4s_젬90H#,EDFV%)u+DXI9,zRtUKgII% "dd*M(l`4ï# ?~E + ^ +u?4-fg.RcZEQV :v1ބeH46V,wе +iťxu2YlT"F[=w8‚ X0ub(nyvF4m'PI?2XnZˉyDV֬LE&p^εf`3AYRbW،h!uj;{W}ڪ^"`#\.3Chq#6]߀e_) +endstream endobj 7642 0 obj<> endobj 7643 0 obj<> endobj 7644 0 obj<> endobj 7645 0 obj<> endobj 7646 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7647 0 obj<>stream +Ç"I4sTfQJʢH ++Q<:=;B*g3tl}* ++ +1IcMBvSQ4 5Ea$:m݀(%PpPN)A"Wk25S60"JZru52\+"l,Ugrc'%_r riTx9_3bX^s.QX&g(!h74TaO`բފ(׽]Ig\b<mnbeqZ +aFWdgDv˶F%Tl 6*}.z^|3}w*O -wnk]&sĒwR2oz?iHOt<!FSZ*Zd[P?TL2ZTc Yt%xxcދo!<Ryߦo?$h/ǡċVJ !oGF d=pO'x#V0Nl3E@O aU/,FboiFZm,4hAW@<0/I<a;ׂ.>Dh5]gs7dk ,z!;VfMM\ (Ұٹ2u-]k8)Bk%m(I^y udb +;>}NA@< (90P%cSs`D[ T |N]1 F('NUo9'V4"ִxAC"%oxH'V|+˗# +endstream endobj 7648 0 obj<> endobj 7649 0 obj<> endobj 7650 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7651 0 obj<>stream +LUBC":^uzW,Ȼ +:M5i8^ЅOD*^]%uBw[eK(gs[7<y؁.h{U?˼NIl&泂$>EDjފݩ"5î0r#|'G<ۍ\"+Vt?0l7уV"]kn'z tF7`#7}z<:LT=wh~p[ F؄bo:\>; +L^'j5㳏+N*XyH b) + VO{tSz'F_!0:P-  +8&Oa&h\O7x̦.c ƪ5(%JJ9%1X>i^{r*Cg{iUxǏ` +endstream endobj 7652 0 obj<> endobj 7653 0 obj<> endobj 7654 0 obj<> endobj 7655 0 obj<> endobj 7656 0 obj<> endobj 7657 0 obj<> endobj 7658 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7659 0 obj<>stream +%G4Ao2]t&~,LeGb;lFDk|Wnԫx;ؼ +O &!\G4DJp ?f'a;v9[gh0íPF +:Zx.kѥ=0m uLaE!nsic- 5 +d^b>5vB +=-{xF]jЈW1C2&fA"PPNAfӠ0򒕽2.#W0gE&{= j`>+CH؞ha Uߵy,JX`rOΞLu0cD8p^ԵD'8zf$urz2,KM{!lJ-,WĂgӹrۻ +2R?VzGԸPDZw㡨y)v?2 ܝ@IH4S9  +[)6>-J2_uD~nCUhCS^FmUS֝ ڪ10 ޅ7^F50\1ߵr>]:V +|>o힝 fºd0uaekOo|(ՖS0nY!hG7hm(~ n b*$c!xd塪zSE&S c VJ\&ASRB*^]<ܯD6yTgYZa&B0B>'w*pNz {$7PY.Av+k"T`i(| #0'\jHܵ<&2h-B:Yщ @V⃖j >tiai@Q-q:\7* +endstream endobj 7660 0 obj<> endobj 7661 0 obj<> endobj 7662 0 obj<> endobj 7663 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7664 0 obj<>stream +U'H +R~Oj D`wf)(ā.߇~0z$݈PℐEw +}a_{!1]tG6h[lCv͡z1قvt]9kX˴ {ёC<8*׻Ze^G1^]P#VxsGh-6yqm +,w#JKӬSpG\Z(jO)۠zY#$ԅwIb7ˮwRhK8]ߪGCtJKQKGQ,{r#%T"7v-VWpT<~ʮcAR|Fi%?>z. :cmsgR xf*|=&*^`վQEQp3l]04՞A.n2hr=5; *q ߀RX q\5Pl@JtR®Q>6L}wiMFQp' o ^o&p+ H = |)R8 FD0RB qF +MJ+ɦu +endstream endobj 7665 0 obj<> endobj 7666 0 obj<> endobj 7667 0 obj<> endobj 7668 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7669 0 obj<>stream +?2-<NWո/c_sgi8-TpgPj'*~,?0'U /z-;eQ:7 +nRdqG\i6nilBDaT +[[BfxX hr=&;pId=E+CV'Lp3Bсk WWK1jīϪDYToX(8\40ˎME|TD}DRda#e +U{T0`CBTɪwDNJGj#JFvXKLH{RJتᑧ>f)Ӆ݋WA zl965 .늨AcHh#r +endstream endobj 7670 0 obj<> endobj 7671 0 obj<> endobj 7672 0 obj<> endobj 7673 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7674 0 obj<>stream +Whs*=h2b24'i`>?'黩EH&t' E Dc{ל/[0 Z{0hpꇩovI'q &M'oi*^zԞd ef1bΰ8_ݞHi K G_w-g\Pu3+LJT9Ysa\Qo(%HyXnq +6~IX oGLx*Հ`P,I3&K-]вݲl9.A1~"xMEL.ܱ`?ŷ1n"1Tȸ~i]Lp6.έ'Ņ$qyi"7·?fKQ 0ge[ATCNCBCs:I^zY2)?΁(S5 %4[*-]q+1h5"At&Rt(8|xspxVHH7IkTޯ_։ԝ9@҆ +ܬq,YH?&_b*gC<_Ҏ 5s@-LE3-w.f PxT+9Fo\C4 "{-Gڸ~n2NeCG؊EZS~-KQ/tLndMm*ie+d_[K†XLKSřȀOexO288Pzgml +W)|PӃg2m,Τֻ,Fzb]J{ + 6.'o1RT)˲N$#f,,=:4oa +%.A +endstream endobj 7675 0 obj<> endobj 7676 0 obj<> endobj 7677 0 obj<> endobj 7678 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7679 0 obj<>stream ++Z ?PA/Jй.;4Z12== }dXyܿ票?lOۍ vLnѦV]YACʿy,, I|!VY 걸9 ҋƜ`#ʇu\*OIw +^|TFmݯQNȽub@!u4Q &,[>5zhe09D%[ؿi0wӬMݫ"\AwjZ#"X?";;J矵;3K + 73zL9+EO& T,Rg2#ʗ1cy*Fqj]蘋o:KDi'/)":eO{5#9>;Y=#0Hg#% (Yc;7Hu:G)߿*luɢ.߼L9)r;GUec/i̯~ױ} DU$fGf`|$ չ$~_P<@ӨU; C#L˅= wP.^d] 5Md.P"=>nmz4},Ե_jf1]U ww5yҧW_x*'*/M2.I[1Ţw!L`cRp,*ߌgeZ2X8)hThv߂)z-]zz~F[_ETOe]zջafq4 ƭq`\L3:c+2e/GT@0#fK[ƃm9RItf )hI6]U46b1)点0OjkL"= 'h齔CF15G$;Q@p 'q ۜOaF~i:RC?*/Q>g#z"ebIq*¸G/scmw|p~S Z %Ad*J20gsgin\@F/ ч) ;pϫ-D9w[3\Pʑm +`2$yO)rՆMpD uoi?曓O +endstream endobj 7680 0 obj<> endobj 7681 0 obj<> endobj 7682 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7683 0 obj<>stream +ֈV _]x~?"Âr6}nIujgVp[Gy;CZFQj T՘'FЇ VH1;̥Ģ@)M-wU{GR 2L6Kv+3b& X9?4¸}ђIM6?=N+Z{.YJ $3 q"4N z:Ւ!ܮ" 8.VXgҰiR]$D鹔HO21$g06uOdYcP2sKK W4h.j+DëEK=v[w>ALB!w$%Bڡn# /`< "@PCWgF`)휌%8u?"t_+ׁקw)Wv܊ (iG:oKq}n]KLT#ۼM3~aϾev.7"{qPc@%%M@+`GzFG^.֜j+ UCj3װ[*2i@ +'Py^ylW4Lrkr=zBUJyQƋa'_lF!8Z;H:Ab AλN0G3ڼjDηnn1&uV]/CͨB3ĊPM ÖA\aW?,{v3 +ƀ4qmڇwL=?o{nD\NXG'K3-Pķxk[QQ6xTz&D-o5XP]P }Jd1#\ZF:@?Wv!jL=t# eU5@=D5Wl2VJK-|$IAf3dثJ)"* +endstream endobj 7684 0 obj<> endobj 7685 0 obj<> endobj 7686 0 obj<> endobj 7687 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7688 0 obj<>stream +_{>񴸛M &Ll_灿!LKE(\%p?ez,[{98uqru|S͜ZݐMc4<*|^'4%DE9l8M6UqCFgPʽ\mRD3ǰ5;t "ɄpSY$r2O,ۼP M! \ray_ 41cŝ3? %^t;s7w2O8VnᡤBzXGz+rmB7@)mxg$q:W eRBKʄrvߢ'Z*~aU!)|((4-:H@xk!"VW +ݾE[_ȏ /°Lz{tF̌[$mL +ϼӹz] U+xId Wk|IW}[ٌU-3FXr pspX + EwP";1lZp84`TwhtHCjjTpMh 6Z=WnXr}Q|ܰ x>gAФ jYASjE 5 ]1R/s+rFc{xiBɝ}l i[BEFHK'ԸP)c:} 63C'́e6n_1}#w"\1m HnHNO&ؙ+.POxRp/ػn!F$.{&ajusr–N4>44$9O4" ;c~h;SHT' ;iܺseLt`}+s}hҥk,QǨ󖀓fhiV/uF"鬗 !؍4lV ?Y+_aq3RF9WX(Txm=Ds"6Qt%}#ݒ|΂;W A__߃W ziW$auȭʯE@qً1Vq|Up̲9?NhT3]dU6E .ҼurZ8&Z^, +endstream endobj 7689 0 obj<> endobj 7690 0 obj<> endobj 7691 0 obj<> endobj 7692 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7693 0 obj<>stream +t9hv Jbvo;1"]"^ȗC-ճ ](F`be* {j2^A?5QIa0*3F>"P }.i ]TX)J<\=W8Uu!%_–N֊ [H},y.:3YKt& +Z>%hҧf;.f|730ςO)_VG-DϲkCbP' yvOi@?D3dvPB~fv, 0bt=1i7T't so Ki>͸VMS@uv_94*>c#P`b /m Xyىlzr@S +Qd|3 DhA$Iy(Ȓ[]mV4a2zw,QHH6&c +endstream endobj 7694 0 obj<> endobj 7695 0 obj<> endobj 7696 0 obj<> endobj 7697 0 obj<> endobj 7698 0 obj<> endobj 7699 0 obj<> endobj 7700 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7701 0 obj<>stream +W;"̚Sa;DeҒ'w?U֒`HÖ^$Ǧx!FC)p@Jɘu5饢s'P5!-^xGQц?6*uQw򓷋7,'] iV:=LpH)n~@nzjd93j>+hP)jnW Z>p#ig-6`4͡`,Eo;GbM;Ɉi-d.XNnt^1 ZHb'3mm@pҶ[?E+)bL}Ȑ20VzR oLEwX+5Ko{Xm#uŔؓ&)1Ԏ5/peVmAw$cH¯ V;-3 /W%x1@P^;Xf;nw {2nh: + aD_?M<=jv]P.܂mjf +F$NilLsuq_*|-n<x^ybJ0xIZ㸌T2/(S;=IHs5a`\r/Nw"qDmP-0r-h(+5z/F ek"{ :o=(1$[ʇ ۼEt 898GZrbޯW!DJ}`1;}z>e9wM3&NݹjqjB8Ӭ9Noߛ_٭&9kND}!fv +Zq@2cU:E{zT|rՏ:r8b3|u9J,F&H_ex}BNLl]3mҕ(ɭ}'{iqQȄE !V:d'R<R2_h8oKa/Y*Ż%'QMCܨf֯' J +endstream endobj 7702 0 obj<> endobj 7703 0 obj<> endobj 7704 0 obj<> endobj 7705 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7706 0 obj<>stream +2e'XXUھdX(U!>vSTu @ 'er33u\1☩jn* ȿuEae: *I6K +7b2&g KB9}`#¥;v+B`ƷKxr:gwҴHQ:fSCXtW|`ՑcR=0JP-U,B\@4"lolo摰$) 7aPˣ? 7lt&Dba=%[Q͍r_*B׫ݙ73dy>WLNL)(b∟)\38WKcw{?6, + 9Ϊ@pX0 QN} yAm/19U^3&וh/_Yذn͗*W%Ya6Y-V!9,ѧ12$>cFe[Y&4$盠/sʽ2%?]$ +>4.Á>EHꍇ-ԏT90J48e5_IKFJ(ywDSrٮBi:Q9TΩEc#ƁB++򹉊%k{KIU Uy +l8.*2E\|p*}QgClIB1Rzh{4'^6W=WCV q63;oY(Oݮb@m6 y*׉7sU*PWh&v&i+G ͥGGM`Nr}u?ڧ98Fae?A&x2jp:TAί*.RIxխN#d>굠>}L$3gxVW$0_R~x܁ :QtFGƺ|.VXdWל#0I7M휫c퍩)rF? +endstream endobj 7707 0 obj<> endobj 7708 0 obj<> endobj 7709 0 obj<> endobj 7710 0 obj<> endobj 7711 0 obj<> endobj 7712 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7713 0 obj<>stream +[,3>S|oNf'^Z0M4'mܞP0!le}5v7"G+?{:[φ~rW`up +̌K{8I?@>Őcm˺6 +D|&9 ڋg34az5̲UJK0[+Dg|U)UJ?ycOs=ˉpmV!/3/e> endobj 7715 0 obj<> endobj 7716 0 obj<> endobj 7717 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7718 0 obj<>stream +Fy"+8s!@MSd p>=*yͻˏGjT(ﳔ`ŒI{₩~lL7^H$ Bh24SM*˖{KL"]شX~v^lٌ$}\B,}oq܁K?c.7[Qk8cKybH=c"켩WEkQ r0>icz@j~c +f#uIt<&P$e Ȼ]8QPOa < |x/Ȧh`ѷ4R +e=\;WcZ =yyX5'EW ơpRX997gQ:by@Yي[-@`10NX~-C,~T/X"{J> ϚlidJۨ%+ටLy,˳⼥mR>wjz؜ѧa\, U]-̪K[v!y^QA<%yŒǷc|PD%=YLEk|wѭ!Ҋ3|nʦ]6_唂b_ZE1uW;s K&m>Ru An^U\r4jimƖd Z@`vnMMP/`c+Yr -T@mb(l>` ' P$a9`f +dt]PY +@n_(ԛoU|CoFt4NZfv +IyH^,5әVtD- "uRcJW-|Aq2Ypc vevpo(}zwK n\.h)|杭O2EA&ya ֯kwviyy%iسC%pߡe!:ttƏl&*W\pv]V?/3|Iٝjfo0>:30"' ̹;,z%L5ơMy|/pfBCe߭Q@ҲB`Mbf/'ۿXfOw_+D9 +endstream endobj 7719 0 obj<> endobj 7720 0 obj<> endobj 7721 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7722 0 obj<>stream +-Vbb-|62v\LD4I;Vf^'t2un BKC-ŷ7;Ro܍w~.y7zi1@؇gj+ D(Scեߡ mVlFyX/ +k$ ʒc+ -u*sOWbp9PBǖBUs_Za Z, )b-PZ ݱ!Odj4*a08EtB'?l[*cUF;-g&Izp͋xJDA!)ܝ(TaP)&UWBӜ H֠Y]+"g;̝q=$YGb"=?G/{$Aх=p(}_WOAS =aع\U[قg,ZUٜK7.!Pů}+32?Rߛ9Y +[v/ TRje仿X=H%)mmRW eB~@q A6xlO0+ѻ5{=cc`A# +endstream endobj 7723 0 obj<> endobj 7724 0 obj<> endobj 7725 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7726 0 obj<>stream +t9@-v9WXXEWG'`'"eA@EԈo6H2Y.X}'=` ìʡfEv&B+knrmCL^'zXHM#sp%[FP,$(v]?w ɛN(eyyhWߨYXYKf D70޴?+hKHUhE~9Zz©mPXRbs]cw +kR_ HFXkuMѥڸވ܅|gSydkBƎ${랆_cKΪd߶|C(d(BuaHzPF+ Ku +}KXJ~*A-?Q!0uIbR3+ ##=/xe*xUP@b2$V[A)c *-'Iv';TYőC==HPygd|ol_, +D &rWϞQLy6I``:WJNd"Z{{w8q``Anp{spm.J2؝yxsg{ޗjWg?I:oC"_KIht+Y,I ?Z^g0QJHvhm5-x:?4⌯pK^R*I y.\ںv4`uu7gcn~7K4b,cT+./`u״RJB{Wޠ>\ +<8 .=D];pYي0O9CSX%stLR<Ƹm7)oorbI bN&BmV` 9' +endstream endobj 7727 0 obj<> endobj 7728 0 obj<> endobj 7729 0 obj<> endobj 7730 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7731 0 obj<>stream +h+bgfy:!ng)NFEH`Ͷw9.!6;ƥW܂P* p,eV T艌F6iXqR=$ +n*=>])BPT6ςD6K8O$kqQN强͉bd3!;4*3@ڊsD*H5y%O0] K<̳6ԡOژz)UKb2/^Vū9`- w&z}~d_<ɑGv8M 6`*URf)U E}+",3jB M>1@}J {CN5Ca~@th/OIXKbmA,νptB}6Yg|>~ n$xq+&/7kUh(XOF OV|[-Vs!}rnξ@9GG#TIު|x'{l +gB>Fi`<32ѧiQrq0eIwKP4# W9+.4L=6ЍxxL8Ʋ7qi^Nm.񻼃"§g%O+2wlp|*K/[rJ,f8F\4<#cT<8 *Cxz1 QLLx&nUS^ +|> endobj 7733 0 obj<> endobj 7734 0 obj<> endobj 7735 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7736 0 obj<>stream +)kchv~!^:H,ܡSSLsIsr9 wFn.^pkw\'P |[DBWɍ2̗ E^-ªړ |=hrS˚/#(줥ckUsY~1V”ݟg;5/ +Iq +S ٺ7[#X6ܰ?څNJޟu3^msݮ&Q\ӎir>kbSHQ`gtrhI(ig&A(ZOIv!8Nf) @-SS[@bby\,gRgSrjUʎ:rjk'jlg*Les k>mϻ_%. qĪ?ͯp92QWC6EtPpV&*-k[U.>YKi$Γ7)i{m+ ]`}wnBbJPFˎgœd0Ф^Q@4Xz*/r$o #;9m%Z\ wSiN5{D/Y/2rwyBwk8FH_ŭC6ެxpu)zǣK@"=]E`& %9e\ofiYؠI$lhsGBHR}8! P܋%&-XҢ]og`ĪVc=r8_ͣi醯RݤJ*o3vk>I-͵gn ߲8l/31$ny.xdS{2sltyccuĎ "!:##0 oP+j^R.{ ˂2qryBY9㗂\< b"nNvA'HT>갇yHb> "怜?挕 +lJ֡8fʭ}i +endstream endobj 7737 0 obj<> endobj 7738 0 obj<> endobj 7739 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7740 0 obj<>stream +,-z$Gd$0ڽq0a`?ց9Nc(3`@ RM. gbI΅# +{NYf1 c}aˊcpyQX2f;V%OtpPul%sF{cɎ&EsXWcfet#G,'3#cyWՕg5]t)*R[+iS +k. B_'GQjp?ٗF%hSLusH؆Fn}JO`u~_\w{v5wڑ}l+!UEq y._G;\ +h/WB}Yz wm(rHYuDKU&Y$Gq0ܒ`ck#Bl_z>(!r!LBNaTȑg]J: Lg]Dc9U32uӠaH$&ٺ߻@219#,KMpŃeZ*T;G!N> h KґPv:n..C |]a U6| +i2}.5,È/ikHp;{d4rvK~"C_O 5CW4$^ŵnTul c#OnO+Skv+_LҼ0-JC"om) kB,CF+kL_1Z=\zre=)܎c0b&O<n1 \Q)&` +s\]G@G`[=6ʃ |@f4upӼhHY%î!Н;z +endstream endobj 7741 0 obj<> endobj 7742 0 obj<> endobj 7743 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7744 0 obj<>stream +Rt%+H}(;)/!~Mg 4ylz pgXBPD[Dm>KVN7-"Q8˯(=Dow&Ui5i>iN~(D\ݚcu-hE3Nv/c4溭,ċ}.0GJ"9[4A풿Ԁ9+߃RR2؏^aqnEA88@dcfbܕ ;40\`%'^[(5t^ɼ_?dq*sIߣIT0s1Qk r<%1.l@C&QqXx6LJ( K^?!$*zmS؞erܬ\keOyA5-$ [pRpj9kc[*XBg(]>C]'p\2 ;W=}Mu˗t(dH +endstream endobj 7745 0 obj<> endobj 7746 0 obj<> endobj 7747 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7748 0 obj<>stream +rc_1D'NR Kf 9'l3[3:fc z@!rh\Vi\q%'bFPTT~ڝ#=OԊ3&`2: ,#cUgPDe_xgr`mr8T:~TJCUr:ݤ1&5hup: eeukHbCkd}"&c#DC"KDM<|ʧ-DdZhO${SҮ= X)%gdl:NS:t\ҜYjUϨl_L.~?yPtάfpJI/HwC]կ`ZcҏU讔PZ<!"GSL9!7uAʢ%.~J@ax-qFzg\j{QH `_46x0R;ke\Mqwf1-ʐͿ*Lw^˯k˸ +G{Rlvk\E92sP 킴1 /κMCȔEU6%N֌"㽚[s>Up% #-`b3Ʒ4kyWb6]kżHkKv"}^B $΀ʥdEJ/"2# L&/^y#aab:-uF\بZGDty"W֮K+jUViڠ?-Q9q/ 069:}EMG}!JqU~gEjP )UNI,t&E|XvOKKkhlGz^z~"U]KWɋ_?#i1D}Q04ڤ-.-jP_jH~3 5=\ 8*2 ~iSڸn1+:l P)NZ>{7<ĕp/2nOyZ) +eדD% +endstream endobj 7749 0 obj<> endobj 7750 0 obj<> endobj 7751 0 obj<> endobj 7752 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7753 0 obj<>stream +ƥ|BpSML¤.#O?eU*;mK ǔNr/q; G{/h!m"P~&C>?C\ӥd2#c:. BEk|rHc@Γ#PcZ- TwWT[%*oYe{dVCtjmV:7̾}̲{ խ)(ltV[ÏHuavмRgwGcv؃{TL;^%[H&n@>FQW $'hIlrttFF1e6z(-tE# p }XHرCj 0b̛sxmA-(YSU v:ܠ?DS;-usv6<έEA!+J^Ӷ6fZ3ܘAܨuWzW~a j| +9TJ[Ew`O xXme%/OI:vnrQ3!a&aYcnĐE aobr%u K2%#][]/.Jo7s.尨J>w{3YUmW )O?+d@0=x gMsze&!U׹T>9eƈ};/zH4÷e{ms0O㶸Y9*%t7}b4G{rhoWX5Ц3enz81Z +endstream endobj 7754 0 obj<> endobj 7755 0 obj<> endobj 7756 0 obj<> endobj 7757 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7758 0 obj<>stream +[ĎIݪU.z(SE+:{'A2s&gvvS ZDRx'S7T8X^Z' {1U.=E'4e\/Y-1݋ykp2[#HE>2pDjG a\5z"P9#DMl\06vԙv~Ѥu +y^IDP_04ɂĵ2O\ШP \e۴MOIӻqߎzٕCBN6$ +mJ.hI4w'j\ oQ͡~yeie07" bO"ׁr{*(TFUsFa4+˰[JbvntL K; ?y+{X%  ҿS Aix}80Pzzf,Tr̒iOgC(]FvD?j6!ѿ"bBR\}Ur0Ulm~gw.oxq~:R +!Oboܝ= +otbz +p*BQQA3&%7pjn^cB3'*(nsft +.2/;}WI\Qj8&8j*{},9mpD|)pXdY.%G_!lOʅHEGH4܍vVB|8ңܔE~dar +m̈$И(d^W:^A[ow$A5)Q +endstream endobj 7759 0 obj<> endobj 7760 0 obj<> endobj 7761 0 obj<> endobj 7762 0 obj<> endobj 7763 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7764 0 obj<>stream +_P?{_xAm{VEV @D$,~ߛWuәǚ"# +XQ)ׯO]廍m /0QQwQU6O/Jt & +;LgBMEZ6ӚqBnjiɫpnQܨOD3Ez $p +%4CZbmjjCx(. &<ȤR֖{Ml# SMS\WW Xlf^K +qº]`]!30pa,JJ'zm@{~Sb3JR.0R?ʮ[ei=|P!}0T>3)qy\ui82_G9*ظヤmv3;4*$7VZg5ER֏SSI@6)ne8jcn@bEJ^ʹ-*OSߕBxAt3{ZUA ҄}i `'}j(w\ @(>duJ_D45~łoVm0<%\ߐ09eC賥J +endstream endobj 7765 0 obj<> endobj 7766 0 obj<> endobj 7767 0 obj<> endobj 7768 0 obj<> endobj 7769 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7770 0 obj<>stream +[i/ S8ʏ/"o;eATKsQT~:Q76`gzJ:2C-Ν)ǻOzZKP"'R])RnGc/;'RPQüCb"sJi>%2x>^^k&o͑ﶶgU=NR:XP^,VKRnsK#{k3pfh"e燊]y;g}5lyhV;^2=ˆ(< y0qT{HX@C.AN| dbKe{JyoOm)|/!F#zk*gQAsl5<4K +kKV5`Y;CCMOP7b-X?eR=~J9Pl낯Yc6AP_s&r(keՂs۵E%n2+ɪڸ+X:GDzm *^.q2 +L_UF(֯9HAbKPrțŠz7 $TG D2# ݏb +hc?Z<+ZpFqh*x Cqv +endstream endobj 7771 0 obj<> endobj 7772 0 obj<> endobj 7773 0 obj<> endobj 7774 0 obj<> endobj 7775 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7776 0 obj<>stream +ʻ{[&?B,U-zg?$w=IZG>;kK +~QyE PT(Z۲r|="ۺk,d+]vKe@){bohI$ % +6R9b\ڟ>SeODpǺ4yt^i{ e*\ϩ5rd%CG}640.Zrss_{ݯ gX,'h#+޶4T"Nh9^w:y#IڳK0:5oBg0";UXq$X4bYSz*\RW="SY2JB'3O: (s(5G4]~6cIH}hC8 Gyohk?#s_}aEGvw(2-yđo¤*8RC' =Gw :&YʉCr-4[Wgr JĈnhץR $ pZQ1Բ+)U*&H|Zfi;H8v.Pe*$ Aes-eю0#  Ѻ-Քh/N Hm&A{gW`Ro14騦Cy h8^A*nT +endstream endobj 7777 0 obj<> endobj 7778 0 obj<> endobj 7779 0 obj<> endobj 7780 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7781 0 obj<>stream +(O;^sOiXiFcY%' >S4,-uVfDgşt{Ɩp3HO ˧F0Vs b+[̶Zw-`O[ڊA&Ϭmq p+"LWX! ׺,ɷk 7m'$T\©W*$ԽrI!n*"͵8~a&ohFvpvU30Cpn,5ciW ՇO+ӉxO EJ̽a'*gyx΀Ќ2ަ=ã/E,5rH{ +ObDC.4{t!&~DL_wt}աK吽$ lg3 U[ɎCIv~˾ɗc t#'20{KQ%:Ee˱j:_\,&B>\Ǥ2AY +vVqȎ*H%s`[ f.DvŷUƻPVr_fp%ڞˀ蜌&Ñ'Êni ++4,hGs N>Y6Clz?nWO6 v&RK-BǔH/iS +endstream endobj 7782 0 obj<> endobj 7783 0 obj<> endobj 7784 0 obj<> endobj 7785 0 obj<> endobj 7786 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7787 0 obj<>stream +OM9W鈣Uv{I2pX[R{Լ'_ď*`0ƭ8Vza^ + g &Oe~mTKO:NT`v=&H۪*su`<<,.j eWbaxY7͂\r ްon[kir/aʭP6Q wX._~A(8i rfH|myp(YŴAr+/n  I/Uw!^i&,)*! aLh"NX=$\{ߌDQ Kz+n!y=ytW +.)7g/TDJK[}oJ윴B}S{ u|G׉l3Uаavh0jUaG{p<b+7g?GZcBIH +Qz^(c{d#W}[|&0Xme`W( ( tMlfSCUh)Ϗph7&-':SJ\v%tCf3;ї]m^;h`et$tBF.]* (TFG 6Fn:AȽXr;9w7CŇ,30@]hA]u 8 + 돖}52@0YWR=^eysuY>Xېʻ<v7yl>UT댛f|tىo"H+i149Jwf' +;6{ORFܚ屮BpX'.>8[{ +ʁAwи7!3rkhfQX7wZ+ +Ж%򠕣i}Zҏ>}o̼(wrp~ p햑n# +4hV0)`Fv$rqn0*sP3:ݾ fㄹ=FarFd2bt !m% +$ b 傭\dCp[!H]>t8D*UY .YJ ͞WX)<y˄ ͦY'y;H_&pa1vmd';'N&_D`ok1tѦPBz*v3+]Uvjf`UEk&] >{c>̆H7/ũ#ȠSB}p/ _r{i]{nvXn,{H!rRC+ky1\avY[ +endstream endobj 7788 0 obj<> endobj 7789 0 obj<> endobj 7790 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7791 0 obj<>stream +zoD;oIm /b]7%IW ߀B ɪ Ha|:=-.{iOIz93^@٦Xݎ"A.Twq!vL Ί{.?x)akc.f Z޳oC;< aQ{IoF|iL=Ac-7rR7A>~[b#pQт }EMf{'4GF⁛x5`I#=0A/ݛy K1崤٤ jU:RA +ge!bAr{qCi1HszY*AS<0NKG`5Xu&&ta hii#k.~~\C4cEߜvɶ1G<Ǚg J[# єy}Δْ)!5g&X$rU{{PnHfߢc•F.5D:E9 '$`+87k2e.g![e"5%T1HKa2Sh2t*Xar!w~@ P$x1O6XъHu ȳ9O2>j@zt|7^u]x7 +2Ͱ8vL\N\I#0]D 4u/)5,^iю]a<l;*j(ǫ7 2hY}أ?S{\ +7aTrFXTM63SxXxuH#Y"v6!iZ7CZ7cӦ՚՝ ^W ax#BݷY/b]v>θLKefb}nH:1Έ1*t|e7y1CTolcN% |[|h0V4Q*+i?pBcNˠ5,uOIM .@Uv:,V>صlqw +ƒƺZLI8s +endstream endobj 7792 0 obj<> endobj 7793 0 obj<> endobj 7794 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7795 0 obj<>stream +Z)BD~!t$ްMɻs'L'&95pmC3 ~4qjΧebLq!]b 6aS*x56tNSk"]GeUV7a]mVk?8!n@@.`\iT[&0r*<'f +; %FS֕NO`28ʥ=l +n'GSѭVNCs0 n¿ _d;G/ly&[(l(7vd)&0WN^\fi "" ~v0HK 2л&POX7r" CB7Pum ՗Ȉk"L\"\UH:iP}uyIbU*Ց6-+e.tY.Y-3gVUNKl} +ܖ l.NEՁghJAف?t#OYLrA4pT8]y+!}eȏ'YT60{eˀU.x#`5PGR[{+[iN@$!AN1}ߝ'v'"ɤ,G/)1K;"$G +P}p/8(j%cG/RG SS=TMW^dz\ْҎ@5ޚoTQ1Ohxz(BS/Y @wDnq'jM~@=Ѻޤou TC>ڟV<fvF0΢Ȯ\-qepT* YH`JWDzO+V߉;|[OGɷ&xgjҥRfăHmtiUZ(ZL[aq2WKOC$Rі V@"4H[^>?+:> >Nw:̩AC7:7;zf+-9C녾^m=?^*rU0 +`$zՋ>w!glE+gV^EԉIj5<[}C3O4!/AjM?MVwɚ0S)lM  =$1v3ɨ<jB%`SB +X;1{`R#,q*J2v)e8.~Szӂx@$r}x1OB}`Up2}ֶ}Ī5>ϝU |Jt-D"Y4վ +endstream endobj 7796 0 obj<> endobj 7797 0 obj<> endobj 7798 0 obj<> endobj 7799 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7800 0 obj<>stream +OE jxHp|zTT iQfhHXCŁuHЃ_E4scosS|Ͽ9HoOܚPݪS76Ow֠Y՟*ᾇ:d ݈h._^]YPS!Ǖ| I,$rQ$IH+ B4Mp#h!|h.pf +z^ O{ۇ-Ծr&܀lX]*DO0WҪ;0Eьc z$3j(MVVKXٽ?APTHYI.D+<MI ׺ڦQ\b@%RcJyP^ՔSw|2abcƐh j| v@[ nN;@Ԉ icCE<`vy +]of|(HFJ- Ws +n}C +zqIIā02cBvzuU- &v"o lwtZpɧ`\]=`&zt>F˷Opz-WI4v]Vr#怞 vz.L5Xg˜T,A8aahG]3#[ճמkll.KFW)˧^Qsb=OwC~M JS,9,#ؓ;&Oz5|sk/ZOw?׻~ZTkXQpPZ_- -&atWe1EMZ%Q,cʬۚ[ +8SҋS +y$,\TE;ZecxOQ}3|7\JFb 3O5DnM#_@-ybVx-CA"NeŅxi<&?VpA R#9C̰M)fTNIbP]IPWlk;75:l(y{cHX +endstream endobj 7801 0 obj<> endobj 7802 0 obj<> endobj 7803 0 obj<> endobj 7804 0 obj<> endobj 7805 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7806 0 obj<>stream +azH3G0p Ln,F6̅]T%mXsP]$ƲiPnx> b BMI̓] C(u<:ӤΙ,,e}U`9Cnߧd9GɁ7aƳ٭¬{Z4xL'OI׸ 3Ck!eyj{w-S\ jIoQ}S18A/=b9w[?>f-}$};R#D +buǑ?tn>Kf:?#XS)1׫gÏ7L,鬰JLVFR9<~FwPovY@vKh˩s.K J +6 ';; 65Јv!|rn54+u9*B۬(O]yj싑/I_5j0Mw; +lKTXSY*i9c60+8'6-KŸ!JHHZ8n=à…IRj%.侭2xw!C4QM9D[ȂP[95DXK}E4{ +Q`Z%'!d"PS7X$?I]'[˴LI>ȻLpG顳|7UT61hT54 PpH2gɳgԒNadw:.ȧ>Wղm ⲫKfoX@XoFOHEXgOa5@3u`jTxFlRoLоkzFŒ? ND2 +hK@ 0—p>9$ܱkt|z3T=)u_sk{Z`1XlݷK$ ݅v{љ<pI!4<:)wX rVWǹ̌G2,(`87 +endstream endobj 7807 0 obj<> endobj 7808 0 obj<> endobj 7809 0 obj<> endobj 7810 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7811 0 obj<>stream +$acqpE0ѣ/ +΁|#qed4+,GCri/ؐXdT}GĠ# Le+<Χ=B]?Q I`e< |ddcw =ʍÑ`DUrV, >>p:k!2cf1Q1,Dʅ_Z4<:5]Gp\N5q_o8Ѩߝ1/C(1 +&&Xo)odRU 1һ: +A٘r:zyae}czK#N3f)%6{W;8?=UgƲWͬ<`<qmZ!*?`@!?$C']mjG:!wZ )+g R:mF) (!oY$F{˨U>yV}&2S* +2{$@mpNyrl\FQ߶C`d)SY+0u+q@bytPu#0I*(5b39|=;#w}vB&_~QYg')ab}.K]UMo-ǚ}(S_{J8î/m">TC@h x0;|ƒhVSݭf`WI' Թ ve71Si|WK#t]lN Ս.,Ѕ{r +endstream endobj 7812 0 obj<> endobj 7813 0 obj<> endobj 7814 0 obj<> endobj 7815 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7816 0 obj<>stream + ;@{|0+P ڇ>+4dAs<;2F2AxHWS*VPQ7Syb=~Ģ,!^SW[pY5~0!x,$D!: Ng{]=P2WS +DW{UAQ]?^YpqA"?JCekm ٍ؈0(c)5NY!r:}Q(02%O4֎MRh'4DSd+w*P M]N.ƇN\ b򮞄M/3pow.K~[24Gᖀfmxef5=!n:]̨^`\VA^Z 1RMe Oa?21g'筬mu9p%Dմ9+lVGW5mm r^_RA8y~+/lY Y $مZ"ª0Ӆ$ɡ><_E]c=~hydByUSeG^GZ~꾜@hc'2{C7&A XJoǡu=U+uIq((ﭫm)}6Vw8a+q>yq1Fn+2M:` R܆NQ{ x,R rNljȭyRdc}2Y{nQ>ak}e|Ɠm ,޵~V]Kd,AnWR6b p9#en<.s)ϟB,tށrm~4W!8οC8ŨRB_˘G_:on{ЎHTk +aM6&/:u\$Z}٫ɇI#[~4~v33'ً֤dx Iz4/(RoCJ'V<jTך6.H +endstream endobj 7817 0 obj<> endobj 7818 0 obj<> endobj 7819 0 obj<> endobj 7820 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7821 0 obj<>stream +ل3du }cwzcz9Yy=Txz1kDns̵G`n@;nfY⟻&$$G{-+UjnP&M5~ +",E  sN^ǭ$/kǦUm c6r$Յ!?6MoQHQ!Ibp͓B _=.9j̎.ċX gۿ4Dwp=-8Deς FoPcˤeʷ9;6"Չ~\-?hw'/QۀPbAx셴 +=Q_Kxy A7DN?ftF9:֑v#R1T?@D! }kјD>.byBRq֏PG_8(AU%U,RJd26*+C6Fom`Sl'Zw4&Z@jc{oHRB|`wb! sϸۮMvR٭)gt#g}oj`F}d> endobj 7823 0 obj<> endobj 7824 0 obj<> endobj 7825 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7826 0 obj<>stream +bݦOnT#UIlخdlwfJ"K,f3QY(^$!T2itK5X8LЌ/TB`BQL,z Cf俙YY"3s8晡ƾķPk{L$Q]@Y%i~?\>d+ m.Q5D\0n6c.$O +EAOEiwKNYYwY&7 ɋ1T݄^ESg39VTASخF@Gܭxhcwଐw\dT3~Ek&v䬯>y7 <01N I?cwGWN[k.__xµX s,fʲ9EF:=} + Z&`a ?PǑyEIדӣW۠|7Dw5RLFA[o?δ,;?Aor%PiYo9Fxxdr$eM1 > endobj 7828 0 obj<> endobj 7829 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7830 0 obj<>stream +ʜgrvHfMzb}2׳&@1b@ EL9,q]Fivd)7{\5Vn{SEz$a+('HܐHta>?'JKD(gr1vg㞇7 +痨# U +&X nw +O'VGDJ7e +p:LmQjeCYnA7TJ:T]25ժ #%C5DlnGDfSsE!-] 4Wo۔HcՕh(նN1: 1Y8=><5qHvTIQ2ZT!X@NSݧnh$jt7r 8J7|`,ߏc|.D_^*LAA&|64%iYHЌ#)qөR_XVB$1)0씺]ơ~׭Q0q6,[~Tghy ƌ,թt6fEm HF{ˍkg3M&jUr&IuaAag-:o5{$Ֆ:8rIde\Om}"04b5 %"5ty(W+q# + L-*l&R&Fw+ܟ:BU<wR++:#5Ty,Ď,/7LY#t] ۰-m< w0]M!]~]FU*Vb|%= +9jN)Y '.ԿvQ1:EgzTV Cs ]Mo mIpS7&P06Eh?{kx-˯VY3ذoO~?yCޙ!45N"X7q>?8R}f o;zṍ +endstream endobj 7831 0 obj<> endobj 7832 0 obj<> endobj 7833 0 obj<> endobj 7834 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7835 0 obj<>stream +'DprDZS1>|N֮ݭid2c9aIY)*:]J~`h'T-J޲-W]wّBkx~tYÍ_zvV(@Ws0OΑɭhM["GFjb!MZT- 8[׌C#ǎ.X:;=-'Tw|f@\bFR$7r̂tV∠EWz2펢X.dӼ4JManqAlPEuhe!R lnj +2LǑf kڪ%!p@EV=n51Sm v灇aL { R@!\}0aP0OWeG[6Mcv >3 !8L(t5\2E)Ǵ8đ͵M~u;-T|C4G +٧(c|q.t^[vBA#apU=NyӃ+)]iɚmn:Uj-#OQDa +PyrrG x/&Ѳ Plm!R,6i#Fiتc;Ǔ!5MG %w +D3K-mT?۵l ?~N&}% a}AqDCI5Gq(o_"uG&5uPh,,$@X3EKB180 ov0ק@oQ5lrFVPETlӁW +endstream endobj 7836 0 obj<> endobj 7837 0 obj<> endobj 7838 0 obj<> endobj 7839 0 obj<> endobj 7840 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7841 0 obj<>stream +\s#(祡IV +nTMY0aQ2~_vobKZę9 o 17D޹8 k0ꑣ qXT?VJԍw1RY S`SğPZ2ĶF8Opj&mCPSݽ7'Uh0X/̬NX]^XVm¸crM<7Iy0}< +Z0 +FS]q6GX> sG,.RsM%R 9 ~eڞ%ˆT13`ӸsDIPjV~ًK>#6o^CR-A/}kYbʇ<꯫լW +++gDJ#FwG{v Mteuު7T&?gYŲg+˺0;CK^tRqãZD!wNlCqk `aב*M T]ڷJSG^?<`3> UF *']w|;392BI_I.q GSOhHt: Q]fXTM=,niBH:&'h82dj *JJ,Y4Td)],oM4,"Rz&Ըʜ0((I4lǐRj?,;u]A59Ȅu#7bzf5Zĉ9J3 ݐR[Sdzhx y{.6zI lV +ˁZzLCn=yXf$[-*X> endobj 7843 0 obj<> endobj 7844 0 obj<> endobj 7845 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7846 0 obj<>stream +P%-UA4GʐiyhP'1.h&zEJ`QJɦbG,ZkTYRK<1[arìm1E/OR`J'+<SϺ\-fhɇՔϳK]H{?s(lGNAbXu%ulazۥOaӀ{ +E`UBV1UlVvr3Zy,Zi>[v_jtDJ>Oұ<VdJ4LM V&5mVC5zt={_pDq䣫B@z{ʭAX^KfH3Wy!~&ƥ6{OE&<8ĥŢ&k'C `ISD,Zo-kgb# +wQs鶞( l*/3?{69V:'t)Or+3Sq(gʥREfS{{#ps-*WVBe.O֡DPԀ ٩Fkj.a_U|[L8)뿼p:)U"? jvElS5j@h|FKMAI|ueuR5_v|V@E,l:i'#7}.-ϥ^Vݰ5\RB<%W3$-J.D~ jl&Vvܹ͗[ sK/ +endstream endobj 7847 0 obj<> endobj 7848 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7849 0 obj<>stream +FR=oSm@rԦ5Tگ f9Eu7 ߻' +bf`[jlQơ% +<ނW,S'^ԵKxό(v_ݯ?.!IJY-Oe"ά I͋a n] /1 ;.p +:jIr⋒入8wA(Y,:V%O&mT)h%a`F-I{-ۯVbM:( $*2Xߧ + )c`gRI $4G1׸OwIABRxzWm8}EJOݼ/&:$ +s ;K \ou +endstream endobj 7850 0 obj<> endobj 7851 0 obj<> endobj 7852 0 obj<> endobj 7853 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7854 0 obj<>stream +yRu"QK.%1qNdgEA4zSn-i +Т0ls@낹hx;jmBFp4_Ĺ|xmlcдS lbq_&U"UPx~&AL _ dw=!WBwGNۭ̑f"XeO_* /a>y_{IVZ Ro=Q6ƕ@֫tJo||א@u+QD#$,ZqIo]w)rzGsW*a/ޮX֎zPH+fybm2t8c"A3^<{H3SQzuxMHW1:A*;} a,6iO"wd;(ޅӮ٠`E)FVh%q ǟe@~ق2V~csD65S׏\玭N2}9bl|)־ krj/74|VglLbiݻިbNۺI3ZvkGBVOs]_Pl O@;,͗=0nwX a( +*i \ +endstream endobj 7855 0 obj<> endobj 7856 0 obj<> endobj 7857 0 obj<> endobj 7858 0 obj<> endobj 7859 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7860 0 obj<>stream +T@1 rj ]-bGܙv3 1o=U (̝&u;DzZbi/]L᥉rCҟzx+Erq`WuaJZ'8`FdweSAqy?WnuOx-iyA2zHIћEQrrG~q4NYUc{ƛG4D='I 1y|OD~Wf֯G +-6N/R[;&4ZوX +D .* +FL\Rޤ>W_bO故ؑr&#{B-ĕ혫6- CJ$orC'Vv11?GG'Gwk<jBpI/({tpRSV&5 =L?w1 ]vMxݧR?᥈C L/xW=n?5G28텮,|4ZAQֿ*ɨ6u++?txtJ LW}G\H;]@8e;S#řoCD[_L;EkGBՉ&~i .s0~1gIMcrL]tovaT\3+5 s փq +>Nk{mM +Es? ;ʖU9$H17fnH:l D%Ҷ*z/WsdG3t֚LYhtr sԎ$zfH|ഷ%6I|S>h26( s:Os'oY E )_!?-bD3¥Pf;- 'v%3l5RօNDg2(5T~NisC\53{h4Z hC&Eyz0fxy_ +endstream endobj 7861 0 obj<> endobj 7862 0 obj<> endobj 7863 0 obj<> endobj 7864 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7865 0 obj<>stream +ͯsNs, .≋J9>/Dï#-|9kmW2))` sA~ͣ0 tw5oz՜˪`j?f{UY hRIz^)i Xΰ6f5M,v)dāzQq˂~?v\ Y1{jV+FY +>E9k+U>yتK3? puI Ċ|%&N諓¹ +T(-r>'v$׀OHo;X2 o]aZϝ UA .b5]' UG{C FK|R =9XV`WDx.?W)ߓY6"(d.rk"BvNٱ4{ N@!q!>yV1 RXx \T!̋^3wZQ\^"\oĢ5 D-QAN%eL 4Fgj<6 EVxZ(ϴ'C4xˏj Ģ~=YkM NjI4}E'ӌbƼpA8V:% Ršhx# PIzyp1Y #ru{FF \Hdh3<-Y5j)#9&N[ tN=F][ha3WJTo>hmn1r18& _C 6mxi;U3U0YΧ8i۝yfDEX NVPjO]ui.r  n ?+Y(+HsevK4@TK9rxؙ #\6rD:!q Lex!ꠐFY e8pyodd"$sh)=]xڬ(|^h։9[sXf\受 +L,3Yy8P-h/s\cI1zwH|#0 +endstream endobj 7866 0 obj<> endobj 7867 0 obj<> endobj 7868 0 obj<> endobj 7869 0 obj<> endobj 7870 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7871 0 obj<>stream +ǟk2m_0s ʡ2[4k(l +Ͱ&f6" #.yjB)7 (N d%q'5$î#'֘ܒ*\{cl՘;~6Ѻ2L B"9 +Ԛi΋SyK49Sɏys,6 j}_ lP:I| .4`(ZWa30L qJ็(PRa"KmD!M0B]3UgEz4f_U}}Ig(SS}`BX :jxP%ڿA9M֩^#o 6:NAqPmQ@KGq:plπR' +ڨ"!F5ç~>laA +1 m+ق旗0b4NE +VF>U9 ).I; +ߤ7E j1y#bFMrY] }):~(J!oiOǜa=3gfT"JfN[30'E瓸cɘe<OʛNa +dҶv%cgoRu|\_n>S E, > endobj 7873 0 obj<> endobj 7874 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7875 0 obj<>stream +{%:o6i9GQ֋ź|ۗߣ"A3cMΩڷ  VU4|5p:wi򃖉:I(IVE^A&+NE}1cꦣJVA:u8UA +=a 5`;_<9} a M,$cwp" + ؝+6>l=.WgH7N`eXs3gc<:XTBٰfra/sca_z7FG ʝjb,or&ŋXovGP[}_"P>TD 3f8 tʡY|_fHDg4t)^4!+*vqnJs̕yk.mJo†36]hqyET19#'Lq/g l}~1{dC`|YW y󠴏g_jI76Oǩ2ƇB$ao_z~p رEa\5;+ljJZ1aYS%.k`\n(.0-/Qeڤ'قoIG:X(\ޣnFU#DB ot ocοfg)RQ({Bt7UsL +=AppP6ʡqԖsh +A$'-NypYN7 Â`Dq^s:0# y:@B ؎KmLx +(^UR0{T@UUB@HƭТ9j`\8Hfq?,4}xA.1#.tͬjs^MFȑl%v +endstream endobj 7876 0 obj<> endobj 7877 0 obj<> endobj 7878 0 obj<> endobj 7879 0 obj<> endobj 7880 0 obj<> endobj 7881 0 obj<> endobj 7882 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7883 0 obj<>stream + [zp*lX1`rv,d'+;.wpZ8tҦyl$PLP>bv۝U&c:}S UB`ޓ`+Ð˧qY'mH$_?zCiLϗ/|ӻ4pD$63u<ݡ+(QchUe{x63 XeFv]۩6I[2"jc~zЯű`6hHЫDxdc;f!c#<(wdO#~^!dmZ@ws,W/ +TOcoolΪiOqA$LBRi'̇fN6;ZC\pjei3& gH+UrOHn^2ȺR]sV)a +*bY5 -{`k'w`JRl}^W+Vpâ0?|N Q+"i~r2Rv\^%g? Df8Cص j_1M@O\֐NvY[. j3G<#}vmel}PI*:Psf!i[tW +endstream endobj 7884 0 obj<> endobj 7885 0 obj<> endobj 7886 0 obj<> endobj 7887 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7888 0 obj<>stream + +Q>xyBX$ƼC*sưf5&hHぜ"Y59V*3?Dͦi*Z ;1Cwt hҩeǷi틿d lo𣾎sAʃN6xRA3\U;1Ƥ4 ۲'+ yѲ +gec\ 1iBq2F- We^l-hu-dIK-rM|q:wLJy O 1"VXi+ euMGuW!>Aۃu6<^L/0&A"+_S1Rl?QBA h4?&>$m :Q"#+V萄2;2 "p!k(#;T$Ƈ02ebBpKuݘx_٥lBa2(߳* خdb=P(?F*O[t `#$}Hw2?kec's23:rbkpkF1qNj՗/cg:rp;1iϘ +/GNK%mn/'xaQt?>%1w,=C'5Tg6$SI3LfA;"7W\Jyg2T>f?޺7g +8Cזo([m186N)ѹl$ XXUͪHY١ڂVjHښ`)Mɴ@JMo YMFo VkI?>WqC`EW( COGQ[}D (-•疟Kz[Z?>,|6SY LTWnAD +|R* +endstream endobj 7889 0 obj<> endobj 7890 0 obj<> endobj 7891 0 obj<> endobj 7892 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7893 0 obj<>stream +Pd̐دجXI#Юr7{/ES^FTJ%䯯f\?E #.ڄ\G:I +]0WVxbai2; *S-ZZašAԕqƐ`m@zX!w( ҡŘujWVz6& e| O{) m=oa ^~^;سI7霬' )3~ L+,tӌk»Gq0W+`-cPHX-g~ߖ3׮z0P'VAwv*jnb7ƍFS֡i9'&20peHQy^_'&w4rn05zHCM> +Yv{9+!Ԇ^X-Cp~ēUԛ=3hfks׍W>f;Ies)K]MjJv3<{gzeNN@+W0xz]1a-+GzC郳D49@ 1q駷ɀFt0q]7kzJcKm:a +1N FINՊP`6Nbr{H.07cF$PX*-IOT{<_c֖seŁuz0""Ÿ +m1٫;GY}v>(`Ny8xS~Q]h"P‚"2cz?MB zv Z2򭃵_Pʶi>-׶,H4٠s,1,_[k]j@ +endstream endobj 7894 0 obj<> endobj 7895 0 obj<> endobj 7896 0 obj<> endobj 7897 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7898 0 obj<>stream +CU7w-1I'yz%9rW4V-vzOXVi*۰YGusaad6da.h~u2K86@BQYK@jT0GBO,/[Ttuؑ) +{cr_>GPg|'9AR}8 +au(Gܕ2pJ>Hs<=Ur =7F1^>#-bQȥI>'^I>?NՊͥ(OǸ0/;G6WWy>eJ3vGz07y1XZDOeWjG-=20%ZN|P|IsfRҟdx&:b1\zu*^Ju?CI^cAAZ8pSyyU6={==hTr9[xZp/(5%6,Z O޻83T{0k +#l26,2P+QZ+98(П2w=Ō Oke~1̮~k;'2[v{ҡׂ40Z[M\oK`Q;Pc*ɩ{Ge"O!oPO,kicj 04(6x5(]W(҉MF/fm_#:5j.s'i^ڑD!WL?)$"\M.5NӘs1!WޏU[+EK[q+Po/8Ev=}=$B: CWkZt͂םn=%B!ZͿ8ntK$uqR.y%[% Q7"Cl>8!}xV;?>/[+E:f@EYX`Yg}~uK 7) +endstream endobj 7899 0 obj<> endobj 7900 0 obj<> endobj 7901 0 obj<> endobj 7902 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7903 0 obj<>stream +FTnݴsP|yh6 출UFϺ1vjLja}՗XuWͼJ!qͬߢ;ӓwݵK} B_0YƷډVӳ3yڔu@Iu~A=?>% ++v@"LmN!Eƚ.Nǒ?-7S}N_WwdOf ſKht.: *}ln=lEFjzGI\jj\@e?6\leLwP˻3kUYz;rIqnD:,P#MdW*Otee/FI 6ԏқv a`jC +s*[YLp?"%׌S~C qS]2[_ftCvS4 +) q=5 +49@M/ l{:qnF@r';MRl] WH2;1>|_КǪQ +lc/&o{mN4D`/o)֝;"5 $ƅ~㵕%BúoȨtdF 8;lef^k>A5 +) bp' @9Rܞ84PЍJC!s<}}W#Y"L*yK*6 *6\w Kn76c`8ר~p|w$!,ґ  /gw2H4܈M$Whq,y)ht2NhfIaB8 OW% +m"XsUM<ךTZ7H%yk]?jjA?)ȩ(NiA!,2]BS! Ԇ`ܽĤ͗z +endstream endobj 7904 0 obj<> endobj 7905 0 obj<> endobj 7906 0 obj<> endobj 7907 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7908 0 obj<>stream +*Ia=5@-c+3U@Lc" w +gF4N04*啵750.]ORvRB8 фL'k=[&؜ٲNH +Sp|.-P,{f;0nM TqxTl iMeMܙ uWq?ë?93]X񗳐t6a  DK_]z,!?7Tg\Pc&6>W(R24 +Een[JIG;D_N4c Ybf6qX呮pBѳbS"}?%E,GvQc;m ~<Չ!}BR@5ȽBoXƩHLx(a|"dV-4U|sb/L %4IJNR)OE0XФn s0͝s Iҕ6WBNNe< + +t'*:%|e:5;ƪW!«z|ד_?4d #!:7gPKpw1ʼn\$XF̂k$؃P/QrLJ5*Kpk;| e/bz]>"VG* FzG%rO„#jb|ScUV-=.5BB>'qL'> O8= P)¼JP90HT}0b!AYGE\ DfQV!8g'}ʊ ddb +endstream endobj 7909 0 obj<> endobj 7910 0 obj<> endobj 7911 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7912 0 obj<>stream +6Z!FOy$ۤdw*T+6֯\ȪCkPҢu OSa=q*K멉^ߛHg7CdmEǷ&}$&7Q{w#K?V0H|-wvC0v]W&JUZzF<{w I (9Xed{H۴Zn& ⶇw}-tNKSH4V41,D-iUMڌl #\b;2Հ +1an؊0'w71~A} &TxiǎDOԐon\ns|_U䛲yo4 ߫sջB8mΦk!}lB_ʞzrX>d S/ޥog +%ɲ-`8u[\|^9/> endobj 7914 0 obj<> endobj 7915 0 obj<> endobj 7916 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7917 0 obj<>stream + J,>HsfS.47¿|YZCK +1-Ar9^6f!:F.c0"Un=&Ċ}{.)Sw˴͐/r9ݯ@N5=.­#_9 c"Y!zBBaMI6/@FuѽĂ9Y1K^1Ε +ri?z]bFRA-OSx+bg j9icĶ@l; cWPn$E1 Rrȟ.w{r̿?aENN(4A!v`yq-0i|8nbRI²Ej ES{A^$ pc47(81u,ҾF_ቴ d| A )qd^%^QUo^:MZWȎQWMܢ:YH?O2k8Y&Z/W ʲ-xg-Df$Ub 7f9fOY>:%{\x\;VZi(#ܲLv¾}D']5Z5ōz`Ϫ2slL' y݊;}*G'SW +e F g ”݌}Q ]t4y==@Qgۂ#0KwW,cETw|)$k'A1Dj0tzc,b' {XQྦuE(oRkGI5>7%FHlMOx +w]Nc<2wRA8>6p1;]:tpw.H̏;H`\iѥԚ Rr❄/Y[w "> endobj 7919 0 obj<> endobj 7920 0 obj<> endobj 7921 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7922 0 obj<>stream +7abL^dZwGI)+Yp +A =l=CUǁwDtn3I@1 +y[9=[uT#BkshgV-[ Qb(ûeBIeA 3 :IH _oDG4meYú/SQz|54JcI&z`omcBv FPh[8702E;5˶&X>]`lEpǾ[IR.ky;!Zxp}ke;4x;L_w̖(>$v0wͤZqnj&QE嗦`c +ݘv1":~M nU>o"HkgyiT}~%8K]v7VU_r ,?c_EVN{0;HLG$? 3 έDjCKwncm|L޶$WGyPZJiJ3l-/Pnfri2/j12p&zّP6{Ts_흼')9킰 [U_x\ᰰp7u$s1O\M+æXv/%r$$ wDc !@ê~}`xp<96+JMrp\d &xRM3nM$(3T>pJrvV )N{ѺW"o?0[ȪϜA?f"APEi+M; KD$apʞ s +YQ x\ˋLJ[QZS(]t+^x=&JeEqޙϷiB$=6.(,@9Ts^ԕgJG8aзXAZ8eZ֎ ;'-0а`۟.VR~ݪMvY̺ZC5 i?8TrgH? +endstream endobj 7923 0 obj<> endobj 7924 0 obj<> endobj 7925 0 obj<> endobj 7926 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7927 0 obj<>stream +.«)NύAt\R*(@Fs{w'\߼Ӈ 0(qSHξu5^ 5'T<}C[fX잶 :WSh8rO"E5 虢,&F jLgΜU-I"(ߊx^/y +ت+y\=* "\6< ++`{:E+첓5դ$Ra$fGYM$ ^9&V03Y~T~_7>Z4d:bN+#~!V]?#A,7>Ϡl9q5XR(i;ԏ"\td¬\@F{]s*ЋSi^w"V##U-05(aLg;mʯmlѷ3 |:kt3A rS 4E٠%yO [ܜ \"gj6^ץܙG#^rHK_vQXlKox 誝wl$Vr6mZ1b ֪1÷Pݳ\re7 Z[#z^[/O NikTgjUtHOOO.H +zFm +aQ|A2ƫd#$7ޒ&]gs̷Г Ss$l)-ݽ;M< Vճvn?fPC<ރa eo +$y1|!q9E8>:fv.ᴡԼ8U ~y9C.~F鐃I(/<-F kj3!̄"uŒV!0ly )oxs,!kSVg> +endstream endobj 7928 0 obj<> endobj 7929 0 obj<> endobj 7930 0 obj<> endobj 7931 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7932 0 obj<>stream + Ӎ F98LUBjM=Mp>ok{ +>5y栀"`~4xr*k&ȶq\nʤlmc#|f^IM {帘7au'"h=W}(9@* SWLW7; CGr27meT1/Iݘ?םt D*W~GxwIߝ~Y6CY܎jh6(l;\>Vџ,փA-~FsR+ɴ5e#̖Nb^\8ibφCӏJ(CvwbT +r +W)sqv S?ajv/.%s}i +D.1R+5ĺ_2ȥ .Tԩ6)VjO5Z,-fOR%box]\yŲSVPh]Z.LD0juGmb4X@(r$LC {ס5ܰŗ{4_it@k:!WWe0<չLEK&+MJT겎#n=U*+bmgo UnVl^)G*{a8&EqF}ꨎ3ZDǃJ\0BKg~\~GRtdۖQ PO{bSGʓS *Ed(u_<eAAugs/.#jʊgX~)!vO[k=C'¤emqkS;x/ABޒmGBf,q1N{4.W]EÂ@qi;@lyA`zUQ!A{U +_o _10O4*ȴgfٷL!94#JЎuF(`xTQ02" +tuE`"#ݵ+VRvѳ8iW^+I*8޿'$2hvr 87e`z*/e#x #[߆60yC?B V6}T?Ȅ} +endstream endobj 7933 0 obj<> endobj 7934 0 obj<> endobj 7935 0 obj<> endobj 7936 0 obj<> endobj 7937 0 obj<> endobj 7938 0 obj<> endobj 7939 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7940 0 obj<>stream +\߆!6e;qFpi xVbڭr)OvՆu] 7bRNGA*ٷ{F+ m ϳGeeAw+2A6_T^͸q{idqI{Ҧ>8 M,ZܶyZRiyjQF&Xݐ]wOxJw{0PT0qtsL +ECA.0OЦpdLK<=@s~M58 Vˋj/4 c6708aǜƢN'3@KD\aԑ65ʰ +3MFbZonrBbslwWެtT F]s{X<4e3ڰD,N Ku87Szؑ<nk; _P,> 3' R690ohuȠ.u+6*{su=H%cu^ֱNJ߯1mjy܋R[p?t!U?JIkHCKȷC ?m3K9L+y,]^'( Z'X$"Df )'= Qs&7Ob)"uJ(H92-ŏf6y:%:b$(`cfFx3~6N)[ +HDLDp(Sr㎴ lPr@/m:318-BX72N^%'m8oocm.8`ݣ %\a=W-`o1'YT&-zf-,==9Gn +V O]>N;۹7vaJWqrۡî|7'^['6>Ox9dfs|fxAD?8^GSrJ`{/6CCm /h** =B +\ ,շ@†7WPj +{xrSP +endstream endobj 7941 0 obj<> endobj 7942 0 obj<> endobj 7943 0 obj<> endobj 7944 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7945 0 obj<>stream +lRs50ƆkV5gSgnk<4th^i}rw{s`F8dUfy&+^zG1Đl˯xKe :105 <&eS}@8@$ u5Q}⟚XT r0';$%Љe9j7N0~c8/SOzf 6d$,ƾO0 J0d] FYkY:Ud8W-◶>lk(NGϚ+r]I[>Śdm?ѻ6eӰŶ+aLRQOEPĚg+4O>p˟TO X@|nlf]p6:{@+;1'{;G`dSFA;ٰح@<Μ甗S*ӥUgQj"-\Aw!h8cB'nH-l;zJK)!Ca:,(7" ZMzqQHn&>hrjewEHk4qz +ab)R76Q5m5ʆsݻ 9zj뻎,Go !Ŭ%P`My?An}ՀBs kRWI_h^o)S>4fʬ1#NCul> endobj 7947 0 obj<> endobj 7948 0 obj<> endobj 7949 0 obj<> endobj 7950 0 obj<> endobj 7951 0 obj<> endobj 7952 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7953 0 obj<>stream +1(ߏH_p=,|"f{ST86hRҘIB V]\XU'|3"_/BG;V@hB$a(NQJ6ysΗp@8#.jShRQ۩2󆤐E4'cX\Xo aY%5dSz dJ\7Hl:n4t,嵭S-P2 {.(.K^ZfD৵1J}u cl vCSB45rِ)'VJ^ ?">W(xoqHY{sLq@dxXSLļ JqK(ԾXFxGrܗ +r/=ȡ\k??8lޣ|1&9>z7F-tvPnylӽ]:a'OF6l۹72[(q|%(>iC%r,sbd=mSk޹*-9 o&WejSiW>ڳSWDT[\0r+I-b+^W- M +endstream endobj 7954 0 obj<> endobj 7955 0 obj<> endobj 7956 0 obj<> endobj 7957 0 obj<> endobj 7958 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7959 0 obj<>stream +D}6J1 +l$̙ML OJҋRǦF ٿ[#_3OQ6('=hYl6=/)YUUywMiK=O%ŽH<'Ń` sl҉\|$wkf0:P[tU9 9';׮9ۭԞ>=XZ*]~PDi6o+ۈwLOoYh|'ݟ}IxOna;SpR B jzIPD.T 2Wa1,dz;77=ҭ h]N|ZN%?7hm?d{ɵoS_SRx k8MCa;PA3%J ˕>5p0, l 568mfNO'%sl{QOж?x[qJÞ8n>L%lrTLJjMLwjk6 `O'#ʐi o8`p"u-|1*zaV_"!=U[%k7:9=,R7x0 ˖f>iWveY"#KWC݂dܫ՗{Չ9lM;%!"Ipd8 T #`)jQ-k)L>Ib~1+p,w(uF,3Z[0@wLL7nQy>P!W{Xa nd6\PR90T$x,&/hF+:P{-YզmS1Tڢdm^gl應}sb>Fߘi,H6fb".Gx"y$Jpu%אXm)cn׹S@*A7GMTPPjSD1|Gm=?A4OH#kmI^(e*m7DVXE*#~rD{cU_$ Νu..$j 3swi,SّZvTvs,X]D.%ܰIV3V,8) |!Q;8H2_'o723o-rD o{퀢v6ѵ)'h\(w hux'Hq++_ c3!xH%8`/kQդ&bԀ/,y߼MNEBt;m&V UΊ}[!8Y4Jq[rWu +endstream endobj 7960 0 obj<> endobj 7961 0 obj<> endobj 7962 0 obj<> endobj 7963 0 obj<> endobj 7964 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7965 0 obj<>stream +6; +S~N'$*a Y7?Cs<%t$k/{n',Du( :AqѼl*<7&om +_iiDL̄ {ydP*:YXd_u:{WHK[78"`e [# C_>ͻ/&2 ; 5LMݦ{jn~^sBD0#"o(AxTC\ywtHWkgdV%oj]asS &bZH4X!ބ%nX=KK[QӃ{=Y'I5~*N ?{oˈ*Ŵe1grDdi$zh +ML@"8C50_L(]ǿ_v$6›4]w/^G~x,Q IΞI<AS ok_aC.!WYo֬(߶~H dKÁ H:M](^aP:-3:&v.O+ zϙ ƭJ +kA_=&{Fu#D ,NUHIDf;ڻCq +]k[ed6( 8c7 PGtM y7B +҅j9gnd~{ERXOsr9lDwz*3."[oʭ` ZC1NFg0dj)B≚@=GT4:ü<ż\sT5 ӔEӶsPp{Eqd'{b0`Ѩ]Vc JoQ(rcFO/m9VQPv*6ld&s +endstream endobj 7966 0 obj<> endobj 7967 0 obj<> endobj 7968 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7969 0 obj<>stream +- WAn´|A +VKnZa5h{sG-Y%"v<|"#iIg9å15#Z]']U +=5HZ]2hB1V/;TOW]ˇdFjRFҕ/GDX.Hbgฅ`k)tvMqw? ,HEO?pn6zTؙ=*8.$B; uL' )~)ZXj %0ڋ) qڸZ K25Q~ӭw[dJ*KP}J_'O(tta +.JVQ!zTCNWܯTkJZKsVEo{z0o6߀|_àpLP_KB5*edY=Nlc0!4-n~;eosNKRshGV{n܊?ӎK5ҿ }c ƴV&~eD,i&Hx0v<vF k \^_.Rvm匂eJQOm9p`g'̀ir`;({ ð_,w + 4VŽ`PN@C}6,aT ?s#ާ<逶:P%3W(iex5VHr "}d(_{/ȯFϴ!Z$qWMiqLc} ʾ7 }>^BuiܮE>_ +^~(R GiGJRiŅG{۸D +'Χ +9x#e]5kٝMGC {P> endobj 7971 0 obj<> endobj 7972 0 obj<> endobj 7973 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7974 0 obj<>stream +yTR~h7jbQnj嶙U{O^-PKorrTv h]߸ΜSGFX;Qk?0pSQHza=YZ\W 8(; *avL&Q/#H=Kp} +bZH aO"v@/nDHYzƨ3aG"^\=aIRfl2 oy>SP_K^Sc + +KUn=}ܹ s8bNȚ" H}/7L AF($kpV_cϧV_^¨'57L:<3E{5Xل@GCxnW4\!Ac%z`T-\()`"\UBkg4#>=*ծA>rsgtd_鐶.!0Ln)QR@ūRx{mU+QAN4)Uv2z2Rl=V$M(阵/cb +cAZ#A,5IBb&26Pg5wc򒎽mv.aV?G[Y}Q$,D%..W⅜0ҷȞŞYFQF>]l +Tϫ>-w#l\4$9K|6iy}廍ME!MW7n.fŎO@? +u`׌N%x#BPwgcVNbIwa@I&*'Mje@ FzVqnV\B۴Mϱݙ+ ؆aƴg(2 &}QeՇMp:CO[d~^BO[ֲ[#޼Hq"U/4!ކ[#p-i%h1AӒ=2 N" X5'2zKJQ>^{,J#uZx!|D4;@(( ul2˥;Rx.b矍| s6q7].6œ9> endobj 7976 0 obj<> endobj 7977 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7978 0 obj<>stream +`Jߵ +Lb`;|pB0u%zRJk?, %*N[i=Pb.I4h]vbڇ4k"1 @6 }30g2˯2%imEc?;wXkӫH0q]O}pvo$/y~{R_ H` Vs¤E̎KZ.e^:Z 3'Za U~8mza+QqGo8 ]$O~jpI,ؓ7J.zIAFӵqڌN eIƟ~C+7E-3ivO9m9JJoR,-Q1ERsɬ&u=ٷ.! >[=%`miC(.s&-8sϗy?iIxeJZk<[wJ$k.+j]ٕ6أCd#s.~^6+J&[ ٣ď$#%J}10 U=|uK'j= 3cE8su2p@WRU77d.#BHYfK|йjR?ʟSUvQN)w370z~uf~+rSKz˘ ]x'!1 +Nܬn Hb2h:М |W ɰ~ ,Vx#([uC,G/44Jp3T/.\7Y9pb % 9hHa [i:G }0iQ"g|rt\K_qGWkm To8)1#0]La=D<"Ѷl A:>fL^޼Tn@g Tua&aU*N 7Nav< D +endstream endobj 7979 0 obj<> endobj 7980 0 obj<> endobj 7981 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7982 0 obj<>stream +B;֭?IݮcI09p+r1`[R$ a,$vM +~f)4 # D{}(4?Ust_9P0]{_0S]b}ދy!c`-m| +#κ!5]y_CQY:M>yՑƵvpjg!ZV|bϪ25cc* #c0˼M)>CTRjwVݥX]gZ b~%;/x^2HL?s-"8 x.}>/+$`U?Ԫ8 dxm03ǜ,c=&k>BPO|m S”E暸4~M"Yo\I 9f +$׈[>OisB"f/w3PM_i"ٳJpv,$75{ ˩<.T +5 3]EOp_(ԡYYkr XمAw_0\G%l~KZݝޞkKH X7Y1zm0b$6NxXsMJ5ZoOHFn4Yǧ\hHr\k4۴'R\t:|an{HEfiUS\LhRA͚k D[fhD^Bڦ;z֣8mߥ'V7KLR7tG>ĸ6X;]`wp)&wND]]_xP59%ݘ VCY/^Vhr]\z1ۇc'cG͌-ep5MGP6m]fId~ĝ +endstream endobj 7983 0 obj<> endobj 7984 0 obj<> endobj 7985 0 obj<> endobj 7986 0 obj<> endobj 7987 0 obj<> endobj 7988 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7989 0 obj<>stream +@ u@ҺSz sSj뛢 L#OWB*!5ӻ֌5M$ |jѸ,7kA2E kbLN@?~!5"I3>q(d}ty8gw0Qt]:D|gV'CËYV_4Yey+PGz*$pKD`\݁^ O'd }t!E~mn*4 t~܌ὂ}+zA8)Gb S_`'~]${ ڵ!8|*Sd"9"fr#V\=۹3~>3#z ߷5Tb]jXgF$Fhw"<"q ݚ1,ĴDczVCm0"dj 7iQH<l3ZAݲR }o]ۯ6o?c o_.eA[ U>uES. )ggp&wB7n4Hd14y`l%lLQ\59|$vz0D/szڎA2@ P!Bs +B_zI۸T311ɺdL &˩1AJBXK6cFu>FÕ7؂ĚL }e( !-?iq +YöR%a  q9tB&@Ҹ jI+1$:8Tv hupg:pɼxk҈5p> endobj 7991 0 obj<> endobj 7992 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7993 0 obj<>stream +(`\ xY[{4'[\\oWl{bt(aeZJx; :>nH#|e V)iRj$+%V)B]n&y3lO.aCShcO)AMt%YP>#_l='C>D ϥޑm6f2-6AJKQi(JaX2Bg +UHb轕V{¯{K%RuTL tCvؤ^!RNޤ5OQZt w~HegݎFUv _2n,ǐcBg6sV* `C&Yf>=JY5!aý)2N^k-0YI2ނVw neu੗N?U'RK"MHQ"jGsJo!iFL!R r&BO亖BrE[m|4S(h.N}sN2@Ø+ A /* k>[ B&6R*x[f3+w]R}mt°v~o. T'9'68˯qg&勚+T44n]3x[Chw9qbue5}׍ M]Բlr|) &*wpByc_l>HiAL"[5mut/gJARB;d%lp/̉}\Y|a9B127fir4w[쯦he"_ƿ!j!oC&IX{&0F]E\LZւddôZNU EÊw ݧGs/Hi#~&;4-'Lu"bI_r¸q{dEh1䦚e>/yͅ2OG|ʜ$1p([ciÖQp>֕AxZUAQ0-96)uTCs*yf3t A #!R{܊|E@P !_a),92}4B_W+ѱkk<{S`OxAF%}#22ƁƷLԦΛ~I_BU-I 0X,Ъ9|m/KYz $p6"R;=3K|ʆNㅩJy !Ę/oA +endstream endobj 7994 0 obj<> endobj 7995 0 obj<> endobj 7996 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 7997 0 obj<>stream +-tUA*0*7,GF+77qέ.b.גɲ![[G`"rh\ձ|h +{^ˮijԂr<ȴ;'+v؏s<޹`q +ie,(>gvY.䛗c>Y2Wt"ӉD?e ++LE%%=׈4a, +cj+l9\C%j`שt,൐#BaDR;7Ϡ ~1)=a2!x|j;Īם{Z%y>3U#sCSOwZtD:q:Lm2MXj5PIZ>-Ek;JSv'9V,HU~'a$={(_C>(5GLv4 RqmMXPOpU4tyԟTf2۷ Ghk̈́WAh,0]k~B Nv*Kw Ǹ+-U-Bz[{)K5l7)^@7|rm<[(1(~]U!\0{Ȟ^,9%xiRxC@)Ca0HN3I-BsGq> endobj 7999 0 obj<> endobj 8000 0 obj<> endobj 8001 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8002 0 obj<>stream +襫g'z5!*tK(DXKRa;_H]ǵG ?;\'YQ?Y6ʙn_7qI?mrTAVqPcPr; Kݶ'Pa2g[&V&b e8f|@כU+Z7s7zU~HOہy\re|p Sg2dQ?䎝iLI1}''0Y54ݲ`AʗW.Anm9T\BBWQc5N u|key0K撱 *c_TF5|\h7(0V0E۝*m[bH°X r>el Jd@=* QR!VV$ay1yP a%ҡ-^P٦L&0R c]m},hJ\AÔ0A` +SʇymܛS|yooGIЊ-~hHDY7b3ړCxx9]b{ZR+u6ø~ =ÜB5 9Ѫ%Z<@)JoY,N]y>)T:'nєdť B&:6ГzKB9m+(l ӌy:"?RY _x>?06"Qnq]+\`mծ0nZKH;'PV_=AN֌we޾UˤKM{A\$h4 aM&H*0kR2Rvwx)ͷ9%,{ av~w9G&ҸiU,.5Qy +endstream endobj 8003 0 obj<> endobj 8004 0 obj<> endobj 8005 0 obj<> endobj 8006 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8007 0 obj<>stream +{DK楾>|I8  viUJ HQt z$n +Mr'!؃Z䚛|,-e `&˔z+li}BvK M,kUxDo>h^3{;~}o?US*H9"V\O]^m F06yZ %x7x$$}7^8r\ [*P4Ckd=v[c$nîd\?U Lntfn ?Ĺ-qðEG6*}S(Oovc k[BlEoK~Tf + ~, g'*I6iEHt3!n8wozSϨT&ў@;UڲdD`#bo+wP_6ȵ3օ ޱp)\{_X4 3"lZU,'"B*d85 s\Ŏ|3fydt:uuid aLlvv 3;1@%i)0wE]"uʰm_&q;NUrE V˙<I7MPX>?h-28yKW.x4ӭg ڙQzfNS![G7ˢg^ m4yQ0ו0\Rl_N`?su9qO[nfYV{ɈkݩLWBqà路4Fk]|kb+HqK''er&p`ڕh7%ܕbW~d2/Wcxl|/pߤXƖ8(.MʹN:ß3 m;RaeTAvO6aJ!~E +u.*@k$o~a}Gw6&+]`2[Wzǥ}nR3cYUœJ"n&:!*k6PGl"D[v;觛E,w\vrqP.s/3 .J΄Ң,qmIuJ1l6@> endobj 8009 0 obj<> endobj 8010 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8011 0 obj<>stream +#GRXMd44w VC0;nݡ):oC{|E6Vbwd/]]tB♀NkV=L )C5rbby  \oߝ _ws/x9PRW p ! B@Bi2D-'٘ c>u尌mWIjP'0X2mXowS<ʉ܀Lo7)`Qy؃s^"\҉vJg)Prh>:ZFpQסM{+|jh)#8L7[yBB1Sou mo[ccKg]ʯdgꏭ5GKrƉ۳% +0[<.=iK+W[툃lu {6 +iēHm5I#lXx6>t2ᦛo5 mws<+54KXE\AU2k8Wnhȅ{0 I n>zUڡ j7Uj5cnMLK OU),խ8z^tξ˺6Qx獵_D-iة,9xߴsMjc,U4"H5 eB[1F1mUi ~ԩD"?C^|FGd9 ".-T@as@ZU| p{ef˖YaVܼZVR%S૤0Gr5\Ll)8|VW=laJI&Dl M@-b8,GqZ*.^ec8)$A:*B7в)eXӶ4yԩI~gUVNEiS `8xn7bY=2$ .c+qtgW W*www#6zDE+6FguO T7 YA\O#3?(&x +(?9˺t$-y; +endstream endobj 8012 0 obj<> endobj 8013 0 obj<> endobj 8014 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8015 0 obj<>stream +tѰff{ 8i r l<{Mw\.s{КD(g?WY*:<޶q3?E'RR\\5m'VemEHp>8?X= ߂5>Ǘ%lul} +V0ro9CQLz >g-lzd~+, D.Cː6FgI52E+"d&;$Pc`b%F?bEbF◟Wdj{A\}8POU5.jE~0AAՙ~dEbVޮhXRBO^E0^C^$L~L1;sB{jD`>R=m84P$\x +0Kn?:v#D)jNNqGgnrӑ9 W#Pz_{-xIyXKlUD?,_pRǷ;LKqq.TMѤ_ÌД7MS"~-A7lx 6?e=@.fT(AAyl#CKI*|󦦯 F 2nk Ya7̭G`=l/[<²JcVېRwvt9DBݟCMX spJ[984`5nIczEǧeR) rnW9oYF^dFRᣱ_@? Jp4|Ȣ捲[EK8z'p꟫X Vh8~ķky +endstream endobj 8016 0 obj<> endobj 8017 0 obj<> endobj 8018 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8019 0 obj<>stream +#s ^̆؇iXE N^sڔL4E ډ=.nne1Cz,).UE2|dAokz\7d]f 0>hv8׫U7H:X># ]b+{Ya֚& +Bgcuiq;w=꽂!Kn֢naN,d9jȋ 3ŘHI = +N\vT au\w[7(US 5iYZ8*5~R*~R]Fsd񪰏Lo.*[TFjőjbͿpؤbhEjJ M +ExcT֥>>6p:y9JĽ"v72HZ9Y{ w%d + <0Q@{\_N5߰ cܿ|W?|c$bl(0ߐll:#% +ׅ>Ej,Roڇl_{lo'UnfxJUXvk!2ȞZL)MuhgS1WZX8aD)[7O78eiT& T)&[@#I`Ԭ(Á&lxMSa:boŻU`z8}_x=f;fQ@ C2Т?],HdnJ bIw$i R'_nggeֶYhx|%Cʻ{)R٥;fdỸ6oXZ),PuOT-P\؃x> endobj 8021 0 obj<> endobj 8022 0 obj<> endobj 8023 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8024 0 obj<>stream +n`dupEՉp/‚ydK=nH'ܥ2&\kvm\Zvg֋n$hm5Ih ]~za.91in00 S?fp| V^eLt'( k5Y>a̱xj9vDAkTt룈5xh rS%sG+2YcxA/oplK#un(2ENYcVՓL%B$SbM4hT?gZ_\l[0?yف0 ȆTf @8ot1IDx{lL猪/1Բ ŲiDZ.L@L @*Nf9~=[TlX-|,55 S=l5dҋ_&H;Mu1=CUofд4a0IO W_HJEtSS7%",k{%#SNϦXֱX $}~we +hwݓ7 jnrGbyR> +r)F: &8h{l׷i7}dcnLV^S[ \)A0F0~͊N^f\nf.oydX>jӓThb ֢i =@Ȁ g>k\P0ZHI~@ߵwFp +)Z *uQi+5s*/ux >5:om^'T9Vp922&fIϯYHKfH=Cuښл 'k`< C`* zAj{iM]3Ly:9xUo}N֧74ks6 rLtTfDLf`$#~%iTM녌& QD=a-DV޵b~t!ԸM+(ko~ .?rz" ]<_*jb#]Nqv +}@oHE{'@to1Os> endobj 8026 0 obj<> endobj 8027 0 obj<> endobj 8028 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8029 0 obj<>stream +5-F"0swf&̌}贮G;~z-[ک6v_ya=WLhRx>CSUR @(i0eDlxE/~ %cGJ@C`9uZXJFOt]lkS~ +ixBR^PpC;^zԾD( sdl:ǸzQD;J1x2'agA]~v`G-禶r{nwDJj5NRW4HKNUet`2džߨ*@ `y9%yYN9: C?Vm+W!'. J9qg &N-k p8$+"ei|$K:-UiR%ӃlZH"Ie4H[BK88zZOµU +$;SHqb.8);#br0&f6^IӔ-yU>$Cdg2+겹A ћƣvÌ{" +/o*BbQ +_Q~v>1n5N#%zA0kyn`ˊGDs]@֪5)%%&QW(ϥs.OMlE@/7]|3vĚ;Ӌ>XkJ[fD_ڗ88AՐrfҮ -$4, ۙ$ח6bcFMPff)_JWnzG/_ٴW9U ݷjT&LvzB]ҹDk\EqmЛ_DSޑd-7G"*wat#iS4qIN(Kcj-e XpH}IBmCa *FwT{F0Q#i)kv¡սrءgvΊAF4$[!rַJr"E,+r|&c߃fnߣ_2q8C ,$^e~~ + +Q5c N1O-m,EIO$MMzPVq~Npٟ +endstream endobj 8030 0 obj<> endobj 8031 0 obj<> endobj 8032 0 obj<> endobj 8033 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8034 0 obj<>stream +3 (:-l` c%T~e /6ڒ f@x =u6iO<\:.Jn 7fn9cʌ#s )B#+W,^+f=siruًU>_SAڴ ,͊4. H`):X|}1tTd{&닡-NpaE2.]ȜOa#lG\%1+VBgSK)),=yAh;hK^'|R鹧W\6}a/,NzB$$-xn G@ +"߅ qMH6dG}4;ߩ=&˫Ԙ[;+`dFXE9R&Fia364Srt-@뻬X;txcYr* a% 9jE hoB60M@= pQD0^6é$JJm78@%F;=x}aG.z)QˆvD >0\P$:w?C^a?n7Cvr=FD.d`@FV*º!pu7+6d'Z +pDIkVbF\ʴ} +W?{4F`z _at1C9NK{_MK +wM 1uL9d$0uw ت!bArN^߮:1}ۼB8kh^i1ӡ G<뙹ˡpap)H|EQDe"C?! (nQ(vH9I1|R?mlV!c2(HYª ʰ`ҕJlIוԛʷ,K&a_F+3oj> endobj 8036 0 obj<> endobj 8037 0 obj<> endobj 8038 0 obj<> endobj 8039 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8040 0 obj<>stream +_jCq.GY?פ+mS;O @޽J4ZB}KZǺ33)<*7ׅ*-&j]ַ3)u`,:. +*"'V^ѩ8F+Fޙ=.H1MYG7i)8Е~XS2v➀/>/[{63D6@#Ÿ7 mrjԸ*'u6 vJÆS"I9?0@;npKPeK(==NUs׃@6C p#' +xRlB2SȑKSdWзuPVr/a4OMq^_KFHТ |4Vj͡ 7  G/g:IAdk,X$s`BeNn[\IHj$csǣ5.T[Q6/WRIkn$kA^EX~TV٨U֒C3ۀ.Ji= PI$P{1h{ph%cEj(5A/cǹeBMi;6oiK,9\U+qv@L-$^w + +endstream endobj 8041 0 obj<> endobj 8042 0 obj<> endobj 8043 0 obj<> endobj 8044 0 obj<> endobj 8045 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8046 0 obj<>stream +LA8?E쏔b;a0p'JH316n")U_o6 +thsl|fr,`F:Cl6d8F7$zNCB&ərٕ,xSqHPTs~X*ː~;f=\7."3C&y KvaՃpO|*>sl}?ѱ pLEҢЁ7kv֘DBp4+5ࣽ\Ag iJOI#49sWsciƯ C#k / O^ G3'2ͣ5S,7iܘ]DHz+; fs0"m*Uӹ4 &KNaĈ(S:FY=o͒ZPTnHvܷ~Ɏ7$D6 ,DI 511޲ l ɾϖIKzon ^HhMڴ&}7B)ñ99 V6G +_uh+'XMwHLQ匶ŨfRvz\mL)d]co4Zfi!p17Gy}M~L5AQ((U3`^xKΐ|/.WihkzdtKxIZl(r4*P:r|2)#лXPj ;A'O"f; ס˪<"} 7اǢ{k˛Џ ߍ1<`d\ťr⟔.!lUiz70y +endstream endobj 8047 0 obj<> endobj 8048 0 obj<> endobj 8049 0 obj<> endobj 8050 0 obj<> endobj 8051 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8052 0 obj<>stream +RLMg/AS^-|<5Kz{6'IIyj5Vcm@N5 k S +{d +,OZ}&0չ7yǨB%Zɸƒwި,_wT:>Mk qfJrJN:Rж?g%>X\9y^/Js(fIO S`P=Y5KU:qGWǎ)bҗr=cZyQ#0h[T6)]+*co ߿lZ<oq){ryxIBRE^8,V31ކͫ1+J+_FɋZϻ +endstream endobj 8053 0 obj<> endobj 8054 0 obj<> endobj 8055 0 obj<> endobj 8056 0 obj<> endobj 8057 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8058 0 obj<>stream +O-6P?M qIya@K٢fݷ2B>b:J󈻑Umuc9%s70(O\L +BF$T׸-NH~U“ j~z4דVB}h1䦼7#H[=m7È+#-YG/Qj ?3"= Qnxr)`T'Kn/RE,j7&Ғ&wkцc:6@(&kms@e+ 1<C+Htẓ|SE6n% im@H$! +1krY 9Jfn~?GCŴ4vtfcf>TDAsq7K nZ5:(2 hDB А }t0@`0ۏuԂo#%C)Da4m + a&O%"_. +qcx4)^ {n6Ee8)Pr!Rk/ić&ݛu-S|QdMAKAqE{ -9wͼ v69e&@U7g99-`1nu4-+fIMLC)kTxsJ(v~bH=p[Y!]V +[+E|3ZMFxaKsD2` JfyV@s(995 ++ccˇmY"if}iX]?C;q\^_n-WD4ȦLav7Q@כN;:s5A(5dt]mdՆHP >  hzDt~ <'e~1<:ImGd^+5MNw=5!ezcV‘MFJ^`dҀ9]`s9p]FV0l>OgAounE0> endobj 8060 0 obj<> endobj 8061 0 obj<> endobj 8062 0 obj<> endobj 8063 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8064 0 obj<>stream +TkG%8{m):_zI##ȫ (U^eX碰s7lv[vZc}BۆkFգPDljszP7?)4¥~f4w3>u +f!,M,^zU֜Qd)>6 ?!w>7IF@%lQ9\Z']x5seJAiҘgnި %,u(=/Ob p-dN0h w;iIʪukf^t#6~9ي0rXD+Y@> endobj 8066 0 obj<> endobj 8067 0 obj<> endobj 8068 0 obj<> endobj 8069 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8070 0 obj<>stream +`3~kKβA~[y[D0414.U"ѽݛHzE'0+?͉"voɾm@T<0f2ݔ'9[s-WKQ2Z^̚6` $CUCdٹlQCgJk + tKT M]JxMꏷN'ֆҝ굃7ak7?͔=u Ab%OW~sn)C} ruY CF<ӣZ sfj@Ѣ&IiU_]:~xz"/E+Aڱl@6*:U4 U6C 8 Ihֺ"1DT9XMa+ lI<3EέLLNb,Z%ĵUQ<1s;n \,*qO?dqF 䀼֎]Zk~"B35c;kTWko,:]I5u,׎{|L^7{dR0)A$} $'`s2WbX!S/{C|]xԡ&7pcd(=tD Px b +endstream endobj 8071 0 obj<> endobj 8072 0 obj<> endobj 8073 0 obj<> endobj 8074 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8075 0 obj<>stream +*,QE%)-4 lIt +U^}ޝ͗wD9(͕' [Sh߸'yrY4O$wa$'`R}e]dBxWbκDKJ-T%:vAm??"Ƣ7(˪d H"A^/;SU|n]~}Pᕣ%hirtn>TY²;rP](˄ @LH@$fway}L 2r+PcȏÝBO;IF6ݏcDY9^ +)\ȻPvJNe_5nWD"))6fP}2,Ux? +AXN6$ +j+re U(iHmHsoٮ70US2Y4CͿGΈf*u>}1K?s=Yܙ2P@>59ɫ8Op͑V)#Z4Pnj%!FVT,T9U5%hXy:bL|'U~#n# ?s^ +0Www..rn}ܯ'Ce1!:Ls(CR1h:dsKv%7q;1N,s yIj$zDlhAty|E>v0uᯐ&yd,Ly)IeR hpƂ(.i(6RT&D=Rzb/ !0LhGp՗a&N,Y=N= S7pF&_ٷ ;gMo`#G TҀxC+{a51Rm.]U/6i1zGbq"8LXQ6=: +endstream endobj 8076 0 obj<> endobj 8077 0 obj<> endobj 8078 0 obj<> endobj 8079 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8080 0 obj<>stream +ϢShU{P>w:sǙB?52ݳ'ek]I ƓIN@+i6.ϓl6n%@9kaaC|(Z>pӮSnzgH&:7缜?E-qA88s v ; z oXB:޿@E +C bYJ(QeN'Mnlԥe+kv3ZIבρ4'[R'ck~?R^wmRIJߋ`i3Q⩟wҾN"66Q:[2)!'dm0+v.Z~K#U.dܢޭ!7}|hċs)S4=f)pw'@<$e݅MbR\Wя[C1ђs>WOʤ|"8Cn@^?o+1PzL<C&R^ʇ!$ї(op2odoE)%]eëmg^|eP`z0F-:AekuZtnɾfsx硯Yk v +rMsjӴ4fŲU!C;l܉Y}K67B<@&%W:kY_'~ĿH@r.޷ɹ4!.zڊ(^Qml!;D8IK&mv/@!Wi1wff?$*Ip[ |EuX^Mh;1i_*d*C +(_&L`EG&Z)+*hؚ2\\WAfU<`~w +meaaɊa]c+?":ٌ$sՔ`@.yu\qQ/_}].$M|\Ԛi9n-qHbfS3>MJ,60(&l+7 +endstream endobj 8081 0 obj<> endobj 8082 0 obj<> endobj 8083 0 obj<> endobj 8084 0 obj<> endobj 8085 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8086 0 obj<>stream +xaB_}$5}3㪏#+6b>tzD|o ǩN,&};ЁX!(SR7ՋTϰe8"GPo8_sy%(x@\R8 {2_ޖy@|W|53`%_beUq:0Ja1l}66VX嵫7[kHMHwEݭQ~m%O%{֞wMl"ӝ܅(n&"]3*,ee]j?+RRo o +RԎage1o`7(Ʃ.7 +,2V[ɶIK׷t'Ɩ؟Nس]R6刖$@h,( ejpݬMC\6087\_F]Vsa]qZ ̲{{e+˃` W{O'zGjg'&v'h̹iݍ;R͋ԬILe{zz. #x3DY  VܵK@7.NMw4; MJNeϒU +dޫ3<F!dл;[΄#l :Lz+gր[^zg[8 +endstream endobj 8087 0 obj<> endobj 8088 0 obj<> endobj 8089 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8090 0 obj<>stream +>bDI*}jo21v/]˾`LZ:;uNjV]zO?l_x6C<igѰPw/7}q’r`[& [KƒgLO6 Z l!L B-a Ev&U7@HȂL-Y'SM[0gz}ƝV"}$UeҌouB0:_Z'0< \ +&?+/O57( sҗ (:#\DۧNԈܱ%TxsyFS'>ioxUȕFpOܯ3MUW,8I)OFLPI_7# +OD;l +EVe[H=EEơܿєWT j.dA6icSj[5TT1+yO

^>NU70Dt)$"_уH (V7%?1Oo_#lxdU!AQtmC+XO @|wT}2׬ =) @ȫ"|vn!x_;pQh +$6gG[D3_1{,D|w!G{Knb"hP.U&fTO&}vgNc#$b-? ]0m߀i|O1tlmVG~Y.%' ȸfZyh.p w4 l_uEG>B1X ]Q5E"?Ǫ2.V8Ėg,MʝP0P8H/s~ePJ + -6lSu*%jLeyc/[9i/eh+1X˃oۖH)x +endstream endobj 8091 0 obj<> endobj 8092 0 obj<> endobj 8093 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8094 0 obj<>stream +Ir2,pկm_MrG[z4>UZT9Z*zOYxqqBU@tkN=ϻc$=RV;ȴ9 IyϾQyJ28xO-"(uFx ahT I}^G=&t F Nb!%~AwM,z=s2Rߛ>fwgRè=%T>gĻB!z + ,mr5->))=jt1?鬓8W0 +6>i].MҶc%˓r >9ɫ,ymu viH5 +sgR9bN3Hm1Z^I/)Zh*:: '˕ ԛ#PI D;gz@5V|v3.ړMz|e R L# 1iO O + %*~ސ+bѽqjv56Ɲ6In+22Kk5ѕJ؀ڱւ׀a:1a;AoV8R!z*s+|H~@29Ũ[ÜieI{t<ϿP7Y٫6Z9x -.3;to87P=b¥TuId?qLe@$!l)]KkװIHw4+W)d5m[Qo<(Ќ Yu$hRl_L+iϱ&WIwSRv~`d(Do֬,C U +N%ok"zUDx8f>leV;^7-j"B-ec~;/N no^YOA=rY&c{^Ghj\XU ujR:.!Dwh`FYk8%фjl穻:Ên|FlzX֑8J.JLJ,Y&x%797r>6ERbHc$ϓ{:w^o%Ac*UE"߯br#l͍,.9J> endobj 8096 0 obj<> endobj 8097 0 obj<> endobj 8098 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8099 0 obj<>stream +S~Wr׺w1B`Y/U2 3%\˜u 5Q5hO2&^F8Zbnz\mb`9t4=QR~;*=ڬf`R+9MQg3ڳ|eVKJh抲3*$+^6 U([7CF(Jbʵ=>W)Q QA~?] Q!sC;Tb o@ +WJtיӴ.@xw s٣̦fٱƜ}hMRܙ(gV!0fhPY|nD>9 aGTfگ,Jsِm +gLqB˅=TšbpUfБe08јuf&gMڤ eô 䴍xhEV,WnB2tz~B> endobj 8101 0 obj<> endobj 8102 0 obj<> endobj 8103 0 obj<> endobj 8104 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8105 0 obj<>stream +L>>|$&eF.yzn)hTaBr&vy5KWA>Z<;46%`Q Hfn434L!YKlr4ϊ&I +3ge6dn5ݮT%.UOUNxYn \m})S9ScCPkdhS+7XnI8L{Hsy\(1F^i(,)N= Nkʉ;~].=j1 mMFGMg~qa)El1wGcE&DId 3BJ5M2c{(:PS&JSJchuZH9aS~wIIYgb#v!rw'qG<`"TV5+vkѢǺTT(/tw(KJ%OFWGrP /Z?aozE̙tHA| K&m54h"LlA←lNUrB(:jb[t?Xkw5in7T99}8_j.?v2 SӁ}4${7ׁܿc!k,H6|պ0YOt`kkauOzkԇduǞ pC9{=w+$! +eJLD h~ WUa(]`'jۛDGf:]%">g#O}2xMD>9wVQM{Ij}[#7A51C@\!0hV}i`Ԝ#D,La('ue"#&F +[%;&0zzϐ]4pJ N6ĔnjS-,xRT5vQެ6>yBYTWWk:\*J {^b!qN^|-7[0Мҧ~Guf$E~qc.K}. (+zbDW9IZ\l/bB\H"mTdIɨb rߵd[w[&a#-VʼR2@q0ϕy5= ĬTPU \H4 QcXCxrR0ԢFND=U" +K/, IƖ/O3ZI" +endstream endobj 8106 0 obj<> endobj 8107 0 obj<> endobj 8108 0 obj<> endobj 8109 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8110 0 obj<>stream +G몢jj&JLkA_v{Ue45t sukbd1 p[Q%0|{{ܲu;zlļ9rż?E[AƔ4olPnrt`0yʧʣ]W>_F ':D }Bi*"@B!PG ;J| yH6͵@{{޳t`_/b}(;:9LN.!ef8bCXۙ\A+'kyEIDfx%>zh,̵K + +<ۘy kV]UDĞ(6=BܪU蒫6i]Z,+iRt(JRRGd*vFem~6|0@ggyjKi7^hAጸ}}^cC^XbP1_.Bkdƅ! +ewz_pI4;:o`2Ʋ *jftj8S⻌S0yJn=*B" +8(JÂק. o_*1PYϬ!F]5-!]D\DJ6Cf˧P, =暈2]v\ZZ7%#juo?pc Ã#c!봝|W[sb7٢l貏TI0 \Jx7?%Ql>#MNU)Y@> endobj 8112 0 obj<> endobj 8113 0 obj<> endobj 8114 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8115 0 obj<>stream +@]$ #" JLvN18~1η$.I=+as]HźTZ'nf;wngD =,ZGamxwic]bz?]#+D' .74iZkz0[X=k~sm|8?˰JX-3WK]ЁƁA5-D'3$2ĩ_nop(րk=FyZݿ[m;hXT3BtF•]T;eh&TU. 8D\C (jú28~&m >|t^>Փ1 +F{Q+*OC^Cg>ۓ|9[ %"U?$ؽv[өWCk +Y:Vً%2pՕs0&01ܻg)WX^#$BZ'+ߩ΢U }uu^+EyRp~5(kn)%$s-q1. otbg{;'}[a}+q ΖիijSRS7x2D톜+n7}v }ɌY{9Ɔϱ3k&YSt-/_4ˏntAͦcy4ff?-ZTR-6w JSS0Nh +/~1;>[0v}R34o/b5EJeP`F×@cDM j:CBo +/4Is|ԇHLo > endobj 8117 0 obj<> endobj 8118 0 obj<> endobj 8119 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8120 0 obj<>stream +;2Rkx1Ϋ+,X;&]>@=Whvļr + Ke^e Hu;hޢ +ѩ*Lecv:uu@GC[);rj v 6 : >}蕩)k x̅} SO ;i2qu5cM u-.ޒxA5ާYԨpHXr6Lq咴7HWQdaidHMȜ+},)# puGx!( Raf|Q,A.u]j0tg9)(nFzοODlд( B}7n"3Vͺjگr^Q+R/7>QۦܹI~~1(#v͹ꚰ*|[2P H&E{}&sf:l}2d6]\"5J 6Og3pfQ̟hz"o[B,"7 s1߱`tbQ=M 8m'X.^I8 CIRܾ'+!JƮQhg!xp0-F 6LhHҳn\GÇSF]v|PW/!] Z!Tyh#ՑgXɽڑP7HC0tXrb&V:~- Nf{6gK v\~dOTt%lG9 a 0 o',Ɗ~M挧^8c.9*>- ⼍,zMg.`@'OT?f ם;acYME5}@0>R턧&jB36Kb YmI<4){nzF@d+ݯ.#R"v#x 9xZ'jN0Sƒn_So*X^x\QL !r9a+bB}.%|ob@ee+ibb +endstream endobj 8121 0 obj<> endobj 8122 0 obj<> endobj 8123 0 obj<> endobj 8124 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8125 0 obj<>stream +n,oXC0 J^A$z_D>$Aǡ_Y鎭mdİDmsFwqԆt/00gYH#HN? +hK[=?-԰Z$9tɪGZ2l3uDPk*?[#[I&ע*S5xG鏚~\Ò^M3+& +hN TZV'0 ]pNl/4M>dX*Y}TQg0@dѓ^@yJ*ǓIg8i[5MS랟 w'#:ObTpQH +'5_*( fB;LW 5 y1HBsP"U#ed_=&SuCwzvA$Y:Ż)/ck*W|˹x\*#,ȹZU̧DDிZD#*/TU=}G\NBl۔&A*qTEaص6qoy xlށ\wX*z +Iaǁ[欒eA$6sAKlñ`huqYu(ǎ:Nv؁@vy"2Qm"+rWt&w]85`-ʘj^e䴮O5M'͐MsJITbspТBbT!J_beKɄ` +N.TV ʶ}LQe u0 "cZC$*c0W | Nhv] _jso> +%.^n{cTnM/D<< ܢ .O '`ɓDd1,/wsAciKUxp9ݸ?̬qV?46MPe~ ,EyOuJW h}1;ф_Лt])_ltt4 +endstream endobj 8126 0 obj<> endobj 8127 0 obj<> endobj 8128 0 obj<> endobj 8129 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8130 0 obj<>stream +I2\o"H{4Ι |&+|dZm8U$72=·q5NjAG.M%R.;by{,隉#N~Z+'u1v?OLsIdk_! )^]@Ӽ Mیݪ4Hs^My͒, Vz.i5sIӈTAb⽪rme?p@yW$|,:ސ}I B氈Nթ٦o? yjhŦGi=onjq!D'npT"P)HVaomȣ!e܈B10VH_,P UTAGA%b/M-?UhZBnUŦՕ0`]iXr7E |4/ӓh?;R&fГm9'KR;(ߎ%!r\F6zR<̾dDcYעdx⸅DgTG6)Mr Hd0tDzR5z#Bdo7NZP5& ;88ƆZuצD1iUn٩oCXMuaZVP7Wzu53+=rK-c;-"fVѨhp+aI9\7NvBFfR]c<$Rgyqu1HDv@ 1ׁ C +endstream endobj 8131 0 obj<> endobj 8132 0 obj<> endobj 8133 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8134 0 obj<>stream +xwbAȽQE\/tD|wb2 % 5h$&2}&r ӹyƍNN;^K`i]a6ץ$Is,nh*#k3q9H5ץ L#X55tsPةNa?') XNxʭSʖ lPðԙutz=V Bu[O/GIɐ=(1'V ~Sj?lA؎$U` dBWfxA.Ä_ZW^rwjdO \a!o=fu?7%fU5]@8&NF~ ߁]X]h*[wg(06iMM N#` z6`1wùZ7?勅V#'ɏ IB_]^ Mih/~ v:h]6:T:<Ăt ɏ~T"n5$b 2jkO?Yy2k#c =;r%K@1[m9#uvQ?Y{vNHԽ9We&wsxa8:v&N&iRr64(T3&-vkQo,|yBeHgu &a$JeۂM2r)ވbVS٦G/8!6 +endstream endobj 8135 0 obj<> endobj 8136 0 obj<> endobj 8137 0 obj<> endobj 8138 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8139 0 obj<>stream +gù41%iBzTըMc@-Iݾp, Fq]?Vg3 נMLy#w 6^[l=dNWY\Oҕe0i)"ItD|N\-_̋^˲xŬf  ~57): 軺v +JN|N8(;ٱ 7U/:73=_ gP,Yc*bt܆m5Cm?r&`V b:%ө^J);7X +Ŀ6pq[g ̇ +ȶkKٲtnRدu)Á5Y5`vt2wVXQW9N\<ń~hW+Pyy{w`U+5>ph[v4dz+Z;GJ#%s^,s&7]5'EW# +UqPڑ G[KMB6-Y19w E7c볮?$Z >}r.bcQtөxz.lO2QN"U.3wAz@B43zM+BXxX#c8>vuo?5h(P0jYl=*P"B#7b'Rsǭ,9;rl;b;ۄZ`Nil9xg u%P4̳mt0PzʼJ~ꁊTm̱rG5^*87K.^T5["nY:/ +@ +endstream endobj 8140 0 obj<> endobj 8141 0 obj<> endobj 8142 0 obj<> endobj 8143 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8144 0 obj<>stream +[rI_mcHwCRkP̜B1[IX&俏@4jzy 1<, H5|8'_JӾ{GhCAcweBȴnc/i-@h/UаI`AbV@a"ےC-g4&{E )G'K'my'&MiYCKy.rqoU5qLu'||['me)&fYsZW=[MGDߌ>u@C<5VD8"<0\2e7rC)sq6^cFT$2od+ux@/MA7*\UD ץ-a ,mn6ϻg_ p](p[ (TW>u|t]QQQg,NXr.ێ< +?x翣|./%JBŭ9Qit" +.¡aB]ODC ]nݜhpL["wܹ/TFNWeOdwz$[jn^ZN\<›lRtWMq++oX沊eɻ, ,R_np%n(0] ʮakt]5M*e]&w_ \$'1p0k$`w5? }(aYtvWmWe~/64w6\D\@ ~#\ ??{P=Z0 0( +endstream endobj 8145 0 obj<> endobj 8146 0 obj<> endobj 8147 0 obj<> endobj 8148 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8149 0 obj<>stream + ޒ*X>o ]ஒa%1.e̓Ԑd:\U|2{ _Hڠ@~c=<&!>pY J;ן9'gE3U:#q/lx9ŽGo,XYE^?p$n#JdA &ϓkIۏ5p0{%Q?Jv`7v)O?E]MUôc0D@R{WN^mfD4h쭝hwG0G.>>i:4<Â.=9f)݆ ~3q. ͙3 +6?MMY1$ +ebo!!ִ }% 7E#kYIwM"c\TԽ)>afo+JgPF^\z3g:12K!$y|w?ZeiSyȩ`dMüN`ՂJ&c.B?` 9SSMx˻i pBr;@p.}g=ۇAO2twc8lri7փ==[R]A:"< ĸ}hH fكdi^ ]"/g'XU(XJ 7|Du@ŒűnՎG F͖|kؾXKrptqW֑ҹot.<Pwq>gAm)9b/D%2"Ca՜#{e ^OZmg _b6^c]@Ү)XZ6/2g}+1~l3ΚL-`Qi;S7a«Yvb;58fOk_d&;qkT)dWZTY| p_T^ya2 ^c훛l]j+O* dɰNɕN"\$gs\E-P}⼱A-?,vsNNҴlz5+nV}o0lXc9~Sv('o@DtG9:7b,(ǫuwsTi6 k:hKe92FJ {|$D6VHB%9ZƲo; +endstream endobj 8150 0 obj<> endobj 8151 0 obj<> endobj 8152 0 obj<> endobj 8153 0 obj<> endobj 8154 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8155 0 obj<>stream +wCܸH79|y[y &L A.VNw_JJOXTv8*$1Fu vu3-Z%UT0gG⚤3زK?Ce3AqŬ@+o^.l7s bϱqE˛>=$ lm!RH\{LyWJ&'hK4urlZtw +:zQ_*PM7On}K%hS-,#C&~QWuab KHϞ;I1C0r.#TAGу p߆L)Ŋ'ANl Q%m_$PO"t*b_M=]нbKX _F..ΎEfo\iFf7%yފ@dmLC^cwYFT^ F-V^EQ6 #=qUMMKE/HMYJꗌ;u!=(W<~1|',N#Wz 1*~ ْ=ǕJCw +endstream endobj 8156 0 obj<> endobj 8157 0 obj<> endobj 8158 0 obj<> endobj 8159 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8160 0 obj<>stream + m +rc'IyײX+Ӟ xu[%?*ѰfWHd'HB(YӻW,}i^BoIji+[mʲE?+h8\:N5jw㲦yx\t~ E?Nee= +nOƵc-2Wf:dЛM5C>(WjR 0G- `kmbf^^5<vģ#eg5p~D؆t 7% ;)Z;3Wɏ61u0Z)0޷%g9"G9T"N*^vxL>ZM?"ЗXAou  #SqAI8|r sT`Jc9ێF0 7tcwF- G +endstream endobj 8161 0 obj<> endobj 8162 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8163 0 obj<>stream +]`hB;MY#:-F@W!M ,dkY*YjyrU''"rU]<+jwǾ1M V_WV 9"-B[S,ي# ?:.@L*I؄,854yn,~˓3y&ʄŜ.I  miGAجz a4ۘIN=oB3sXݙm/z', 3aw)?0_7"b*:gkBd/x/ γ9WBsa VEom*4m^߫BÊDM4N#A1G+ C.-szNE69v +]5ދbx_>xk<}'=i~q1 +endstream endobj 8164 0 obj<> endobj 8165 0 obj<> endobj 8166 0 obj<> endobj 8167 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8168 0 obj<>stream +#t݂ܼ~藔D&j?ƴB M7bV 7N]rKvDk-wDq14/YBFa=dg< A<9a}E܇|'ԅA$jͮ'L{̍h;Єtsx`A4+1iVbj+pj%;Yyy|>; +Ko_w0 (0|͸~N倕6$:8֝yowLv%Ҥum}^K7NW`=!Jv'"]bSB/x:7OtZ,ȠdaW>=Z/o2F[dQ8=FΎpz  K%@?JO1ס $vGk{L-]) % +.r&}J˻r:׾>/jcFt4]~0Nꇺ2ч 2>/6'KK{!_~áD%c9 +1-Xse^zT@F)(im6;bgEu5\NޯfVt@]NILݲ=v<=+jD53 _,@zٌaZ,t/<7q5n8dRRcNupx4 YaDW`X,_؆D9./aV'6'p2OcJˇshH [CZȉq R1#Rc#mP2h!eޮ. _V^cC3d )&-(lhw"bJ֡$.$6IWۦSh KVD%$D%N<ͮ+qR nl0G{Sjh Μ,_ F|Jϒg0l],98[Zlgf<ɘD¼ŖlZ˯G9]yKNJ']> endobj 8170 0 obj<> endobj 8171 0 obj<> endobj 8172 0 obj<> endobj 8173 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8174 0 obj<>stream +{^`hȜc9e觻H,S$:O³DU >ESnwF1[xF2 $SWc(yZLpœxtoY+AE-e[{PLv(Y-.^c,7IR \z5ds-\Y Jk9nG&L>'Csfz:ۋ{ Φ38Ǖ=82yT{ Y/ 4YKp@j/fUD16 6N e=6XS'W뀚POHNjʂ֧ȱamEj@I-S*ܾgMm +g_OQ 9_*^ECV " k(XON%Xs zƧW8S%'jƶ, 4G N:@?0w,ߘAurޔM: bbLN:C(OLGfj١axk93ZS&sRIM}'Uu٥~"y711mPv5/z_|Nam|u|EXGŐ7]KosaK$ȤJ+-qt%3/ ?L2α] wo 9_1>?(8 ןrdGLvϨϣO$~N6e b90vQJ$Bq6kԌ9sX)ДpyEEߛ9`*rS\1nv\³p0ִ>XHY1$-t̒FfAPvp_q`1JlfG.^:u[@*&_5A!<`w3`E^{ WNce)ʚpfW`W'nZ־G;R7_Ļb[,}Dm־:W][ I72Hܣn.: 8rb5`t!o+z'Bvk |_F4dh.޼ +endstream endobj 8175 0 obj<> endobj 8176 0 obj<> endobj 8177 0 obj<> endobj 8178 0 obj<> endobj 8179 0 obj<> endobj 8180 0 obj<> endobj 8181 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8182 0 obj<>stream +BR< oi.T 7NTe5 0[@-ډ_ ir@rA^DžK{ZlX?䚜NҊϒ%䑜iΟi> .T MeD.. c2m 9*ePWzʗ;$Ni+ᚱ CtOm=;LF#`lX9FP-\_MΒ__6$iV1蹾=f/:9MLFZca/bdo72%f?OgF]ҿ !̤$\mqƾIJ4jjϱ5~k?Ď0 Y|bKCMÊK\TV57ahwMoiq.A~[S`g +&\: ++1ioׄE|s. T&k ǡ4S GtQA] +endstream endobj 8183 0 obj<> endobj 8184 0 obj<> endobj 8185 0 obj<> endobj 8186 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8187 0 obj<>stream +dٓnI7 +0YD+Rͪ\voQ?lo ؃.fQޞ)rKL 3k`MR٠i7 '+b$Z5:.df,Wk5cd l5.FdutYx_\wnڣ #ʾ v~whYƽyФ4)~ 9|ɏ:=IūW +1M#!@)X9@!cvhxjDζj9w \0˱a?$7_3}sZ ]~VT$#WH[Wx.y M}7ZZK\\v#71CY^)ԗDZ}W3U/B}. Rrf _2okx) e߯#aMϧ:a~g\ +kq> ީ@SN{=!| P$ B3{~cI0aB[o^ہ +BB6X7Wյ]8{'>F4~ AKwp/e,Gln]mXbqn .3,HU_Chɘ=S;@lw4΂2b}NInGYI +endstream endobj 8188 0 obj<> endobj 8189 0 obj<> endobj 8190 0 obj<> endobj 8191 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8192 0 obj<>stream +|sҢF_>EĄ(+KJ!J _0Ǫ9U]15{ +#gg0 +Z!!'ݯl+ +.faf*@wP>Sc"VҲ 2bU#ROQtNWBjBF{U)q䚂?5AXצcjQuBj2=?-񼹛>ʃMþ@s^b0h|ELA~0 qS)OR< 6w bEa画ToCY̳xt^,g 69pA&8{ړs&%8l3 +uY"Ǹ`{]X4ms^cNgLŞT;ƁI<%iql kɠ["OHtluOr8ɧl'UTOVOR黸.w @(ӣ[αsQ;O;~a}Y"_ +,]F­^v=g]K5%r_|RfPFAP4ӬL"^Z%yfG܇[ MkxeOJC:k&9 m:z 7)̞c!xX@mh +սl#-H `f-#cHkE9OI)٬ve-|8on,ASY`MȽsH͕~ZZ8z@/V੟z](߰L?8~W:nJeٲ{[C yuCuMS2Rs-&ʚ&@PM\7Uw\3`PJIX?xYWwXefNfU#/asQq6C5yf?1Sݽh1= _rŠ؝GS!R6}hrJ|& 3A(!էvt:L #}\wdg +endstream endobj 8193 0 obj<> endobj 8194 0 obj<> endobj 8195 0 obj<> endobj 8196 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8197 0 obj<>stream +jr0Nk2J<120ЧґfK*(I% QB7>8-an_oe+},# +Dm+yrٮSYg4YB "W^Nnwz(e9zU>ȯMWw۹]coKImf}TJPy[\ŽCþ [mF+t % \i 2FѢ1 XG}HLH(%j9n 4&<iD[3w?^G\ђZRNnX9g?_ο6mY$ +#rq o;;%~ CXXg&OojJԐvcH1ė* Q5b+ˢdZb Y/"o% $y33!I'ESPVu0@Na`J7ٌwbx?:bϪ/4tu;h}$!./o> +a-=@EeN[}ĤHfz$ël 6e[(L,x\Ƥ6~ņ*ǝ }ݔQw^'h͆@rbQ $P 2p ?8~EYĔ0 e?7XN+[e ْ-k6[oQ]pv8ׇ=Q-wE(Njq +KXG7Ze+7Q%}JQTӰAAK4"G3~,@>7s3=\8,|mήRu +hO)> endobj 8199 0 obj<> endobj 8200 0 obj<> endobj 8201 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8202 0 obj<>stream + H +Y1f nDUYD!Tafa,GaA' { !W!{2Nv+;T&V%/VuߦO֯yNleъ{ԊVV^D`puIAXQp@p`z% 0Lz\ /1̩XNGȦ.׽xCByFpYx92þ!˓}{6V +w-Dkl @(Tr HzmNG \l!+{r~Ӡ'2tr@.aYmq`_Gmw(|>7+w3h.t˪/3@ G y [^K?x7_CA6 +wJ^%W0@un!K-sA!݅\U Lv߉=yN3e%?@ +I[ F?dOY9M+z8r‡j@bZ샄 V6OZ ˗[t/)S]Yg1xu X6L(uw7W¼ǩ4I\9߈AX(:ׇ}5 +䠉F^LƒRw?l|vV-po((V^|OHL#_ Sd MOB2fwLJ9in?D|T[7tV]JYpE60+y%FL2|:nbyfa-om5 А +ON] 'HTo*DOw0xTNh"BAX%Tk ; "E>;34NVesfuC&[+!$g7f<aϧQ \ +endstream endobj 8203 0 obj<> endobj 8204 0 obj<> endobj 8205 0 obj<> endobj 8206 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8207 0 obj<>stream +xyb{jadp58L(d_y noOK_]AZ⹊nԶR he9JK%b=ceN,ӭHi*nϢ~[K3/mG"x;!iQl2ցrϳ/Ei7zlC,=:!"2G_`#oҲ($b۸Q$ՂY,mG Z0,pGx$ʣـ\i#Z7=ʚȞPM+/]GEvQz8Kb +"3ׇ.e=WI qϚks.G;ST3-]ыbA?Ƀ~o);Mc{AGkKi- 2&\*iNQ!_3nf-p!kIbdWI`fb@*=k"E=76{>IB7);}(jO7Ź?ڒi*2>act14 %4V$Y]g1)-;!Q0So$5@pL)3}"ЮR+2<+b|NMMk7HD;8 Iy )^*&3^Lw% AӂIJץ#0곫adS5 0'%m+pzjs?'zLG&*Jq'Bo)6؁̄A{ !isҜO#8&sE +!~Gbz\"Ft^Xn.O"("~k:6 i^9UIf9YBTμ8FwŕzE;|#݂xq=CHƮ祳gD04S3D>ILa{\@ghjʰ]L-(A0 G\&jR@nT{E^.%۲,;e\cjDʕ =pA~%I-UE~kκseT +`XQ=qFqC)yтF| +fWڹ%_i }qWlBJJFe|M`$B[Nv"6}"5G +endstream endobj 8208 0 obj<> endobj 8209 0 obj<> endobj 8210 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8211 0 obj<>stream +`8WjS&qrl 8=pz} ܇^lt ojSW 6ԎC-Grs"c +_?BezZMT)HV#I`^f-mOKH'YwaR3v FUڰCZ +F&[LM?AkϱWv =4vIW-yTiFb(zi)Djz\ #f<]-nCvED]VFQ4IyRGP8 ۹2\(TݼK k%t#Ujc1c&S%-rd5#[֐݅CeY=%Oh as: l{x``R=T͚^ϱQف8? >}|voT#v +^a=ZXIO1Nvj N~Pcq$>Sķ)$`uQL?z hBX( +(c22v{"wGnaX. -@&ge$)sö́XmXwžnN|O)IYQKmxp|Ld_qq)L!JpMv0$CsvtV +z;iu;rd:?!ZEPi+䦳}ܐ-;ဏH=tJJgb(II+HAtdF$U~ xZU<]t]<>ԉoYLP4ڜ`ք3u~;olk'Q +endstream endobj 8212 0 obj<> endobj 8213 0 obj<> endobj 8214 0 obj<> endobj 8215 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8216 0 obj<>stream +eRbMRfr*E'Wr*c="0I6H|K⟥"a~rcWNy'=X!YoPyBBΫBŹQ%K/VŊۉvG!*hevI3kwe':5Dh1^ôi՛@@qnCQ.KHyM44[mAn$om +˧B~;tD{%J +*ObKxH~xa떰MY.@;cZ DuƂ͎&L%c ߕi{"qWK?"r:2R&o C ;Y<7߸^fo&$&΀X>B,M>pG\; m/gd/3$uhU-(?tp2) =4t:CJ҅֘ 2_z,a1Ws`<̤pQƪi4Zj% EH\n<ۖ$UH`B=8=.U̚ 5 +ޱ׷JAH/`FSk +@]${.Ǵc\dP}< i~JgR[׺:qRVG?ȘBYK8sH0Rtǜ,!,8 x^ [ѷ@k"~( @ K Fd7641$1bg1gziVwbN~US%<4Ƶ9teo)TG N04 s6ۅR)gE$Y9s¿u؏>$`?L8H{w:!qtOi4Wڡ QDq{ t!B눴K}i s1n,EeVw(z.*u_O%LF]ƙ+u>\zef8`~ЈUR r|8=$cm +endstream endobj 8217 0 obj<> endobj 8218 0 obj<> endobj 8219 0 obj<> endobj 8220 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8221 0 obj<>stream + + cpТ2<̒(ʸ"]X+yKAkWu9g PL)ځ V}^6\(S+.֎Rb$I7sH>'iVB Rt *hq7ik;=hYImyfj; ,bY(ү:xmi>}ҋ+SLQfQ+&R|>Y2:`Vz>d2ܱm`" (^Q bx{w XT{sYi%!x7PO׸ʒBگU2\;Gրno]Fd_kmϊkubb* P ty CO?& + "xn'b'? {زå(^A H;$wȋkUF.\8J- !L/gsN{ ALh?`Ycvx92̩i-FmFp,D) + ͭjSa7i#Ծ\YՈZFO @" LG]V[[oB.Z5\RʍaHye|GnV$Ƨd?TWNjjT%q;iY\喃V\~؆wI ӶE%~j#Yw0pP]8nu0/xbic5ׄ3 ۣ-Jl. GZ7${Ul-ptMp(U0 &`K+o"*BrY,_䱒^\Og#cHoq#|RN[g/ 3JE:[?1då0(GVlT{B2(z/#٬: +endstream endobj 8222 0 obj<> endobj 8223 0 obj<> endobj 8224 0 obj<> endobj 8225 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8226 0 obj<>stream +`)rs-<~?#iqMq[arP]4=zL]tP^̃S$;|Ք\b6[L@j} J-rS)`V +4r^FOo\`SFNr6x + 'OO="CU&|B+E ~<&u&pa'M~HޮS(?2Ŵ5S:@[Lbl HC^HZ()}ǖE+!v;3 {nW\1y4*sir`cPPͫ)`Zg]0}R~ҼYwB9Zj> jz΋BQq[>Yѓ&sq16UCpZEp#W筱Dݪn#̙g`LZK'ZzGAPoEIʭ*H߿#t|Xp wQy>ʠmّb@7 d?s3Ku4Yv]=h,!-"uAVL9gzjx_]dɚTWeT}JFۜB/>umXUw8} uL6OP_OLPބ1Kx~Zĩ48NFgKmG՜S'7Ql2#F@l)'C!Td +: OYαZ@jkBb14zQE]]D:޷1m :Ե[؃ӾIܲˊ=,P55]Dq6SB;|qS6†lKeN+2!`BPe'IՉٰ8K PTA1kWf͸nO8Oetq'SZx#3LE|wh&%c:\ ElMsy64:mHI4?9/FHoSAژSz)3'BWjV6T_܇snԅI +endstream endobj 8227 0 obj<> endobj 8228 0 obj<> endobj 8229 0 obj<> endobj 8230 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8231 0 obj<>stream +1 <FH zB.m8D^Y۸Wb< b?!vNe d +$-/2Bn:$3m @JxO}֚( Y˧O1{k:Z%P40q7W RO9+;գ+g͎w0!b@Mc~7TfvMo0fqBuo@,q|J|gmα<1J+ƿ 4?8[`fIXݲEs Ny}Ȉ(Kr߱-]J ZH5i#D"E0VM8c؟,Tm˗k'f3&䓴fukBgV RAAGX4!CH8Plj$FaQn +(XO燫Oo~"%[g~ooB'%n>4FׄSHGG F_G,2DķvӬ%M1c[{[?rl\͏|6| +j v3E' ͋@mA 6fqg ٿ3g-rZ1kNDB.g~w z_e91+pwrПKƔ!)p7+UYQ$ EOɜ&ͪҰoOtE?u%Ȳ4z+>o"fklAO{ 07tUU3N[\^f b'#6oX?mN:XX[]( gX|h1O Ɣg3çJdip! c-Dy@CnPyh"!p2a{JG +3/YX[c +(^$-Oh$]<άMmj>#:_,%2lc(.s RpΠHg;σ)x=V~"7#O%2A@{qO?ԦhAl2zikg}.8xgkL\K \9q&XGV7 +ӒHݥWOcwjJN:10CO*Q +n"Y,Xv$)kS,(\{="$߯  ,H 6> endobj 8233 0 obj<> endobj 8234 0 obj<> endobj 8235 0 obj<> endobj 8236 0 obj<> endobj 8237 0 obj<> endobj 8238 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8239 0 obj<>stream +މ[U T[ d +4F`xGnx +lݘ-}<l~G&&*U22G^P,l1vxbg|ksH"Sh|!bH#U:ٸRbD'Za; 'IP|[t3+礪X$ nQ$xutK]1(/~_F _4dV܎ȱs:zaJ>va,Am5L*燭γB^_CI@, f'޼->{`b~d ~ʟF<{(ǘy) KO71ΙC d崙Up-) .4?' w֞!Wm`?7QR{1wF㙎ry)ߍMpu4<[_&U؝ЫAР"@+KYzЦ/i#&olYz0?5 9ÝM{?囻zz:L^߆/r3+s5 cA2I)to=qݥ6>7Wď1ntn>( =o~oyMy->Sz&{0J{ ` :66efH~b{]v'{=wϋw ECּﭭ\g|XHΪ(3uhLEa91kceIv36 +QwЕ׭mյxB>XbgsH䤆WfF/~IG٠/Uލg4ID w?B)P"&y,Wi w IyL e:) 3W"濫KVI"s"pM̻W0'EV1l "K +endstream endobj 8240 0 obj<> endobj 8241 0 obj<> endobj 8242 0 obj<> endobj 8243 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8244 0 obj<>stream +k8Sx +ƫA(엤ìr[#%K\zRfɡ9qA=:Ǻp0P}#*AF8W@r 1'zk̅W c*KH#XE1= +: _.sωrwA"RO9s4GU kZ%XwXK C/1M""v-kglد!s@N^TCӛ,.wH^"]ۅs +V7_KGK_)6=&:boxXQ;ssJ*PU&`oRޓWf_'ul5D_W@I6@t2i_)O{KHPfYgܗWˈK4uKO3Y$^A8ᮣޫ9l24WLW5ud-B)pW'T6\< 5bS+R,hFsw3n"pübjA rHot1QUL\>uMHoPlKzPJ>;JԫcGSFх3o>^w酗lە8}:/y?[/ C)tF=srGrwn E%=GP!k輍Fvd0m=,.ЅJfwiad޻0™:c^{Ѿ+&#@JgR9Yi fΊYϗB!QUʤ6Z 7F_u.pn]+%OM +endstream endobj 8245 0 obj<> endobj 8246 0 obj<> endobj 8247 0 obj<> endobj 8248 0 obj<> endobj 8249 0 obj<> endobj 8250 0 obj<> endobj 8251 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8252 0 obj<>stream +4w,r#W]/ZTV| z6ZCmj9p{S e.&{Ўk1>;:H-$NWҞxz?E1~ +ܕF4Gp[gȌ). |*޾iSsf 6ZyqVT룫fLTedpiF+z!fwx+z"ni,S}V= N)X')"myn=AMyhE% +f=wG ?afmZ/tޕzEbڸ.z1N$- M5l0$J`?Lg3bVϷ^3 oL}0u8NPBnuTN~/8 +`ÊJB&3m:LyQr"vEM^sr,X)%,qeD1M=.bbՆKoJ9xԢ4+2nD[]x]>$ li(ܼq7R`A8ϔ6͵Di֩G5h!$-$/"ɜ(A[A +M 7o% s"UT.{R)MV@~MsPCǎAOMJÀhjee MӅ͗itha",߇Y_]xY,ȥ'iiUF*IIÊz{FRWgz,ewNZ66YVH]Tl5|N|oL껸 (Jҏ7h(/5/iT-]0u;%K1j~MC8хvXnm\o + u:, sNu8=Ǚ&޽ol:GG(dϼOi9$j,Y fd͕us)ڻ{v6={ɟD mIj}=w\(w>+78*J.ݼōey 4t+3 :r#@q8qf0v_e6=DdV$޾x ; +endstream endobj 8253 0 obj<> endobj 8254 0 obj<> endobj 8255 0 obj<> endobj 8256 0 obj<> endobj 8257 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8258 0 obj<>stream +<ݺCsKBݜ}$$Jgr]S,(|A=h9*.F,Ulyw,Q) .*?o :40$g1:YۍU/g+pR+x_ld8[''bhr/ |z ;ȕk.YV\?f`p#x^m+0e ]fQV{Ee*[XĔͦUsƾ:!*P֔'WZINHh^.lJ]Bzt2DŽ&s}VIKӉD3wVt4`<0d0-%@D5mP$0l3]i2,SځIIRQ&] n:\0 +͟8ug6$tti:X]EIK(TV;CQ~ϾQs6Q_H;[lej{T2xF"UGڬ> endobj 8260 0 obj<> endobj 8261 0 obj<> endobj 8262 0 obj<> endobj 8263 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8264 0 obj<>stream +!= \U<$oki-ڕnWg~+.8WT 5y}{rDOq4)ѯL<3i-**L_eJT6%aAѐKҾwu*AƵ.>znAp_n Fnliqv/JwCm~Ev )miʎ[CtZ0@ -C8 2!<*5YsX_ɵzq8i9T/eLrZ-/V{C>Xh;#SHFPr|שTVwx_24B5y'B&l.5MHXa’1CeJLٞW#M?뷤CMߞ`,o&l {[[Nq\?,+̓Ѻ13 Be|GaLИ43Mel3W()'PYXJ\~pt9gѝYioS?JZv;TMg8K›GaJ^y2eCnր`pl9)LEnHr"\䗝dCwǠDejAeL_c⥐mtlՠ p[o*O9!C]g2o3Mhlǹڞa0Z^{gl k.[0չH,>Y4^=<.d. +{AԅC{ ˴λ5ۆ6v=bb0;uźQKV+/?6]V,Ngy z_j%5ALXN=g7,anaG0qs\ugzO('ٛg$#s WRwAeX@wY2M伷:֊zWlxC^@MX;G +N42VyO9`x5A0dUr#uo:ڧ&G覥񟩖LM&SD{Ŕ)!>$)$byɔA?PqG=N"{-mI &xvjC9l&7a |(IRbW|ھgl_Af5hܹeWSu2ۢ]0}HҒHd?\;@=6Fb`tά7G=޼Rm ֻ0|jl7W!T.t 4P2F)Ɇ;)&[KT')Jnv + ,bx;)RbUh> endobj 8266 0 obj<> endobj 8267 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8268 0 obj<>stream +@sNHydf~*F4ln(dSE,D3l(bj4\6m!=XDWg`)Ԋ_\}ю M* qG66$z}\bX]açfb\EA +{pvet'zRٶ/&8"nKweNF#lxꠠDY;EVe +ɩժ;&m%Jݳ+Տ$4)viq:6ü{4=ԯkI!I=-sb{㘄`IV=¹kLVqnZ/McyS䘼{;4Y#ؿJ۽Ƈ!B;e#={C҇26Vׯ Us4LLVK$J W>B~!َ1ui% Vk)/(ƐLx[(2elImrEBWr΍C0N2 P$dbU (]@Qi< 3شU$Pp;md,\{,tfȮɌ =JYu׈OI.5p.72BÇv^ +ÿ)?u9$Da'*+@Y!"+0<*]f#`S~ùb WAj|xHI֢A|ݥ8m]{q .[Ea|q"&@6&+>ɓZp0=@Kr1+dA:MőyG__(ךbOg-iv;fOOIҊn0.R-?7m@j +3qҐ'9Z܉/AmUm|SI}^1@V#0]*ol@!pw@X'SRVSʃ܆?΁ɉ%GPEpO8?6w)QL%BBZz*է6NV0S> endobj 8270 0 obj<> endobj 8271 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8272 0 obj<>stream +;HF"lj>\0`\Dli-@(VD1i &ݣx +H#~e?$6\Ku홹Vm* Roe]mlrhQbO* {ik{\f2$ZJBfuJ# +V@8Qփݯ#9Q>9Ehy Jh݅^b Hݡޗ S,x_c}qr9vQ?c*?=)2;xKdm"6燜{/l9 CX߈q7!c +s \ ?%F{SM&kH5I=`S h|ʁeQ]'΋"Cy\nG1q#Ѩ@6pLhlEz +G! xI7~bpJ;glkwn?̈zWzXϧj|O>5Ij'|iqJ*޹0Y3D3ua$٨ņϭ-Z.P10$Rb5}TCng8Fbp;?#,#k/B%:܁?V%J qЗ3f}\zbi5`j*jJ6vJ'/` eK}"12A)6`UJO:5Ƒ̟v? +endstream endobj 8273 0 obj<> endobj 8274 0 obj<> endobj 8275 0 obj<> endobj 8276 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8277 0 obj<>stream +@3ݤWeOPiN}MD;cSWoJײ`y~IqI~7V0:dL\"˞n0 +i9S@]+sSpN*^G{ FBiʖ+FnXΦzrKLoWodoԏ҇)H?17y0'=ԃa3jSlE^bUt +ALߊosIV7䱓#SF;&ƷdăuAʴ_4g$1>kEYS )JeNuOM485)b8> H13 +b.mb1|+!\o#Ɨ)Z}hjE ƨ]AY/ +b~3y? M>'|c9Ugu YePHqE)^`<Ŗs6k9xmQ|l W 1jŠrJ?%|Л-_ +5ʶNK$&G LMdRKm2c2u!bbG=sI VGԕ\ϖ +-7eTZ8h4R +RIqxIu:,_3h7 +ϫshĘ̧yl&[f01~oХ鶆̃pJ3 +COr745^1$T]a4Kқb̌{Awq-'tó9fM4bo.+|tjnFi.:cQiVcz*1d%rDHes3_/U^ > 0.jJ{@g­+A0mp:۳]>4; etl+\d +endstream endobj 8278 0 obj<> endobj 8279 0 obj<> endobj 8280 0 obj<> endobj 8281 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8282 0 obj<>stream +9Isc"01ʎߎ_0\wAAh`>5xxgMTB5,L )┦GUIq:)[Cj%g}:t9̚%2IoBcB~SY#7aIω_g̚ Hl1TJe¼k1FjIܳIŵTRRZ +g跋&qUS~!HU7=:cB7z"{tL& +Apg{n9\Ҝ`;vQcm%*t]4{Vp$ӝuQŇrI~l<Lm{+~S֖,1n,$RGeI‘=Q!Ucu7wuAך؍;As  OkY >#njTO⣾(6eA"}j)sBɿv967)JrdcJ_J PO} +U#y-kowOY!q\l+TaVюdeFg^l sYP({]O6_θaoq"qoG!=Zt.klA/0C#^- ɐhs"]#)3WE"J˦YZf5A]= qܑJؽ̽!zp$*}ő@iCJ nȭ]n+cuGk2'"^lR/MsF`Wev%NG +J}^objܘ g{(l| -ϱo Zk@ZTH 82!of7rD*9,٘rLt6'U{/us^¡P'vm&|ٞk!]k%叅(JuS܁=\e}.^Թi +endstream endobj 8283 0 obj<> endobj 8284 0 obj<> endobj 8285 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8286 0 obj<>stream +dŵ"4`m IUqyJroyqE'UeO4P>)eUQ$EѲEQ؛pU|nU!&H[#=6C{HPA|ekёO-4Bs^DkP}U#{m)PϻS^o[ +rCĀtSZ7$x(bF>ҋ 3{~ 4wʬ Sފ&RRz^ݍ +ujKrq1m6ȥ FEaT~HbJ[4NFԠ;%C9[g/m.(Rou )I(\s 2eJD{ɮ} +p!s,wD9hҀ4 M+Ե3+ſ.-%'@]뼢FMOoAd.[ޝ +endstream endobj 8287 0 obj<> endobj 8288 0 obj<> endobj 8289 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8290 0 obj<>stream +YIg{]*V!#㋕t &hy=.{=]#U'E.o!̨Crb*fB1]Decpް|ι)IW<YH`KdMOi%~Pz[T:K b2Y!we"l:愦zW\0^$~_2pj gjl u*p[qJ79B9_}H2~0 BA{n8ai7C)Z2K^mG[s{8>iFb04Z>**Q?O'%MHN˗J61cpd1ҝ7#d {pΓ9:&@"!A Xho EF@ r]|X;#UEa"$yj.ø,k>v@3Wox谽"*vn;Q/y͹>BQ.3I/юi55Ѐe2#*01QM;ObVSszcZ:sT:äN LyQY;.*@-dp[~ +%8pļ7GGw9CУN/LT٩{E*vsl,WeO6 k> 0or,}_xpX5TNk$< ǂ^;ץFYV[Y%Hg%Dip.i-y q3jl(Zd,r"W_3/ bW_h(rs)ުr4F pK: v}E+ZEڨ+0ć2(;I/I {A/_wQ}v`'?Ӿ-_FSq,J|_y`6<<6{AYx[l<"p"pDqtUnwN +APm~V(?Q([XpD@RNsd*A&|Xp=TVk.OPYDlvػ2>̀9i=. +endstream endobj 8291 0 obj<> endobj 8292 0 obj<> endobj 8293 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8294 0 obj<>stream +Ҷpi. Tt!S83[? !oYS܇I\DΗ=Vqτ7H`Z ^YIHjC@44K{N!Q*kOGp5}QT%;*Â?)u)Ӂ +3I '2bZ4'wGf+ + ݦ1\~?CcK\[3KEl祂_ץFoe (H ҹ iT$@Y%!7]#Q;2Ze!'v;C= +,p'y^P8N?1Y2MM#tې8J+Q˞<#(VWL%_ZnؖF͛pزˆ+cC?f>#&)SW%sN,aUK`~M+^{2|7+ uN197At`IrXs;j7gLPj{]-F%=ƙ [JIcQu`_n#4֚LE\| X2$47gxmX +FϧrThhGB>wLl8gdNMݷSȻ-Bc0? 3KضB{WZ/MI̅Gv-fjMX7OC6zS$Uޣq(!?7o bYO pAl7m=e5+*.H$<|'?!>߯4#i4*r+Q/gDJ,g閊Ddnc ۽AC· Vq߭}q;LvzokC<47F*p&E?[sE)&,+ٺP%>keGI'\0}+o1PDޝ`OG C#j /Fod%9ˊ.MTcurVG} | +endstream endobj 8295 0 obj<> endobj 8296 0 obj<> endobj 8297 0 obj<> endobj 8298 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8299 0 obj<>stream +KEVɀ +*{n6nPJeTKah+'.-w  +[G=(X]Bj/P|tuVh3} b)ޟX]X|A|&@ի5Nv* ?мR#GDžj5(kd-ɰ*.S(sj>(:p("14e@@%:kCPYkde I'm mVM4 ,JRn%4(Y UxQh,NE#a_fsyZo+'СH')[C) *#~f \Fx:`I.jWj4I|*0h)vLa

/xP"fHK--T.q>(Eܒ0 ,D[TW +B4wh]DEfXvY"syz?=Z9 #"793։_aD#*R&]?Gx'+g= Y w] o6,eF!ZMX KwN:nQ&, qfbsD=/loOqo|0DѡUX_Ppr=:~ x&ܲXHݏlcNYVL5W)`:HZԐ$`d2Vqc/f˟ 'i@D*ʍ@ Ona&+&1 +=cU@Fa]ho)u0B{:7P/8vo^vܶ +endstream endobj 8300 0 obj<> endobj 8301 0 obj<> endobj 8302 0 obj<> endobj 8303 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8304 0 obj<>stream +G&#DrY“ ;[vg|"PT6C+sIуi6 =ʯoP|²G6F?z&pgtW OCSx*~q)4aBĺql_Moi^Fmi-#q꿥FKe}3}6nԇvl}a_{a.oY Y&N _b/9)RiI_f^b=}j* NfILf(}_svc SN>2*ON:3뷟 Kǂ> +wZw!i׺7JH0cU=7L'`eE +qǵ*ӎvwO^M2ZTu9~M4q9_߫ !/?Tޭ vZcFHdSY#wV'OEeXSjG@3ƹ(r^ {㻣2&bksj#Q粖`FqG*b:']fQ%uemRk,l߈č2'|ޮIÐ9'@ YZJP]`J=&URA+Mucӄ''7xrң :|WH*pfWM9͆[';O'|p83\i\ZÕ6eQ t1ꬳk!/^؅r^?1ztIDJ]LH>][*bFH+ +X`BL>܍MBߏ.)FZcȚ#xp +0<FUS阰Fve(p\Vod`^ɾХd!(|(hf7&y[O0,.T(5%H\w'X&^`U;˓EXJ4ڀW&-a݀v݅/a05W|a+%SB]yO/n llWtMH k۪ QPkCdCtR&Pg}x[[;{ R6^U C k3 +endstream endobj 8305 0 obj<> endobj 8306 0 obj<> endobj 8307 0 obj<> endobj 8308 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8309 0 obj<>stream +T".0TSt!87b0{ M8l?䴁Ww0 gv,V)# ,".cp᫏mXPYm0PtT|(LIj+3upבL[//#Lo Ð4Wk0y:a_&dva|(4AhRA3i4W`~Y 'cH +>s(nʊ5k4X LEC%0>!v6-/I_Ӱ~|w_nC!2@uzG7} Zoq;rjm +UƪEn$Y}2}1u4Dz~>F<4rKF~ F?q cD$}WzWCwjFߩ6ƖK}mR7p[&.wڰ̷)nUS\RiqVRZb^WDde?=|F(O@= פ6>qɊgVtwT@0:[)c:BmhԈIg]ѳnEOH_$aL#IݦdfCX^K{,9t1!c1ޕ*%x ^F"6[hq?zRH;c@ \7 +DhR _{b˜NP";Ș-if2lI~dfS 3|N8C!eΡI nͼ`n[J&+tc kʱR*?t4A~Q6غsX 쿺^2X,Y a6Fx<\w|9TcAwI&HO (UT;U/Kb=!DK8uX\o?Bp KJ$/0\s)r pE|aED:9'8WϛV_ݘ3-H ݝ#YݼY(b[2gj}m¶LsT>mGLmIu# c^_3 [@)jCZpML>"gcBƑ TXLJё=~3IOsϦ {).Y3w}_;ƀjӢ4 7 +endstream endobj 8310 0 obj<> endobj 8311 0 obj<> endobj 8312 0 obj<> endobj 8313 0 obj<> endobj 8314 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8315 0 obj<>stream +"N>`>6&zDss.] uEza,UԍTX΂u^"O@I}).~$=TD = 1P=a b+;ev>F[g= y +=`oB[XnVRc6k%`",Bx0vi/^ח"4:l]y*zr%Ĝd֤=>uz}W 7A_8!Q3^Rk7qNa9ni[:C,huB2ĤPPe+c?DjqdWkٯ37Ky?k+/scn_4J<>mVoҟ7nI"1+~Im$JF +) _MqC +*oV1uUw3"s!ܐg9Яn0'0IG0 {IOii es`Nj!ꋲ33@(}odzP"k %LK +'!_[nw nPE`? ̀xO } B6DR՘ Z;.F fٙl9<5d8ɹOosSgSvv O}̡!*'NH +e\}Tg$K!!V_9 zJBI4  +endstream endobj 8316 0 obj<> endobj 8317 0 obj<> endobj 8318 0 obj<> endobj 8319 0 obj<> endobj 8320 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8321 0 obj<>stream +Y m_Ҟ '_p:=I RRe5~E`}yW#/^7/_39Qo +Pm_5M<ʠL͔1HR,ʜUCK[=@c~ZL_bC*ngS |0 ju?jߪC*sP(8v!5KGLeknȫ[>9#5-o*pc +.&Du"㊸ffۻ~kx$dbs >i'D] +M)}ri ZE7æ]/u imAݥߨJa cєXQ5q-͚QОߧ 3]7/$wj#EM/|dyj%C;͌SI87K!}5397\&x Wq:# ѧ)A$ S8 cFPZ(ߔϟm3-[LחZRa`s2H F`bۙ)i?wOmbr6:LjFQէeR0/[6,G'꼼&S.vs\s@\f9@7I5)Z %PeO0,"%Ma*wĜ1j1uꝭB x;:SroΑβ &&]*yMH$4RF P}@"UMBL\?$qVanca ׍ 51]-[!&\!kR%{UU; \]c9b(e3U@C!8aJ`JUumCǵ\ppχV $DדJp]'f LR>@ia,9U+\ {[V}KU!ʴ-m1:`_2t*]Y5wܝA_+b%H<P: ɔ|Y.,fi" ^rL5u +m"lk(2zv +7nK\)!k=;06i-eW2.š&O=SZ(S 3B@ .*osph'gQǍyb> Q0I 5\/nj} W, eOuk*(v@윔IZ;<M>yuaF${DOR> lkѱЃMtˌt9(Cն}fbz+LHvN…V4)#P"i +endstream endobj 8322 0 obj<> endobj 8323 0 obj<> endobj 8324 0 obj<> endobj 8325 0 obj<> endobj 8326 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8327 0 obj<>stream +l!g5#ْE$&ko3}̖ޖK%<Щ^1ߞ:Y=ױbҾf>`#3y+WC{8`)7 WګI2Vm1V'KHTu5 1eF9 7_;o|]E+S+3CM]iQuUsge +f&bծtLݰM75K؈9*^t~O=X>3v 6ne +-,֔r`&DK=nIPv/z0%#ci8 < cX[m“uD+ZT ,hQ_;CQpdX1lUjtI.ovd|/bN/v2]gRhB()3'YOR5SXv7\tk7/jO v@1 ,, `h))gcGeO(l^Ko&԰n!˧sCCeGzrQCpgֽvͤ}a7wr$TX^Pq~ +$ͣGUK + N\n×!_[ױby8DF[1QqF|=*&k%: +Im;ssmڳnpwЛV%d:wGN˟d99X)18y!va6PJ_h\H[qGϐB#,Q?u7Hx +~x(h9T]Ǖ +Ochhl鿅? +1.dt=z4<[9feU06 V% z2zVz#/ +\=C.2ҏ:fĴ?|G* r;` B~; +g`ai$:`DbL!<ʊSJ[/+^T^6/sr`jkJҘ̩2s: 7Uőf%eOysID>zWԩ9*[v:1 .{*b%lL/+ϊ|,-GMhV e,.Qb&|k +endstream endobj 8328 0 obj<> endobj 8329 0 obj<> endobj 8330 0 obj<> endobj 8331 0 obj<> endobj 8332 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8333 0 obj<>stream +#TGz٨JAѐ uLraC7vzk,1 HK0Rsb7kF'^,KTE/?J. GpD4_(Qi(=Q~LJw, +B+N?.yPnx6$5bMs1y +tp1Eod cluIǗL,?t.&EC,Y$gmHED[+-gďU vЮEe=sroZvLϺ\@;$y,qB7x!+JK˵Es g(62 Mcz ]zGGVtC6 4;3%. "HfU™|Bs&)f{\,;ir_FLm!6P +X؈)4B( Z5/^w}dW;ߺ "S]n$n~0bM{~>iUS*9YF.vbP6GCV'N!i40 #b2ᜊ{9F(f eb_(ES +{9 wW8Ñbd!AM`kδ0S<ë 5̽!e5*ڭxJg s v! oiqÏU\s+Z7{b?Ў276S(;NLd&!s %G *W7P sPg_Z/{\d|2Q=a'c<ࠌj5T3Om/Qq4(1@@z,| /': #Q+L +զ? \ky$hAT鉯҃p35k2EuSӉDQ8 ,@1˴(#D)b5ׂ]U2Z!v%|H$1Il[=0d~9mogHIUd^Ÿ$ꙝVS/bm=X\ Q+o{]$$oY ]0)]1k ¶"1FQFVjVdI]+FyeVG.o`Ů;O> endobj 8335 0 obj<> endobj 8336 0 obj<> endobj 8337 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8338 0 obj<>stream +]aՇ "mm0xÐcWR +W_k^`de˛`~j ebP*Bv7tĭt)8LO w;K@EK$P9Z+Dp \B3"į<4#..ڣ{t Mk!3eeCT6]~I4.>Q0#Ѳ t%G;r5x"l0j4m AU6R$E{RIK"3ΧMqք%gd<٤ÃQI{A0 c!mmQ3cSjgk1}_5+5N5 +Nؚ\my5[vfĽ3qy:UxX! Z]oHXk">9p^n-]1how @~_{ ߉yw'ٌ}d{:JYjjoO|o'HRniԈn;lQ2 )prgh>x՝%2R|Ezίt*4J) zbd(R8r2.BC}TrNxajZC+j=픗3/.ꄷC&iwc/+ DV}Z@(1lFzjo T:Bu(ʿȍtuDl5 $ƕ%]0toBpáF5l ~Ji`&ǹ5npv0JJxbv +ef9f/]|8Wuoƹ +Z{?Iܪ拄Eh6npfAyG BDoZs&҅Z=Gҟ֠3k` K y>busUoC1Zl +<6 <W Y6v441 +V)|4Ȭ[9n+1"2@I%޾N8\)cO t/(n.3=KU0xhvZ;D~dNY"Id +endstream endobj 8339 0 obj<> endobj 8340 0 obj<> endobj 8341 0 obj<> endobj 8342 0 obj<> endobj 8343 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8344 0 obj<>stream +S hu:H .2Gwؾ}/BnNebHJJfy\ +d-yr=;DzWO6$XEdĻFۈt ̫BܷrzKtf.쁽M#H=&jRe%"]C +Vu7t>q%Z{[k{j_ P]2M>7h)pT^^J:xѤl匹&.^^眇nYanMSC]GHWؾrHu,+U~M4ӈIжC˭F5bn8mK_Ȅ~k#aƤf:0+BR &e=AR?Z)u!6= 4PUpQ2I7IhT5N~4Ac ~įPPlY: P\ׁ edT,p1zi( tt̓(@B{ +o{+d!MkiUBfB$^IЖ e:I!M0*oxyL"sbnt4(oD}"0IQ^K֛4p*c:J;V-th3Kv\9a"D65k/nVnh}?'ct%n)M[վzyujb@yK A#.58|yU[Oɬ7* +0QQj4 ~4D5~wFCjYפܙh]̒Mt;ٗw?7144$( +endstream endobj 8345 0 obj<> endobj 8346 0 obj<> endobj 8347 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8348 0 obj<>stream +6!$*ף=;_%`Y֧4BiR˟ƳI֘EdH6hb[Q]ѧQ"=OuP kt`K+ ww'Kt{.WSL{$|7 wLiS|ey|2=O"符WKy VQ#!@͡Cu/=78߬h٤giJa(g [u/u6^D'@!ل^=:U|MrJ/CUl@ h T#QTV攅Un|g)F.ZV0%"rH2K-oi;RE--2Ӭ;gkbhU,HV& &E1_G8v|mZ2RefG9! +a_o?- ~v;~Jl0E~e?m]X~bin +{o BRf/˘5BA6Z1O6UMqyv8  +ŁM[rZ riH:!HeSUi ?㝺#{a.="hQ^?lU.;ĵ@&¥즀f,#0t +2`h]r(1,ͬtcVNEqMnKع> ȩe)sMuAI|=*BxqJ  +endstream endobj 8349 0 obj<> endobj 8350 0 obj<> endobj 8351 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8352 0 obj<>stream +r#-CJzόC.!5L> vؼ+9~MAε.]cr%PY'o1 )^Jɉg|-"eJhI$ nCWd{>r}0BN 3Ƀ;}OnqLG^&49U}(@}I4/JoڎZi 4Z'P}X(Z:i )!Z6Q.fPFۋ ($_,Q)t; +GQF.x=wH*>:R&-gݭ1ifsEV2E]b/YJK:,,e;:t +t#(CHy,AKǺ$hxU\DkQ`Rfh1\,}d]疋鎫>bdE5mbM^C&Z ?k !8RӀI(_,|ME$S&oc( +p4+d|K/gvR%T-_|Me]T]jj*qir;+X.{kdyy SL`C"9ONt^`#iu:a@\ 2kw;X$6y_M6]5t@ŞRf/&힜>w"1-ۜ$ng[ibp3ag`b4GgD7NW4JH}|`X!(h`t\~[+'~qik՝-d}A:bD{ԇT)D:Bڃ<EM29y#|-׶lRU*$yIBs4z&r䯕- uS=i@̥U\(#0 9ED78☑̑R9u-`ln/=:Cф@6'Fvb1۪^oDUR#=w|t"`;%,9oYD] bp2`o?j7: +HCmnQ4ј~}g5{ &$4>儧 jzN.d5׌PY]!>nPӞN&eYp=:_r?xpG§FKݛO^.AMv~6_U0vA! +*@W_΁I63@ ۲޺ϔYq|q\cEmkG'%PAHz𜽨/ki +lzZT 3Ǥ ("L{Fk*8qY✨]|Y'< > endobj 8354 0 obj<> endobj 8355 0 obj<> endobj 8356 0 obj<> endobj 8357 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8358 0 obj<>stream +t-Q4NN RpoF0ESpߒ(FXǴ3~ӚMnH(-R]1c=tz;-L3;.=ӟ7&qrHrh |&JHRAh[GUD*C/*q; +rŇ%ϓN2ve8FxЪpͺ!! 𝋳u-LQsN5[ܞw%jnVtzWΡш+GWFKx41 BXLJP=Zxq}'EWH=qL~ݼqy^ UKSwa~ޯw?xcmTŖ2!|}\ofYM;פ4PNf[X8y$ tTXԣ;[aPl*P"C!n|\$9l|sE:pU0‘MS*мFZXk ?N}y% TըDDp[r򐕅Re +ؗ.bBh,ӺJ9f8E`a0,رģZʜ.Y2{NȶͅL4g7fٽPu2?x[JwQ ]aW:MZ멣ibrd;R螀it{/CEnpݧޣ)_h rDtQ,ݓ A-bsQfY8*ۉӔ) p/ g5j6KOah$^$ަ+aa(Z*R׽DC8痭ָ.z+2D jg`[ǢCVdF4h#ѓ[VU&֩-؀:Cܭ?~_uuX85C܁|} U&z?Lf.@c]4 Y$Vd._V>{iRucs Wa xS&Ac 8x6%*yZbѓa6՛eK꭬12e]c)~̐K#uǮ`;TמiZ-1mߘfͰiĊ}!{q=M`Q$ыĴ;=gVդkVw}n A:5aWu;Kґy^Iz#!j}ll*,3H 0 w.soP6Ff!hm$jY})]{ɾj9xӗ$ Nl?NNCs$LVrx7N)q',$xkMm6`|{Z`.ڶdJ #xJtgJi_CS}u+3':92C`0$u*@{XxPGsqw%"{z`IV a9nd}Rk G< ΰCi`6D4vq' +Έn.la s[7S=w(k|Q)e}dejXv^ht* Rf`NB_%.%#X!y۾H~ZrQ7DxVp_h"uQ PWHџRgHi<=+zDCyOlG**HӅUPRRW]xWr&\c&(~n,G5-ݕ$ȵ%oع 䨬XI&#MjCTm%D}rUqR&4uEow$zPt)v. #ˆz>ߕ/Hq5@yWMBzB\q~zQAYFUYn6ރd(]T}rO͂ڨ{^Qq= +Z2zGܐzQt/ +endstream endobj 8359 0 obj<> endobj 8360 0 obj<> endobj 8361 0 obj<> endobj 8362 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8363 0 obj<>stream +Z sF`^#aQB8As+^'v[!rl=? 1;^V*(\R'p^_E'`S֞~rM,.[Lj k u?F4,~0W9+ɉJR wnr +HzsSO2տ ԑZkAEu*PԆ!aaGx@:=f)t16DL2}wnO(FSҮ=u@j6Gߑ0 5Zg{$ v1{mUs w7?+=Lr9O$w[Msc:LߌڱН,%x0`Oc]<"]dĿ.ӑShWjva9s\cttCYذRɒ:F!.w㡜]Ji56E`ИǍ1x OM +XA5.Njo> endobj 8365 0 obj<> endobj 8366 0 obj<> endobj 8367 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8368 0 obj<>stream +io)%ƪ*y+VGwhn* hov9!,Y9ϖZ\`YG \юZrȇZQIvn-ˌz16Q/}#lS Ac㡊}c`Vwx?G[-[iHJ8 +O džuXմLh)ww}ܬO z` !j()A+-3'P,u*RZ+*dKԈ0υZ2pHXni/W`aMug_T"Fz>}^w1CMԽO^Yp'%n%0s(Bkf + x Y}!RM札넑ԱUVKbV&ATİi. le^MOmiU[c 7; +L ۅ^l)6}*n9nQoмی jP6-qIXeJ@9B!OUH笡VU9}7q +BS,ΔZ\6xP)x23M'(1VMɬa_DiS 5oHǟ\= f+/ig]ʚzU)oH|,oiQ }סֶAזm0M)+oUy/Tw] + &$ua-.*$M`2kb1@J]~($ɇP_-*F[_ۭ5ob~- Ud|mƍoGG%ZklK(LTP*?gc/4ۣъ{"׽ ľT5JW[l:Hks[Fɽ静a/CR K}N_SǗ&9Z]%N!JN~<;F.KAOjD 7g -> endobj 8370 0 obj<> endobj 8371 0 obj<> endobj 8372 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8373 0 obj<>stream +'կaOD +;Ь|Dz罀"䳂}{[`/gDXRѠςY nLv+¨9Qʂr#\ghmC5W Vi$ ZSeR7e +$o=f&Z3x>?̄ +_jZn#O^|VnUl {^8Ĉt_Mb-b J#o>^ȥv9v*̣XkMxWlk|"iZn_J*٘tiT껗1Qˡ52|3/GɀTԑ-aw34Mzb3GoBaÛ#Y61_OK|8(#Jp|l@@+JċIWV ++oXӾLqy6V#b2MZLo۰ Bܻ떞tX&Yd?erFŧ8wn%حmm;tK/+ /{m bA6͆2zfLopI+l8FmIdu>5b0C7L1ԖJT kZSQxaj#B > *&#V}k#*?C?ݖim j0(~aL)ucoNCEJpA3Yrz8otc)ӄk&e}^3!u-j|5@y\*i"HdANTHڽsDh nFpmds&HL.o=('@$p[Gy;Ny+ tK\K'ca({'Gjcu#Z\:̓BiGjfnXk3!HDHID S-ݘ0ݜ +p0hCr ~Iݙ1ӇCV +]7Y䡙2X7 +endstream endobj 8374 0 obj<> endobj 8375 0 obj<> endobj 8376 0 obj<> endobj 8377 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8378 0 obj<>stream +B9{T7p tXqh\qc|{ w ~NZ݈;fk} J:J:?c:O6v,<QS]#V Ox8%2d_ uWosl‰a?;Ԣu(2@,܎l1 7,CܑiܪjͽCCİKj.2;@Cp\4ufȄ1sx7GETԸ뢯m% =Tb a߾a"/2G}m򁖂eCn:$ѮelcnrpO~#!xwAp;лzű$-rag̑˶2_lX0OW4!xse[qe4ɿHɌH\mP?}KuVeo^Y1M +.cV\@RA\Ѽ`.YE#TX$2ܼ&wdj eDprDxX"21 bGM&ǾTO#Bn5 6N⬔'j@RiOPYռxr|aMWO02@1duS$_$6Ɨֆţtȱ\)hfP==SѨ:/raaŨW:AG.%XG#aé2f#ۯDEo@̲ۭAǘJdT_:!nNI:x14oS"tvKp@ۏM c!ힵ紞;鐠;*)YK9]mpT[}὜%:@`E[k +endstream endobj 8379 0 obj<> endobj 8380 0 obj<> endobj 8381 0 obj<> endobj 8382 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8383 0 obj<>stream +d7ggGʑCM"4T u H0Fe-k-6Eߊ~t(zS[/3;pb C K 2 ؙ.](ށz/ +.~L$XrSV79@CݙeEsHNDΛ"VBgtuqAoZ>?d~U:(PVLVsw)NUO9 u{soԘgl`Yh@(2oӟiQ-uP&yFm h3_}sVڈo h2|NoWסTd#C1f4 q 갂^ĀxkBXF#ׇY0꒱Y2#Y38V\UF/‚vlјg6:Ipȷ cn v",PGTKbLÇvpc֐J@Dz^$J~)/vaoy]Q% Cȡ2n/]JjWYecaP2\J/8 +ŰG:OS^)hbpUX=ʤ~Ӝv^h[ 5€^pVJtqj?הN@B,`Q]svW@D4Uol'Mo`.?lM_˫oJK!G}I7semsP: :"r3)PZO|pӔ/kk>G_yko'w}6HBȎ\н͔Q[)2TX*]nI5wg3CHuJ~'7v& *Ws_WUʚ傜n"RO8ULU$qT7_Fls3 |,_~λlP_ #|S?m?!̪hA*,5YVX~5oWü٪Nq 0IGJRE_خؕu`B.;CTᴪe Q7%TB$PɟFtxv(͸&*$ecOgӈry8-<.uf W +endstream endobj 8384 0 obj<> endobj 8385 0 obj<> endobj 8386 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8387 0 obj<>stream +H[mV*ySzML"% 0Yc wp ^'AhD+h[oS~R|63$ 'nW~&y$pC'SM + [g34mamˈPJ>L{k {vL,CTzAyGtiO鮪( B[7jc ᴙկs}GڊS-x>2޴UحHRyNG. 4Np3s:F6ˋP E=o+#,;L7m幏k#Mh<{S,j +λ[@stHa;mQ,d  +mPH_[`Jp(@/Y< ~-F4Wo;`,ȵwmʉ |9E;k7MWc;Tn`&B/׭K>t~W.Ckf ʌ^y3>&xw2\d,5ҁQjxnVF`H/jI(Y2<@&TV^ hhX +/?{R]:qf3`[n㶐]#kj`6˻ }w]R3tGT`%4"+q~lpNXH^ \dݞf@ߢ6+Q\mt7 O&'Ѯ'Gk.le'L^~F&^DM?vOU'!|`1 cDrU0H,_N+Ǖ᠆h.?{!Yӳ¹]XHKhCi)*|<kL({sdK'WLX8IU1Ehn">[O\^D@o +endstream endobj 8388 0 obj<> endobj 8389 0 obj<> endobj 8390 0 obj<> endobj 8391 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8392 0 obj<>stream +ͪ$Yp4?W^'ů>GU}*vybd#v)[+rzQT{>fɝ?$iM;,q7w^&Pt8#tR_>in5<߃Ѥy @}?Tw64Dչ S:,F>ܯlE}{%&%eC?J͒a,5-(a, SIT + l,a:]Z !oVevL4"kK|ோ;κZozFswZqѝOP?B4᝕mZr99 ~Х>䴏#EKj',skTS={ћ:4Vh~E A?!3U=QEF;h; +yhSnw +BOdv Qշeչ\ *kg > + PͰ"Àj!^H{67jc8j7+"~B0WzIchyxn̨o{m}BZ1Njͳ Hn*eXFpI;.%X3+ySA\fܾ{*S=tRyV?蠳 'J&N(.=51K'abXoƻ}[hEH h5?KHOwg L'6gRG\Oz)&|vKNVQ#>] {?($aȑI` 禙K֬ZM;nHtBC>9wY.HKN Ww^ S_dmc{Ԋ]6pդVᝏgߠ^0O,BYRyk'սJ#SP*{?r;) ̐+ݒKۧݤwBdKB~%34?f%x[V4p=[i29BShN[֜4¯JĒуD|` +pxaN)ZZvNJ +%-aӢJ7j6*=a<(_KR0>4dܔP7ɮ"H]USPټ즵5@j#}ߣ럃j>5<&W2HyY%q)\7Z +endstream endobj 8393 0 obj<> endobj 8394 0 obj<> endobj 8395 0 obj<> endobj 8396 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8397 0 obj<>stream + x'y!Pc|!<Gva$j+fznq1wz]L|lJOOIβFo[6=5Z)9(kwZJ~e3AjtCU"ܚQohn;]bkJIS?,*t@w.ES8GЎF)68h3\nseG< "pR>jDD} a#R+YTOƊ;y7MZ7$kJIUz g~===k큕;}%01`SĔzZ7DPOH47Da +#OK1]v +(1Ե3wxO>;ܩ)XvMlAZX~(jm8J+F$[67% 3gSY,:Tt4U'dU&ٗ'@Q|QtV6#>x} +qJ: wSR>v^B~ZU99:^BƲuּLvZ̨7X#x0D~r$lSr ܮ!2u~zAOJRK: ˪@wjbjl>&CS+Rz.ЕN"ӗJ9&M<,C߮&Oi8!jc.gHSڕ%1[(bt3,-*ԁ%Ky5yud\qA O@Z嶒X$C$b'ccjnD?*"66Cs-'޼H[(۶Y׽3x|tty2u˜r\4Z*ʞ7ߝ  9w"FdUigZWX\fE{it +.<{Q3*a +endstream endobj 8398 0 obj<> endobj 8399 0 obj<> endobj 8400 0 obj<> endobj 8401 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 8402 0 obj<>stream +L&[R< !T ! vd $ ]rxYg'E !r6bQդhDs%9Лfi.q*UM 팾馂̈咡vÁ ^<72{r7ɇǝPW+l|(g:̊|u5KFnQ>0%4t31ЪxIy*/P~|x?K˩axtF| .V.iSGTym=}ZKi Xiѧ錹6j6G L^:{K*:QD\ㆥU>ї`%DjY5B,a4!"Xug~|3XZ&uX< ?1uXδ; + `s UER{Ƨb +endstream endobj 8403 0 obj<>stream + {裲&P%dܔttwo"T @尊˜WQi9oV?ᢸ]5.d; c+[z-(Ik8::Y,>ȼꤍ $(9_zg(m:VO{ z+ZV +UY{OEh>xk4 [k2&NPiI9u"s)11Dĥ-I9ЮKT?X7'CƷt[/=/llB#uK ra:tgxzA0 FNlUJ`'fKhM$[طQ8) ZR&=xD&tpLtW/8g. zjQ + +|nD8GN52$w-f\knW艹Pm9cFVR,Wujη̵ہa#Kng Tu>dW$+ծ5oM2#ۢ%vYцbsx{~_B(*nloanXPk*òSX/7z,7 c9" k=zĮU_+t/41 wJ&gW論epX1a_GH0ߟGCמLYMP ZLQ@kvU/_’:9mZd>W.z.Um%N(y_9_Є4V,W.% 7z`U9eLRY$M/~`^Yљg,uz7{#~G{i!9qq@8({Dh?bn*ר1lhZ=ܹ%^1X8 2)E1sg + f{9ß)&Ѓ5e"'/f{(k4+f05NJƖA'zsQ\: >iLV1={@ԂE1o eHo|(L* +s>IhemJiq8ɍLΉ.!2NnTjHH!0 +ܭ=gLUjCh +!Ňy6HY$1Clqc"NsۣyQmb,XLnp, :> F}hOtZQ^뾖/B8VSG=IwPƛa槦*c0 OJFX?k]͆upObm r3 5uofg{ߪ;-!@$ nOWi PwrMB9Z>f7wꞀ-g[`&D#jQ =V#uS>b *Nkaq(n# nŹwI;CmH O }g%/^R +m۠x͝(:½*yW_)wW <4(߂?pLq,uM/KyhyqS2;',!qb'=y@U/xn%wdr^Hq+6Kzlj4T 7}NʀfIb,_R=uyа}z7l|ΙdQ~8Bt>+YF+Ϛp]. x4g~v|Gf`& \Wmkf}Q~X +*WV[#e|>+S +8ƧGȵH|vE=lFV($GSs(T!f +endstream endobj 8404 0 obj[/ICCBased 8403 0 R] endobj 8405 0 obj<> endobj 8406 0 obj<>stream +0l} L&jr񬾐pص"Pϼթq+$Lt̠ܗF?PU!!Aō %V6蛆E[}VBjcdn|U6#P=mWxsr,QC۟ٴP n??sP"J̈́ g~=,klwxGÇ6K’q^"@=d{ۺts`%ڟt0nbg/4o o@\FKg~~Gד?Y(VozПqZPo8xMZRFN%ʂ#L}7w  +}\W#Qi@2D)|9ޒdO<2E e^`һtL9 +*<jEغIO+]Q;|.Gfm~uuQ?\S>7mUp5H;6 +~7 ~R4nJx|P̂{IqnK6:(],l + l5^.O?>Q"Sl|h|3xWzuQSK?<Wq&j~BzO0Z?[ yP +$:ݫ +7V$-[RGoz2H@0!olK]+˄k\LXρ,Bb:W':*djJ?p0B"`]9=j/8 9ޅj&6)$1: M Fa!kwvОE3 J +Sl<}/:e(TyݍVB;;xĭS)(?cPȆ-qJ:mj,`^ca .tc$=Q^cMx[\P%6 +& +iTW>JK<>XSQN"!%"Mx[vnj#9ʘ? O)Ko+(F $3if2'вx)Γb(kHK89]M;!ҙ&OnBّ8j.t䰀||;-3I/}">hɮz28y\IVr!(F@'!Mm0S{4_2v}+ 5 0L +چ?J3ˈPH~@:&2v{ G]}˥2;*BHLI;=UGuM|5s|lN1\3ha ^nxLb)kdTmߞӕ$|NglAdf6j$ȵ*TVj|F4Pڽdy@z.} tB5C' Ÿ⮨ȸTJ#"D4,po_Ͳ VQ'|>*",`׌o>RJGɜK/pNqpjI<4倊Xxii- Ri!U *Xuzb.iAEc,7$QA :[g"( +* +x"Ԛv~7ꗪb<4AninPڬM2@ug_v5ki@'UaUK*>O7 pf:ɰc$qf!qSSV;:EL-]wQ0'ZOoy KP~{ʏ.ϕ4o< ,9`Ei.?" D~dmE,kj\AyF9%g~mO$zMh[Ik,x`X4u_(X:0X@r7at6E^XWFGm]Δ=Ҫ~/~WFe 'PzNajF:Idh6Rn3a=u Z 4D"dXurU׀"=Ţ릘[:݅1-f]]*1@mc@޵rVw,J/{+qW/DB!'m%Fze)<*ܚrcRUk]LPavhNUG.rjt?Xil,ߧʇ8`/.8OH]PsjB}'+)ΗGʁ #.HM ςR rJ I}&fSz^0 䥜+ֻsƶ:$@$v^[QL+?spc\X` DO0zd勛[BUU`Gp[g;GjpKNv g)riQsl4`M['(QC!uXK<ȐX=$ﲋҐ̠rTUܚ;Th;pߺ42oݗ>6$<qS&ZF]!'[?Qy ?R9tS\}k֠ +(u/k <}u< $)$^§wΨ.˿ԙHA%\kZ_cm"Xmh>zM._ͱU^)ByQ}XFb@5]jW=6kF@Kp#_}*/_"9;nDdVYqE.j^3֫^}gYy~A@Ԫ׈ƘY/{5$>a@f!4dq<3r=#zss"]Vza:|g68P欇#WMG&zfYeimI߰>(б*R)Md$- + 9ET=zc4#*grwhǥqut +m5+VF*Po`0Q/-T96D~<&ۼz_3{V/#d>D 5M+xbL8%FG$V2ݣ1Oμ>1+ZٚY}E +UP+.W+D*i#4IېT9po>ejR 0T׻z|z^MG_EkmG ,&"xOs"RaԨCԣ[IM!{y;漻P?oaZ"?-a2r 1/2_਒!~ +p%<1t|К2K m= ks4H,9iL +ӓFހ}bKŲy1"ۃO>`!vmc`J H4Gb¶pOKLOfcJ>-l+CkGIn =jvp{>]~Y=\TJ3<\ #߭jWIG2p߆p*CDXO;KaBL(+{P{fϐ-èpmk C}geqBa[ Җt8BޟL ԟA"(e851Ol"`Cn@qzʜm0K +ycuJnlp;j +/6wQC] 3 ɇ+{Q;k5H1~#Zk!{~ r_q:sE4#Mї*ܨ@͗u;]I䣆R<l6G5  +pzfǩ(Ot?n}-!H uv*P}{q-2Uץn-d1M+,VD#e,IW"_%\1OYl +!}|@Lz(-d]R% >,WvT ʓo0iՆ)i)˶p=4uQBԂې@ӈѮ"*v[:yWs( 2e?XL7֊XvˊNI&t8-RjR{n4h4 j͗ +xV#'eq ݻE 7:z$tv3(.pT4qE;C€_T*_8zbD 7Z eߪkI2츓3uT2FT;kكы3LhL?wcHT hO'M]9kI*in<-77)\@|GvW8쳳Iu:E""=a,vb.@a=i=:D.tiH>Q"TMbk|E'riX{0kV?dƶ$ZERtf|\|g9ԙ/GuvpOKWm(ÄB%bO1Gf>ؿF`iq.6d4ǜBlrDhn9I*z(?eڦ0]ӍOK +XS㲶a]97).d0`r 3NB!XA,,%(*y0j6'p-f%,IJ0Z,C}3=2\.NISa" _Zds+l`7ZU27,=QogӠh8,岛?x8=aJz[8zc e<+9Z.#,K"zDAF݈bا.o#ԟ|X+rܖ Kvwz-wn%߫L,'#YFBK>_<|(jN&k,6̈!bf7&nRCywXֶjDlW5V,*T֚}vV'VBk0nt][<~}4u>CGŚ5jŭnJSD~7g3vOwy +ϯQ1y +lHOxfI\j>Ve4ps .e1H_q +7?m([fX_a'ФX|Eya47];I1PW&A C-aʧa=O*hY`1t ih^b 23+܃0d^ 146ێqlZpLV;15֘vf%el\{Wn.~z}4e}&T Bީ"* N +l7Y) 0R׀g<-;kE5@hx+U_PPאҊ:HTovȔߚ?g!N4 +;]X.}p1}uuln7d2E[,WqlQCWVYnSTd$6_B`CJupzPZt\Q+QE>`oL%nAy2ԚvZ*T{I:3(gmGp8r6.Jϱʴ +hրf\j4iC=3}qT*1&MJ3\6rik+9פ&Y3E˜\2<<ɤL 4A( gOޱW1U+Nm@Svwn4wK`kK[/p.5rTA1o +QsI0IwٚTU>cJ.̼i-7"pFǶv BBe; U,2ZyKATj ME0v5t;#iU.nj= ~s_,JZ5rX>sbӔ4< +)e`(K%7ӑV'z&~-i17L ݗL3J.5OnfRf1NWQ >d%ƇpHIBB_' +tx ΃T0xޯ9|$G 7[C [UnLQϔ#?DӠ8˨>A0Ends6zYTpVYr-78XkWV@UBJ|+U3fX]E<Pg,ǂ7=+0SRݶN9:8?ܢ-팰*3L/t#o483lylbQne<wj`,C^.s=[Ll@EѾJqa9$R\')BW률9Ϻ $q{Rs04%zs"`ɥ̢Pݘ Gn?Eks'J^]KrŕFӭ?U*GS{%%s-XUK^57d9Rb2Ϟ" !RQ>i&4`p=T*B 8vvKgSpg#x߭@?J@Դ4"i_3BOָ"VwFumqlcK=+?E 4;U +m##W#Z"/<Äꀓߺ7Kw강&<Zуf+ y}>!.S8rCj<~^B&VlFBit&Џݭ= r'1# vchB|ZT^`Eqm3cQm *XaM+SHYNZϼPE6X{kFx=!~swZ?[1\09^:#kOn{9е^Lگw~pbjq"a`5@r5EbxDnШ#c *ZtdP9b= ߈3&<+Rob5I`hMLt^e[BY8kTȃl6[i4knYJ+}nnYdj^yzngomo, tP}_QTNO^ԆvH; C)قdܽd %x)"G}̔A滢G _|ZzG+ؙ1T+`H:(-C #J +"מwG_n0}V fBXVh 6_oVyp`D;l쟣 !z, 4ܩoYV^[aOR߳Sa^9S1fds]cy=PAֻyM*< dOm8e&^fEn^i.OԒ|92˗TsS{M"d|"XlT+1\|s +]̅v7i;d;5ٝ[L%̯md2lu#i=P"4%].I%h rDT3j X6MD:GC?Q| Xnzj_PY{D;e\?= k)R)  1Hi`;1WԾc%0.Lx-*42ZVxy~U1]zzCލ`s;Y[HDTj5ܯbNgvJpF!?b`Qv[YNC_ Daa%;'++N@Ы?,.:n;PXY1MiHD i'Jhtvx hcUF1l>*rp4qP, 'Aeda-P64KLڰ$4''?>ɡiZD,m 4,Bs-,Вam$o#Q;ȱnDž]J_Ʒ85{}dtC6Xe p{@T^cTQ3˜ĘԜ#toء;4G%p G/6tNz=SxRphu ܱɎB&Fr;IFNGKeNUw2+l1(5 +7XuMv7eaX8]Z%yZ,N ;}4K(s͘{4:~eKlcb|X*Xk-,& +MNnm;c>l$&+G֞gT:(NdܠHAa)icEd-Recp3ߨHrxA@>¨eSY&=⃼wkBb Py2V67c²:|kDOCc^z/񱥧*8xh;`zu!8m˫xXq˙YYmpKAKq E]ȄƸs9'"AϛFRjԺuhZ#ATcV'h*c: dA.-ŶIMw#sv}]D` \5=@]0W̑x[/G[Qy9&X]Dn ġ>{qyúXl ^BM4t΋(Bey5hOU65O@mg e[# ^#?&MgJJlKJ]4 flڶ+,`q6E+յ7n U}rA^uyf0^n"B;ߥLH!&W=Wp2;k;_h~ ߺq/fT I 't%;`ӻnKk!SőH[Uȃ=Sݨ/(Ur濱eDkx.\௃nyϾaڪ 'Ag@Pw%su1w1Of<愞o@|cnbS#m-ױ]:s!ƫy]I+yYQIMuv ~(=f<vt +CFB~T3ᾉɂEUx +TctW;yQ*vY5nfglp'*'.:Ar/7tw8r.AO56|gRiЏS^`|Hs`@*Yq >cش_)U6wf) |p ڗ6b:X"T3ډ@8cWҿ?k{HoM?-k vfP V/`DY7@n›Xv-!aq" dXZϋK=Bk2(anCvMc( ý-.;PlS$cz2Q*/BQc~T/vlXQl_U.ʔA ':ȶA[е*,op S\JүjIpMG _ &"!H`IޭEͺ!1EK=W\.l6MVg1ž {1lXBN8爼InDN9̽ŘL6HG3$ {;=|7RXCUB|'-Օv$і< H[wLc?YI14Q/5 !ݶ/!N9AV ~ҒsO^ݻU%p0)zt/׏Ɠ=|%RM@& 7m.ӱ}E} +gIOp^)X1X'VvGa|ǘK| (TyXc;IOl(`gI7oVd~wvZrLMkGN +؎\ntD$Up3䈸鎈.o29F%|e$/{u*W@)bˈYW%3orxIg=g}'}pX}Z ,!yoʺ_fmJc:ho5Jn3etE p`VB|Q{ܮs9%747 Uؠ%/C +endstream endobj 8407 0 obj<> endobj 8408 0 obj<> endobj 8409 0 obj<> endobj 8410 0 obj<>stream +'-gVs Bcyһ2Տ5 tCuO-G89? G+2Ƽܖ:[Ϟ] #;i/~ɇFWN 4h:ĭYyofլ +Fw3)ɨB! e^\%{ޏ܆=`rxtMd=36=].ܧĒ*U8@e1?"|[ |DZI qc YCrPݚE6?B-^kFb3Eڈ˩Q1ߎ"ѝēUC.u<(ft#p6Y{x߄{ڻ `.Ӊtn%ʼM3s?+0%wP~ĻfI!& +SJLP?w0PŤnLaļ?\tY[SDj L#2"AHHu?; |z*~bߛ^jX&O|4˗7Φ"cqY c<Wgi²Zرb/GAI/W2Zyitæ%dxԦlOp5Mi/śpj2bD F M{ .ob1Nj89}"59 !C.Ȩ#b館M1m_A>rXM{C.i/pZ #Z>Vm/Z$ϩ̋n$8g kKi1ZyjXb, @Ο܌Ė]/t'dʜC_)q>:OCk]8s]EOP6wHSץ;&TmX?ukp:Aj~|-~=>ԒCp1dLԽ2OKa{[Jiܪ nOtb+ :]%Q&Z@W ;vhѓ\?jJA&;}zXvpkم |(n-U)VHfuŽDLwV?gf]8]|9.lq';7->==_#e{^h{-@96Ei٨LLkAS2dOh$Gn5j\va12nI7cFNɢL0ho_ +\&+>2e>U_FbƊGf#8/O- 7R+wHH*?@9Z"s"ќU5ER,G##*jd.W +l; /JE8>598e,> 8dv>TˬT +?(Y{V MbXF +ɜOV'DC(kӻmQW4׷=m).t&ϬIѮUOih." j08add^i35`VIF↳Daf*\ɨOVwPb 13cp3jڋ(B7;9R Jxb +3;Wum[V-9Tv| Uuzg] UՌLj' Se]uj2Ʒ ix*FA\LZ5Q\u(PbS!q6ZmݠJVH=?_3L H> h90.O݌u9X.I03}7۽߭硝pA_u"B]ĩvф>'%3u:K1i{Ӄ]gxk@[]N)=cs4ȠJ_hA6U^}(r26-LMSʠ-'ޘçyܢ[WD< lWGVt8V4K`nq73&K,eJy SHӎ;jj#S=tXfT߾ge^Sf|UĒW>ɸ\z'zc'#P*yX &1LdL-7èxq}oZFÏv PP?--|sPCRem*iNb<=[~$}fkU)& zoTŚ,>J1;{J |h?0X>*p{L~ǿ.xAVoVIidīPH EȰ}=+J=v?sUrn94,RKmAR7y|\őǐ=;` =`+*rf\;mS[21@Tr3™>މ: $0U `TuLڞow( |JmhR";Ze=֣R9ĮO1o{(Sr[^$n̎UAAtOJDe, `vyࠏ ++Іb53Kn Iw?uX%W]Y|ol /Hg4KZxna\\~Pc;uLuy]o<Iڄw 1hG^x>{;u[{i ~؛-6_V[❠mt1Xl9읩+aS(Kz=ߋcv1?8 EL9OB Ht;,}&K}Zo0U ky|/žXz 2!6#:=F`[37o sX&>44f(U>/M @{zzk9uLBAC"ngZ!7vr"[dBdsۙ GR9K>?мR(k+Ja/if6D)2a +/{yhk1+=J(/䇛9D#&>dBYt ~#Yk+&LsmI+t'Z1DѤdB{OP9t'שgN5, .euhI~efN[.wrK)'6 /fV>U~oj+MiHnIѬSo}KtnLrp+"!K;d_(]CUHV-ƹؓuB> 鍯!. ̴{/*ŋHD$]:lj3>K'ٲ @ +Q v,r,23_G%(Y6Ϳn\qtlT?mϼ& #?gHnB`_-fsͲHaFq$!. g.҅(Ev> r(d4=#i\C*FH^;qN݉h +Ft M~do(W[a`38A ` +']#R*{SY諁[T0C:.cЁž2.y9 +4gJ5MHB.(i}yLN5l3>z/WN)&wZ˔1Q+PٞSgwec \pW>A9ݷ*{!L?h^: }Pc93j"35oy3> +7z JY v +*(zx2ZoY oGzP5W8^1P!NsAk@I=Y>-OZr^ae et1ElYȯuO͂%ض&{w;&U:e!lvF貨x9W|61r"Z}X1#`AEP] J+赸 FPzh 1tMGZ-所o#ڻK8B'`.qƦ 7d7y[Zw*+*ŧtdⲸ6Y1Rʣ'%?-/46UĖۃg814=k4jD~}IH|HHʐ5(sbv,~Lzȇ~#U kQ +p-"#חBU]WqQmhb 'rڷS 5jZ^YIq ,E- y#|8r%B(Z錄U{ WF׾;ŝVR~䛑|#y̢C[BAx[TtXopkH 15M{N53Pn//KĞ ;r N + }:AgYQO69^_I|4䈋tOڦ@ ۟yWv2q*2UT>"dvZj9#,3#iퟺHOԣGMrX{ &v?l=FS5᜴ ê!{N}Z,~0Ƚ?-Z՚Lofb`0=:h.E`954TE>rzj_e!P0+ܑRE^jg:}v'-O$Ld鱩.@)#7&=1(l5ZSF~8?:%ьI7%a +v[_gSA\.Wc +\TVn;g3(cJ57KDbHHCb-lp;U6y +% Uy=Mt)ص`@5aJl܊sGxd[dAyFYܧ=ߞgt&u w+)W;L.`ɘ)GZq>uqofϕ7 +xaXrNy B +R +XիuuMq@ } + +LP +;m2[sgQש@0y'_]yF:FTSveTx + +RUPg$>'&.|l X|EΩ`"0L==~5oAl3(e-;"'*nGuq -&ޜ4hak1w_qxrluRt +N]1vZE$BQSY͟+ Ro0 +D;W9/,ޓEʑnf#⑇o&Z@)E?j]{'(DqzAf!姭Gx!3v E-'ͪ2@}y@d>JD+5`vo[般G|XӐ$%W*X7aUwF]UK+y4jAg&6UͲ:x\`YeRe۠Fs 'Ew:ωWwjT8 3!^o+)*_KȺMgޱw HW0c_5,kQ py̎XE]E%֫~@d 'p(o-MezfF["H mM1Y-z +7'E-tEjPҮ~Ļ|n`JCiL6Nod0#_BL)苫)4s5WZԨp& +Ulf=pdw_mTiPD[d4Vdi`;[ƟIϽE7Gb6p=-v']` )EO KXq ܝ~|n1{=UQ!*&Wp2$j G#xbǪi5[m#O ]';sX%=@aqEnqiqU`FѐOXqzW- \ym ;[S+>T^ -niNl۝WAU*k></2Om{,OaD3 RCn6ThSSW~OBWnd@K8%;͝pk7Ii-PC/VQơFϙR"}ESҸѦm9}ULkr [ z"Zzc|oR12)w+a}zfjl'WZmiA=P>%SKE!87Y%k/ܴCY)(Ӂ3I7jTulq#1{艵`4{ovecgvRH]ivp?J|s+)rU>yv\^%/`tkO Dop8=Vj" ^Z۠+=/U%-Eهs߬bEZ)䡟Y&quUIZG% HPY\<[:HbThI(1S.Z#|^3kKGTk* +[iGp76)a15/y!(" LX-xɓc^rtƵ0XD1KV)707@t<^y4Jkop ${ּNvhGDϴ 'H9&~ wtՔ:@D~*2$: J*vzV4J <#=*P6>%wwF;;!6mX+osƒ]nW+[^uUC(CJxb=FdDãSn-#&0x~H~|܂`IµYL׬x}Q +:u%m&ȠMCG,fbmRF^rv?>TbX4$ՃZR^~wa'ْM̘qiŸ0] 7q+vcX%:ϙ߰ ;]7x͡UyY ^+ +>p؅I|<-5v8ej~&OL,ׁMg N U1֒ x/ԧ6(Eǵ Sմ}SQ6V}0z@)c^FK+T/i){^g4z%Ǵmkיym?QKk6JSW ޻X6g:4ӊuHxuwA-.,HM_D)7jٰײ⯯ _~HS}Z(yA89BK4"[4m<́mL,bြ5qxoDNZԷN9l40pm,33|MDYɏ.+:mc+ osʜKtUQY餥6_XO+OtȬЍƖ2" 2_|y1uTr<1ܘKh {F-wjSFzeHUDyc"!WXb'4 h*H7z>v[+FmaxQ~m/mo@Ťp _Mx&^B ԍ%HUX2>Eo/0&`P E_$X|yO}D埞Gek;@{(fqkTo` c!u,}3G>#P>>F\B z+K L +bzB߹#DA{7DRs]壨U ΆwН%H̋{ƱpRV/vcWqwn-Rr+-qyi>%'Ct`6t @C +[Hqܜ's2̉*kk1׫=ssQbeݼe v0[eex2D{S$4bhi >rybx)1vt^cMMRߺ5.m&{vLY 7V9QA狼 w~O' 298qPB`feX?Kq(y-`RCʎqM.:g2H|Ҕo[) +7til/ DXm+\e.]oEչbavL/ߙfP,oTtXļ9m*(nV\-59I@ +1F#H$c|PĨ۠TXGsG':FP=qʅzC03;2NdFD5L68KqFϻx3[&sB㆜uxaXmߵqkX 阇==VM ߔuǓF9sƍsOn\қ~uDNTs99@,0]dxR$ aɤcUjPțIIMg @R6a9k6! WeW(ƍJU MM{2!rx׎5-vϲTdq/^WYdÿUzo:H YلWLXs/ +u<e#?(GelN46Xꔶ |dڵ1Mw:oWƶ/1I-UyClh_7HLLp{9Qw5 :I/ +=< 6Dd ]^PUoͲL +-9wꍧe$ N= +u‹zw0JF$c)0 b>Q'Z28Q{(8s١7kChӵ9Xb#j $I ׍a~ay/;4=;ٸc'x7$K4x.Vl3$:yGm8/T6 o^rP)>h0;P<%$/=NS{SE#PntAk۬kȉMy K}e9&!H=1^';63Õdn}R@P(2 C Xmk}kCbM.!*78f 1NDp:;l&Xh77ƥt +>d}N^'D~_zB@m;PC V1%٫ڡ%%nEvmK5cwLG >ӔqmGk 6V0A05[ۿ5tZxbYة[(]2*Ucsy48j&C[Ē^rccgPn55xrEv0:yиɈ蘭PS +7G%|+F'#<W6vg5%YQqσG^"?,a3d²(VYNYpĮ\z)yP#L8\SuJf"P Ь<=US<-0s0`p[ڦ 2 zr7_KPHj`Y|OoբNZ,gVJ ad>W_ϹbȬ| TV!b@V_A:T?i,LFAd1n+w^.D[h t(֍FE7MRCd'H u߀+<%ʶm;ZAYa%sb\}(EuC4ԡz&S3xU:am40[A%Ҩո>%'2K[.yi>_k]gD4ͭrAnlEhJL \-VoI<ײx{}UFd*ߏ2ài T +JiW8/mZuX#&<:TU?:Ar ! !=C|=j]lY}`iX8+_麎Zo^| @iuXuSY.6ɥ(ɅTw3XW t vXJE-cL!)\10m>Jh>lQAc8,%"'mO {gXx[<I;ת̨'z@c"xWpj@!/kVwރGU#MR= VUՏpV͆ҿP li/KO[&LޏpmpT{ 6YM>\7B'L{AaCH*өjR/WׯgP<Vϝéo78)pOJ[.VwIMX/u+[L"ۘR.es8eRzbg_1uc廦N0j11!fqZQ6$9Y ц`^=r\ ,{Xl03hpz|)Y:6 jyQ7PMҥ~Ciwm~Ab 7uNIq[nf`ԫQJ(66mbՁ4wekiEָ./oU"A,_5BWaз%`lle|8>.]Kó)&eڕKcV_Ie3XCnFF𢓚&+,_Z(f첍p!Y$\mi yIk&'4$Z/r#f?G듇U.5 1k7 W8L_@YU#^\uy~-{%0&hj|Uu :1Ռ^G PwHF="CFx4d-& @(c|Y)X K.tP;Q$yXĪg{ksU[9<d՚jHy +qCt(4 +1CY.&7NHςIdX_X5bհ2K1>GftFp{ N[B2TDtgr \zYXi,;1 J,#}>+wP,6RO>Y2 Ghʘ:E8 fZuٖ&wa}g RNoE\hC y pWm\Mk۳'teKP=Ϸ/\' s(ineNJRQi7j0iҼz!<ίw~\tV zE-]qݱ?E+QV8*OC͑&Nc>s}l✙.ƸU$;c(T^5zɩ[ ' L sVwpI ,e43{Y7O{ۯyvw7GHxj`,2nQ~9UkϨL^ XH ]?IthJmdl++Uܹo\?k̫b~ɕOsLFZ |'7@xK}< đ/LV4dBApmPž71Z11U\Z{&OD?Yz6 SV`I @Twe<8SsӚU pBa_|sQhB=&51{ͮMR]PkVx{k~ژ;P\P4/0m).V/b>$9E"ޒ* +S`|Are+DHfGóld +Al Jqg3uu˜I6劓h\Nu/e52,wtA>,>v(+[q>_8bf25Qן@2|N|'x0ǭ7_ױTN{N՝LuoKG[2.HPӥǧ\O0۾zJ;(YBr=kΊ[TS_I. o;R +h~j*Bv[/A%+кl+q|>oKs ehף- 1\wUV<< |=6\M{ yCfz┵ +㚁R< NkQ~veOxt3;ރ6,͂!ץ4FX]w?ںǡRN"fΖ֣,ڑL +'9-}Ik΢!$·kX5SCHQ3flH3f ++= ۥٱ{e/ o0c;ᱶm؆L,g(hGNlH_J>PC%zg슿㷤D5)S)Җ„+w*,5ȹ\Ŕ 6g2 E&h=B"diA܇UHtqI4_Т1`;np9ᄚ`iR@dÙ6_EU"k +kէ.EzFss#zZyȬ\-yo-~V7'؁]=+7Nv\,^(`UxRX=%8nѽ<71TV}}KCSxr,GX6>) I_!;!lmx8|_0W +GEWhz_<(v՚'!:jjcc8*S4EDG FLj:pj[/St^%IU'Vi'JVdvQRA4tdnLI- +b'HorFw%6U< +^"o,O͔`,d[VkM\nyBLaȸmMD`=PVmnM/~OUx=B7/U|% +RD*P/NI|Z;Ti jaS88rq[D>uE+9eއ O[DVar%.q ?gA1`Έ=*$ Pj:`-qwDHA1hÿfP@Ё|FܛE?ܜE:]%Hrycq)\)C ;Fy~~;`R.i.8Mj8B?{+ y:B: SpBUe6Qj`kfF32p.9).m￧)(h.j%wROh xw-d0Hw06 n c0-{9 !cƠ *JVV7dc}#[07G c[a IG>,nl +ۡh{[*:=f+lTJ(Q;G*rtY@O̽Gm\(  ڌET8L/^"-8Z0] AUx]rrq@&A>={3&/Zea_s\`S vCNiH&72 3`0?25<)v-8fڠQu{64URz{@Ў GmW&@=,g:Gc[O;}A1N/gE/65 r QOeYB>C@?*sUUș4+ 3}6 ܽwWIJUѴ}2ƙ1&Us|WxRS"C쯑]γ`Af[JKʭl&MӥŁB/˗a7.JNP/Ǘ7P}|cda{+ h71c=?%*_K3MpviF\4@oDi9ЈsfxūE'E}UP~"7_{dWMAOJt}N3JAl<nZ9`4=cq5izK-ѓ{bޣx'Hyu Z۞Oon(w`^݌Sj+o6\fԗMtj? ΁?=O! 39$$]\a{ImCdXY]w/25C ;U1MatN^"0z\Rւ,D+)j6IՀp3W +5Bדf]iC+ #[w ^fww/ogOT)R~vTw*YvгψLRd*tܨslÆ~Hɺ0?6@E=gSOv}fyb {LS -/d4_zrݱaUW䄀3׈'F.0xa@ + o :T9)oD" >d_K8n#R }&_+&<߂' 6ŸNGH8W7kjgi2=)2xd4z d(~ p_5 pq5teo-ƘU ʻ0YC8E"}W)0IhPi=c|,7$N*t{e܀Q>hR7<HSr0S2L;l +a;*:uuْNDU"m*tP(pI:b[hN /kx;"֕ٲzfR#O +Z5 &<8xFD4DS8 0-\we5J<aoTa3- R/3)|%(aBal '*}9kq\IK$%4"hE'S j:SJ{Pf> Xj'1T޾-5 GhÓz#~`*S5SwFḱrS*7MϒL(E" +Fs\Nls{pBukG0~}C1s +ԊDJ(pھ%\Qwer}` ї0[󣭉ox y 1ZcJe{_Y}ÖYC|[|L""g&wMg+%G Ak\^Z\CQS{ KZi>΋LKj&SRF2+rO!]2&.͏߿GfIF-|)& XL9p!\}!Vjքv"ޟ&0NO?y`F`[u!6hAHIzDVql +endstream endobj 8411 0 obj<> endobj 8412 0 obj<>stream +J\sߋW5#wdžNYH);j\-'po! O`lV:ԍ.J z +z0a*)"'۔$^* bB6)yUjrvx651T6LҙW=O9R VCq Ň)с֬^\0AsǜaM/+-EMLa`ι莈5P_ġ TD例RPm 2@"C!t`$$V4dCX9jvk:.{+Sʕ0N%=ljxccʆim;U]ؗkyNՋh"l&q=6#vek2̭A";ϣn30WVIv͐j + pLnprbD .?*.%inʮ{t*0tu_P"zuUPN,5D;ToHӓOkN 栕rH%F<6Yg2WЩgJȶHxn?+ 'R/[ Q%{_^MꍌGuc[ʎP_=y'+s<1g0WWٰ +oݯ\/}mPBxP* Fh `(_) D,4%Ѿ+'=q}bA"Y4T$gI$m[Ήlj5ޟF!tⷲg5I$}>dMlzrH0`.A];Q~p%6tB\2g禋ZLÆ^" -Lox Ae~߀s,дdn18)-t|_Pԫ 4Zx30,tt:; f +Df}583ەb*۷ +(M RUB*yl*TV'KtVDh+iȝzǓoH5pΆgtO^}6+}sfnǓ|;jCgdCB"U݅G- +NWv˥۩meH9Uv66vY)wH2ȚL:AU>M9<(s؂?8u0e/mƨpˆa%X@kgZRf|KֶʧuuRh:+AG$&}pq^O|?j>rAmD#- +RE2awd@t4ǎ a8<\7}kdk-e}{^KPoQ-|AHVF9o$s JP0{ "7xOOF#/38,JF +SuQ; ˀT'@xq8)^9)]fCT<|ZNj{l9ۚU}%ELmPn\C,|5*u0uh/a:O͚i&zU%M)3e[?`ikتS)@;pra@@_\܄!g\y"Q^%H+Z,L{UUDUHThg=o%.-[vffAUP+3T +ifݵ8s3أT9ޢzn_teN:"3}(ō8v;{|@G7䂅i6f 4ˈ\u%Ø(ˊG +%1ë61y繳q+=+cFzV>6#i]<_Wb>eq!ghXͭ Nt5W%k +x->=<M +YϳlDV-X@7o#Pe{GXlAv1 xT+{'FmY?< q٢hy)I=-֢cy1#M8RUBKhwPiŲfIc'(:,zH*mbכw%Ӊ+,NήsY@1i}/3 H,7q"F8ɽ^PV@GABt|KP~ED9JIRoU~(r*4ZL >4vkDU A ?)> fU2kx>8a>VQ=mmhFy7JN<~%d7ӈc,"KWms" gzG O tз *&T iV}r |Ml]C,k˭>᜼<= =L<ΰUK4q᭧f.k{ˊ)_L^  {ą,Sl=|H8nzAQ>])GZG]]>K ؠ]?MGLG̀8tP߲IZSuu\|.i.[ǒ¬0.id@$ +`Z7`"{ə} =4 ƹb9-ygJT6/"ut1YA,1C\gXK `'{ÑuO0c9qB1]p+"33VMlڤdv϶.RgCg81TF[JQ[ڮAD=v+,q/Ca`xY!<5Уč;˻ :QEEc=)hsLn9{n*e4.I3QlҪ)+!*ˆ}K#-RO5-I#j8xpu(zk+rhP;,-(DpE juO=_MIEu>uLtIH@5#)^`G`{up{%8tUŀ%7W]9,! QDFXWYU+Y˃$13+9d,q1Cv +{sZ@~S)c+zh)=R2 +;Elzي%tä4kkG*={iJkNU3%]}Pڊ4 @Y'C:m[ +EX#CzW_) c-> `+At ڍl?x LcDw[~DS`u}ļ Axjp*V0gV-㽶RR4擺&K䥦s 6l`K"Yj +/ 箅9 ^18zemR7e5!@XuNFX|Z3bRN}5*kJQx_S:)T'f3.X+;NU_qZ8wm-dNE(]+'zT5hI^y.ueȁ&39n{qQBUĉ305R.B5G W?ʎROT{hlᕙIF-JIr G*;`,R,%qz\hxIdmbnT(X_<.9D"LI]43(QwnD}VvIa(v !I +I5Wɝz/ΓFrZJ;-azeG r**szfN;Ue&PIk5ߎ* +܅Ù8f߷ԞGڴol[6ր&jF` uu,RqYej @ +ħj1Y)is?R8#wuV>/;<<-ddjc@U ȨHC 7 + RTDIA,ϭ9Eba)Aä [o\#R2h[(G/~z4?jUK,T~h}c^ZX;(;Ǽ<`Nʝx]QmU;)*yΨ5^CD-#SN0J\KnWw+F +$;6'4-5R LhEJkPU:t# 35@5L@Zc"YM,C,1 9VTr5/9CO*ʗgKԖf!]RSl'7Q n93SΖK|W gPssc[GJ$@@- 嫔foc[E*{FEjSzFnmcBqS%q9'|>ɖC+Nq͌a4 XF= ;Ch/TqG5uR#|sL&U `QHkh+j]ƣ+Nrakkѫ6pr <{ȏ;٬w߀>qE3kTxt)K;9Od^)EAgdV:ĈVy oq^< Gb%ЉZƍHk'I͞Fy*}vȪFw3 aHfK^GPR%2!.m6CE$Jy.FڅD7VK Uf@OKsnL4 տ@iEʘ d*w #`3X5*҇jNČ;2U-*Q P~ H+js|їe=;H*9mrꚅjb?D}^ĝm0j= +Tgaи}lb[w E- ?̯+[6S,~OHlCYH#fB QyվfpwЅ@X@=!6k]ѦC>pkɇ![+[uAus͆J'G7EM]̟۾oFNODqWK&; %@e`"bEc2߼ܘm +<ҘP7  +mLNo+DHW.zdX4F v9H0x:x_Gf̐#@bEzTGrQ*YZm,:f*#A6%n|wAiaƨ!{ViGVXDSs?qDmqb %nIG[ff-#2rϻC"]>$5S`# ]Oq{2f#7lѡߟ'L9o`jECt4. JmCss8*ݞ$mzLc@e:U3tE` ns.5Tgte:CNmu`ʧF:^5s-AjarRzW<f&{+8YJ ?Mo}\$`@hPgBYgTXd %N-xܴ\t7%=m<ܺ֠|S"@Kyfr ^1߭E8XV Pb8/Bq f+8Pی}`,Y$DfGKaY,3Y#)} +z3[-SR:z>L+ԴHyFN=2XK&!ݣXf^9 lhI'|\;KIP"M6uՃ< +ch\II^L: + B|L[nuׁH'L taDh25@ϗh{Td!@+_ V V4 +} k #@K*}PJ"w{0FAnE2dW֊"Ƹ`rcJ +I'9Sʰ:6LHWsQx4k'cob /3m1bJ`9~wU爐WB"~, GWR؝Hi)% )LUD +Z?oA{6XN:ؤQf>m!v*XΒ(F3Q6E)ӈTl/'uHb&M*dL0@" r h-*KvrYz̤QE~O^ f${~%۩YM=0c&flA(`;2 q_d>8/lF7~[ {nX7j:5{䵺vQMI<]_XQ^M[&)OCV9Sv^dN ڟ8t܋.~s2+v @fpܡWy pxʲ7{K2G&Udޞ]RtfG-v>,޵nvd1<2οe]\mrdB۱<Ԥ~ʮ.g\,iE_ ĩTm: Elf0%:(R ɴmC򫱐ZlQsHjOw\ah)7[aۚnA&g\\|0[x ®jL]FHþ"JK[ t>B\g-Zc asȟDV<QNpȕ|)RC 9EX]IZ&fYϢ-TrC@vh >|)Fޞ`gM|#%ʔ$~B|;\w0`O "1%ɩ<gGoj|vniiv9Eټ=aNe.$Mn4$0Ldݫ1WyRbC4| (+31ʟb+%E1_Ə 3'/U7{}\@^0U#Jˍe6|N7`^pޮ \i[ش ©SJo6'rY@^1Қ?UD|<x 6*Nԡg#v0J0eX +Ewa6Uih] BW #rqLt9HdBɳG ˜*񚻲+06@0|ךfY1I"&MHj#6DoaV{2*R4/()ZT W8;3?>8RirVm|,w]$'_ %[2f9):w6Icq6&DcLȂm y?vT &@zaϮZN@D/a.U5F? +%?MerbU(d)c֓.!E6r ޝv.kvD oݚ"3<9=3 MBxY#̷/#@> K4Ѡ?^c)(Yfuۜ4㯥8ʖW`Fb*x`< haѕ{lE>K@@4"a9ٲSQ`iOP7hu@̵@aq/b!!D(z+f21jP3+T=ϴ#8<7]<^VGo3Z;'K~ܤ@ s؜fvN~_jUO??ܴ-fUIGIRRp_ftzxD)4yvc|i,j,-HF$E'sk(]k*hK:_ȣLӆ!$UOOHk Up"$` >0p $m|=[6p1@&;\6}qG/뉛[$sT6RiQփjIv c"C y2֕DPdl|>ڔе|| P{tmFcwn'1qt777s-ᖞYŐ y$w5|*~YLz,ewDW7OmYyQ#s^u= r|pW:n8O=&3^&8΁v› 75םrR&-g,|pZCB-E+I jZN3b,k1F+yKo5]bSnvFwa -wLFp(;Re" +T@ 6Kb%i(\f01biQ6wt+hxsɵ=`0lo0d-L~Yq +`wE XOF];&=}֬.?؃WEU)Lf} +] f֮Vսj]n y醈#moNQs؉-2kqIp,󽅄Eچ/:K|&P-$MPY3Uk斿n&LkLjj0HMtJNj~^@ +i Caw7wE` s90K(L?m0evٔ0)+.l@ ,>._rme%fѣ^5g (YKy!J*(e +b\QV9 IBxr='}c/~]5ʔug3 +ppVܲ`#ʃ@[?)G$Tڐ  劈Z,:z/،fEs#a:`D9G4eRF +{Oz422ؾ'ddh#r h)m.*xZ ۣÂ7ჄCP -㧣sTDVtj{~[CX)+PsU-M#j}擱 qY5؇-F_dXPjezNcdW~BZ+Ȏ2 Oe աJ2g.ܼzZUW,A+JR$밦lb]܂mǪ~#N}jɬBg^>`RLDLee۝pǩ/ڻ Ɨc3Aى‡ni"CY1tv6߿RS+$j)Dw%XCذӳ~eVAarfdUK2_K{ĕ #4yeI%G{g0%J8NisXv712(S0=Ո$}DS܌"beyd;e@BkhرВݳeUmF74= "(ו[SOhbOX4E/&j㮫+ɕs&ЂүWtYfc@Vv4ulRμG7dR&'V@Y ,q:(b\1Vٻ,}˽Xr#Ebi +Eaav{l&OFRcZ5F0_*?"*A“S""uWʜ7es%orbo^,]]hO1? wĘkR]]H \Pj,6{Ƃ?4m8 +j6+ lc#@$ۣ!N ??ÉbDT +ٮp5@N IiWeuT(+ڃ,d"cN05Pr 沠kޤ(u++F(J߻ Q8U{ĥ%^@DK;Ő_Ħ&do<dRƞGw^h| h;Nֽͥ͞)$;jpmtOUҐ~zXy#&[P¼+ +O&9E;)FCseld>QNK'Tۚrxћ +XP q@5tTaL[bQO^pX[",D6&F0Uƥr-&o7E#LGL-LD[dWL^p:PB;nmvZE>sK3խn5DS\<5ISi|I$$UŗSOWd}Xl4)ݣ_^+Dʦ])3!l4o,ߴ}YrN R=:~I7K#:CgY{-/J/G`s|FP6ۡSѼoO*?w<~`r!} +hw0P:wlO1^ABJ&  et%:Q LPOi]*?|ZWպEAGY_Ky#~2۴ (M*PkHx`֭^ov_5JKU1(­eݘ]v͢(xH +u*2\Σ}&=n$kEؗ"#]nr=/H$Eau;8};dW^ ++KꍀS n3~98_ gC cq-#H# c co1GtY toίqbg~ZF۞.V V iPT X=zQ?L'_ I4BV*䄮ZXh1 b_)a uER!)ϝ:yO-LL^xEIE Kib +#K9K-vCGXakߨQiz,2w"Q*l`/rL Y ޅnF2Z`F$.R{ %@xY5ň . (nLud>'TcJ@ +/FnG!uU!s"U0nXKdsE4U hn`F;05Gx;:meZ)Gߟ Iqu UzE&t_qZ',e˽YMV~zK_O羖2 MNln@Aڸ89l l>w1GkB3v}uܧCY<+t.P̕{]">YI[jk@n(w|"Y6!ĨY'KV5wI oyԲ?C6Ȟ+xr;LlMWyzQhRTXVlSc6xd!9Ľ=90֗cp-`S tjp!)Z +0޷O:D +DQ>V6 8=IRI:XRo" + }%\4s"ÐXjӢtA*;R6lܜ~ڎkrz`RvS$/?H5 |rNYѿyK!4fkkDb(l;~_O s@뙃#fM("m[/REKd51 hRvy@Uݳb[Ǽ2'.KO`RC$[v%GfkX 00^lή4XQ^?1L'H#YH+P"[a2#Dy $&۱RExl>(Hꦎe &@>HZP%bZpj*;O7!oAׁGe@`y r:N(CE h>S(ֱ`;hbUÛnDT/1?}kUEh)e Bjv7xg~ރUTSu 9(A:^u-ER3>Lr(ӌWGM`5t$+h.%j'Gyq$4/_7)5͕)^M$mu.#i%ƋUi-"JG9Ш~xLgi'(ܔҠ]tmt,W%h;Vyfa-XpoN/9'?Z6)ڲ84%"|\kX[Ӗ#D 'B4{hd/߮Cu=Y66C>L6_moXJbi11CTh~|]bWW * K__g-}LĠe((ZPIM^Y#g { ԇ߭:i*6聺.j2 F toQi]S'YD'_9 ?9YXz ”i\̓󱶏 +^;r!0}{Ϋp$Ê?eha)&nw=K2̃9RHznM@ȟ}c5#=s fp_XRCDp\Dx߳9ū+L~ݗ`IC"ӵ0HzEU'm(ۛh`xuTT9]K":pcܪ$l.#@L!ycsq'uf !߸ + +CEރat< ȓ)a{$PvV ??z{,UrKBj.GvԂvP7awb7-J۝S=ILeu?T!89j{FgvMK=*qu;= ADŽPB:,=L|Y`zj<*Ƌl6E&a4tsoF(#`g]z۬1ܪ0f>m)HQ#.r&$:GkYx*N{Cx`_sS.\D;Q6WjViZچC\| Ŝ߻~7Nd?<؂nf:3ljn!mtaV_#dlu?xN6, &ޑUh(+k"ODȥac>~9 ]4qf!G8hyb{?~FFݜǹ}ķCbRL|ɕ_16 yƆP^xxv"Xh,}1F렻Tnz()44sYk Z%Yf.<ZY{, w, +[]|S b6cIr5j3O'lBS @)*|®/d1o̿&j8uFVD6;N:غNfxE#kۼ%{LD%Kh:N_!!FY~W+@>ևÏxQX4nu1Rpf+{ ȭ``vmRMBth[`܈N6S7T}0*0zQm3a+Tqiaa|<v٪RJFku3TL̊ea|ҏJNc:7_k$y<E! 3уF)wu9O~-o +/#\7j "u|'E@E%Cu9HOl,ZgJY)BMF-L"[Q'&Q,en(kïO飇#v6i<1SV++"ѱӫ2 }nӈ  f~X)Κ]48g~]5dՠIyRl Ya4U3vd'g +fnM|3g66׋VR9DWQXX`uS7`U#+)F}keTd4_Ném#9;+X*=swrM_ы+z^zJ}ks$xrYN๵NZAl?7ӄQ_KF5\CJ濩fI8e:iBJ%k> T v_jQto}y?(RIdlSO?UjN g5y)+x3"1I86ҧǾ+xs8RC݁sXq ;zuEDd4vzZ(:-kKrmx}o9^z93 g1ix`:Ϫ/PC\m[ zgg{% +ogUR~8uǑz:'zi7xp^HmrS@Vښ Л"cpƺYeMBKJW5렎Yf(>sJ,zކnf$P +?UƥZ$V pUj!3*!2b^;ЄejrPt$Pb&:zS  ADus?)^_Yέag-A."cFsf% _!CiYuuO}JѨvT&uyQ12ZbcY%0?96Ѥn #Zqa\ ;lHNϟ68 Z#(`=>QeІaa)f粺Z{"Jܺl|!mzE0c;͒] +FwS?L^uP +qCT?tF0c" y'v#Z)z~F)!q>FFq>:]*]+AɌAm=uqE5ԕٶ-;qYU22ӝ'k"FK+E~M2Y*,x'%Izl:RIXo#Pm>..dB>[F +(- P;7϶8ե +g6i-zU^L/_C.KnnKdH _HTG|zob=+YOl)|nx$hh;L#_:TwV=T.W.4Zy#SsA-{ppj#T?hIc᳒ivMxΩQF;SfzlZF?eP䠗_@b +ok$ +"2!٨YedӉFȁ-MF)'ʴBy?]@* 0 )#@;Z̘cmEʑ[n{2mqW *]wVE$"5[}$y>DjNuϏ,7Mk^&o-̪pHTuj+*:/rJd 0СlETZJSr>˷쌑4>uMW=ȗHb춳I" *۝s4LiWY=)s}NNwB\6~ ~v IG@>Ic(ٕR `UkI Ot; +s#Yl15D!P; 9|گQ;7-)xNXt/~:˿wEɴ-)EAIǫ5%KZngy,LReqϥ҂?d*Qiϋql0No7u8e +HTjؐb~7v3_R)(@d'Oq:Vf2Scd{txg8T'"Ѳ3׭ 'zb茧Vek;=exV1-xĠ3}]GNM~)Yd7/R-c*ȉZMYjcrXl'%]Baže`[ݹi|w:3Nfo郮*JVQ̣t9zīw!)Q0=}VVoԫ&^3l4=kF-Oq_,rkvQ,˔J2a+k$#1YUۓ^I"%SZJwv8Zdlw=Q)Sol *㼗jI_oُp-cliMwNTJ*ssU)L>p^B wR6( _WPt*WCe@U`U4uMI0e!o*c_Pg&ot?s㘛^i!ߞBp\^lڸ* v<`*wR-=4OUiGNښ[6sy ?z8}Gx߷oGM\Pڪ"}f_lƌ_' EQ2d6p̘ aJos:IJ~_@W1tX@>$Sx!]E$R0j25e|!bĎ*H9$է ),HեS$sq$ MxJwLEj+l'SZ'jaA^RRj^h#=a ٗf 8ьmCpێq~oikΪ&sƄj7"Q03Q^hB ǃu\1pS7"znYA6lX7~vy8״<.ۓV`ʋRZ¢߶iYjQYsO$k;۹˰ ၇5jbE:}%lwG ,wԍDo'#2@t탾U1`9 RlLjQz-4Y"(`S0AgfT 2"Y+&ȒNUO4\fH ̺ J+2dks`P:3ט5zk _A͈m +3e [*libD߉:Ju5BIgl&ڛwV܄ͥTڤwj UzP>khDG"UfQ6*'9c@:T3g z ؇TGMC:HavF/,tdſ/0-[#oeXDJFkׇ_o[J*Rb+ Y0orC)`cy%/\!&6Ei1?;.η'U淘3tWLUMӚi4ʯ5` wމ[5NJ(:7X|ͺܵ;Nrf|cQ),|Oja\]ױZ_): + #|7r|?W;.mBxd~IltY#?i24zP /hxDD>cn|k'/w5g&```_1fXۄԃ:"{LGm9ڱWԓÞzrի_T: OӪbXDk P#&,f"]=u>ѽ n¸u[s-36l bՃTA nEvE)X뛼I .*ѢaJ7@O`)ǃlDFnz&ǿ3.M/Zq]%'F#b^ +kC"ulCdd. +Y<퀮'pȌ_2+jO +tjJU( Zi q<͎PͿc7l]q_FU9sBK"2ȷ_;5\G + +y%"$yR4ca0k-Nh~ vs>!~&MiIabNdn[ {L<⼭Tu04E1/D]2O'n ըֻƅhn>/0fV.K~~l,@.! YL'ULFvUt_Ᶎ"P`v7DFm 0Mo>Kq5(?Ɍt{!6P*uΒM ֔L6DH%0%*IH'q/B@@Љ1SzT>n5q,_]#(R\A )޿4#R{_+ +#h/9X1Ym]ڱ= Y\^EZ膭iY-Bkbbs`[pt=UiMȺq O] p%֬ȠoU*8~ɟ~E IA=̬`HBwɚsF:#d6g*_O-z3PT lߊI= iܝSAineHW M]My6**װA2s`KHamJgi{Ŏsde1ZtO; +YK)5ѣwtyf9طn-*d%8m]%rZӏC}{X[RZ[˨؀(k7:a@DYYB(Tv*U +'"I񠁞p9/%HRBK5 +~u &9() O^n僚}Bݫ!*Ӥfe6Iab/Qޔij[9FZ* L,i'61+$WM:Zh^o2A.?q )w襸Le߶ĖR0b;]ٔbq3K[ ,ǧѝz^E];=^ē>^{>w![??yvzX f{a\3`Ih̸2jVQ)Pݮ>)!ǐEqv8A4.gD9~fK)-9hˇ)dwvry!QfsE*lK;᳊僉 +K1[dT[CNV}y9e:`rk?=H`ՠ"8iĐ̦sImto}#4Sר#G(y͠#`6DNno$!+t$_6f9:stDl9YB+O݅hob%-[y\maZG(,~=8~F0"+犋>ǥ0 i݃}tǹ""P߂Qϸ.Jg7?2lȏ2ؙCayp$9 ?>Yd-SQh6W PjȤ듘6@v/[]se^LFlC-\*^?x.NKO(NLiɣaYߥ`oV(r1nm?BgڊH1G FK Fg?܊Ӧz!HkH'378 ϕ?jmLR\C>\f2QGeP{.M'E̷3_kcA`of&褁ǦA /P7/̿>.fBf~&# 9mArg+y7xnX@jy}4Fs^x/߼Zx6Ek,{K<5yԿQL}kEivzbVPSK|!b):E6> C>rUrr* }[jZFWr/Z'99='=˞M*H,n]l3 VBO)]_%ꑴ8&qu +ӗQGKK-,+nGb3" HToҎ3qD+;AC,>y>W +bRb戤1NזaD?V֠7]`LGG2N%l#EnypX7_@T!Y7;`zIbYkL]'KcP\)AˬCj@ 1S$c?>l.%>NbDvDJ^VX$p>to06^IC\$2Tj8Y)P< Ӝ<z5p(DIeeƹX5?wux=/$b +e +ů݈ݪQ + :mkWx|ݕG:W1So[4/9a1r\xW# Yt? 3g/Lޒd˭ V9T|UVk`q̐QjY5!K0v0v˗r[Sû@QNEf)P6iz풺JYJ#wOJutl!@R^=fiY9|2m5=)Q>I+$}$Y@bX贜U>tz6`sJ [) S8@FO8QXq+y 4OEaLz)x/"o0^ ]\3"?.X5Vbp'm~kHa!?IǣwX ˔'Oڥ2!U!ttmТ3\fb<|ORfnί(Ug@7Ҹ/GgS +e/ Pl M@='>&?c:Aצ" XTrGE{g2O،RPmD:ҝ2b\n?9Ѳ}& cf%vRc*$5Vu6*+MlZng2 EiOPikԳpϼ? #lNa]h]}J]*ObxC +B9}k*Tg.vyG1DecK-s,s[ƓwOSU(O n@mc,oHd> + us8nBGYdD'N_j,Į%Q~);8קw[sA5߇\|?b̓'ҳőbta0-?Kc5^#x z6X B9d8:7yq\]0X&erO鲋HXXBFRG>勳%! ҧiU{ aq¿v xr ihrZ[Rՠ{)NûBZx46U~u5\IP>$<|9+`_x 6X/WA M+ЈB;6 š?ypS"Ǜ4ݥhgDe!wlJukmx)2 gu\o'^l28_6K*_櫔;f +:o /\:C - d2<\x:ԥܤiÙaֈ`R{tzuba" jj%1[͟3k zfK \̞D*!C9U +-nM+{NA]rܩ6irL! 2*Hᡑՙ76p62@lGYX?Oՙ;S&[mn7CDPb3FjrzyN v}ۘAy!*0 bZ :REdv4q׽ FImʼsmVQtjfg>;0pϬJtME-~Ә=+).>籛Ь\Ю!ZK?)qr8/+oG@ФBP]ٴ+>@ +KϢڤ/G7弛4%v%VgCӏ4\8aW/8zq +C=HT:h=e +endstream endobj 8413 0 obj<> endobj 8414 0 obj<> endobj 8415 0 obj<> endobj 8416 0 obj<>stream +!5"VR5:\9:3Mm +>!prFw QK?af6ћ w,&zr׸A[16Ugr,ic-M~{ޙV;׈{= 99"fcRrR7h3D Y\l3(W4ַ`ݤMSрS30Dt>|9iEw#%@\Fc"@HUֱw(pN +%5$i]/Plu[c6~_ݾ^ SGuw6>i"I$Q]Y5 QLݶLPUy _m! f/A'O=R!blaOg +M$Pk%M8 òbtf}:s)9N)E0&B﯂{~L''u)jj6 6aGh:b ^}JZPtl:yіUH~LHp%VRA0d`)Y]>հ+Bq2c8}KEj"A os>pI1C`kԬRUK~̓;^-扏Ͽu׷s91~YAvQ괡e !PV~"bڮHX3lZgj_׼ 'twf5=F@b孻E_ &meWՀfS{{,r{e\_g{ƈdTNXÊP5s)9Himʕo7ESP\`=J!1{@Ulc{gbڬyh%1NAŻ`>K!Б'Γ!Zħ Z:+\=6W`Lcy@?{Ccهh7}L*U}#9},LCoXiSr"; sEܤaHU7_I')n͘΢k~A?9t-q ]M@ϐјuVVe+F^[Cky>9q$=r2ao-Vs[r.v4 hM;5e/ 6Oq3;S$^!G龨D-di:ȟY!@, Hq,דw8y;"K y + N*Fx? PR0L`))H.a7 +3$ʈZ=uJP8., ~>6f$gcb]0ulmޖk71 nfEj5 2u{3Tr +ya+GDӪ 1}Wd7'V_m"P7џqw:^ZijJ>'qJ?lܓ130sd$?gKi-!^XcHOޙZ,5\[ۓTqHgrc0NY `j + KZs{q}0j"gpTe]7Wlrn8}- +[FTnh O%2QHn2Qj dԼT݁Y#q"|S +W8.H +0HьK{hJD2>P>?~o0Dl!05ZJR^֛ev.C]TʑˈtĐ +J򢷕9UAHhllDsGNJ~Uy'vrG si1vIJ:m*%ZMX#t $P_ޛ*p#ܣP~o⥧vC 2dXM4З~({[$JrH F0'PDKP]=wίIrQCKC5d?*ܜ N.C{AnqKD5\ (p̴_avN4Ww{n.=YQo4vYsV 3aqHը=txj&CK%7/б)/CkC0² Mj?݆atV0dC1ˤ -岿1?_A./5#Ϳta7& +_5>k1Jot&ˇpyfeW/T%-7!.PS}qwK]_5`!QP0!-TosYLJѠ>ŎDuyEM?zti7U KB?x%y?h]R<̔i['\P&;o.lS(U(4"XDvָ_u~3BȦ&H|;vhT7ȷ/4pRhZZ2QN@Fn$?F% +5VP0T 2l:r# M)qqAZs:pSߐj⑭fX*dJ{å(`O똔,1w$d)l;]'u +C1p*rjC \kCd=A'nҫ_yp]$If<"nMXV*C79|fLgȬs;ݯ--ǼtҾ`l^"9[nVgea-) +w5b(ur\:bNf40}Z݁Ok"@E$=-@lګė핯f1;%2!.CI$ B#y' ukh{DN۪+HptNMh]$C3ҭG0LZ/kP[W( 2>~Q\J|.TΦiRc"^i_ʂKASJ81`1iE|5ϨX紬DQn+^;";@O?rBuNjX8< B2R(l>nZ`Yek3[0fS)_Cf;r>/13.}IR;ȴT|6(8A$f9mt?嫕 1 ^1Jn0nub41m5DYtJN7!A]V]U*@tlN60NHI1*uYת!E^V5CDb?"kֹM8`*mCcQm25*SwjsX'{6s!f t)V`!:")%.h-mXxzI;ט‡]}봴h6*ĵim};1C Am'sKhN4[8a,j)jRKT?سҮpw'%H{S1<݉)ِN҇]cA)PtKy7jGGȺ &)6n>A/a>7K-:zS:0zq #(K5[WH(P:tlWoUtO-u**gM pg!L붷h(㾲)5. + CXnPjWպ7RK1=LIª!(uZAD[BׯU F|gԟ8`4򑣬2}16bv,T*8wT@&g4_{6~dӹYZgW]ŤJtjBLc#8|h +s*/P} }j:ǁNb=hWκ$ 6zS ahP{]bd ŔuJEDcyI4w@X_ c KIW#jxbبk't/uNqqL QD:}1V+׷rOϸGaڅ2?eu FGZ\&f$Xm?7'{SI1U'7 tekADoeme@ +$#2Y|?Q!^Zs hFT#Kƌ u*(MJ4sQtQT8M,ܠU4.'\jFf jI[1HцvE +6~fuZ^dUc g]pkn-k RiKX96Uorkxgd(ZX)buIϊP`^p}kmuiwG銄;{-(FƉ)MH=IAS=p_28hp;_5Mѕ`pwŝܯ&X!j3erۡJulZF]Ρ~3HC8ȡ>[ 3VvGC~{^L(P%hFcK&=x)ql^O_>yrQ2Xu~)vO¤H;k K7]v!a50ylLfcN 'AE҅k!/.F̉W&)r0kmS6I=xךzóbjEQT|YԞ?'u7~Z2 :{î503*?/_iN2yIe[7 آ.o.M+_- $xWxY[K-gjK{nY }?@[H7L"2U 퍪M||hy !6w0㷒x2ʋOz1)a+=pO-㖰Ι}{+[ԛeYkKR>/~ϔ#:ti8Dp{;C`B眱+vU3A&vZPt^kZx^dɽT ;ƨV\ +4EW*C4 Leh6'"& n + Fһ×|jEScz}<GUnl\afiUR #.hPaDaM0SI#cpv0SF^Jasʐ+H +`h߲ߒ_uѐA0nn@/vs]؀ň%o)L1w)Xf`oz1/ث9ʠ Ás?Esf&aI'14gRqt:Z L`ڽ`{/]G #FVx)IxxTX,R|qE_t1.aZ9ir֯+ džf )WI[B) ڶ0i|h.>&`H(Dx !,e +|?@Ѳ2 +z>;_+3Vئ|iB3Fw0^p3f^[CHϿ3q +g>*o]ۂ¼.FNH _2'YGm7|hЛQ3jgq Г}Nβf1/veS.Gz] v[LzVn7Chz@}!7ʔlMR>6@G~a,؇5 lcWs5)~s:˄TEe`TZc"2BftSheYOpkr[C\xC0}yق7 +U>9(jJ>]vah>\cOW#F0KAmp]Jiz$x'h|3Dgp-.KH\9eC)ďZ)վ'3+|Ck-4<HUKZQ (4%dGUY=pT>~P,3FЄhSl4Ft;6n?_" `@7,7'݇JjU'8x]8~`^{`f&t&&PU9_78w5vuQ|wUtR=i*/P(K&(43D +=P;\tf#}z# ~tjO`܎~noMS]§;ný鋟J8,Шd(r;ڸx5'>%*hYÑԊ;LJ~2Z ڕ1OE힋 EկbZ趣AB]̫Í_yvDq"y'kO#q;Χ/9tB`[aԞ!+%B$d|D ?R젤.W主5]og& +߽P'm'S3>z^ mݝ`QѼ,x tf*?UE]ˇ%DN8GVujRɚ TVF4lpvgIcc5 ֏΍IkTquq(% Q+nZ"P]AǩA,R_/b@j,iia=,wٻ.{E gkaTƂvYTMI(^ +6t*o=z??iCr0GZ5avޝ2#^ ky/k#4Y,yx\^cE3=y;IM|prm&[uu^ ~aE'w0s-פQjq[W*dey.ݍ=排XrQkS"4yf$O3FnyNV &=?,e~ +!361utƜPuvv*X?H~S~Ҕ#} ^y/绛ci-QyFx y.}x$㿃,j@~Qqdr^57{ pt ңa= 4Y-rO1ٺ$ϯBD^.Y|\d,#KͺqD K)rVV #\ qP}MgJ ?+'u?6H:EO[c\ "c +Nҵ]5`3I;qgF}?FY%^tj]'J5g]fAsk!*^ xޫN_-EZv̰([Dm0}f~kuuS,F0*Km&w-d Ëja\Ŵb5 + oƑS{ O-' `{__ +\wLP2SmK&z=n'*BDqz<󈊰D]@Jc5LUxi0 kOˋҁGS(\*8m֣F#*h$Tn%T=- > ~'nOiE-1"<Ԛ EYVx +L D( +DZo*Ym+WVjk=T9P°sGT:d_u]$}g>ߙ@f+vF2f;5r@¨@9y2o+[Z{֪oszKj?l?筆+K2m<|,&%B3=l,җOeQ8\9.0a:IuIdM7@a<7:ؔmXU˩ +)n +S9Vt|V Lua$<|f UV,YGL&ugUٶqo߫4iPU-RDWtC 9$N![l[",Tۡ*Gq#"V|Y(]A9?: j$ 1F󳵒œ?lFN{/ +G)YA݈ 3DEʖ Qy ˎmKI.Վ *\\La-gsj, Rj7v۔T`Xt91ر)}+%&.H̀wg ೑Gk*l3#)y/#s|Ao} PC9gGɂ9Ȃ! XN׫ia8aˡ`)] grÁp=, Pm`$tGSJ.u4:y|kOrS,9(cOԳ?N$rmg"k_uW0~@VS~6m@hQ"ʪ9 `m(EtFbäH>ҷlcKi G"DQr;a<;q\?vƮw7@UᴀQO?ŖP^ۦ@0R $FI픬tezbݽlƝ\ءZ_v3Z_hl&6eV=DVgaA`fS5xG|TLJ/lPcUt+`wNmT:6-6D,Dox~x1H\pqWcѣO(M$Eʌ4= ;:EVCI~u Aө!9h7sjUqrz5R8Z}.+Oj X I1ɨ71:aeiyl'O2GsɑΉ'ѳbPdHoxOa.#p윊՞jẮV/9oBGJfјQ"^qh06Fi# |C)obwN?l3|gODSH#qtwHs=V`s=NlY%\*$>V`-J[p/X {FPT>f~ObUm|t7B< kXr>MsmN!,y {,Q&d瀵&e@᯸k*;J,:N1bE&b4syPG-u^'Bje264żedZ*F\ 劺m4qK:$ln\P{?'SQ=~="EDq੢U2 nx<'3Un3xڀ'1s_ھ/2c:}LܴyN 0h#Zsxp,"LRvIpaI;6O۟ fAw'JDfꃵa.SP4w=tOg}5oIK(lnVn)IyWM$!EȽ#K65|(YAG!f_to\*SGxKG8Xddx(EIiaYCJR׊Ǵ6i[zc3W`wz˂: ZkMԐʜ_5 G8b,8$%JWM T!h#2USRhTkcK  u +hZzȦg*k_MC뇇oC4ί>F%!RP -}\zCvK +_/_ߴd|WvvVJ-g?bjKBm O%TA*8E!@JRx\#dzg:mY.,{RAs#䷚eNLoʡC~7:X9ǟs`s:%LʃuA1@B`;)nJ='ɯ <~gie詄`zIJ3苄9wqUCFt&KwLM/gAxlidgc8 +R Bēe O?>7]=\p:՟&JVڤ~pn:F5Skb.Q9lUwI7%_ZW΍|0fx7Q6o 3UH48ѕڡS~"#XSHީkFvH!ܣh3/g$5 _2h+|l'ɲ EG[Y[P*eo%"#冘$x 9iYo.cYJD^UڄOgnUVO̘Cy)=ȴN?뵠œ +:j`*Ը9EvdlaRF8y۝33 ~ta`gб9Jp( [ = IuٮN?'f{d5=<#(H%R[B-326fKO! +%ǖ;H"=m ׯ@yQ%㨫c{L,@V}a(>`-( -mcsd|4V mnxnIĥS!1gP}:v٣gQc3aڢB.fGGMhز5́< ,Clec%@esP?&/)ڍ`h%{I~_X0oZ%NBEptTݷy1zn[wyG)2.yɔ-R +aXlbŽ `E} RFBN#Vx;o9'w+:س}ߡ f`AH~1TwgE +8Q_0*I\_J' 9qK:5lH*,mCg'ŜG|LԸ#cćH@('?#,[wt Oᮖ3tCQ=\I JpXryIP4,7"4)Sf>fl4jL΄ Ohh~j6 ?FÎcu4{mHԵN +]*0vbట%> EVuʑi܉džVX^q _R{9S҄7Y]*~M o$<|.\k=|ESd޴PPy#Na&3VVe#  f̦4%naT!B7%P&}B2nDFUt911$ e>W 2ekCJ1&5ZM WY',U%UTV}[5_&ʸ;Bݪl^_I*k&^+x +*&䮚[ݶv@\Iʡyo7? +>v5w8wR +lgCu665! ڽ\ +qZ.v>oG7SU-×y+mЀ{ᆝs\R؂9qF xg5'jC2}IVҁFI9\9":x4;Dv) 1 Xʎ2gmZ=/(vGk&*!Q6_N?! 2! C<',_}ycǔjWY +i +Ҡ?y-bK55u9pG2#mG0505 BƇ nDv-,n^opR>E xc08 \(΂hۅK/BAp ȺK)V 1x=bzɪ>o?f ,6@SjJm5y8KfHǗlMvNDe؞:Dq[=#eMNŐzx(];r i`QZ9F{)üHYY +,_A0zIsQ#WZPdKˏd <@sR/o0򬴩V(Rf%=S k FzëH5*و=:h€@],n.+7kk!@, <֩OnPܐ FG +Ey:^<4nsyM#lLLPV[,%v>MvgvK6\.'/|LTJ?cSBIu2@doC+Kj֩dZ&SF5]KVU=: =.In/N z6 +^\T +yŒ)R3cUqZbJ?Xl5;3GDWው- t(@RtUa[8Xe}3Fҋi,I%MTfxEejMy yf\y>xZJۢ!#)Htq,N=dHƹ;[Gۨ"N0I15%/зȺj4#`]*v~3լp Z9ͪqrJa[ǕـoO;Uu32)z[h+/9>w"7#g\3zG)_}ɞ -}GN!S&[7Jyp0 -TruoB{ddxr \CKvpl)Uh ѭ{p3bلՏX+SF˜!aH b|S8﫫ap*mAV#re$,t]UD{tIۂND[?<@&u0(߷6[F`܌ދKݒ: 9aK){]S;4t|wlm6;F&oYYR+a4|~U4S)>$>ihZX&y:4GQE ue7Y^ Dr?IuN`[w&rWAN\7$`TގLvfOͦKJ!]J[3Kp8 y8ZA}@y=<7(v1=97@> -Eג:^VrPUcs{eyG-)l  <^  1S73HPXR2$$=ѽN4(I N^Ms֨i0 vݡIc]=:*_@]nSi#v$nriUg9[+]B`| χ#rB +2&%SI^l/ސI'-P1j,{Z_yTw;# L-PR@7lis8)5pǎ +ηQ--ȹgq\)жq#Q?СXb+x [liAӔ lM hy2{IG7_W1ʯ"/(yMSZ!4%!`̘ejJXN +>cӘ"eJ+Rs%|"$uUl/*%bغEŷtذ,;y?gTk'k {^]mr^%^ O\kB-1b~f3XʢF%6%92XÍTj!Q]Xw846v"bf# 6}r*WGIhQV7+'A2&/5o5 +I>J<'sY[ 4}"~] M)˾g-^,@/FG,?о Zh|ߌҔx2 <?&\Sch*_8MZpBnˆFy4+[M ]y9lw5NI_:xg6C++-4e.KHkSRU#.U8\ c4(%Q:N4˓ܩdUfETatދ%{ >Pa o94# v+M}}Tew'eZKWօj=dlGrX=z= zޫ]^E s3LLYUy*%̡ڀM=&ZYGA =E=2q6a0>#j#(& }֍ϼmȏq5z{:n/PEe&[Ω~MYu/6(,Ҳg%Q~nv0gk-o`VdUOC7@dn氰a0]RA&Њ[~B&|L&l 5ّUͽ)2g +(09ɨA$5aؼLw}T!f4<^^Alje`w]r7HQ gExD҇ܪ'09=$`jr4-gD#[Sʋd%iľy1 aF +ʗmЦp~VbăP d%cS +xZ%Y'J0#,t[_ Tb,~ҍ(L7#T"A)rdU%vP\W>&#L"?B&I`t?$}gJa=n̜\|"4&ApKq`G=׼j +"rea3R"GPWj>s#R|k@PO$xҵIC:Jm: )lBۏI)bB 8pxPL@BfpVoRy"Xy0R?(d(y-/Q ,@Sz1xV"y$N{ +gjnyI]C @#I2FSa]Z ͩ6sU= \i%7\u`iur2%wz +]biiUhxNh+r֕L*_a>bڲ+Pv){_]?bJr1̕&`#޶V)#_`f/`WSFbIB%vMV,MS6icPQֻnm֞PI ._]*~7U%y% H Zx5ncUWD [{E1^W4Μ7,W_qlH&{~6'?d&Oԓl[B~t0=dM[bw oSF{Kt,YN=Rujm:@s \'8v@ ,tWzYqμFa/挝6QCtWe.<#uo̺K#W7B_jwMQ0#x1mYJ:CNnj.+@ +=4VOhN6od+6}\V#;qYz/ n '3ʸIN(9.e_A0pmUnmv]TU[EXEՄfp` {FmGg]۫?7uI~/yOy` 7 Z?~H*shiEkf- -ixDÒAL*(4I5${ + + tatе}π{7hxTQC} kE 6X$k1]ef,@/ siy"u92 +0j9ʓܾn;)5 +6J?2~2:]tCs5m+bq aOAXvdQE+θ (0@;,oe6|=764nBX11vR,wowJM+!l~^3j+FMEN|HC`6ݑt:6/ +|R&osya3'/X@ {.L crP<9D#3p:' +ǫBЬ K|e\0XW|zSHnٚ`/b{H_ɣv X["N +/y@` (l6p3t]'y +(yhEj]#yo1/`UV>J^;nk9FENz/wR s\ +ՙxӖ+эOZm"LrT2B]\>D]7i@B0eλ2֜FN:x;]PZ~9qXsE$g,\{.!.C+Ғ3E|&Vap?ۗ|3 [hahϏ5># Acڪ) +34*voӐ{…3DT F˦ mdGX#y"&?m<g`jH$2q1Y$E ӹc,|P(0׷MOLsWKtqx~Mآ V4H9r ut_6X숵vA e@epĪ%96>}待 2#Z gd261R[InTier.hZ#, K/3LSQp~OfSg*k߼*ɮ氡-ZM<$tKE[F8_+b9[eTtxͲJM峷|?Ric +ed +|n^ں|7?#%rMj +/&mAO7K;r\2I!&fO$8Yx͋7r' +2C ^THdĽ1t7P0 u$ͳ,oYR_.^޻G!OZVNsI*GZcdE\}DjQ`B~"lQ\0.`AzJ~u_P;xTUWrxZ?g&{)|+0Fb8+XVhgt)! w"_ 2z6R?@A6GTai4cYsl8liHspWp\B~ tO1Q9>wL:Jv ݌BT؊xo]C}a?Y6^mG}h,5]Uwٯ1)c3TfN)hJ*cF 6' `rswUcގg/.fs6t 9]6Db| :ԊAqRR[]b#})Sawi7 sl>("4e2ERR|ϵ4|"%oAz ]/Pl_(@,MUʶay"9Ũl +1 +:%%&Эߒn]T +[mݐRt.(C߫6[2(J#eѱvv^+gs͚ZY蟭 +՗Y2fYן2?gЋ:]|;.E%X:j;B~fXY*ET? B~p2@@l4H6 ߮|ֹ{h/<msWb@s4ώG&v,\]~G-"Ct)^&hXBJPjJקnz[sd%#o$糚InBjLgG<d}Z;ZDž ҝLG#u)68n& )M'Eq=EU)%$dNZ\\`rtv8n%[ש/PdL&>;M:..xbbdSO)'pֱn}OB \0=K| &mtfVWB_o;4Y.q~)LóWhib-8`d&f`v5ݡRV u~uqh_wt RR(喬3a7C)N/?z0`y';o`Aq]"B0^nHbfGFOu<7ٝm?a`%Sh|ofRx7>)T5 +J45qZr Y}S`Tݎ DкTļi@RV˄1NP\?C= +;\ם(O6Nc[Bc.W-ˀ4?sqՁNm1Ps<@o) +r\*Wpo[Vh Gt/$ϮM6>*=ZÐ\,?Yӊ }TjHqJ[";>)_MRm >}V.M _TۘHvϷ5%6X53^,-}#v + 5Y( +3eh]13i%=/O#>T@Qn>~Qw[<#׵vY$;!"iNt4Bvb@/]{f"Dq5X5HXcYzr-ͅFrMx(pc [F4r_7`ӁȥSCh۶M' <Iza_飉?$$S oBwFY %L>M K` |O{ZlWGOw﬋ý˜=_Ӝ;d*-:2.`SAT \d%b,uhUu=FŒzH)S5IA类>h%{u' +i eΐ cfqYB\J 09F1,/;b~*Y(g_JGD+&ӟ3M&"3ڧUݵ ?mXac ﱹ˺􊲞4=(W*yƧ眛rHW\71+jӹX#DŽp#B,n 1M]?3Wmd4u:JTg;GӪ|w) -Qr 41,yMd1՞U #KWvq*PhM,!(g&ItN'l74PB_<Ӂ>80@/bq#=m ( jP)/-0h. A+Q[0@ݒK6V駊Ay}lXm %ʫ "S(dD99z3 :"l^:e7-MiMq>ibrݒNH{$(4Ԣ˙Z C*q[LbOv-w-(WQk%%tF[\o=C dO[ +\f4 !~0J{T(/\c_<]CBo1/Mli=i $q{'',uގc,OdXš8S&JNPD?-@GR)I"yf/2GJҫ YH~xhmwփ8K^u?ԵatCصBWHm %2y:Uz@`%K /Ӌ1UWY!Edx 94RA@j\N|uyVpaxPrRZg uwNuSE}qKd 8+n"=Ϻ w95  +=㍳E}dΦ|q-$٦OL:xZJM,s+0GF5݄vEk?B +h*8Yg :>VUuoRJ^?>YE={ 8 ۯ,Տ$x)cF 0\mz k6D.a3 HY vgdxZsY扺"r,/i2Zp^۴ܮ EDCfw!3No͋K s#kP4jK%)~L  ckc0v{5)>[%p(Zq#j+= (h.VH&YB&FgAWZp-`q62j;&r'otR/wP*-L2?ѫ!iOz詎F_ ^Xy4C/=u*:%R$-Qpaw%"ufѿ+뒔u\VyINBi ,d$Nt.S~o,g4yMRZ𙥉@~bt|P~̂K;Ӏ8aY#v#BNGPT[|l(69l2*KeRJ%;/ăcn\؁ ~S;4iVM3ՌOrpj^BnA:C-$WɆ&,a{#erL?T\w~QϷc1ZH҇q99}dХ-KW q߶B3R+Y+GFr)VcN+6.ӹJ]Rr3I6 6Mz)!m9_ejK1aƥ4,ȯb6>'k1'})=bs5 &+$8nFmj_ :>d Q!6-=0Y|7nZWiEi|\ )FahҒ|Qs]NeLA*ӫ-6\U'AKl#GH-DD:GF\_a613wz"(M/MX~n.z!0~F B +_—Dh|L3L%[KHKun"r9'ޔ!/ c= +٪FT|L!ilz݈7gW^s&0V| knhö6 +endstream endobj 8417 0 obj<> endobj 8418 0 obj<> endobj 8419 0 obj<> endobj 8420 0 obj<> endobj 8421 0 obj<> endobj 8422 0 obj<> endobj 8423 0 obj<> endobj 8424 0 obj<> endobj 8425 0 obj<> endobj 8426 0 obj<> endobj 8427 0 obj<> endobj 8428 0 obj<> endobj 8429 0 obj<> endobj 8430 0 obj<> endobj 8431 0 obj<> endobj 8432 0 obj<> endobj 8433 0 obj<> endobj 8434 0 obj<> endobj 8435 0 obj<> endobj 8436 0 obj<> endobj 8437 0 obj<> endobj 8438 0 obj<> endobj 8439 0 obj<> endobj 8440 0 obj<> endobj 8441 0 obj<> endobj 8442 0 obj<> endobj 8443 0 obj<> endobj 8444 0 obj<> endobj 8445 0 obj<> endobj 8446 0 obj<> endobj 8447 0 obj<> endobj 8448 0 obj<> endobj 8449 0 obj<> endobj 8450 0 obj<> endobj 8451 0 obj<> endobj 8452 0 obj<> endobj 8453 0 obj<> endobj 8454 0 obj<> endobj 8455 0 obj<> endobj 8456 0 obj<> endobj 8457 0 obj<> endobj 8458 0 obj<> endobj 8459 0 obj<> endobj 8460 0 obj<> endobj 8461 0 obj<> endobj 8462 0 obj<> endobj 8463 0 obj<> endobj 8464 0 obj<> endobj 8465 0 obj<> endobj 8466 0 obj<> endobj 8467 0 obj<> endobj 8468 0 obj<> endobj 8469 0 obj<> endobj 8470 0 obj<> endobj 8471 0 obj<> endobj 8472 0 obj<> endobj 8473 0 obj<> endobj 8474 0 obj<> endobj 8475 0 obj<> endobj 8476 0 obj<> endobj 8477 0 obj<> endobj 8478 0 obj<> endobj 8479 0 obj<> endobj 8480 0 obj<> endobj 8481 0 obj<> endobj 8482 0 obj<> endobj 8483 0 obj<> endobj 8484 0 obj<> endobj 8485 0 obj<> endobj 8486 0 obj<> endobj 8487 0 obj<> endobj 8488 0 obj<> endobj 8489 0 obj<> endobj 8490 0 obj<> endobj 8491 0 obj<> endobj 8492 0 obj<> endobj 8493 0 obj<> endobj 8494 0 obj<> endobj 8495 0 obj<> endobj 8496 0 obj<> endobj 8497 0 obj<> endobj 8498 0 obj<> endobj 8499 0 obj<> endobj 8500 0 obj<> endobj 8501 0 obj<> endobj 8502 0 obj<> endobj 8503 0 obj<> endobj 8504 0 obj<> endobj 8505 0 obj<> endobj 8506 0 obj<> endobj 8507 0 obj<> endobj 8508 0 obj<> endobj 8509 0 obj<> endobj 8510 0 obj<> endobj 8511 0 obj<> endobj 8512 0 obj<> endobj 8513 0 obj<> endobj 8514 0 obj<> endobj 8515 0 obj<> endobj 8516 0 obj<> endobj 8517 0 obj<> endobj 8518 0 obj<> endobj 8519 0 obj<> endobj 8520 0 obj<> endobj 8521 0 obj<> endobj 8522 0 obj<> endobj 8523 0 obj<> endobj 8524 0 obj<> endobj 8525 0 obj<> endobj 8526 0 obj<> endobj 8527 0 obj<> endobj 8528 0 obj<> endobj 8529 0 obj<> endobj 8530 0 obj<> endobj 8531 0 obj<> endobj 8532 0 obj<> endobj 8533 0 obj<> endobj 8534 0 obj<> endobj 8535 0 obj<> endobj 8536 0 obj<> endobj 8537 0 obj<> endobj 8538 0 obj<> endobj 8539 0 obj<> endobj 8540 0 obj<> endobj 8541 0 obj<> endobj 8542 0 obj<> endobj 8543 0 obj<> endobj 8544 0 obj<> endobj 8545 0 obj<> endobj 8546 0 obj<> endobj 8547 0 obj<> endobj 8548 0 obj<> endobj 8549 0 obj<> endobj 8550 0 obj<> endobj 8551 0 obj<> endobj 8552 0 obj<> endobj 8553 0 obj<> endobj 8554 0 obj<> endobj 8555 0 obj<> endobj 8556 0 obj<> endobj 8557 0 obj<> endobj 8558 0 obj<> endobj 8559 0 obj<> endobj 8560 0 obj<> endobj 8561 0 obj<> endobj 8562 0 obj<> endobj 8563 0 obj<> endobj 8564 0 obj<> endobj 8565 0 obj<> endobj 8566 0 obj<> endobj 8567 0 obj<> endobj 8568 0 obj<> endobj 8569 0 obj<> endobj 8570 0 obj<> endobj 8571 0 obj<> endobj 8572 0 obj<> endobj 8573 0 obj<> endobj 8574 0 obj<> endobj 8575 0 obj<> endobj 8576 0 obj<> endobj 8577 0 obj<> endobj 8578 0 obj<> endobj 8579 0 obj<> endobj 8580 0 obj<>stream +pg2'0;-oIB3R.mdFAh15YX/| Ĺ!L<"*\(|'*!fVLn`5I']Oww CxH3io"1{[8f;k ijo#1< !#YU:ebOۭ]\WRj&^ji 4ׁOB5{hB79(4YboQV0BVTW$n3z`z95U%M!v\djh k +Pü0Ty>E|اQ +>ĸ1j< +q4G'VQkpWe>]G;=6&Cj:420-_"ZJ+2ҟPͰ">>H9chՇZIIL[eXۏb^4(u%[(t;^Jk(8i\%Y+Dlj'}e]o|f(SMz6i˝QUO@?"@ jz Z V׃"$0m9'q`V^ϛSݝ)_ DC}R 3TS49L+y"~i}mHD*E$e2Ќݔtgx"7(0`XjFh4\M%46/M ۱DU%=տSCYר5@K@GzQ#),F#%:Pb `,  &j\~岗^3j񨱽2X^@>VXFA6ně =bZNQ0Э hv2Ԙ ֩E38 :;,}E4U~%Q!S2/g2Yv+ u@hT$@?WF{A=nﰆWN"s܆:u=Otn7`s*@(2Pwڶ0Ʒ/E% KϢmCr{&nVaЭ!;Џɭu~?'J4zGWag ۔ӽvOh;#Z&TV՜|M5|K,ahO: y]R&|DVN6

I-H_W KWa$*{byW6m״|CKJx z Ĭ!xo(|%87_ut]`Cym{<˺ao82JS,O: +M3o]80E`d0uTJݸ+mY<v99ݺY;EFPTXGW6=5M%!@:<YXZͣ]3V?XsΕfXs楃' X?bPZ{]g3d^ZlG}vh0.~OOLOԺpr9/ΰ< W*MG3AĄ[~~ +[:wM +r~`YXN5\ |xjʊ qGC#(gr~}Fٙܒ@KjeCWBBaRP[)+ANH$uGٝI6ه:3}.?ӽ )9R5K,h02糖SJW";Eq/o0 ʐ |h2G8lXj2#: 퇎&w"룑|jU.W0ԵEGxm.-UMj^_;sfj `8AO%@foq3 _94J`+VS稤Y/lMDc8O<|Sz k Y`eh%-6;* &ۅD0fl" +*SGzzƹ`iu\5=iCD=.zgEǽNjgA7aUs# gD;tcCV=n5;XϪZ )3vȻ{s +TQUۜo $.l+s :×H:{b=4/CӜ.̂D +d-kzs.Ư9١4rY>_Il苟CHXPTbB +5>4|x&4o +fZDIHd93Ui3W%ĸ 8J9o=U MU&G'|c4wI3k͓Rl]Z=cVBAD)I׸)yHZ:s :JvXRe<1e1\zlqJ|qHx(vnHG-fl +endstream endobj 8581 0 obj<> endobj xref +0 8582 +0000000000 65535 f +0000327931 00000 n +0000328369 00000 n +0000328491 00000 n +0000328614 00000 n +0000328737 00000 n +0000328860 00000 n +0000328983 00000 n +0000329106 00000 n +0000329229 00000 n +0000329352 00000 n +0000329475 00000 n +0000329599 00000 n +0000329723 00000 n +0000329847 00000 n +0000329971 00000 n +0000330095 00000 n +0000330219 00000 n +0000330343 00000 n +0000330467 00000 n +0000330591 00000 n +0000330715 00000 n +0000330839 00000 n +0000330963 00000 n +0000331087 00000 n +0000331211 00000 n +0000331335 00000 n +0000331459 00000 n +0000331583 00000 n +0000331707 00000 n +0000331831 00000 n +0000331955 00000 n +0000332079 00000 n +0000332203 00000 n +0000332327 00000 n +0000332451 00000 n +0000332575 00000 n +0000332699 00000 n +0000332823 00000 n +0000332947 00000 n +0000333071 00000 n +0000333195 00000 n +0000333319 00000 n +0000333443 00000 n +0000333567 00000 n +0000333691 00000 n +0000333814 00000 n +0000333956 00000 n +0000336130 00000 n +0000336605 00000 n +0000336729 00000 n +0000336853 00000 n +0000336977 00000 n +0000337101 00000 n +0000337225 00000 n +0000337349 00000 n +0000337473 00000 n +0000337597 00000 n +0000337721 00000 n +0000337845 00000 n +0000337969 00000 n +0000338093 00000 n +0000338217 00000 n +0000338341 00000 n +0000338465 00000 n +0000338589 00000 n +0000338713 00000 n +0000338837 00000 n +0000338961 00000 n +0000339085 00000 n +0000339209 00000 n +0000339333 00000 n +0000339457 00000 n +0000339581 00000 n +0000339705 00000 n +0000339829 00000 n +0000339953 00000 n +0000340077 00000 n +0000340201 00000 n +0000340325 00000 n +0000340449 00000 n +0000340573 00000 n +0000340697 00000 n +0000340821 00000 n +0000340945 00000 n +0000341069 00000 n +0000341193 00000 n +0000341317 00000 n +0000341441 00000 n +0000341565 00000 n +0000341689 00000 n +0000341813 00000 n +0000341937 00000 n +0000342061 00000 n +0000342185 00000 n +0000342309 00000 n +0000342432 00000 n +0000342554 00000 n +0000342696 00000 n +0000344920 00000 n +0000345445 00000 n +0000345570 00000 n +0000345695 00000 n +0000345820 00000 n +0000345945 00000 n +0000346070 00000 n +0000346195 00000 n +0000346320 00000 n +0000346445 00000 n +0000346570 00000 n +0000346695 00000 n +0000346820 00000 n +0000346945 00000 n +0000347070 00000 n +0000347195 00000 n +0000347320 00000 n +0000347445 00000 n +0000347570 00000 n +0000347695 00000 n +0000347820 00000 n +0000347945 00000 n +0000348070 00000 n +0000348195 00000 n +0000348320 00000 n +0000348445 00000 n +0000348570 00000 n +0000348695 00000 n +0000348820 00000 n +0000348945 00000 n +0000349070 00000 n +0000349195 00000 n +0000349320 00000 n +0000349445 00000 n +0000349569 00000 n +0000349694 00000 n +0000349819 00000 n +0000349944 00000 n +0000350069 00000 n +0000350194 00000 n +0000350319 00000 n +0000350444 00000 n +0000350569 00000 n +0000350694 00000 n +0000350819 00000 n +0000350944 00000 n +0000351069 00000 n +0000351194 00000 n +0000351318 00000 n +0000351441 00000 n +0000351584 00000 n +0000353762 00000 n +0000354288 00000 n +0000354413 00000 n +0000354538 00000 n +0000354663 00000 n +0000354788 00000 n +0000354913 00000 n +0000355038 00000 n +0000355163 00000 n +0000355288 00000 n +0000355413 00000 n +0000355538 00000 n +0000355663 00000 n +0000355788 00000 n +0000355913 00000 n +0000356038 00000 n +0000356163 00000 n +0000356288 00000 n +0000356413 00000 n +0000356538 00000 n +0000356663 00000 n +0000356788 00000 n +0000356913 00000 n +0000357038 00000 n +0000357163 00000 n +0000357288 00000 n +0000357413 00000 n +0000357538 00000 n +0000357663 00000 n +0000357788 00000 n +0000357913 00000 n +0000358038 00000 n +0000358163 00000 n +0000358288 00000 n +0000358413 00000 n +0000358538 00000 n +0000358663 00000 n +0000358788 00000 n +0000358913 00000 n +0000359038 00000 n +0000359163 00000 n +0000359288 00000 n +0000359413 00000 n +0000359538 00000 n +0000359663 00000 n +0000359788 00000 n +0000359913 00000 n +0000360038 00000 n +0000360162 00000 n +0000360285 00000 n +0000360428 00000 n +0000362679 00000 n +0000363205 00000 n +0000363330 00000 n +0000363455 00000 n +0000363580 00000 n +0000363705 00000 n +0000363830 00000 n +0000363955 00000 n +0000364080 00000 n +0000364205 00000 n +0000364330 00000 n +0000364455 00000 n +0000364580 00000 n +0000364705 00000 n +0000364830 00000 n +0000364955 00000 n +0000365080 00000 n +0000365205 00000 n +0000365330 00000 n +0000365455 00000 n +0000365580 00000 n +0000365705 00000 n +0000365830 00000 n +0000365955 00000 n +0000366080 00000 n +0000366205 00000 n +0000366330 00000 n +0000366455 00000 n +0000366580 00000 n +0000366705 00000 n +0000366830 00000 n +0000366955 00000 n +0000367080 00000 n +0000367205 00000 n +0000367330 00000 n +0000367455 00000 n +0000367580 00000 n +0000367705 00000 n +0000367830 00000 n +0000367955 00000 n +0000368080 00000 n +0000368205 00000 n +0000368330 00000 n +0000368455 00000 n +0000368580 00000 n +0000368705 00000 n +0000368830 00000 n +0000368955 00000 n +0000369079 00000 n +0000369202 00000 n +0000369345 00000 n +0000371476 00000 n +0000372002 00000 n +0000372127 00000 n +0000372252 00000 n +0000372377 00000 n +0000372502 00000 n +0000372627 00000 n +0000372752 00000 n +0000372877 00000 n +0000373002 00000 n +0000373127 00000 n +0000373252 00000 n +0000373377 00000 n +0000373502 00000 n +0000373627 00000 n +0000373752 00000 n +0000373877 00000 n +0000374002 00000 n +0000374127 00000 n +0000374252 00000 n +0000374377 00000 n +0000374502 00000 n +0000374627 00000 n +0000374752 00000 n +0000374877 00000 n +0000375002 00000 n +0000375127 00000 n +0000375252 00000 n +0000375377 00000 n +0000375502 00000 n +0000375627 00000 n +0000375752 00000 n +0000375877 00000 n +0000376002 00000 n +0000376127 00000 n +0000376252 00000 n +0000376377 00000 n +0000376502 00000 n +0000376627 00000 n +0000376752 00000 n +0000376877 00000 n +0000377002 00000 n +0000377127 00000 n +0000377252 00000 n +0000377377 00000 n +0000377502 00000 n +0000377627 00000 n +0000377752 00000 n +0000377876 00000 n +0000377999 00000 n +0000378142 00000 n +0000380503 00000 n +0000381029 00000 n +0000381154 00000 n +0000381279 00000 n +0000381404 00000 n +0000381529 00000 n +0000381654 00000 n +0000381779 00000 n +0000381904 00000 n +0000382029 00000 n +0000382154 00000 n +0000382279 00000 n +0000382404 00000 n +0000382529 00000 n +0000382654 00000 n +0000382779 00000 n +0000382904 00000 n +0000383029 00000 n +0000383154 00000 n +0000383279 00000 n +0000383404 00000 n +0000383529 00000 n +0000383654 00000 n +0000383779 00000 n +0000383904 00000 n +0000384029 00000 n +0000384154 00000 n +0000384279 00000 n +0000384404 00000 n +0000384529 00000 n +0000384654 00000 n +0000384779 00000 n +0000384904 00000 n +0000385029 00000 n +0000385154 00000 n +0000385279 00000 n +0000385404 00000 n +0000385529 00000 n +0000385654 00000 n +0000385779 00000 n +0000385904 00000 n +0000386029 00000 n +0000386154 00000 n +0000386279 00000 n +0000386404 00000 n +0000386529 00000 n +0000386654 00000 n +0000386779 00000 n +0000386903 00000 n +0000387026 00000 n +0000387169 00000 n +0000389394 00000 n +0000389920 00000 n +0000390045 00000 n +0000390170 00000 n +0000390295 00000 n +0000390420 00000 n +0000390545 00000 n +0000390670 00000 n +0000390795 00000 n +0000390920 00000 n +0000391045 00000 n +0000391170 00000 n +0000391295 00000 n +0000391420 00000 n +0000391545 00000 n +0000391670 00000 n +0000391795 00000 n +0000391920 00000 n +0000392045 00000 n +0000392170 00000 n +0000392295 00000 n +0000392420 00000 n +0000392545 00000 n +0000392670 00000 n +0000392795 00000 n +0000392920 00000 n +0000393045 00000 n +0000393170 00000 n +0000393295 00000 n +0000393420 00000 n +0000393545 00000 n +0000393670 00000 n +0000393795 00000 n +0000393920 00000 n +0000394045 00000 n +0000394170 00000 n +0000394295 00000 n +0000394420 00000 n +0000394545 00000 n +0000394670 00000 n +0000394795 00000 n +0000394920 00000 n +0000395045 00000 n +0000395170 00000 n +0000395295 00000 n +0000395420 00000 n +0000395545 00000 n +0000395670 00000 n +0000395794 00000 n +0000395917 00000 n +0000396060 00000 n +0000398379 00000 n +0000398905 00000 n +0000399030 00000 n +0000399155 00000 n +0000399280 00000 n +0000399405 00000 n +0000399530 00000 n +0000399655 00000 n +0000399780 00000 n +0000399905 00000 n +0000400030 00000 n +0000400155 00000 n +0000400280 00000 n +0000400405 00000 n +0000400530 00000 n +0000400655 00000 n +0000400780 00000 n +0000400905 00000 n +0000401030 00000 n +0000401155 00000 n +0000401280 00000 n +0000401405 00000 n +0000401530 00000 n +0000401655 00000 n +0000401780 00000 n +0000401905 00000 n +0000402030 00000 n +0000402155 00000 n +0000402280 00000 n +0000402405 00000 n +0000402530 00000 n +0000402655 00000 n +0000402780 00000 n +0000402905 00000 n +0000403030 00000 n +0000403155 00000 n +0000403280 00000 n +0000403405 00000 n +0000403530 00000 n +0000403655 00000 n +0000403780 00000 n +0000403905 00000 n +0000404030 00000 n +0000404155 00000 n +0000404280 00000 n +0000404405 00000 n +0000404530 00000 n +0000404655 00000 n +0000404779 00000 n +0000404902 00000 n +0000405045 00000 n +0000407249 00000 n +0000407775 00000 n +0000407900 00000 n +0000408025 00000 n +0000408150 00000 n +0000408275 00000 n +0000408400 00000 n +0000408525 00000 n +0000408650 00000 n +0000408775 00000 n +0000408900 00000 n +0000409025 00000 n +0000409150 00000 n +0000409275 00000 n +0000409400 00000 n +0000409525 00000 n +0000409650 00000 n +0000409775 00000 n +0000409900 00000 n +0000410025 00000 n +0000410150 00000 n +0000410275 00000 n +0000410400 00000 n +0000410525 00000 n +0000410650 00000 n +0000410775 00000 n +0000410900 00000 n +0000411025 00000 n +0000411150 00000 n +0000411275 00000 n +0000411400 00000 n +0000411525 00000 n +0000411650 00000 n +0000411775 00000 n +0000411900 00000 n +0000412025 00000 n +0000412150 00000 n +0000412275 00000 n +0000412400 00000 n +0000412525 00000 n +0000412650 00000 n +0000412775 00000 n +0000412899 00000 n +0000413024 00000 n +0000413149 00000 n +0000413274 00000 n +0000413399 00000 n +0000413524 00000 n +0000413648 00000 n +0000413771 00000 n +0000413914 00000 n +0000416182 00000 n +0000416708 00000 n +0000416833 00000 n +0000416958 00000 n +0000417083 00000 n +0000417208 00000 n +0000417333 00000 n +0000417458 00000 n +0000417583 00000 n +0000417708 00000 n +0000417833 00000 n +0000417958 00000 n +0000418083 00000 n +0000418208 00000 n +0000418333 00000 n +0000418458 00000 n +0000418583 00000 n +0000418708 00000 n +0000418833 00000 n +0000418958 00000 n +0000419083 00000 n +0000419208 00000 n +0000419333 00000 n +0000419458 00000 n +0000419583 00000 n +0000419708 00000 n +0000419833 00000 n +0000419958 00000 n +0000420083 00000 n +0000420208 00000 n +0000420333 00000 n +0000420458 00000 n +0000420583 00000 n +0000420708 00000 n +0000420833 00000 n +0000420958 00000 n +0000421083 00000 n +0000421208 00000 n +0000421333 00000 n +0000421458 00000 n +0000421583 00000 n +0000421708 00000 n +0000421833 00000 n +0000421958 00000 n +0000422083 00000 n +0000422208 00000 n +0000422333 00000 n +0000422458 00000 n +0000422582 00000 n +0000422705 00000 n +0000422848 00000 n +0000425112 00000 n +0000425638 00000 n +0000425763 00000 n +0000425888 00000 n +0000426013 00000 n +0000426138 00000 n +0000426263 00000 n +0000426388 00000 n +0000426513 00000 n +0000426638 00000 n +0000426763 00000 n +0000426888 00000 n +0000427013 00000 n +0000427138 00000 n +0000427263 00000 n +0000427388 00000 n +0000427513 00000 n +0000427638 00000 n +0000427763 00000 n +0000427888 00000 n +0000428013 00000 n +0000428138 00000 n +0000428263 00000 n +0000428388 00000 n +0000428513 00000 n +0000428638 00000 n +0000428763 00000 n +0000428888 00000 n +0000429013 00000 n +0000429138 00000 n +0000429263 00000 n +0000429388 00000 n +0000429513 00000 n +0000429638 00000 n +0000429763 00000 n +0000429888 00000 n +0000430013 00000 n +0000430138 00000 n +0000430263 00000 n +0000430388 00000 n +0000430513 00000 n +0000430638 00000 n +0000430763 00000 n +0000430888 00000 n +0000431013 00000 n +0000431138 00000 n +0000431263 00000 n +0000431388 00000 n +0000431512 00000 n +0000431635 00000 n +0000431778 00000 n +0000434105 00000 n +0000434631 00000 n +0000434756 00000 n +0000434881 00000 n +0000435006 00000 n +0000435131 00000 n +0000435256 00000 n +0000435381 00000 n +0000435506 00000 n +0000435631 00000 n +0000435756 00000 n +0000435881 00000 n +0000436006 00000 n +0000436131 00000 n +0000436256 00000 n +0000436381 00000 n +0000436506 00000 n +0000436631 00000 n +0000436756 00000 n +0000436881 00000 n +0000437006 00000 n +0000437131 00000 n +0000437256 00000 n +0000437381 00000 n +0000437506 00000 n +0000437631 00000 n +0000437756 00000 n +0000437881 00000 n +0000438006 00000 n +0000438131 00000 n +0000438256 00000 n +0000438381 00000 n +0000438506 00000 n +0000438631 00000 n +0000438756 00000 n +0000438881 00000 n +0000439006 00000 n +0000439131 00000 n +0000439256 00000 n +0000439381 00000 n +0000439506 00000 n +0000439631 00000 n +0000439756 00000 n +0000439881 00000 n +0000440006 00000 n +0000440131 00000 n +0000440256 00000 n +0000440381 00000 n +0000440505 00000 n +0000440628 00000 n +0000440771 00000 n +0000443081 00000 n +0000443607 00000 n +0000443732 00000 n +0000443857 00000 n +0000443982 00000 n +0000444107 00000 n +0000444232 00000 n +0000444357 00000 n +0000444482 00000 n +0000444607 00000 n +0000444732 00000 n +0000444857 00000 n +0000444982 00000 n +0000445107 00000 n +0000445232 00000 n +0000445357 00000 n +0000445482 00000 n +0000445607 00000 n +0000445732 00000 n +0000445857 00000 n +0000445982 00000 n +0000446107 00000 n +0000446232 00000 n +0000446357 00000 n +0000446482 00000 n +0000446607 00000 n +0000446732 00000 n +0000446857 00000 n +0000446982 00000 n +0000447107 00000 n +0000447232 00000 n +0000447357 00000 n +0000447482 00000 n +0000447607 00000 n +0000447732 00000 n +0000447857 00000 n +0000447982 00000 n +0000448107 00000 n +0000448232 00000 n +0000448357 00000 n +0000448482 00000 n +0000448607 00000 n +0000448732 00000 n +0000448857 00000 n +0000448982 00000 n +0000449107 00000 n +0000449232 00000 n +0000449357 00000 n +0000449481 00000 n +0000449604 00000 n +0000449747 00000 n +0000452100 00000 n +0000452626 00000 n +0000452751 00000 n +0000452876 00000 n +0000453001 00000 n +0000453126 00000 n +0000453251 00000 n +0000453376 00000 n +0000453501 00000 n +0000453626 00000 n +0000453751 00000 n +0000453876 00000 n +0000454001 00000 n +0000454126 00000 n +0000454251 00000 n +0000454376 00000 n +0000454501 00000 n +0000454626 00000 n +0000454751 00000 n +0000454876 00000 n +0000455001 00000 n +0000455126 00000 n +0000455251 00000 n +0000455376 00000 n +0000455501 00000 n +0000455626 00000 n +0000455751 00000 n +0000455876 00000 n +0000456001 00000 n +0000456126 00000 n +0000456251 00000 n +0000456376 00000 n +0000456501 00000 n +0000456626 00000 n +0000456751 00000 n +0000456876 00000 n +0000457001 00000 n +0000457126 00000 n +0000457251 00000 n +0000457376 00000 n +0000457501 00000 n +0000457626 00000 n +0000457751 00000 n +0000457876 00000 n +0000458001 00000 n +0000458126 00000 n +0000458251 00000 n +0000458375 00000 n +0000458499 00000 n +0000458622 00000 n +0000458765 00000 n +0000461024 00000 n +0000461550 00000 n +0000461675 00000 n +0000461800 00000 n +0000461925 00000 n +0000462050 00000 n +0000462175 00000 n +0000462300 00000 n +0000462425 00000 n +0000462550 00000 n +0000462675 00000 n +0000462800 00000 n +0000462925 00000 n +0000463050 00000 n +0000463175 00000 n +0000463300 00000 n +0000463425 00000 n +0000463550 00000 n +0000463675 00000 n +0000463800 00000 n +0000463925 00000 n +0000464050 00000 n +0000464175 00000 n +0000464300 00000 n +0000464425 00000 n +0000464550 00000 n +0000464675 00000 n +0000464800 00000 n +0000464925 00000 n +0000465050 00000 n +0000465175 00000 n +0000465300 00000 n +0000465425 00000 n +0000465550 00000 n +0000465675 00000 n +0000465800 00000 n +0000465925 00000 n +0000466050 00000 n +0000466175 00000 n +0000466300 00000 n +0000466425 00000 n +0000466550 00000 n +0000466675 00000 n +0000466800 00000 n +0000466925 00000 n +0000467050 00000 n +0000467175 00000 n +0000467300 00000 n +0000467425 00000 n +0000467548 00000 n +0000467691 00000 n +0000470065 00000 n +0000470591 00000 n +0000470716 00000 n +0000470841 00000 n +0000470965 00000 n +0000471090 00000 n +0000471215 00000 n +0000471340 00000 n +0000471465 00000 n +0000471590 00000 n +0000471715 00000 n +0000471840 00000 n +0000471965 00000 n +0000472090 00000 n +0000472215 00000 n +0000472340 00000 n +0000472465 00000 n +0000472590 00000 n +0000472715 00000 n +0000472840 00000 n +0000472965 00000 n +0000473090 00000 n +0000473215 00000 n +0000473340 00000 n +0000473465 00000 n +0000473590 00000 n +0000473715 00000 n +0000473840 00000 n +0000473965 00000 n +0000474090 00000 n +0000474215 00000 n +0000474340 00000 n +0000474465 00000 n +0000474590 00000 n +0000474715 00000 n +0000474840 00000 n +0000474965 00000 n +0000475090 00000 n +0000475215 00000 n +0000475340 00000 n +0000475465 00000 n +0000475590 00000 n +0000475715 00000 n +0000475840 00000 n +0000475965 00000 n +0000476090 00000 n +0000476215 00000 n +0000476340 00000 n +0000476464 00000 n +0000476587 00000 n +0000476730 00000 n +0000479052 00000 n +0000479578 00000 n +0000479703 00000 n +0000479828 00000 n +0000479953 00000 n +0000480078 00000 n +0000480203 00000 n +0000480328 00000 n +0000480453 00000 n +0000480578 00000 n +0000480703 00000 n +0000480828 00000 n +0000480953 00000 n +0000481078 00000 n +0000481203 00000 n +0000481328 00000 n +0000481453 00000 n +0000481578 00000 n +0000481703 00000 n +0000481828 00000 n +0000481953 00000 n +0000482078 00000 n +0000482203 00000 n +0000482328 00000 n +0000482453 00000 n +0000482578 00000 n +0000482703 00000 n +0000482828 00000 n +0000482953 00000 n +0000483078 00000 n +0000483203 00000 n +0000483328 00000 n +0000483453 00000 n +0000483578 00000 n +0000483703 00000 n +0000483828 00000 n +0000483953 00000 n +0000484078 00000 n +0000484203 00000 n +0000484328 00000 n +0000484453 00000 n +0000484578 00000 n +0000484703 00000 n +0000484828 00000 n +0000484953 00000 n +0000485078 00000 n +0000485203 00000 n +0000485328 00000 n +0000485452 00000 n +0000485575 00000 n +0000485718 00000 n +0000488226 00000 n +0000488752 00000 n +0000488877 00000 n +0000489002 00000 n +0000489127 00000 n +0000489251 00000 n +0000489376 00000 n +0000489501 00000 n +0000489626 00000 n +0000489751 00000 n +0000489876 00000 n +0000490001 00000 n +0000490126 00000 n +0000490251 00000 n +0000490376 00000 n +0000490501 00000 n +0000490626 00000 n +0000490751 00000 n +0000490876 00000 n +0000491001 00000 n +0000491126 00000 n +0000491251 00000 n +0000491376 00000 n +0000491501 00000 n +0000491626 00000 n +0000491751 00000 n +0000491876 00000 n +0000492001 00000 n +0000492126 00000 n +0000492251 00000 n +0000492376 00000 n +0000492501 00000 n +0000492626 00000 n +0000492751 00000 n +0000492876 00000 n +0000493001 00000 n +0000493126 00000 n +0000493251 00000 n +0000493376 00000 n +0000493501 00000 n +0000493626 00000 n +0000493751 00000 n +0000493876 00000 n +0000494001 00000 n +0000494126 00000 n +0000494251 00000 n +0000494376 00000 n +0000494501 00000 n +0000494625 00000 n +0000494747 00000 n +0000494890 00000 n +0000497236 00000 n +0000497779 00000 n +0000497904 00000 n +0000498029 00000 n +0000498154 00000 n +0000498279 00000 n +0000498404 00000 n +0000498529 00000 n +0000498654 00000 n +0000498779 00000 n +0000498904 00000 n +0000499029 00000 n +0000499154 00000 n +0000499279 00000 n +0000499404 00000 n +0000499529 00000 n +0000499654 00000 n +0000499779 00000 n +0000499904 00000 n +0000500029 00000 n +0000500154 00000 n +0000500279 00000 n +0000500404 00000 n +0000500529 00000 n +0000500654 00000 n +0000500779 00000 n +0000500904 00000 n +0000501029 00000 n +0000501154 00000 n +0000501279 00000 n +0000501404 00000 n +0000501529 00000 n +0000501654 00000 n +0000501779 00000 n +0000501904 00000 n +0000502030 00000 n +0000502156 00000 n +0000502282 00000 n +0000502408 00000 n +0000502534 00000 n +0000502660 00000 n +0000502785 00000 n +0000502911 00000 n +0000503037 00000 n +0000503163 00000 n +0000503289 00000 n +0000503415 00000 n +0000503541 00000 n +0000503666 00000 n +0000503790 00000 n +0000503934 00000 n +0000506321 00000 n +0000506898 00000 n +0000507024 00000 n +0000507150 00000 n +0000507276 00000 n +0000507402 00000 n +0000507528 00000 n +0000507654 00000 n +0000507780 00000 n +0000507906 00000 n +0000508032 00000 n +0000508158 00000 n +0000508284 00000 n +0000508410 00000 n +0000508536 00000 n +0000508662 00000 n +0000508788 00000 n +0000508914 00000 n +0000509040 00000 n +0000509166 00000 n +0000509292 00000 n +0000509418 00000 n +0000509544 00000 n +0000509670 00000 n +0000509796 00000 n +0000509922 00000 n +0000510048 00000 n +0000510174 00000 n +0000510300 00000 n +0000510426 00000 n +0000510552 00000 n +0000510678 00000 n +0000510804 00000 n +0000510930 00000 n +0000511056 00000 n +0000511182 00000 n +0000511308 00000 n +0000511434 00000 n +0000511560 00000 n +0000511686 00000 n +0000511812 00000 n +0000511938 00000 n +0000512064 00000 n +0000512190 00000 n +0000512316 00000 n +0000512442 00000 n +0000512568 00000 n +0000512694 00000 n +0000512820 00000 n +0000512944 00000 n +0000513088 00000 n +0000515441 00000 n +0000516018 00000 n +0000516144 00000 n +0000516270 00000 n +0000516396 00000 n +0000516522 00000 n +0000516648 00000 n +0000516774 00000 n +0000516900 00000 n +0000517026 00000 n +0000517152 00000 n +0000517278 00000 n +0000517404 00000 n +0000517530 00000 n +0000517656 00000 n +0000517782 00000 n +0000517908 00000 n +0000518034 00000 n +0000518160 00000 n +0000518286 00000 n +0000518412 00000 n +0000518538 00000 n +0000518664 00000 n +0000518790 00000 n +0000518916 00000 n +0000519042 00000 n +0000519168 00000 n +0000519294 00000 n +0000519420 00000 n +0000519546 00000 n +0000519672 00000 n +0000519798 00000 n +0000519924 00000 n +0000520050 00000 n +0000520176 00000 n +0000520302 00000 n +0000520428 00000 n +0000520554 00000 n +0000520680 00000 n +0000520806 00000 n +0000520932 00000 n +0000521058 00000 n +0000521184 00000 n +0000521310 00000 n +0000521436 00000 n +0000521562 00000 n +0000521688 00000 n +0000521813 00000 n +0000521938 00000 n +0000522062 00000 n +0000522206 00000 n +0000524723 00000 n +0000525300 00000 n +0000525426 00000 n +0000525552 00000 n +0000525678 00000 n +0000525804 00000 n +0000525930 00000 n +0000526056 00000 n +0000526182 00000 n +0000526308 00000 n +0000526434 00000 n +0000526560 00000 n +0000526686 00000 n +0000526812 00000 n +0000526938 00000 n +0000527064 00000 n +0000527190 00000 n +0000527316 00000 n +0000527442 00000 n +0000527568 00000 n +0000527694 00000 n +0000527820 00000 n +0000527946 00000 n +0000528072 00000 n +0000528198 00000 n +0000528324 00000 n +0000528450 00000 n +0000528576 00000 n +0000528702 00000 n +0000528828 00000 n +0000528954 00000 n +0000529080 00000 n +0000529206 00000 n +0000529332 00000 n +0000529458 00000 n +0000529584 00000 n +0000529710 00000 n +0000529836 00000 n +0000529962 00000 n +0000530088 00000 n +0000530214 00000 n +0000530340 00000 n +0000530466 00000 n +0000530592 00000 n +0000530718 00000 n +0000530844 00000 n +0000530970 00000 n +0000531096 00000 n +0000531222 00000 n +0000531346 00000 n +0000531490 00000 n +0000533963 00000 n +0000534540 00000 n +0000534666 00000 n +0000534792 00000 n +0000534917 00000 n +0000535043 00000 n +0000535169 00000 n +0000535295 00000 n +0000535421 00000 n +0000535547 00000 n +0000535673 00000 n +0000535799 00000 n +0000535925 00000 n +0000536051 00000 n +0000536177 00000 n +0000536303 00000 n +0000536429 00000 n +0000536555 00000 n +0000536681 00000 n +0000536807 00000 n +0000536933 00000 n +0000537059 00000 n +0000537185 00000 n +0000537311 00000 n +0000537437 00000 n +0000537563 00000 n +0000537689 00000 n +0000537815 00000 n +0000537941 00000 n +0000538067 00000 n +0000538193 00000 n +0000538319 00000 n +0000538445 00000 n +0000538571 00000 n +0000538697 00000 n +0000538823 00000 n +0000538949 00000 n +0000539075 00000 n +0000539201 00000 n +0000539327 00000 n +0000539453 00000 n +0000539579 00000 n +0000539705 00000 n +0000539831 00000 n +0000539957 00000 n +0000540083 00000 n +0000540209 00000 n +0000540335 00000 n +0000540460 00000 n +0000540584 00000 n +0000540728 00000 n +0000543136 00000 n +0000543713 00000 n +0000543839 00000 n +0000543965 00000 n +0000544091 00000 n +0000544217 00000 n +0000544343 00000 n +0000544469 00000 n +0000544595 00000 n +0000544721 00000 n +0000544847 00000 n +0000544973 00000 n +0000545099 00000 n +0000545225 00000 n +0000545351 00000 n +0000545477 00000 n +0000545603 00000 n +0000545729 00000 n +0000545855 00000 n +0000545981 00000 n +0000546107 00000 n +0000546233 00000 n +0000546359 00000 n +0000546485 00000 n +0000546611 00000 n +0000546737 00000 n +0000546863 00000 n +0000546989 00000 n +0000547115 00000 n +0000547241 00000 n +0000547367 00000 n +0000547493 00000 n +0000547619 00000 n +0000547745 00000 n +0000547871 00000 n +0000547997 00000 n +0000548123 00000 n +0000548249 00000 n +0000548375 00000 n +0000548501 00000 n +0000548627 00000 n +0000548753 00000 n +0000548879 00000 n +0000549005 00000 n +0000549131 00000 n +0000549257 00000 n +0000549383 00000 n +0000549509 00000 n +0000549634 00000 n +0000549758 00000 n +0000549902 00000 n +0000552404 00000 n +0000552981 00000 n +0000553107 00000 n +0000553233 00000 n +0000553359 00000 n +0000553485 00000 n +0000553610 00000 n +0000553736 00000 n +0000553862 00000 n +0000553988 00000 n +0000554114 00000 n +0000554240 00000 n +0000554366 00000 n +0000554492 00000 n +0000554618 00000 n +0000554744 00000 n +0000554870 00000 n +0000554996 00000 n +0000555122 00000 n +0000555248 00000 n +0000555374 00000 n +0000555500 00000 n +0000555626 00000 n +0000555752 00000 n +0000555878 00000 n +0000556004 00000 n +0000556130 00000 n +0000556256 00000 n +0000556382 00000 n +0000556508 00000 n +0000556634 00000 n +0000556760 00000 n +0000556886 00000 n +0000557012 00000 n +0000557138 00000 n +0000557264 00000 n +0000557390 00000 n +0000557516 00000 n +0000557642 00000 n +0000557768 00000 n +0000557894 00000 n +0000558020 00000 n +0000558146 00000 n +0000558272 00000 n +0000558398 00000 n +0000558524 00000 n +0000558650 00000 n +0000558776 00000 n +0000558901 00000 n +0000559025 00000 n +0000559169 00000 n +0000561477 00000 n +0000562054 00000 n +0000562180 00000 n +0000562305 00000 n +0000562431 00000 n +0000562557 00000 n +0000562683 00000 n +0000562809 00000 n +0000562935 00000 n +0000563061 00000 n +0000563187 00000 n +0000563313 00000 n +0000563439 00000 n +0000563565 00000 n +0000563691 00000 n +0000563817 00000 n +0000563943 00000 n +0000564069 00000 n +0000564195 00000 n +0000564321 00000 n +0000564447 00000 n +0000564573 00000 n +0000564699 00000 n +0000564825 00000 n +0000564951 00000 n +0000565077 00000 n +0000565203 00000 n +0000565329 00000 n +0000565455 00000 n +0000565581 00000 n +0000565707 00000 n +0000565833 00000 n +0000565959 00000 n +0000566085 00000 n +0000566211 00000 n +0000566337 00000 n +0000566463 00000 n +0000566589 00000 n +0000566715 00000 n +0000566841 00000 n +0000566967 00000 n +0000567093 00000 n +0000567219 00000 n +0000567345 00000 n +0000567471 00000 n +0000567597 00000 n +0000567722 00000 n +0000567848 00000 n +0000567973 00000 n +0000568097 00000 n +0000568241 00000 n +0000570759 00000 n +0000571336 00000 n +0000571462 00000 n +0000571588 00000 n +0000571714 00000 n +0000571840 00000 n +0000571966 00000 n +0000572092 00000 n +0000572218 00000 n +0000572344 00000 n +0000572470 00000 n +0000572596 00000 n +0000572722 00000 n +0000572848 00000 n +0000572974 00000 n +0000573100 00000 n +0000573226 00000 n +0000573352 00000 n +0000573478 00000 n +0000573604 00000 n +0000573730 00000 n +0000573856 00000 n +0000573982 00000 n +0000574108 00000 n +0000574234 00000 n +0000574360 00000 n +0000574486 00000 n +0000574612 00000 n +0000574738 00000 n +0000574864 00000 n +0000574990 00000 n +0000575116 00000 n +0000575242 00000 n +0000575368 00000 n +0000575494 00000 n +0000575620 00000 n +0000575746 00000 n +0000575872 00000 n +0000575998 00000 n +0000576124 00000 n +0000576250 00000 n +0000576376 00000 n +0000576502 00000 n +0000576628 00000 n +0000576754 00000 n +0000576880 00000 n +0000577006 00000 n +0000577132 00000 n +0000577258 00000 n +0000577382 00000 n +0000577526 00000 n +0000579830 00000 n +0000580407 00000 n +0000580533 00000 n +0000580659 00000 n +0000580785 00000 n +0000580911 00000 n +0000581037 00000 n +0000581163 00000 n +0000581289 00000 n +0000581415 00000 n +0000581541 00000 n +0000581667 00000 n +0000581793 00000 n +0000581919 00000 n +0000582045 00000 n +0000582171 00000 n +0000582297 00000 n +0000582423 00000 n +0000582549 00000 n +0000582675 00000 n +0000582801 00000 n +0000582927 00000 n +0000583053 00000 n +0000583179 00000 n +0000583305 00000 n +0000583431 00000 n +0000583557 00000 n +0000583683 00000 n +0000583809 00000 n +0000583935 00000 n +0000584061 00000 n +0000584187 00000 n +0000584313 00000 n +0000584439 00000 n +0000584565 00000 n +0000584691 00000 n +0000584817 00000 n +0000584943 00000 n +0000585069 00000 n +0000585195 00000 n +0000585321 00000 n +0000585447 00000 n +0000585573 00000 n +0000585699 00000 n +0000585825 00000 n +0000585951 00000 n +0000586077 00000 n +0000586203 00000 n +0000586328 00000 n +0000586452 00000 n +0000586596 00000 n +0000589125 00000 n +0000589342 00000 n +0000589468 00000 n +0000589594 00000 n +0000589720 00000 n +0000589846 00000 n +0000589972 00000 n +0000590098 00000 n +0000590224 00000 n +0000590350 00000 n +0000590494 00000 n +0000591273 00000 n +0000591410 00000 n +0000591541 00000 n +0000591996 00000 n +0000592168 00000 n +0000592294 00000 n +0000592420 00000 n +0000592546 00000 n +0000592732 00000 n +0000593826 00000 n +0000594007 00000 n +0000594133 00000 n +0000594259 00000 n +0000594385 00000 n +0000594511 00000 n +0000594697 00000 n +0000595813 00000 n +0000595950 00000 n +0000596136 00000 n +0000597103 00000 n +0000597240 00000 n +0000597426 00000 n +0000598350 00000 n +0000598531 00000 n +0000598657 00000 n +0000598783 00000 n +0000598909 00000 n +0000599035 00000 n +0000599221 00000 n +0000600387 00000 n +0000600524 00000 n +0000600710 00000 n +0000601684 00000 n +0000601821 00000 n +0000602007 00000 n +0000602982 00000 n +0000603119 00000 n +0000603250 00000 n +0000603705 00000 n +0000603877 00000 n +0000604003 00000 n +0000604129 00000 n +0000604255 00000 n +0000604441 00000 n +0000605645 00000 n +0000605826 00000 n +0000605952 00000 n +0000606078 00000 n +0000606204 00000 n +0000606330 00000 n +0000606516 00000 n +0000607747 00000 n +0000607884 00000 n +0000608070 00000 n +0000609195 00000 n +0000609332 00000 n +0000609518 00000 n +0000610634 00000 n +0000610815 00000 n +0000610941 00000 n +0000611067 00000 n +0000611193 00000 n +0000611319 00000 n +0000611505 00000 n +0000612797 00000 n +0000612934 00000 n +0000613120 00000 n +0000614227 00000 n +0000614364 00000 n +0000614550 00000 n +0000615682 00000 n +0000615819 00000 n +0000615950 00000 n +0000616423 00000 n +0000616586 00000 n +0000616712 00000 n +0000616838 00000 n +0000617024 00000 n +0000618234 00000 n +0000618406 00000 n +0000618532 00000 n +0000618658 00000 n +0000618784 00000 n +0000618970 00000 n +0000620045 00000 n +0000620217 00000 n +0000620343 00000 n +0000620469 00000 n +0000620595 00000 n +0000620781 00000 n +0000621962 00000 n +0000622125 00000 n +0000622251 00000 n +0000622377 00000 n +0000622563 00000 n +0000623603 00000 n +0000623775 00000 n +0000623901 00000 n +0000624027 00000 n +0000624153 00000 n +0000624339 00000 n +0000625759 00000 n +0000625931 00000 n +0000626057 00000 n +0000626183 00000 n +0000626309 00000 n +0000626495 00000 n +0000627581 00000 n +0000627744 00000 n +0000627870 00000 n +0000627996 00000 n +0000628182 00000 n +0000629407 00000 n +0000629579 00000 n +0000629705 00000 n +0000629831 00000 n +0000629957 00000 n +0000630143 00000 n +0000631504 00000 n +0000631676 00000 n +0000631802 00000 n +0000631928 00000 n +0000632054 00000 n +0000632240 00000 n +0000633588 00000 n +0000633751 00000 n +0000633877 00000 n +0000634003 00000 n +0000634189 00000 n +0000635217 00000 n +0000635371 00000 n +0000635497 00000 n +0000635683 00000 n +0000636688 00000 n +0000636842 00000 n +0000636968 00000 n +0000637154 00000 n +0000638309 00000 n +0000638463 00000 n +0000638589 00000 n +0000638775 00000 n +0000639739 00000 n +0000639893 00000 n +0000640019 00000 n +0000640205 00000 n +0000641165 00000 n +0000641319 00000 n +0000641445 00000 n +0000641631 00000 n +0000642621 00000 n +0000642775 00000 n +0000642901 00000 n +0000643087 00000 n +0000644019 00000 n +0000644173 00000 n +0000644299 00000 n +0000644485 00000 n +0000645477 00000 n +0000645649 00000 n +0000645775 00000 n +0000645901 00000 n +0000646027 00000 n +0000646213 00000 n +0000647504 00000 n +0000647685 00000 n +0000647811 00000 n +0000647937 00000 n +0000648063 00000 n +0000648189 00000 n +0000648375 00000 n +0000649769 00000 n +0000649923 00000 n +0000650049 00000 n +0000650235 00000 n +0000651349 00000 n +0000651503 00000 n +0000651629 00000 n +0000651815 00000 n +0000652952 00000 n +0000653115 00000 n +0000653241 00000 n +0000653367 00000 n +0000653553 00000 n +0000654712 00000 n +0000654866 00000 n +0000654992 00000 n +0000655178 00000 n +0000656274 00000 n +0000656428 00000 n +0000656554 00000 n +0000656740 00000 n +0000657679 00000 n +0000657833 00000 n +0000657959 00000 n +0000658145 00000 n +0000659085 00000 n +0000659239 00000 n +0000659365 00000 n +0000659551 00000 n +0000660491 00000 n +0000660645 00000 n +0000660771 00000 n +0000660957 00000 n +0000662012 00000 n +0000662184 00000 n +0000662310 00000 n +0000662436 00000 n +0000662562 00000 n +0000662748 00000 n +0000664082 00000 n +0000664236 00000 n +0000664362 00000 n +0000664548 00000 n +0000665589 00000 n +0000665761 00000 n +0000665887 00000 n +0000666013 00000 n +0000666139 00000 n +0000666325 00000 n +0000667660 00000 n +0000667832 00000 n +0000667958 00000 n +0000668084 00000 n +0000668210 00000 n +0000668396 00000 n +0000669596 00000 n +0000669759 00000 n +0000669885 00000 n +0000670011 00000 n +0000670197 00000 n +0000671299 00000 n +0000671462 00000 n +0000671588 00000 n +0000671714 00000 n +0000671900 00000 n +0000673103 00000 n +0000673275 00000 n +0000673401 00000 n +0000673527 00000 n +0000673653 00000 n +0000673839 00000 n +0000675068 00000 n +0000675222 00000 n +0000675348 00000 n +0000675534 00000 n +0000676677 00000 n +0000676831 00000 n +0000676957 00000 n +0000677143 00000 n +0000678477 00000 n +0000678640 00000 n +0000678766 00000 n +0000678892 00000 n +0000679078 00000 n +0000680494 00000 n +0000680666 00000 n +0000680792 00000 n +0000680918 00000 n +0000681044 00000 n +0000681230 00000 n +0000682538 00000 n +0000682701 00000 n +0000682827 00000 n +0000682953 00000 n +0000683139 00000 n +0000684604 00000 n +0000684767 00000 n +0000684893 00000 n +0000685019 00000 n +0000685205 00000 n +0000686331 00000 n +0000686494 00000 n +0000686620 00000 n +0000686746 00000 n +0000686932 00000 n +0000688108 00000 n +0000688280 00000 n +0000688406 00000 n +0000688532 00000 n +0000688658 00000 n +0000688844 00000 n +0000690494 00000 n +0000690648 00000 n +0000690774 00000 n +0000690960 00000 n +0000692155 00000 n +0000692309 00000 n +0000692435 00000 n +0000692621 00000 n +0000693661 00000 n +0000693815 00000 n +0000693941 00000 n +0000694127 00000 n +0000695179 00000 n +0000695333 00000 n +0000695459 00000 n +0000695645 00000 n +0000696682 00000 n +0000696854 00000 n +0000696980 00000 n +0000697106 00000 n +0000697232 00000 n +0000697418 00000 n +0000698913 00000 n +0000699076 00000 n +0000699202 00000 n +0000699328 00000 n +0000699514 00000 n +0000700935 00000 n +0000701152 00000 n +0000701278 00000 n +0000701404 00000 n +0000701530 00000 n +0000701656 00000 n +0000701782 00000 n +0000701908 00000 n +0000702034 00000 n +0000702160 00000 n +0000702346 00000 n +0000703875 00000 n +0000704029 00000 n +0000704155 00000 n +0000704341 00000 n +0000705681 00000 n +0000705862 00000 n +0000705988 00000 n +0000706114 00000 n +0000706240 00000 n +0000706366 00000 n +0000706552 00000 n +0000707876 00000 n +0000708048 00000 n +0000708174 00000 n +0000708300 00000 n +0000708426 00000 n +0000708612 00000 n +0000709743 00000 n +0000709897 00000 n +0000710023 00000 n +0000710209 00000 n +0000711228 00000 n +0000711365 00000 n +0000711496 00000 n +0000711973 00000 n +0000712136 00000 n +0000712262 00000 n +0000712388 00000 n +0000712574 00000 n +0000713786 00000 n +0000713958 00000 n +0000714084 00000 n +0000714210 00000 n +0000714336 00000 n +0000714522 00000 n +0000715600 00000 n +0000715763 00000 n +0000715889 00000 n +0000716015 00000 n +0000716201 00000 n +0000717244 00000 n +0000717416 00000 n +0000717542 00000 n +0000717668 00000 n +0000717794 00000 n +0000717980 00000 n +0000719403 00000 n +0000719575 00000 n +0000719701 00000 n +0000719827 00000 n +0000719953 00000 n +0000720139 00000 n +0000721490 00000 n +0000721653 00000 n +0000721779 00000 n +0000721905 00000 n +0000722091 00000 n +0000723121 00000 n +0000723275 00000 n +0000723401 00000 n +0000723587 00000 n +0000724594 00000 n +0000724748 00000 n +0000724874 00000 n +0000725060 00000 n +0000726282 00000 n +0000726436 00000 n +0000726562 00000 n +0000726748 00000 n +0000727693 00000 n +0000727847 00000 n +0000727973 00000 n +0000728159 00000 n +0000729133 00000 n +0000729296 00000 n +0000729422 00000 n +0000729548 00000 n +0000729734 00000 n +0000730905 00000 n +0000731059 00000 n +0000731185 00000 n +0000731371 00000 n +0000732340 00000 n +0000732494 00000 n +0000732620 00000 n +0000732806 00000 n +0000733804 00000 n +0000733958 00000 n +0000734084 00000 n +0000734270 00000 n +0000735209 00000 n +0000735363 00000 n +0000735489 00000 n +0000735675 00000 n +0000736674 00000 n +0000736846 00000 n +0000736972 00000 n +0000737098 00000 n +0000737224 00000 n +0000737410 00000 n +0000738711 00000 n +0000738865 00000 n +0000738991 00000 n +0000739177 00000 n +0000740300 00000 n +0000740454 00000 n +0000740580 00000 n +0000740766 00000 n +0000741973 00000 n +0000742136 00000 n +0000742262 00000 n +0000742388 00000 n +0000742574 00000 n +0000743763 00000 n +0000743926 00000 n +0000744052 00000 n +0000744178 00000 n +0000744364 00000 n +0000745526 00000 n +0000745680 00000 n +0000745806 00000 n +0000745992 00000 n +0000747089 00000 n +0000747252 00000 n +0000747378 00000 n +0000747504 00000 n +0000747690 00000 n +0000748885 00000 n +0000749048 00000 n +0000749174 00000 n +0000749300 00000 n +0000749486 00000 n +0000750743 00000 n +0000750897 00000 n +0000751023 00000 n +0000751209 00000 n +0000752156 00000 n +0000752310 00000 n +0000752436 00000 n +0000752622 00000 n +0000753566 00000 n +0000753720 00000 n +0000753846 00000 n +0000754032 00000 n +0000754978 00000 n +0000755132 00000 n +0000755258 00000 n +0000755444 00000 n +0000756390 00000 n +0000756544 00000 n +0000756670 00000 n +0000756856 00000 n +0000757912 00000 n +0000758084 00000 n +0000758210 00000 n +0000758336 00000 n +0000758462 00000 n +0000758648 00000 n +0000759985 00000 n +0000760139 00000 n +0000760265 00000 n +0000760451 00000 n +0000761493 00000 n +0000761665 00000 n +0000761791 00000 n +0000761917 00000 n +0000762043 00000 n +0000762229 00000 n +0000763567 00000 n +0000763739 00000 n +0000763865 00000 n +0000763991 00000 n +0000764117 00000 n +0000764303 00000 n +0000765506 00000 n +0000765669 00000 n +0000765795 00000 n +0000765921 00000 n +0000766107 00000 n +0000767211 00000 n +0000767374 00000 n +0000767500 00000 n +0000767626 00000 n +0000767812 00000 n +0000769016 00000 n +0000769188 00000 n +0000769314 00000 n +0000769440 00000 n +0000769566 00000 n +0000769752 00000 n +0000770984 00000 n +0000771138 00000 n +0000771264 00000 n +0000771450 00000 n +0000772596 00000 n +0000772750 00000 n +0000772876 00000 n +0000773062 00000 n +0000774398 00000 n +0000774561 00000 n +0000774687 00000 n +0000774813 00000 n +0000774999 00000 n +0000776418 00000 n +0000776581 00000 n +0000776707 00000 n +0000776833 00000 n +0000777019 00000 n +0000778486 00000 n +0000778649 00000 n +0000778775 00000 n +0000778901 00000 n +0000779087 00000 n +0000780216 00000 n +0000780379 00000 n +0000780505 00000 n +0000780631 00000 n +0000780817 00000 n +0000781995 00000 n +0000782167 00000 n +0000782293 00000 n +0000782419 00000 n +0000782545 00000 n +0000782731 00000 n +0000784384 00000 n +0000784538 00000 n +0000784664 00000 n +0000784850 00000 n +0000786094 00000 n +0000786248 00000 n +0000786374 00000 n +0000786560 00000 n +0000787604 00000 n +0000787758 00000 n +0000787884 00000 n +0000788070 00000 n +0000789116 00000 n +0000789279 00000 n +0000789405 00000 n +0000789531 00000 n +0000789717 00000 n +0000790877 00000 n +0000791031 00000 n +0000791157 00000 n +0000791343 00000 n +0000792399 00000 n +0000792553 00000 n +0000792679 00000 n +0000792865 00000 n +0000793904 00000 n +0000794076 00000 n +0000794202 00000 n +0000794328 00000 n +0000794454 00000 n +0000794640 00000 n +0000796137 00000 n +0000796300 00000 n +0000796426 00000 n +0000796552 00000 n +0000796738 00000 n +0000798162 00000 n +0000798343 00000 n +0000798469 00000 n +0000798595 00000 n +0000798721 00000 n +0000798847 00000 n +0000799033 00000 n +0000800415 00000 n +0000800587 00000 n +0000800713 00000 n +0000800839 00000 n +0000800965 00000 n +0000801151 00000 n +0000802282 00000 n +0000802436 00000 n +0000802562 00000 n +0000802748 00000 n +0000803767 00000 n +0000803904 00000 n +0000804035 00000 n +0000804485 00000 n +0000804648 00000 n +0000804774 00000 n +0000804900 00000 n +0000805086 00000 n +0000806300 00000 n +0000806472 00000 n +0000806598 00000 n +0000806724 00000 n +0000806850 00000 n +0000807036 00000 n +0000808218 00000 n +0000808381 00000 n +0000808507 00000 n +0000808633 00000 n +0000808819 00000 n +0000809876 00000 n +0000810048 00000 n +0000810174 00000 n +0000810300 00000 n +0000810426 00000 n +0000810612 00000 n +0000812050 00000 n +0000812213 00000 n +0000812339 00000 n +0000812465 00000 n +0000812651 00000 n +0000813689 00000 n +0000813843 00000 n +0000813969 00000 n +0000814155 00000 n +0000815256 00000 n +0000815419 00000 n +0000815545 00000 n +0000815671 00000 n +0000815857 00000 n +0000816922 00000 n +0000817076 00000 n +0000817202 00000 n +0000817388 00000 n +0000818480 00000 n +0000818652 00000 n +0000818778 00000 n +0000818904 00000 n +0000819030 00000 n +0000819216 00000 n +0000820573 00000 n +0000820727 00000 n +0000820853 00000 n +0000821039 00000 n +0000822052 00000 n +0000822206 00000 n +0000822332 00000 n +0000822518 00000 n +0000823687 00000 n +0000823841 00000 n +0000823967 00000 n +0000824153 00000 n +0000825135 00000 n +0000825289 00000 n +0000825415 00000 n +0000825601 00000 n +0000826568 00000 n +0000826722 00000 n +0000826848 00000 n +0000827034 00000 n +0000828025 00000 n +0000828197 00000 n +0000828323 00000 n +0000828449 00000 n +0000828575 00000 n +0000828761 00000 n +0000830082 00000 n +0000830263 00000 n +0000830389 00000 n +0000830515 00000 n +0000830641 00000 n +0000830767 00000 n +0000830953 00000 n +0000832371 00000 n +0000832525 00000 n +0000832651 00000 n +0000832837 00000 n +0000833957 00000 n +0000834111 00000 n +0000834237 00000 n +0000834423 00000 n +0000835556 00000 n +0000835710 00000 n +0000835836 00000 n +0000836022 00000 n +0000837138 00000 n +0000837301 00000 n +0000837427 00000 n +0000837553 00000 n +0000837739 00000 n +0000838906 00000 n +0000839060 00000 n +0000839186 00000 n +0000839372 00000 n +0000840441 00000 n +0000840613 00000 n +0000840739 00000 n +0000840865 00000 n +0000840991 00000 n +0000841177 00000 n +0000842527 00000 n +0000842681 00000 n +0000842807 00000 n +0000842993 00000 n +0000844040 00000 n +0000844212 00000 n +0000844338 00000 n +0000844464 00000 n +0000844590 00000 n +0000844776 00000 n +0000846123 00000 n +0000846295 00000 n +0000846421 00000 n +0000846547 00000 n +0000846673 00000 n +0000846859 00000 n +0000848069 00000 n +0000848241 00000 n +0000848367 00000 n +0000848493 00000 n +0000848619 00000 n +0000848805 00000 n +0000850063 00000 n +0000850217 00000 n +0000850343 00000 n +0000850529 00000 n +0000851658 00000 n +0000851812 00000 n +0000851938 00000 n +0000852124 00000 n +0000853474 00000 n +0000853637 00000 n +0000853763 00000 n +0000853889 00000 n +0000854075 00000 n +0000855211 00000 n +0000855374 00000 n +0000855500 00000 n +0000855626 00000 n +0000855812 00000 n +0000857290 00000 n +0000857453 00000 n +0000857579 00000 n +0000857705 00000 n +0000857891 00000 n +0000859379 00000 n +0000859542 00000 n +0000859668 00000 n +0000859794 00000 n +0000859980 00000 n +0000861164 00000 n +0000861336 00000 n +0000861462 00000 n +0000861588 00000 n +0000861714 00000 n +0000861900 00000 n +0000863548 00000 n +0000863702 00000 n +0000863828 00000 n +0000864014 00000 n +0000865274 00000 n +0000865428 00000 n +0000865554 00000 n +0000865740 00000 n +0000866801 00000 n +0000866955 00000 n +0000867081 00000 n +0000867267 00000 n +0000868341 00000 n +0000868495 00000 n +0000868621 00000 n +0000868807 00000 n +0000869857 00000 n +0000870020 00000 n +0000870146 00000 n +0000870272 00000 n +0000870458 00000 n +0000871917 00000 n +0000872134 00000 n +0000872260 00000 n +0000872386 00000 n +0000872512 00000 n +0000872638 00000 n +0000872764 00000 n +0000872890 00000 n +0000873016 00000 n +0000873142 00000 n +0000873328 00000 n +0000874846 00000 n +0000875000 00000 n +0000875126 00000 n +0000875312 00000 n +0000876687 00000 n +0000876868 00000 n +0000876994 00000 n +0000877120 00000 n +0000877246 00000 n +0000877372 00000 n +0000877558 00000 n +0000878890 00000 n +0000879062 00000 n +0000879188 00000 n +0000879314 00000 n +0000879440 00000 n +0000879626 00000 n +0000880785 00000 n +0000880957 00000 n +0000881083 00000 n +0000881209 00000 n +0000881335 00000 n +0000881521 00000 n +0000882720 00000 n +0000882874 00000 n +0000883000 00000 n +0000883186 00000 n +0000884206 00000 n +0000884343 00000 n +0000884474 00000 n +0000884948 00000 n +0000885120 00000 n +0000885246 00000 n +0000885372 00000 n +0000885498 00000 n +0000885684 00000 n +0000886748 00000 n +0000886911 00000 n +0000887037 00000 n +0000887163 00000 n +0000887349 00000 n +0000888410 00000 n +0000888573 00000 n +0000888699 00000 n +0000888825 00000 n +0000889011 00000 n +0000890056 00000 n +0000890219 00000 n +0000890345 00000 n +0000890471 00000 n +0000890657 00000 n +0000891701 00000 n +0000891855 00000 n +0000891981 00000 n +0000892167 00000 n +0000893195 00000 n +0000893349 00000 n +0000893475 00000 n +0000893661 00000 n +0000894869 00000 n +0000895023 00000 n +0000895149 00000 n +0000895335 00000 n +0000896288 00000 n +0000896442 00000 n +0000896568 00000 n +0000896754 00000 n +0000897715 00000 n +0000897878 00000 n +0000898004 00000 n +0000898130 00000 n +0000898316 00000 n +0000899481 00000 n +0000899635 00000 n +0000899761 00000 n +0000899947 00000 n +0000900909 00000 n +0000901063 00000 n +0000901189 00000 n +0000901375 00000 n +0000902356 00000 n +0000902510 00000 n +0000902636 00000 n +0000902822 00000 n +0000903748 00000 n +0000903920 00000 n +0000904046 00000 n +0000904172 00000 n +0000904298 00000 n +0000904484 00000 n +0000905761 00000 n +0000905915 00000 n +0000906041 00000 n +0000906227 00000 n +0000907365 00000 n +0000907519 00000 n +0000907645 00000 n +0000907831 00000 n +0000909087 00000 n +0000909250 00000 n +0000909376 00000 n +0000909502 00000 n +0000909688 00000 n +0000910866 00000 n +0000911020 00000 n +0000911146 00000 n +0000911332 00000 n +0000912439 00000 n +0000912602 00000 n +0000912728 00000 n +0000912854 00000 n +0000913040 00000 n +0000914322 00000 n +0000914485 00000 n +0000914611 00000 n +0000914737 00000 n +0000914923 00000 n +0000916149 00000 n +0000916303 00000 n +0000916429 00000 n +0000916615 00000 n +0000917611 00000 n +0000917783 00000 n +0000917909 00000 n +0000918035 00000 n +0000918161 00000 n +0000918347 00000 n +0000919701 00000 n +0000919864 00000 n +0000919990 00000 n +0000920116 00000 n +0000920302 00000 n +0000921594 00000 n +0000921748 00000 n +0000921874 00000 n +0000922060 00000 n +0000923172 00000 n +0000923326 00000 n +0000923452 00000 n +0000923638 00000 n +0000924784 00000 n +0000924938 00000 n +0000925064 00000 n +0000925250 00000 n +0000926402 00000 n +0000926574 00000 n +0000926700 00000 n +0000926826 00000 n +0000926952 00000 n +0000927138 00000 n +0000928233 00000 n +0000928396 00000 n +0000928522 00000 n +0000928648 00000 n +0000928834 00000 n +0000929940 00000 n +0000930094 00000 n +0000930220 00000 n +0000930406 00000 n +0000931400 00000 n +0000931563 00000 n +0000931689 00000 n +0000931815 00000 n +0000932001 00000 n +0000933225 00000 n +0000933379 00000 n +0000933505 00000 n +0000933691 00000 n +0000934705 00000 n +0000934859 00000 n +0000934985 00000 n +0000935171 00000 n +0000936390 00000 n +0000936562 00000 n +0000936688 00000 n +0000936814 00000 n +0000936940 00000 n +0000937126 00000 n +0000938452 00000 n +0000938615 00000 n +0000938741 00000 n +0000938867 00000 n +0000939053 00000 n +0000940259 00000 n +0000940422 00000 n +0000940548 00000 n +0000940674 00000 n +0000940860 00000 n +0000942021 00000 n +0000942193 00000 n +0000942319 00000 n +0000942445 00000 n +0000942571 00000 n +0000942757 00000 n +0000944443 00000 n +0000944597 00000 n +0000944723 00000 n +0000944909 00000 n +0000946151 00000 n +0000946305 00000 n +0000946431 00000 n +0000946617 00000 n +0000947660 00000 n +0000947814 00000 n +0000947940 00000 n +0000948126 00000 n +0000949182 00000 n +0000949345 00000 n +0000949471 00000 n +0000949597 00000 n +0000949783 00000 n +0000950959 00000 n +0000951113 00000 n +0000951239 00000 n +0000951425 00000 n +0000952474 00000 n +0000952628 00000 n +0000952754 00000 n +0000952940 00000 n +0000953979 00000 n +0000954151 00000 n +0000954277 00000 n +0000954403 00000 n +0000954529 00000 n +0000954715 00000 n +0000956132 00000 n +0000956322 00000 n +0000956448 00000 n +0000956574 00000 n +0000956700 00000 n +0000956826 00000 n +0000956952 00000 n +0000957138 00000 n +0000958453 00000 n +0000958625 00000 n +0000958751 00000 n +0000958877 00000 n +0000959003 00000 n +0000959189 00000 n +0000960319 00000 n +0000960456 00000 n +0000960587 00000 n +0000961057 00000 n +0000961220 00000 n +0000961346 00000 n +0000961472 00000 n +0000961658 00000 n +0000962891 00000 n +0000963063 00000 n +0000963189 00000 n +0000963315 00000 n +0000963441 00000 n +0000963627 00000 n +0000964746 00000 n +0000964918 00000 n +0000965044 00000 n +0000965170 00000 n +0000965296 00000 n +0000965482 00000 n +0000967056 00000 n +0000967219 00000 n +0000967345 00000 n +0000967471 00000 n +0000967657 00000 n +0000968737 00000 n +0000968891 00000 n +0000969017 00000 n +0000969203 00000 n +0000970203 00000 n +0000970366 00000 n +0000970492 00000 n +0000970618 00000 n +0000970804 00000 n +0000972045 00000 n +0000972208 00000 n +0000972334 00000 n +0000972460 00000 n +0000972646 00000 n +0000973737 00000 n +0000973900 00000 n +0000974026 00000 n +0000974152 00000 n +0000974338 00000 n +0000975429 00000 n +0000975592 00000 n +0000975718 00000 n +0000975844 00000 n +0000976030 00000 n +0000977121 00000 n +0000977275 00000 n +0000977401 00000 n +0000977587 00000 n +0000978792 00000 n +0000978955 00000 n +0000979081 00000 n +0000979207 00000 n +0000979393 00000 n +0000980654 00000 n +0000980817 00000 n +0000980943 00000 n +0000981069 00000 n +0000981255 00000 n +0000982470 00000 n +0000982651 00000 n +0000982777 00000 n +0000982903 00000 n +0000983029 00000 n +0000983155 00000 n +0000983341 00000 n +0000984608 00000 n +0000984771 00000 n +0000984897 00000 n +0000985023 00000 n +0000985209 00000 n +0000986489 00000 n +0000986643 00000 n +0000986769 00000 n +0000986955 00000 n +0000988079 00000 n +0000988233 00000 n +0000988359 00000 n +0000988545 00000 n +0000989627 00000 n +0000989790 00000 n +0000989916 00000 n +0000990042 00000 n +0000990228 00000 n +0000991516 00000 n +0000991679 00000 n +0000991805 00000 n +0000991931 00000 n +0000992117 00000 n +0000993396 00000 n +0000993550 00000 n +0000993676 00000 n +0000993862 00000 n +0000995017 00000 n +0000995171 00000 n +0000995297 00000 n +0000995483 00000 n +0000996622 00000 n +0000996776 00000 n +0000996902 00000 n +0000997088 00000 n +0000998257 00000 n +0000998420 00000 n +0000998546 00000 n +0000998672 00000 n +0000998858 00000 n +0001000219 00000 n +0001000382 00000 n +0001000508 00000 n +0001000634 00000 n +0001000820 00000 n +0001002119 00000 n +0001002291 00000 n +0001002417 00000 n +0001002543 00000 n +0001002669 00000 n +0001002855 00000 n +0001003971 00000 n +0001004143 00000 n +0001004269 00000 n +0001004395 00000 n +0001004521 00000 n +0001004707 00000 n +0001005909 00000 n +0001006081 00000 n +0001006207 00000 n +0001006333 00000 n +0001006459 00000 n +0001006645 00000 n +0001007854 00000 n +0001008017 00000 n +0001008143 00000 n +0001008269 00000 n +0001008455 00000 n +0001009612 00000 n +0001009784 00000 n +0001009910 00000 n +0001010036 00000 n +0001010162 00000 n +0001010348 00000 n +0001011886 00000 n +0001012040 00000 n +0001012166 00000 n +0001012352 00000 n +0001013530 00000 n +0001013684 00000 n +0001013810 00000 n +0001013996 00000 n +0001015408 00000 n +0001015571 00000 n +0001015697 00000 n +0001015823 00000 n +0001016009 00000 n +0001017210 00000 n +0001017382 00000 n +0001017508 00000 n +0001017634 00000 n +0001017760 00000 n +0001017946 00000 n +0001019600 00000 n +0001019763 00000 n +0001019889 00000 n +0001020015 00000 n +0001020201 00000 n +0001021414 00000 n +0001021577 00000 n +0001021703 00000 n +0001021829 00000 n +0001022015 00000 n +0001023120 00000 n +0001023283 00000 n +0001023409 00000 n +0001023535 00000 n +0001023721 00000 n +0001024826 00000 n +0001024989 00000 n +0001025115 00000 n +0001025241 00000 n +0001025427 00000 n +0001026532 00000 n +0001026686 00000 n +0001026812 00000 n +0001026998 00000 n +0001028221 00000 n +0001028384 00000 n +0001028510 00000 n +0001028636 00000 n +0001028822 00000 n +0001030036 00000 n +0001030208 00000 n +0001030334 00000 n +0001030460 00000 n +0001030586 00000 n +0001030772 00000 n +0001031926 00000 n +0001032089 00000 n +0001032215 00000 n +0001032341 00000 n +0001032527 00000 n +0001033623 00000 n +0001033760 00000 n +0001033891 00000 n +0001034361 00000 n +0001034524 00000 n +0001034650 00000 n +0001034776 00000 n +0001034962 00000 n +0001036196 00000 n +0001036368 00000 n +0001036494 00000 n +0001036620 00000 n +0001036746 00000 n +0001036932 00000 n +0001038052 00000 n +0001038215 00000 n +0001038341 00000 n +0001038467 00000 n +0001038653 00000 n +0001040412 00000 n +0001040584 00000 n +0001040710 00000 n +0001040836 00000 n +0001040962 00000 n +0001041148 00000 n +0001042723 00000 n +0001042886 00000 n +0001043012 00000 n +0001043138 00000 n +0001043324 00000 n +0001044406 00000 n +0001044560 00000 n +0001044686 00000 n +0001044872 00000 n +0001045873 00000 n +0001046036 00000 n +0001046162 00000 n +0001046288 00000 n +0001046474 00000 n +0001047716 00000 n +0001047879 00000 n +0001048005 00000 n +0001048131 00000 n +0001048317 00000 n +0001049409 00000 n +0001049572 00000 n +0001049698 00000 n +0001049824 00000 n +0001050010 00000 n +0001051102 00000 n +0001051265 00000 n +0001051391 00000 n +0001051517 00000 n +0001051703 00000 n +0001052795 00000 n +0001052958 00000 n +0001053084 00000 n +0001053210 00000 n +0001053396 00000 n +0001054488 00000 n +0001054642 00000 n +0001054768 00000 n +0001054954 00000 n +0001056159 00000 n +0001056322 00000 n +0001056448 00000 n +0001056574 00000 n +0001056760 00000 n +0001058021 00000 n +0001058184 00000 n +0001058310 00000 n +0001058436 00000 n +0001058622 00000 n +0001059753 00000 n +0001059916 00000 n +0001060042 00000 n +0001060168 00000 n +0001060354 00000 n +0001061546 00000 n +0001061709 00000 n +0001061835 00000 n +0001061961 00000 n +0001062147 00000 n +0001063362 00000 n +0001063552 00000 n +0001063678 00000 n +0001063804 00000 n +0001063930 00000 n +0001064056 00000 n +0001064182 00000 n +0001064368 00000 n +0001065661 00000 n +0001065833 00000 n +0001065959 00000 n +0001066085 00000 n +0001066211 00000 n +0001066397 00000 n +0001067834 00000 n +0001068006 00000 n +0001068132 00000 n +0001068258 00000 n +0001068384 00000 n +0001068570 00000 n +0001070085 00000 n +0001070239 00000 n +0001070365 00000 n +0001070551 00000 n +0001071676 00000 n +0001071839 00000 n +0001071965 00000 n +0001072091 00000 n +0001072277 00000 n +0001073627 00000 n +0001073781 00000 n +0001073907 00000 n +0001074093 00000 n +0001075549 00000 n +0001075703 00000 n +0001075829 00000 n +0001076015 00000 n +0001077098 00000 n +0001077279 00000 n +0001077405 00000 n +0001077531 00000 n +0001077657 00000 n +0001077783 00000 n +0001077969 00000 n +0001079458 00000 n +0001079612 00000 n +0001079738 00000 n +0001079924 00000 n +0001081363 00000 n +0001081517 00000 n +0001081643 00000 n +0001081829 00000 n +0001083205 00000 n +0001083368 00000 n +0001083494 00000 n +0001083620 00000 n +0001083806 00000 n +0001085094 00000 n +0001085257 00000 n +0001085383 00000 n +0001085509 00000 n +0001085695 00000 n +0001086975 00000 n +0001087129 00000 n +0001087255 00000 n +0001087441 00000 n +0001088597 00000 n +0001088751 00000 n +0001088877 00000 n +0001089063 00000 n +0001090203 00000 n +0001090357 00000 n +0001090483 00000 n +0001090669 00000 n +0001091838 00000 n +0001092001 00000 n +0001092127 00000 n +0001092253 00000 n +0001092439 00000 n +0001093801 00000 n +0001093964 00000 n +0001094090 00000 n +0001094216 00000 n +0001094402 00000 n +0001095703 00000 n +0001095866 00000 n +0001095992 00000 n +0001096118 00000 n +0001096304 00000 n +0001097649 00000 n +0001097821 00000 n +0001097947 00000 n +0001098073 00000 n +0001098199 00000 n +0001098385 00000 n +0001099501 00000 n +0001099673 00000 n +0001099799 00000 n +0001099925 00000 n +0001100051 00000 n +0001100237 00000 n +0001101554 00000 n +0001101726 00000 n +0001101852 00000 n +0001101978 00000 n +0001102104 00000 n +0001102290 00000 n +0001103495 00000 n +0001103667 00000 n +0001103793 00000 n +0001103919 00000 n +0001104045 00000 n +0001104231 00000 n +0001105597 00000 n +0001105769 00000 n +0001105895 00000 n +0001106021 00000 n +0001106147 00000 n +0001106333 00000 n +0001107642 00000 n +0001107814 00000 n +0001107940 00000 n +0001108066 00000 n +0001108192 00000 n +0001108378 00000 n +0001109588 00000 n +0001109751 00000 n +0001109877 00000 n +0001110003 00000 n +0001110189 00000 n +0001111346 00000 n +0001111509 00000 n +0001111635 00000 n +0001111761 00000 n +0001111947 00000 n +0001113658 00000 n +0001113830 00000 n +0001113956 00000 n +0001114082 00000 n +0001114208 00000 n +0001114394 00000 n +0001115931 00000 n +0001116085 00000 n +0001116211 00000 n +0001116397 00000 n +0001117576 00000 n +0001117730 00000 n +0001117856 00000 n +0001118042 00000 n +0001119454 00000 n +0001119617 00000 n +0001119743 00000 n +0001119869 00000 n +0001120055 00000 n +0001121257 00000 n +0001121429 00000 n +0001121555 00000 n +0001121681 00000 n +0001121807 00000 n +0001121993 00000 n +0001123646 00000 n +0001123809 00000 n +0001123935 00000 n +0001124061 00000 n +0001124247 00000 n +0001125460 00000 n +0001125623 00000 n +0001125749 00000 n +0001125875 00000 n +0001126061 00000 n +0001127166 00000 n +0001127329 00000 n +0001127455 00000 n +0001127581 00000 n +0001127767 00000 n +0001128872 00000 n +0001129035 00000 n +0001129161 00000 n +0001129287 00000 n +0001129473 00000 n +0001130578 00000 n +0001130741 00000 n +0001130867 00000 n +0001130993 00000 n +0001131179 00000 n +0001132284 00000 n +0001132438 00000 n +0001132564 00000 n +0001132750 00000 n +0001133973 00000 n +0001134136 00000 n +0001134262 00000 n +0001134388 00000 n +0001134574 00000 n +0001135788 00000 n +0001135951 00000 n +0001136077 00000 n +0001136203 00000 n +0001136389 00000 n +0001137621 00000 n +0001137784 00000 n +0001137910 00000 n +0001138036 00000 n +0001138222 00000 n +0001139519 00000 n +0001139691 00000 n +0001139817 00000 n +0001139943 00000 n +0001140069 00000 n +0001140255 00000 n +0001141410 00000 n +0001141573 00000 n +0001141699 00000 n +0001141825 00000 n +0001142011 00000 n +0001143107 00000 n +0001143244 00000 n +0001143375 00000 n +0001143857 00000 n +0001144020 00000 n +0001144146 00000 n +0001144272 00000 n +0001144458 00000 n +0001145794 00000 n +0001145966 00000 n +0001146092 00000 n +0001146218 00000 n +0001146344 00000 n +0001146530 00000 n +0001148128 00000 n +0001148291 00000 n +0001148417 00000 n +0001148543 00000 n +0001148729 00000 n +0001149867 00000 n +0001150030 00000 n +0001150156 00000 n +0001150282 00000 n +0001150468 00000 n +0001151745 00000 n +0001151908 00000 n +0001152034 00000 n +0001152160 00000 n +0001152346 00000 n +0001153495 00000 n +0001153658 00000 n +0001153784 00000 n +0001153910 00000 n +0001154096 00000 n +0001155245 00000 n +0001155408 00000 n +0001155534 00000 n +0001155660 00000 n +0001155846 00000 n +0001156995 00000 n +0001157158 00000 n +0001157284 00000 n +0001157410 00000 n +0001157596 00000 n +0001158744 00000 n +0001158898 00000 n +0001159024 00000 n +0001159210 00000 n +0001160493 00000 n +0001160656 00000 n +0001160782 00000 n +0001160908 00000 n +0001161094 00000 n +0001162375 00000 n +0001162538 00000 n +0001162664 00000 n +0001162790 00000 n +0001162976 00000 n +0001164144 00000 n +0001164307 00000 n +0001164433 00000 n +0001164559 00000 n +0001164745 00000 n +0001165961 00000 n +0001166124 00000 n +0001166250 00000 n +0001166376 00000 n +0001166562 00000 n +0001167873 00000 n +0001168063 00000 n +0001168189 00000 n +0001168315 00000 n +0001168441 00000 n +0001168567 00000 n +0001168693 00000 n +0001168879 00000 n +0001170215 00000 n +0001170387 00000 n +0001170513 00000 n +0001170639 00000 n +0001170765 00000 n +0001170951 00000 n +0001172356 00000 n +0001172528 00000 n +0001172654 00000 n +0001172780 00000 n +0001172906 00000 n +0001173092 00000 n +0001174625 00000 n +0001174779 00000 n +0001174905 00000 n +0001175091 00000 n +0001176275 00000 n +0001176429 00000 n +0001176555 00000 n +0001176741 00000 n +0001177882 00000 n +0001178045 00000 n +0001178171 00000 n +0001178297 00000 n +0001178483 00000 n +0001179814 00000 n +0001179977 00000 n +0001180103 00000 n +0001180229 00000 n +0001180415 00000 n +0001181713 00000 n +0001181867 00000 n +0001181993 00000 n +0001182179 00000 n +0001183356 00000 n +0001183510 00000 n +0001183636 00000 n +0001183822 00000 n +0001184997 00000 n +0001185151 00000 n +0001185277 00000 n +0001185463 00000 n +0001186643 00000 n +0001186806 00000 n +0001186932 00000 n +0001187058 00000 n +0001187244 00000 n +0001188657 00000 n +0001188820 00000 n +0001188946 00000 n +0001189072 00000 n +0001189258 00000 n +0001190623 00000 n +0001190786 00000 n +0001190912 00000 n +0001191038 00000 n +0001191224 00000 n +0001192603 00000 n +0001192775 00000 n +0001192901 00000 n +0001193027 00000 n +0001193153 00000 n +0001193339 00000 n +0001194527 00000 n +0001194699 00000 n +0001194825 00000 n +0001194951 00000 n +0001195077 00000 n +0001195263 00000 n +0001196660 00000 n +0001196832 00000 n +0001196958 00000 n +0001197084 00000 n +0001197210 00000 n +0001197396 00000 n +0001198722 00000 n +0001198894 00000 n +0001199020 00000 n +0001199146 00000 n +0001199272 00000 n +0001199458 00000 n +0001200862 00000 n +0001201025 00000 n +0001201151 00000 n +0001201277 00000 n +0001201463 00000 n +0001203110 00000 n +0001203282 00000 n +0001203408 00000 n +0001203534 00000 n +0001203660 00000 n +0001203846 00000 n +0001205443 00000 n +0001205597 00000 n +0001205723 00000 n +0001205909 00000 n +0001207196 00000 n +0001207350 00000 n +0001207476 00000 n +0001207662 00000 n +0001209170 00000 n +0001209342 00000 n +0001209468 00000 n +0001209594 00000 n +0001209720 00000 n +0001209906 00000 n +0001211641 00000 n +0001211804 00000 n +0001211930 00000 n +0001212056 00000 n +0001212242 00000 n +0001213524 00000 n +0001213687 00000 n +0001213813 00000 n +0001213939 00000 n +0001214125 00000 n +0001215302 00000 n +0001215465 00000 n +0001215591 00000 n +0001215717 00000 n +0001215903 00000 n +0001217080 00000 n +0001217243 00000 n +0001217369 00000 n +0001217495 00000 n +0001217681 00000 n +0001218857 00000 n +0001219020 00000 n +0001219146 00000 n +0001219272 00000 n +0001219458 00000 n +0001220634 00000 n +0001220788 00000 n +0001220914 00000 n +0001221100 00000 n +0001222379 00000 n +0001222542 00000 n +0001222668 00000 n +0001222794 00000 n +0001222980 00000 n +0001224247 00000 n +0001224410 00000 n +0001224536 00000 n +0001224662 00000 n +0001224848 00000 n +0001226032 00000 n +0001226195 00000 n +0001226321 00000 n +0001226447 00000 n +0001226633 00000 n +0001227875 00000 n +0001228012 00000 n +0001228143 00000 n +0001228621 00000 n +0001228784 00000 n +0001228910 00000 n +0001229036 00000 n +0001229222 00000 n +0001230434 00000 n +0001230606 00000 n +0001230732 00000 n +0001230858 00000 n +0001230984 00000 n +0001231170 00000 n +0001232250 00000 n +0001232422 00000 n +0001232548 00000 n +0001232674 00000 n +0001232800 00000 n +0001232986 00000 n +0001234174 00000 n +0001234337 00000 n +0001234463 00000 n +0001234589 00000 n +0001234775 00000 n +0001235823 00000 n +0001235995 00000 n +0001236121 00000 n +0001236247 00000 n +0001236373 00000 n +0001236559 00000 n +0001237975 00000 n +0001238147 00000 n +0001238273 00000 n +0001238399 00000 n +0001238525 00000 n +0001238711 00000 n +0001239801 00000 n +0001239964 00000 n +0001240090 00000 n +0001240216 00000 n +0001240402 00000 n +0001241636 00000 n +0001241808 00000 n +0001241934 00000 n +0001242060 00000 n +0001242186 00000 n +0001242372 00000 n +0001243737 00000 n +0001243909 00000 n +0001244035 00000 n +0001244161 00000 n +0001244287 00000 n +0001244473 00000 n +0001245826 00000 n +0001245989 00000 n +0001246115 00000 n +0001246241 00000 n +0001246427 00000 n +0001247465 00000 n +0001247655 00000 n +0001247781 00000 n +0001247907 00000 n +0001248033 00000 n +0001248159 00000 n +0001248285 00000 n +0001248471 00000 n +0001249700 00000 n +0001249854 00000 n +0001249980 00000 n +0001250166 00000 n +0001251330 00000 n +0001251484 00000 n +0001251610 00000 n +0001251796 00000 n +0001252772 00000 n +0001252926 00000 n +0001253052 00000 n +0001253238 00000 n +0001254207 00000 n +0001254361 00000 n +0001254487 00000 n +0001254673 00000 n +0001255676 00000 n +0001255830 00000 n +0001255956 00000 n +0001256142 00000 n +0001257092 00000 n +0001257246 00000 n +0001257372 00000 n +0001257558 00000 n +0001258557 00000 n +0001258729 00000 n +0001258855 00000 n +0001258981 00000 n +0001259107 00000 n +0001259293 00000 n +0001260597 00000 n +0001260751 00000 n +0001260877 00000 n +0001261063 00000 n +0001262380 00000 n +0001262570 00000 n +0001262696 00000 n +0001262822 00000 n +0001262948 00000 n +0001263074 00000 n +0001263200 00000 n +0001263386 00000 n +0001264661 00000 n +0001264824 00000 n +0001264950 00000 n +0001265076 00000 n +0001265262 00000 n +0001266403 00000 n +0001266557 00000 n +0001266683 00000 n +0001266869 00000 n +0001268019 00000 n +0001268182 00000 n +0001268308 00000 n +0001268434 00000 n +0001268620 00000 n +0001269781 00000 n +0001269935 00000 n +0001270061 00000 n +0001270247 00000 n +0001271342 00000 n +0001271496 00000 n +0001271622 00000 n +0001271808 00000 n +0001272744 00000 n +0001272898 00000 n +0001273024 00000 n +0001273210 00000 n +0001274147 00000 n +0001274301 00000 n +0001274427 00000 n +0001274613 00000 n +0001275556 00000 n +0001275710 00000 n +0001275836 00000 n +0001276022 00000 n +0001277087 00000 n +0001277259 00000 n +0001277385 00000 n +0001277511 00000 n +0001277637 00000 n +0001277823 00000 n +0001279161 00000 n +0001279315 00000 n +0001279441 00000 n +0001279627 00000 n +0001280670 00000 n +0001280842 00000 n +0001280968 00000 n +0001281094 00000 n +0001281220 00000 n +0001281406 00000 n +0001282733 00000 n +0001282905 00000 n +0001283031 00000 n +0001283157 00000 n +0001283283 00000 n +0001283469 00000 n +0001284674 00000 n +0001284837 00000 n +0001284963 00000 n +0001285089 00000 n +0001285275 00000 n +0001286382 00000 n +0001286545 00000 n +0001286671 00000 n +0001286797 00000 n +0001286983 00000 n +0001288184 00000 n +0001288356 00000 n +0001288482 00000 n +0001288608 00000 n +0001288734 00000 n +0001288920 00000 n +0001290153 00000 n +0001290307 00000 n +0001290433 00000 n +0001290619 00000 n +0001291767 00000 n +0001291921 00000 n +0001292047 00000 n +0001292233 00000 n +0001293571 00000 n +0001293734 00000 n +0001293860 00000 n +0001293986 00000 n +0001294172 00000 n +0001295605 00000 n +0001295777 00000 n +0001295903 00000 n +0001296029 00000 n +0001296155 00000 n +0001296341 00000 n +0001297585 00000 n +0001297748 00000 n +0001297874 00000 n +0001298000 00000 n +0001298186 00000 n +0001299661 00000 n +0001299824 00000 n +0001299950 00000 n +0001300076 00000 n +0001300262 00000 n +0001301394 00000 n +0001301557 00000 n +0001301683 00000 n +0001301809 00000 n +0001301995 00000 n +0001303178 00000 n +0001303350 00000 n +0001303476 00000 n +0001303602 00000 n +0001303728 00000 n +0001303914 00000 n +0001306026 00000 n +0001306180 00000 n +0001306306 00000 n +0001306492 00000 n +0001307702 00000 n +0001307856 00000 n +0001307982 00000 n +0001308168 00000 n +0001309217 00000 n +0001309371 00000 n +0001309497 00000 n +0001309683 00000 n +0001310742 00000 n +0001310896 00000 n +0001311022 00000 n +0001311208 00000 n +0001312250 00000 n +0001312422 00000 n +0001312548 00000 n +0001312674 00000 n +0001312800 00000 n +0001312986 00000 n +0001314490 00000 n +0001314653 00000 n +0001314779 00000 n +0001314905 00000 n +0001315091 00000 n +0001316520 00000 n +0001316683 00000 n +0001316809 00000 n +0001316935 00000 n +0001317121 00000 n +0001318628 00000 n +0001318782 00000 n +0001318908 00000 n +0001319094 00000 n +0001320356 00000 n +0001320528 00000 n +0001320654 00000 n +0001320780 00000 n +0001320906 00000 n +0001321092 00000 n +0001322229 00000 n +0001322383 00000 n +0001322509 00000 n +0001322695 00000 n +0001323721 00000 n +0001323858 00000 n +0001323989 00000 n +0001324466 00000 n +0001324629 00000 n +0001324755 00000 n +0001324881 00000 n +0001325067 00000 n +0001326278 00000 n +0001326450 00000 n +0001326576 00000 n +0001326702 00000 n +0001326828 00000 n +0001327014 00000 n +0001328094 00000 n +0001328257 00000 n +0001328383 00000 n +0001328509 00000 n +0001328695 00000 n +0001329743 00000 n +0001329915 00000 n +0001330041 00000 n +0001330167 00000 n +0001330293 00000 n +0001330479 00000 n +0001331894 00000 n +0001332066 00000 n +0001332192 00000 n +0001332318 00000 n +0001332444 00000 n +0001332630 00000 n +0001333983 00000 n +0001334146 00000 n +0001334272 00000 n +0001334398 00000 n +0001334584 00000 n +0001335622 00000 n +0001335812 00000 n +0001335938 00000 n +0001336064 00000 n +0001336190 00000 n +0001336316 00000 n +0001336442 00000 n +0001336628 00000 n +0001337857 00000 n +0001338011 00000 n +0001338137 00000 n +0001338323 00000 n +0001339545 00000 n +0001339699 00000 n +0001339825 00000 n +0001340011 00000 n +0001340967 00000 n +0001341121 00000 n +0001341247 00000 n +0001341433 00000 n +0001342410 00000 n +0001342573 00000 n +0001342699 00000 n +0001342825 00000 n +0001343011 00000 n +0001344180 00000 n +0001344334 00000 n +0001344460 00000 n +0001344646 00000 n +0001345615 00000 n +0001345769 00000 n +0001345895 00000 n +0001346081 00000 n +0001347085 00000 n +0001347239 00000 n +0001347365 00000 n +0001347551 00000 n +0001348502 00000 n +0001348656 00000 n +0001348782 00000 n +0001348968 00000 n +0001349966 00000 n +0001350138 00000 n +0001350264 00000 n +0001350390 00000 n +0001350516 00000 n +0001350702 00000 n +0001352006 00000 n +0001352196 00000 n +0001352322 00000 n +0001352448 00000 n +0001352574 00000 n +0001352700 00000 n +0001352826 00000 n +0001353012 00000 n +0001354284 00000 n +0001354447 00000 n +0001354573 00000 n +0001354699 00000 n +0001354885 00000 n +0001356026 00000 n +0001356180 00000 n +0001356306 00000 n +0001356492 00000 n +0001357711 00000 n +0001357874 00000 n +0001358000 00000 n +0001358126 00000 n +0001358312 00000 n +0001359500 00000 n +0001359663 00000 n +0001359789 00000 n +0001359915 00000 n +0001360101 00000 n +0001361265 00000 n +0001361419 00000 n +0001361545 00000 n +0001361731 00000 n +0001362827 00000 n +0001362990 00000 n +0001363116 00000 n +0001363242 00000 n +0001363428 00000 n +0001364623 00000 n +0001364786 00000 n +0001364912 00000 n +0001365038 00000 n +0001365224 00000 n +0001366490 00000 n +0001366644 00000 n +0001366770 00000 n +0001366956 00000 n +0001367896 00000 n +0001368050 00000 n +0001368176 00000 n +0001368362 00000 n +0001369301 00000 n +0001369455 00000 n +0001369581 00000 n +0001369767 00000 n +0001370708 00000 n +0001370862 00000 n +0001370988 00000 n +0001371174 00000 n +0001372120 00000 n +0001372274 00000 n +0001372400 00000 n +0001372586 00000 n +0001373651 00000 n +0001373823 00000 n +0001373949 00000 n +0001374075 00000 n +0001374201 00000 n +0001374387 00000 n +0001375725 00000 n +0001375879 00000 n +0001376005 00000 n +0001376191 00000 n +0001377233 00000 n +0001377405 00000 n +0001377531 00000 n +0001377657 00000 n +0001377783 00000 n +0001377969 00000 n +0001379296 00000 n +0001379468 00000 n +0001379594 00000 n +0001379720 00000 n +0001379846 00000 n +0001380032 00000 n +0001381238 00000 n +0001381401 00000 n +0001381527 00000 n +0001381653 00000 n +0001381839 00000 n +0001382946 00000 n +0001383109 00000 n +0001383235 00000 n +0001383361 00000 n +0001383547 00000 n +0001384748 00000 n +0001384920 00000 n +0001385046 00000 n +0001385172 00000 n +0001385298 00000 n +0001385484 00000 n +0001386718 00000 n +0001386872 00000 n +0001386998 00000 n +0001387184 00000 n +0001388333 00000 n +0001388487 00000 n +0001388613 00000 n +0001388799 00000 n +0001390137 00000 n +0001390300 00000 n +0001390426 00000 n +0001390552 00000 n +0001390738 00000 n +0001392172 00000 n +0001392335 00000 n +0001392461 00000 n +0001392587 00000 n +0001392773 00000 n +0001394248 00000 n +0001394411 00000 n +0001394537 00000 n +0001394663 00000 n +0001394849 00000 n +0001395982 00000 n +0001396145 00000 n +0001396271 00000 n +0001396397 00000 n +0001396583 00000 n +0001397766 00000 n +0001397938 00000 n +0001398064 00000 n +0001398190 00000 n +0001398316 00000 n +0001398502 00000 n +0001400615 00000 n +0001400769 00000 n +0001400895 00000 n +0001401081 00000 n +0001402336 00000 n +0001402490 00000 n +0001402616 00000 n +0001402802 00000 n +0001403854 00000 n +0001404008 00000 n +0001404134 00000 n +0001404320 00000 n +0001405370 00000 n +0001405533 00000 n +0001405659 00000 n +0001405785 00000 n +0001405971 00000 n +0001407133 00000 n +0001407287 00000 n +0001407413 00000 n +0001407599 00000 n +0001408658 00000 n +0001408812 00000 n +0001408938 00000 n +0001409124 00000 n +0001410167 00000 n +0001410339 00000 n +0001410465 00000 n +0001410591 00000 n +0001410717 00000 n +0001410903 00000 n +0001412407 00000 n +0001412570 00000 n +0001412696 00000 n +0001412822 00000 n +0001413008 00000 n +0001414436 00000 n +0001414590 00000 n +0001414716 00000 n +0001414902 00000 n +0001416305 00000 n +0001416477 00000 n +0001416603 00000 n +0001416729 00000 n +0001416855 00000 n +0001417041 00000 n +0001418179 00000 n +0001418333 00000 n +0001418459 00000 n +0001418645 00000 n +0001419670 00000 n +0001419807 00000 n +0001419938 00000 n +0001420387 00000 n +0001420550 00000 n +0001420676 00000 n +0001420802 00000 n +0001420988 00000 n +0001422200 00000 n +0001422372 00000 n +0001422498 00000 n +0001422624 00000 n +0001422750 00000 n +0001422936 00000 n +0001424121 00000 n +0001424284 00000 n +0001424410 00000 n +0001424536 00000 n +0001424722 00000 n +0001425781 00000 n +0001425953 00000 n +0001426079 00000 n +0001426205 00000 n +0001426331 00000 n +0001426517 00000 n +0001427947 00000 n +0001428110 00000 n +0001428236 00000 n +0001428362 00000 n +0001428548 00000 n +0001429595 00000 n +0001429749 00000 n +0001429875 00000 n +0001430061 00000 n +0001431169 00000 n +0001431332 00000 n +0001431458 00000 n +0001431584 00000 n +0001431770 00000 n +0001432847 00000 n +0001433001 00000 n +0001433127 00000 n +0001433313 00000 n +0001434415 00000 n +0001434587 00000 n +0001434713 00000 n +0001434839 00000 n +0001434965 00000 n +0001435151 00000 n +0001436513 00000 n +0001436703 00000 n +0001436829 00000 n +0001436955 00000 n +0001437081 00000 n +0001437207 00000 n +0001437333 00000 n +0001437519 00000 n +0001438799 00000 n +0001438953 00000 n +0001439079 00000 n +0001439265 00000 n +0001440444 00000 n +0001440598 00000 n +0001440724 00000 n +0001440910 00000 n +0001441901 00000 n +0001442055 00000 n +0001442181 00000 n +0001442367 00000 n +0001443341 00000 n +0001443495 00000 n +0001443621 00000 n +0001443807 00000 n +0001444808 00000 n +0001444980 00000 n +0001445106 00000 n +0001445232 00000 n +0001445358 00000 n +0001445544 00000 n +0001446876 00000 n +0001447030 00000 n +0001447156 00000 n +0001447342 00000 n +0001448716 00000 n +0001448906 00000 n +0001449032 00000 n +0001449158 00000 n +0001449284 00000 n +0001449410 00000 n +0001449536 00000 n +0001449722 00000 n +0001450988 00000 n +0001451151 00000 n +0001451277 00000 n +0001451403 00000 n +0001451589 00000 n +0001452738 00000 n +0001452892 00000 n +0001453018 00000 n +0001453204 00000 n +0001454346 00000 n +0001454500 00000 n +0001454626 00000 n +0001454812 00000 n +0001455927 00000 n +0001456090 00000 n +0001456216 00000 n +0001456342 00000 n +0001456528 00000 n +0001457695 00000 n +0001457849 00000 n +0001457975 00000 n +0001458161 00000 n +0001459241 00000 n +0001459413 00000 n +0001459539 00000 n +0001459665 00000 n +0001459791 00000 n +0001459977 00000 n +0001461331 00000 n +0001461485 00000 n +0001461611 00000 n +0001461797 00000 n +0001462845 00000 n +0001463017 00000 n +0001463143 00000 n +0001463269 00000 n +0001463395 00000 n +0001463581 00000 n +0001464920 00000 n +0001465092 00000 n +0001465218 00000 n +0001465344 00000 n +0001465470 00000 n +0001465656 00000 n +0001466870 00000 n +0001467042 00000 n +0001467168 00000 n +0001467294 00000 n +0001467420 00000 n +0001467606 00000 n +0001468872 00000 n +0001469026 00000 n +0001469152 00000 n +0001469338 00000 n +0001470471 00000 n +0001470625 00000 n +0001470751 00000 n +0001470937 00000 n +0001472290 00000 n +0001472453 00000 n +0001472579 00000 n +0001472705 00000 n +0001472891 00000 n +0001474032 00000 n +0001474195 00000 n +0001474321 00000 n +0001474447 00000 n +0001474633 00000 n +0001476123 00000 n +0001476286 00000 n +0001476412 00000 n +0001476538 00000 n +0001476724 00000 n +0001478220 00000 n +0001478383 00000 n +0001478509 00000 n +0001478635 00000 n +0001478821 00000 n +0001480016 00000 n +0001480188 00000 n +0001480314 00000 n +0001480440 00000 n +0001480566 00000 n +0001480752 00000 n +0001482904 00000 n +0001483058 00000 n +0001483184 00000 n +0001483370 00000 n +0001484638 00000 n +0001484792 00000 n +0001484918 00000 n +0001485104 00000 n +0001486168 00000 n +0001486322 00000 n +0001486448 00000 n +0001486634 00000 n +0001487712 00000 n +0001487866 00000 n +0001487992 00000 n +0001488178 00000 n +0001489231 00000 n +0001489394 00000 n +0001489520 00000 n +0001489646 00000 n +0001489832 00000 n +0001491297 00000 n +0001491460 00000 n +0001491586 00000 n +0001491712 00000 n +0001491898 00000 n +0001493419 00000 n +0001493573 00000 n +0001493699 00000 n +0001493885 00000 n +0001495150 00000 n +0001495322 00000 n +0001495448 00000 n +0001495574 00000 n +0001495700 00000 n +0001495886 00000 n +0001497054 00000 n +0001497226 00000 n +0001497352 00000 n +0001497478 00000 n +0001497604 00000 n +0001497790 00000 n +0001498992 00000 n +0001499146 00000 n +0001499272 00000 n +0001499458 00000 n +0001500485 00000 n +0001500622 00000 n +0001500753 00000 n +0001501227 00000 n +0001501399 00000 n +0001501525 00000 n +0001501651 00000 n +0001501777 00000 n +0001501963 00000 n +0001503031 00000 n +0001503194 00000 n +0001503320 00000 n +0001503446 00000 n +0001503632 00000 n +0001504699 00000 n +0001504862 00000 n +0001504988 00000 n +0001505114 00000 n +0001505300 00000 n +0001506349 00000 n +0001506512 00000 n +0001506638 00000 n +0001506764 00000 n +0001506950 00000 n +0001508007 00000 n +0001508197 00000 n +0001508323 00000 n +0001508449 00000 n +0001508575 00000 n +0001508701 00000 n +0001508827 00000 n +0001509013 00000 n +0001510266 00000 n +0001510420 00000 n +0001510546 00000 n +0001510732 00000 n +0001511955 00000 n +0001512109 00000 n +0001512235 00000 n +0001512421 00000 n +0001513384 00000 n +0001513538 00000 n +0001513664 00000 n +0001513850 00000 n +0001514825 00000 n +0001514988 00000 n +0001515114 00000 n +0001515240 00000 n +0001515426 00000 n +0001516596 00000 n +0001516750 00000 n +0001516876 00000 n +0001517062 00000 n +0001518035 00000 n +0001518189 00000 n +0001518315 00000 n +0001518501 00000 n +0001519493 00000 n +0001519647 00000 n +0001519773 00000 n +0001519959 00000 n +0001520900 00000 n +0001521072 00000 n +0001521198 00000 n +0001521324 00000 n +0001521450 00000 n +0001521636 00000 n +0001522918 00000 n +0001523108 00000 n +0001523234 00000 n +0001523360 00000 n +0001523486 00000 n +0001523612 00000 n +0001523738 00000 n +0001523924 00000 n +0001525174 00000 n +0001525337 00000 n +0001525463 00000 n +0001525589 00000 n +0001525775 00000 n +0001526902 00000 n +0001527056 00000 n +0001527182 00000 n +0001527368 00000 n +0001528637 00000 n +0001528800 00000 n +0001528926 00000 n +0001529052 00000 n +0001529238 00000 n +0001530412 00000 n +0001530566 00000 n +0001530692 00000 n +0001530878 00000 n +0001531994 00000 n +0001532157 00000 n +0001532283 00000 n +0001532409 00000 n +0001532595 00000 n +0001533888 00000 n +0001534051 00000 n +0001534177 00000 n +0001534303 00000 n +0001534489 00000 n +0001535713 00000 n +0001535867 00000 n +0001535993 00000 n +0001536179 00000 n +0001537179 00000 n +0001537351 00000 n +0001537477 00000 n +0001537603 00000 n +0001537729 00000 n +0001537915 00000 n +0001539266 00000 n +0001539429 00000 n +0001539555 00000 n +0001539681 00000 n +0001539867 00000 n +0001541168 00000 n +0001541322 00000 n +0001541448 00000 n +0001541634 00000 n +0001542756 00000 n +0001542910 00000 n +0001543036 00000 n +0001543222 00000 n +0001544380 00000 n +0001544534 00000 n +0001544660 00000 n +0001544846 00000 n +0001546012 00000 n +0001546184 00000 n +0001546310 00000 n +0001546436 00000 n +0001546562 00000 n +0001546748 00000 n +0001547847 00000 n +0001548010 00000 n +0001548136 00000 n +0001548262 00000 n +0001548448 00000 n +0001549553 00000 n +0001549707 00000 n +0001549833 00000 n +0001550019 00000 n +0001551024 00000 n +0001551187 00000 n +0001551313 00000 n +0001551439 00000 n +0001551625 00000 n +0001552850 00000 n +0001553004 00000 n +0001553130 00000 n +0001553316 00000 n +0001554333 00000 n +0001554487 00000 n +0001554613 00000 n +0001554799 00000 n +0001556023 00000 n +0001556195 00000 n +0001556321 00000 n +0001556447 00000 n +0001556573 00000 n +0001556759 00000 n +0001558087 00000 n +0001558250 00000 n +0001558376 00000 n +0001558502 00000 n +0001558688 00000 n +0001559897 00000 n +0001560060 00000 n +0001560186 00000 n +0001560312 00000 n +0001560498 00000 n +0001561662 00000 n +0001561834 00000 n +0001561960 00000 n +0001562086 00000 n +0001562212 00000 n +0001562398 00000 n +0001564420 00000 n +0001564574 00000 n +0001564700 00000 n +0001564886 00000 n +0001566137 00000 n +0001566291 00000 n +0001566417 00000 n +0001566603 00000 n +0001567655 00000 n +0001567809 00000 n +0001567935 00000 n +0001568121 00000 n +0001569185 00000 n +0001569348 00000 n +0001569474 00000 n +0001569600 00000 n +0001569786 00000 n +0001570962 00000 n +0001571116 00000 n +0001571242 00000 n +0001571428 00000 n +0001572484 00000 n +0001572638 00000 n +0001572764 00000 n +0001572950 00000 n +0001573995 00000 n +0001574167 00000 n +0001574293 00000 n +0001574419 00000 n +0001574545 00000 n +0001574731 00000 n +0001576157 00000 n +0001576347 00000 n +0001576473 00000 n +0001576599 00000 n +0001576725 00000 n +0001576851 00000 n +0001576977 00000 n +0001577163 00000 n +0001578488 00000 n +0001578660 00000 n +0001578786 00000 n +0001578912 00000 n +0001579038 00000 n +0001579224 00000 n +0001580356 00000 n +0001580493 00000 n +0001580624 00000 n +0001581095 00000 n +0001581258 00000 n +0001581384 00000 n +0001581510 00000 n +0001581696 00000 n +0001582926 00000 n +0001583098 00000 n +0001583224 00000 n +0001583350 00000 n +0001583476 00000 n +0001583662 00000 n +0001584785 00000 n +0001584957 00000 n +0001585083 00000 n +0001585209 00000 n +0001585335 00000 n +0001585521 00000 n +0001587101 00000 n +0001587264 00000 n +0001587390 00000 n +0001587516 00000 n +0001587702 00000 n +0001588787 00000 n +0001588941 00000 n +0001589067 00000 n +0001589253 00000 n +0001590264 00000 n +0001590454 00000 n +0001590580 00000 n +0001590706 00000 n +0001590832 00000 n +0001590958 00000 n +0001591084 00000 n +0001591270 00000 n +0001592555 00000 n +0001592718 00000 n +0001592844 00000 n +0001592970 00000 n +0001593156 00000 n +0001594401 00000 n +0001594564 00000 n +0001594690 00000 n +0001594816 00000 n +0001595002 00000 n +0001596097 00000 n +0001596260 00000 n +0001596386 00000 n +0001596512 00000 n +0001596698 00000 n +0001597793 00000 n +0001597956 00000 n +0001598082 00000 n +0001598208 00000 n +0001598394 00000 n +0001599489 00000 n +0001599643 00000 n +0001599769 00000 n +0001599955 00000 n +0001601167 00000 n +0001601330 00000 n +0001601456 00000 n +0001601582 00000 n +0001601768 00000 n +0001603033 00000 n +0001603196 00000 n +0001603322 00000 n +0001603448 00000 n +0001603634 00000 n +0001604850 00000 n +0001605040 00000 n +0001605166 00000 n +0001605292 00000 n +0001605418 00000 n +0001605544 00000 n +0001605670 00000 n +0001605856 00000 n +0001607126 00000 n +0001607289 00000 n +0001607415 00000 n +0001607541 00000 n +0001607727 00000 n +0001608874 00000 n +0001609055 00000 n +0001609181 00000 n +0001609307 00000 n +0001609433 00000 n +0001609559 00000 n +0001609745 00000 n +0001611026 00000 n +0001611189 00000 n +0001611315 00000 n +0001611441 00000 n +0001611627 00000 n +0001612906 00000 n +0001613060 00000 n +0001613186 00000 n +0001613372 00000 n +0001614501 00000 n +0001614655 00000 n +0001614781 00000 n +0001614967 00000 n +0001616057 00000 n +0001616220 00000 n +0001616346 00000 n +0001616472 00000 n +0001616658 00000 n +0001617950 00000 n +0001618113 00000 n +0001618239 00000 n +0001618365 00000 n +0001618551 00000 n +0001619834 00000 n +0001619988 00000 n +0001620114 00000 n +0001620300 00000 n +0001621464 00000 n +0001621618 00000 n +0001621744 00000 n +0001621930 00000 n +0001623077 00000 n +0001623231 00000 n +0001623357 00000 n +0001623543 00000 n +0001624721 00000 n +0001624884 00000 n +0001625010 00000 n +0001625136 00000 n +0001625322 00000 n +0001626687 00000 n +0001626850 00000 n +0001626976 00000 n +0001627102 00000 n +0001627288 00000 n +0001628583 00000 n +0001628755 00000 n +0001628881 00000 n +0001629007 00000 n +0001629133 00000 n +0001629319 00000 n +0001630441 00000 n +0001630613 00000 n +0001630739 00000 n +0001630865 00000 n +0001630991 00000 n +0001631177 00000 n +0001632382 00000 n +0001632554 00000 n +0001632680 00000 n +0001632806 00000 n +0001632932 00000 n +0001633118 00000 n +0001634330 00000 n +0001634493 00000 n +0001634619 00000 n +0001634745 00000 n +0001634931 00000 n +0001636090 00000 n +0001636262 00000 n +0001636388 00000 n +0001636514 00000 n +0001636640 00000 n +0001636826 00000 n +0001638372 00000 n +0001638526 00000 n +0001638652 00000 n +0001638838 00000 n +0001640015 00000 n +0001640169 00000 n +0001640295 00000 n +0001640481 00000 n +0001641893 00000 n +0001642056 00000 n +0001642182 00000 n +0001642308 00000 n +0001642494 00000 n +0001643707 00000 n +0001643879 00000 n +0001644005 00000 n +0001644131 00000 n +0001644257 00000 n +0001644443 00000 n +0001646529 00000 n +0001646692 00000 n +0001646818 00000 n +0001646944 00000 n +0001647130 00000 n +0001648345 00000 n +0001648508 00000 n +0001648634 00000 n +0001648760 00000 n +0001648946 00000 n +0001650051 00000 n +0001650214 00000 n +0001650340 00000 n +0001650466 00000 n +0001650652 00000 n +0001651757 00000 n +0001651920 00000 n +0001652046 00000 n +0001652172 00000 n +0001652358 00000 n +0001653463 00000 n +0001653617 00000 n +0001653743 00000 n +0001653929 00000 n +0001655170 00000 n +0001655333 00000 n +0001655459 00000 n +0001655585 00000 n +0001655771 00000 n +0001656987 00000 n +0001657159 00000 n +0001657285 00000 n +0001657411 00000 n +0001657537 00000 n +0001657723 00000 n +0001658881 00000 n +0001659044 00000 n +0001659170 00000 n +0001659296 00000 n +0001659482 00000 n +0001660574 00000 n +0001660711 00000 n +0001660842 00000 n +0001661311 00000 n +0001661474 00000 n +0001661600 00000 n +0001661726 00000 n +0001661912 00000 n +0001663144 00000 n +0001663316 00000 n +0001663442 00000 n +0001663568 00000 n +0001663694 00000 n +0001663880 00000 n +0001665004 00000 n +0001665167 00000 n +0001665293 00000 n +0001665419 00000 n +0001665605 00000 n +0001667371 00000 n +0001667543 00000 n +0001667669 00000 n +0001667795 00000 n +0001667921 00000 n +0001668107 00000 n +0001669687 00000 n +0001669850 00000 n +0001669976 00000 n +0001670102 00000 n +0001670288 00000 n +0001671374 00000 n +0001671528 00000 n +0001671654 00000 n +0001671840 00000 n +0001672851 00000 n +0001673041 00000 n +0001673167 00000 n +0001673293 00000 n +0001673419 00000 n +0001673545 00000 n +0001673671 00000 n +0001673857 00000 n +0001675142 00000 n +0001675305 00000 n +0001675431 00000 n +0001675557 00000 n +0001675743 00000 n +0001676988 00000 n +0001677151 00000 n +0001677277 00000 n +0001677403 00000 n +0001677589 00000 n +0001678684 00000 n +0001678847 00000 n +0001678973 00000 n +0001679099 00000 n +0001679285 00000 n +0001680380 00000 n +0001680543 00000 n +0001680669 00000 n +0001680795 00000 n +0001680981 00000 n +0001682076 00000 n +0001682239 00000 n +0001682365 00000 n +0001682491 00000 n +0001682677 00000 n +0001683772 00000 n +0001683926 00000 n +0001684052 00000 n +0001684238 00000 n +0001685451 00000 n +0001685614 00000 n +0001685740 00000 n +0001685866 00000 n +0001686052 00000 n +0001687316 00000 n +0001687479 00000 n +0001687605 00000 n +0001687731 00000 n +0001687917 00000 n +0001689054 00000 n +0001689217 00000 n +0001689343 00000 n +0001689469 00000 n +0001689655 00000 n +0001690849 00000 n +0001691012 00000 n +0001691138 00000 n +0001691264 00000 n +0001691450 00000 n +0001692667 00000 n +0001692857 00000 n +0001692983 00000 n +0001693109 00000 n +0001693235 00000 n +0001693361 00000 n +0001693487 00000 n +0001693673 00000 n +0001694944 00000 n +0001695107 00000 n +0001695233 00000 n +0001695359 00000 n +0001695545 00000 n +0001696692 00000 n +0001696882 00000 n +0001697008 00000 n +0001697134 00000 n +0001697260 00000 n +0001697386 00000 n +0001697512 00000 n +0001697698 00000 n +0001699002 00000 n +0001699174 00000 n +0001699300 00000 n +0001699426 00000 n +0001699552 00000 n +0001699738 00000 n +0001701185 00000 n +0001701357 00000 n +0001701483 00000 n +0001701609 00000 n +0001701735 00000 n +0001701921 00000 n +0001703440 00000 n +0001703594 00000 n +0001703720 00000 n +0001703906 00000 n +0001705036 00000 n +0001705199 00000 n +0001705325 00000 n +0001705451 00000 n +0001705637 00000 n +0001706991 00000 n +0001707145 00000 n +0001707271 00000 n +0001707457 00000 n +0001708919 00000 n +0001709073 00000 n +0001709199 00000 n +0001709385 00000 n +0001710476 00000 n +0001710657 00000 n +0001710783 00000 n +0001710909 00000 n +0001711035 00000 n +0001711161 00000 n +0001711347 00000 n +0001712833 00000 n +0001712987 00000 n +0001713113 00000 n +0001713299 00000 n +0001714748 00000 n +0001714902 00000 n +0001715028 00000 n +0001715214 00000 n +0001716594 00000 n +0001716757 00000 n +0001716883 00000 n +0001717009 00000 n +0001717195 00000 n +0001718487 00000 n +0001718650 00000 n +0001718776 00000 n +0001718902 00000 n +0001719088 00000 n +0001720372 00000 n +0001720526 00000 n +0001720652 00000 n +0001720838 00000 n +0001722003 00000 n +0001722157 00000 n +0001722283 00000 n +0001722469 00000 n +0001723616 00000 n +0001723770 00000 n +0001723896 00000 n +0001724082 00000 n +0001725262 00000 n +0001725425 00000 n +0001725551 00000 n +0001725677 00000 n +0001725863 00000 n +0001727229 00000 n +0001727392 00000 n +0001727518 00000 n +0001727644 00000 n +0001727830 00000 n +0001729127 00000 n +0001729290 00000 n +0001729416 00000 n +0001729542 00000 n +0001729728 00000 n +0001731067 00000 n +0001731239 00000 n +0001731365 00000 n +0001731491 00000 n +0001731617 00000 n +0001731803 00000 n +0001732925 00000 n +0001733097 00000 n +0001733223 00000 n +0001733349 00000 n +0001733475 00000 n +0001733661 00000 n +0001734979 00000 n +0001735151 00000 n +0001735277 00000 n +0001735403 00000 n +0001735529 00000 n +0001735715 00000 n +0001736921 00000 n +0001737093 00000 n +0001737219 00000 n +0001737345 00000 n +0001737471 00000 n +0001737657 00000 n +0001739022 00000 n +0001739194 00000 n +0001739320 00000 n +0001739446 00000 n +0001739572 00000 n +0001739758 00000 n +0001741069 00000 n +0001741241 00000 n +0001741367 00000 n +0001741493 00000 n +0001741619 00000 n +0001741805 00000 n +0001743017 00000 n +0001743180 00000 n +0001743306 00000 n +0001743432 00000 n +0001743618 00000 n +0001744777 00000 n +0001744940 00000 n +0001745066 00000 n +0001745192 00000 n +0001745378 00000 n +0001747097 00000 n +0001747269 00000 n +0001747395 00000 n +0001747521 00000 n +0001747647 00000 n +0001747833 00000 n +0001749381 00000 n +0001749535 00000 n +0001749661 00000 n +0001749847 00000 n +0001751026 00000 n +0001751180 00000 n +0001751306 00000 n +0001751492 00000 n +0001752905 00000 n +0001753068 00000 n +0001753194 00000 n +0001753320 00000 n +0001753506 00000 n +0001754718 00000 n +0001754890 00000 n +0001755016 00000 n +0001755142 00000 n +0001755268 00000 n +0001755454 00000 n +0001757541 00000 n +0001757704 00000 n +0001757830 00000 n +0001757956 00000 n +0001758142 00000 n +0001759365 00000 n +0001759528 00000 n +0001759654 00000 n +0001759780 00000 n +0001759966 00000 n +0001761073 00000 n +0001761236 00000 n +0001761362 00000 n +0001761488 00000 n +0001761674 00000 n +0001762781 00000 n +0001762944 00000 n +0001763070 00000 n +0001763196 00000 n +0001763382 00000 n +0001764489 00000 n +0001764652 00000 n +0001764778 00000 n +0001764904 00000 n +0001765090 00000 n +0001766196 00000 n +0001766350 00000 n +0001766476 00000 n +0001766662 00000 n +0001767905 00000 n +0001768068 00000 n +0001768194 00000 n +0001768320 00000 n +0001768506 00000 n +0001769722 00000 n +0001769885 00000 n +0001770011 00000 n +0001770137 00000 n +0001770323 00000 n +0001771559 00000 n +0001771722 00000 n +0001771848 00000 n +0001771974 00000 n +0001772160 00000 n +0001773459 00000 n +0001773631 00000 n +0001773757 00000 n +0001773883 00000 n +0001774009 00000 n +0001774195 00000 n +0001775354 00000 n +0001775517 00000 n +0001775643 00000 n +0001775769 00000 n +0001775955 00000 n +0001777047 00000 n +0001777184 00000 n +0001777315 00000 n +0001777799 00000 n +0001777962 00000 n +0001778088 00000 n +0001778214 00000 n +0001778400 00000 n +0001779735 00000 n +0001779907 00000 n +0001780033 00000 n +0001780159 00000 n +0001780285 00000 n +0001780471 00000 n +0001782069 00000 n +0001782232 00000 n +0001782358 00000 n +0001782484 00000 n +0001782670 00000 n +0001783811 00000 n +0001784001 00000 n +0001784127 00000 n +0001784253 00000 n +0001784379 00000 n +0001784505 00000 n +0001784631 00000 n +0001784817 00000 n +0001786157 00000 n +0001786320 00000 n +0001786446 00000 n +0001786572 00000 n +0001786758 00000 n +0001788037 00000 n +0001788200 00000 n +0001788326 00000 n +0001788452 00000 n +0001788638 00000 n +0001789792 00000 n +0001789955 00000 n +0001790081 00000 n +0001790207 00000 n +0001790393 00000 n +0001791547 00000 n +0001791710 00000 n +0001791836 00000 n +0001791962 00000 n +0001792148 00000 n +0001793302 00000 n +0001793465 00000 n +0001793591 00000 n +0001793717 00000 n +0001793903 00000 n +0001795055 00000 n +0001795209 00000 n +0001795335 00000 n +0001795521 00000 n +0001796817 00000 n +0001796980 00000 n +0001797106 00000 n +0001797232 00000 n +0001797418 00000 n +0001798701 00000 n +0001798864 00000 n +0001798990 00000 n +0001799116 00000 n +0001799302 00000 n +0001800483 00000 n +0001800646 00000 n +0001800772 00000 n +0001800898 00000 n +0001801084 00000 n +0001802304 00000 n +0001802467 00000 n +0001802593 00000 n +0001802719 00000 n +0001802905 00000 n +0001804224 00000 n +0001804414 00000 n +0001804540 00000 n +0001804666 00000 n +0001804792 00000 n +0001804918 00000 n +0001805044 00000 n +0001805230 00000 n +0001806583 00000 n +0001806746 00000 n +0001806872 00000 n +0001806998 00000 n +0001807184 00000 n +0001808474 00000 n +0001808664 00000 n +0001808790 00000 n +0001808916 00000 n +0001809042 00000 n +0001809168 00000 n +0001809294 00000 n +0001809480 00000 n +0001810822 00000 n +0001810994 00000 n +0001811120 00000 n +0001811246 00000 n +0001811372 00000 n +0001811558 00000 n +0001812972 00000 n +0001813144 00000 n +0001813270 00000 n +0001813396 00000 n +0001813522 00000 n +0001813708 00000 n +0001815248 00000 n +0001815402 00000 n +0001815528 00000 n +0001815714 00000 n +0001816905 00000 n +0001817059 00000 n +0001817185 00000 n +0001817371 00000 n +0001818521 00000 n +0001818684 00000 n +0001818810 00000 n +0001818936 00000 n +0001819122 00000 n +0001820464 00000 n +0001820627 00000 n +0001820753 00000 n +0001820879 00000 n +0001821065 00000 n +0001822370 00000 n +0001822524 00000 n +0001822650 00000 n +0001822836 00000 n +0001824024 00000 n +0001824178 00000 n +0001824304 00000 n +0001824490 00000 n +0001825676 00000 n +0001825830 00000 n +0001825956 00000 n +0001826142 00000 n +0001827333 00000 n +0001827496 00000 n +0001827622 00000 n +0001827748 00000 n +0001827934 00000 n +0001829353 00000 n +0001829516 00000 n +0001829642 00000 n +0001829768 00000 n +0001829954 00000 n +0001831317 00000 n +0001831480 00000 n +0001831606 00000 n +0001831732 00000 n +0001831918 00000 n +0001833288 00000 n +0001833460 00000 n +0001833586 00000 n +0001833712 00000 n +0001833838 00000 n +0001834024 00000 n +0001835222 00000 n +0001835394 00000 n +0001835520 00000 n +0001835646 00000 n +0001835772 00000 n +0001835958 00000 n +0001837352 00000 n +0001837524 00000 n +0001837650 00000 n +0001837776 00000 n +0001837902 00000 n +0001838088 00000 n +0001839410 00000 n +0001839582 00000 n +0001839708 00000 n +0001839834 00000 n +0001839960 00000 n +0001840146 00000 n +0001841544 00000 n +0001841707 00000 n +0001841833 00000 n +0001841959 00000 n +0001842145 00000 n +0001843800 00000 n +0001843972 00000 n +0001844098 00000 n +0001844224 00000 n +0001844350 00000 n +0001844536 00000 n +0001846138 00000 n +0001846292 00000 n +0001846418 00000 n +0001846604 00000 n +0001847885 00000 n +0001848039 00000 n +0001848165 00000 n +0001848351 00000 n +0001849849 00000 n +0001850021 00000 n +0001850147 00000 n +0001850273 00000 n +0001850399 00000 n +0001850585 00000 n +0001852814 00000 n +0001852977 00000 n +0001853103 00000 n +0001853229 00000 n +0001853415 00000 n +0001854699 00000 n +0001854862 00000 n +0001854988 00000 n +0001855114 00000 n +0001855300 00000 n +0001856479 00000 n +0001856642 00000 n +0001856768 00000 n +0001856894 00000 n +0001857080 00000 n +0001858259 00000 n +0001858422 00000 n +0001858548 00000 n +0001858674 00000 n +0001858860 00000 n +0001860038 00000 n +0001860201 00000 n +0001860327 00000 n +0001860453 00000 n +0001860639 00000 n +0001861817 00000 n +0001861971 00000 n +0001862097 00000 n +0001862283 00000 n +0001863573 00000 n +0001863736 00000 n +0001863862 00000 n +0001863988 00000 n +0001864174 00000 n +0001865444 00000 n +0001865607 00000 n +0001865733 00000 n +0001865859 00000 n +0001866045 00000 n +0001867244 00000 n +0001867407 00000 n +0001867533 00000 n +0001867659 00000 n +0001867845 00000 n +0001869088 00000 n +0001869225 00000 n +0001869356 00000 n +0001869811 00000 n +0001869974 00000 n +0001870100 00000 n +0001870226 00000 n +0001870412 00000 n +0001871565 00000 n +0001871737 00000 n +0001871863 00000 n +0001871989 00000 n +0001872115 00000 n +0001872301 00000 n +0001873313 00000 n +0001873485 00000 n +0001873611 00000 n +0001873737 00000 n +0001873863 00000 n +0001874049 00000 n +0001875163 00000 n +0001875335 00000 n +0001875461 00000 n +0001875587 00000 n +0001875713 00000 n +0001875899 00000 n +0001877299 00000 n +0001877471 00000 n +0001877597 00000 n +0001877723 00000 n +0001877849 00000 n +0001878035 00000 n +0001879056 00000 n +0001879219 00000 n +0001879345 00000 n +0001879471 00000 n +0001879657 00000 n +0001880809 00000 n +0001880981 00000 n +0001881107 00000 n +0001881233 00000 n +0001881359 00000 n +0001881545 00000 n +0001882864 00000 n +0001883036 00000 n +0001883162 00000 n +0001883288 00000 n +0001883414 00000 n +0001883600 00000 n +0001884905 00000 n +0001885068 00000 n +0001885194 00000 n +0001885320 00000 n +0001885506 00000 n +0001886528 00000 n +0001886682 00000 n +0001886808 00000 n +0001886994 00000 n +0001887994 00000 n +0001888148 00000 n +0001888274 00000 n +0001888460 00000 n +0001889620 00000 n +0001889774 00000 n +0001889900 00000 n +0001890086 00000 n +0001891041 00000 n +0001891195 00000 n +0001891321 00000 n +0001891507 00000 n +0001892456 00000 n +0001892610 00000 n +0001892736 00000 n +0001892922 00000 n +0001893905 00000 n +0001894059 00000 n +0001894185 00000 n +0001894371 00000 n +0001895306 00000 n +0001895460 00000 n +0001895586 00000 n +0001895772 00000 n +0001896756 00000 n +0001896928 00000 n +0001897054 00000 n +0001897180 00000 n +0001897306 00000 n +0001897492 00000 n +0001898729 00000 n +0001898910 00000 n +0001899036 00000 n +0001899162 00000 n +0001899288 00000 n +0001899414 00000 n +0001899600 00000 n +0001901009 00000 n +0001901163 00000 n +0001901289 00000 n +0001901475 00000 n +0001902524 00000 n +0001902678 00000 n +0001902804 00000 n +0001902990 00000 n +0001904077 00000 n +0001904240 00000 n +0001904366 00000 n +0001904492 00000 n +0001904678 00000 n +0001905762 00000 n +0001905916 00000 n +0001906042 00000 n +0001906228 00000 n +0001907269 00000 n +0001907423 00000 n +0001907549 00000 n +0001907721 00000 n +0001908591 00000 n +0001908745 00000 n +0001908871 00000 n +0001909043 00000 n +0001909914 00000 n +0001910068 00000 n +0001910194 00000 n +0001910366 00000 n +0001911237 00000 n +0001911391 00000 n +0001911517 00000 n +0001911703 00000 n +0001912753 00000 n +0001912925 00000 n +0001913051 00000 n +0001913177 00000 n +0001913303 00000 n +0001913489 00000 n +0001914752 00000 n +0001914906 00000 n +0001915032 00000 n +0001915218 00000 n +0001916252 00000 n +0001916424 00000 n +0001916550 00000 n +0001916676 00000 n +0001916802 00000 n +0001916988 00000 n +0001918261 00000 n +0001918433 00000 n +0001918559 00000 n +0001918685 00000 n +0001918811 00000 n +0001918997 00000 n +0001920167 00000 n +0001920330 00000 n +0001920456 00000 n +0001920582 00000 n +0001920768 00000 n +0001921798 00000 n +0001921961 00000 n +0001922087 00000 n +0001922213 00000 n +0001922399 00000 n +0001923535 00000 n +0001923707 00000 n +0001923833 00000 n +0001923959 00000 n +0001924085 00000 n +0001924271 00000 n +0001925432 00000 n +0001925586 00000 n +0001925712 00000 n +0001925898 00000 n +0001927034 00000 n +0001927188 00000 n +0001927314 00000 n +0001927500 00000 n +0001928826 00000 n +0001928989 00000 n +0001929115 00000 n +0001929241 00000 n +0001929427 00000 n +0001930806 00000 n +0001930978 00000 n +0001931104 00000 n +0001931230 00000 n +0001931356 00000 n +0001931542 00000 n +0001932789 00000 n +0001932952 00000 n +0001933078 00000 n +0001933204 00000 n +0001933390 00000 n +0001934796 00000 n +0001934959 00000 n +0001935085 00000 n +0001935211 00000 n +0001935397 00000 n +0001936486 00000 n +0001936649 00000 n +0001936775 00000 n +0001936901 00000 n +0001937087 00000 n +0001938224 00000 n +0001938396 00000 n +0001938522 00000 n +0001938648 00000 n +0001938774 00000 n +0001938960 00000 n +0001940562 00000 n +0001940716 00000 n +0001940842 00000 n +0001941028 00000 n +0001942234 00000 n +0001942388 00000 n +0001942514 00000 n +0001942700 00000 n +0001943748 00000 n +0001943902 00000 n +0001944028 00000 n +0001944214 00000 n +0001945272 00000 n +0001945426 00000 n +0001945552 00000 n +0001945738 00000 n +0001946783 00000 n +0001946955 00000 n +0001947081 00000 n +0001947207 00000 n +0001947333 00000 n +0001947519 00000 n +0001948950 00000 n +0001949113 00000 n +0001949239 00000 n +0001949365 00000 n +0001949551 00000 n +0001950916 00000 n +0001951133 00000 n +0001951259 00000 n +0001951385 00000 n +0001951511 00000 n +0001951637 00000 n +0001951763 00000 n +0001951889 00000 n +0001952015 00000 n +0001952141 00000 n +0001952327 00000 n +0001953861 00000 n +0001954015 00000 n +0001954141 00000 n +0001954327 00000 n +0001955663 00000 n +0001955844 00000 n +0001955970 00000 n +0001956096 00000 n +0001956222 00000 n +0001956348 00000 n +0001956534 00000 n +0001957864 00000 n +0001958036 00000 n +0001958162 00000 n +0001958288 00000 n +0001958414 00000 n +0001958600 00000 n +0001959666 00000 n +0001959820 00000 n +0001959946 00000 n +0001960132 00000 n +0001961143 00000 n +0001961280 00000 n +0001961411 00000 n +0001961866 00000 n +0001962029 00000 n +0001962155 00000 n +0001962281 00000 n +0001962467 00000 n +0001963620 00000 n +0001963792 00000 n +0001963918 00000 n +0001964044 00000 n +0001964170 00000 n +0001964356 00000 n +0001965368 00000 n +0001965540 00000 n +0001965666 00000 n +0001965792 00000 n +0001965918 00000 n +0001966104 00000 n +0001967506 00000 n +0001967678 00000 n +0001967804 00000 n +0001967930 00000 n +0001968056 00000 n +0001968242 00000 n +0001969549 00000 n +0001969712 00000 n +0001969838 00000 n +0001969964 00000 n +0001970150 00000 n +0001971172 00000 n +0001971326 00000 n +0001971452 00000 n +0001971638 00000 n +0001972638 00000 n +0001972792 00000 n +0001972918 00000 n +0001973104 00000 n +0001974321 00000 n +0001974475 00000 n +0001974601 00000 n +0001974787 00000 n +0001975725 00000 n +0001975879 00000 n +0001976005 00000 n +0001976191 00000 n +0001977147 00000 n +0001977310 00000 n +0001977436 00000 n +0001977562 00000 n +0001977748 00000 n +0001978838 00000 n +0001978992 00000 n +0001979118 00000 n +0001979304 00000 n +0001980254 00000 n +0001980408 00000 n +0001980534 00000 n +0001980720 00000 n +0001981703 00000 n +0001981857 00000 n +0001981983 00000 n +0001982169 00000 n +0001983110 00000 n +0001983264 00000 n +0001983390 00000 n +0001983576 00000 n +0001984560 00000 n +0001984732 00000 n +0001984858 00000 n +0001984984 00000 n +0001985110 00000 n +0001985296 00000 n +0001986533 00000 n +0001986687 00000 n +0001986813 00000 n +0001986999 00000 n +0001988048 00000 n +0001988202 00000 n +0001988328 00000 n +0001988514 00000 n +0001989666 00000 n +0001989829 00000 n +0001989955 00000 n +0001990081 00000 n +0001990267 00000 n +0001991380 00000 n +0001991543 00000 n +0001991669 00000 n +0001991795 00000 n +0001991981 00000 n +0001993069 00000 n +0001993223 00000 n +0001993349 00000 n +0001993535 00000 n +0001994575 00000 n +0001994738 00000 n +0001994864 00000 n +0001994990 00000 n +0001995176 00000 n +0001996295 00000 n +0001996458 00000 n +0001996584 00000 n +0001996710 00000 n +0001996896 00000 n +0001998091 00000 n +0001998245 00000 n +0001998371 00000 n +0001998543 00000 n +0001999418 00000 n +0001999572 00000 n +0001999698 00000 n +0001999870 00000 n +0002000743 00000 n +0002000897 00000 n +0002001023 00000 n +0002001195 00000 n +0002002071 00000 n +0002002225 00000 n +0002002351 00000 n +0002002523 00000 n +0002003399 00000 n +0002003553 00000 n +0002003679 00000 n +0002003865 00000 n +0002004914 00000 n +0002005086 00000 n +0002005212 00000 n +0002005338 00000 n +0002005464 00000 n +0002005650 00000 n +0002006913 00000 n +0002007067 00000 n +0002007193 00000 n +0002007379 00000 n +0002008412 00000 n +0002008584 00000 n +0002008710 00000 n +0002008836 00000 n +0002008962 00000 n +0002009148 00000 n +0002010422 00000 n +0002010594 00000 n +0002010720 00000 n +0002010846 00000 n +0002010972 00000 n +0002011158 00000 n +0002012328 00000 n +0002012491 00000 n +0002012617 00000 n +0002012743 00000 n +0002012929 00000 n +0002013959 00000 n +0002014122 00000 n +0002014248 00000 n +0002014374 00000 n +0002014560 00000 n +0002015696 00000 n +0002015868 00000 n +0002015994 00000 n +0002016120 00000 n +0002016246 00000 n +0002016432 00000 n +0002017594 00000 n +0002017748 00000 n +0002017874 00000 n +0002018060 00000 n +0002019197 00000 n +0002019351 00000 n +0002019477 00000 n +0002019663 00000 n +0002020989 00000 n +0002021152 00000 n +0002021278 00000 n +0002021404 00000 n +0002021590 00000 n +0002022970 00000 n +0002023133 00000 n +0002023259 00000 n +0002023385 00000 n +0002023571 00000 n +0002024978 00000 n +0002025141 00000 n +0002025267 00000 n +0002025393 00000 n +0002025579 00000 n +0002026669 00000 n +0002026832 00000 n +0002026958 00000 n +0002027084 00000 n +0002027270 00000 n +0002028403 00000 n +0002028575 00000 n +0002028701 00000 n +0002028827 00000 n +0002028953 00000 n +0002029139 00000 n +0002030741 00000 n +0002030895 00000 n +0002031021 00000 n +0002031207 00000 n +0002032459 00000 n +0002032613 00000 n +0002032739 00000 n +0002032925 00000 n +0002033977 00000 n +0002034131 00000 n +0002034257 00000 n +0002034443 00000 n +0002035492 00000 n +0002035655 00000 n +0002035781 00000 n +0002035907 00000 n +0002036093 00000 n +0002037240 00000 n +0002037394 00000 n +0002037520 00000 n +0002037706 00000 n +0002038765 00000 n +0002038919 00000 n +0002039045 00000 n +0002039231 00000 n +0002040276 00000 n +0002040448 00000 n +0002040574 00000 n +0002040700 00000 n +0002040826 00000 n +0002041012 00000 n +0002042443 00000 n +0002042606 00000 n +0002042732 00000 n +0002042858 00000 n +0002043044 00000 n +0002044410 00000 n +0002044591 00000 n +0002044717 00000 n +0002044843 00000 n +0002044969 00000 n +0002045095 00000 n +0002045281 00000 n +0002046665 00000 n +0002046837 00000 n +0002046963 00000 n +0002047089 00000 n +0002047215 00000 n +0002047401 00000 n +0002048466 00000 n +0002048620 00000 n +0002048746 00000 n +0002048932 00000 n +0002049944 00000 n +0002050081 00000 n +0002050212 00000 n +0002050661 00000 n +0002050824 00000 n +0002050950 00000 n +0002051076 00000 n +0002051262 00000 n +0002052392 00000 n +0002052564 00000 n +0002052690 00000 n +0002052816 00000 n +0002052942 00000 n +0002053128 00000 n +0002054244 00000 n +0002054416 00000 n +0002054542 00000 n +0002054668 00000 n +0002054794 00000 n +0002054980 00000 n +0002056324 00000 n +0002056487 00000 n +0002056613 00000 n +0002056739 00000 n +0002056925 00000 n +0002057955 00000 n +0002058109 00000 n +0002058235 00000 n +0002058421 00000 n +0002059514 00000 n +0002059677 00000 n +0002059803 00000 n +0002059929 00000 n +0002060115 00000 n +0002061179 00000 n +0002061333 00000 n +0002061459 00000 n +0002061645 00000 n +0002062740 00000 n +0002062912 00000 n +0002063038 00000 n +0002063164 00000 n +0002063290 00000 n +0002063476 00000 n +0002064803 00000 n +0002064957 00000 n +0002065083 00000 n +0002065269 00000 n +0002066275 00000 n +0002066429 00000 n +0002066555 00000 n +0002066741 00000 n +0002067910 00000 n +0002068064 00000 n +0002068190 00000 n +0002068376 00000 n +0002069348 00000 n +0002069502 00000 n +0002069628 00000 n +0002069814 00000 n +0002070772 00000 n +0002070926 00000 n +0002071052 00000 n +0002071238 00000 n +0002072221 00000 n +0002072393 00000 n +0002072519 00000 n +0002072645 00000 n +0002072771 00000 n +0002072957 00000 n +0002074220 00000 n +0002074401 00000 n +0002074527 00000 n +0002074653 00000 n +0002074779 00000 n +0002074905 00000 n +0002075091 00000 n +0002076520 00000 n +0002076674 00000 n +0002076800 00000 n +0002076986 00000 n +0002078037 00000 n +0002078191 00000 n +0002078317 00000 n +0002078503 00000 n +0002079579 00000 n +0002079733 00000 n +0002079859 00000 n +0002080045 00000 n +0002081107 00000 n +0002081270 00000 n +0002081396 00000 n +0002081522 00000 n +0002081708 00000 n +0002082797 00000 n +0002082951 00000 n +0002083077 00000 n +0002083263 00000 n +0002084327 00000 n +0002084499 00000 n +0002084625 00000 n +0002084751 00000 n +0002084877 00000 n +0002085063 00000 n +0002086324 00000 n +0002086478 00000 n +0002086604 00000 n +0002086790 00000 n +0002087827 00000 n +0002087999 00000 n +0002088125 00000 n +0002088251 00000 n +0002088377 00000 n +0002088563 00000 n +0002089846 00000 n +0002090018 00000 n +0002090144 00000 n +0002090270 00000 n +0002090396 00000 n +0002090582 00000 n +0002091751 00000 n +0002091923 00000 n +0002092049 00000 n +0002092175 00000 n +0002092301 00000 n +0002092487 00000 n +0002093708 00000 n +0002093862 00000 n +0002093988 00000 n +0002094174 00000 n +0002095295 00000 n +0002095449 00000 n +0002095575 00000 n +0002095761 00000 n +0002097102 00000 n +0002097265 00000 n +0002097391 00000 n +0002097517 00000 n +0002097703 00000 n +0002098832 00000 n +0002098995 00000 n +0002099121 00000 n +0002099247 00000 n +0002099433 00000 n +0002100852 00000 n +0002101015 00000 n +0002101141 00000 n +0002101267 00000 n +0002101453 00000 n +0002102874 00000 n +0002103037 00000 n +0002103163 00000 n +0002103289 00000 n +0002103475 00000 n +0002104607 00000 n +0002104779 00000 n +0002104905 00000 n +0002105031 00000 n +0002105157 00000 n +0002105343 00000 n +0002106938 00000 n +0002107092 00000 n +0002107218 00000 n +0002107404 00000 n +0002108670 00000 n +0002108824 00000 n +0002108950 00000 n +0002109136 00000 n +0002110200 00000 n +0002110354 00000 n +0002110480 00000 n +0002110666 00000 n +0002111742 00000 n +0002111896 00000 n +0002112022 00000 n +0002112208 00000 n +0002113263 00000 n +0002113426 00000 n +0002113552 00000 n +0002113678 00000 n +0002113864 00000 n +0002115246 00000 n +0002115463 00000 n +0002115589 00000 n +0002115715 00000 n +0002115841 00000 n +0002115967 00000 n +0002116093 00000 n +0002116219 00000 n +0002116345 00000 n +0002116471 00000 n +0002116657 00000 n +0002118187 00000 n +0002118341 00000 n +0002118467 00000 n +0002118653 00000 n +0002120025 00000 n +0002120206 00000 n +0002120332 00000 n +0002120458 00000 n +0002120584 00000 n +0002120710 00000 n +0002120896 00000 n +0002122237 00000 n +0002122409 00000 n +0002122535 00000 n +0002122661 00000 n +0002122787 00000 n +0002122973 00000 n +0002124069 00000 n +0002124241 00000 n +0002124367 00000 n +0002124493 00000 n +0002124619 00000 n +0002124805 00000 n +0002125935 00000 n +0002126089 00000 n +0002126215 00000 n +0002126401 00000 n +0002127413 00000 n +0002127550 00000 n +0002127681 00000 n +0002128134 00000 n +0002128306 00000 n +0002128432 00000 n +0002128558 00000 n +0002128684 00000 n +0002128870 00000 n +0002129868 00000 n +0002130031 00000 n +0002130157 00000 n +0002130283 00000 n +0002130469 00000 n +0002131455 00000 n +0002131618 00000 n +0002131744 00000 n +0002131870 00000 n +0002132056 00000 n +0002133099 00000 n +0002133253 00000 n +0002133379 00000 n +0002133565 00000 n +0002134584 00000 n +0002134738 00000 n +0002134864 00000 n +0002135050 00000 n +0002136263 00000 n +0002136417 00000 n +0002136543 00000 n +0002136729 00000 n +0002137676 00000 n +0002137830 00000 n +0002137956 00000 n +0002138142 00000 n +0002139100 00000 n +0002139263 00000 n +0002139389 00000 n +0002139515 00000 n +0002139701 00000 n +0002140789 00000 n +0002140943 00000 n +0002141069 00000 n +0002141255 00000 n +0002142211 00000 n +0002142365 00000 n +0002142491 00000 n +0002142677 00000 n +0002143651 00000 n +0002143805 00000 n +0002143931 00000 n +0002144117 00000 n +0002145041 00000 n +0002145213 00000 n +0002145339 00000 n +0002145465 00000 n +0002145591 00000 n +0002145777 00000 n +0002146998 00000 n +0002147152 00000 n +0002147278 00000 n +0002147464 00000 n +0002148534 00000 n +0002148688 00000 n +0002148814 00000 n +0002149000 00000 n +0002150198 00000 n +0002150361 00000 n +0002150487 00000 n +0002150613 00000 n +0002150799 00000 n +0002151913 00000 n +0002152067 00000 n +0002152193 00000 n +0002152379 00000 n +0002153438 00000 n +0002153601 00000 n +0002153727 00000 n +0002153853 00000 n +0002154039 00000 n +0002155271 00000 n +0002155434 00000 n +0002155560 00000 n +0002155686 00000 n +0002155872 00000 n +0002157016 00000 n +0002157170 00000 n +0002157296 00000 n +0002157468 00000 n +0002158389 00000 n +0002158561 00000 n +0002158687 00000 n +0002158813 00000 n +0002158939 00000 n +0002159125 00000 n +0002160407 00000 n +0002160570 00000 n +0002160696 00000 n +0002160822 00000 n +0002161008 00000 n +0002162249 00000 n +0002162403 00000 n +0002162529 00000 n +0002162715 00000 n +0002163766 00000 n +0002163920 00000 n +0002164046 00000 n +0002164232 00000 n +0002165319 00000 n +0002165473 00000 n +0002165599 00000 n +0002165785 00000 n +0002166881 00000 n +0002167053 00000 n +0002167179 00000 n +0002167305 00000 n +0002167431 00000 n +0002167617 00000 n +0002168645 00000 n +0002168808 00000 n +0002168934 00000 n +0002169060 00000 n +0002169246 00000 n +0002170280 00000 n +0002170434 00000 n +0002170560 00000 n +0002170746 00000 n +0002171732 00000 n +0002171895 00000 n +0002172021 00000 n +0002172147 00000 n +0002172333 00000 n +0002173485 00000 n +0002173639 00000 n +0002173765 00000 n +0002173951 00000 n +0002174962 00000 n +0002175116 00000 n +0002175242 00000 n +0002175428 00000 n +0002176645 00000 n +0002176817 00000 n +0002176943 00000 n +0002177069 00000 n +0002177195 00000 n +0002177381 00000 n +0002178640 00000 n +0002178803 00000 n +0002178929 00000 n +0002179055 00000 n +0002179241 00000 n +0002180394 00000 n +0002180557 00000 n +0002180683 00000 n +0002180809 00000 n +0002180995 00000 n +0002182111 00000 n +0002182283 00000 n +0002182409 00000 n +0002182535 00000 n +0002182661 00000 n +0002182847 00000 n +0002184482 00000 n +0002184636 00000 n +0002184762 00000 n +0002184948 00000 n +0002186195 00000 n +0002186349 00000 n +0002186475 00000 n +0002186661 00000 n +0002187709 00000 n +0002187863 00000 n +0002187989 00000 n +0002188175 00000 n +0002189239 00000 n +0002189402 00000 n +0002189528 00000 n +0002189654 00000 n +0002189840 00000 n +0002191006 00000 n +0002191160 00000 n +0002191286 00000 n +0002191472 00000 n +0002192527 00000 n +0002192681 00000 n +0002192807 00000 n +0002192993 00000 n +0002194040 00000 n +0002194212 00000 n +0002194338 00000 n +0002194464 00000 n +0002194590 00000 n +0002194776 00000 n +0002196134 00000 n +0002196324 00000 n +0002196450 00000 n +0002196576 00000 n +0002196702 00000 n +0002196828 00000 n +0002196954 00000 n +0002197140 00000 n +0002198404 00000 n +0002198576 00000 n +0002198702 00000 n +0002198828 00000 n +0002198954 00000 n +0002199140 00000 n +0002200206 00000 n +0002200343 00000 n +0002200474 00000 n +0002200928 00000 n +0002201091 00000 n +0002201217 00000 n +0002201343 00000 n +0002201529 00000 n +0002202655 00000 n +0002202827 00000 n +0002202953 00000 n +0002203079 00000 n +0002203205 00000 n +0002203391 00000 n +0002204445 00000 n +0002204617 00000 n +0002204743 00000 n +0002204869 00000 n +0002204995 00000 n +0002205181 00000 n +0002206694 00000 n +0002206848 00000 n +0002206974 00000 n +0002207160 00000 n +0002208151 00000 n +0002208314 00000 n +0002208440 00000 n +0002208566 00000 n +0002208752 00000 n +0002209760 00000 n +0002209923 00000 n +0002210049 00000 n +0002210175 00000 n +0002210361 00000 n +0002211369 00000 n +0002211532 00000 n +0002211658 00000 n +0002211784 00000 n +0002211970 00000 n +0002212978 00000 n +0002213141 00000 n +0002213267 00000 n +0002213393 00000 n +0002213579 00000 n +0002214760 00000 n +0002214914 00000 n +0002215040 00000 n +0002215226 00000 n +0002216436 00000 n +0002216599 00000 n +0002216725 00000 n +0002216851 00000 n +0002217037 00000 n +0002218236 00000 n +0002218399 00000 n +0002218525 00000 n +0002218651 00000 n +0002218837 00000 n +0002219988 00000 n +0002220169 00000 n +0002220295 00000 n +0002220421 00000 n +0002220547 00000 n +0002220673 00000 n +0002220859 00000 n +0002222062 00000 n +0002222225 00000 n +0002222351 00000 n +0002222477 00000 n +0002222663 00000 n +0002223874 00000 n +0002224028 00000 n +0002224154 00000 n +0002224340 00000 n +0002225409 00000 n +0002225563 00000 n +0002225689 00000 n +0002225861 00000 n +0002226874 00000 n +0002227037 00000 n +0002227163 00000 n +0002227289 00000 n +0002227475 00000 n +0002228716 00000 n +0002228879 00000 n +0002229005 00000 n +0002229131 00000 n +0002229317 00000 n +0002230534 00000 n +0002230688 00000 n +0002230814 00000 n +0002231000 00000 n +0002232100 00000 n +0002232254 00000 n +0002232380 00000 n +0002232566 00000 n +0002233644 00000 n +0002233798 00000 n +0002233924 00000 n +0002234110 00000 n +0002235222 00000 n +0002235385 00000 n +0002235511 00000 n +0002235637 00000 n +0002235823 00000 n +0002237116 00000 n +0002237279 00000 n +0002237405 00000 n +0002237531 00000 n +0002237717 00000 n +0002238943 00000 n +0002239115 00000 n +0002239241 00000 n +0002239367 00000 n +0002239493 00000 n +0002239679 00000 n +0002240726 00000 n +0002240898 00000 n +0002241024 00000 n +0002241150 00000 n +0002241276 00000 n +0002241462 00000 n +0002242634 00000 n +0002242806 00000 n +0002242932 00000 n +0002243058 00000 n +0002243184 00000 n +0002243370 00000 n +0002244510 00000 n +0002244673 00000 n +0002244799 00000 n +0002244925 00000 n +0002245111 00000 n +0002246189 00000 n +0002246361 00000 n +0002246487 00000 n +0002246613 00000 n +0002246739 00000 n +0002246925 00000 n +0002248402 00000 n +0002248556 00000 n +0002248682 00000 n +0002248868 00000 n +0002250036 00000 n +0002250190 00000 n +0002250316 00000 n +0002250502 00000 n +0002251900 00000 n +0002252063 00000 n +0002252189 00000 n +0002252315 00000 n +0002252501 00000 n +0002253657 00000 n +0002253829 00000 n +0002253955 00000 n +0002254081 00000 n +0002254207 00000 n +0002254393 00000 n +0002255994 00000 n +0002256157 00000 n +0002256283 00000 n +0002256409 00000 n +0002256595 00000 n +0002257688 00000 n +0002257851 00000 n +0002257977 00000 n +0002258103 00000 n +0002258289 00000 n +0002259382 00000 n +0002259545 00000 n +0002259671 00000 n +0002259797 00000 n +0002259983 00000 n +0002261076 00000 n +0002261239 00000 n +0002261365 00000 n +0002261491 00000 n +0002261677 00000 n +0002262882 00000 n +0002263036 00000 n +0002263162 00000 n +0002263348 00000 n +0002264577 00000 n +0002264740 00000 n +0002264866 00000 n +0002264992 00000 n +0002265178 00000 n +0002266385 00000 n +0002266557 00000 n +0002266683 00000 n +0002266809 00000 n +0002266935 00000 n +0002267121 00000 n +0002268213 00000 n +0002268376 00000 n +0002268502 00000 n +0002268628 00000 n +0002268814 00000 n +0002269831 00000 n +0002269968 00000 n +0002270099 00000 n +0002270553 00000 n +0002270716 00000 n +0002270842 00000 n +0002270968 00000 n +0002271154 00000 n +0002272280 00000 n +0002272452 00000 n +0002272578 00000 n +0002272704 00000 n +0002272830 00000 n +0002273016 00000 n +0002274071 00000 n +0002274234 00000 n +0002274360 00000 n +0002274486 00000 n +0002274672 00000 n +0002276368 00000 n +0002276540 00000 n +0002276666 00000 n +0002276792 00000 n +0002276918 00000 n +0002277104 00000 n +0002278619 00000 n +0002278773 00000 n +0002278899 00000 n +0002279085 00000 n +0002280077 00000 n +0002280240 00000 n +0002280366 00000 n +0002280492 00000 n +0002280678 00000 n +0002281686 00000 n +0002281849 00000 n +0002281975 00000 n +0002282101 00000 n +0002282287 00000 n +0002283295 00000 n +0002283458 00000 n +0002283584 00000 n +0002283710 00000 n +0002283896 00000 n +0002284904 00000 n +0002285067 00000 n +0002285193 00000 n +0002285319 00000 n +0002285505 00000 n +0002286513 00000 n +0002286676 00000 n +0002286802 00000 n +0002286928 00000 n +0002287114 00000 n +0002288296 00000 n +0002288450 00000 n +0002288576 00000 n +0002288762 00000 n +0002289972 00000 n +0002290135 00000 n +0002290261 00000 n +0002290387 00000 n +0002290573 00000 n +0002291772 00000 n +0002291935 00000 n +0002292061 00000 n +0002292187 00000 n +0002292373 00000 n +0002293430 00000 n +0002293593 00000 n +0002293719 00000 n +0002293845 00000 n +0002294031 00000 n +0002295140 00000 n +0002295303 00000 n +0002295429 00000 n +0002295555 00000 n +0002295741 00000 n +0002296895 00000 n +0002297085 00000 n +0002297211 00000 n +0002297337 00000 n +0002297463 00000 n +0002297589 00000 n +0002297715 00000 n +0002297901 00000 n +0002299135 00000 n +0002299307 00000 n +0002299433 00000 n +0002299559 00000 n +0002299685 00000 n +0002299871 00000 n +0002301255 00000 n +0002301427 00000 n +0002301553 00000 n +0002301679 00000 n +0002301805 00000 n +0002301991 00000 n +0002303445 00000 n +0002303599 00000 n +0002303725 00000 n +0002303911 00000 n +0002304979 00000 n +0002305142 00000 n +0002305268 00000 n +0002305394 00000 n +0002305580 00000 n +0002306851 00000 n +0002307005 00000 n +0002307131 00000 n +0002307317 00000 n +0002308730 00000 n +0002308884 00000 n +0002309010 00000 n +0002309182 00000 n +0002310197 00000 n +0002310378 00000 n +0002310504 00000 n +0002310630 00000 n +0002310756 00000 n +0002310882 00000 n +0002311068 00000 n +0002312499 00000 n +0002312653 00000 n +0002312779 00000 n +0002312965 00000 n +0002314360 00000 n +0002314514 00000 n +0002314640 00000 n +0002314826 00000 n +0002316161 00000 n +0002316324 00000 n +0002316450 00000 n +0002316576 00000 n +0002316762 00000 n +0002318003 00000 n +0002318166 00000 n +0002318292 00000 n +0002318418 00000 n +0002318604 00000 n +0002319821 00000 n +0002319975 00000 n +0002320101 00000 n +0002320287 00000 n +0002321386 00000 n +0002321540 00000 n +0002321666 00000 n +0002321852 00000 n +0002322931 00000 n +0002323085 00000 n +0002323211 00000 n +0002323397 00000 n +0002324510 00000 n +0002324673 00000 n +0002324799 00000 n +0002324925 00000 n +0002325111 00000 n +0002326405 00000 n +0002326568 00000 n +0002326694 00000 n +0002326820 00000 n +0002327006 00000 n +0002328238 00000 n +0002328401 00000 n +0002328527 00000 n +0002328653 00000 n +0002328839 00000 n +0002330114 00000 n +0002330286 00000 n +0002330412 00000 n +0002330538 00000 n +0002330664 00000 n +0002330850 00000 n +0002331897 00000 n +0002332069 00000 n +0002332195 00000 n +0002332321 00000 n +0002332447 00000 n +0002332633 00000 n +0002333877 00000 n +0002334049 00000 n +0002334175 00000 n +0002334301 00000 n +0002334427 00000 n +0002334613 00000 n +0002335787 00000 n +0002335959 00000 n +0002336085 00000 n +0002336211 00000 n +0002336337 00000 n +0002336523 00000 n +0002337831 00000 n +0002338003 00000 n +0002338129 00000 n +0002338255 00000 n +0002338381 00000 n +0002338567 00000 n +0002339805 00000 n +0002339977 00000 n +0002340103 00000 n +0002340229 00000 n +0002340355 00000 n +0002340541 00000 n +0002341681 00000 n +0002341844 00000 n +0002341970 00000 n +0002342096 00000 n +0002342282 00000 n +0002343361 00000 n +0002343524 00000 n +0002343650 00000 n +0002343776 00000 n +0002343962 00000 n +0002345603 00000 n +0002345775 00000 n +0002345901 00000 n +0002346027 00000 n +0002346153 00000 n +0002346339 00000 n +0002347817 00000 n +0002347971 00000 n +0002348097 00000 n +0002348283 00000 n +0002349451 00000 n +0002349605 00000 n +0002349731 00000 n +0002349917 00000 n +0002351315 00000 n +0002351478 00000 n +0002351604 00000 n +0002351730 00000 n +0002351916 00000 n +0002353072 00000 n +0002353244 00000 n +0002353370 00000 n +0002353496 00000 n +0002353622 00000 n +0002353808 00000 n +0002355410 00000 n +0002355573 00000 n +0002355699 00000 n +0002355825 00000 n +0002356011 00000 n +0002357106 00000 n +0002357269 00000 n +0002357395 00000 n +0002357521 00000 n +0002357707 00000 n +0002358802 00000 n +0002358965 00000 n +0002359091 00000 n +0002359217 00000 n +0002359403 00000 n +0002360498 00000 n +0002360661 00000 n +0002360787 00000 n +0002360913 00000 n +0002361099 00000 n +0002362193 00000 n +0002362356 00000 n +0002362482 00000 n +0002362608 00000 n +0002362794 00000 n +0002363999 00000 n +0002364153 00000 n +0002364279 00000 n +0002364465 00000 n +0002365692 00000 n +0002365855 00000 n +0002365981 00000 n +0002366107 00000 n +0002366293 00000 n +0002367500 00000 n +0002367663 00000 n +0002367789 00000 n +0002367915 00000 n +0002368101 00000 n +0002369321 00000 n +0002369484 00000 n +0002369610 00000 n +0002369736 00000 n +0002369922 00000 n +0002371202 00000 n +0002371374 00000 n +0002371500 00000 n +0002371626 00000 n +0002371752 00000 n +0002371938 00000 n +0002373029 00000 n +0002373192 00000 n +0002373318 00000 n +0002373444 00000 n +0002373630 00000 n +0002374646 00000 n +0002374783 00000 n +0002374914 00000 n +0002375393 00000 n +0002375556 00000 n +0002375682 00000 n +0002375808 00000 n +0002375994 00000 n +0002377257 00000 n +0002377429 00000 n +0002377555 00000 n +0002377681 00000 n +0002377807 00000 n +0002377993 00000 n +0002379520 00000 n +0002379683 00000 n +0002379809 00000 n +0002379935 00000 n +0002380121 00000 n +0002381195 00000 n +0002381358 00000 n +0002381484 00000 n +0002381610 00000 n +0002381796 00000 n +0002382870 00000 n +0002383033 00000 n +0002383159 00000 n +0002383285 00000 n +0002383471 00000 n +0002384545 00000 n +0002384708 00000 n +0002384834 00000 n +0002384960 00000 n +0002385146 00000 n +0002386219 00000 n +0002386382 00000 n +0002386508 00000 n +0002386634 00000 n +0002386820 00000 n +0002388040 00000 n +0002388194 00000 n +0002388320 00000 n +0002388506 00000 n +0002389797 00000 n +0002389960 00000 n +0002390086 00000 n +0002390212 00000 n +0002390398 00000 n +0002391623 00000 n +0002391786 00000 n +0002391912 00000 n +0002392038 00000 n +0002392224 00000 n +0002393315 00000 n +0002393478 00000 n +0002393604 00000 n +0002393730 00000 n +0002393916 00000 n +0002395045 00000 n +0002395208 00000 n +0002395334 00000 n +0002395460 00000 n +0002395646 00000 n +0002396892 00000 n +0002397082 00000 n +0002397208 00000 n +0002397334 00000 n +0002397460 00000 n +0002397586 00000 n +0002397712 00000 n +0002397898 00000 n +0002399175 00000 n +0002399347 00000 n +0002399473 00000 n +0002399599 00000 n +0002399725 00000 n +0002399911 00000 n +0002401250 00000 n +0002401422 00000 n +0002401548 00000 n +0002401674 00000 n +0002401800 00000 n +0002401986 00000 n +0002403453 00000 n +0002403607 00000 n +0002403733 00000 n +0002403919 00000 n +0002405048 00000 n +0002405202 00000 n +0002405328 00000 n +0002405500 00000 n +0002406576 00000 n +0002406739 00000 n +0002406865 00000 n +0002406991 00000 n +0002407177 00000 n +0002408460 00000 n +0002408623 00000 n +0002408749 00000 n +0002408875 00000 n +0002409061 00000 n +0002410299 00000 n +0002410453 00000 n +0002410579 00000 n +0002410765 00000 n +0002411884 00000 n +0002412038 00000 n +0002412164 00000 n +0002412350 00000 n +0002413467 00000 n +0002413621 00000 n +0002413747 00000 n +0002413933 00000 n +0002415055 00000 n +0002415218 00000 n +0002415344 00000 n +0002415470 00000 n +0002415656 00000 n +0002416998 00000 n +0002417161 00000 n +0002417287 00000 n +0002417413 00000 n +0002417599 00000 n +0002418887 00000 n +0002419050 00000 n +0002419176 00000 n +0002419302 00000 n +0002419488 00000 n +0002420787 00000 n +0002420959 00000 n +0002421085 00000 n +0002421211 00000 n +0002421337 00000 n +0002421523 00000 n +0002422660 00000 n +0002422832 00000 n +0002422958 00000 n +0002423084 00000 n +0002423210 00000 n +0002423396 00000 n +0002424728 00000 n +0002424900 00000 n +0002425026 00000 n +0002425152 00000 n +0002425278 00000 n +0002425464 00000 n +0002426741 00000 n +0002426913 00000 n +0002427039 00000 n +0002427165 00000 n +0002427291 00000 n +0002427477 00000 n +0002428808 00000 n +0002428971 00000 n +0002429097 00000 n +0002429223 00000 n +0002429409 00000 n +0002430981 00000 n +0002431153 00000 n +0002431279 00000 n +0002431405 00000 n +0002431531 00000 n +0002431717 00000 n +0002433243 00000 n +0002433397 00000 n +0002433523 00000 n +0002433709 00000 n +0002434989 00000 n +0002435143 00000 n +0002435269 00000 n +0002435455 00000 n +0002436957 00000 n +0002437129 00000 n +0002437255 00000 n +0002437381 00000 n +0002437507 00000 n +0002437693 00000 n +0002439370 00000 n +0002439533 00000 n +0002439659 00000 n +0002439785 00000 n +0002439971 00000 n +0002441137 00000 n +0002441300 00000 n +0002441426 00000 n +0002441552 00000 n +0002441738 00000 n +0002442905 00000 n +0002443068 00000 n +0002443194 00000 n +0002443320 00000 n +0002443506 00000 n +0002444673 00000 n +0002444836 00000 n +0002444962 00000 n +0002445088 00000 n +0002445274 00000 n +0002446441 00000 n +0002446604 00000 n +0002446730 00000 n +0002446856 00000 n +0002447042 00000 n +0002448323 00000 n +0002448477 00000 n +0002448603 00000 n +0002448789 00000 n +0002450074 00000 n +0002450237 00000 n +0002450363 00000 n +0002450489 00000 n +0002450675 00000 n +0002451943 00000 n +0002452106 00000 n +0002452232 00000 n +0002452358 00000 n +0002452544 00000 n +0002453720 00000 n +0002453883 00000 n +0002454009 00000 n +0002454135 00000 n +0002454321 00000 n +0002455547 00000 n +0002455684 00000 n +0002455815 00000 n +0002456269 00000 n +0002456432 00000 n +0002456558 00000 n +0002456684 00000 n +0002456870 00000 n +0002458024 00000 n +0002458196 00000 n +0002458322 00000 n +0002458448 00000 n +0002458574 00000 n +0002458760 00000 n +0002459775 00000 n +0002459947 00000 n +0002460073 00000 n +0002460199 00000 n +0002460325 00000 n +0002460511 00000 n +0002461632 00000 n +0002461804 00000 n +0002461930 00000 n +0002462056 00000 n +0002462182 00000 n +0002462368 00000 n +0002463758 00000 n +0002463930 00000 n +0002464056 00000 n +0002464182 00000 n +0002464308 00000 n +0002464494 00000 n +0002465519 00000 n +0002465682 00000 n +0002465808 00000 n +0002465934 00000 n +0002466120 00000 n +0002467273 00000 n +0002467445 00000 n +0002467571 00000 n +0002467697 00000 n +0002467823 00000 n +0002468009 00000 n +0002469319 00000 n +0002469491 00000 n +0002469617 00000 n +0002469743 00000 n +0002469869 00000 n +0002470055 00000 n +0002471362 00000 n +0002471525 00000 n +0002471651 00000 n +0002471777 00000 n +0002471963 00000 n +0002472989 00000 n +0002473179 00000 n +0002473305 00000 n +0002473431 00000 n +0002473557 00000 n +0002473683 00000 n +0002473809 00000 n +0002473995 00000 n +0002475206 00000 n +0002475360 00000 n +0002475486 00000 n +0002475672 00000 n +0002476838 00000 n +0002476992 00000 n +0002477118 00000 n +0002477304 00000 n +0002478273 00000 n +0002478427 00000 n +0002478553 00000 n +0002478739 00000 n +0002479701 00000 n +0002479855 00000 n +0002479981 00000 n +0002480167 00000 n +0002481164 00000 n +0002481318 00000 n +0002481444 00000 n +0002481630 00000 n +0002482568 00000 n +0002482722 00000 n +0002482848 00000 n +0002483034 00000 n +0002484024 00000 n +0002484196 00000 n +0002484322 00000 n +0002484448 00000 n +0002484574 00000 n +0002484760 00000 n +0002486001 00000 n +0002486155 00000 n +0002486281 00000 n +0002486467 00000 n +0002487787 00000 n +0002487977 00000 n +0002488103 00000 n +0002488229 00000 n +0002488355 00000 n +0002488481 00000 n +0002488607 00000 n +0002488793 00000 n +0002490007 00000 n +0002490170 00000 n +0002490296 00000 n +0002490422 00000 n +0002490608 00000 n +0002491677 00000 n +0002491831 00000 n +0002491957 00000 n +0002492143 00000 n +0002493240 00000 n +0002493403 00000 n +0002493529 00000 n +0002493655 00000 n +0002493841 00000 n +0002494935 00000 n +0002495089 00000 n +0002495215 00000 n +0002495401 00000 n +0002496443 00000 n +0002496597 00000 n +0002496723 00000 n +0002496895 00000 n +0002497774 00000 n +0002497928 00000 n +0002498054 00000 n +0002498226 00000 n +0002499105 00000 n +0002499259 00000 n +0002499385 00000 n +0002499557 00000 n +0002500434 00000 n +0002500588 00000 n +0002500714 00000 n +0002500900 00000 n +0002501962 00000 n +0002502134 00000 n +0002502260 00000 n +0002502386 00000 n +0002502512 00000 n +0002502698 00000 n +0002503970 00000 n +0002504124 00000 n +0002504250 00000 n +0002504436 00000 n +0002505479 00000 n +0002505651 00000 n +0002505777 00000 n +0002505903 00000 n +0002506029 00000 n +0002506215 00000 n +0002507476 00000 n +0002507648 00000 n +0002507774 00000 n +0002507900 00000 n +0002508026 00000 n +0002508212 00000 n +0002509389 00000 n +0002509552 00000 n +0002509678 00000 n +0002509804 00000 n +0002509990 00000 n +0002511029 00000 n +0002511192 00000 n +0002511318 00000 n +0002511444 00000 n +0002511630 00000 n +0002512773 00000 n +0002512945 00000 n +0002513071 00000 n +0002513197 00000 n +0002513323 00000 n +0002513509 00000 n +0002514683 00000 n +0002514837 00000 n +0002514963 00000 n +0002515149 00000 n +0002516296 00000 n +0002516450 00000 n +0002516576 00000 n +0002516762 00000 n +0002518101 00000 n +0002518264 00000 n +0002518390 00000 n +0002518516 00000 n +0002518702 00000 n +0002520098 00000 n +0002520270 00000 n +0002520396 00000 n +0002520522 00000 n +0002520648 00000 n +0002520834 00000 n +0002522021 00000 n +0002522184 00000 n +0002522310 00000 n +0002522436 00000 n +0002522622 00000 n +0002524032 00000 n +0002524195 00000 n +0002524321 00000 n +0002524447 00000 n +0002524633 00000 n +0002525733 00000 n +0002525896 00000 n +0002526022 00000 n +0002526148 00000 n +0002526334 00000 n +0002527476 00000 n +0002527648 00000 n +0002527774 00000 n +0002527900 00000 n +0002528026 00000 n +0002528212 00000 n +0002530230 00000 n +0002530384 00000 n +0002530510 00000 n +0002530696 00000 n +0002531910 00000 n +0002532064 00000 n +0002532190 00000 n +0002532376 00000 n +0002533437 00000 n +0002533591 00000 n +0002533717 00000 n +0002533903 00000 n +0002534975 00000 n +0002535129 00000 n +0002535255 00000 n +0002535441 00000 n +0002536498 00000 n +0002536670 00000 n +0002536796 00000 n +0002536922 00000 n +0002537048 00000 n +0002537234 00000 n +0002538676 00000 n +0002538839 00000 n +0002538965 00000 n +0002539091 00000 n +0002539277 00000 n +0002540650 00000 n +0002540813 00000 n +0002540939 00000 n +0002541065 00000 n +0002541251 00000 n +0002542768 00000 n +0002542922 00000 n +0002543048 00000 n +0002543234 00000 n +0002544499 00000 n +0002544671 00000 n +0002544797 00000 n +0002544923 00000 n +0002545049 00000 n +0002545235 00000 n +0002546307 00000 n +0002546461 00000 n +0002546587 00000 n +0002546773 00000 n +0002547794 00000 n +0002547931 00000 n +0002548062 00000 n +0002548520 00000 n +0002548683 00000 n +0002548809 00000 n +0002548935 00000 n +0002549121 00000 n +0002550280 00000 n +0002550452 00000 n +0002550578 00000 n +0002550704 00000 n +0002550830 00000 n +0002551016 00000 n +0002552037 00000 n +0002552209 00000 n +0002552335 00000 n +0002552461 00000 n +0002552587 00000 n +0002552773 00000 n +0002554170 00000 n +0002554342 00000 n +0002554468 00000 n +0002554594 00000 n +0002554720 00000 n +0002554906 00000 n +0002556221 00000 n +0002556384 00000 n +0002556510 00000 n +0002556636 00000 n +0002556822 00000 n +0002557856 00000 n +0002558046 00000 n +0002558172 00000 n +0002558298 00000 n +0002558424 00000 n +0002558550 00000 n +0002558676 00000 n +0002558862 00000 n +0002560083 00000 n +0002560237 00000 n +0002560363 00000 n +0002560549 00000 n +0002561779 00000 n +0002561933 00000 n +0002562059 00000 n +0002562245 00000 n +0002563198 00000 n +0002563352 00000 n +0002563478 00000 n +0002563664 00000 n +0002564639 00000 n +0002564802 00000 n +0002564928 00000 n +0002565054 00000 n +0002565240 00000 n +0002566338 00000 n +0002566492 00000 n +0002566618 00000 n +0002566804 00000 n +0002567771 00000 n +0002567925 00000 n +0002568051 00000 n +0002568237 00000 n +0002569238 00000 n +0002569392 00000 n +0002569518 00000 n +0002569704 00000 n +0002570648 00000 n +0002570802 00000 n +0002570928 00000 n +0002571114 00000 n +0002572109 00000 n +0002572281 00000 n +0002572407 00000 n +0002572533 00000 n +0002572659 00000 n +0002572845 00000 n +0002574092 00000 n +0002574282 00000 n +0002574408 00000 n +0002574534 00000 n +0002574660 00000 n +0002574786 00000 n +0002574912 00000 n +0002575098 00000 n +0002576312 00000 n +0002576475 00000 n +0002576601 00000 n +0002576727 00000 n +0002576913 00000 n +0002577982 00000 n +0002578136 00000 n +0002578262 00000 n +0002578448 00000 n +0002579611 00000 n +0002579774 00000 n +0002579900 00000 n +0002580026 00000 n +0002580212 00000 n +0002581335 00000 n +0002581498 00000 n +0002581624 00000 n +0002581750 00000 n +0002581936 00000 n +0002583032 00000 n +0002583186 00000 n +0002583312 00000 n +0002583498 00000 n +0002584540 00000 n +0002584703 00000 n +0002584829 00000 n +0002584955 00000 n +0002585141 00000 n +0002586266 00000 n +0002586429 00000 n +0002586555 00000 n +0002586681 00000 n +0002586867 00000 n +0002588071 00000 n +0002588225 00000 n +0002588351 00000 n +0002588523 00000 n +0002589405 00000 n +0002589559 00000 n +0002589685 00000 n +0002589857 00000 n +0002590738 00000 n +0002590892 00000 n +0002591018 00000 n +0002591190 00000 n +0002592072 00000 n +0002592226 00000 n +0002592352 00000 n +0002592524 00000 n +0002593404 00000 n +0002593558 00000 n +0002593684 00000 n +0002593870 00000 n +0002594931 00000 n +0002595103 00000 n +0002595229 00000 n +0002595355 00000 n +0002595481 00000 n +0002595667 00000 n +0002596939 00000 n +0002597093 00000 n +0002597219 00000 n +0002597405 00000 n +0002598446 00000 n +0002598618 00000 n +0002598744 00000 n +0002598870 00000 n +0002598996 00000 n +0002599182 00000 n +0002600447 00000 n +0002600619 00000 n +0002600745 00000 n +0002600871 00000 n +0002600997 00000 n +0002601183 00000 n +0002602360 00000 n +0002602523 00000 n +0002602649 00000 n +0002602775 00000 n +0002602961 00000 n +0002603998 00000 n +0002604161 00000 n +0002604287 00000 n +0002604413 00000 n +0002604599 00000 n +0002605740 00000 n +0002605912 00000 n +0002606038 00000 n +0002606164 00000 n +0002606290 00000 n +0002606476 00000 n +0002607650 00000 n +0002607804 00000 n +0002607930 00000 n +0002608116 00000 n +0002609262 00000 n +0002609416 00000 n +0002609542 00000 n +0002609728 00000 n +0002611067 00000 n +0002611230 00000 n +0002611356 00000 n +0002611482 00000 n +0002611668 00000 n +0002613060 00000 n +0002613223 00000 n +0002613349 00000 n +0002613475 00000 n +0002613661 00000 n +0002615071 00000 n +0002615234 00000 n +0002615360 00000 n +0002615486 00000 n +0002615672 00000 n +0002616772 00000 n +0002616935 00000 n +0002617061 00000 n +0002617187 00000 n +0002617373 00000 n +0002618515 00000 n +0002618687 00000 n +0002618813 00000 n +0002618939 00000 n +0002619065 00000 n +0002619251 00000 n +0002621269 00000 n +0002621423 00000 n +0002621549 00000 n +0002621735 00000 n +0002622996 00000 n +0002623150 00000 n +0002623276 00000 n +0002623462 00000 n +0002624527 00000 n +0002624681 00000 n +0002624807 00000 n +0002624993 00000 n +0002626055 00000 n +0002626218 00000 n +0002626344 00000 n +0002626470 00000 n +0002626656 00000 n +0002627812 00000 n +0002627966 00000 n +0002628092 00000 n +0002628278 00000 n +0002629351 00000 n +0002629505 00000 n +0002629631 00000 n +0002629817 00000 n +0002630876 00000 n +0002631048 00000 n +0002631174 00000 n +0002631300 00000 n +0002631426 00000 n +0002631612 00000 n +0002633054 00000 n +0002633217 00000 n +0002633343 00000 n +0002633469 00000 n +0002633655 00000 n +0002635027 00000 n +0002635181 00000 n +0002635307 00000 n +0002635493 00000 n +0002636911 00000 n +0002637083 00000 n +0002637209 00000 n +0002637335 00000 n +0002637461 00000 n +0002637647 00000 n +0002638719 00000 n +0002638873 00000 n +0002638999 00000 n +0002639185 00000 n +0002640207 00000 n +0002640344 00000 n +0002640475 00000 n +0002640928 00000 n +0002641091 00000 n +0002641217 00000 n +0002641343 00000 n +0002641529 00000 n +0002642666 00000 n +0002642838 00000 n +0002642964 00000 n +0002643090 00000 n +0002643216 00000 n +0002643402 00000 n +0002644532 00000 n +0002644704 00000 n +0002644830 00000 n +0002644956 00000 n +0002645082 00000 n +0002645268 00000 n +0002646623 00000 n +0002646786 00000 n +0002646912 00000 n +0002647038 00000 n +0002647224 00000 n +0002648273 00000 n +0002648427 00000 n +0002648553 00000 n +0002648739 00000 n +0002649846 00000 n +0002650009 00000 n +0002650135 00000 n +0002650261 00000 n +0002650447 00000 n +0002651523 00000 n +0002651677 00000 n +0002651803 00000 n +0002651989 00000 n +0002653089 00000 n +0002653261 00000 n +0002653387 00000 n +0002653513 00000 n +0002653639 00000 n +0002653825 00000 n +0002655162 00000 n +0002655352 00000 n +0002655478 00000 n +0002655604 00000 n +0002655730 00000 n +0002655856 00000 n +0002655982 00000 n +0002656168 00000 n +0002657439 00000 n +0002657593 00000 n +0002657719 00000 n +0002657905 00000 n +0002659088 00000 n +0002659242 00000 n +0002659368 00000 n +0002659554 00000 n +0002660546 00000 n +0002660700 00000 n +0002660826 00000 n +0002661012 00000 n +0002661984 00000 n +0002662138 00000 n +0002662264 00000 n +0002662450 00000 n +0002663448 00000 n +0002663620 00000 n +0002663746 00000 n +0002663872 00000 n +0002663998 00000 n +0002664184 00000 n +0002665457 00000 n +0002665611 00000 n +0002665737 00000 n +0002665923 00000 n +0002667302 00000 n +0002667492 00000 n +0002667618 00000 n +0002667744 00000 n +0002667870 00000 n +0002667996 00000 n +0002668122 00000 n +0002668308 00000 n +0002669509 00000 n +0002669672 00000 n +0002669798 00000 n +0002669924 00000 n +0002670110 00000 n +0002671185 00000 n +0002671339 00000 n +0002671465 00000 n +0002671651 00000 n +0002672732 00000 n +0002672886 00000 n +0002673012 00000 n +0002673198 00000 n +0002674257 00000 n +0002674420 00000 n +0002674546 00000 n +0002674672 00000 n +0002674858 00000 n +0002675953 00000 n +0002676107 00000 n +0002676233 00000 n +0002676419 00000 n +0002677493 00000 n +0002677665 00000 n +0002677791 00000 n +0002677917 00000 n +0002678043 00000 n +0002678229 00000 n +0002679494 00000 n +0002679648 00000 n +0002679774 00000 n +0002679960 00000 n +0002681009 00000 n +0002681181 00000 n +0002681307 00000 n +0002681433 00000 n +0002681559 00000 n +0002681745 00000 n +0002683021 00000 n +0002683193 00000 n +0002683319 00000 n +0002683445 00000 n +0002683571 00000 n +0002683757 00000 n +0002684929 00000 n +0002685101 00000 n +0002685227 00000 n +0002685353 00000 n +0002685479 00000 n +0002685665 00000 n +0002686901 00000 n +0002687055 00000 n +0002687181 00000 n +0002687367 00000 n +0002688497 00000 n +0002688651 00000 n +0002688777 00000 n +0002688963 00000 n +0002690309 00000 n +0002690472 00000 n +0002690598 00000 n +0002690724 00000 n +0002690910 00000 n +0002692053 00000 n +0002692216 00000 n +0002692342 00000 n +0002692468 00000 n +0002692654 00000 n +0002694083 00000 n +0002694246 00000 n +0002694372 00000 n +0002694498 00000 n +0002694684 00000 n +0002696110 00000 n +0002696273 00000 n +0002696399 00000 n +0002696525 00000 n +0002696711 00000 n +0002697855 00000 n +0002698027 00000 n +0002698153 00000 n +0002698279 00000 n +0002698405 00000 n +0002698591 00000 n +0002700631 00000 n +0002700785 00000 n +0002700911 00000 n +0002701097 00000 n +0002702367 00000 n +0002702521 00000 n +0002702647 00000 n +0002702833 00000 n +0002703905 00000 n +0002704059 00000 n +0002704185 00000 n +0002704371 00000 n +0002705456 00000 n +0002705610 00000 n +0002705736 00000 n +0002705922 00000 n +0002706984 00000 n +0002707147 00000 n +0002707273 00000 n +0002707399 00000 n +0002707585 00000 n +0002708975 00000 n +0002709138 00000 n +0002709264 00000 n +0002709390 00000 n +0002709576 00000 n +0002711101 00000 n +0002711255 00000 n +0002711381 00000 n +0002711567 00000 n +0002712836 00000 n +0002713008 00000 n +0002713134 00000 n +0002713260 00000 n +0002713386 00000 n +0002713572 00000 n +0002714670 00000 n +0002714842 00000 n +0002714968 00000 n +0002715094 00000 n +0002715220 00000 n +0002715406 00000 n +0002716542 00000 n +0002716696 00000 n +0002716822 00000 n +0002717008 00000 n +0002718030 00000 n +0002718167 00000 n +0002718298 00000 n +0002718749 00000 n +0002718921 00000 n +0002719047 00000 n +0002719173 00000 n +0002719299 00000 n +0002719485 00000 n +0002720484 00000 n +0002720647 00000 n +0002720773 00000 n +0002720899 00000 n +0002721085 00000 n +0002722072 00000 n +0002722235 00000 n +0002722361 00000 n +0002722487 00000 n +0002722673 00000 n +0002723724 00000 n +0002723914 00000 n +0002724040 00000 n +0002724166 00000 n +0002724292 00000 n +0002724418 00000 n +0002724544 00000 n +0002724730 00000 n +0002725963 00000 n +0002726117 00000 n +0002726243 00000 n +0002726429 00000 n +0002727648 00000 n +0002727802 00000 n +0002727928 00000 n +0002728114 00000 n +0002729074 00000 n +0002729228 00000 n +0002729354 00000 n +0002729540 00000 n +0002730506 00000 n +0002730669 00000 n +0002730795 00000 n +0002730921 00000 n +0002731107 00000 n +0002732199 00000 n +0002732353 00000 n +0002732479 00000 n +0002732665 00000 n +0002733626 00000 n +0002733780 00000 n +0002733906 00000 n +0002734092 00000 n +0002735078 00000 n +0002735232 00000 n +0002735358 00000 n +0002735544 00000 n +0002736473 00000 n +0002736645 00000 n +0002736771 00000 n +0002736897 00000 n +0002737023 00000 n +0002737209 00000 n +0002738436 00000 n +0002738626 00000 n +0002738752 00000 n +0002738878 00000 n +0002739004 00000 n +0002739130 00000 n +0002739256 00000 n +0002739442 00000 n +0002740637 00000 n +0002740800 00000 n +0002740926 00000 n +0002741052 00000 n +0002741238 00000 n +0002742294 00000 n +0002742448 00000 n +0002742574 00000 n +0002742760 00000 n +0002743963 00000 n +0002744126 00000 n +0002744252 00000 n +0002744378 00000 n +0002744564 00000 n +0002745682 00000 n +0002745836 00000 n +0002745962 00000 n +0002746148 00000 n +0002747210 00000 n +0002747373 00000 n +0002747499 00000 n +0002747625 00000 n +0002747811 00000 n +0002749049 00000 n +0002749212 00000 n +0002749338 00000 n +0002749464 00000 n +0002749650 00000 n +0002750799 00000 n +0002750953 00000 n +0002751079 00000 n +0002751251 00000 n +0002752175 00000 n +0002752347 00000 n +0002752473 00000 n +0002752599 00000 n +0002752725 00000 n +0002752911 00000 n +0002754197 00000 n +0002754360 00000 n +0002754486 00000 n +0002754612 00000 n +0002754798 00000 n +0002756045 00000 n +0002756199 00000 n +0002756325 00000 n +0002756511 00000 n +0002757570 00000 n +0002757724 00000 n +0002757850 00000 n +0002758036 00000 n +0002759130 00000 n +0002759284 00000 n +0002759410 00000 n +0002759596 00000 n +0002760700 00000 n +0002760872 00000 n +0002760998 00000 n +0002761124 00000 n +0002761250 00000 n +0002761436 00000 n +0002762463 00000 n +0002762626 00000 n +0002762752 00000 n +0002762878 00000 n +0002763064 00000 n +0002764099 00000 n +0002764253 00000 n +0002764379 00000 n +0002764565 00000 n +0002765561 00000 n +0002765724 00000 n +0002765850 00000 n +0002765976 00000 n +0002766162 00000 n +0002767317 00000 n +0002767471 00000 n +0002767597 00000 n +0002767783 00000 n +0002768796 00000 n +0002768950 00000 n +0002769076 00000 n +0002769262 00000 n +0002770480 00000 n +0002770652 00000 n +0002770778 00000 n +0002770904 00000 n +0002771030 00000 n +0002771216 00000 n +0002772478 00000 n +0002772641 00000 n +0002772767 00000 n +0002772893 00000 n +0002773079 00000 n +0002774225 00000 n +0002774388 00000 n +0002774514 00000 n +0002774640 00000 n +0002774826 00000 n +0002775935 00000 n +0002776107 00000 n +0002776233 00000 n +0002776359 00000 n +0002776485 00000 n +0002776671 00000 n +0002778627 00000 n +0002778781 00000 n +0002778907 00000 n +0002779093 00000 n +0002780347 00000 n +0002780501 00000 n +0002780627 00000 n +0002780813 00000 n +0002781866 00000 n +0002782020 00000 n +0002782146 00000 n +0002782332 00000 n +0002783397 00000 n +0002783560 00000 n +0002783686 00000 n +0002783812 00000 n +0002783998 00000 n +0002785162 00000 n +0002785316 00000 n +0002785442 00000 n +0002785628 00000 n +0002786685 00000 n +0002786839 00000 n +0002786965 00000 n +0002787151 00000 n +0002788201 00000 n +0002788373 00000 n +0002788499 00000 n +0002788625 00000 n +0002788751 00000 n +0002788937 00000 n +0002790299 00000 n +0002790489 00000 n +0002790615 00000 n +0002790741 00000 n +0002790867 00000 n +0002790993 00000 n +0002791119 00000 n +0002791305 00000 n +0002792567 00000 n +0002792739 00000 n +0002792865 00000 n +0002792991 00000 n +0002793117 00000 n +0002793303 00000 n +0002794371 00000 n +0002794508 00000 n +0002794639 00000 n +0002795091 00000 n +0002795254 00000 n +0002795380 00000 n +0002795506 00000 n +0002795692 00000 n +0002796819 00000 n +0002796991 00000 n +0002797117 00000 n +0002797243 00000 n +0002797369 00000 n +0002797555 00000 n +0002798612 00000 n +0002798784 00000 n +0002798910 00000 n +0002799036 00000 n +0002799162 00000 n +0002799348 00000 n +0002800861 00000 n +0002801015 00000 n +0002801141 00000 n +0002801327 00000 n +0002802330 00000 n +0002802520 00000 n +0002802646 00000 n +0002802772 00000 n +0002802898 00000 n +0002803024 00000 n +0002803150 00000 n +0002803336 00000 n +0002804603 00000 n +0002804766 00000 n +0002804892 00000 n +0002805018 00000 n +0002805204 00000 n +0002806212 00000 n +0002806375 00000 n +0002806501 00000 n +0002806627 00000 n +0002806813 00000 n +0002807821 00000 n +0002807984 00000 n +0002808110 00000 n +0002808236 00000 n +0002808422 00000 n +0002809430 00000 n +0002809593 00000 n +0002809719 00000 n +0002809845 00000 n +0002810031 00000 n +0002811212 00000 n +0002811366 00000 n +0002811492 00000 n +0002811678 00000 n +0002812892 00000 n +0002813055 00000 n +0002813181 00000 n +0002813307 00000 n +0002813493 00000 n +0002814689 00000 n +0002814852 00000 n +0002814978 00000 n +0002815104 00000 n +0002815290 00000 n +0002816440 00000 n +0002816630 00000 n +0002816756 00000 n +0002816882 00000 n +0002817008 00000 n +0002817134 00000 n +0002817260 00000 n +0002817446 00000 n +0002818657 00000 n +0002818820 00000 n +0002818946 00000 n +0002819072 00000 n +0002819258 00000 n +0002820336 00000 n +0002820517 00000 n +0002820643 00000 n +0002820769 00000 n +0002820895 00000 n +0002821021 00000 n +0002821207 00000 n +0002822412 00000 n +0002822575 00000 n +0002822701 00000 n +0002822827 00000 n +0002823013 00000 n +0002824227 00000 n +0002824381 00000 n +0002824507 00000 n +0002824693 00000 n +0002825769 00000 n +0002825923 00000 n +0002826049 00000 n +0002826221 00000 n +0002827238 00000 n +0002827401 00000 n +0002827527 00000 n +0002827653 00000 n +0002827839 00000 n +0002829084 00000 n +0002829247 00000 n +0002829373 00000 n +0002829499 00000 n +0002829685 00000 n +0002830903 00000 n +0002831057 00000 n +0002831183 00000 n +0002831369 00000 n +0002832474 00000 n +0002832628 00000 n +0002832754 00000 n +0002832940 00000 n +0002834026 00000 n +0002834180 00000 n +0002834306 00000 n +0002834492 00000 n +0002835608 00000 n +0002835771 00000 n +0002835897 00000 n +0002836023 00000 n +0002836209 00000 n +0002837502 00000 n +0002837665 00000 n +0002837791 00000 n +0002837917 00000 n +0002838103 00000 n +0002839333 00000 n +0002839505 00000 n +0002839631 00000 n +0002839757 00000 n +0002839883 00000 n +0002840069 00000 n +0002841117 00000 n +0002841289 00000 n +0002841415 00000 n +0002841541 00000 n +0002841667 00000 n +0002841853 00000 n +0002843027 00000 n +0002843199 00000 n +0002843325 00000 n +0002843451 00000 n +0002843577 00000 n +0002843763 00000 n +0002844906 00000 n +0002845069 00000 n +0002845195 00000 n +0002845321 00000 n +0002845507 00000 n +0002846591 00000 n +0002846763 00000 n +0002846889 00000 n +0002847015 00000 n +0002847141 00000 n +0002847327 00000 n +0002848805 00000 n +0002848959 00000 n +0002849085 00000 n +0002849271 00000 n +0002850442 00000 n +0002850596 00000 n +0002850722 00000 n +0002850908 00000 n +0002852315 00000 n +0002852478 00000 n +0002852604 00000 n +0002852730 00000 n +0002852916 00000 n +0002854083 00000 n +0002854255 00000 n +0002854381 00000 n +0002854507 00000 n +0002854633 00000 n +0002854819 00000 n +0002856848 00000 n +0002857011 00000 n +0002857137 00000 n +0002857263 00000 n +0002857449 00000 n +0002858540 00000 n +0002858703 00000 n +0002858829 00000 n +0002858955 00000 n +0002859141 00000 n +0002860232 00000 n +0002860395 00000 n +0002860521 00000 n +0002860647 00000 n +0002860833 00000 n +0002861924 00000 n +0002862087 00000 n +0002862213 00000 n +0002862339 00000 n +0002862525 00000 n +0002863733 00000 n +0002863887 00000 n +0002864013 00000 n +0002864199 00000 n +0002865437 00000 n +0002865600 00000 n +0002865726 00000 n +0002865852 00000 n +0002866038 00000 n +0002867246 00000 n +0002867418 00000 n +0002867544 00000 n +0002867670 00000 n +0002867796 00000 n +0002867982 00000 n +0002869073 00000 n +0002869236 00000 n +0002869362 00000 n +0002869488 00000 n +0002869674 00000 n +0002870691 00000 n +0002870828 00000 n +0002870959 00000 n +0002871410 00000 n +0002871573 00000 n +0002871699 00000 n +0002871825 00000 n +0002872011 00000 n +0002873138 00000 n +0002873310 00000 n +0002873436 00000 n +0002873562 00000 n +0002873688 00000 n +0002873874 00000 n +0002874931 00000 n +0002875094 00000 n +0002875220 00000 n +0002875346 00000 n +0002875532 00000 n +0002877228 00000 n +0002877400 00000 n +0002877526 00000 n +0002877652 00000 n +0002877778 00000 n +0002877964 00000 n +0002879478 00000 n +0002879632 00000 n +0002879758 00000 n +0002879944 00000 n +0002880948 00000 n +0002881138 00000 n +0002881264 00000 n +0002881390 00000 n +0002881516 00000 n +0002881642 00000 n +0002881768 00000 n +0002881954 00000 n +0002883221 00000 n +0002883384 00000 n +0002883510 00000 n +0002883636 00000 n +0002883822 00000 n +0002884830 00000 n +0002884993 00000 n +0002885119 00000 n +0002885245 00000 n +0002885431 00000 n +0002886439 00000 n +0002886602 00000 n +0002886728 00000 n +0002886854 00000 n +0002887040 00000 n +0002888048 00000 n +0002888211 00000 n +0002888337 00000 n +0002888463 00000 n +0002888649 00000 n +0002889657 00000 n +0002889820 00000 n +0002889946 00000 n +0002890072 00000 n +0002890258 00000 n +0002891439 00000 n +0002891593 00000 n +0002891719 00000 n +0002891905 00000 n +0002893119 00000 n +0002893282 00000 n +0002893408 00000 n +0002893534 00000 n +0002893720 00000 n +0002894917 00000 n +0002895080 00000 n +0002895206 00000 n +0002895332 00000 n +0002895518 00000 n +0002896576 00000 n +0002896739 00000 n +0002896865 00000 n +0002896991 00000 n +0002897177 00000 n +0002898289 00000 n +0002898452 00000 n +0002898578 00000 n +0002898704 00000 n +0002898890 00000 n +0002900040 00000 n +0002900230 00000 n +0002900356 00000 n +0002900482 00000 n +0002900608 00000 n +0002900734 00000 n +0002900860 00000 n +0002901046 00000 n +0002902257 00000 n +0002902420 00000 n +0002902546 00000 n +0002902672 00000 n +0002902858 00000 n +0002903936 00000 n +0002904126 00000 n +0002904252 00000 n +0002904378 00000 n +0002904504 00000 n +0002904630 00000 n +0002904756 00000 n +0002904942 00000 n +0002906176 00000 n +0002906348 00000 n +0002906474 00000 n +0002906600 00000 n +0002906726 00000 n +0002906912 00000 n +0002908298 00000 n +0002908470 00000 n +0002908596 00000 n +0002908722 00000 n +0002908848 00000 n +0002909034 00000 n +0002910489 00000 n +0002910643 00000 n +0002910769 00000 n +0002910955 00000 n +0002912031 00000 n +0002912194 00000 n +0002912320 00000 n +0002912446 00000 n +0002912632 00000 n +0002913910 00000 n +0002914064 00000 n +0002914190 00000 n +0002914376 00000 n +0002915791 00000 n +0002915945 00000 n +0002916071 00000 n +0002916243 00000 n +0002917261 00000 n +0002917442 00000 n +0002917568 00000 n +0002917694 00000 n +0002917820 00000 n +0002917946 00000 n +0002918132 00000 n +0002919573 00000 n +0002919727 00000 n +0002919853 00000 n +0002920039 00000 n +0002921446 00000 n +0002921600 00000 n +0002921726 00000 n +0002921912 00000 n +0002923258 00000 n +0002923421 00000 n +0002923547 00000 n +0002923673 00000 n +0002923859 00000 n +0002925105 00000 n +0002925268 00000 n +0002925394 00000 n +0002925520 00000 n +0002925706 00000 n +0002926924 00000 n +0002927078 00000 n +0002927204 00000 n +0002927390 00000 n +0002928496 00000 n +0002928650 00000 n +0002928776 00000 n +0002928962 00000 n +0002930050 00000 n +0002930204 00000 n +0002930330 00000 n +0002930516 00000 n +0002931632 00000 n +0002931795 00000 n +0002931921 00000 n +0002932047 00000 n +0002932233 00000 n +0002933527 00000 n +0002933690 00000 n +0002933816 00000 n +0002933942 00000 n +0002934128 00000 n +0002935358 00000 n +0002935521 00000 n +0002935647 00000 n +0002935773 00000 n +0002935959 00000 n +0002937231 00000 n +0002937403 00000 n +0002937529 00000 n +0002937655 00000 n +0002937781 00000 n +0002937967 00000 n +0002939016 00000 n +0002939188 00000 n +0002939314 00000 n +0002939440 00000 n +0002939566 00000 n +0002939752 00000 n +0002941003 00000 n +0002941175 00000 n +0002941301 00000 n +0002941427 00000 n +0002941553 00000 n +0002941739 00000 n +0002942914 00000 n +0002943086 00000 n +0002943212 00000 n +0002943338 00000 n +0002943464 00000 n +0002943650 00000 n +0002944963 00000 n +0002945135 00000 n +0002945261 00000 n +0002945387 00000 n +0002945513 00000 n +0002945699 00000 n +0002946941 00000 n +0002947113 00000 n +0002947239 00000 n +0002947365 00000 n +0002947491 00000 n +0002947677 00000 n +0002948821 00000 n +0002948984 00000 n +0002949110 00000 n +0002949236 00000 n +0002949422 00000 n +0002950505 00000 n +0002950668 00000 n +0002950794 00000 n +0002950920 00000 n +0002951106 00000 n +0002952750 00000 n +0002952922 00000 n +0002953048 00000 n +0002953174 00000 n +0002953300 00000 n +0002953486 00000 n +0002954965 00000 n +0002955119 00000 n +0002955245 00000 n +0002955431 00000 n +0002956603 00000 n +0002956757 00000 n +0002956883 00000 n +0002957069 00000 n +0002958476 00000 n +0002958639 00000 n +0002958765 00000 n +0002958891 00000 n +0002959077 00000 n +0002960245 00000 n +0002960417 00000 n +0002960543 00000 n +0002960669 00000 n +0002960795 00000 n +0002960981 00000 n +0002963007 00000 n +0002963170 00000 n +0002963296 00000 n +0002963422 00000 n +0002963608 00000 n +0002964701 00000 n +0002964864 00000 n +0002964990 00000 n +0002965116 00000 n +0002965302 00000 n +0002966395 00000 n +0002966558 00000 n +0002966684 00000 n +0002966810 00000 n +0002966996 00000 n +0002968089 00000 n +0002968252 00000 n +0002968378 00000 n +0002968504 00000 n +0002968690 00000 n +0002969782 00000 n +0002969945 00000 n +0002970071 00000 n +0002970197 00000 n +0002970383 00000 n +0002971592 00000 n +0002971746 00000 n +0002971872 00000 n +0002972058 00000 n +0002973298 00000 n +0002973461 00000 n +0002973587 00000 n +0002973713 00000 n +0002973899 00000 n +0002975107 00000 n +0002975270 00000 n +0002975396 00000 n +0002975522 00000 n +0002975708 00000 n +0002976933 00000 n +0002977096 00000 n +0002977222 00000 n +0002977348 00000 n +0002977534 00000 n +0002978819 00000 n +0002978991 00000 n +0002979117 00000 n +0002979243 00000 n +0002979369 00000 n +0002979555 00000 n +0002980647 00000 n +0002980810 00000 n +0002980936 00000 n +0002981062 00000 n +0002981248 00000 n +0002982265 00000 n +0002982402 00000 n +0002982533 00000 n +0002983012 00000 n +0002983175 00000 n +0002983301 00000 n +0002983427 00000 n +0002983613 00000 n +0002984885 00000 n +0002985057 00000 n +0002985183 00000 n +0002985309 00000 n +0002985435 00000 n +0002985621 00000 n +0002987153 00000 n +0002987343 00000 n +0002987469 00000 n +0002987595 00000 n +0002987721 00000 n +0002987847 00000 n +0002987973 00000 n +0002988159 00000 n +0002989486 00000 n +0002989649 00000 n +0002989775 00000 n +0002989901 00000 n +0002990087 00000 n +0002991165 00000 n +0002991328 00000 n +0002991454 00000 n +0002991580 00000 n +0002991766 00000 n +0002992844 00000 n +0002993007 00000 n +0002993133 00000 n +0002993259 00000 n +0002993445 00000 n +0002994523 00000 n +0002994686 00000 n +0002994812 00000 n +0002994938 00000 n +0002995124 00000 n +0002996201 00000 n +0002996364 00000 n +0002996490 00000 n +0002996616 00000 n +0002996802 00000 n +0002998025 00000 n +0002998179 00000 n +0002998305 00000 n +0002998491 00000 n +0002999799 00000 n +0002999962 00000 n +0003000088 00000 n +0003000214 00000 n +0003000400 00000 n +0003001633 00000 n +0003001796 00000 n +0003001922 00000 n +0003002048 00000 n +0003002234 00000 n +0003003345 00000 n +0003003508 00000 n +0003003634 00000 n +0003003760 00000 n +0003003946 00000 n +0003005080 00000 n +0003005243 00000 n +0003005369 00000 n +0003005495 00000 n +0003005681 00000 n +0003006935 00000 n +0003007125 00000 n +0003007251 00000 n +0003007377 00000 n +0003007503 00000 n +0003007629 00000 n +0003007755 00000 n +0003007941 00000 n +0003009237 00000 n +0003009400 00000 n +0003009526 00000 n +0003009652 00000 n +0003009838 00000 n +0003011057 00000 n +0003011247 00000 n +0003011373 00000 n +0003011499 00000 n +0003011625 00000 n +0003011751 00000 n +0003011877 00000 n +0003012063 00000 n +0003013346 00000 n +0003013518 00000 n +0003013644 00000 n +0003013770 00000 n +0003013896 00000 n +0003014082 00000 n +0003015428 00000 n +0003015600 00000 n +0003015726 00000 n +0003015852 00000 n +0003015978 00000 n +0003016164 00000 n +0003017638 00000 n +0003017792 00000 n +0003017918 00000 n +0003018104 00000 n +0003019239 00000 n +0003019393 00000 n +0003019519 00000 n +0003019691 00000 n +0003020768 00000 n +0003020931 00000 n +0003021057 00000 n +0003021183 00000 n +0003021369 00000 n +0003022664 00000 n +0003022827 00000 n +0003022953 00000 n +0003023079 00000 n +0003023265 00000 n +0003024509 00000 n +0003024663 00000 n +0003024789 00000 n +0003024975 00000 n +0003026103 00000 n +0003026257 00000 n +0003026383 00000 n +0003026569 00000 n +0003027695 00000 n +0003027849 00000 n +0003027975 00000 n +0003028161 00000 n +0003029291 00000 n +0003029454 00000 n +0003029580 00000 n +0003029706 00000 n +0003029892 00000 n +0003031239 00000 n +0003031402 00000 n +0003031528 00000 n +0003031654 00000 n +0003031840 00000 n +0003033133 00000 n +0003033296 00000 n +0003033422 00000 n +0003033548 00000 n +0003033734 00000 n +0003035030 00000 n +0003035202 00000 n +0003035328 00000 n +0003035454 00000 n +0003035580 00000 n +0003035766 00000 n +0003036902 00000 n +0003037074 00000 n +0003037200 00000 n +0003037326 00000 n +0003037452 00000 n +0003037638 00000 n +0003038978 00000 n +0003039150 00000 n +0003039276 00000 n +0003039402 00000 n +0003039528 00000 n +0003039714 00000 n +0003040992 00000 n +0003041164 00000 n +0003041290 00000 n +0003041416 00000 n +0003041542 00000 n +0003041728 00000 n +0003043057 00000 n +0003043220 00000 n +0003043346 00000 n +0003043472 00000 n +0003043658 00000 n +0003045238 00000 n +0003045410 00000 n +0003045536 00000 n +0003045662 00000 n +0003045788 00000 n +0003045974 00000 n +0003047508 00000 n +0003047662 00000 n +0003047788 00000 n +0003047974 00000 n +0003049253 00000 n +0003049407 00000 n +0003049533 00000 n +0003049719 00000 n +0003051221 00000 n +0003051393 00000 n +0003051519 00000 n +0003051645 00000 n +0003051771 00000 n +0003051957 00000 n +0003054108 00000 n +0003054271 00000 n +0003054397 00000 n +0003054523 00000 n +0003054709 00000 n +0003055877 00000 n +0003056040 00000 n +0003056166 00000 n +0003056292 00000 n +0003056478 00000 n +0003057646 00000 n +0003057809 00000 n +0003057935 00000 n +0003058061 00000 n +0003058247 00000 n +0003059415 00000 n +0003059578 00000 n +0003059704 00000 n +0003059830 00000 n +0003060016 00000 n +0003061183 00000 n +0003061346 00000 n +0003061472 00000 n +0003061598 00000 n +0003061784 00000 n +0003063069 00000 n +0003063223 00000 n +0003063349 00000 n +0003063535 00000 n +0003064822 00000 n +0003064985 00000 n +0003065111 00000 n +0003065237 00000 n +0003065423 00000 n +0003066696 00000 n +0003066859 00000 n +0003066985 00000 n +0003067111 00000 n +0003067297 00000 n +0003068487 00000 n +0003068650 00000 n +0003068776 00000 n +0003068902 00000 n +0003069088 00000 n +0003070320 00000 n +0003072991 00000 n +0003073029 00000 n +0003073198 00000 n +0003086322 00000 n +0003086589 00000 n +0003087026 00000 n +0003087294 00000 n +0003109099 00000 n +0003109359 00000 n +0003138138 00000 n +0003138414 00000 n +0003138872 00000 n +0003139302 00000 n +0003172743 00000 n +0003172782 00000 n +0003172808 00000 n +0003172876 00000 n +0003173032 00000 n +0003173187 00000 n +0003173328 00000 n +0003173472 00000 n +0003173625 00000 n +0003173779 00000 n +0003173933 00000 n +0003174087 00000 n +0003174241 00000 n +0003174395 00000 n +0003174549 00000 n +0003174703 00000 n +0003174858 00000 n +0003175012 00000 n +0003175166 00000 n +0003175320 00000 n +0003175474 00000 n +0003175628 00000 n +0003175782 00000 n +0003175936 00000 n +0003176090 00000 n +0003176244 00000 n +0003176398 00000 n +0003176553 00000 n +0003176707 00000 n +0003176861 00000 n +0003177015 00000 n +0003177169 00000 n +0003177323 00000 n +0003177477 00000 n +0003177631 00000 n +0003177785 00000 n +0003177939 00000 n +0003178093 00000 n +0003178248 00000 n +0003178402 00000 n +0003178556 00000 n +0003178710 00000 n +0003178864 00000 n +0003179018 00000 n +0003179172 00000 n +0003179326 00000 n +0003179480 00000 n +0003179634 00000 n +0003179788 00000 n +0003179943 00000 n +0003180097 00000 n +0003180251 00000 n +0003180405 00000 n +0003180559 00000 n +0003180713 00000 n +0003180867 00000 n +0003181021 00000 n +0003181175 00000 n +0003181329 00000 n +0003181483 00000 n +0003181638 00000 n +0003181792 00000 n +0003181946 00000 n +0003182100 00000 n +0003182254 00000 n +0003182408 00000 n +0003182562 00000 n +0003182716 00000 n +0003182870 00000 n +0003183024 00000 n +0003183178 00000 n +0003183333 00000 n +0003183487 00000 n +0003183641 00000 n +0003183795 00000 n +0003183949 00000 n +0003184103 00000 n +0003184257 00000 n +0003184411 00000 n +0003184565 00000 n +0003184719 00000 n +0003184873 00000 n +0003185028 00000 n +0003185182 00000 n +0003185336 00000 n +0003185490 00000 n +0003185644 00000 n +0003185798 00000 n +0003185952 00000 n +0003186106 00000 n +0003186260 00000 n +0003186414 00000 n +0003186568 00000 n +0003186723 00000 n +0003186877 00000 n +0003187031 00000 n +0003187185 00000 n +0003187339 00000 n +0003187493 00000 n +0003187647 00000 n +0003187801 00000 n +0003187955 00000 n +0003188109 00000 n +0003188263 00000 n +0003188418 00000 n +0003188572 00000 n +0003188726 00000 n +0003188880 00000 n +0003189034 00000 n +0003189188 00000 n +0003189342 00000 n +0003189496 00000 n +0003189650 00000 n +0003189804 00000 n +0003189958 00000 n +0003190068 00000 n +0003190223 00000 n +0003190377 00000 n +0003190531 00000 n +0003190685 00000 n +0003190839 00000 n +0003190993 00000 n +0003191147 00000 n +0003191301 00000 n +0003191455 00000 n +0003191609 00000 n +0003191763 00000 n +0003191918 00000 n +0003192072 00000 n +0003192226 00000 n +0003192380 00000 n +0003192534 00000 n +0003192688 00000 n +0003192842 00000 n +0003192996 00000 n +0003193150 00000 n +0003193304 00000 n +0003193458 00000 n +0003193613 00000 n +0003193767 00000 n +0003193921 00000 n +0003194075 00000 n +0003194229 00000 n +0003194383 00000 n +0003194537 00000 n +0003194691 00000 n +0003194845 00000 n +0003194999 00000 n +0003195153 00000 n +0003195308 00000 n +0003195462 00000 n +0003195616 00000 n +0003195770 00000 n +0003195924 00000 n +0003196078 00000 n +0003196232 00000 n +0003196386 00000 n +0003196540 00000 n +0003196694 00000 n +0003196848 00000 n +0003196939 00000 n +0003197093 00000 n +0003197247 00000 n +0003197373 00000 n +0003201013 00000 n +trailer +<> +startxref +116 +%%EOF diff --git a/Extras/vectormathlibrary/doc/Vector_Math_Library_Cpp_PPU-Reference.pdf b/Extras/vectormathlibrary/doc/Vector_Math_Library_Cpp_PPU-Reference.pdf new file mode 100644 index 000000000..5566be503 --- /dev/null +++ b/Extras/vectormathlibrary/doc/Vector_Math_Library_Cpp_PPU-Reference.pdf @@ -0,0 +1,14843 @@ +%PDF-1.5 % +6312 0 obj<> endobj +xref +6312 1022 +0000000016 00000 n +0000026720 00000 n +0000026858 00000 n +0000021163 00000 n +0000026985 00000 n +0000027122 00000 n +0000027238 00000 n +0000027719 00000 n +0000027974 00000 n +0000028052 00000 n +0000028454 00000 n +0000029034 00000 n +0000029284 00000 n +0000029787 00000 n +0000030045 00000 n +0000058858 00000 n +0000091595 00000 n +0000119036 00000 n +0000119096 00000 n +0000119287 00000 n +0000119441 00000 n +0000119619 00000 n +0000119763 00000 n +0000119942 00000 n +0000120134 00000 n +0000120278 00000 n +0000120454 00000 n +0000120653 00000 n +0000120797 00000 n +0000120974 00000 n +0000121160 00000 n +0000121304 00000 n +0000121481 00000 n +0000121672 00000 n +0000121816 00000 n +0000121993 00000 n +0000122187 00000 n +0000122331 00000 n +0000122508 00000 n +0000122701 00000 n +0000122845 00000 n +0000123023 00000 n +0000123199 00000 n +0000123343 00000 n +0000123544 00000 n +0000123738 00000 n +0000123882 00000 n +0000124061 00000 n +0000124256 00000 n +0000124400 00000 n +0000124578 00000 n +0000124778 00000 n +0000124922 00000 n +0000125101 00000 n +0000125287 00000 n +0000125432 00000 n +0000125609 00000 n +0000125800 00000 n +0000125944 00000 n +0000126123 00000 n +0000126319 00000 n +0000126464 00000 n +0000126641 00000 n +0000126834 00000 n +0000126978 00000 n +0000127155 00000 n +0000127329 00000 n +0000127473 00000 n +0000127678 00000 n +0000127843 00000 n +0000127973 00000 n +0000128071 00000 n +0000128184 00000 n +0000128288 00000 n +0000128473 00000 n +0000128586 00000 n +0000128696 00000 n +0000128882 00000 n +0000128994 00000 n +0000129104 00000 n +0000129291 00000 n +0000129391 00000 n +0000129494 00000 n +0000129677 00000 n +0000129789 00000 n +0000129887 00000 n +0000130073 00000 n +0000130186 00000 n +0000130284 00000 n +0000130469 00000 n +0000130581 00000 n +0000130679 00000 n +0000130811 00000 n +0000130933 00000 n +0000131070 00000 n +0000131198 00000 n +0000131314 00000 n +0000131430 00000 n +0000131548 00000 n +0000131666 00000 n +0000131797 00000 n +0000131915 00000 n +0000132045 00000 n +0000132161 00000 n +0000132277 00000 n +0000132393 00000 n +0000132519 00000 n +0000132645 00000 n +0000132770 00000 n +0000132897 00000 n +0000133023 00000 n +0000133143 00000 n +0000133269 00000 n +0000133389 00000 n +0000133520 00000 n +0000133635 00000 n +0000133749 00000 n +0000133874 00000 n +0000133993 00000 n +0000134105 00000 n +0000134232 00000 n +0000134366 00000 n +0000134494 00000 n +0000134610 00000 n +0000134747 00000 n +0000134883 00000 n +0000135011 00000 n +0000135127 00000 n +0000135243 00000 n +0000135362 00000 n +0000135480 00000 n +0000135611 00000 n +0000135741 00000 n +0000135857 00000 n +0000135974 00000 n +0000136090 00000 n +0000136217 00000 n +0000136343 00000 n +0000136467 00000 n +0000136593 00000 n +0000136720 00000 n +0000136841 00000 n +0000136968 00000 n +0000137089 00000 n +0000137203 00000 n +0000137317 00000 n +0000137441 00000 n +0000137559 00000 n +0000137671 00000 n +0000137797 00000 n +0000137933 00000 n +0000138065 00000 n +0000138187 00000 n +0000138324 00000 n +0000138452 00000 n +0000138570 00000 n +0000138689 00000 n +0000138806 00000 n +0000138922 00000 n +0000139038 00000 n +0000139170 00000 n +0000139300 00000 n +0000139426 00000 n +0000139542 00000 n +0000139658 00000 n +0000139785 00000 n +0000139911 00000 n +0000140031 00000 n +0000140157 00000 n +0000140277 00000 n +0000140408 00000 n +0000140522 00000 n +0000140637 00000 n +0000140763 00000 n +0000140904 00000 n +0000141025 00000 n +0000141160 00000 n +0000141274 00000 n +0000141410 00000 n +0000141526 00000 n +0000141643 00000 n +0000141759 00000 n +0000141878 00000 n +0000141996 00000 n +0000142114 00000 n +0000142230 00000 n +0000142346 00000 n +0000142473 00000 n +0000142599 00000 n +0000142723 00000 n +0000142837 00000 n +0000142951 00000 n +0000143066 00000 n +0000143185 00000 n +0000143297 00000 n +0000143416 00000 n +0000143536 00000 n +0000143652 00000 n +0000143768 00000 n +0000143899 00000 n +0000144025 00000 n +0000144151 00000 n +0000144277 00000 n +0000144397 00000 n +0000144526 00000 n +0000144654 00000 n +0000144773 00000 n +0000144891 00000 n +0000145008 00000 n +0000145125 00000 n +0000145255 00000 n +0000145385 00000 n +0000145512 00000 n +0000145638 00000 n +0000145764 00000 n +0000145884 00000 n +0000146013 00000 n +0000146141 00000 n +0000146274 00000 n +0000146392 00000 n +0000146508 00000 n +0000146624 00000 n +0000146754 00000 n +0000146884 00000 n +0000147010 00000 n +0000147130 00000 n +0000147258 00000 n +0000147367 00000 n +0000147471 00000 n +0000147577 00000 n +0000147765 00000 n +0000147873 00000 n +0000147975 00000 n +0000148152 00000 n +0000148264 00000 n +0000148376 00000 n +0000148577 00000 n +0000148683 00000 n +0000148789 00000 n +0000148911 00000 n +0000149031 00000 n +0000149151 00000 n +0000149271 00000 n +0000149398 00000 n +0000149522 00000 n +0000149648 00000 n +0000149772 00000 n +0000149897 00000 n +0000150023 00000 n +0000150147 00000 n +0000150276 00000 n +0000150405 00000 n +0000150533 00000 n +0000150659 00000 n +0000150787 00000 n +0000150914 00000 n +0000151044 00000 n +0000151168 00000 n +0000151292 00000 n +0000151416 00000 n +0000151540 00000 n +0000151664 00000 n +0000151788 00000 n +0000151910 00000 n +0000152032 00000 n +0000152154 00000 n +0000152274 00000 n +0000152394 00000 n +0000152515 00000 n +0000152635 00000 n +0000152755 00000 n +0000152873 00000 n +0000152991 00000 n +0000153111 00000 n +0000153231 00000 n +0000153351 00000 n +0000153471 00000 n +0000153597 00000 n +0000153701 00000 n +0000153816 00000 n +0000154005 00000 n +0000154112 00000 n +0000154226 00000 n +0000154403 00000 n +0000154515 00000 n +0000154629 00000 n +0000154829 00000 n +0000154936 00000 n +0000155043 00000 n +0000155163 00000 n +0000155283 00000 n +0000155403 00000 n +0000155524 00000 n +0000155644 00000 n +0000155764 00000 n +0000155891 00000 n +0000156016 00000 n +0000156142 00000 n +0000156267 00000 n +0000156392 00000 n +0000156519 00000 n +0000156644 00000 n +0000156773 00000 n +0000156901 00000 n +0000157030 00000 n +0000157158 00000 n +0000157285 00000 n +0000157411 00000 n +0000157537 00000 n +0000157663 00000 n +0000157789 00000 n +0000157915 00000 n +0000158031 00000 n +0000158160 00000 n +0000158284 00000 n +0000158408 00000 n +0000158532 00000 n +0000158656 00000 n +0000158780 00000 n +0000158905 00000 n +0000159027 00000 n +0000159150 00000 n +0000159273 00000 n +0000159401 00000 n +0000159531 00000 n +0000159649 00000 n +0000159771 00000 n +0000159906 00000 n +0000160025 00000 n +0000160146 00000 n +0000160266 00000 n +0000160386 00000 n +0000160507 00000 n +0000160627 00000 n +0000160747 00000 n +0000160865 00000 n +0000160993 00000 n +0000161127 00000 n +0000161245 00000 n +0000161365 00000 n +0000161486 00000 n +0000161606 00000 n +0000161726 00000 n +0000161846 00000 n +0000161972 00000 n +0000162077 00000 n +0000162178 00000 n +0000162354 00000 n +0000162464 00000 n +0000162576 00000 n +0000162776 00000 n +0000162880 00000 n +0000162984 00000 n +0000163102 00000 n +0000163220 00000 n +0000163338 00000 n +0000163458 00000 n +0000163576 00000 n +0000163703 00000 n +0000163827 00000 n +0000163954 00000 n +0000164079 00000 n +0000164204 00000 n +0000164332 00000 n +0000164447 00000 n +0000164561 00000 n +0000164675 00000 n +0000164789 00000 n +0000164903 00000 n +0000165023 00000 n +0000165143 00000 n +0000165257 00000 n +0000165371 00000 n +0000165485 00000 n +0000165605 00000 n +0000165731 00000 n +0000165835 00000 n +0000165936 00000 n +0000166125 00000 n +0000166234 00000 n +0000166344 00000 n +0000166523 00000 n +0000166635 00000 n +0000166747 00000 n +0000166950 00000 n +0000167050 00000 n +0000167151 00000 n +0000167265 00000 n +0000167379 00000 n +0000167494 00000 n +0000167608 00000 n +0000167722 00000 n +0000167836 00000 n +0000167950 00000 n +0000168064 00000 n +0000168190 00000 n +0000168315 00000 n +0000168441 00000 n +0000168568 00000 n +0000168692 00000 n +0000168817 00000 n +0000168943 00000 n +0000169067 00000 n +0000169191 00000 n +0000169318 00000 n +0000169442 00000 n +0000169571 00000 n +0000169702 00000 n +0000169831 00000 n +0000169957 00000 n +0000170083 00000 n +0000170208 00000 n +0000170332 00000 n +0000170456 00000 n +0000170580 00000 n +0000170704 00000 n +0000170826 00000 n +0000170949 00000 n +0000171071 00000 n +0000171185 00000 n +0000171299 00000 n +0000171413 00000 n +0000171531 00000 n +0000171645 00000 n +0000171760 00000 n +0000171874 00000 n +0000171988 00000 n +0000172109 00000 n +0000172229 00000 n +0000172343 00000 n +0000172457 00000 n +0000172576 00000 n +0000172690 00000 n +0000172804 00000 n +0000172924 00000 n +0000173046 00000 n +0000173150 00000 n +0000173265 00000 n +0000173452 00000 n +0000173560 00000 n +0000173675 00000 n +0000173851 00000 n +0000173963 00000 n +0000174076 00000 n +0000174276 00000 n +0000174388 00000 n +0000174501 00000 n +0000174628 00000 n +0000174755 00000 n +0000174881 00000 n +0000175007 00000 n +0000175133 00000 n +0000175259 00000 n +0000175384 00000 n +0000175513 00000 n +0000175640 00000 n +0000175767 00000 n +0000175883 00000 n +0000176011 00000 n +0000176135 00000 n +0000176260 00000 n +0000176385 00000 n +0000176509 00000 n +0000176634 00000 n +0000176758 00000 n +0000176880 00000 n +0000177002 00000 n +0000177124 00000 n +0000177260 00000 n +0000177378 00000 n +0000177498 00000 n +0000177618 00000 n +0000177738 00000 n +0000177858 00000 n +0000177978 00000 n +0000178098 00000 n +0000178216 00000 n +0000178346 00000 n +0000178481 00000 n +0000178599 00000 n +0000178720 00000 n +0000178840 00000 n +0000178960 00000 n +0000179080 00000 n +0000179200 00000 n +0000179332 00000 n +0000179436 00000 n +0000179536 00000 n +0000179723 00000 n +0000179825 00000 n +0000179927 00000 n +0000180104 00000 n +0000180216 00000 n +0000180328 00000 n +0000180528 00000 n +0000180634 00000 n +0000180740 00000 n +0000180860 00000 n +0000180983 00000 n +0000181103 00000 n +0000181223 00000 n +0000181343 00000 n +0000181469 00000 n +0000181594 00000 n +0000181721 00000 n +0000181847 00000 n +0000181971 00000 n +0000182095 00000 n +0000182221 00000 n +0000182347 00000 n +0000182471 00000 n +0000182598 00000 n +0000182723 00000 n +0000182847 00000 n +0000182978 00000 n +0000183106 00000 n +0000183232 00000 n +0000183349 00000 n +0000183463 00000 n +0000183577 00000 n +0000183691 00000 n +0000183805 00000 n +0000183919 00000 n +0000184039 00000 n +0000184159 00000 n +0000184273 00000 n +0000184388 00000 n +0000184502 00000 n +0000184622 00000 n +0000184748 00000 n +0000184853 00000 n +0000184953 00000 n +0000185141 00000 n +0000185243 00000 n +0000185345 00000 n +0000185523 00000 n +0000185635 00000 n +0000185747 00000 n +0000185948 00000 n +0000186054 00000 n +0000186160 00000 n +0000186280 00000 n +0000186401 00000 n +0000186522 00000 n +0000186642 00000 n +0000186763 00000 n +0000186883 00000 n +0000187003 00000 n +0000187123 00000 n +0000187243 00000 n +0000187371 00000 n +0000187496 00000 n +0000187623 00000 n +0000187749 00000 n +0000187873 00000 n +0000187997 00000 n +0000188123 00000 n +0000188248 00000 n +0000188372 00000 n +0000188498 00000 n +0000188622 00000 n +0000188751 00000 n +0000188880 00000 n +0000189006 00000 n +0000189123 00000 n +0000189239 00000 n +0000189353 00000 n +0000189467 00000 n +0000189581 00000 n +0000189699 00000 n +0000189813 00000 n +0000189927 00000 n +0000190041 00000 n +0000190155 00000 n +0000190275 00000 n +0000190395 00000 n +0000190509 00000 n +0000190625 00000 n +0000190743 00000 n +0000190858 00000 n +0000190972 00000 n +0000191092 00000 n +0000191218 00000 n +0000191330 00000 n +0000191434 00000 n +0000191619 00000 n +0000191731 00000 n +0000191841 00000 n +0000192027 00000 n +0000192139 00000 n +0000192249 00000 n +0000192434 00000 n +0000192535 00000 n +0000192638 00000 n +0000192822 00000 n +0000192934 00000 n +0000193032 00000 n +0000193218 00000 n +0000193331 00000 n +0000193429 00000 n +0000193614 00000 n +0000193727 00000 n +0000193825 00000 n +0000193957 00000 n +0000194094 00000 n +0000194222 00000 n +0000194338 00000 n +0000194456 00000 n +0000194587 00000 n +0000194706 00000 n +0000194836 00000 n +0000194952 00000 n +0000195068 00000 n +0000195184 00000 n +0000195310 00000 n +0000195434 00000 n +0000195560 00000 n +0000195686 00000 n +0000195806 00000 n +0000195932 00000 n +0000196052 00000 n +0000196182 00000 n +0000196296 00000 n +0000196423 00000 n +0000196541 00000 n +0000196653 00000 n +0000196779 00000 n +0000196914 00000 n +0000197042 00000 n +0000197158 00000 n +0000197294 00000 n +0000197430 00000 n +0000197560 00000 n +0000197676 00000 n +0000197794 00000 n +0000197925 00000 n +0000198055 00000 n +0000198172 00000 n +0000198288 00000 n +0000198404 00000 n +0000198532 00000 n +0000198656 00000 n +0000198784 00000 n +0000198910 00000 n +0000199030 00000 n +0000199157 00000 n +0000199279 00000 n +0000199393 00000 n +0000199517 00000 n +0000199637 00000 n +0000199749 00000 n +0000199877 00000 n +0000200014 00000 n +0000200147 00000 n +0000200284 00000 n +0000200412 00000 n +0000200531 00000 n +0000200647 00000 n +0000200763 00000 n +0000200894 00000 n +0000201025 00000 n +0000201152 00000 n +0000201268 00000 n +0000201385 00000 n +0000201512 00000 n +0000201638 00000 n +0000201758 00000 n +0000201885 00000 n +0000202005 00000 n +0000202135 00000 n +0000202249 00000 n +0000202376 00000 n +0000202517 00000 n +0000202637 00000 n +0000202771 00000 n +0000202885 00000 n +0000203022 00000 n +0000203138 00000 n +0000203257 00000 n +0000203375 00000 n +0000203491 00000 n +0000203607 00000 n +0000203733 00000 n +0000203857 00000 n +0000203971 00000 n +0000204086 00000 n +0000204204 00000 n +0000204317 00000 n +0000204435 00000 n +0000204551 00000 n +0000204669 00000 n +0000204800 00000 n +0000204926 00000 n +0000205053 00000 n +0000205174 00000 n +0000205303 00000 n +0000205431 00000 n +0000205549 00000 n +0000205665 00000 n +0000205782 00000 n +0000205913 00000 n +0000206044 00000 n +0000206170 00000 n +0000206296 00000 n +0000206416 00000 n +0000206544 00000 n +0000206673 00000 n +0000206805 00000 n +0000206921 00000 n +0000207038 00000 n +0000207168 00000 n +0000207298 00000 n +0000207424 00000 n +0000207544 00000 n +0000207674 00000 n +0000207782 00000 n +0000207888 00000 n +0000207992 00000 n +0000208178 00000 n +0000208288 00000 n +0000208390 00000 n +0000208568 00000 n +0000208680 00000 n +0000208792 00000 n +0000208993 00000 n +0000209099 00000 n +0000209206 00000 n +0000209326 00000 n +0000209446 00000 n +0000209566 00000 n +0000209686 00000 n +0000209806 00000 n +0000209932 00000 n +0000210056 00000 n +0000210182 00000 n +0000210306 00000 n +0000210430 00000 n +0000210556 00000 n +0000210680 00000 n +0000210808 00000 n +0000210938 00000 n +0000211064 00000 n +0000211191 00000 n +0000211320 00000 n +0000211445 00000 n +0000211569 00000 n +0000211693 00000 n +0000211815 00000 n +0000211937 00000 n +0000212057 00000 n +0000212177 00000 n +0000212298 00000 n +0000212418 00000 n +0000212537 00000 n +0000212655 00000 n +0000212776 00000 n +0000212896 00000 n +0000213018 00000 n +0000213138 00000 n +0000213256 00000 n +0000213382 00000 n +0000213489 00000 n +0000213603 00000 n +0000213792 00000 n +0000213898 00000 n +0000214012 00000 n +0000214189 00000 n +0000214302 00000 n +0000214414 00000 n +0000214614 00000 n +0000214720 00000 n +0000214826 00000 n +0000214947 00000 n +0000215067 00000 n +0000215187 00000 n +0000215307 00000 n +0000215427 00000 n +0000215547 00000 n +0000215667 00000 n +0000215793 00000 n +0000215919 00000 n +0000216045 00000 n +0000216170 00000 n +0000216294 00000 n +0000216420 00000 n +0000216544 00000 n +0000216672 00000 n +0000216800 00000 n +0000216928 00000 n +0000217054 00000 n +0000217181 00000 n +0000217309 00000 n +0000217435 00000 n +0000217562 00000 n +0000217678 00000 n +0000217806 00000 n +0000217930 00000 n +0000218054 00000 n +0000218178 00000 n +0000218301 00000 n +0000218425 00000 n +0000218553 00000 n +0000218683 00000 n +0000218801 00000 n +0000218923 00000 n +0000219057 00000 n +0000219175 00000 n +0000219295 00000 n +0000219415 00000 n +0000219536 00000 n +0000219657 00000 n +0000219777 00000 n +0000219895 00000 n +0000220023 00000 n +0000220157 00000 n +0000220275 00000 n +0000220395 00000 n +0000220515 00000 n +0000220635 00000 n +0000220755 00000 n +0000220875 00000 n +0000220993 00000 n +0000221120 00000 n +0000221227 00000 n +0000221327 00000 n +0000221504 00000 n +0000221614 00000 n +0000221726 00000 n +0000221927 00000 n +0000222031 00000 n +0000222135 00000 n +0000222253 00000 n +0000222372 00000 n +0000222490 00000 n +0000222609 00000 n +0000222727 00000 n +0000222853 00000 n +0000222977 00000 n +0000223105 00000 n +0000223229 00000 n +0000223355 00000 n +0000223482 00000 n +0000223596 00000 n +0000223711 00000 n +0000223831 00000 n +0000223945 00000 n +0000224059 00000 n +0000224173 00000 n +0000224294 00000 n +0000224420 00000 n +0000224528 00000 n +0000224629 00000 n +0000224817 00000 n +0000224925 00000 n +0000225035 00000 n +0000225215 00000 n +0000225329 00000 n +0000225441 00000 n +0000225641 00000 n +0000225743 00000 n +0000225843 00000 n +0000225957 00000 n +0000226071 00000 n +0000226185 00000 n +0000226299 00000 n +0000226413 00000 n +0000226527 00000 n +0000226641 00000 n +0000226767 00000 n +0000226891 00000 n +0000227017 00000 n +0000227141 00000 n +0000227267 00000 n +0000227391 00000 n +0000227515 00000 n +0000227641 00000 n +0000227765 00000 n +0000227893 00000 n +0000228021 00000 n +0000228147 00000 n +0000228271 00000 n +0000228395 00000 n +0000228518 00000 n +0000228640 00000 n +0000228755 00000 n +0000228873 00000 n +0000228987 00000 n +0000229101 00000 n +0000229221 00000 n +0000229336 00000 n +0000229451 00000 n +0000229570 00000 n +0000229684 00000 n +0000229798 00000 n +0000229919 00000 n +0000230039 00000 n +0000230145 00000 n +0000230259 00000 n +0000230446 00000 n +0000230555 00000 n +0000230669 00000 n +0000230847 00000 n +0000230959 00000 n +0000231071 00000 n +0000231272 00000 n +0000231384 00000 n +0000231496 00000 n +0000231622 00000 n +0000231748 00000 n +0000231876 00000 n +0000232002 00000 n +0000232128 00000 n +0000232254 00000 n +0000232380 00000 n +0000232505 00000 n +0000232633 00000 n +0000232760 00000 n +0000232887 00000 n +0000233003 00000 n +0000233131 00000 n +0000233257 00000 n +0000233381 00000 n +0000233506 00000 n +0000233628 00000 n +0000233750 00000 n +0000233884 00000 n +0000234002 00000 n +0000234122 00000 n +0000234242 00000 n +0000234362 00000 n +0000234482 00000 n +0000234602 00000 n +0000234720 00000 n +0000234849 00000 n +0000234985 00000 n +0000235104 00000 n +0000235224 00000 n +0000235344 00000 n +0000235464 00000 n +0000235586 00000 n +0000235706 00000 n +0000235825 00000 n +0000235960 00000 n +0000236069 00000 n +0000236169 00000 n +0000236355 00000 n +0000236458 00000 n +0000236560 00000 n +0000236737 00000 n +0000236850 00000 n +0000236962 00000 n +0000237163 00000 n +0000237269 00000 n +0000237375 00000 n +0000237495 00000 n +0000237615 00000 n +0000237736 00000 n +0000237856 00000 n +0000237976 00000 n +0000238102 00000 n +0000238226 00000 n +0000238353 00000 n +0000238477 00000 n +0000238603 00000 n +0000238728 00000 n +0000238852 00000 n +0000238978 00000 n +0000239102 00000 n +0000239226 00000 n +0000239354 00000 n +0000239471 00000 n +0000239585 00000 n +0000239699 00000 n +0000239821 00000 n +0000239935 00000 n +0000240050 00000 n +0000240164 00000 n +0000240285 00000 n +0000240413 00000 n +0000240519 00000 n +0000240620 00000 n +0000240806 00000 n +0000240908 00000 n +0000241010 00000 n +0000241187 00000 n +0000241300 00000 n +0000241412 00000 n +0000241615 00000 n +0000241721 00000 n +0000241828 00000 n +0000241949 00000 n +0000242071 00000 n +0000242192 00000 n +0000242312 00000 n +0000242433 00000 n +0000242554 00000 n +0000242675 00000 n +0000242795 00000 n +0000242921 00000 n +0000243045 00000 n +0000243171 00000 n +0000243296 00000 n +0000243423 00000 n +0000243548 00000 n +0000243673 00000 n +0000243799 00000 n +0000243924 00000 n +0000244053 00000 n +0000244170 00000 n +0000244286 00000 n +0000244400 00000 n +0000244518 00000 n +0000244632 00000 n +0000244747 00000 n +0000244867 00000 n +0000244981 00000 n +0000245095 00000 n +0000245214 00000 n +0000245328 00000 n +0000245443 00000 n +0000245564 00000 n +0000245691 00000 n +trailer +<]>> +startxref +0 +%%EOF + +6315 0 obj<>stream +@/|+x$W]bkZUo^oGU(2j2\z@khĹp< XBtZ' Yg̯܈ $A5V.0oRm}e(DqC +`:tvDsssy?{Rk>!p-N@cx0gZ(Wsm >T* '`v7Hhݔ +>p2Br۸ +wX9砮&78%^2Ɛ{ΊЂܭ_iN9Bw%dk'j(%tNp"NIp bVش0Py5wn Ӄny~ unXgiK.btST؝giG)ӧzB=*pz!9=d[٧`TO+y8OeN$ j [{xZ$R(I +EbBk]NttOez:HpݟjaQuk*Ѓy=ԅaEyoNqqu*Pbf#巯d< |11'6f6g1 Gy=NՉ3lo|as;J}1 o+}+BGj})%$)."1:{^'߸cf++Jw, il,J +. ,v:'`aoTjX?ѫC ,fY#ZtkӀ,+sWD[$2$o0Q !-y+l_\Ï(DCc3H$~ % {+IɫUZJ9H }$ns: [4`)lN$[=R*Ă8+zy]9{JX +mphtN7Cg_ަQ|FH0ӆ?De08Ќ3CҔ |/?9:qP/&z4 np4WbT_) /ȡݭ p +d Efe)nϠצ5ԫ+Z0*0 #k/Pҽujҿ8b>M7ZC#j*joErArR%LF+E7kɦ6` +:Ovuh|CQIrgq~v+ =b1.V$O =`GNI\)Q)+z8h.Ŷto =Fжέ1@7҉HCBVeG޳X.aXA.)ga~ZjҐ܆輦z'Ֆ/ +;-3%K`OkЊT!d mQז uњ!hkiEIbb/A=lUc0mc/˭{E<ק//2Mfr #)I)ӥ7 zq \>Id럏[Y1;Wx8hc28|./dOݍ +%V s- . +"Ջ$xm1L%K '|㿏Ei> +KPX 1ADt(p@Xyo_~r~{|liQS$xeO< +(cG?-C-r ÒQ1捐leL$,A*+YWn ΗH)dFWI@-\LLC@la}-i@$mN_Zz A+NhDI(gͪcܷ tuL11#2YVsܻ9KvJ+DLCYЫfd]9GnЬ~8ͳBBBpZu.F-†q{F{>I +cu@Xz­+t)^uR":݊pےGHeg??am-~6-#X7tHmA+yZUs|s|N.fC7DO"g<<,*3ȮsbXLbc,K:'jƶ7? i^ -\ol蘋30> 3+1t҅^ˡ.Stсq{\vSGhGKkjk#uw{ԣ'i6%~oQɻPU# ɶўkSN!Qit̑]1>]t,^iǷ#g8b_+z*gȦ D!W0R;MpQN(6jqJHTkT9P6~SRdDhY \-d(KD Y>#7zsCE(N& +5`x!ZR+2* j~P^U5\!P^Rf 6N ؊XIPlsBw$@Җ 77@ ]JtΥ&Mm`ҔK9= +sUaO=OAJjx$_oP⫣ T)e^XқpS]qb %:DF0CmY}pxżaX7Nj MiY{O*WWIX Gӣ?hkB$,$S^˾mdI^1'ӉYp! +TS ~F9A&wQllj׶)yY"u'> endobj 6314 0 obj<> endobj 6316 0 obj<> endobj 6317 0 obj<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6318 0 obj<> endobj 6319 0 obj<> endobj 6320 0 obj<> endobj 6321 0 obj<>stream +%Z-:8t9}CyailR9˵N\gE+`%deY+N`PR`6> endobj 6323 0 obj<> endobj 6324 0 obj<> endobj 6325 0 obj<> endobj 6326 0 obj<>stream +(ޭQkʩʸ#WHoΚWq# wo}bwCnI "8S l-O"n +ȫ=A]D %4\q3@h>\a{ >QXЊ_1#CT?:?&U11:ɏ QXs.uK)LzbԵ/Lm3l/>w)wVlr5:oFp)KI{[-1cmdRꝉ}T oJ!TqwQzT%[0xStk~+#OgW s^tiЕTԊ\[)9kS]bUI*N |7|J1gw{?;-Do}]E_HEW-a|5y Ã[8HV,7ib(gG>Nv}fxWJhRFn igr,Jk `Xp+[ޣhF^vls8]% wVD [4a<6=Ŏ<XNH7D`M<?51gYd;RfbŗfZ|du23zxEՎh>Dn鹠N՚RMEYWtZ /Gk(/A:Nf׭ 9ɷrk}tXXAW }ZSG9ќ-0Q\^jᷟ3 [su^*:s~7Ξ3dTz& Jx$9!VTp54G.b +<$l̘0qԵ(oP@( x:B5&P{ 扔hRЬ'OU@{_;]~ƿÊ v턈[x_뱚 5x?]/r}Ƨ,ܚSajkiAtýwGqd΅QI'P!HۓAA|bYL^s^Fٖ5sw0 +>dQp/Z I=4OU*H7U@׿zI'9lՏCc4f1mRy+ca[x8o4o@2#gߦxwj%̖79`4|l+6\ɣTЁ.S_&K%q|Xڗ1aj=S@/_Kq3uX"H]m)H+v8C}MIw(½f\Ut$&&ǒr>\gFIqA>uו>3cԼAyh5km_ +UI$u>\6_= 0w백.㗔9Ɂh;+4t#&(+/wO*uxru8&SqrCzL~;f^U:+-rE@~Bhj֒5򈞄v{0FmO129NF>:U*G1Q,Ǩtܑ>4(ٔxRn(YN‚+uW7̎ce؍ 8gУU y8iޓO=ue ]#MP.Z53RU>m>` (hǜ  ()&9FgJV_%r=3Q ~$7?zF#$5^@y&c!IR1>'n& S+'"{Imrx]-mx&D|nޝbT ef=̰9z]RU[?=Ӽ8yq3w -4x׭G Q$)?`yH{FV]aGg?aWK^{N%C ۔PD>%=Md7ޞPܧd~Wu.ulr,V,8B0wNY +*t]ܴ;%ӫ [>K#svd@n_y=gNΦ+hʟzdF”=$Ǒaʕl)gDUlN +s|_CE\VX2;yɈĂj&"(S+b[*N +թMG kbrY5!XBsB ־S1q.v+/2Z;#v̔ cg:d±R(2&CXE- /οO7QZnMu%Dڤ@q%A1k[`J_ ]xgpIL<Ěժ;|&0t&L6l3@$Q!=4DR\p.r 7*fmNƓړ[ b +p3yy?C;%/G:{4ㅾ>5 1{f:'qnr>0b +͋f bdvWVkt,axѕ1&{1< ^:]1 `T^EJgJM9Jхn]Rߢ}s<.z6˒7DŽ;JZo Δ +j!âLY/( +o;|!GR8m  B.>UfiQ)V *VRI$+呮*S 7p(^uK=s+geLF֥J_, `,D?7^- +?\sZHb;a4vV;E@{Z@ߐ 7!~V7AB?2C-wA)%F8_TɋP"^ *ij9чYOv"^X%\[݌l].{{s\ +P a37}}X\#U?}uUk2bR?:y%sE'odgA%TBRK MHGpz%RJXRE@@.}G:m7bi`U$ǹNο$nlRKHLr +=/)ZZLf% OgvOh|]I]cm~&d^$.7׹۰d&VB?}fvRz%SWW(3VMEԍ>#h삚&<%5U3PNB 0n]Bќ&զb儝W&fmtNVs8DGثims(uԺZixkG29fd~i GB4M>+s+XmJ2ڌpwv~*;Y GRlkǴ&WYL:,?VVJx(eKĺ*}kpH҉&+Wf}"b@8Y&| Gɨr|+7H4JrFU\a!8xO%HPD=*6fv7hS}NØOR{vWt<*Ulno1vԪQ+/~~L^Qf\fg[f~/…Hvӷj&xֲRT 1G0N ۢ72uFߌR#XZ%#ƫ/Y!5RPW.&;*+fb*4Y{R +YGhfoEQ82 >ӳwJ0uBqxYJvzt*ɼHީHO^@.Ot4Qv%co<cѐ}w^AJ7p+E p*J>PZpVSW``;í؂z@ ;:ŠL--_EdvI_usEhu3|ɰqEn}h{,ssYv8~Q/aM7]yUhS,N~XRLߌmm&,bH+V?FW |Jʨ'ptlwF)}cSގۢuBjݻUO$sqc e屏 9)c$Snoʜ}?KQ*m,bWVfjS7 JS(Z̙?aYQҐ>7B)0N3Y FʭUK즉 9l"1tut ?V/vP0;R}6zS<ڗ4aw޲6(;W߻`lqF~u*9c*[.73U߿^sto+[CtX?PX)vޒzòK +Jkxp326SNz2[m1ŠSk#.Xg*ƺBc~91%* :4)R}ZhpQIo_"8N 2]v;Mى%To醑bS0㐉21O5.[6#l!w)J}W\` />DzchA7|4a>?chu(>c݀ZAL9T:8&BQ!W.>(h =d<~Hηw4(pH+~~Êa-fߩ/O?C u츦9w׌H"*xkDF¶&gP\ s.ӗBgYVҩ_(TE틢ز ի" g*fŸ*mwҹ:gUSZlqD?LḳQ wi2%rt**G"N~%>7J;:=mv;{[$QsHk) YHLih(;~vtE}IkDͪ K'HnŒl[J?<6R? ]4IFަcߊ)OA8{ |a +x^3 +Ae6au"r^$hM+V0]qzMU~~x$w tFko9O![+}IȘB\͡]+\k;h!>%0͗rmdnxB0Sr,\<1nˇ>l!_qcXşOb!GK;m4Juy<KDHidvO,d̩ԣ圪qBxݙ):hQ{k܍'WcSnHN0Pp@ą|$QB8ht0TP{(_/q\-o 'WpEa͊훶AN>fUM(ؽrmPVJ{ґiIM]7rȡP9TZt1 ++0gk-{?Ih.gZZ(=.4WX3$C5ɪUKQ!ԴCDgcCn{$',[9i@3Ҝ=E$Mb]TKk `;w}q+je)Z{;MB}#I]m Ŗ\#k'Ek ͅכT蒭AIr\`z0/a]-S& \1d̐ʸє;6u0WQ}G8áw3Ezc ؀;,v5@p`t5=w:66V%FZA;N>O*7`f/#0d3t<5wXsXI 8w.OYXȓͤ jܘ = +Rzd< '6]GWAw4,կM$r<>+ +5Gz:?H+eT=~nuӁ͠6h0Ql*i+4=RoW֛ͤhQ9QUQƻ2 U@|UR}ܷii(e|cN$g&}J؛9+-n%HMn,ˌˎ%'/$"sɉ״4H|+,RVJñGdć3_!uԗH(# Be +QIJj ]*|c}c6v/47 6O "YĝQ/N$"D__p1~@{ ~7|r$}u39=b>L]"g#i1.ĸȪGi}GuŦ$`\Z*y$'5ao1Ut!mmPĽqߙ}М;rGXB,cJc2vB9jZF0`un޻V7eakt?a0 f/|gP,ڏDqn4.׹Ǥq8Roi|({4LAzP4vXx/牂y +:PĐ韀䯸:?R٘eެӲʤy䓗$ٰc!/epzׄ#Q:D9N2ov Ɍ] +#[ UX:1kF ͋Rsoa jM/3+[HUƣxš!ie!؍w +*j#J"'pJyuV 3퇲[*TY]{~՚㍍w;; !el"&%do{UBO( +>$pj 70 +y="!nw{hZp69)6AQ܁% +^^QZF }ܳUg(yRDoy:wxx57ҤZy9SDUF; !}:Oppb wuA+\T{UAoK’-R& .WYF<>s~j)<7e2/t -=[evo.)gRckƖfYdh R:7*6J'Bءu NV.3=-{Ĵ\M`b{,F ,~.v)T.~K?̨ҙeR Ejnj$ #u> ;BEi ,k v"`1̳yedRD?GRꈹ}bq ǧ|l(W/g_:`!KDJ.qiO˰9`W%0Krxfd~gEJ;*>l`@aᥞhkulv{Y6YLY=ZdB8}< ̍L5;ZZ +HߘY$N'86a&T~[U+tm>5@>[ V.)JY/SҕHgD OD/Y\c` }BZ;S|,1)X.c D;b qtER5t?7  _+ *Equr*apבcWk?Inhn,F6TݏXR]1>RX^&ѥ#p3ad8P1UevX^i=;eMM[64c.ul%-S8/4,v/9ϣ SkupY7fȋrcTiuY O4k110ܴ)4W![NHRvE y^4HO'kN7r9X*HТ6W$߳W'fdvSE=~`y'1Lg QlKO-DbBMbG?O;-&M>qoy =Jq0;G].sq%8=m; +qcLUv/ +e $W8#%h.VB< +7B=]\p7=+Wnԁv]v->AKo D^Dq;Wϖpj1=?8 3iatlLn),4 1dl$dlt;$S暷֚: LNABF1(wރ<Y='!q+#} Gqt}€`q d%6 +Vkzo_*ߚ"CY@n!%dWM6ډ:Ȩ}؎w`IW>?_f;"W9XDZt@C + ֘"7 o 5ǀ`IBHTqo 嘳D +`W+omX߷̈=w, po#gCGjl;aY9a"YiZyNlݑ0aU>j$ʶU0_%^llqI*dI2f{Ssu^hK_ؖoԤÝk>r7C9JZ{Ma#VͱܢAxe%䇙M'qF@zpIJZg',8 eδ7 p2sȿL4y'۽δnHkEUGގblFr\)܆lU @&tEH-q|:ϝ 3Ocw4+G~e5,p!+5^_np{ηqy}^Yj!`#uwݹ+Wfp (/,6E 'Vg2}3}":28_Ԉi"vD;{JJj q8;V.E!\ Q9M,(8W#ؕa>jaFG|/H"|>.M68<۩aEU4ApaPIWOxXM #7Vv"hwVک,cAomoYo +F 2|"$yb粕*%re(i{LdZRi۾UOm7 瑳8pokW>zի/ e@P]_NZ(Xޭ|{8&[!O]ʵ vs#J,Ds~YyOOSDr4QrsI I3ـ۩FO Qrb x +m*[w=EYv FU!*{-a-< ?iNiKOHd^@ ր ,i8qQ)-G\eit%?ڵƼ1),.-Yrɬ G;CL펨PM|:&ש T{`FBq5}94`!IVRZzIwBX I~to[\!:Kb%Mmq|Ňm#0NPSSKMr01_;b=5ZʟQoIdQGCV֚T'%~.#R.m;pgwEg]f]>K8,n+ OQW(ܺS= $++N7שƾ/ +љM|E +h]JM殸4"$Z$I^YΜ]|jK.ޑ^Tn_|폥 DwO aZe+ۡxyfEO$Z!N L6Ui [O{ԫ&10 p3A+tI@\~‰LkLOlU.4ط,e M^.b׊++~UlL,tQ+״,|r A'<;-O}{pA8LFpkcNBm0]Aeh/\.2k?[tP|$tl@~1Ka)azͧޤ+( zh+OR_QFzRyRj87rA-M;ѹ~&̗erXWh(Éa&Fd v71~|xs"8 " (X(aة rfhfXu?0Xpɕ?'1[5GPCui8MG KMoڗ1/W95Ӹ8H*Clws*K\ZD?#|%׷Obbg^ΗV3OZ^ts\kb\pˏ2CiAXuj)1"L uE2njG@3!n1f0?w3.mrp{GTW9- !J$aGt!hmgQR['ӤPZ=^3g ؀Xb="cŪVAי[ax"e( B} kT0ԥFu:vKDȲ%NԖd"6cVMPa + 727wf(%#s ug*pG[y%LzyB`ZgqX/s$I\sVl09+]lDBQy|`0vRJN.,X,Z.0tx=5a*.܄C5;'x⭵{S?a\4vSm% niQ ]}ϟE '~ E{ue}嶷$C􃤕*6#D鯰k#4s7+՗El@TO} |uksBGg8O 'xB`_g[7e/'DC^>ȑ4b,RI%JQ=DwgoGh]C){Svz3 +DBhqܲkT3^'?MG L-1M2p{@ N5KVHk^1y\d^j_(C4?qyg"i*4jC`_0Q}>KXԒR|x[{@#HD) +?eE@º ן~at.kWvWroQ$-=(4TEṃܖtE^sM@6vx\0X8 w?ݛ#E`͗5)fZtwb[kb]%pTQ +4IPP[Į͍9Za{*!%lCdǏَÝ.اjlj +riΏ:t~s:Ez.M.JDQi$᧶c7Jc ct܄Zο,Iƾ&Pn%|keL +wj={U:)JԌ$N%C 62phj tj[bBw$H㺾l9с~`efjxb;pe-z TEK C%'֤mzY#4]Ce'@sv=1t8ǣV~d^ÍVg4 +ۊ +-8t1*"ֲ0ѸV {D&g^eivwsj|9\@xuFHKAlܿ({>ۮy*ZsgLu +k=پuu,e.++=H޷Kf' H\E0|s|^P$@U`8x204-Iqo>(`3zav nks(x?7N 1EQBYѝLỷD#PzVMF]jX;H`/: {y+b-T ^pPad+\ӆc}8Fqlbh +Z4Y[;Pӳ!CN Lhfʅ:?knPL[i#qAwsf +ӂݿr\Ur + w H(uħ+j*Pq!]oh!jĠO5(-D xG/ls6H7)z1J2Z5" ۾/$&'$K%8ھQBKd91ݰy1J X8mz\ཀlB'P ,M蒣Ve ҞO囎SQy`BՐκzec:a7#} ܤ|r|vo}fL\l,5:tHc6Yغ?6C<ʜ>h1I徾X,~2BINTX"4k{\ 3+ oLɶDŽVJx6;_, +~I T&9!˞ti5*O7HC{L& +tLom0tT:U`KabAc)&|_a+zzysPnl' +ҁH0yA`8]Keqɽ57<G_ OR0t{#Fj6t#Vރ6MBfC fJ(ѯp[-Ms #i݆ +^Q_wKI}sLT65o/t%V5jsƜ3k"9S!Bp3|v*ӿ^IȎrza@-]25x<&h :8:N<r1CxCz|˸62U+;_01Uу ir0yJ nV?̙J.W4Ɖ3XlnpzN +`pGMmI)Y&kaB}4ҐcV +2u/\h)~s6|B֣l03d _*O+yfs0.[5(7+!; W[6P^մFnEA[I8WN|!ʹ+ar + +9@DVBp(lgG>^uypEk}-J#EQ)Tl|f3gu:庩x_>O8[?6>wTa +!}aۯyF\b!T.gԗ"6,u-B C*:CݾewP 6)>ƋVlÎ}܉p.gʡHEFG}ihDϭ*ߧ|]%!y1s^|T8NWҷ\֏vhU |ϊ&7Ѳ,o_6K堆FW9[xWjWl~ j+;:IlC݌nVXpEjn7聨t4pcb!:{>z0Nј!}Z]4tk(]l^f 'F)y\/z'+/xτ.(v56Z'bc ;E\{/05|!4 U)ϫLd`((SHGԛB~lpӍ>JQgijO*b靊 x40$?@xt>jl9>gz99PCCUĽLLOk"gA8ɚ97xX]A$8qB|4}!mDyN +9\~!E0RTv>`TE)zȼ o I*+fsNe{2h}a*x"O/Ξ2[' )t&Ŭf{An (dϿCsm{䋠˿{3cۍt-9\©mhA.|ړ:О\ðS^ݦӇ>h讀;xU-x=_ABaigPẗe*vLS(^iPAk[ϰv=hd+ƪbʤǰ& ]TɮݾgץX2!ڋB!YyMoK]we03aXtv= Ǖ\=᯽a/]=M5+.N\n 3.Kڤ'{k!'I>NAwr_WW/}S,9iyu}"ě}xLӨe|E.[I>Ԁ)0:ZT'Pڤ.F5 +![QxQ +L-Peȶv.hm؀а>T;j +~8Z%TW "Mn*hw9Lujm%:Yk;T3 :x`L]%9T6B͝\RVAn_)6t'|T$(+&z(U +5A3:MٕV^WFw(Wy3$sێ8d3`nBY\ +?1x@H\dc ;'5*u |фg9\:J +WU% O'(:1kAҰP!,_^&"#Fjp.m%qZ2a ^Zܯ`ҮXtL/N|G@\;R*C3ة<$e#@n2ݫZAP5qr5EJ*yLu s=[`VHʽ7%'Z jjM5#{&D4up6V7K e[m2O.g"GIݪ#˫Ɋggc=kXk#AnsC KH(VW@RîZL.d] oO7{Ƞ(͸4'XvP7d˒!O"q}O+ +X7 K2QD|8U @qNZcIDMw6u +Ϋ#"z-*a8 + 17ưrH֭KXnhΌH\"UGH 4)0e6QI8%{W0-ڋĆ9`JA3HM7Y$ Y!Q{e'E;b^Q +̴^[M3=лS)AH%Lrf0n  9 /Zn[0 ;{QO=ւIk*dIGőJZ?W}cnݎ4vMIDJHMk/Z8(>(5K!?%">vFdn2,y_4=:~(^P+,c'XoCjMMUIKAk;~". (dk&MF]3U<0to\|S33oH1ɔ +H^9!K+LWFk^etwn*XHfF~ĘhĪ 4JHBDDZkw<e"R]F{XKMm;yf-mQ h#5[H4śy.|!uIJT,J; &5y_Ӯi'S˘j~< SJċߤ+%06C=&yœgu jv#Aa "2(X6M.01;cQkSb"YNh?:=L\~*%Vד8]^F[c%\@pi'Դ bB~Q$(I~da 3j,t1*mtb3 vgeڹ0񷊊Rx+s ]yo[[2`% -h501HΠ* {.5Ň\7̚Tw%~A8PiGu#]WopbǕ =Qe|!h[ )ӕ\L2 +`Z;aݷ"Y=ڵjU[z{v"?¯BǴ䊉oLn= :Qݔ؋)i/U>|1-:M_ygX:{QZ䧲 c,ךn#\C [}dBWHUPVA,LRN8) .% \Hb."GkwJCp4sM; 0J4&~5()_ȂFɉ9ȥue?:i2evrBżȒO> ~QBR" J8j?AI0U1a{ 쾦Aq$V*F͏GJMWRrH6(88hnJsqseEJnJZVdyKAU %u/%D"DGqҥLNId '釀: GT{<Kͣ5FoMg]h KNf8')VBc; _Q,Fͪv>*I%q0f[(-7>>huƙx8"$p٥oߔ" ̝馗[vy 7(mϮ 7-aR}edމj c^~8h唥d&SQՠd.>uץia++4"KnjҪ[ImmH WW:#zJr/-|DZ+tfz}e4x$Fh6]V/gv^mO5s~_Zu4& :m\,` v +o2D\Aa?MaE }DuıOJr\pPےnoOӱ_zlٞ‹y F\9r&l=X +FGRn.W?1olqN@o+XqT00U/PHMF/FkR:wX@d\7Hk u,^iOfzP:1 Ӛhmo$ZÆƮRi6(csF(Rz J|Bl\HAExlh|F2* +Y)vu#SS`Ute:#3 +|͐{> A+79qgFܫEEyd9OXb㹞zar˨Տt] + ɦop@r:ޛ*SmlI7oo~*[-vwx9Y~rvֳK, e?z{rΧQDu,n4[|]aB>Q,~qI[IzL|h f zS9$lnOg9ͨy)WҫӊРR˒ H% + W6EUL{-1l,*|)H4Sj$+Ryߒ},k+MH5y*~GVu`๹oezY-52݆>2~rֆZ2KEs V= oyy>݃Xe^$fJB!f<w%|c`jމ1@ߎ8Z.J/IT dM҈@r5`G;n>{v9(#y 8B$T/צj*0{NR2vۢ(iEL$tE'd`'?]f TQ(f(va&#;ʮ-y? +pde@vjCMfUj@[Q`p4 >BC@cByjn'E ^NP-H/jD֝nhw +P4ۓHrY:6%˰JoǟbweSmH4a!*b,qO Y-1w?8ocqN(ǪeG[RwTSsHrM{쀡*]ВI"5 e`ìOBfWD.`׍l$j}X.!hw"hM"j6);ڮGIizctK ~_uy(ݠ/5w&3<ﵔENnAYRjf'ńdT=Ά˪#7s ;'F  tgԝ0l=#1-he#dkum|.Xf z 68+yt$^gqܢs78̩O8k7UwF~Ndہ_0{X^֌pfp + +qE#@a>"-s>cWc b)%nI hD=)qbg%Zb2#F- ^-nu>Gd_xj7"03Ρf HN(J?O Gz)m`q\kr<)e8Qe0{T NM*ɾ^3]Ҙ`缙ePR(_W7Ck`CD +DzaTf󞪩ö:\; ~#cLYyNZx}Pw8(>n.k~^ p> `GaMzBa6OdK܉׶c{ 66Iߡ@/%jb7f-^|"hG;nʦq ɥX@=To%QFecHTRj#c _k[[)Ďf5d=u+D&9!s9t;z-Q"_4 '猕L+ f}bZGҡcUaXZdL|XJbwMMxL4QxCڕVFrO%wr+lz+JLsiM{g1!"5SkJ;߇QBdrw[No9g<,3鿫kd'7zνяSD7nGpz"sC@\ w?6S]lp*X^@Xѣ%mgK$x^ŸT-ixvTt-_ӄ!0/RI_~_%eUՒcQXh?۲Y|l9 3>d"rѺYd`~u+8Erwťsu VKʩ+"WYXA?3wh- {)$L.|+EE P?nٶKaJ/BL}n- wt1*—Nk_O4<~I|?8ZjǶUDg&e'*={E$0VM#{ݓeRZD0VVn'`U4Idݪ͔`ʼB#s  a,mX:Q仌Ԅm.gpf:=Y5!}/ԫ؃bm,z 1iK26{$s5//]yGV/Dz؄,wxͿLW?٢1'\7jB"^)A&jeˮ,:v?Jƾ‚+ S^ +,L ? BUqNIH4P +fy +M`JA _p,]-ތnGJ蟆I Zο-_`Z Hl~XPv@l.8a} +fz\zۄ6Jq~ŕ/ rĂ~bW0@tnA䏷ݭ2cz¸u f/*Ȭ4Aٲ @SmРx ;@ɉSW_#1/Z}eP w̖/e1f ؕئ'o\ځsJXi~4_!Mu?nnޝ&vSlC#ZyZh=5FM5% PL,Zr([jF:)-ɊĒh&@b/yjʍP]Gűu: B3F=Ų@P~D\| 領E}|ԙj1~ dN=i:90Jd lsC`-8q77DBO' .tWkF9|5y˝'sqDcf1CmR#?Մ4\W8( Sx9$RʦjD)ZR@1`>M/4 +$Mĉh%1^L+boFdt2ء%*¢;TRxHqzpvP̙X| +OY%n"nt#]Eܨ^x<L߮:mXn/mJuH877DţdL |D!-Y_;5 H1D5e[э̛ Q8n >ƫ( *#١8$w )-WTMb 0Q3W`{be&/=1mXmL<ܫ5'Q8EVZh>2Sgxڒ{{Ueyi n*-PAWwx4-TcUZ8`Hɀx +&xA6UB;b;m& ĺà ]Ip$ +u'4 (.6S6"l0œiy!>Rt4]Q"_2d:{ ,A,J\` &&{DƤoo}ZOAbΗvz<hܭL:9a.oۡWGEFb5uk-XHN$,uxw dqEǽDTydu·z94u]EWvځ~8oٌ}<+.L˗s޲R"CL$S9*5oFɉ*< Tg!}4:ˈaܛ N?%QPZb Z~z!^A+TcW8rOa3Ie{ +"|߉ybʕ5j Ea(ySJAE80\'mL7a%)Z)Wwb_WÒ[((Dw;kv`/+#րwdx"qC{՗韼y>stream +Cm; aIw?og(V=ɓG7.oh1?z +sptXlՙ=S%j"}KD Q`34 j`ln 7L[V!Ԧu*0z@;f/l΅?Ǫ@PCof|F3ջ9xj.o௙U֒]#5ԉ8tt L!,q^}x6H?D8iNEIK͓|-P0{jgtK3uUʾk$D>4tԕc~dCtly}>3 UB87 ~skq!noxV9.dGg-vB8z<0>3iJC'4q|-܄mrKAW/vJ|N +n^'zvlgYկ|}pϔ-3^CЇ۴Yɰh(QefU7p>>KCg<;BtTo6p]FRkdr I:aIpTeҫ[qi)QOoOFQ~G@}}Qm/rfzcꂗj6Z K ]%gz%r&]izTуZ=MQ6Lhfҡ^%NkH8I+ans*a`|}i`ɫo |oHF@{EʃI`8=ުGzjZ "!YnafD2o}fv \7:~W*Tr +4}:WG!lV'7Sh*5$_I L+d+z3N& fBeMt6 Ok'NZ?:#MXv́$4UEBX#bUQrAU\H߭ڠCd] pS59$~ةJ5q^p oT:d{Jd,c +,ȇw#KJ>+QdQ?G,v>c2%nzD+FqG)mpY(fg˫QۨcL*رwDzw xPH n{&[4BS:({$ajn';p^> 3nQfVYLﴍXG_tR~& lTSFnJӁ:t7nyQ0x)Yp@vglۡ(#O-C_M?-/=~hn#bb7Pv8TMa9BIZ]i4)&oRJK6'.1 l,źU_{θbR!2ǿ-V9q$5.z-/נ$FUm@#,Z(w .t\c)Rfy[YLFmx_c'LkcԴ7Sd'M +;`]pX,ꅶjB HkFdqCj@ qטttVw46H9APY!|P6a47Ҿ fe3&sF&ix7!T`ȗFf/LVDY|:eSeFlX'˥G8?4Dq喛ٗ⣷bKrNVBZZuĢiìB^29uԛM ؂- +x7ԈVQ~'OTEAGHă  j3t<3*q^ e(xwwqP C/nnh +M([%)m" *} "͊%oIFR +A1Ȇϧ~Q>k] awJ]$ŦuvNi;wOgVG8)W6 +j|00jۿ\P{K />S&ۅsv9{v E6W7.0mt\J^=.is"6twY*#6c~QX+ADSv1|$=(M׊fRcRZt4[Wuq^Eywfx>j 1̔`?&Hq]t3sJ$l(-,|GJUv\wiuqz*J;ItJ|կP_|nIgcZTɈ֡yNw䤵"SzF)R +`+o߅y?@#C`W\2iF=XD5p} +%`ϣ XشAaG'!O +OT[}CuYwLJJ/]0|g_oO1D2%r5w^D.Σlw1pr~YH>c$V(U!: (YAKO"51~hXdl^ZERڏ=6su0Ca^~Ik :7 (U f(\V!OF4JLǠ}Fxz{?;_]E2 +&=V+!1&c.l-Ӌ=E  6{vzni5 l 3I* +n$Ѡ,Oꉔ\e^m5hJYk*<ֳTvED z{a<5-s-{KgȗBvy}W0.; ܅woՊA+I_{u(d.@J8:m m@H@e瘜~dD`*?;kN !ܖz9!eb`a ̫[gērK9dj on2?yorՙQپ>ɮƒLמ9~.q!־!/g_{:YnݝX5iAXM\Y54>?D%ԳnAtB.$*~W!3MtͪRh +:^NPF Q v95ʽ4y0<%kñ?o?4VVBaՅsPKÖFV[ď2Nux~ˑLM8j) +,P/}NN吃!!mҽx |@,2;cjD)= 5a>W& @K쫆~(Ar$[H0sYpzޣ'h󑘓y8eBAm=)o[\ Q=`[;>ְ̆'Z}hOQx&b$[8|6xu C~ysccmu4\!ՠguPi|i)bV?Y_&ۍ*Ѷl7|#7g9M{ȉA.`2+p_@:s&FdĮӂpuuɣan7X + S}zN8ul@R>x*ח$%PZvA5a!dt")::-yse$<_*&RZ%a#cj͏uz(]N"mEyp[O&gS0TI=(> tE#>v}Xڋaaugy43e1 ۊ a+g É\>)f%Đv+f JԨZE+{-Bw$ YM}X3 ъZǎ7E}sŬ|S^tBf"^g,3:9;26\ds#(Se/ncQ n塒M-NЀ͌e*%z[%\*Ȇ y7JD%ս6t&\^6FaܞUY24W,V׊e;n@ڬy v 6[-8L1\hm+#I_u U ]U9z #L˵LNo@c2IK sQiqIUA[Ǖ '8!a9,h5_J&sw:D׍*-cZ {~`ñmޞQΪf#(- Ӌ?Bl^0,i]R{;Y[O[ 3.@LFhR }T}l89Yx@ g Pk畱;6/[̓ !<~w*aE R=ˠgt >,Lze3q/x*4{#7{@+u۹4F_i"1e'( fUS"a; x7@&ׂ@dm{PQl;fphSMWTO֐.gM*9}j]FBO]f6EZ,棥I4"y~er0.1DEU;"0͌5kʲ.t/3 `2 R=P/na^&g""͊4b,~>Vn}&>aY\ĵ)PXT\'z׀]*\(Le=(1] +i5_k`Y;K>fVLɝIG2ímFN*W ++§2[# +(̔ssl7aRorp 8d@8cq 9 3Pn_1"dUi8:dsHSyq|nz&3)- +4}J4υoJp +:﵀ߛJLW*|tꡇYKA\Ly-$n-YO +aJFd_$0o:ltq`⊰ȩdXaK &ȳ"5x)ISR DmS[厲|~.+âEY0@ /uQNbQ4 "PZ߶|qr"p]R b˸0As4eS/O Qt2 ՃD*+WϾ|漺`P$qE.71_/AT9_g?!Bq>y-BBBTkTz,jUF&S~x'qmi?L5! +,?"VղI̵gLjkGûRP0Ֆ.˂`=ڒzm05-/r~QXGK58dq +A/9vLX*.* 8,d<"Wۅd>mW^UQ!K iÝgXgzy;7ѰM*?mv#şcC^qp Uou:1 +R؎c;2wrXIv\ƣ*>JY䎿lcSQҷu6&72X"ͫZp~q1&~Zl4MWHvdSƃ =K- }ة~oF38OZ/lp X=j}:>e5X5.~Y^(yx›G{AԸˆDճ85vPybR7L[92۹-]~'rdWwIO7h-5,uiU ߄,WޞޅReE*%٨d̸=īG.kVk:)eK_Kxm\[bTʁ + ?D9|K(3sDgeNmJ_vG&2p/)LpU +2PׯY0㳬6E<#po'+ Xd],Q#f +gTL2@PwY3fk07/ #`9Genؕp ,ڢ)lLP?Y¾sNݞз3M-ʲem3mLDru֢=qާ]XBp5$Ws1)c@Ϛ=rⓊ'lKdCI0>SFh jkQe`7gR4Sõ-@^ Ծ.4Ek\747} $ԌL(및6"ĀZ6ͮK6c`#-;{IvwYsl5f?P q{: ߏNXaIe} B+"+G97mLͩun%s;:-a;|S:)G.W䫂dbD GiݙAeg kHg :}Ֆ@yFW|/3bNT'2?%`|ys@E ]pcwg7ZCηxIʎͰ OSrxѳnDQ?PO +>{_ v.䆪AV&7x(N +Y୾a~ʯALN?x BRwkP1~p/t0csi,ri:#'σ~Hmuy=ԋLH.  n87@i):7ZOpyX !'WqkB>&&IG޶.X*ޞۢ-Ss~Ŏ;>:medv--(|rAK6P=.CqտEDȞp@.o2:.-r8xt⎙~E +r#!-=qJ GmY]Te@?c{<4x(چ/o,$X2_Pi`4w­ 2ܖT=[oޭdgdј(|-ذΫ<4<e@]/)݀6cpE&^ظ4A7Z 3M( /Z{-]I&TAdoT@D2Na4$a~,6l^!$EXPb+ 7NJjZK,{/ %]>jn-L+g7O1OfX9ѸW- XWr&<6a!y3+oV+jC#,PF:* &-QLtEرAvy;:{v͜3̨БM@; "zuĹ i(WDAhxa`'%*BH̽o7Wxx4Exi'HiUA>C6d*|⮑x@(1"sVC*ci%'}y1 +Hf0Y^2&!!L!܉&TD 끢Ht*J:;[$P:ya +ذnEEPsqkpcZHM$xz\~Xg[x˟T~rJrf4ljL_r W_VVZ BXA2t2!*ň%+"_g^INI8}B-N*ySFiRhݽS*/L\m2˵1u l][̼piEtST~OJt#p`{1Gj@VRf.CTwn'he(uA$oYQwO\H3M9"ˌߕ(GU1EqI3߾qLFIY^~HՄnr8ãVY609`&;n q᠗oub^2>0T^e#m nKE &4v ]!yQ:j.x o7eIag'I+~iq4? + 2"$]m1c 1=sDQ_H,6DPJOZKQ + Xu`<c7viR{]ղoLAո +Ou0&)R86w?^U~ieb,_+xAfq˦FOoXz +Tt<l_6#y2:`y dg.Ӫ%em'}'(w\hVbvpWs}P%, MnbA ] _P7 kW_}Up}h;`wsc8)}dɼ|x2=AnER2|m5qs4v$<xxՃ̛ň遠_{YS&a٦rbGbN*} !yB  rN"ںVcDeot0|A)Э͘R$cgw޹ Ƿ"KsA5mhp#&/ouEFxQ*/-zo}#Ǚ/HE5.ꍂ+{*+ND+UW4PE`&E=&wgE0DW|H=U1u@X5#DFR>kzӇ[QN8sfR۴}1Y:DY a' Eu#K;$sGN;~e +תţc<3b%#jHs׿:=UE =$IK9+fX?7{K}\&Pr:je\?Кmi'׀a0}Ǟq:IO0-Hǯ}Y| f,@ίVo<֡£xV]o]%z $Ҏv[3\ f@H2c][ǿ`Kb<yzauv3q4pfl[T<HkԞH M +hl& *y2<+äpp|#PIΆռɅOa'ՙVz#!@}=Dݫ#^.*0< | B BCv OXCT\׻H8Ua}O$&w *g0I(Gh 8G/0ltGx:Q`pAw,cC 77KiW(#š|kQ*_Qj a?keUBnZ;b|fwɻbt÷A<C>^6vzX%T0 ڰO) |++'gR[wkO#.n7[jz:'3o 4`qNJ8d{J1򗢂rn "&މ>%ɽC}L7nE T#P_/"%.Yi@p>&`-J-`>BM)7Qfó 0ȏV[C+2F4.bl~)Xd~.r tޖeL>&st NJ0 y#%$\$> + WtqL-Lƪuv8h8׽8e @cṼɝ6Hը6-C2\&ߓ܅J:ԸE=be v]ɐwj(eQFʡН[#%3i1q`)w5:Шa!sMSB}0Dp ȴ"ew Y̽줩BȌvs/VE +n'f{y~ћBx-I8غIU:d?dzC~! &'VX%P"HlL6ir{{ԇ%I*lny%`lK%.,B"T M[D ӟ/)113fG0aM6F AP7h*U?Dٳ?;_H>pݣG !|yۡx,#^2 * *RIܙ7 +  R9pBqquF!1/S7tQv +ٚ#8ʣ86 s e*&07/?MHaidI"9%c׍\e*\W{WgN8 +lư]#Ū?#.اZB_6p! ږ,ܤY5 #)< ˔:['A7~{VHwn9Vmc@Yf7[7"~ +b"6*J +"WaƷhx|56ݨ p?Wfu{:u 'C iukgX ESqcCny[LlRϒ_ϒmwp\5a]]d-Wxե&뗏Ȉ4wW&-ճ(3M50 KC%,īB 2y2/XZl N9?%:H'ޔBt @De)tpXj 7LX2^"uq2PY/]^J oE>_T/8k:G8CՕ!ȶҗ4"+f\NqՎL6C6CMa"dIW"v?wzi$b1W7o~$~iUrڥ+QZޙ"c;T1{]BVmت&w_&k=Űe whL#O9U` 1%rs ޕl Oyz؜Bi✑'N'eVKw gP'KYzCC)Geh ƕE?B\`3u`l:|H P^c;ᮍί(%>Ι %S??_t.5 פ$n~"+9*kWio,~};g߆C1T:'#s:f'W>m gwȊbjtӳJ`PrWj{QtANWh[qz:Y\&]#&1?zrny("Mk2&9>ꤵ cg`13 J n86Zc!(McUO?){`t‚8oTq hDiNٗ&Fébz@s +qPW+orJ%pD*}=͋C\2crp40s^]O4ޚ4Ekޔ.aIJ&8v$kO/a&|IJ7 ιILM_Zpꟺ{,]D9gƱ6\U!:d/ӌ.9dG'^dPeoÏۥIJϬҾ/D݀~@^8cf%#D)5xd'}y~mWT*5EaPDr Y\?T2PٳSXս^;˿kz*W94&%m2!hަXEg#G㑫ĉ !˶7%x)8QHД@דF/-P9ok0)0t (G!džu> RSqk2J\RDѡ;jxvЀ)(/=%MXz|l qKbF7L}ӏ0;Fp+LhfuQ؀qδKq&U}QҏwaĒ,, _@YLr{Jd zUwzR7z9M%b7!C=:sEr79K (8:z'D09ޅ*Ih~E1_cdf׽o| anx5*KQгgB8?_p<6q'9 x혎;/Ҽ":N)x+nĐL!MeÃ^9m$p`^TBhv,fp&?58>eF.>𽹋}E,Ig5ş 9Qd'm%"џ'&.Bz 43VeBQ0 +y"I,DQҒu7J7xȱ26fD= ThBVwo['R ޵ O]OMhȏ#GJy n`gN)],Og[zQYBg"j n:}XA#IYAZ?x6us=n#Ɣ8Ƚzf꡷DrMB)SfBع>Hb&WKCֺ2q*zRvޱ1 SH;B9]X1E䇈E={_ PC:?H/ SRw"2}TyNz2DYNr4߷FŖxTskzm|^# *8NnT+wSn52RnexGgD$D)zC2YN$~sg(JMRID2!G#Sc"(Tzso9IRG Mb>Kk)!6pJ׽taØ `PgCiN{G3Xfx{Qkl1.qQ|J:/+-%sIv|C_S<Y?s`Y]c hAeT|%O7 Qi,ɸ5zA@wޗkSKBs;XfaD9A Up|q* QON+$WL8Fԅ2g7F.J_=DN]B}VKYzEvER)8Pُ ,LSkTʢq#9Vh'.Xa|kO"uG=Z4o1ٙRmc$֛ IaP;p3&@U`fĀ5҇1j(O#u5pSE35w҅0`35rd|à7~'9<yï R'fTZk25Crȇ/UzLiR_>j\R~n:u{ Bo]QҎ_]H_^xNr3;I+lRe!*[llIBޅґ,u "9SHlkQI;ҏ<{[VLu +Kqc!NܝM?sh^ы<2^&p -^V}=4ƿ'J C oߓkhA!WGwCu[Nrb5,SGa85|oˬmNôR&U;f@.=NV* .]cۈXԯDSJ4҉ll M-bt3oV` ϭͧ)!83nnȬd▱!`5.iϓlӓ[K$sEPIŭe>>Qr;dіAmb7bq %ssAUy*\(s)~\JبϘ4ALPڵh@ ' ${~ONG#*NAĠE.`^KP\=??OcnbWy +.W$=5BY7IQ u/H@0Y +OƂPE X CaWreEBk$Tx -ntQiS/,AZn+4C>>b]KSc.+!Ccw?tN,#_F*/}lb]֎3iguM{ŀl/6rʚUOqөz_F9,nzN#H@fHD R"0#e 2Ӎ~s 7lQFq~S-d.tTRWk.X{tJ9O|p3 RHl-4&sWMgA~s +xM+34C>QzgK'jpɞyl`LQQ&T +?xsi&o;uj GVluw piIlgl^qg?GrE]IXN)bdeօnߓy9ޟ^vjÛf#ЙpLKSpO0pq> l:2_Oe ?Gn*h*/a1䭫Jەs`F 8 hWܒ9mqNĪ$<"@7Iɴ-<ұP'-/vR*a_AEۄ郢gԧ{ކ#F/;/aTE$d6uYSQ F@ +UL-fXu~z5H*42UB`TwGuKY={+S VpuV<*0HQ-7ר}C;&p|iwĴ2. w:ǯ֩Y b6ba9kߤTNG\F*},ozLU:ˁ~HLa!McHP T&omTz(ЊX34{RP3 {њ*a|ҦXV?W3N&z/LvR{Pq/wӍ6>[jl?ѧ'V +G<쁉I wq"g:L`/ b!=(:Pd`ITVGՒXf<8ؑV3MF6{9L!AYO5kwpj'\it +3F"YAr'VJ=@t/6F="RH1ԑVtSn+ʇưr՛z̯^'.TkT{]t>SO )@G} >TAuD크_q/p c:z%''o7)UH;o'9}Pp 6 8nj!L[Hgm =>BW6IئbsSQ!|Q +J(Zg< +uNcqLYoXuT{.s3oq[}trc\C`~G5NHIH,aշqQj(zV9VYts| ~ntHݲ|zfzn2$_aWtykk-[How o ^]+vp;E'yINms&adpYOrhwcj3B' n>Ӥ ʹ[EY``%jYOfeg ŇrO~־5i +#0z:z'#PJ[F ѱm>̣T* HDBu׸ VI\2M''0<G2Kу3@MLqg Y.:NVfih?9kwdD8NwcX >~}aґ{_oMcN*3u1Osom`p$rbjYfqPkYn/ uAK 8$մI L 4Wa8i-ɡq+;c@MZxtQΚ\:'s p7~GKIR:?sbtCj;tD-j +GA`ynbXapu!zաS +ɕq%-_ct`ߘw6l% J7PtCApao'kQZ{ȱEbl5q1m*9@D8ewiE +c ۾ ""3aˆVo뎡9deY6|=zk7;B Xʝv:cǍHI:\/3ID{4, qYa 5]r@؞iyeIx +F*JoiBkx ] +D +Sd).o"miM.r8B9;)Rr$HPoi]ns.p~SW +wf;8e ]7cK&9߼}]uFXct~]H)2>=ixd`kew2e@NunvxhZPi'V1FPB8AJ8)眩2!u4JD3X(zBq}~!tqHYި[S7KЅoe`jID蹫itIwytϗ !G "2ꍼ'C`{QK-ߖqyۙqLUO\fZaxKDfAKRMzVݠnE۽ 4L8J:D%&1{oN^)TB[ s;5%J`sr8GLOo{GqQck>E|lk~M\*|U7\ʾd+/LJ 䤐 >zn &\v%H}2JgbjQ2g(lbk$9aJVݲf O$U&/2_q*15\}&@KpuT pǂmqs3.~Ճ{0'qAX^f-0y"Ȥ¦$,Ųt0rp'dDI(c+9]O y`rXEDB W%5qGV:L?59dY*TOs;u}EB6U& KJ%&S"%zq-o RD:W=a Lš /5lԥÖ\p2e%3zXTҽ~Ưn Rt#EgΛ.dU+0 ND̑/|;^bg(JUeE]Ed}rWyx%4t\R~tN#ض7F Ͻĥ't:"Hi3s b}`sY;kfܮ2k,*NQKC)>,O'/]lC/FR=* rx0Q֊sep0`&]11xLl"ÄVԥdfziƘiE:rRGmm΀jЛ8Sv4[A$ +"bl+3MFmW)^MP*h:@e&`?zׂ̀LgH\J^f-귺ĵ__Yd8"HR +CW`\ !&Q?U?'e4tXDC +K=>^ߕsHEyqF, J%#=/;S(rH)ESwMvjY+bzv% 1|$$I%#E>92J)JnLcCQScVn&Pn<&͚Gj0I~c:h+9^:ap[4#* WH59&"Ͳ{8iuT;u8NGOZ*S%n-}[ܭ /h٭Ev,ѴJw@; Ŷւ34~z9x +e^<3pKpȫ 2eD9:qbĵs|wsN7_\XA@Ǭsm0nS%!]-hݽ2&ld[p@pלʛmNyM5}Ԥ#j d>n d̘ӛ!ߦ&׭C]:ۭ`Q'7 z,hſ 縶U 5ӡX$'4 fYjeouCa8O&[t s0[yV)vI@>⷗vngQ2Ԍ' 8w3!/đ  rSn ++O0r;yBKGXeb#?9hoyҮ=!IK-!EAJ%Sce1Yv\G6FQ)b jty>jf4~2BDJ.NnFh)̅KJࡪ U5rӏ\+qK%Ҡٰ>tVAU:b}\3wW뿬J22nbR)n{";uetriT5pfnT0eRL;Vl>Ʒ-%cLՂYcPGUNt\ +ݫ2Ē;&, W?CPE~|HgzΥ[~Ɇ}&}G\9qN7Fo--h接=@c9Q4VcI'.Rt[2}>xQ'{Ʌ~;ÅqG4Rgy]>%2"^:3qT? +Ǽ9ׅwh3N"أ22CbY^)]cm Q# @q8A?` O}qb6x w+, ~z} ʚujU7d! +.*h c)]02~q!^fWɏ%zYxP9l26$rc> Qr Z]r +;΃OuMw+(`Y421Rm^#QW^EM/``u.yߵ3LX`bdqppA8zXdG?:VmbU}H:׮pb.7 )vUK r7>yG3nP Eom'̩O^ػtC*4%39gH>͵n54 <T#N\"nATw#iȢy7gt~er>̲"?f[P Yt yG~AHz7f g lTJSj䴅'QYrSYcqں [3'5O)8ƹ-}c[Wv xki@$_4zˉ̱~=om;=e']~Ul _`~on@^pU_O\* ^ڜζ\oe YHT,nhE7Dboy4*ƝQ B+Gm~{bfoo0UX)=G% !G2bu ^B\2%dM(ԖYFc& )u|-6U|갴{i|:wLnE%QIt!!>$cC9zJ]^:Exmf*b@|/&f(uCثOt/IiB0(\+DQTanHiAx(rKixW۹4ܲBkp*9gB t&zxq|o_ޏl^ɲuKLVaqugDxf1PkB,_IFC2=(H(r`cH@:_9d Z0_V\$֩S3aqga)zbpLB"%-61pGW&N0G0P%=IEiz(Ѥ:fW]aX>XH 9%hauC_R`.S@09ۼz`eݴ+r2k(U63q ھ"a!?V .bI"Ud&3vuʥB"ssJ/znu#t9?ڃSU(,#Ym7۝v*X,CEiOqn!ĢiHe c1{gzeW:/&0o7/?7:؜eX>mO*a7ʜ1a 0Z7N$n'F*Z}_Ŕ L4 nSIenW4!se{栴QS'1 |舘,{] ]"H 98T"9kEwoͿ5x%v:/UdvbәqG?2Z-n7/fKɊi'p/~}]~-nد6xJQVJ Lmp1jCR2ɮӷPʫx!vlK,厉2smyY[ݥӐ{gHoo)̒\29ł\.;/-۾(:@(lsݗoB|ݞ^VJkMƬ +9+n9HZ}Бo߾)a⮒<6Q2dhl +ZY *4v"e}3*[Qd#CCFWS8{;}Cr$m:s7D%PC([w0#(Ɛ\< mu0>Fix3sCma&۸椋y +ĊE3ۊ,}cjuO52^%4d֛XZBuY fGTV%VM Wݣ +NC#;P@]x@?9`+v-8|Ԧ]0ݸ[ތiI(oӍXj'W@ڿ*il%̂!mY .HuWfw JnNY9 .P HE(9` ȩ1~QUl=Wvo,0Oz{tX!ŕN ieE'Ư ߻'I_&9?㓻# 獓E 牟 7OPc `UUg䈃Ss̮3,唱"w%OsŜu ?Ը%t)vkxpn,s@}!I}-EG0rhm/$>F MNbgӐ:VSEw",Opoq[\'bs Bخ*G9C; +{́BZTI_58Z"nN/iHHvax|s@z9 [ uώzb]34C2Q`Qo2K,4o jғ bU[JZ*wݹ,Z֤ +&n [#R`rP1clPn|GrmZ1w\}]i*ćljS~WnvOdϼ֖l i7bcb)ɤcO9܁.xe1Q'ů;f Gx:{;M)6ZcO@*_25jTNU=rh ª@GQGZ mOc/APaj^e̴[6q'X&eIi)pJ8ahY#DsS++ͫHD9uZ)Pclϗjv|Kd龊q5GȐeA6([Fq4ϼZMƛ`t^n3u *_$5h  pZ0hk: ꓠ{:4]֤w`O4ԥd%1FbNq6G5%6K|=0hѼơqI)"~kE5[HkO /G`RO.>Y{MRC' zZcvpn+GzڅVnww@;4^}U`׸)V}NR*i:R[VeKVMWƠI8]P# >@@0^NaF~aل04Qr~!tSc m.>.H1{b`BL<埩Y\I=-0Z^jJYqUG.%ӓ/TbDմHY?HLvkkpҍ83Jlܚ3,PV&U28=Oa!΂ja mIۊ+{3sO<{'Od,%JJ)0q֨/M9^#%QFhc3mAm.TMosZRwwDvYOfi;Mqvه;7sc (7]#rS|n0~B' +^jEJzN\u \fQ+^[Jk'ko)`sUO٭+W#FAR3v`\WWf/L +% 2Hdr5deDI! 9}Ԯ߉:┃ H +;4y!&A5Z^kl$g/=RߋN]+6AA`<~'-fa|qKm :Vۮah(ssg^88{@TyԶ([) +9|4V'Փe4c)x)tX㞷V7<$a.\X]cIDxC a*g]_#C]o 6);Lq=6`q/+b TTTN)0|\RVBX*W"@:p\FJ4%z LE;d4FyK p# +0'G]ż8^sDq|t(ac^?S;!, +endstream endobj 6328 0 obj<>stream +{xũ7HYsUF}7q +lϏ*f ނNzKaF0Np: +kQ^NsTgZˊ[V!MȅJhz7,'Ȱ٣Sſ\jlh32RG,cgr0rY7@B=ieK]*Ej"p`ݦvANKB,h=]Gވzxd)V]rꠉNcJ®o@gYB  } G6aDxAaw@xSrmZՇsUݰlE!Fn+ +!)hkm;CGtAnҔFLR@8d%V:]hnL2sn3ᆣwn߂:9Z 5b/D!Aȇ;y$ GAtYy$Qͽ쨔 W(yꣃXFG+@p.\:çF")c 5t7u)+ ။r>;1붵/U.!u::lt<c5|:72so-FruByJAcrC5':0MRl{<9uyKTWU +%<;J#r@hrMhZښj /߮ (6~+:GVPeH3dp@P4b=FQrZ}:u񀚒6I4,$jC[ 9#b?cV\لa(At60?3o`VbI +,^+"ۃ9O_NkX.sXi^t k~ c2xkR 9p4Msd7R*ZB“7iM(KJ M L!RPXqfNx(Q=Եӭ+قtMK5]:4>/^܀5ω:=^;b`vFfSkҐ{0G\6E=2;.Rrr62֑`ަܑ^^D7DVZ&l T6 h(cx0TF_Gkʪ;b`5RU2֊NqtVqU~lڞȳ~r8;_UǼHQ.g1{L@"PFj^7X!)~ZIkCWK 3mT1؅?P1ǧ]l? iY3ȷˏ6yib1t_sxl]i(֝f|^O)(rMhB3mYFr+y'otpy} ؍R LquǏ LԏuBpFƞJx˿(Z-IYwlx +GVWކ#[Z:SlaLÐ'a+Wsh;pA&zx[#UvVv蛪)H%Ȳd1Bj y}$S`_>hr֡,ձ"ёr]W0xȴ#^ˁ1awMUZhU6 eى^Uެ#Nf&B_yeXʆwyw%=m9 +C vax~_6NXQ9awD1[1PDrz2bȸX~wc- +~po#T#A~p%&$0TosUR90J_$,y4zJ"Ɵ`8] :S`&-4 %KBw~zͲ3wCyƵI8© +FurJH{ eMVd`9<}[>?iW* +U ҁAs0IP ?nIuCtH##:rO(pY=NP9GFry㷎VQ0UJӇxhBk/ĀPPVLODC e?ߤR?fUTs_{E"Z4&S4- 쩆 їE>" #'!Q*{U>ߌ :O[6^_.H+ YY pfF?bIEצ@-aA=D6ޮGmEܸ^GCF +R,@O>سЉ@m3i92_B0Yv8;{r*|C'd^Wꊘb7sqᣲ+ZG ݭ@G.[VeddFt*Jւ c!u akGHaY`~׎ONς:C1.puܸ?-1}%kx!e"s,C;E^CDw47ܗO'׫uD_UĉJiBdN+xx1yoi}"}BR Zs$kW԰rXb;ُY sꐈk5<_2#b8XHNb_`C#{Ȫ !ow +%`c'FH;9rcĀǀSy|KWH^[L^gY-q-CL=Mf!Á/.լn1VžPGcɡBn\=q癌*{/ũG5 V wJ#ụ)c?U!XhipkĞc0E$m{NƓ*zN`e@V\o$ڷWg{"%A }-@Iyƛ]_=W.)oG+dMћk½*,pbs&USP dQ}?4Uߦ%qJw\B9\i\[6WaT|17׭1 { 0K[i__w[J"5 bwz|0)A37{=hzȣE[nzٙ7ʉIۚ"o;0BhӔ/{|Q<b&kkC9FL:Wq`V&ȴM2L2QP PEJb^;_~ڋ5t>/كn3Q妚5 @z͜,hT +P uJp'}w;;CۧoŸȃ +T,s系}:ȑ(z1J,<$)0Y5N4` ſ[<>׶`Bdc&5 jl0'S w!+nXR~B̓U4'+SQX-:!Qۇ8*@4g3MO™ʌ$Gwunf<w.B&5"~"T9'Ţwxs\.`>F7p}>dg^T4FQ,n'J)՝$a׎g'] M2u;]K^+'qP>c +tS7sxH1ARM~&ٿp`@K +6; YfTDPK4';r:ՅΜ9m8Ur,l挥a_)#52D>KMe"*I 0][a T *I{KFXzH)T]_%QWnMnY% +9YT|,c0i.q($mm\C3$!+I3߹>Ѻg;,y1n-E͢a5!UF&zv AhdZY;0*PQ6m7[} Z|.X$8 w.0YzèW_c`^%P9g-oӟ(iκ V|#T> +n߀pQ5_v!4x%\BN>^<Y9Qj0{(me66Gs߯kJ)}k'hmcG;Khٮ Gup_Ekln=Ū\֏uWRup?px RKHz1:V)K?o.-*M2 z;+c\A p ~/`&Hh.PL}I-0m9*mg8sЭPOs^пIF{@܈=_+f"(fBajb.GC;1tǃ6 0{;m0VfRkugQy2ȣNԿzjк̒KQ[*S%䔶< k2)^L¬~InC[uuW;k.S O='xv嘖;Ak"H)9D>~A ͞8lzmiMUxN-toyT4t=~7f#P~BţV뛆MYsC:6> 2ԀJz rq ﹍qP*XZWGb11ˢ`bGبI9X{a4>A7 0OeHt-w5l*]bYMҵa (m# >t42ljQK:eV4vG<;J[v ?i?#͵%>򸓚d2,^C*)](]*R,4n"s.z'klC L*3298A]X[%tXZB,ĆQ5jķp[0 Du>OMc~ZERWՌmm?;09Gϵ<\+T# 4r:Z 0{+R+eR]U2Π)f2ASt5`AD?lPp7cMQ8\*%6@")YPkj]Α! 6~.Jz׼CLfvۛ Xz~jڦ964s/~@{B8OjjgIwl|C[ A՛[;FbE=kiJl%|,xc꩹>Ibif"xDmzakDTn}X4x+i%4رv.@Uu:p5! €Xr/A_Z{k7+d7B: tW8|#z0}@,7UKn4:3W,d\qKpa`є:]^I1zJJ(^S?ti4+$!9Ni/4!1?^W+4&7d[=;)iAM#;'C&+-'EӨ#Sd&Bew)*κZ(AaV_y~0ͽտAT%z]l߫p OD?G{}mbR_P֊콺H_=xtMKbiIѸ:HǓhiÎZpB^.5+ +-oVJGJSLK Vҷ7B ܕl<5~3 ~Mz@ݛtji:Mg+j 7#c$wo|Fǯ%epnC]L?h &O58>X37k[ ٛqI1lzKhop;^w8!.8.JPОL~3yR=5C +~홈Wb1<3w +&z4,],vG%_꿤IS$>ixJF3C0(p5/<.B!$~o&(f"pr&ɌYN8G.+"e-txQ;2!}h\ʄ[-S۝NIDZO[!i06H!Hiaz§\][p`҄79Vs g{ -~;U}|>D+br(Uc`ÅS$=5l%A,˗6MRR%X[/WT`ԥ +x` *q^oNR;|B^F`SlC•O>,F6;43FOlΔ:u9vٔ9Av&:$-zYiI빾 v89\ [nمɰ9}Fv4[25{7 ȃn.!~peyǦM$DHA-ף!SLz/՟V!JXeI3u[ =`*)Q/[dXȓ4ʉ\q陒Ö 51+/pISX9[_ +Vퟜ2z{V&E3 O*v۾PC(RmE`OSDw%Õ"W~drJt2T#f >2#u J- +/Y,=3&Ԫa2eIWQuڭKq >@࿖X%-%=?8jS"wBHs {vH$Y_P-GIx!&Nֿ/*~{^*o՘pf6;z)E:,,k;SDaU냊~JND}#6%nIޕz weO?;78b@B#)]V'S(K#qIQz3~'Y3F"_"X j CO,7HNt `B>qlCA3b#.OgQN1 x>%e;HAؿ㼔Vhʂ~kO|9c='[ GǯO$^Rӣ1NH +2IY):[rCU|-Wi=/n~n :負^dgƗ2^Zb򋨾o?6k eMxħzb$@1_xݍ&+d+TYꦍ.M +$(q6*tN>X] +wZTDRk1'8r>+8 0Gr۬8 r3D%n-_:KddXΓ*Y< 0zDѰmbl {z˦x3)x*#:|)/!&^aEJQt\dY,v﷥INP125Ͼ.Ӏ~Q!B t5J@+ z/V̋9rZ -Xs/!^}N3 q0[P:i#c[7) 2L‚F}ԞӁ]<5r<{t;Jj}5OO׌<ӣv" .FƧ jቁƞA?7뀄yBBs$ ~U.׾{d8i[l@$6h#B"_4)Ms:1xL9^Q,8oI +1i}_9<Ěٓl|]4DÚsϵD`(&|?& oO#`ocg1?.TdojY3̅({agZVwhG(F\*=_gO*قȖ|3pΕ9)S+myvD k;Ld$ QOi疿hVK7Ky^rJW!-UA?T?fAgDmYVPOBȽ)+ @;j`@P-tUI8ףgͩpl.(.jP~]Zt.|.=唿䆦ey\@\xԏ~@uS 1aWNZtVVl$AkJa|[Qmoy+=]LPZ>'w77O^l' #(=%g)''HLƩgEpL\)5UOm?9lW2hl_ L(w9QWi nՠDk^F˧ȇ=OQe&!u-Ҥy og`uT5~BKr .HOc4V@܇I_e pe# -nV#dM ys29naOjfj,<[QʧLfސ| +9l{1lx` If ͰbXO+ 2FmaP89Qߵȑ3mf0SFbM@/D2Eg<61HR^fp&w"dnK~< +DV`fm#K4w8ϬGEٲʝ`>IU&减؅B%UFlrj5SX{-"i*y HSӷBE .oGcsޤ*z=2qgl|D,'*돘= +)5UƷq*/QtCj p&C;N+ap^~X:Q$@8NL-g%hN=̽*k +%^`9R?FΔD"nH |Ӹpֈw,Z~7…H2ҦE<,a_R]-?X#"GwK@BÇ?MJK+po'Qtx6=P??iEnaǹcme5x 򐦻Yf ^W +m[FZ"&q(ӻ\ RGkvnd{gj 3pYaYLCy)REvYyKÞa^tG̜fuaB<6 + q +Mu%Eg We,yٽrܤ,m@^WA*C2dV8`zvgvoJ |Ⱶq,ץ;%zTJjRW:@&R͟'RsP^n]J[BqPٙA0R&@![pR .%FaAv .reM5\U>\CX_M$8UF&/5y&N)+$s%(:kQŸBMs`$J͊EwJwm٩թ%:456>Gb5 ޛcJ5uā8*Aم6!spWoKjFοL]%]iʔb +9bK:+lS۷\ +ŏr\P._7zv`lXFӗ1} +{ Xf(74>Ig8լR03gONnS䶫H9p6nj.eZ +4hD${Up)4RM)/WZسDy L()l(AN63z)/%X/ kͺ;{+MMQnmQuQ裿Tc +I8E){zX.v+ʫ֩΃>o$U|i} (Hgwk-ȭY/*1DNXYZ]\:*Hf )o!-5hl;U\R<۞04 6D}LV/D[I= +F+ݻx -JL\i(B˓Nu>27.?C6 DiLJyϔӝp'R@@IW*!jA䞾Fcc硩1X;?hw΄ +|9 ;ǥt^3n4n2)Er +P-f앶HX'E8Egv@ +Y ,?}/:-VZ뺚dYfeB]XMe}H-Kn/|D0A+qܥ,·1ZrXޢM|B髿u( {Y``XAa +yDhܞ]TOÔ +gQp#7*CoQ6-Tx %n"YڸnܒŴq åL.:b 4D]V)!#hAi z!!nnyb/0g  S GQ8#Y;*lqr49A,Zl9jO?|`)&y, 3NYge4p-ÓXǿX" sL?pnY}AoA*ᤱp{}R5r [Wq^o%t O6BZlqyL:ƚmcS #\S|mNX"ǕO ?\1ޚ ,--L=z6sEH/ljjf- +.bDx:\a{.Xg`PWDx>^JUlq}\}!%Qꬸ+lhL5QU+ e'΀MB/M]>6fEa+f(+Z)M-CZyV4B3{lHl`r-p.aطZ4_Iv_rVFjuv0n%=&ϥf+,DYDo/v:|c A=}*LtXvJ#D@$yX'A/+3J&kЍ :Tddұxi5DC=V Om"eLS3`N]<2rlF^=,|ث6F,MPUq+3tKV"OZ7 α]3n{=Yh Gg,v) G d1R OV7l0;˰qqjwCe?b6"I ֙ߟj-me%F95 G)Բg=2Yʿ[ }PGn5N*!'p|o9pSFny!Rf˝}-tK,`kݨګVqC>ݻe.'ytյJ@NGg(U4b$`J4qщntwkVڒ#xe*e% |pƦYWx4{%17 sg3Z[ 57y>tBqǥrZ꧉JtyQ)Fw_'I˷hϼA*(5ho+Q=#a )1M{>?ʜomAi 'K6. K2Dj(^ڑ] @<('љquSiz( [<\.\Z4po6}^:j+ur.nuZ8m/?ڇfյ mPKgPkwzyhK:S)L8ҶԱ X.PRcM音rgMVx 2hxF[$ӂr'v ^1& 6e$ H0K9uZ~PC|eS"?A(Q2yIlT];3Jk1l,;̓`ƊZm:jZ -푽ʊlg[ez3KC<*(vAvڙ-KJC19kv,ihE:B*d ^m,z4`Yw7e=Hn˓]r˚ybLNn3]3iu!@4WWIR_ԫw^Ї.-UaQ7T*jGBP'Ǔߺ'B &Z%_"I}2~ħ/F.grHɘdHQ$9u|x+ _С9`!ɧ9+}6R~O2&>Q<R˨aߜ+~4.3WBޢ<1NUGx}lk n}͊O:0 RUpF"C /y,բ[t$x'fN0j;Xtf}()^ޟ۷ȎLI vPt}W(P0}PY)4:[1wmD~+<\~0i<0F~DA/$.bJqqC[ਿD@:)Cמܳoؕ_!9;[@OkLD4 &#Nُ-1Fэ:Fj:V9%z0s4N n>,g%wr }fa=l/\+coTtmdoJ1er Oem)8\@&J|Wqq$QX〨&d)™kYN)\z'HJgZHO厹l%sXlԡ4da:]9:%),:??ժ*[4'SM dMxۄ]Օz]PpqW7ƒEkZf& 8y\!)}lHT.x}²!VA%'eGxgFiGǶ*ИsUH{))M߻!>7ZhCLսy|W: F1QzlUԻjkn:פpZzE.8}C٘?si߃9A-NH$:N6[$Y%7QBd;vqbЙ!ed?vs@:O~Q%&&vrU[^ʹHS0C&Tzq-!Jͫp +U3nzL356К {0#rG鬆B֔,?=aΞ8'@"0iMP6 ~ԑ>!*{ټe'50),K E,d6ܲCE_N;q95O^pɍ/(]LJh& Nks [ .".,/$c y̐jJ(ҭn^a)<,>Ukї"~Xo#l\y!$gh_-sgxܟ󘴳m=mۥƙtJJ749n@WȾ?eV)R*}DϑUOcP +3bDJHU +Alo8LRr)ku{jߞ00Yҕ0~q A W0!pcdZ$<|]H<Fm.8lCFlٵfjOJ- + XAbk$YPUpht7`RSc'V?>.My͏R;ȀZ\XT,zʡ?Qx)[iG dXae+")#zH eT1F%G* 8.6 oF_R -4W19Lf.Ru쥟]2x6_}MB^KZg=&~Ue23A3|4qb]e/ %k2[gɏ#<}8㨮I7"}IQKW^ x ܀.x~yv%⇤WZ +.XU{S +iP9'LjhzA'!=^;[~*F^S7y`6.R73`~4eev?YJ5]4MQ%'H +&7 71D\ěf( +-@'p6xD͝UEan‹6`2|ɘCQYV6daq$ߣ-@WXI{8<4+R#vhRF,(Sb{8df2',(V-+$n/0?a _R+b ?p߶<"3g+Y#)~oJ 3&|gr (l=r2Ong.=OK\&jp /`yQ 99ot8XA#("!PU#|/\\*? A8"I4M aU=*ٟ̼ވ@;_Rn{t*]~zk +7O _Vf …5O$63v$Sm*|LdKZ0p{DP%Fk u3]?"JMW4sǙX }!${]7 F)it68\ꑣ?49vl}(q-N`i2 k6azmP +Q7Nz/gȋ5՟W!R +Lø֪rwg-N٩N "Lj.WҾ[ xGl]2*P:U + +W9!X pg<#95n05+JE܌ giB gu2_I5ܛAP1ST~O;7v ?zyàGR}Y3R8n '$]+4x6UO_)]@X}SfT zD =.:1ޫCl{l ZUkq("SE +LA}˪ 9>C q+ d1 vcQ</㜁>`?@\gz}F0ٔcl iE ̜UE3::B_ͮEO.ʄa;wCzb ʼ2d攦Ue+nwYi!Pr!}h(%=e@%,ăs.RmQ󃌏S, +܁U@y9nzeMlI(?m[}k|S菍Q(\P‘S*R-ώp.3N1w} +6Oq'G2+M:z`BbRO ]",AoNPۙ!'wt-R߰LlݐC`6?(dcXvU&֖A0vS,rX|>8ܜzNFƃz\m/2$:<4(>HBI_ 4fξ1wgBךFC'رۃޏX~8>D5jMJ#SJ1 zfP%cd6+Y?Y-_'P^vK `vvgruGH7~&07pڕζ4xA&-YC%g v.7nU)Y^`3nM\++pYupAo(G`0ۚf?$V M8y E.r!vVVNL>!5ܹكJi'S[*++(QT끰FE\rP6KfP՟m:$i8U7*YMߜݵ+r< ;>p3E(L"Y!ThϏ`"PΏUqľ &*#Ûzؚ!6JqVQtBgSN>[ d9_92M;H51iF[68orC)O600-٨*rrw!L&=Dm+u$f0/˥c*?Dg'NcD"C\xM 0Qn bCw +JF'"}ׂYEUὛDD}PXjn_/WwZЬYhE"ȕ䱛>Fݬ|uʏ&m nǷ}` *H3EޟǷ MNT!iD*?4C "|SFO'\՗01FS赚3 DT@S(|<%8ymJ#;%cta79uݺe6 > ߋqs1]_$:Gs5ή2 'dh=Q;vkoi`ǥu-d@i/2IW:y[ȭikIz o!Crݺ.L/?2گ*^CkZiNr9gT0S_'dE`.׹ʿ.QJl.ϓ_?|'b*I--3Wu20?@p3` (xB0f'e\P*pzBVmāJ6_dƊJayW7 Hsmekp[ wDy2_d{i.ʍo͏og˩` Mݒt,-en\҆W-[P 6 Yz9ɸ/yA!.")X`ow/)4y)t~NVƱkvNae"b~cOJyI-]#q^$&9{ W*P嶛ֽ k /Ih=X@Hmj9ekhMqz9Wmjh$,Xղ9o{czߗB%R 6@W +}K.Jmupli'X!*+Z/D0c]RH7i3ݝ %5'0ނgWAECoD_@%B[NnXa_ Q/ Lo =''ic 1'g?I""EhHAX +Ii@r_㘕i @p##6ehcLnz3 pF-ˡS(*$ e7 @UA@Z,69N]F)dxg}<4qݡ%2hmOrVtGajwԹ pP˦峡 U_<JA=\54hMDv2&aKt\7y|G}D*ÈD80Z\[{P߯ +c +EVNz#$,J@BßC+#1|:ƤW`Q˨3d *K!|uU wvAɄ:ɳԌL\MԦ]54‚@Bk,|{K{MwLI`7H-D$erbg#Pi +xDDa7B> m5&C0`΅i$̽4QBfJ+/B%z̔r4fʡreKKt'/MciU*iB5co)5Rn֎ٜyNJH3hi =3j 4%|7U-`p o;X>}wd~!B0Ό1QZ}bOb;ME7*: OWPc^짱nETU^\/}/LtIq7}BrF5yUL!YG$8ePh%LѲ SR +5lj2& ~SW>~g>#~g?y?aIi2,7b1FbΏV:׿a1 wKh^e-dPyw-*ݳoߣįJ|߲G)%0{,~e,$Ky*GtbVvSmII+I`˚rA[u<b"td\ŵ +]-A|jZ5lnYLNɋFAj'n% -zM&jʦ$H6$(՚8LGg [fٍƟ`AB–ig1M"Lh7%vs57Uo , ncyqrl4CrgDn-2ne:^OF[6#2 +"z:1bЉ3:Λri ng5$ԕ +9u͑ϧi@ZWw*()!xVjrz,L_AU# R%=~=p>T"'r$y|Vb>%l{ +endstream endobj 6329 0 obj<> endobj 6330 0 obj<> endobj 6331 0 obj<> endobj 6332 0 obj<> endobj 6333 0 obj<> endobj 6334 0 obj<> endobj 6335 0 obj<> endobj 6336 0 obj<> endobj 6337 0 obj<> endobj 6338 0 obj<> endobj 6339 0 obj<yjo7)>> endobj 6340 0 obj<> endobj 6341 0 obj<> endobj 6342 0 obj<X')>> endobj 6343 0 obj<> endobj 6344 0 obj<> endobj 6345 0 obj<> endobj 6346 0 obj<I3nt)>> endobj 6347 0 obj<> endobj 6348 0 obj<> endobj 6349 0 obj<> endobj 6350 0 obj<> endobj 6351 0 obj<)>> endobj 6352 0 obj<> endobj 6353 0 obj<> endobj 6354 0 obj<> endobj 6355 0 obj<> endobj 6356 0 obj<> endobj 6357 0 obj<> endobj 6358 0 obj<Tk+77zz0RnY#\n6\(A|aɻiV)>> endobj 6359 0 obj<> endobj 6360 0 obj<> endobj 6361 0 obj<> endobj 6362 0 obj<\nXp\)h)>> endobj 6363 0 obj<> endobj 6364 0 obj<Tj}s\n{l~mQ_ehÍ'B3)>> endobj 6365 0 obj< pb~Q<|4-ux.`fWnڒ,)>> endobj 6366 0 obj<> endobj 6367 0 obj<> endobj 6368 0 obj<> endobj 6369 0 obj<> endobj 6370 0 obj<> endobj 6371 0 obj<> endobj 6372 0 obj<> endobj 6373 0 obj<> endobj 6374 0 obj<> endobj 6375 0 obj<> endobj 6376 0 obj<> endobj 6377 0 obj<> endobj 6378 0 obj<]zf)>> endobj 6379 0 obj<> endobj 6380 0 obj<#t5{*)>> endobj 6381 0 obj<> endobj 6382 0 obj<> endobj 6383 0 obj<> endobj 6384 0 obj<> endobj 6385 0 obj<vgj;3Z9Yڐ^vfB%)>> endobj 6386 0 obj<> endobj 6387 0 obj<> endobj 6388 0 obj<> endobj 6389 0 obj<> endobj 6390 0 obj<> endobj 6391 0 obj<> endobj 6392 0 obj<> endobj 6393 0 obj<> endobj 6394 0 obj<> endobj 6395 0 obj<> endobj 6396 0 obj<> endobj 6397 0 obj<> endobj 6398 0 obj<> endobj 6399 0 obj<> endobj 6400 0 obj<> endobj 6401 0 obj<=!`)>> endobj 6402 0 obj<> endobj 6403 0 obj<> endobj 6404 0 obj<> endobj 6405 0 obj<> endobj 6406 0 obj<!{%/d飪Lk6)>> endobj 6407 0 obj<> endobj 6408 0 obj<> endobj 6409 0 obj<> endobj 6410 0 obj<> endobj 6411 0 obj<> endobj 6412 0 obj<> endobj 6413 0 obj<e)>> endobj 6414 0 obj<> endobj 6415 0 obj<> endobj 6416 0 obj<> endobj 6417 0 obj<> endobj 6418 0 obj<> endobj 6419 0 obj<> endobj 6420 0 obj<> endobj 6421 0 obj<> endobj 6422 0 obj<> endobj 6423 0 obj<> endobj 6424 0 obj<> endobj 6425 0 obj<> endobj 6426 0 obj<> endobj 6427 0 obj<> endobj 6428 0 obj<> endobj 6429 0 obj<> endobj 6430 0 obj<> endobj 6431 0 obj<> endobj 6432 0 obj<> endobj 6433 0 obj<> endobj 6434 0 obj<> endobj 6435 0 obj<> endobj 6436 0 obj<> endobj 6437 0 obj<> endobj 6438 0 obj<> endobj 6439 0 obj<> endobj 6440 0 obj<> endobj 6441 0 obj<> endobj 6442 0 obj<> endobj 6443 0 obj<)>> endobj 6444 0 obj<> endobj 6445 0 obj<> endobj 6446 0 obj<> endobj 6447 0 obj<> endobj 6448 0 obj<> endobj 6449 0 obj<> endobj 6450 0 obj<> endobj 6451 0 obj<> endobj 6452 0 obj<> endobj 6453 0 obj<> endobj 6454 0 obj<> endobj 6455 0 obj<> endobj 6456 0 obj<> endobj 6457 0 obj<> endobj 6458 0 obj<> endobj 6459 0 obj<> endobj 6460 0 obj<> endobj 6461 0 obj<> endobj 6462 0 obj<> endobj 6463 0 obj<> endobj 6464 0 obj<)>> endobj 6465 0 obj<> endobj 6466 0 obj<> endobj 6467 0 obj<> endobj 6468 0 obj<> endobj 6469 0 obj<> endobj 6470 0 obj<> endobj 6471 0 obj<> endobj 6472 0 obj<> endobj 6473 0 obj<> endobj 6474 0 obj<> endobj 6475 0 obj<> endobj 6476 0 obj<> endobj 6477 0 obj<> endobj 6478 0 obj<> endobj 6479 0 obj<> endobj 6480 0 obj<> endobj 6481 0 obj<> endobj 6482 0 obj<> endobj 6483 0 obj<> endobj 6484 0 obj<> endobj 6485 0 obj<> endobj 6486 0 obj<> endobj 6487 0 obj<> endobj 6488 0 obj<> endobj 6489 0 obj<> endobj 6490 0 obj<> endobj 6491 0 obj<> endobj 6492 0 obj<> endobj 6493 0 obj<> endobj 6494 0 obj<> endobj 6495 0 obj<> endobj 6496 0 obj<> endobj 6497 0 obj<> endobj 6498 0 obj<> endobj 6499 0 obj<oƒܿyS=)>> endobj 6500 0 obj<> endobj 6501 0 obj<> endobj 6502 0 obj<> endobj 6503 0 obj<> endobj 6504 0 obj<> endobj 6505 0 obj<> endobj 6506 0 obj<> endobj 6507 0 obj<> endobj 6508 0 obj<> endobj 6509 0 obj<Y]Z)>> endobj 6510 0 obj<> endobj 6511 0 obj<> endobj 6512 0 obj<> endobj 6513 0 obj<> endobj 6514 0 obj<> endobj 6515 0 obj<> endobj 6516 0 obj<> endobj 6517 0 obj<> endobj 6518 0 obj<> endobj 6519 0 obj<> endobj 6520 0 obj<> endobj 6521 0 obj<> endobj 6522 0 obj<> endobj 6523 0 obj<> endobj 6524 0 obj<> endobj 6525 0 obj<> endobj 6526 0 obj<> endobj 6527 0 obj<> endobj 6528 0 obj<> endobj 6529 0 obj<> endobj 6530 0 obj<> endobj 6531 0 obj<> endobj 6532 0 obj<> endobj 6533 0 obj<> endobj 6534 0 obj<> endobj 6535 0 obj<> endobj 6536 0 obj<)>> endobj 6537 0 obj<> endobj 6538 0 obj</)>> endobj 6539 0 obj<> endobj 6540 0 obj<D\n[\);)>> endobj 6541 0 obj<> endobj 6542 0 obj<> endobj 6543 0 obj<> endobj 6544 0 obj<> endobj 6545 0 obj<> endobj 6546 0 obj<> endobj 6547 0 obj<> endobj 6548 0 obj<> endobj 6549 0 obj<> endobj 6550 0 obj<> endobj 6551 0 obj<> endobj 6552 0 obj<> endobj 6553 0 obj<> endobj 6554 0 obj<> endobj 6555 0 obj<> endobj 6556 0 obj<> endobj 6557 0 obj<א)>> endobj 6558 0 obj<> endobj 6559 0 obj<> endobj 6560 0 obj<> endobj 6561 0 obj<> endobj 6562 0 obj<> endobj 6563 0 obj<> endobj 6564 0 obj<> endobj 6565 0 obj<> endobj 6566 0 obj<> endobj 6567 0 obj<Wſt\r)>> endobj 6568 0 obj<> endobj 6569 0 obj<> endobj 6570 0 obj<> endobj 6571 0 obj<> endobj 6572 0 obj<> endobj 6573 0 obj<> endobj 6574 0 obj<> endobj 6575 0 obj<> endobj 6576 0 obj<> endobj 6577 0 obj<> endobj 6578 0 obj<> endobj 6579 0 obj<> endobj 6580 0 obj<> endobj 6581 0 obj<> endobj 6582 0 obj<> endobj 6583 0 obj<> endobj 6584 0 obj<> endobj 6585 0 obj<> endobj 6586 0 obj<> endobj 6587 0 obj<> endobj 6588 0 obj<> endobj 6589 0 obj<> endobj 6590 0 obj<> endobj 6591 0 obj<> endobj 6592 0 obj<> endobj 6593 0 obj<> endobj 6594 0 obj<3P RA֋8R)>> endobj 6595 0 obj<> endobj 6596 0 obj<> endobj 6597 0 obj<> endobj 6598 0 obj<> endobj 6599 0 obj<> endobj 6600 0 obj<> endobj 6601 0 obj<> endobj 6602 0 obj<> endobj 6603 0 obj<> endobj 6604 0 obj<> endobj 6605 0 obj<> endobj 6606 0 obj<> endobj 6607 0 obj<> endobj 6608 0 obj<> endobj 6609 0 obj<> endobj 6610 0 obj<> endobj 6611 0 obj<> endobj 6612 0 obj<> endobj 6613 0 obj<> endobj 6614 0 obj<> endobj 6615 0 obj<~)>> endobj 6616 0 obj<> endobj 6617 0 obj<> endobj 6618 0 obj<> endobj 6619 0 obj<> endobj 6620 0 obj<> endobj 6621 0 obj<> endobj 6622 0 obj<> endobj 6623 0 obj<> endobj 6624 0 obj<> endobj 6625 0 obj<> endobj 6626 0 obj<> endobj 6627 0 obj<> endobj 6628 0 obj<> endobj 6629 0 obj<> endobj 6630 0 obj<> endobj 6631 0 obj<> endobj 6632 0 obj<> endobj 6633 0 obj<> endobj 6634 0 obj<> endobj 6635 0 obj<> endobj 6636 0 obj<> endobj 6637 0 obj<> endobj 6638 0 obj<> endobj 6639 0 obj<p)>> endobj 6640 0 obj<> endobj 6641 0 obj<> endobj 6642 0 obj<> endobj 6643 0 obj<> endobj 6644 0 obj<> endobj 6645 0 obj<> endobj 6646 0 obj<> endobj 6647 0 obj<> endobj 6648 0 obj<> endobj 6649 0 obj<> endobj 6650 0 obj<> endobj 6651 0 obj<> endobj 6652 0 obj<> endobj 6653 0 obj<> endobj 6654 0 obj<> endobj 6655 0 obj<> endobj 6656 0 obj<> endobj 6657 0 obj<> endobj 6658 0 obj<> endobj 6659 0 obj<ϙx)>> endobj 6660 0 obj<' )>> endobj 6661 0 obj<> endobj 6662 0 obj<> endobj 6663 0 obj<> endobj 6664 0 obj<> endobj 6665 0 obj<> endobj 6666 0 obj<> endobj 6667 0 obj<> endobj 6668 0 obj<> endobj 6669 0 obj<> endobj 6670 0 obj<> endobj 6671 0 obj<> endobj 6672 0 obj<> endobj 6673 0 obj<3'?A#\(} =&)>> endobj 6674 0 obj<> endobj 6675 0 obj<> endobj 6676 0 obj<> endobj 6677 0 obj<> endobj 6678 0 obj<> endobj 6679 0 obj<> endobj 6680 0 obj<> endobj 6681 0 obj<> endobj 6682 0 obj<> endobj 6683 0 obj<> endobj 6684 0 obj<> endobj 6685 0 obj<> endobj 6686 0 obj<kWP[}1n!&V)>> endobj 6687 0 obj<> endobj 6688 0 obj<> endobj 6689 0 obj<)>> endobj 6690 0 obj<> endobj 6691 0 obj<> endobj 6692 0 obj<> endobj 6693 0 obj<> endobj 6694 0 obj<> endobj 6695 0 obj<> endobj 6696 0 obj<> endobj 6697 0 obj<> endobj 6698 0 obj<> endobj 6699 0 obj<> endobj 6700 0 obj<> endobj 6701 0 obj<> endobj 6702 0 obj<> endobj 6703 0 obj<> endobj 6704 0 obj<> endobj 6705 0 obj<> endobj 6706 0 obj<> endobj 6707 0 obj<> endobj 6708 0 obj<> endobj 6709 0 obj<> endobj 6710 0 obj<> endobj 6711 0 obj<> endobj 6712 0 obj<> endobj 6713 0 obj<> endobj 6714 0 obj<> endobj 6715 0 obj<> endobj 6716 0 obj<> endobj 6717 0 obj<> endobj 6718 0 obj<> endobj 6719 0 obj<> endobj 6720 0 obj<> endobj 6721 0 obj<> endobj 6722 0 obj<> endobj 6723 0 obj<> endobj 6724 0 obj<> endobj 6725 0 obj<> endobj 6726 0 obj<> endobj 6727 0 obj<> endobj 6728 0 obj<yH\)7)>> endobj 6729 0 obj<> endobj 6730 0 obj<> endobj 6731 0 obj<> endobj 6732 0 obj<> endobj 6733 0 obj<> endobj 6734 0 obj<> endobj 6735 0 obj<> endobj 6736 0 obj<> endobj 6737 0 obj<> endobj 6738 0 obj<> endobj 6739 0 obj<> endobj 6740 0 obj<> endobj 6741 0 obj<> endobj 6742 0 obj<> endobj 6743 0 obj<> endobj 6744 0 obj<> endobj 6745 0 obj<> endobj 6746 0 obj<> endobj 6747 0 obj<> endobj 6748 0 obj<> endobj 6749 0 obj<> endobj 6750 0 obj<> endobj 6751 0 obj<> endobj 6752 0 obj<> endobj 6753 0 obj<> endobj 6754 0 obj<> endobj 6755 0 obj<> endobj 6756 0 obj<> endobj 6757 0 obj<> endobj 6758 0 obj<> endobj 6759 0 obj<> endobj 6760 0 obj<> endobj 6761 0 obj<> endobj 6762 0 obj<> endobj 6763 0 obj<> endobj 6764 0 obj<> endobj 6765 0 obj<> endobj 6766 0 obj<> endobj 6767 0 obj<t)>> endobj 6768 0 obj<> endobj 6769 0 obj<> endobj 6770 0 obj<> endobj 6771 0 obj<> endobj 6772 0 obj<> endobj 6773 0 obj<> endobj 6774 0 obj<\(?L].)>> endobj 6775 0 obj<> endobj 6776 0 obj<> endobj 6777 0 obj<> endobj 6778 0 obj<> endobj 6779 0 obj<> endobj 6780 0 obj<> endobj 6781 0 obj<> endobj 6782 0 obj<> endobj 6783 0 obj<> endobj 6784 0 obj<> endobj 6785 0 obj<> endobj 6786 0 obj<]ĸ#E)>> endobj 6787 0 obj<> endobj 6788 0 obj<QGT.)>> endobj 6789 0 obj<> endobj 6790 0 obj<> endobj 6791 0 obj<> endobj 6792 0 obj<> endobj 6793 0 obj<> endobj 6794 0 obj<> endobj 6795 0 obj<> endobj 6796 0 obj<cd ԽޑORnZv"e%Ġf!jF.8UCij9)>> endobj 6797 0 obj<> endobj 6798 0 obj<> endobj 6799 0 obj<> endobj 6800 0 obj<> endobj 6801 0 obj<> endobj 6802 0 obj<> endobj 6803 0 obj<> endobj 6804 0 obj<> endobj 6805 0 obj<> endobj 6806 0 obj<> endobj 6807 0 obj<> endobj 6808 0 obj<> endobj 6809 0 obj<> endobj 6810 0 obj<> endobj 6811 0 obj<> endobj 6812 0 obj<> endobj 6813 0 obj<> endobj 6814 0 obj<> endobj 6815 0 obj<> endobj 6816 0 obj<> endobj 6817 0 obj<> endobj 6818 0 obj<> endobj 6819 0 obj<> endobj 6820 0 obj<> endobj 6821 0 obj<> endobj 6822 0 obj<> endobj 6823 0 obj<> endobj 6824 0 obj<> endobj 6825 0 obj<> endobj 6826 0 obj<3OHb)>> endobj 6827 0 obj<> endobj 6828 0 obj<> endobj 6829 0 obj<> endobj 6830 0 obj<> endobj 6831 0 obj<> endobj 6832 0 obj<> endobj 6833 0 obj<> endobj 6834 0 obj<> endobj 6835 0 obj<> endobj 6836 0 obj<> endobj 6837 0 obj<> endobj 6838 0 obj<> endobj 6839 0 obj<> endobj 6840 0 obj<> endobj 6841 0 obj<> endobj 6842 0 obj<> endobj 6843 0 obj<> endobj 6844 0 obj<> endobj 6845 0 obj<> endobj 6846 0 obj<> endobj 6847 0 obj<> endobj 6848 0 obj<> endobj 6849 0 obj<)>> endobj 6850 0 obj<> endobj 6851 0 obj<> endobj 6852 0 obj<> endobj 6853 0 obj<X8\\obXKdIq)>> endobj 6854 0 obj<> endobj 6855 0 obj<> endobj 6856 0 obj<> endobj 6857 0 obj<> endobj 6858 0 obj<> endobj 6859 0 obj<> endobj 6860 0 obj<> endobj 6861 0 obj<> endobj 6862 0 obj<> endobj 6863 0 obj<> endobj 6864 0 obj<> endobj 6865 0 obj<> endobj 6866 0 obj<> endobj 6867 0 obj<> endobj 6868 0 obj<> endobj 6869 0 obj<> endobj 6870 0 obj<> endobj 6871 0 obj<> endobj 6872 0 obj<> endobj 6873 0 obj<ZDەğ\rO)>> endobj 6874 0 obj<U|Ş/}/e"נPXv)>> endobj 6875 0 obj<> endobj 6876 0 obj<> endobj 6877 0 obj<> endobj 6878 0 obj<> endobj 6879 0 obj<> endobj 6880 0 obj<> endobj 6881 0 obj<> endobj 6882 0 obj<> endobj 6883 0 obj<>W})>> endobj 6884 0 obj<> endobj 6885 0 obj<> endobj 6886 0 obj<> endobj 6887 0 obj<> endobj 6888 0 obj<> endobj 6889 0 obj<)>> endobj 6890 0 obj<> endobj 6891 0 obj<> endobj 6892 0 obj<)>> endobj 6893 0 obj<> endobj 6894 0 obj<> endobj 6895 0 obj<> endobj 6896 0 obj<> endobj 6897 0 obj<> endobj 6898 0 obj<> endobj 6899 0 obj<> endobj 6900 0 obj<> endobj 6901 0 obj<> endobj 6902 0 obj<>Ugcy`W>)>> endobj 6903 0 obj<> endobj 6904 0 obj<> endobj 6905 0 obj<> endobj 6906 0 obj<> endobj 6907 0 obj<> endobj 6908 0 obj<> endobj 6909 0 obj<> endobj 6910 0 obj<> endobj 6911 0 obj<> endobj 6912 0 obj<> endobj 6913 0 obj<> endobj 6914 0 obj<> endobj 6915 0 obj<> endobj 6916 0 obj<> endobj 6917 0 obj<> endobj 6918 0 obj<> endobj 6919 0 obj<> endobj 6920 0 obj<> endobj 6921 0 obj<> endobj 6922 0 obj<> endobj 6923 0 obj<> endobj 6924 0 obj<> endobj 6925 0 obj<> endobj 6926 0 obj<> endobj 6927 0 obj<> endobj 6928 0 obj<> endobj 6929 0 obj<> endobj 6930 0 obj<> endobj 6931 0 obj<> endobj 6932 0 obj<> endobj 6933 0 obj<> endobj 6934 0 obj<> endobj 6935 0 obj<> endobj 6936 0 obj<> endobj 6937 0 obj<øX )>> endobj 6938 0 obj<> endobj 6939 0 obj<> endobj 6940 0 obj<)>> endobj 6941 0 obj<> endobj 6942 0 obj<> endobj 6943 0 obj<> endobj 6944 0 obj<> endobj 6945 0 obj<> endobj 6946 0 obj<> endobj 6947 0 obj<> endobj 6948 0 obj<> endobj 6949 0 obj<> endobj 6950 0 obj<> endobj 6951 0 obj<> endobj 6952 0 obj<> endobj 6953 0 obj<> endobj 6954 0 obj<> endobj 6955 0 obj<> endobj 6956 0 obj<> endobj 6957 0 obj<> endobj 6958 0 obj<> endobj 6959 0 obj<)>> endobj 6960 0 obj<> endobj 6961 0 obj<> endobj 6962 0 obj<> endobj 6963 0 obj<fė )>> endobj 6964 0 obj<> endobj 6965 0 obj<> endobj 6966 0 obj<> endobj 6967 0 obj<> endobj 6968 0 obj<> endobj 6969 0 obj<> endobj 6970 0 obj<P& n)>> endobj 6971 0 obj<> endobj 6972 0 obj<> endobj 6973 0 obj<> endobj 6974 0 obj<> endobj 6975 0 obj<> endobj 6976 0 obj<> endobj 6977 0 obj<> endobj 6978 0 obj<> endobj 6979 0 obj<> endobj 6980 0 obj<> endobj 6981 0 obj<> endobj 6982 0 obj<> endobj 6983 0 obj<> endobj 6984 0 obj<> endobj 6985 0 obj<> endobj 6986 0 obj<> endobj 6987 0 obj<> endobj 6988 0 obj<#=)>> endobj 6989 0 obj<> endobj 6990 0 obj<> endobj 6991 0 obj<> endobj 6992 0 obj<> endobj 6993 0 obj<> endobj 6994 0 obj<> endobj 6995 0 obj<> endobj 6996 0 obj<> endobj 6997 0 obj<> endobj 6998 0 obj<> endobj 6999 0 obj<> endobj 7000 0 obj<> endobj 7001 0 obj<> endobj 7002 0 obj<> endobj 7003 0 obj<> endobj 7004 0 obj<> endobj 7005 0 obj<> endobj 7006 0 obj<> endobj 7007 0 obj<)>> endobj 7008 0 obj<> endobj 7009 0 obj<> endobj 7010 0 obj<> endobj 7011 0 obj<> endobj 7012 0 obj<> endobj 7013 0 obj<> endobj 7014 0 obj<> endobj 7015 0 obj<> endobj 7016 0 obj<> endobj 7017 0 obj<> endobj 7018 0 obj<GENO!F15>)>> endobj 7019 0 obj<> endobj 7020 0 obj<> endobj 7021 0 obj<> endobj 7022 0 obj<> endobj 7023 0 obj<> endobj 7024 0 obj<> endobj 7025 0 obj<> endobj 7026 0 obj<> endobj 7027 0 obj<> endobj 7028 0 obj<> endobj 7029 0 obj<> endobj 7030 0 obj<> endobj 7031 0 obj<> endobj 7032 0 obj<> endobj 7033 0 obj<> endobj 7034 0 obj<> endobj 7035 0 obj<> endobj 7036 0 obj<> endobj 7037 0 obj<> endobj 7038 0 obj<$%{)>> endobj 7039 0 obj<> endobj 7040 0 obj<> endobj 7041 0 obj<> endobj 7042 0 obj<> endobj 7043 0 obj<> endobj 7044 0 obj<> endobj 7045 0 obj<> endobj 7046 0 obj<> endobj 7047 0 obj<> endobj 7048 0 obj<> endobj 7049 0 obj<> endobj 7050 0 obj<> endobj 7051 0 obj<> endobj 7052 0 obj<> endobj 7053 0 obj<> endobj 7054 0 obj<> endobj 7055 0 obj<> endobj 7056 0 obj<> endobj 7057 0 obj<Kް)>> endobj 7058 0 obj<> endobj 7059 0 obj<> endobj 7060 0 obj<> endobj 7061 0 obj<> endobj 7062 0 obj<> endobj 7063 0 obj<> endobj 7064 0 obj<> endobj 7065 0 obj<> endobj 7066 0 obj<> endobj 7067 0 obj<> endobj 7068 0 obj<> endobj 7069 0 obj<> endobj 7070 0 obj<> endobj 7071 0 obj<> endobj 7072 0 obj<> endobj 7073 0 obj<> endobj 7074 0 obj<> endobj 7075 0 obj<> endobj 7076 0 obj<> endobj 7077 0 obj<> endobj 7078 0 obj<> endobj 7079 0 obj<> endobj 7080 0 obj<> endobj 7081 0 obj<> endobj 7082 0 obj<> endobj 7083 0 obj<> endobj 7084 0 obj<> endobj 7085 0 obj<> endobj 7086 0 obj<> endobj 7087 0 obj<> endobj 7088 0 obj<> endobj 7089 0 obj<> endobj 7090 0 obj<> endobj 7091 0 obj<> endobj 7092 0 obj<> endobj 7093 0 obj<> endobj 7094 0 obj<> endobj 7095 0 obj<> endobj 7096 0 obj<> endobj 7097 0 obj<> endobj 7098 0 obj<> endobj 7099 0 obj<> endobj 7100 0 obj<> endobj 7101 0 obj<> endobj 7102 0 obj<> endobj 7103 0 obj<> endobj 7104 0 obj<> endobj 7105 0 obj<> endobj 7106 0 obj<> endobj 7107 0 obj<> endobj 7108 0 obj<> endobj 7109 0 obj<> endobj 7110 0 obj<> endobj 7111 0 obj<> endobj 7112 0 obj<> endobj 7113 0 obj<> endobj 7114 0 obj<> endobj 7115 0 obj<> endobj 7116 0 obj<> endobj 7117 0 obj<> endobj 7118 0 obj<> endobj 7119 0 obj<> endobj 7120 0 obj<> endobj 7121 0 obj<> endobj 7122 0 obj<> endobj 7123 0 obj<> endobj 7124 0 obj<> endobj 7125 0 obj<> endobj 7126 0 obj<> endobj 7127 0 obj<> endobj 7128 0 obj<> endobj 7129 0 obj<> endobj 7130 0 obj<> endobj 7131 0 obj<> endobj 7132 0 obj<> endobj 7133 0 obj<> endobj 7134 0 obj<> endobj 7135 0 obj<> endobj 7136 0 obj<> endobj 7137 0 obj<> endobj 7138 0 obj<> endobj 7139 0 obj<ʐ`jz܍N$XzgYWڪ#DV)>> endobj 7140 0 obj<7)>> endobj 7141 0 obj<> endobj 7142 0 obj<> endobj 7143 0 obj<> endobj 7144 0 obj<> endobj 7145 0 obj<> endobj 7146 0 obj<> endobj 7147 0 obj<> endobj 7148 0 obj<> endobj 7149 0 obj<> endobj 7150 0 obj<> endobj 7151 0 obj<> endobj 7152 0 obj<> endobj 7153 0 obj<> endobj 7154 0 obj<Oe)>> endobj 7155 0 obj<> endobj 7156 0 obj<> endobj 7157 0 obj<> endobj 7158 0 obj<> endobj 7159 0 obj<> endobj 7160 0 obj<> endobj 7161 0 obj<> endobj 7162 0 obj<> endobj 7163 0 obj<>NL: \)ݜ9Wq!-P\\x)>> endobj 7164 0 obj<> endobj 7165 0 obj<> endobj 7166 0 obj<> endobj 7167 0 obj<> endobj 7168 0 obj<> endobj 7169 0 obj<> endobj 7170 0 obj<> endobj 7171 0 obj<> endobj 7172 0 obj<> endobj 7173 0 obj<> endobj 7174 0 obj<> endobj 7175 0 obj<> endobj 7176 0 obj<> endobj 7177 0 obj<> endobj 7178 0 obj<> endobj 7179 0 obj<> endobj 7180 0 obj<> endobj 7181 0 obj<> endobj 7182 0 obj<> endobj 7183 0 obj<> endobj 7184 0 obj<> endobj 7185 0 obj<> endobj 7186 0 obj<%PY)>> endobj 7187 0 obj<> endobj 7188 0 obj<> endobj 7189 0 obj<> endobj 7190 0 obj<*vsۤ}6xVCH)>> endobj 7191 0 obj<> endobj 7192 0 obj<> endobj 7193 0 obj<> endobj 7194 0 obj<> endobj 7195 0 obj<> endobj 7196 0 obj<> endobj 7197 0 obj<> endobj 7198 0 obj<> endobj 7199 0 obj<> endobj 7200 0 obj<> endobj 7201 0 obj<> endobj 7202 0 obj<> endobj 7203 0 obj<> endobj 7204 0 obj<> endobj 7205 0 obj<> endobj 7206 0 obj<#fC٧ 7A0HMDS-%7Ϋ~P] )>> endobj 7207 0 obj<> endobj 7208 0 obj<> endobj 7209 0 obj<> endobj 7210 0 obj<> endobj 7211 0 obj<> endobj 7212 0 obj<> endobj 7213 0 obj<> endobj 7214 0 obj<> endobj 7215 0 obj<> endobj 7216 0 obj<> endobj 7217 0 obj<> endobj 7218 0 obj<> endobj 7219 0 obj<> endobj 7220 0 obj<> endobj 7221 0 obj<> endobj 7222 0 obj<> endobj 7223 0 obj<> endobj 7224 0 obj<> endobj 7225 0 obj<> endobj 7226 0 obj<> endobj 7227 0 obj<> endobj 7228 0 obj<> endobj 7229 0 obj<> endobj 7230 0 obj<> endobj 7231 0 obj<> endobj 7232 0 obj<> endobj 7233 0 obj<> endobj 7234 0 obj<> endobj 7235 0 obj<> endobj 7236 0 obj<X=cB5oH#v99n)>> endobj 7237 0 obj<> endobj 7238 0 obj<> endobj 7239 0 obj<> endobj 7240 0 obj<> endobj 7241 0 obj<> endobj 7242 0 obj<> endobj 7243 0 obj<> endobj 7244 0 obj<> endobj 7245 0 obj<> endobj 7246 0 obj<> endobj 7247 0 obj<> endobj 7248 0 obj<> endobj 7249 0 obj<> endobj 7250 0 obj<> endobj 7251 0 obj<> endobj 7252 0 obj<> endobj 7253 0 obj<> endobj 7254 0 obj<> endobj 7255 0 obj<> endobj 7256 0 obj<> endobj 7257 0 obj<> endobj 7258 0 obj<> endobj 7259 0 obj<fLhhyzakEN)>> endobj 7260 0 obj<> endobj 7261 0 obj<> endobj 7262 0 obj<> endobj 7263 0 obj<> endobj 7264 0 obj<> endobj 7265 0 obj<> endobj 7266 0 obj<duWbyZ)>> endobj 7267 0 obj<> endobj 7268 0 obj<> endobj 7269 0 obj<> endobj 7270 0 obj<> endobj 7271 0 obj<> endobj 7272 0 obj<3R)>> endobj 7273 0 obj<> endobj 7274 0 obj<> endobj 7275 0 obj<> endobj 7276 0 obj<> endobj 7277 0 obj<> endobj 7278 0 obj<> endobj 7279 0 obj<> endobj 7280 0 obj<> endobj 7281 0 obj<> endobj 7282 0 obj<> endobj 7283 0 obj<> endobj 7284 0 obj<> endobj 7285 0 obj<> endobj 7286 0 obj<> endobj 7287 0 obj<> endobj 7288 0 obj<> endobj 7289 0 obj<> endobj 7290 0 obj<> endobj 7291 0 obj<\))>> endobj 7292 0 obj<> endobj 7293 0 obj<> endobj 7294 0 obj<> endobj 7295 0 obj<> endobj 7296 0 obj<> endobj 7297 0 obj<> endobj 7298 0 obj<> endobj 7299 0 obj<> endobj 7300 0 obj<> endobj 7301 0 obj<> endobj 7302 0 obj<> endobj 7303 0 obj<> endobj 7304 0 obj<> endobj 7305 0 obj<> endobj 7306 0 obj<> endobj 7307 0 obj<> endobj 7308 0 obj<> endobj 7309 0 obj<> endobj 7310 0 obj<> endobj 7311 0 obj<> endobj 7312 0 obj<> endobj 7313 0 obj<> endobj 7314 0 obj<> endobj 7315 0 obj<> endobj 7316 0 obj<> endobj 7317 0 obj<Y >fa\(RI)>> endobj 7318 0 obj<> endobj 7319 0 obj<> endobj 7320 0 obj<> endobj 7321 0 obj<> endobj 7322 0 obj<> endobj 7323 0 obj<> endobj 7324 0 obj<> endobj 7325 0 obj<> endobj 7326 0 obj<> endobj 7327 0 obj<> endobj 7328 0 obj<> endobj 7329 0 obj<> endobj 7330 0 obj<> endobj 7331 0 obj<> endobj 7332 0 obj<> endobj 7333 0 obj<> endobj 1 0 obj<> endobj 2 0 obj<> endobj 3 0 obj<> endobj 4 0 obj<> endobj 5 0 obj<> endobj 6 0 obj<> endobj 7 0 obj<> endobj 8 0 obj<> endobj 9 0 obj<> endobj 10 0 obj<> endobj 11 0 obj<> endobj 12 0 obj<> endobj 13 0 obj<> endobj 14 0 obj<> endobj 15 0 obj<> endobj 16 0 obj<> endobj 17 0 obj<> endobj 18 0 obj<> endobj 19 0 obj<> endobj 20 0 obj<> endobj 21 0 obj<> endobj 22 0 obj<> endobj 23 0 obj<> endobj 24 0 obj<> endobj 25 0 obj<> endobj 26 0 obj<> endobj 27 0 obj<> endobj 28 0 obj<> endobj 29 0 obj<> endobj 30 0 obj<> endobj 31 0 obj<> endobj 32 0 obj<> endobj 33 0 obj<> endobj 34 0 obj<> endobj 35 0 obj<> endobj 36 0 obj<> endobj 37 0 obj<> endobj 38 0 obj<> endobj 39 0 obj<> endobj 40 0 obj<> endobj 41 0 obj<> endobj 42 0 obj<> endobj 43 0 obj<> endobj 44 0 obj<> endobj 45 0 obj<> endobj 46 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 47 0 obj<>stream +1бzI93prppUW|! +fMxafXS=I?n|1C7)/!ek/, 3ʓXKfaIƠf|ș፶p܂U~垯jNyĐrlDž)o)^< T48;W,FG7ʨzP3O:|V@u, ?~b>bA0\&-YNnqv"RMK/Naй#:C@ ;}Crvˍh +dMutpoDn)v6oUŽ|6! rqs($TazLSSM]~І4#]^ +߼,+g +@OjM{IɣOͱkwWUN,.5]̭Ǟ0#i.@ +ЍʪMSeإ,0q &y^^3Q=pOo!gg{P?u¡4u%82/vdZʩ[KPQ?`!WI)vO3-v贋0Bt6̑m-rqÙtȎf<\[Y%ѿkOF'fKvWH•%%NzE+<:4Yriy; {!–cJiЁ2B g1/@j:ih@XօǎWbx^ Fjox߽u.}Ba5e]s@F=>LϑccYܥ@kWmţkWWN&E "^RpFvcUe,y2Dg _ARV)Q+,5vy+rX0).'hAj+z<;Ʒվ貇Id=gjFgu * ,:o,?SҋK5o2d̑Tڎɓ;zڛ(WU\X=sk:1AyFO;l\6p;'3rHYM=b"\c9P{C^W5z,@|4L;a5('gњ`??,?m%m)?u4'+Nk8 H.cs@3kVWI۶I|Si1Ur!񹹽A,xdHSc_}!d.2qo@xyGϺȠ*dJ]eSPCthO!Jl^: UjCinVPlZ=,G2JK6 %Qyij{D5WP 6a u +endstream endobj 48 0 obj<> endobj 49 0 obj<> endobj 50 0 obj<> endobj 51 0 obj<> endobj 52 0 obj<> endobj 53 0 obj<> endobj 54 0 obj<> endobj 55 0 obj<> endobj 56 0 obj<> endobj 57 0 obj<> endobj 58 0 obj<> endobj 59 0 obj<> endobj 60 0 obj<> endobj 61 0 obj<> endobj 62 0 obj<> endobj 63 0 obj<> endobj 64 0 obj<> endobj 65 0 obj<> endobj 66 0 obj<> endobj 67 0 obj<> endobj 68 0 obj<> endobj 69 0 obj<> endobj 70 0 obj<> endobj 71 0 obj<> endobj 72 0 obj<> endobj 73 0 obj<> endobj 74 0 obj<> endobj 75 0 obj<> endobj 76 0 obj<> endobj 77 0 obj<> endobj 78 0 obj<> endobj 79 0 obj<> endobj 80 0 obj<> endobj 81 0 obj<> endobj 82 0 obj<> endobj 83 0 obj<> endobj 84 0 obj<> endobj 85 0 obj<> endobj 86 0 obj<> endobj 87 0 obj<> endobj 88 0 obj<> endobj 89 0 obj<> endobj 90 0 obj<> endobj 91 0 obj<> endobj 92 0 obj<> endobj 93 0 obj<> endobj 94 0 obj<> endobj 95 0 obj<> endobj 96 0 obj<> endobj 97 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 98 0 obj<>stream +M*?:{J<4|e<@pnmiC= LA% +=k+Tq%9H:L sD770ذU&%r (m=DGPwZl_td"UC-9zshS7+fT;7 + +(~`G{GKN(u4WK7s%_VTyg/=kddܝ.rn@)4P.^7䇕}2eT[_|62VIL)4so.DxK 1l> !1w_,kc`w :TU&qŋ3- @4 POwE2zJG:.H5 䫚tq 6Cq{&!tӳ)1Ę96ō,WDR! áS~5"^ 0_'$"&Fs'L}kz\i9Ձ/ \GDrM_pay_lSBqK_O.1~owd݁Ӕ +I:wաx]ռR^[jOυúSx:%3hvg,Ă2 N`"%7x@"C?8/)7n , 3kwrz)W!y`c0"Äى/C/cmQ*ςiws?sqX,&,'[!_?j(ӎFz7k2w-V[V5/Qdޥ'^Ѻ;7v.dXcX nɫ ૠ d6u|:qped^2uS㬋{ S&CE(]pr3cZT'u%Uؼ#24<3+ +Npn czΠ;ygfӘqK28PL84AJ/v|Af"Xm +=3\6NYF{r3rAq)%Ӏ0EҪ%s%5tdVJ9Ƥe??6r5,#=:4r˾ICkb^=o0k{{qLЕւg{C8-\`e9?^ٷppH"t Hr)®:y"f'= m*?bnA/ \tsJ;aVc K"#-v/UHѸ%?`_iƍkHC'-g܆cJrOz5̠Ͷ:jGoqS Yy|?߲>;x3U>4~ XޭAĖo:ǓA+ieUK7):ɷ6#+[y*WַI1(e<Ɖk2hocL [-]_4%ҮPi ni`4m*< >a}_60h>ΧWp4ɲ NDq? w۝Z3WF[lz86B3_;N.תD]ldRlt:nnMetH  +!9 x/VJ\CdA,BIΫpvz +{uŭmtεqPGݶ(;߸֠sfG3d+' iew\ +endstream endobj 99 0 obj<> endobj 100 0 obj<> endobj 101 0 obj<> endobj 102 0 obj<> endobj 103 0 obj<> endobj 104 0 obj<> endobj 105 0 obj<> endobj 106 0 obj<> endobj 107 0 obj<> endobj 108 0 obj<> endobj 109 0 obj<> endobj 110 0 obj<> endobj 111 0 obj<> endobj 112 0 obj<> endobj 113 0 obj<> endobj 114 0 obj<> endobj 115 0 obj<> endobj 116 0 obj<> endobj 117 0 obj<> endobj 118 0 obj<> endobj 119 0 obj<> endobj 120 0 obj<> endobj 121 0 obj<> endobj 122 0 obj<> endobj 123 0 obj<> endobj 124 0 obj<> endobj 125 0 obj<> endobj 126 0 obj<> endobj 127 0 obj<> endobj 128 0 obj<> endobj 129 0 obj<> endobj 130 0 obj<> endobj 131 0 obj<> endobj 132 0 obj<> endobj 133 0 obj<> endobj 134 0 obj<> endobj 135 0 obj<> endobj 136 0 obj<> endobj 137 0 obj<> endobj 138 0 obj<> endobj 139 0 obj<> endobj 140 0 obj<> endobj 141 0 obj<> endobj 142 0 obj<> endobj 143 0 obj<> endobj 144 0 obj<> endobj 145 0 obj<> endobj 146 0 obj<> endobj 147 0 obj<> endobj 148 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 149 0 obj<>stream +;-"l^Ք8@p &"Z/Ema}*1tfs  /cZkO0/0Cfh>S}Kfb;d#Tjl wV)|u@[O읶4IE?؃ph=w+?*} vDqElM+fDZWd[Ԉs!ӦҷJC >"ÜHJiz +:-]уZIWXN:e*lsǧ zaa  )T=~x$~Ig7Itm92uo^.0yfPtnji=G9үKךun"w_h31u: 'CCT>#kI2|W֯wuȟ! A秩ImA MWr= Yz; #홙nޅ asmf)q埸l mчNXH򒻟7ٚb M'W/gkzUYtƒRB7vkOW"7RfmA9 y܁0&WFWP +KqT44[[ΣY;EL8`J8.E C#iUg,Ah5mfq;J̏OlUݥU-b F5Я|D +]F: -8,HADY+ӀaVT' AP5SpeaڿOJ!psB p{a5rtgBbנ4_-H2R8*;eGinJK\Ǒq-^5K[ +?U8+O@ZTDH~6 ee& * !]Dݞ+)]d-z %jj21xl /nj6 +c)">DLD p~fV?Z(c.scv]7nS j؆8Cdj0bӣz- AGDi_1TFb {ZdŚhM8ΦFZ2Cxi rw֙O$XEgWDm[+J2(R'bv +_>(pW|v~u +q.;"oț% NSzSqx?DOw{p'oΈS&ӽ\y 2 _&rY`Tk +DO-kR-ᔌQihƂҡ#Kɰx%<,nʔ sMq%y5Ywo6%WtrN1ŅW*+^Zȶǖ1}eÃ$)SQ9A= :VǝnMڋ&Nⅹ`.O-;4A(4լDs VI,kv4H[MGoz倐u11qsHԭ" NR_^2" ZR.뎱a,+_|hL(􉚯87fnT_z.'z֋I#G~Ϯ./5w5U +>Ɛu4H4j4&r +݉ǹG(MoSg`/#Z9j +endstream endobj 150 0 obj<> endobj 151 0 obj<> endobj 152 0 obj<> endobj 153 0 obj<> endobj 154 0 obj<> endobj 155 0 obj<> endobj 156 0 obj<> endobj 157 0 obj<> endobj 158 0 obj<> endobj 159 0 obj<> endobj 160 0 obj<> endobj 161 0 obj<> endobj 162 0 obj<> endobj 163 0 obj<> endobj 164 0 obj<> endobj 165 0 obj<> endobj 166 0 obj<> endobj 167 0 obj<> endobj 168 0 obj<> endobj 169 0 obj<> endobj 170 0 obj<> endobj 171 0 obj<> endobj 172 0 obj<> endobj 173 0 obj<> endobj 174 0 obj<> endobj 175 0 obj<> endobj 176 0 obj<> endobj 177 0 obj<> endobj 178 0 obj<> endobj 179 0 obj<> endobj 180 0 obj<> endobj 181 0 obj<> endobj 182 0 obj<> endobj 183 0 obj<> endobj 184 0 obj<> endobj 185 0 obj<> endobj 186 0 obj<> endobj 187 0 obj<> endobj 188 0 obj<> endobj 189 0 obj<> endobj 190 0 obj<> endobj 191 0 obj<> endobj 192 0 obj<> endobj 193 0 obj<> endobj 194 0 obj<> endobj 195 0 obj<> endobj 196 0 obj<> endobj 197 0 obj<> endobj 198 0 obj<> endobj 199 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 200 0 obj<>stream +~?IpD6ϒXrUouR'A7.{udLji kjrex|o00JxѵM/\5 ;ȵ:&(e.ɹ)Ҕ8,3_l9,i˽dP党H^D2ټY NW4'@✥ +eMzy4J_ BΤ-(V#lK $b:74S|tXb(63d1D:dHs[!Wjl縹cvj\&؜fU3f'HN*-0`?`@X a/͂4v^nӈEdFe!wYJ1p#I9tN FS] T:oM5'2l1BJD{Kxp]Ӥ{7M;/J6"]s`ڞ\h v-mFK+n"-{THH!5Y uPtvST05- N'Z{r\ rn*y+(_Z-UKH){ SҲjHݢ~$  P_bG}Gkg~ +gG>{ª[A +ib'[yb+Z_y^|B jM{H=,P~ZڿzR.AT*_គ聾pp+G9Bz5;!AkѲRD { d&T+Ft9h!m JK.֩UӸ1St+΢.tr{ۮ5AVoNZI< xA t`<¤ߵ "ZU46ևS)9Ux"02o= ;*Z*N&9ڐMm@TǸ;. ǎlȧ94^ˤ ++g2}(*e&c`> Aץywܑmkl~Ya٭~ +T]ꠊЌ*2oU6ߙ8g5NS"izm쟢K9qR «{2ˈǯ҆0 7R5GTCPC\F-Q/{cGT¹cLˀoz41h9=*-К~UV#R>10|J<ׁU ?"g[t-Sd)v7J+BKkҾ-cOH܀1M eۓ +)ym0L'[1z"Ȃe.ˏ-b 2zFl %x~\SÓ`\z`_>,;*PPn8ւnT!ؑ18f T8imf)e5L=lO677 bpWd,4Q#b/\P/oy +.>ҹO0{±tj<U1:3mWZG:S5 l$WAghZ3֏y2y}tvw3Kd-T^ c ,NNr,,\'0~__yggy}-|  2КfCm7k-GvG!aZdpkzsTa5r\&JC!; 2h3@txtEkfw3|)~[A`%ІOV׉4M#!} MPz揬bgoҡ'b6|`񹹖8x/'""*x"œ&`H +endstream endobj 201 0 obj<> endobj 202 0 obj<> endobj 203 0 obj<> endobj 204 0 obj<> endobj 205 0 obj<> endobj 206 0 obj<> endobj 207 0 obj<> endobj 208 0 obj<> endobj 209 0 obj<> endobj 210 0 obj<> endobj 211 0 obj<> endobj 212 0 obj<> endobj 213 0 obj<> endobj 214 0 obj<> endobj 215 0 obj<> endobj 216 0 obj<> endobj 217 0 obj<> endobj 218 0 obj<> endobj 219 0 obj<> endobj 220 0 obj<> endobj 221 0 obj<> endobj 222 0 obj<> endobj 223 0 obj<> endobj 224 0 obj<> endobj 225 0 obj<> endobj 226 0 obj<> endobj 227 0 obj<> endobj 228 0 obj<> endobj 229 0 obj<> endobj 230 0 obj<> endobj 231 0 obj<> endobj 232 0 obj<> endobj 233 0 obj<> endobj 234 0 obj<> endobj 235 0 obj<> endobj 236 0 obj<> endobj 237 0 obj<> endobj 238 0 obj<> endobj 239 0 obj<> endobj 240 0 obj<> endobj 241 0 obj<> endobj 242 0 obj<> endobj 243 0 obj<> endobj 244 0 obj<> endobj 245 0 obj<> endobj 246 0 obj<> endobj 247 0 obj<> endobj 248 0 obj<> endobj 249 0 obj<> endobj 250 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 251 0 obj<>stream +@o29o1yfQ, kg kD/D灯齓Ym;i+hO I00}~OH<6?meRLKr@1ÛtLsAm]+Dm.+ֹXԜ6!FjMJɚzbjd:@&+_G"_\Hfb ܼ%PIA4=jGDCaZ,Zp:L8AnzQfzi!e[|pNhd}o{eGe"{9=`2>ä\}p=/P%(nE$5QZg^p[+<=='ZaNxUѪXs2>4(Q l2IV'5r, Q*v]sbf9~ޒ* Hz XE4蜢{SƫdYC^ݿr ykh>YzVV**#̞ aiy.Q,<OȘXŒ,s7B p,pəRưi#f`-4q)hHb${f~@MuetVCdxjIw@xm[YFc{4 rrY +俑bTT=S ytU;`P/U%/j*8PCΦiP ikڮXCq;mO25 p]-]їg TKx3#,LlS'64w"s/<&?2(ldd=%G?lg(Gw!zPMヲk2ynytN$,R咭ȕm )- + '>D!b>۰e$?5PgK^Ds2I~|D?CbBze>;n@bعB) 54"lswJs}DS;lc+rz~U_N!2z>_΀j mY1;Zn,W6~b,:<&m kZ{!'}{ݺGۿMd6T>sč}jї5$&6Q#ߚ9D +BF{" +#ZWI׉@9QxCF#R#{b~?0^.RNpD{(q!.0wtGH =ǶxS]U ?Lp=iѡq@H,X Ca[Ld[8SHe|WA#^Do{k=KREer`GS KYp'o +iLP6ey9 Skr,ʼW$c/ +EW5cy9򚷄m_ ++Tb|ډϦV0=+a_ ^pݩIO_ux6}DU MSOY: +endstream endobj 252 0 obj<> endobj 253 0 obj<> endobj 254 0 obj<> endobj 255 0 obj<> endobj 256 0 obj<> endobj 257 0 obj<> endobj 258 0 obj<> endobj 259 0 obj<> endobj 260 0 obj<> endobj 261 0 obj<> endobj 262 0 obj<> endobj 263 0 obj<> endobj 264 0 obj<> endobj 265 0 obj<> endobj 266 0 obj<> endobj 267 0 obj<> endobj 268 0 obj<> endobj 269 0 obj<> endobj 270 0 obj<> endobj 271 0 obj<> endobj 272 0 obj<> endobj 273 0 obj<> endobj 274 0 obj<> endobj 275 0 obj<> endobj 276 0 obj<> endobj 277 0 obj<> endobj 278 0 obj<> endobj 279 0 obj<> endobj 280 0 obj<> endobj 281 0 obj<> endobj 282 0 obj<> endobj 283 0 obj<> endobj 284 0 obj<> endobj 285 0 obj<> endobj 286 0 obj<> endobj 287 0 obj<> endobj 288 0 obj<> endobj 289 0 obj<> endobj 290 0 obj<> endobj 291 0 obj<> endobj 292 0 obj<> endobj 293 0 obj<> endobj 294 0 obj<> endobj 295 0 obj<> endobj 296 0 obj<> endobj 297 0 obj<> endobj 298 0 obj<> endobj 299 0 obj<> endobj 300 0 obj<> endobj 301 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 302 0 obj<>stream +}T ш/#тyFY:oe.n5ɆɖvKsWHlo-P\(u7mI05jiUQzPbQ"QrΩ,FM#NV9nKj>V`v9B롍2u+Cl-Dx`vgbLN)ͺ5]>9]]$C Gc.f~∟#g 3;xxO1Tk%grA%[kcidUzFd1`6c'}LoZ *2fлo\d">QB?1 Fa}nfgiDr2i$~ro\ځa#+)Jqn8-2s`idՕ +jŮϯæ,CX/$_xWxw69Ew]Z55ZX]F]gƌ)¥c)ǖfh:,z謖8&iǍz$eXsNz#Z鋣σS-%KV*-"=8f Mmd;H#,m~gx^3mڣn;C>zd/ReqIɿsߏ6ڠ6Ojs&`}tMs&=Ӕ\LgʍZO."dc]W2"HbXjk!9"f6AJ5x 7lY>;e+ mh s\T=>Q}ة\ႌn.zSd#- ڇ1+--`C+EΆV|cB92JoQ$@ƾp;-Kğ]bHQPGx7U^aߩz޿8M1N:`C;$pHM$`lP_,۴#Y]f%Ͳ !hV1u]N\n󝟰%E(w}jm/gT, 3R84}5,6%1MS~&k[8Ou .19+ek1FX:0 ľKhuI#W8FYc*.xl?t`lhVR|Qc+*[H ˖ ARJWŨ[4;`B4ڬ+oߐx4y%uG_$2a:~qD,g?!~[urs͋mjllJ*54$dyݯ`vw $U7k\bodon:A/$<);Qr}H1+DH7sc[GwL0 &Lz9߉uF (1$czc͈lJV;9G;Gqe 0\v' qM)7aՍC, )y@-2 5JJ:pu@.n+X\/MǵUz> endobj 304 0 obj<> endobj 305 0 obj<> endobj 306 0 obj<> endobj 307 0 obj<> endobj 308 0 obj<> endobj 309 0 obj<> endobj 310 0 obj<> endobj 311 0 obj<> endobj 312 0 obj<> endobj 313 0 obj<> endobj 314 0 obj<> endobj 315 0 obj<> endobj 316 0 obj<> endobj 317 0 obj<> endobj 318 0 obj<> endobj 319 0 obj<> endobj 320 0 obj<> endobj 321 0 obj<> endobj 322 0 obj<> endobj 323 0 obj<> endobj 324 0 obj<> endobj 325 0 obj<> endobj 326 0 obj<> endobj 327 0 obj<> endobj 328 0 obj<> endobj 329 0 obj<> endobj 330 0 obj<> endobj 331 0 obj<> endobj 332 0 obj<> endobj 333 0 obj<> endobj 334 0 obj<> endobj 335 0 obj<> endobj 336 0 obj<> endobj 337 0 obj<> endobj 338 0 obj<> endobj 339 0 obj<> endobj 340 0 obj<> endobj 341 0 obj<> endobj 342 0 obj<> endobj 343 0 obj<> endobj 344 0 obj<> endobj 345 0 obj<> endobj 346 0 obj<> endobj 347 0 obj<> endobj 348 0 obj<> endobj 349 0 obj<> endobj 350 0 obj<> endobj 351 0 obj<> endobj 352 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 353 0 obj<>stream + ؤ`pO˾ 3ϑJ0['`DB 4jc373U-QT%>|PXU [o$v6n;4RwXhI{C 4s;4YZ\W G'ϔN +\OD#+a]76 GHCάpLx7e1fiڞoyIv"ӹfn*Y6ABϤH<_lnԥڡ]gފ$w>D2=77gq( Z mnD?4Bsff˜ecX8mCOq;Jߧ,E n/5cKLNfY^SiA/[-FA iS0^̩E%I\?x@Ɂu)ƫQRMȇ>?~Bi!]9Tq `N@"$]u<F'Vs']PUWzّ8HDT߽9,#rM`(j3R9i0$E~?\ßz@R=mvzrRC\v[7-q0//faHuaR*5[~ݐ^]ZQQDX9[H9ڹhN~%} $ᆪ[> .UF=+/5fYvgO׻5W+ 2<rlӁGI6ǻfm$Iv|WUǧBNsllSZ&4Ea5礎@5=c"@'_-Ui Cx=ɞvn{8Ѕvx4z_3#ggָ,5&Pe߲6shgDHkNFu'#H&)q2Q]2b,ЧU](OM:Ŀh&|*^rhlOcsg#DqyQ]#Ӭ^jFbb*':Gd1:>(in =\ƩrxԚ_uN9C%KdR4%*Xo,}E`RS z9:[vxe)ϖYΌqmPr!c° 6Pñ:!Yb]4Rur0'\5h -+oҥ QLl(-F +qm ?Pn9N[K\S;h6KAo4 +u=r_V +endstream endobj 354 0 obj<> endobj 355 0 obj<> endobj 356 0 obj<> endobj 357 0 obj<> endobj 358 0 obj<> endobj 359 0 obj<> endobj 360 0 obj<> endobj 361 0 obj<> endobj 362 0 obj<> endobj 363 0 obj<> endobj 364 0 obj<> endobj 365 0 obj<> endobj 366 0 obj<> endobj 367 0 obj<> endobj 368 0 obj<> endobj 369 0 obj<> endobj 370 0 obj<> endobj 371 0 obj<> endobj 372 0 obj<> endobj 373 0 obj<> endobj 374 0 obj<> endobj 375 0 obj<> endobj 376 0 obj<> endobj 377 0 obj<> endobj 378 0 obj<> endobj 379 0 obj<> endobj 380 0 obj<> endobj 381 0 obj<> endobj 382 0 obj<> endobj 383 0 obj<> endobj 384 0 obj<> endobj 385 0 obj<> endobj 386 0 obj<> endobj 387 0 obj<> endobj 388 0 obj<> endobj 389 0 obj<> endobj 390 0 obj<> endobj 391 0 obj<> endobj 392 0 obj<> endobj 393 0 obj<> endobj 394 0 obj<> endobj 395 0 obj<> endobj 396 0 obj<> endobj 397 0 obj<> endobj 398 0 obj<> endobj 399 0 obj<> endobj 400 0 obj<> endobj 401 0 obj<> endobj 402 0 obj<> endobj 403 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 404 0 obj<>stream +Bd?KW'YԬ35`E&&ܻ%{6\ +'/#x*T8?; K2PbQ+9qbqGabޢЬhmIa׽ZZBYN#zxqJK_p%^QuxDY/>+??zW)v#]VCz<]FUoQ6n?nζ{.pzL6( )6,7lm4 J=p<۔EuxiyPOGs,izLƬK=?y+)FƨݦNeh?/Je3*M'Fo 5{aw5M 3h"[\"D@.NTM mZ(ϻ!'"2@$NrMc7ib <7 v+ p` `H)SYp}8#^kz{l4_ZώWD+6szj2}xϐ + bG>;5m+ 鰥v@[PħP8@\!P) 2i={cC-PV˫WF| &W<.fӮy Xp$߷1sL5Ǝ)@Cb'A>;[?ݡ%6U3]CpMj@c. #kqؙ服!8hax`7.54JJݵ=xJ.Z&,2,X0./Rm{5 0#~@ +* +endstream endobj 405 0 obj<> endobj 406 0 obj<> endobj 407 0 obj<> endobj 408 0 obj<> endobj 409 0 obj<> endobj 410 0 obj<> endobj 411 0 obj<> endobj 412 0 obj<> endobj 413 0 obj<> endobj 414 0 obj<> endobj 415 0 obj<> endobj 416 0 obj<> endobj 417 0 obj<> endobj 418 0 obj<> endobj 419 0 obj<> endobj 420 0 obj<> endobj 421 0 obj<> endobj 422 0 obj<> endobj 423 0 obj<> endobj 424 0 obj<> endobj 425 0 obj<> endobj 426 0 obj<> endobj 427 0 obj<> endobj 428 0 obj<> endobj 429 0 obj<> endobj 430 0 obj<> endobj 431 0 obj<> endobj 432 0 obj<> endobj 433 0 obj<> endobj 434 0 obj<> endobj 435 0 obj<> endobj 436 0 obj<> endobj 437 0 obj<> endobj 438 0 obj<> endobj 439 0 obj<> endobj 440 0 obj<> endobj 441 0 obj<> endobj 442 0 obj<> endobj 443 0 obj<> endobj 444 0 obj<> endobj 445 0 obj<> endobj 446 0 obj<> endobj 447 0 obj<> endobj 448 0 obj<> endobj 449 0 obj<> endobj 450 0 obj<> endobj 451 0 obj<> endobj 452 0 obj<> endobj 453 0 obj<> endobj 454 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 455 0 obj<>stream +Te~C& Gis2t!~R5_i~($6ݼ?Ahh{/Gzw|`>&an z1\dN#evbG9$QQ [pC,:SXEѨf#-bSz,TO#UkRCd-"L/חd0|#$7]-ti% uSul?,wJ~hكUfݥcutuLb[Ng#Q$cv2Y|k/cBKo|lH)4tAEK\qn{ +jyU_ +Q4[:򷬲1u2 Ű- 4|3p8 +P=%a? j_)^;y4 lM|<8`Ll8cYiR&lȯ8nނatLHoO0G}yBА%gI&M±K4UTiumLD4+DAԶT +AҰۮb +Xz)%`ELƪVp)_3T1|~CQ[f'l`;vw]G/ˆ3I\%g9YOZtԇ8'hJH+#hG[-1q N;?M (i`#XSz0(#M/i}3W=)XG#~:1}zM:N|F-9H,hMAz4:ۈyv @Ѹg KߨaR#J`$;oQ.i2@z$xi̎~*[< &!!^Ru68PT޴Cjŷ/6"w[喃B&J(9twqYo 3% w#2+bJuF f$_xWnPhQ֨刼e&sjc-u纱),iԔ7o,F3…dr a:sNt:uck;ScP }E_3pGֹ'pw,ǵ $1夶tZzhr!~I/<`Y/U)zйݙR6;k{/ *[w_ 3y#h0R2X;{u{3.TG8lX% L<dUVq a,kxfYC +endstream endobj 456 0 obj<> endobj 457 0 obj<> endobj 458 0 obj<> endobj 459 0 obj<> endobj 460 0 obj<> endobj 461 0 obj<> endobj 462 0 obj<> endobj 463 0 obj<> endobj 464 0 obj<> endobj 465 0 obj<> endobj 466 0 obj<> endobj 467 0 obj<> endobj 468 0 obj<> endobj 469 0 obj<> endobj 470 0 obj<> endobj 471 0 obj<> endobj 472 0 obj<> endobj 473 0 obj<> endobj 474 0 obj<> endobj 475 0 obj<> endobj 476 0 obj<> endobj 477 0 obj<> endobj 478 0 obj<> endobj 479 0 obj<> endobj 480 0 obj<> endobj 481 0 obj<> endobj 482 0 obj<> endobj 483 0 obj<> endobj 484 0 obj<> endobj 485 0 obj<> endobj 486 0 obj<> endobj 487 0 obj<> endobj 488 0 obj<> endobj 489 0 obj<> endobj 490 0 obj<> endobj 491 0 obj<> endobj 492 0 obj<> endobj 493 0 obj<> endobj 494 0 obj<> endobj 495 0 obj<> endobj 496 0 obj<> endobj 497 0 obj<> endobj 498 0 obj<> endobj 499 0 obj<> endobj 500 0 obj<> endobj 501 0 obj<> endobj 502 0 obj<> endobj 503 0 obj<> endobj 504 0 obj<> endobj 505 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 506 0 obj<>stream +а ζ+z<AD?D;)Zc3+$.wr9nכVhllN`?t9BD3xvpfٿά 61||y0Au.S߳}!+G\D9(]'3J6z=?Ĉ"V`}ؠ'])88m yc:ј`8sq rp1xAWvbTduv^!dGni<0S?#k4Vy8ygp1mrNÒtz56B3_de-d4|MuշE!FbM͏/A3UIOyvU1YbG[dxBH{ys^e?Pa [FSKq'x)'k8H눧h۝%ݛrڙ3J)ࣷ}z"fF/eGHԊImQuj)̕/ҼڹBnK +\K'l"4)wZNsl2zE!zgR^E=<M6ݵt^\Og{Etu._0XixWQq;)F˵uÀHPP@<^!UZJr! +HuNgU+][󇓊ҷBqlE =kȅ `&byA6IJR8SkeT}iu,gީۜn0h͛ $"(w~:XYs|I^`,Lw̧{$v6ejCbJa+~Wc8ņEG%wN.@s$\i;5-\NN20<:rhdp :f3a>&EM([ĵ8,Fz4ke}tvqj(TdE +r t.f~Bf!i'lTњ%") kR<gKK ++dP4.D,nLWUt%ԨWW%g T^?^Zvn[l!G\R;!Id:*NO γ_rEVYs1a:Ww~pygqYd6IPݢIK +dqIe&P?l {rnEڿI_RvKٚ; 4_1V<.plE9]}rxUإW=T+kYZqd[Z=]/PAK牃ϰ+$C_-2's`UU$:jh1 =1RNU4mA*  لG_(Te4r}claʔ+/F4X,*~ SChho/ȣI_[֫d ),%tU+M$t_#oje~ mΝ'˾ɻpAֱ 9%nLl\>~R]7MOoˊHσe]{UDWy'KRNS gP~Eۦ72'Ҵ8 Dtj\Gj!V~v~J0W` Idp5?M ?w-3>tn~2%&?SU&tõG0!XR_/Ϊx!0gh8aWY)7N-p;z$Q]>y y=?K:/ê&\L õJeNY' +endstream endobj 507 0 obj<> endobj 508 0 obj<> endobj 509 0 obj<> endobj 510 0 obj<> endobj 511 0 obj<> endobj 512 0 obj<> endobj 513 0 obj<> endobj 514 0 obj<> endobj 515 0 obj<> endobj 516 0 obj<> endobj 517 0 obj<> endobj 518 0 obj<> endobj 519 0 obj<> endobj 520 0 obj<> endobj 521 0 obj<> endobj 522 0 obj<> endobj 523 0 obj<> endobj 524 0 obj<> endobj 525 0 obj<> endobj 526 0 obj<> endobj 527 0 obj<> endobj 528 0 obj<> endobj 529 0 obj<> endobj 530 0 obj<> endobj 531 0 obj<> endobj 532 0 obj<> endobj 533 0 obj<> endobj 534 0 obj<> endobj 535 0 obj<> endobj 536 0 obj<> endobj 537 0 obj<> endobj 538 0 obj<> endobj 539 0 obj<> endobj 540 0 obj<> endobj 541 0 obj<> endobj 542 0 obj<> endobj 543 0 obj<> endobj 544 0 obj<> endobj 545 0 obj<> endobj 546 0 obj<> endobj 547 0 obj<> endobj 548 0 obj<> endobj 549 0 obj<> endobj 550 0 obj<> endobj 551 0 obj<> endobj 552 0 obj<> endobj 553 0 obj<> endobj 554 0 obj<> endobj 555 0 obj<> endobj 556 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 557 0 obj<>stream +ߊcEN_5;0cnա$+)4 .T] KqNJ iQF gYC5W}CAtFe݈ +mޛ1>ݜv=^F`D7_#z*o)GE^kPC:宂ҏQȯIf6Xחy,`L~$Cq38q(#h erl}Ppc+4J pZC36>?)Kp쪲)I1sLc;Kϖ$!Yn}d]͖*Iw?0!,"a|k|9Vb<>4eh}ހk?̱ᑚM+R9T캻:uDc(Exh-E=Cs* RdnV4,36("R4f67u+0s.ؐدof)TQMwCE%\zinϲdKu֚o:#>{ F@{o?ve(#Vk42Hp yӿ$# }z*[?$Ӹ4΍ טߚ(,8Q:̢vf~aBB(I+u j}xkbxu콡|NEYG|C2]DRyqL"JR;`{EWueܯ!t +PKpeTY> v&0*Ö6N?0ovm`\=Ӷ=nSK{Vh={ #J B9 s}Ӆi>JkwP$8 ZJq\lX-p> (\JF^לK29OXjKQ ˽5O 5S#,>5Xs7\t4qV5DSbsߚqp??Tء`Tm8V~KQi yoNkr([Q1FZl)'8V ;F)Nkzםao7 [ @Xmm |X:N;okPvk2?6q|c|P/Mr溜/p_F2 Qb|ZCw"WL|'1=ϔ9l,<XnzDcgҚ9l< +L>8)mp EgZd,vA XwHdG<\y3o$MB Xnj???/* " T G&[YB)`B +O9~鶏G Z*3>3$ǝ]A]k(r=XJ6i%zFG|8ҀW*yKQI<Ԥ8jk[ĦrT:(*Xq5fغ|̈́^08? ]T͟qHh(*V +endstream endobj 558 0 obj<> endobj 559 0 obj<> endobj 560 0 obj<> endobj 561 0 obj<> endobj 562 0 obj<> endobj 563 0 obj<> endobj 564 0 obj<> endobj 565 0 obj<> endobj 566 0 obj<> endobj 567 0 obj<> endobj 568 0 obj<> endobj 569 0 obj<> endobj 570 0 obj<> endobj 571 0 obj<> endobj 572 0 obj<> endobj 573 0 obj<> endobj 574 0 obj<> endobj 575 0 obj<> endobj 576 0 obj<> endobj 577 0 obj<> endobj 578 0 obj<> endobj 579 0 obj<> endobj 580 0 obj<> endobj 581 0 obj<> endobj 582 0 obj<> endobj 583 0 obj<> endobj 584 0 obj<> endobj 585 0 obj<> endobj 586 0 obj<> endobj 587 0 obj<> endobj 588 0 obj<> endobj 589 0 obj<> endobj 590 0 obj<> endobj 591 0 obj<> endobj 592 0 obj<> endobj 593 0 obj<> endobj 594 0 obj<> endobj 595 0 obj<> endobj 596 0 obj<> endobj 597 0 obj<> endobj 598 0 obj<> endobj 599 0 obj<> endobj 600 0 obj<> endobj 601 0 obj<> endobj 602 0 obj<> endobj 603 0 obj<> endobj 604 0 obj<> endobj 605 0 obj<> endobj 606 0 obj<> endobj 607 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 608 0 obj<>stream +kLv\IZJ{fHykq/SӷQ):6/2о\@(u7Y#-wtlzyKTHӹ>YNٯܘ:R(HjW͍=;ˮ\wUD o@@#@_bxbPM?T[ia!w@C髐MW12AGGGI3#U'{qO8 \Ʉ|(qGBzBjZYfZ{꣑er/B]!u&clylibNt{'T62LVN)EHyN쯗jO.2H@vnr-#o\"`)$=a&~'꬚^7ֆ~<<'Tjz̦:=|j[ +5he8WM/&WBe``ċ, *o $R}`^t/(UŪ"El\1wz=o`P5ztW7űNFk׹ >ח5J ;< 5 %&C;ݭ'bȧe7PGy jxC~wN*|-[uw ` W67P~3fmSY8.SڤJ̴H x15q +P)=+~Vئnʹ>J S8?KaL$U0ūaOre[Xĭs^TI{7j}hngd-wDh I,n:NwKDqm5cV+µbd+<Z8 C5kC&!D}j<{Ѝj6p)> x +Q[?XunAJY]eTdBU?FfGMF'2XDWd=S>ˊ.Jt%RN{U\O*sJy+^1=mV2sk>˃eHg?6md =ȨuNex"iؑNhGAYjw-bXb!eJvb3qg"j3 b(GcE6$i[j5rjkqK (IE$d:m +OVpwU;(_4`/@qz8a'D\{E:Z錜.&+uRǯ$k6 c'^M<6b?D⾇9tVfY2\8Vdc.ZIA#3 cͩSRV7KKd]ރD1X-BOqÓuY""M A\lmGqjO >hߘg[A:*<~pz@q,+a`ڂU1\t)XoԹYa0LF}qʗH!Vk^yt]גR:kGo3qHk-1m/=zU)ƿ.$'׽6>;䟂%C ;F,:]6Ѿ>K)byK1+)^P1'zHPJaHY+{̷]t>Mrnw_ $RUs O0{>"6pĩYzm*L&JHŋT@|&f~!J0 %WF9N*1 >D3, IAc]cqU}@`o +endstream endobj 609 0 obj<> endobj 610 0 obj<> endobj 611 0 obj<> endobj 612 0 obj<> endobj 613 0 obj<> endobj 614 0 obj<> endobj 615 0 obj<> endobj 616 0 obj<> endobj 617 0 obj<> endobj 618 0 obj<> endobj 619 0 obj<> endobj 620 0 obj<> endobj 621 0 obj<> endobj 622 0 obj<> endobj 623 0 obj<> endobj 624 0 obj<> endobj 625 0 obj<> endobj 626 0 obj<> endobj 627 0 obj<> endobj 628 0 obj<> endobj 629 0 obj<> endobj 630 0 obj<> endobj 631 0 obj<> endobj 632 0 obj<> endobj 633 0 obj<> endobj 634 0 obj<> endobj 635 0 obj<> endobj 636 0 obj<> endobj 637 0 obj<> endobj 638 0 obj<> endobj 639 0 obj<> endobj 640 0 obj<> endobj 641 0 obj<> endobj 642 0 obj<> endobj 643 0 obj<> endobj 644 0 obj<> endobj 645 0 obj<> endobj 646 0 obj<> endobj 647 0 obj<> endobj 648 0 obj<> endobj 649 0 obj<> endobj 650 0 obj<> endobj 651 0 obj<> endobj 652 0 obj<> endobj 653 0 obj<> endobj 654 0 obj<> endobj 655 0 obj<> endobj 656 0 obj<> endobj 657 0 obj<> endobj 658 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 659 0 obj<>stream +n:joA /)=^|,d#4$L]OW]b-k5,^k +XwFe*K[ QځKAD~Nι{;cXV(=< 7oh6G+ /Aoy ` w{kΞ |ə>e[b9]^$* ^N4,v[YH}b5n~u_m=&,Cʡ i %$F)~D?]#@ [ N~1}‰2uVv9A7:/ Hg +ss&#3ۣ8.s7-eșME}z+F)@IR1th'ql&׀&f)i{ْx36A s9QdØquGh( a@5C02˳tys+k%{H.+|Y`U5o8m{B0ED/}2 joI6sBIr%)2 N +g*z6IVM9>sdk[w B6:OK0R$y+BD|թN]Tݔuဥl_C ^hGHhq_=\o./!~`vn;Sb"sG2oPei_vz*XM9)3.MrEυ&پEn8M, Y+i>48H'a)f1j?;1eúܻ=E{Z1a5 򘞒-^:$eV3wP+bi>D`̩،F5B>3ܑx<}^U-g^ t5Q{K}tt3 t,k}NztVQ:~ܼ~ @ߴN. IOrTJww:j=+Tz=B|AU+zus +}Ζ6;c|&vđxnnc+PϚ%@ Z͞-3ޜT>x$Q#Wd%oPRYZti.f[ՔuUwGl`(I~L#YKWկt7{Z _幚[5*f&hڐQ +}*ށ6ܺrO mؚhWhWo;V x北bī a)5 *Yr\\W:0Ϧ.tjxOr

> endobj 661 0 obj<> endobj 662 0 obj<> endobj 663 0 obj<> endobj 664 0 obj<> endobj 665 0 obj<> endobj 666 0 obj<> endobj 667 0 obj<> endobj 668 0 obj<> endobj 669 0 obj<> endobj 670 0 obj<> endobj 671 0 obj<> endobj 672 0 obj<> endobj 673 0 obj<> endobj 674 0 obj<> endobj 675 0 obj<> endobj 676 0 obj<> endobj 677 0 obj<> endobj 678 0 obj<> endobj 679 0 obj<> endobj 680 0 obj<> endobj 681 0 obj<> endobj 682 0 obj<> endobj 683 0 obj<> endobj 684 0 obj<> endobj 685 0 obj<> endobj 686 0 obj<> endobj 687 0 obj<> endobj 688 0 obj<> endobj 689 0 obj<> endobj 690 0 obj<> endobj 691 0 obj<> endobj 692 0 obj<> endobj 693 0 obj<> endobj 694 0 obj<> endobj 695 0 obj<> endobj 696 0 obj<> endobj 697 0 obj<> endobj 698 0 obj<> endobj 699 0 obj<> endobj 700 0 obj<> endobj 701 0 obj<> endobj 702 0 obj<> endobj 703 0 obj<> endobj 704 0 obj<> endobj 705 0 obj<> endobj 706 0 obj<> endobj 707 0 obj<> endobj 708 0 obj<> endobj 709 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 710 0 obj<>stream ++b4uegܖ0V?e94iFݥciGwdT3b\*ˤaڜ;[\L1&c25#n9F t{jO]dJf/wII^!v{-J: D Z`IBZGTxݠ֌iH~vޒxSAĠ*WzzXˁT$ @=*^jԪHڣEE_!m˜=P|jZzħIrijeŋL~=Q Y0' v KUE@3? 0qu5C }=֜Q,PPc(eb':> If1(ܩz~Vq>iSsn>qt[ڳl=lۼw8w߂q +a`XVV%q9$,}*ce9^ +7h)ȧ1pȏSe`ߵ +'2 ƎPu.|v^R #BjqgrG+LIJ@|nҢ "c{Ɠ_qg!j< U≋1vB>!Woe0Ġ{wOvM7KEC\߻Y@8oMȍY|qnTڄO|oӛ + 0\"oAkze`szp(FȭpXtSSz)TˠhcZZw6:J]:l8Wݴ DKBw,-kxlȿBFz62tWv%zpR'iW%BG;\awQH8d ,z@H$^_q.jJ| [Oߔ]IY +TEml,e1u +sx(4MT3M[x?a|4S8,.{l8k nϡv1 +k m9d6>ډ+fFPj|&Yx P:+Wo)⌂@Tb+݌f 𽧢$=̚z\=AZnrxi(=KpHְlx8m;+eR{V1X{nm_2kTQN ;9 +ZD.ņVk~} &E ڧ{eVG+Z#luS\B?\{Z)MxkFQU1J6BIfG8xe ٕwje8(2cP\ +g}Hq+$bqm\? N-KG;]j"܀~FOJp@e Cfait'X )x|V5~qTY쐉<f j ?=B`褴-H;CRPTZ%sIǫC'Pʚ/lTaVaDp"X!ՓAJSi fI`g/jk-~EF{1Vt̬!Dƒp8B+C SFŮ}2q bu Ů-x-#ژ1!ฒt;>)e!s$ v|W#6Z-fmv{CS!%8H,C|<-) /)g9V[N5#p9 ǫ%`ӸULAb<4ਸpPf~!*]KȹM4_L񇏌Qcܔ$ ۲rsfsdӝGBQoZu*;9;&fUWyH8zC]\Ǎ+, +endstream endobj 711 0 obj<> endobj 712 0 obj<> endobj 713 0 obj<> endobj 714 0 obj<> endobj 715 0 obj<> endobj 716 0 obj<> endobj 717 0 obj<> endobj 718 0 obj<> endobj 719 0 obj<> endobj 720 0 obj<> endobj 721 0 obj<> endobj 722 0 obj<> endobj 723 0 obj<> endobj 724 0 obj<> endobj 725 0 obj<> endobj 726 0 obj<> endobj 727 0 obj<> endobj 728 0 obj<> endobj 729 0 obj<> endobj 730 0 obj<> endobj 731 0 obj<> endobj 732 0 obj<> endobj 733 0 obj<> endobj 734 0 obj<> endobj 735 0 obj<> endobj 736 0 obj<> endobj 737 0 obj<> endobj 738 0 obj<> endobj 739 0 obj<> endobj 740 0 obj<> endobj 741 0 obj<> endobj 742 0 obj<> endobj 743 0 obj<> endobj 744 0 obj<> endobj 745 0 obj<> endobj 746 0 obj<> endobj 747 0 obj<> endobj 748 0 obj<> endobj 749 0 obj<> endobj 750 0 obj<> endobj 751 0 obj<> endobj 752 0 obj<> endobj 753 0 obj<> endobj 754 0 obj<> endobj 755 0 obj<> endobj 756 0 obj<> endobj 757 0 obj<> endobj 758 0 obj<> endobj 759 0 obj<> endobj 760 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 761 0 obj<>stream +B2 y8͙ b<76EgNgQ° $:!pnZuU~ 񨸒i`"3~Q#! KH @\ |,g$©l,\M`{ +_Јx밝JAi"9;]~aqξ+t)?FxRgn].NGZapjn}}8dY6t5_I.AWÙWُ$`U:qTiYt|U#V|jrv@O2N(!l "z9R rANDt~ICk.c0 +qۍ֨L"`(BjdqE@ =QF؃ `*-Y(޴oo֒ҟeE(ķyJyT#SX|!ӐDx뮔|Y4|&{K yCpidl +GWu'Wo7c4=+pQ|7;]8;.ݔ9}<}"&.F!ěy[YN=!98.j#WI{=[I{v{dk~~q/Dj4zm[D(.c뢹׸c(7n.C3UbGHp_ڱ굛Y7 !t0,^er UdCό'[W,tg;Gbx WDz8؃Z}[C@$uSM7=g/k*\0}3NU{PZ~q'}A7R9$AUfFQtbq̞.0Ѣb Œ;jD$,ՏH]Nxm9Rn}B5^ӎ1 Tj 7>\#i8Hƒ"+5,~cJj }Z7(>lhsYٮqͰہbلfM U~^J*sR M˵Lo!¡ư߭4$&.rh>qץRNvaPg.)f}F$6/UC dns=rF/|3gZ/Jyܪ)w!}(Z>oa в)HltibS9ҭsM}mY3KaS>o"j7pq#s*LĐ"z60.秧AW@Ma~D3R4޳wqkQu`[2в_;M(FI-n{3)Ë $ +ތ$4o/oU#DzL+6d4 N*' Vty4}rK@zDi5PBHT;<U,**X!Dp,\4J}mCV[ne1=2'Fw9ThZKYlw̮R:|Q8JD՛N3do|tCN@ ò\;)%P\A66 ?}݂ +7l:{Ο7ŠV-7? +endstream endobj 762 0 obj<> endobj 763 0 obj<> endobj 764 0 obj<> endobj 765 0 obj<> endobj 766 0 obj<> endobj 767 0 obj<> endobj 768 0 obj<> endobj 769 0 obj<> endobj 770 0 obj<> endobj 771 0 obj<> endobj 772 0 obj<> endobj 773 0 obj<> endobj 774 0 obj<> endobj 775 0 obj<> endobj 776 0 obj<> endobj 777 0 obj<> endobj 778 0 obj<> endobj 779 0 obj<> endobj 780 0 obj<> endobj 781 0 obj<> endobj 782 0 obj<> endobj 783 0 obj<> endobj 784 0 obj<> endobj 785 0 obj<> endobj 786 0 obj<> endobj 787 0 obj<> endobj 788 0 obj<> endobj 789 0 obj<> endobj 790 0 obj<> endobj 791 0 obj<> endobj 792 0 obj<> endobj 793 0 obj<> endobj 794 0 obj<> endobj 795 0 obj<> endobj 796 0 obj<> endobj 797 0 obj<> endobj 798 0 obj<> endobj 799 0 obj<> endobj 800 0 obj<> endobj 801 0 obj<> endobj 802 0 obj<> endobj 803 0 obj<> endobj 804 0 obj<> endobj 805 0 obj<> endobj 806 0 obj<> endobj 807 0 obj<> endobj 808 0 obj<> endobj 809 0 obj<> endobj 810 0 obj<> endobj 811 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 812 0 obj<>stream +s0Qz)C*>OӴ{_a|M{C"N|xXkaY,y9tԜP&0fv4۩Dg$O쑳`+~3\¸4J]唞A">Q@m*n/OXklWVqX}.L>ۛW)%ܺ0 CTAV5Kl߇ipd%G 3^ț&ӢcUgKD[D8 )DՊbibgUS1Y6x4tbkXCZ`̘Z@Bz<+׽Oȴ,?xh/ڿ@+ M!?Bǭ݋bۨL ;Yc3>VםNuqUxTKi3&8:*-4qlSo`r!_ʬ?u?%[D2*-CwSոa" \6@ b6~rtlm';4DA3d\]*_d%0A!Y!b{/ =7^ɠis[%!BxLMt7ZfAg+&DY䋉iT<$CXwtw) 5.n ++Jey南gX>*g"T&]8Ҋ$`v\_MÉ _ +RLtim9A!ސv6zrGHK}xΨ^o^y bIy %/mNT^! |׈f&V}*/<.28x/ϋ8}A_N[s .EyO#ei=S3\:$.&`~$b-"u)퇯vۈ"ab%+1Ɨٴ_OcpytM謗b*;ՍOUR +mwgFYX- +}WUFMq\iQ~N˟^S"#—7p=h`a,@uba!P3 +`O#_E{6s[;(&)=;nCIhkl.o=>&c5BŮuV `,RyNm#+D2x>?6=:r:2 +1crOq#0,/@դ74 CD +nR jCsH=cU^'n4:R殾b҂;~vF>*ĀۍcSZH> endobj 814 0 obj<> endobj 815 0 obj<> endobj 816 0 obj<> endobj 817 0 obj<> endobj 818 0 obj<> endobj 819 0 obj<> endobj 820 0 obj<> endobj 821 0 obj<> endobj 822 0 obj<> endobj 823 0 obj<> endobj 824 0 obj<> endobj 825 0 obj<> endobj 826 0 obj<> endobj 827 0 obj<> endobj 828 0 obj<> endobj 829 0 obj<> endobj 830 0 obj<> endobj 831 0 obj<> endobj 832 0 obj<> endobj 833 0 obj<> endobj 834 0 obj<> endobj 835 0 obj<> endobj 836 0 obj<> endobj 837 0 obj<> endobj 838 0 obj<> endobj 839 0 obj<> endobj 840 0 obj<> endobj 841 0 obj<> endobj 842 0 obj<> endobj 843 0 obj<> endobj 844 0 obj<> endobj 845 0 obj<> endobj 846 0 obj<> endobj 847 0 obj<> endobj 848 0 obj<> endobj 849 0 obj<> endobj 850 0 obj<> endobj 851 0 obj<> endobj 852 0 obj<> endobj 853 0 obj<> endobj 854 0 obj<> endobj 855 0 obj<> endobj 856 0 obj<> endobj 857 0 obj<> endobj 858 0 obj<> endobj 859 0 obj<> endobj 860 0 obj<> endobj 861 0 obj<> endobj 862 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 863 0 obj<>stream +kحE Se"ǟԏ_Ʉ5-[XQ<{1om6v%c]+>S/PQk{L/K5}BWOdbmW0|ɘM50-]!{tl!?݄Q\c,AA `)YT ++ic!zZe% (_yGGK=elT籸g)jd (c j!#MyrjyTBq+ԝL0POp&\{+ +j7O5=B;y|*t.~;^Px˭V"W"u A͓ӻl I<0(6T圸Wޣ{cfutyʅ6Onwc2;*x s eܖ W~"T ZSV޷jQA53߮^)#~4.QxH[%ghyz&[O,QBbM[5Ǯxa˘,nBшׂ ^[6c}g* f>Z=.%m<)7V[vYw8LLqJb$Ta6W-МC˪PTK̙=ѻ: Å>=JV±c %8MCEvA +=waQٱfb.T ++FN\X}cUM&ŹB:͉3Wʒ z3xZɶ)$D:ޠzS$d~z̉(W$99 F*{bu/#EݐS]DR$` jQSRü(dl^l(8Hpi9JzΒKM1m$2*D160Jꪂݶlf8>eM#`X4cq'I +^ +ÞibnqHig쎍\,BT"9%>'P&4c~d-D^l/|Xn&B˝-e/<\^ҝUZﱁZm*,PR $3n?C8g|CO;vٚ/"1̨dRKAI YJ6-L<*piuq ѣyzϒ9׷shq/*gm"{G0eA}L!"G'zTQJ[LYqv uQRbjY$HY}[ߘ><`g˩Їw*SRw_w'0F*A|h{Ch#@"@Mhͺ#z^\/}] +fٴd+Lh^Tg(K#|=-C +Z_j/SI4" pd> endobj 865 0 obj<> endobj 866 0 obj<> endobj 867 0 obj<> endobj 868 0 obj<> endobj 869 0 obj<> endobj 870 0 obj<> endobj 871 0 obj<> endobj 872 0 obj<> endobj 873 0 obj<> endobj 874 0 obj<> endobj 875 0 obj<> endobj 876 0 obj<> endobj 877 0 obj<> endobj 878 0 obj<> endobj 879 0 obj<> endobj 880 0 obj<> endobj 881 0 obj<> endobj 882 0 obj<> endobj 883 0 obj<> endobj 884 0 obj<> endobj 885 0 obj<> endobj 886 0 obj<> endobj 887 0 obj<> endobj 888 0 obj<> endobj 889 0 obj<> endobj 890 0 obj<> endobj 891 0 obj<> endobj 892 0 obj<> endobj 893 0 obj<> endobj 894 0 obj<> endobj 895 0 obj<> endobj 896 0 obj<> endobj 897 0 obj<> endobj 898 0 obj<> endobj 899 0 obj<> endobj 900 0 obj<> endobj 901 0 obj<> endobj 902 0 obj<> endobj 903 0 obj<> endobj 904 0 obj<> endobj 905 0 obj<> endobj 906 0 obj<> endobj 907 0 obj<> endobj 908 0 obj<> endobj 909 0 obj<> endobj 910 0 obj<> endobj 911 0 obj<> endobj 912 0 obj<> endobj 913 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 914 0 obj<>stream +x?- $sy5WIbY_(ȭ?H! +"{E'] _J\ZhHK{2%b#=7<>w\l`[ ^C\'?o=V6D?6`-rLd% v,O%UVeWkm2?pϘ졨g)ꃕRoL;qÏ 7(^7[ G%) sȖ|l>n_i"v *w7ݘ۔(bA;UcM\eZX5]7CBwnߖ&z Q6VWo"|Ӄ)uu3;[J*k}He]F\iV0DSɠZ7̛v݇lX_-LǤfqُ9QQxyRMTyztFt< l]BJ5XY]YKX&RBRwFC\ӎ z+3rnf<W)F0:*2%YtbKz0#ɨ~cn*XppO_Ӏ2WhuY: +iz+zp-9zI ={+%7WȘċuReX^mԠtF%=NNಜAp!'ѵ~:v;mރt0~"dh%#eqL}@4Iw@uK8#7|Kyq RJxDY{Mfb/㓽k(AZ0& V)Z}钣;9Ƭ%zǢ jpn}f4xx`[Z?V% o +7L.e8HĀSURdzm}fQva~H¡&zSjeXڪU4 ef!ǶEz6F /f|DKH >8(- ][d#EuoЎlg=h4~&~7haηGɎ%'Gkv?l K6BL`x^ CO=o-!q^zۮ֔B'D#df\МTנîՙⰈaqZ‰y +^f3H2D/|g}ULx텣G?n)؜> endobj 916 0 obj<> endobj 917 0 obj<> endobj 918 0 obj<> endobj 919 0 obj<> endobj 920 0 obj<> endobj 921 0 obj<> endobj 922 0 obj<> endobj 923 0 obj<> endobj 924 0 obj<> endobj 925 0 obj<> endobj 926 0 obj<> endobj 927 0 obj<> endobj 928 0 obj<> endobj 929 0 obj<> endobj 930 0 obj<> endobj 931 0 obj<> endobj 932 0 obj<> endobj 933 0 obj<> endobj 934 0 obj<> endobj 935 0 obj<> endobj 936 0 obj<> endobj 937 0 obj<> endobj 938 0 obj<> endobj 939 0 obj<> endobj 940 0 obj<> endobj 941 0 obj<> endobj 942 0 obj<> endobj 943 0 obj<> endobj 944 0 obj<> endobj 945 0 obj<> endobj 946 0 obj<> endobj 947 0 obj<> endobj 948 0 obj<> endobj 949 0 obj<> endobj 950 0 obj<> endobj 951 0 obj<> endobj 952 0 obj<> endobj 953 0 obj<> endobj 954 0 obj<> endobj 955 0 obj<> endobj 956 0 obj<> endobj 957 0 obj<> endobj 958 0 obj<> endobj 959 0 obj<> endobj 960 0 obj<> endobj 961 0 obj<> endobj 962 0 obj<> endobj 963 0 obj<> endobj 964 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 965 0 obj<>stream +XMuEE2a/`$\)|cL4~8#|if +/Y.gʺ1n>k{|Tj +A?^ƞ#WujdߔZ  8$"ﮁV9X/dB,+go#}~wȿ3t?2鍖X*nħ·KKSc6.cerq-I?^/#&ǚgc?+b{O'݋ZeDJ/M)(0ge.A_s&^A +s}ԫZ;$L( +yQ4҄>Xk[-P4NBǽOb5ys|ɟV탰6@)}fÍL +rSkbJbߺmslj6,J*iT/Wݹ[-9<)Y19wsmszm5ruKOKq_6q-QwVQ߁a5e I҉ AiuhAuWO鼥IJn1w/0㥾JF!JwFGmf}'^UtWC~3.<‰o,]xF18˙,hϻNYw$w1 ++t& HN]J#U^4{SOʇ +Lc9!i09t*%z=4^vxdáBXW"tN a5@J{|DƝL3M_mym6 &At+hP\{tUࡔ dik^rY%Bx@pJo vF=;>'v# SY-B!N Fdj.a4;@ *0`H<k ++W쎼}P-N(TTSve]s+,~+W/:bQM43~0._Aqg)m[g}Nhtm g] וc"KQK O_]ތ=ko?yv-aM7Ax3ju;a+ܣ>\յ66Vk$lv́- !d>镕fISx;@dd3!u-\Dec)сu]U !>lK=D>'K]Zow +nNs`u6䳝"l=(GLȩ1KSTO:eY~̦_~<Ҍ!=p;w/V G%K7ա}°霳8/0>qba$kyV.T vY ބQ ϲV>60N +{٨NHk1g=r.8֝ɓ8aF}؎5Ӭ<|(1D dl(JRO.`A fݸӀd_|&7b?J &6lcVMz.7{OSjμ+Z71ǥ 0c[R +endstream endobj 966 0 obj<> endobj 967 0 obj<> endobj 968 0 obj<> endobj 969 0 obj<> endobj 970 0 obj<> endobj 971 0 obj<> endobj 972 0 obj<> endobj 973 0 obj<> endobj 974 0 obj<> endobj 975 0 obj<> endobj 976 0 obj<> endobj 977 0 obj<> endobj 978 0 obj<> endobj 979 0 obj<> endobj 980 0 obj<> endobj 981 0 obj<> endobj 982 0 obj<> endobj 983 0 obj<> endobj 984 0 obj<> endobj 985 0 obj<> endobj 986 0 obj<> endobj 987 0 obj<> endobj 988 0 obj<> endobj 989 0 obj<> endobj 990 0 obj<> endobj 991 0 obj<> endobj 992 0 obj<> endobj 993 0 obj<> endobj 994 0 obj<> endobj 995 0 obj<> endobj 996 0 obj<> endobj 997 0 obj<> endobj 998 0 obj<> endobj 999 0 obj<> endobj 1000 0 obj<> endobj 1001 0 obj<> endobj 1002 0 obj<> endobj 1003 0 obj<> endobj 1004 0 obj<> endobj 1005 0 obj<> endobj 1006 0 obj<> endobj 1007 0 obj<> endobj 1008 0 obj<> endobj 1009 0 obj<> endobj 1010 0 obj<> endobj 1011 0 obj<> endobj 1012 0 obj<> endobj 1013 0 obj<> endobj 1014 0 obj<> endobj 1015 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1016 0 obj<>stream +&$n{|@ACB #]~dWS첌ezyB#X>js!>;^sQ2a0T;P`f{Ijgxy^HcP/sX+ \AA^Unu]Y]MAl?qG̵ 4q) I\qDݢ]H4~tG*GP{ñ% ׫M̧z}ɝ& Gm{9wۢ>?XHۤ°-$8]H7~~͋nTĺd]/x(QͰ'&T#Q9㪸g%"$7n>՚M}Y;s$3k?oo ɣJm fV2(v-+Y?FqK*o91' ՀexqMewχ-ځ6s>'U訡үFRK뻊X×fӫ\RhJz;H`&WܟNUj J m%v ӠO޽$uvVFR]2^#m.臵mG_CX+0.Bj.wP.7sVehtʜ cy6s*QfȞR9_@J*L,//yLBF0fMǰm85+yf&m"mKWSj.76z9s۪[qx5uu}.Hʻ:g ,z*G07;˦A S6QmmT85RAm/<wY]Kg̀GhuBvY*QV>768m`O*̅Rx@3V?BNFڶQ.؄2YjNޔ֣ORϕU0I*Ѳd|A{J +oqX̷w Ni->IGm7(M ʸy4X];aB5q7ZP<RQiXDhsE6+d)}ܝrCQ]94\ ܘ|ROEȀTeB588PAHiMJqK>>pyxb%t6- >WIE.TB9F`6ة t)nRJ?b-v0xC Ԧ؏ߕ|qbW>:p4VXGiA>!j쭏MWeb[Ņ[UV8`r!07󣂵ጟGd ,f]B8k]?xxID1\[ A2fP .Eh>,.]ʮ#e1@ HD*as>P$D`/뚔 o'1 1UUˠ7_kVjp$%ؾk o/f +endstream endobj 1017 0 obj<> endobj 1018 0 obj<> endobj 1019 0 obj<> endobj 1020 0 obj<> endobj 1021 0 obj<> endobj 1022 0 obj<> endobj 1023 0 obj<> endobj 1024 0 obj<> endobj 1025 0 obj<> endobj 1026 0 obj<> endobj 1027 0 obj<> endobj 1028 0 obj<> endobj 1029 0 obj<> endobj 1030 0 obj<> endobj 1031 0 obj<> endobj 1032 0 obj<> endobj 1033 0 obj<> endobj 1034 0 obj<> endobj 1035 0 obj<> endobj 1036 0 obj<> endobj 1037 0 obj<> endobj 1038 0 obj<> endobj 1039 0 obj<> endobj 1040 0 obj<> endobj 1041 0 obj<> endobj 1042 0 obj<> endobj 1043 0 obj<> endobj 1044 0 obj<> endobj 1045 0 obj<> endobj 1046 0 obj<> endobj 1047 0 obj<> endobj 1048 0 obj<> endobj 1049 0 obj<> endobj 1050 0 obj<> endobj 1051 0 obj<> endobj 1052 0 obj<> endobj 1053 0 obj<> endobj 1054 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<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1066 0 obj<>stream +,&7 ۹-šP(_{AV^?[q/2r)-8Z-!PKUtysjr1(e`rfz`A^!Wo۱&3 ([ +O}GN)v=\gs(!ɔo0Bq|˴;a#5 Sj$UM ]~p娇|Ť0bUi2Ejm|:iqs'1_xZbBIiy=qg@[/ d!Ca`i:aTf?qH>+TǒQ߄_{Z\NhFWV@эE]1<&Ox + q^G$x7PV +.)r̴?1H-wg*\pS΃r1f򘕊gP5Zd[!z B$]4S]ڐIŏͯ+pFbD64l#A$+O\Gܠ@Oq +ϦvX[6Wgܜm˾[:e= ᢋCP ׻|E^#Q_1X)Uld3ӱ.Ý_Apջ1K3$Uq?QO/_,#R@'U{`Hn))J {,e4\'=},wi.JPXOv3i\؉tI}l%aL;G)va1T*T?XKN5I)2K]~Gn]п(^CJQ̸;AG1 КjBAkE+9ƾDZ[UHPF><9GGw;)妼e;K)f`kѹo7kl U +$AwF?uKș ^V4;>OzoqEend,mpq* IJ⅕bDbٽe4I? t^7xTp +:"BB(4GRtԩ*1ྯMv75ؾ3zL}Ƭs L|uC*jX1(+-i~f-;,#d`hK2nZC$u],:IKi"r,)egUJ'3@!I <*9#1>iRhP>Fyb>fW,w)խktQǶkKѲ¯H:!Ok3nM0 !btjoHrc\q'@I\^3sfZpZ +endstream endobj 1067 0 obj<> endobj 1068 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1069 0 obj<>stream +Z@3p$g !X|i8ֻGgQ°=oD:81,2DQ "pLUK +l98', &}s@$Œ93!ZJ69xuˈn.7͇HU=(띹b&l頒DNHSRgy;ՏxkRDQ43QSP0օM/i[fB;|0V&ZS&؟fxϬ#hp @$$CBaȯ#Wz^N{ lvm,_yT>u~0 +mswm +endstream endobj 1070 0 obj<> endobj 1071 0 obj<> endobj 1072 0 obj<> endobj 1073 0 obj<> endobj 1074 0 obj<> endobj 1075 0 obj<> endobj 1076 0 obj<> endobj 1077 0 obj<> endobj 1078 0 obj<> endobj 1079 0 obj<> endobj 1080 0 obj<> endobj 1081 0 obj<> endobj 1082 0 obj<> endobj 1083 0 obj<> endobj 1084 0 obj<> endobj 1085 0 obj<> endobj 1086 0 obj<> endobj 1087 0 obj<> endobj 1088 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1089 0 obj<>stream +vͮ=%:R/Ł;o!Uc5?1m<Ԋ ˭NF6jM 21BW͋ 4wL;4{촋ylT,^zȖmJY7ƐOSF2RíZN[kt0T!UhƉ=L$2Z 2A\w?*Eq@wxp-tKf*{²IZYr-羌7@c[LrsbSEBK~Q*Ih|"א?pܚ ̦: B͎1`y,z()Y' +dZv)~-z~mSTNLBM:Uӧq*|".@>|):^[4*ӮS֙9os\mFṈԝ]hVyfdX:0=yszܔ5S jtmk.3~"[\("`\ m"d@c=dZ&hQj +0EͿH)|UZk6G]M(_#O0"Z.C}0lmܦ+UYewh}-H7HCŀT"Ge-8_> +hl}cHs(~sd* DbJve8P::s=ݭL[@(DtdwLVB{WaG /%'?rmfa* >ct$r6M/J +~2@\@PUΪNVur^rn:?oRݗҗK0/bm _jI{ӿ_ VäQraGbF̵=!!?< r&=1F_dPle"Zt[!WC/Q 2'pd)hBA1O[kCKѣÐO[(1T{(Vg(Q62gqQ~W +nRpbqQGXK=. ~Txir)?B>.a rRqLSL)=-4IGGmMז2q{gNw4Ő.f-RۗqpoFF]f3r2ػjAN@ګH% To9{qh7TZ/ .ejqa./]]SёZuVUlRdr$DD&9g-!?tao UL߆OX§ ).l lRhh<(.\QS+W"QtʺtXDR auEiVGήN: Ql[ݪѺf6({BJHJц<Wڸ0в's^צl ]E,_f<3:v: Ydkfk (Wwd'fʚZU%[Vz69 hZ5g@B~e\˥Q럭Dv͙>i>!%UgI@f.= + ⟟q5hCpf:0g0Xg D7#nˆN90>0w% o [`Z3c y+MG*FĐ+> endobj 1091 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1092 0 obj<>stream +t% K|`'o?k'L}~Gm-YuVoܴ/6_(M2+NBbpS0hs`b.1 O|J_bû@bqJFA#$XY0*{vY> endobj 1094 0 obj<> endobj 1095 0 obj<> endobj 1096 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1097 0 obj<>stream +xg;C÷̩BHI µgTeZ aE첿G'IF5)P*p_) JO[~DŽ52@/^v /n59e.sU7 +'EӾ72L]#ZsV[Qeqp5 ZV^v5a-emY|BYtg2L48J])\~S, +[YخdQ3 $f ]vE(F8#bA&0%09$eu &'Ug:#yݐ9tfYi%2+ocՔy?%M&#θ*R٬S/!I +G*TȽ)&ȮGSKH6p(%r^WrmjR|KɩSŭx̌~?^&S WE͡4.`6f_UIR?N@8՞|Ppy1phVhˤ2?9^@۰:/V}S1(2AOfE]75烐m0w2eՅj4>|*L@b^Nj QlGV=ljڤ$U-75x?4E)3ބ\$ ^ӠTOS#!cZ +Ξ^hޢ4pf~b3碝j{U;og;s& Br4&!k +Jg@McFe +ڻv[ed@;KAh\3-R<7v_tݴE@ rA + 3Vm`T Kc(7ᱩLuR5tm:> endobj 1099 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1100 0 obj<>stream +x(.z)AU$YE/Cr`L6.eg64Z~վȊjm++S$dڕǯh8i0|s;rV6n|>F !R(yHS(ЮY=:;[>qu Q @mCi)X2q֛vUfQ֬ē7eys8z~<|@X|ƛpb,PV3%Rsb}xXd2EӵEq6@v9R'`h(_3㭋tH{hAsh^*ziV9z +endstream endobj 1101 0 obj<> endobj 1102 0 obj<> endobj 1103 0 obj<> endobj 1104 0 obj<> endobj 1105 0 obj<> endobj 1106 0 obj<> endobj 1107 0 obj<> endobj 1108 0 obj<> endobj 1109 0 obj<> endobj 1110 0 obj<> endobj 1111 0 obj<> endobj 1112 0 obj<> endobj 1113 0 obj<> endobj 1114 0 obj<> endobj 1115 0 obj<> endobj 1116 0 obj<> endobj 1117 0 obj<> endobj 1118 0 obj<> endobj 1119 0 obj<> endobj 1120 0 obj<> endobj 1121 0 obj<> endobj 1122 0 obj<> endobj 1123 0 obj<> endobj 1124 0 obj<> endobj 1125 0 obj<> endobj 1126 0 obj<> endobj 1127 0 obj<> endobj 1128 0 obj<> endobj 1129 0 obj<> endobj 1130 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1131 0 obj<>stream +[mQsjNI#W/ݔ"\IKo#9]"b@QÒ}I&- pQm-Vlր/s;+jҔ8_ +6J'3=XT1x~NN P+vwC΁i{*" n_ȌZ?ϸZlˣhd˗ t濒 +X@f +nĠΌQiu~;+o'Xρi@A}x`ZyXLk6\<ѓ6"b1-k^[AN8&K20猰#BTF9ml ob`QcoѶtrZ +T.Q>QoNXٛ0V&ŏ^vg(R&iCh?nlĝ\nCxkW.Z&_ 8Q֨SD^4cC7|:2 Z1缟JHiGЧ|<±i5Jj6Gثlpfep[3H+kù#J5ڔJxzlZ Vg2d*k Z/8 +]UNSZݓ3Xm,Z;}=a샥NJVEm/ܶvU $O^] ."TZ;2$xAV@z=yB%J\HE ťRѮ Z55ҧr%B<Ƒ|)k4WS`Y6jH4 +^C@8ޠ@!mnfT>T]hIZd멽& Tc~s^+~ş aySG2A';z{:|C9Rqi_m3H%Jz$EfэDZ +f{ŗ?#'A%d'ՂS`cό*H>#Qa6D>Okvgηe[ u>GB}աvrjTl"jU%2oܥ 7 /iqYpI5#q"!ѕj0l H_YV&ectF?qMz_uȋ|>(cg'sībLqApz'(\7=sUEbY_03vҸB6"څĀSjN-VGO22V_|6S±=V!?Tn2G K: + x~;W&J5]yt<$%5wtw9pAD:?<"M\./'̘ ){r + +gS&9k* t8$:AO-&=heX(2D"S'YTUNHۣiSԟ3IO> N1pJRpR꧲xZI0J7cXaFr%:-"RP!%}L@g\[xUCݗ+nǩLtnVxj^E{C%L+voKzf kSZ +Nv? +!m$q(kfm,t?QSVͮzR^m.S~[:Jg+<1z},ne +endstream endobj 1132 0 obj<> endobj 1133 0 obj<> endobj 1134 0 obj<> endobj 1135 0 obj<> endobj 1136 0 obj<> endobj 1137 0 obj<> endobj 1138 0 obj<> endobj 1139 0 obj<> endobj 1140 0 obj<> endobj 1141 0 obj<> endobj 1142 0 obj<> endobj 1143 0 obj<> endobj 1144 0 obj<> endobj 1145 0 obj<> endobj 1146 0 obj<> endobj 1147 0 obj<> endobj 1148 0 obj<> endobj 1149 0 obj<> endobj 1150 0 obj<> endobj 1151 0 obj<> endobj 1152 0 obj<> endobj 1153 0 obj<> endobj 1154 0 obj<> endobj 1155 0 obj<> endobj 1156 0 obj<> endobj 1157 0 obj<> endobj 1158 0 obj<> endobj 1159 0 obj<> endobj 1160 0 obj<> endobj 1161 0 obj<> endobj 1162 0 obj<> endobj 1163 0 obj<> endobj 1164 0 obj<> endobj 1165 0 obj<> endobj 1166 0 obj<> endobj 1167 0 obj<> endobj 1168 0 obj<> endobj 1169 0 obj<> endobj 1170 0 obj<> endobj 1171 0 obj<> endobj 1172 0 obj<> endobj 1173 0 obj<> endobj 1174 0 obj<> endobj 1175 0 obj<> endobj 1176 0 obj<> endobj 1177 0 obj<> endobj 1178 0 obj<> endobj 1179 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1180 0 obj<>stream +•A~y7ٛY0R-:_dhC\Ԃ*26#9 TT~/h({eB3gH//My<9]zB( <6ff7;PJ!pθHR +y,oFto`woU@4]QY*Jd,SuuR*HfMisU;"~9|w?Ck1/zAC-؝@f<*w(0Yϲ}t' +&͹ `2.0.p;ԅ'f_UꛗS1(*<˧E. ~biqhG1+ +']Q49ySB +HR]>P:ۍ+S\R@Y1jp4>՜|+v."9*rI:KBr"=X +6>8alqWK5Mmb4Fs5~C,^ў-&PpJ+M<" zm^W5iBZ]tScWuu0JDfv*XcgKxM0'XI >{Ubn— ,9R{\Z؇mub/`w螪2 gն_o`!ˆBBfO(߉B>xt;^ v^NÔO5/Y{67 /AXҽ@w˯D)2^o ȄEl^JqSK@ r\ *tQ2AN?^рz sWhz*meͯ +1\ۼi9U dd?#flw=C|(Vה+>е.g)?eb~fP_jNQ?(#OK +q!V9%!;#`cI"rl\WOJZ֣ޡuK`)<\=Cf_x[[IngDr;+v t_ YJv]3 B R5ڜr %f_EˮNS2Ru<_AeO{>\[+du_J3{`o<;Y-~NjsYU&VBܞg7/cW PҮj>nũs4jB"TňQ<K+B1K~p6֓y/yOZ^u*fDH>zuV[~q00["lލLf"PHٳ_[-d?"/ȴ_b,Kb+f?`+`z +H|0bWk:]ߩϕ]hQ[s{s6VڐcZ[h3 WƲpk}{%uei2g_q:VGj13Vu(/PՋTM3f_p9*M%*=b #>P. g]c=VWĕhC{*l|(*:v;:8dY=Zc7^Z[p@˟np.- A'YqxWj3G=pU72|n4Sp׷Nl{DqXԲ ki, O65ЪBNlͨߦ+wHBԼ7|lv/Pt=wnؾ'qP) $q6ǵROy\3u82C(eCg%Pں-V u20&!}l$$: pH|"6jFaЬ8䃍:2$c <U4!ؿ ͥl;h`='!8X^c+Ub3h)ghzjP_E\d`<,&d{,"#a`@z2=M08_f*Fc܎1G2Si?w?_7>aPsQa,_4!~X]_V UhQ ~ADT6^GK|utqA, z͌^ʹFyπyS9^I -H:# A;ֱжR$ֆ9EݵV$YQbMgCwaTcFdd'Cm_.IlO#,Sn +3P%,Ӭe_sȫ [wR oeke 6^`/$E_6lF!bBwVtqw})Y%YW.? (fWd$ +SChs /!`=CL ʑR(XOG@jUn|XdSC.6Mfc5+EpCV[𼎤0#LiyMUx#@Mß|笝n_ 1xתr8MP(q4 />_ LU4~Mlq(4Aw2SK'10=Pp^?, `~+&0$~ՙ^DL1tLwMId-reS_DbS%J:G(C@H@YI#MVPqRiam"Ři yH;u6χI5E8ukGp˟k7>*c9N42?yE/v*9z0hHSLj~,)U|l~na@4Fl-pĬ|&Du_USr繄A4j6!Ɋ:\pK^_G~m4ف8)Ow +Cz(qO.΍ D#"!zN*c0 +\ |:aJU%Ͳp 3ZV0neP`ohI(ʭ$gjZy2aB[&T#$Nn_zQL*{۟<,Bϴ9ޟWVT㎠Ar$كW=NRr|g=XVK*`ivk!;t +zM -kR-i]DB{ܮ(?bțL40Dǯ.s=AK|Mm q UR8X)yNњ=#^ׄWu > +endstream endobj 1181 0 obj<> endobj 1182 0 obj<> endobj 1183 0 obj<> endobj 1184 0 obj<> endobj 1185 0 obj<> endobj 1186 0 obj<> endobj 1187 0 obj<> endobj 1188 0 obj<> endobj 1189 0 obj<> endobj 1190 0 obj<> endobj 1191 0 obj<> endobj 1192 0 obj<> endobj 1193 0 obj<> endobj 1194 0 obj<> endobj 1195 0 obj<> endobj 1196 0 obj<> endobj 1197 0 obj<> endobj 1198 0 obj<> endobj 1199 0 obj<> endobj 1200 0 obj<> endobj 1201 0 obj<> endobj 1202 0 obj<> endobj 1203 0 obj<> endobj 1204 0 obj<> endobj 1205 0 obj<> endobj 1206 0 obj<> endobj 1207 0 obj<> endobj 1208 0 obj<> endobj 1209 0 obj<> endobj 1210 0 obj<> endobj 1211 0 obj<> endobj 1212 0 obj<> endobj 1213 0 obj<> endobj 1214 0 obj<> endobj 1215 0 obj<> endobj 1216 0 obj<> endobj 1217 0 obj<> endobj 1218 0 obj<> endobj 1219 0 obj<> endobj 1220 0 obj<> endobj 1221 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1222 0 obj<>stream +j7d?={44ħqcS6p 6Ņ+$M-WzɺCVb@hd;GQ\W~yVZ[[k*cy}#| i)~׏Fa&{-l-t[!Zq_W7(V󻄆! L (^#5`+H Le|ada#'!1GᏵX9Axy"ujM3\Jj].z;qaR!/@~ Zb ###EaѯINt_>XPJB:C(ڮwB +}oЈ\5㈮*8^1 sw6|O bvSdXNT mQ.RW3B##4Ӄ+'k̥DO@u0cڙiU)[44I:Mi8;cKFJAlN7>dBD!Z8[D`vK?<:䯎$/:A6 [Ih؃H}걋RW*:Ob@su1%[)PUoS~]BH8[ZV5 }՗o-%(P4LBK :^;Wn.a)B bz%@(wWz,0U,J\7l"eǬᆭ!;53S=vPi8N>UUjzZB[~$AĹ^38jg z-$ioxIM-%7<2Ntn[K + +h yQW&A 0KY3VG:*T&˪#%,&w@`8:RUs.5_m<w?aW!S567}=ZgqKp&o[@DA )ƥ7N)yO;g]k{RFUKNhT4ap ڠ.ͩZߵxsٷsb!PO}j(696ї&&y`'nY1dzsucsxKPb2=5 !U> LF/uJݸ$ OڠjKx'!1@-a-P-<ӛ`%'?9}6ȱ7 j9Y b)D<%$E|Pۼ2'IdV=$0ZVǕ"<=R0"(ыɿF:[Թn^bGyg"DtbXiXEy{q+naR'NTH r44qJ~Jp69]ä,e!'T$,(Mw]a|R}t(6 n$U!喞g )?QMŐS,x%ڱcCɁ Ώwc XDX}^9c`5|SkVƈݵ j:1+vtWkH 4tF 㸵ҏpb QHpEH&rV֢ +m, L`sUhomJ!SD8 `v%y ϒlL\ ޔZ1Kq# vyP.yWɫp" )/xߗW=qP1uD;'1dYed:o6f\4HlJ'riP4w礋ؤbdFqR$}iol[m5Rk/*Ѧcۘ#qחL $UW\ĂR<@q.ݙȾBR&Iĵ28S?+NxA<[ _RGYhrEO 9Pë NrE"`Rh8=m'@^j{zGCE\+\7nS4jxՍPӬx lvt qPݶJ)Cw +(8 v*S Auk~%fа91 v,?.~29,:7o%Nr+ 6 nDj q`t7J4H-GJLVlYk"$6[קMrU6,wtX3 )'S1͸Hr!I}rBd>ҏZC3"T{|')"2j9c-XJVkj}awD?)g:Yi,hImAeL +'/kK5 o3Np.aAg#D; KkǪJD%ĉ^ ;`XCEru nwBESL[8.n`8)E_;)t4?E +\Ouodx0^?,h~^ 9-B/g͢HjesL좉Fo): ]ࣟg 1Mg% -ʨ* +Pң|!7^ŋ$0x}ԭyd~f1W_ +"( 2Pꮥ~V_Z(njc\FVS7`MiQG)0N5@1eܔ~ 臬7 ( +ĠY>Ƀ( Jpb5!}qcxxa!md]N)Ub#hWbniҨGgwI/73v)|(='=! +CA[/aYMt?A7Fbo>,2>ھvl`*# mRΈ{1|ؾ8/&yυGέIκ ``+) 囡9g +`G~4 +Ԟa' 6;X"E ꅦ)'`aD2ttjtbKO?V +"X]DQnMcpPA6铩3\E}Nh5OPby|j +NԷ xTX`$:gerkKp6%ߙ.N)wq&ABp}H+}c!XQ}L*T!kʗ!?K%ED5{wڬ芐_>ٖwzr2&Gq!sc?%)-F|R(Acv )_1ZL:|y֋36*Nd%`xP鬪dzVHx`kW0Vb +@K T9Jq} ʧ[u']"X>bDzbm}yFG(M@Qi}PWey&}"2e kIu[ha5CyWS+Koqk2F_P \5Mz9趞 + ] VgE m7h)k4D=98;BL駘+5vӧߺS|Gy åg%_2A( l +endstream endobj 1223 0 obj<> endobj 1224 0 obj<> endobj 1225 0 obj<> endobj 1226 0 obj<> endobj 1227 0 obj<> endobj 1228 0 obj<> endobj 1229 0 obj<> endobj 1230 0 obj<> endobj 1231 0 obj<> endobj 1232 0 obj<> endobj 1233 0 obj<> endobj 1234 0 obj<> endobj 1235 0 obj<> endobj 1236 0 obj<> endobj 1237 0 obj<> endobj 1238 0 obj<> endobj 1239 0 obj<> endobj 1240 0 obj<> endobj 1241 0 obj<> endobj 1242 0 obj<> endobj 1243 0 obj<> endobj 1244 0 obj<> endobj 1245 0 obj<> endobj 1246 0 obj<> endobj 1247 0 obj<> endobj 1248 0 obj<> endobj 1249 0 obj<> endobj 1250 0 obj<> endobj 1251 0 obj<> endobj 1252 0 obj<> endobj 1253 0 obj<> endobj 1254 0 obj<> endobj 1255 0 obj<> endobj 1256 0 obj<> endobj 1257 0 obj<> endobj 1258 0 obj<> endobj 1259 0 obj<> endobj 1260 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1261 0 obj<>stream +\*ȲCLj_o7HSJ]7:ǷB-rLZZ.NWa\k?_M"P:ޓSpl=FJXfjT|KZT'a=dOz_n۸=[2/$rd؇ljzL#fTmV(Yrppɧ.\ s pݻHK10:lu/4<:^g㹡ZyRe9jsN!t>f=Qc &%$Np3a:ʇb9%=3VJ, 4[c5۹3eƏT^kNSG+::e2,Ѥۻ5s1n|@n(BqG,Q7)pL>{THFTFD*_DVFq i&ENW7yWA2vC,L ŏ+$l6НϓAѦɇY_IFϔH>LllU6HӋ@$l_xmNp%>ڍ~ }jfR0GÌǥo;{q4۠L~cڸn8"/vs8ɜ,y#(1ku %"/wvwOuƱA7S{/ډ d +`aG"ɶ_yKތ`pi՘W]4F}!5 B[C~7(4NoZz" 1`f\PFa6Y"(&q/Kӫ;zаE.#O^٠s.?sfy!3 q` gX8[ތ5 Ƿ|юP<^<\m +VPh7Q! ִ.,G{x<75gL֋_]`;H$:ul=W=hu/Qlsj_Q E3L+Gյ&%Lw70μd˥id["]A!/gx~|G< !?MG8uc*tH_R3>'D~z6l):zfC[Ă0M4z ;ÇMI?ެiT Wl\`LSM +¸)\40fK.Q/b:7L+-ipL: j]H0M5M@{{1G,Gw]"I4~B:TV~Q068Q8pO#vfŌ]@ں'iWψ]7$c#b ޞlba +$IrN~*l)Om۳J(![\#u+S!0K.fx }nOOjd?7֫kL* +nt +憐wת p5[9w$#LO z)N,js%u3GcN0X89J.C,tOOO 4co@XXc^7"~13=Ē?dD2*[ io+ߪSoD* >2ODߦkl>y[#Z_R3LrtTE t,2W&U2@:ԃ;V꣫fdC]ʧ +޾/>Dɣp#\0BgjV os\WP#poQ0 +=oY! ߭hzL h]IQ?Y6lO9n̟T堛o#ykR)نք/u?О >y5s*m2=6$>r } R pt:쀒ٽDpZrwav! W?IPzQd_[Y?'{5ZU=kXAXT<իJ^Cwȑp$r-:bP R{.$1'pj D*pRqP&?`9Ľ[qw]V`?i}]Pa1*?mOB_)ER;ßxgcD+<@^g9g-J𥡓2$=>٪*}c% +g怺 7OH>1F xk)f\]SN5SFmsBzW>'l BɌrt!yolIĢd5$I2;WϨTNyïʨ=!5)xN o`|~S@s9QOm|7řïpz-::ղMeJ5ʞUУ BD;bZ칹%/xz<$Ua x!NQ2F:`NK-,:ǴMv3{w>Q>ԕI@X<$<"vn~wtTZB]5yI!&=_A7 +oEktRļ㊘ Q/5!mqQWl-z>`P}&ٺ"3 GsOxy +k&no +gvBTi?2 +\]s(]vi>%uܠqYhҷJ22eI )*)IA;=I1:Eɢ)VV*5#Axׂ<ɸB?Nxn;+FU[iz 8-ƺJ<9:wKV> +endstream endobj 1262 0 obj<> endobj 1263 0 obj<> endobj 1264 0 obj<> endobj 1265 0 obj<> endobj 1266 0 obj<> endobj 1267 0 obj<> endobj 1268 0 obj<> endobj 1269 0 obj<> endobj 1270 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1271 0 obj<>stream +Dݙ cF!^C}mEh^]6I#\4/m,dsw8XdA/'h,1r<#p9!fc5YVEʒJ O2cΦU@r8ɲCeJElB+G + +;WW\V4~ưR݅w} =W٣UeTT׳*q*1T10I$8ɕNV#fYx̱ &bg@1"ɇ_nRI腒,`JIU{]DF.c ze\}B1eʛɴY7eѽ+Tv;M* =un'a`0dƨݤB?H^ljw%ХƆ>ZgKI;.QGħjp| NHvJEh*}e4̢q#h?4^%'qEƃûk>703~vrTK#֑kZ;tg3ȚC:V7t˄J֨SpztaN j-%ԁ܋ "AofQV>A.h +;7Yc֕zv!c53)}O@=r{IlD߀^2_`Rʞmq@hJ:.l]e[4\K^4QE?.]Vi Nڕg Խ`qHJwH{ou\ȃ]r+QmY~EWnƯ^ռ>jDeY;jP(:yUPώ&p7W*5D0u 7آ0`K[Ë]6'CaeEze +!?3aEfBjS\m KyNBiM l ˊmdd{1}$ iBp YlQLSdoO +ؒxFA7.:C8߆Vә+sT(Cyzݭkka+FCma|3d{#U +u/ts0$8Cհ]=P|ͥ'݊ܶ\ͅJ*Uxl4U',e}I4NCB 5Ѿ(aXPYZg&5$vX^`K3$ھaoz!L\ {2/{<7* j/1!ҲI|fW>@_]+0dr'J\SI2O%2sr)@@An[TJ Ie,bDSvͼ4V튔LW F?ǎ> endobj 1273 0 obj<> endobj 1274 0 obj<> endobj 1275 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1276 0 obj<>stream +KNkZ] wTc Dl&Wҧ2ZGv HL 6|.Z3B*WЧlUX`38yhg/4M ݃h^+j\K@( Rϩ] 72"ׁO0avTݹuBz=ͫ)?b2;O= D8ߞQ3!:A/HIR]`uj)b(Rǀ,U|t̅*FÌ5^yqXie ,Pա 70O_3ѷ$PwN~K|߆*^(T&BV kD "p|&㚬Ap>%[sUiVJX[A4GzPy&}5hx>( /gRb<_sE־( +by$7c5_Շ/dt_\[lRNdiNeo_dkǪ?p7-AHˮ8p#d". 2h͊DMp.b/,* +ێ>9+I_G8OFuAgwd+m!ݐr ϖi9y[\ ͭ^$fނ~##:oڎV@.Lj}F_P<ހKbH!gq]l#J.+)A``gdY_wyr95 dovؔ +ȋw#|fja=NYFM+T+mrO%ǻǝEZ6a狛9![k]0Z%&Qpºө8d[Ѧ(T}|܎#˟P&R-!ʐԆJzQ Iy\h.;}"uCX9݄Ac릯ϼ $*zdG8caB0"דpyW~4>MJ#768AxhBo2\ֿ wK/ZNa j%e_P.cӝrHfHSKrEF1d<|iI I1G |Z=< 텻1͍3.Ik +fSݙIsy8.XzȇU߈yմiy'jցiO]5wfek>So#f[Xc]> endobj 1278 0 obj<> endobj 1279 0 obj<> endobj 1280 0 obj<> endobj 1281 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1282 0 obj<>stream + 㼼,pgemL1׬S?dˏ$fV.`j +G5qBw vrGW;o"0hC4kCXO3䯘x5AחOe)s4KtxOWZrQ"d7TuSfjk9 A)JIWMj+yh +A0\uG) $n/sFR(LR/1n +G#Tn:bs,XDkg# +/8 +BU2W&i;k &X@*QhJU*˓-mH7 +S:Bٯ+FǷW@ ,BúaSFdV^;ZpܿaFKj-0! s +wgZLCjEwq&B΢W1RhDrhW+4 +NI=oy]4?p/bG^]WΊ +endstream endobj 1283 0 obj<> endobj 1284 0 obj<> endobj 1285 0 obj<> endobj 1286 0 obj<> endobj 1287 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1288 0 obj<>stream +nt eǐ^ŦWZ VLL7Km۴"gjI YBG3ň{3Zs7^($ +ߦzE1~Hpy͠JJf[ +rr7LI̥Of1L8ǰ?<.hn366jlCrIB-16`v(#Sx} +D_[M(Tk*L}_cշQy0O2<&Cm@.Dj7vbe/%,Aq`S,OwSR%mT,YEI՛P`5pU,&YF=+Lc~4kpzdaxsXf|ƄrcQOR-*?+,Ztr~x &D6>U_m5Ah$D" /Uð¨3¦>0CzbM7t%ʺ= 1FpI8ʱyG*iq$<`#+5P]caօ$ >3 e۷jQuXXI^1wIHԢ`Ľ%iTp|r~ ցjYbE5 >]Qtzt!OGWPSj' 3a@> endobj 1290 0 obj<> endobj 1291 0 obj<> endobj 1292 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1293 0 obj<>stream +y&y>k^3@Ys0 ip^_pCSa'}Jg^ В@BQJZ2O.X>÷.kiYCs JkNϒEИQ/2ĪFЀ帕/GѼ^ 8]Vstn趰~\.EU҈SX DY^zE67oՀ٪=,7OJn ԳoZeg7P,+Ջn+% O̡]iд_")tyr\N$#?mS `4YYPճWwi!A<^ʽニʜ2~j;&?]jb˃qEŮH%%THgOuf]d8򌴏xXc/˔R8d%J,))kr* ;0$5^_AH|_mʃhNfNDH4,J\iPer5[Gˮ s/&54 +-X* y&r9t%#P! 3GFOz2r:ȡ4 :GCұ`0OTja%Cj4{Ay30mbW3ρM彶XQFeʰ#@۶'trJnS-Kx{{4C4ڡbK`=G#ƴ~ +éC"3QFXo!T.tױqdO)¦)Յ` $> endobj 1295 0 obj<> endobj 1296 0 obj<> endobj 1297 0 obj<> endobj 1298 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1299 0 obj<>stream +\Y$L"|dЛ7@djǹutLfԛb_~p`O1_ت[ +@3N.n>`a*^>HC<$MѸK0&嬑-DƷ1K'<&Lm·, Qhh鲦[%/!vH,Gw4 #=VRjb#ug"YHBiLZ??) +#dGP5 &F0 _@;* u:~`Rj$y[ْqHʘ_-RRx\b` +:"Iɿ~*8 +!vc_W_^cſ Q=dسyݿ諎^AZ6iv9Rw)yMLj =ԇ&6 +6;V +SnKH r>&g=Ȧ B E bͩxC6ڥ,k`eq`C2oɶBghYuRvx8c'Ұnmٿ.lmn,7P}9MRQ.7UĀ +o㚉`Fh5>ÇNDM Χ _@e8M3ѣEk +(eF>MR%!`>ao >3}ɝu.ۏ%nՔavK:? Toi{ '\W!::Vϥv]@h;WX1O *`hލɩ7qүA•Oo+fвAM6^u=p5#ee(y$:ōpu:fՠُdpgNؐUc8@Dy~DA@ڽb* v2`n +Q4ͲTs%R((Ð%/esYrG/VRo%}ֺ> endobj 1301 0 obj<> endobj 1302 0 obj<> endobj 1303 0 obj<> endobj 1304 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1305 0 obj<>stream +G21(#A\ >Я˵;g%UP@ csb2eiFn#b{حFszy1)@Eu>AlT6H6[;I!gMW٠iW9r$E5I6Hbd +Jmѳ8 +vJ.1s 3{V`B )~h0z]6coRW|x˙*6Zo lf$?YC8i{N'y{xj@Pա"?$Hjnۉ-6 ,#`Za1eM X5nGr#+{2Tn 3Ɱq3'nLn|bĊTiWk<1Q]]`1Wuqm'T9nU8G22EsKA"5- +WNqAfbj/lٝ k,pWO2gCy&XԔYZ=\i8 3jp7Fi#"]pKc`ҋV*SOC. R|P8lt~k!E·9H +6R%xo٤uT]za^o>&a%zUb2\Z&Rܨ)66tszvJpJwi@ϸ G> endobj 1307 0 obj<> endobj 1308 0 obj<> endobj 1309 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1310 0 obj<>stream +gD&T"Ne̻Ip:/*@2n7!8[LpZ-(K>PeX̴b9>wV +>* ?ѣ*X#UdЖ# z4eNNl,@yD D;I#E7!*ka]9*\`9iƱDA|!8  jֽ{% ;`c[w$UR?@߾-!M{BWoh$D^SrF~υyf\bfOHW]O8Fcf5C" !]qfVWa439Uz6z&Q>yPbnX]w'*r&$}jyk?Mf!(FQQ^:N֫zYw#eY; KLHͩȚF"]Dp׈7DVd #Q[)OK? zKٛ2c`"S8Wykd-4^&gdw]Wıu9FZzʝ*Et@!WLDXQNr}>fCNdZ'!"^m{θwWA _d []C= JM*qm P4b=l*~;*=2XL|ݹx|>1 .5KBTI0qRisW&uDe-OO-ALg2APtl Q >iMY֟bpݜ Wj;ߒ_3Vqmi'XqВH>V|dR\'DB1l͊Ƙ N$o4RH'vTSO$>f1SH|}2_,eX\D}juc Y݅Ԇ<?l.}c7O`D٨V +endstream endobj 1311 0 obj<> endobj 1312 0 obj<> endobj 1313 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1314 0 obj<>stream +%n;%%'f4muwIiAe3{j{yqP_L -3i`YT /w3;\!ŗ'&zR'&xj LJBqBe::U?t"fcBuq[5)V1psP_~Q6,:3=<ʿHS9ye)K :ݸ\<"Ka,,(<ƃaQKd"ץr'rhJs-<ѷЪBO đ6G +| MůtxOԬ榗pQ0WV`lٔ0[8= + 3vqim``2 jq^,5s:1x^6;$ zRv^[ⷬv׻\ml^?ZRлRӃ&#lD@7PfC-WJ^˶y˥nGx6mō,SM`*J5gn"}X]{] +,ЖJM ]1Nn@Tݽ5xws-DZm9\O`h6?qYX1♬7BƣXT%M> endobj 1316 0 obj<> endobj 1317 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1318 0 obj<>stream +~kcOͪ3r.~^QX|tR~ī x8oVls¸gd(?udI}Rg>u>dz]B?PҾM}]>馥s*\,#n[zpHF Hi{E4fߨz++nk1isMxs?f_Q 5P=զ)fsƉ|IáԺ>g[ܐg\/Q1sR/'.gI1qJ50ۥ=&wC6X ȮrÑdqsׄQ >Z)ފ֞0\N;17}^LOdp' kns Ʈbc!67DILYř]nup0+18Bk<‹os$Ah|@Ukc䮃1]!K"R ˓Q%VKN'Lr]aI :n~bA  kMA7+tw3Aj: X'% +FBmhҾpsR,x14wDι+0.D?('@A4d_Aa8ц UWe`XExn|3=n8ۻ a`Sc{„m\H2%e5nBwz{oK +>fsEebQzYzs'"W{s䂒fc GPd(Jř#+~yX8]8 +endstream endobj 1319 0 obj<> endobj 1320 0 obj<> endobj 1321 0 obj<> endobj 1322 0 obj<> endobj 1323 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1324 0 obj<>stream +V|^ +ukmHJ%Eo3S}{gi) v Kz.\I\gzjs8YÃi-f%zs2I,sk ro[W_Js0 Kk[ֳd' Yd,pmv_' Ч&iΫvX8_՛]IJ_B%G>Y%)?RC U7j֍F[[.JrN%IGy![Q}qöGvtJ-T_ Ck*n-6 ?˶$ u;U#搖NoҤ>aެ7AA1Y*.H ަKEAڨCi1:LE3nġ<6'-_tsFSMcX:$`~B/40.3q/`Ix-|4%=~$C5\BHum[wmpq=>,e3#o>Oe>`I"I!{ՑpSJ7KаQF#ܬJc5P$NcUvT_)_4V2=yK#̄mp"7CHǃ7s {X'v{K}jC1NҾXƌDmKDYLjÑtƋKq+E/(\ATOh͆j!Hyq'm+LasjNP`8E@߷fT2pCGu"֪i0 %4AX K/(NLdy_l曃5Iٹ5g? Xw<tgG ^ #S[""w$B9#-vņ;wmԹA +eg03O]r `^Sz|~\+wF~W &YY]64|NrX(HQ 7HEA)Ɨ+&rVn4IJ +endstream endobj 1325 0 obj<> endobj 1326 0 obj<> endobj 1327 0 obj<> endobj 1328 0 obj<> endobj 1329 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1330 0 obj<>stream +f#%Ҝ ') @0ƥ؀N =i{+_s}]]ٻV^-D93JY aDFcx6^q(+\y>w.t[&ĨĭY{^E.X.N7z4\vt^w:rA vSM }^y&qH`G#,]mR y_RRx/YMJB[{˧5Mb`7\t0C jt ̈́!>Rtt0ADOUa_Hd 1l=>h{ +I_֣Ӝ#]NX|ƽǺЃ&BҷѓgTiyBn%sT񮡸M&~Au-3^ u=m`5gGT#<'+=ɶG.žQ#Ƈ>Fe\Gڟs^@0Mϑ(bI9r øD(~^9Uɚ[˻@J. õc"͘Wꪁ, +fӏo7YC>*a~9zON}feipס*'v4R5~ńEC A1 `y"}Vrվ>N>찕#4 q>kIu̙xlf$%} uXzRg5>t>\K=3 '+#c@ +4b+ߎ$I +V]p Fbo'5<~a)0ڡ<1G" lc*<}BiќO],IZ[n\7r;3:|zdb,jqD~NJ/A2gͯLPAr`7c֍ BP<H\$if"2N0'0wB#"i GM3ucoJ8 m. U## WpQR7;H/CwMy-tUx؉"ީݞ8Ed wff՛ +endstream endobj 1331 0 obj<> endobj 1332 0 obj<> endobj 1333 0 obj<> endobj 1334 0 obj<> endobj 1335 0 obj<> endobj 1336 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1337 0 obj<>stream +h݂wS|ŅN~Nd!WNyW§w/ ?nb9IHb]4p/gNQk+sɯԮ2GwA~O[ghBp9%7SآUE2 Ɯ~bID!I|heB#:sd6boL˴@riA/sGt;l Ӑ01Q_}X:!U] g)*BKU2SwrsZUSry5֮G0SFԮu3m⹊:IE&Ǝf ,4,&)Ox'[F<*}ꮷNxFA-Ɓ"C&nG8<сIt_i?́-F ?ԤQE] Ggݭ־ \-L 3dRczbd'rNUNW̬Rgy "V–TUxn&x*FԵ)Og]`Fjl:%n~ 4+h{/|n)LX@G_1 +>@a \ ,F{V&ɕ*~tú xRv@fL|WRӜXY!4mE30\5)@DVzWa~d\gUiAֻ +&:xǪ" X{<{̬zC.5F@7k|5OݵQI Z9Yi*fF4KH0I)b fI.p'-@[?"8gr'q9F$w.f3>KT<>m*>s<wB5Ot&~JX]ԶE.A)w}5W vssX<ő$]۝=aH+Ji)ԛ[7o|2.ZͿI.1Re<1ȀW_B1e.^{ݰŗB~#D;e+ӨU܅OZyOEHG[_ R*&2woV@lu"4J?O.٩D;#-RGB܀h| ݖ +endstream endobj 1338 0 obj<> endobj 1339 0 obj<> endobj 1340 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1341 0 obj<>stream +;LCW[*vc Yx>Q%H,NUbبՋTJH.Fi"nesO/A1mBd +?4Byg1ǡřtdXNu +!qBs%tQ3= oIr&-m~!94NABL97U5-bjۉ8MSՊj < 1cǠS];t\Kj}~pFXK&%4OR45*DZFI傍&;Wh_f'$+L}ztݞnEn™䕢pi߬򌪎V V8Z7A?IvڑC1SeU[&n)BXd@WAh;8;5٪ +0e忀[;KK3 L"o5.cY?|ui8Zm!*dkϘױ~PĜ,ZcNVfPۃkiV5Sew=q3׸BA [E/A>166󢇈y!Y{cbҒ1$0@"o( (/Ο*(2=ԗ@\a wޓ8T[fZ#^%,-T^ySmHe`Ex) +8(sa#q#̰0gYsVR<t"9S]RgQO=:К<0ehw#9U 0k3AΔyO6[LI0{ʋRH^j;_W)uX!X +X7^\Vl~O @cKG?_no;{ +endstream endobj 1342 0 obj<> endobj 1343 0 obj<> endobj 1344 0 obj<> endobj 1345 0 obj<> endobj 1346 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1347 0 obj<>stream +@^O~&Zuwys`ig^3K<'~(ԭf*$< +Úg"&{9[O +TW\!w]:}>QI*)͎Y[En=bnJ_XD&x ~xQpSp͠jxOCDVJZq1֘RP΀Zġ>':Q0I7i"I)VLԔqLܽFI tE2=HjpNZp^zHO{TS "EW޼D\~AvE46][(,v?rlDvБsIA"WܱC鹧;D~bhm ۄ[A/b *>BW=p (@z!zNPAnekt{vd3CyY~ONZ<& |&<Ȃ5vTƩ>||/I,ad"LDbsTY31U{(Ŕdz(߭(gK4̆D/h'0`E6jC?/dY|_mMH<[3WS +40̟uob +endstream endobj 1348 0 obj<> endobj 1349 0 obj<> endobj 1350 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1351 0 obj<>stream +D~c2M׺9MCbc1@"9|9>zX\ 嫠^'9ۅ V'='Usihv0J*Tގˤ|(n+~ =ٮI M<^#MjJI}Wė9_u&".4ұ1=pP!xI Li-7J.PsȤPf|DC +}pݡ)1˓>PߛkkJ +GN-Ŀ#{ZT)=)"+Hi0*r:cuImˀe?iKi} +-d<3;m0SbEm8a$Bi)&?7IlOT󩂄o'@,V@>%\9y2BqB:ysSXʇST)2~:k13@.$H8QC,zEb3+4-f\IG5p8LtB"'4Ah VHsHBYRVӆZW1v?AD5CA1uF'ܼҐL8Hb$s[GxlȲ͆ + @գ5Wyf!#Id=qLֽKC[eHлsH„J[VQ}x?; C*[p u9k֬2TÀһpsth"Bǻr/b1PδnȻˮZ$j/8ؖPEgvKB<I*X|H;NMbRܥ 8ϓuU[uqp\QU{eG\ %_TL2aX!arCu+yu9m6@qݠ:$}]#nC/F daȈ%+k a6)րycaU]͞0Xqɛ%*Yl'8YE,bq +endstream endobj 1352 0 obj<> endobj 1353 0 obj<> endobj 1354 0 obj<> endobj 1355 0 obj<> endobj 1356 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1357 0 obj<>stream +M)OHD#$!̘(ɤu~Kx F!`Jxd?Z:Dtqe 5_TX*3Cߤ+>B9 Ҿ0kHZ̳L0Nb1 s6'`{;Q#H7 47*XNXڊܒX8J51#4&s.C2TL$ +'ft52q=O +"ӎM3$5" ]e>cnфdߩyf=@q>>M^'Nzcm]kD]e ]z:]M +|FG~ԗtn% {T0utSF܌%nzmMJuH΅R*{xW40pn}l<Ě~C]9T:&+/`(k2/0%Z2}\DTP =BOPz ]0Ah^ '򀨷e-ۥ=(/q@3sIEXp{iy<^xfq+%: B@wEpҏ9nP^?K$|5s8F%=,SӼt.$ OYȔCM\9b'4ߟ/:"uwidktr􄊴\kR2׿:IbݲY,WM义qd{uٌ zȰ)_OE4xVmRDGvF42 >tkY jᚢ ,J + 7kȝ/Y/M +3ȀfM UB:U1$NMzj6?_@#-_y{sؘW2xz󒜥4duoɜ{*@t€۪Fxˎ hAotʇ;Nt:7E"Ya\q"4N fhrgݿlׄ{g Ip;lm-wjs&d pY+V$~˒k;:+oZ{SJ`ǹ>6.H3y,ykK匶z^oo*렠 4Q":GO\$4beOk.EAuߘx{~0+sqP[*mʟ<;ؤL8jbF֫B_0uk6U5 +.S95 Sy5S7|#\2~b|4фɾ>{Rn(B%R- +endstream endobj 1358 0 obj<> endobj 1359 0 obj<> endobj 1360 0 obj<> endobj 1361 0 obj<> endobj 1362 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1363 0 obj<>stream +ܠ#$lP Q p];P!%MfY .B6E+sˇ|Cc@9U!)4g ˎoD~3Y^ L{*1!`,-xS+7:22cYhAp]8kTv/?MR3\t1ք8@]KɯSD7i]1z!& }ϯ'΀[l_(z㵗0XbxoOuevKrF+[N}|wF7 H^aj8QnNzpql͇ꁖnMs@new߼Cȝn'5sO7^ BdloyC3# һF\KTe=z2,AnΒD,] + Z@=b( RB08'b罧SG;^r Q;Y{(;~gVaflFs ؎&稤͆/W4ڐ{E%BD 04pOa{V+MQZN?+ +^ ["t?D +V5: bmfoC]Q@0/z/``g܈ +ڻBَݼjM[pѰR"idA +endstream endobj 1364 0 obj<> endobj 1365 0 obj<> endobj 1366 0 obj<> endobj 1367 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1368 0 obj<>stream +nrgs*U.\ !gDFo'_ޭH3O̤5q!gYC4ΊJ4& _b%L'zInMROTe?'>I1V/7{)4f:Bzۂv5YܫD7Paxc*hO|%U(p~Q +8xf~*-^? ߶f)oF"]|͌3D1!g`ʔ[XdHh#y5Y+pM/!PA2mڅFI.?hh \A]yD", mz +/KrH#8z E(/-l-?ћFBړVY窞H(̀sTPzwC05>4fdyӚ:^og/4$li}KVQT +4ob wM_mI[_t0VP*L*CwzXSa&d}8^=|h&f&s@Qzi?߻[G)H-u톩?'AJʛTk[=آC/g8|o+> endobj 1370 0 obj<> endobj 1371 0 obj<> endobj 1372 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1373 0 obj<>stream + #\-`Lvgζ?V&9V^}D|ڼ{MHt5 +t1Ú>>$+9<`Z7 ABR.9Ti~ ~P"rZJ8RA#<ꐁyӕ7csS9'.@ZΜѳ12BH9?9k ;^8 <Ыh|9r.&fsvo|z!ttt=UIs]M}J* ']!;q']q#/T(WvO8]}C0\dfWQ y0 SW37hҜ*c+j5ڼ'!CK|k7G[?- } D_.=vCή۪;fEHh~z(]r-p`.nMb,?ZV]+#;};XWkP\4@~^A yMU>4 #Ͱ@tKB&g±awX +{2Zi3o%U6'Y&GOx0Nv,/-0!ʵ2⨫?a0= : +VY_QwW)[xKUde+:[?(n㌃vMc՚ڟBilg`M丆jN9B&ִclQ ?X,^t ɚ D5"PNj?>A[S:n-ߔ|I1ߔQ -24l,^5kٍl\ąG'.mL +Y ;*b(g7]ސ_~ +endstream endobj 1374 0 obj<> endobj 1375 0 obj<> endobj 1376 0 obj<> endobj 1377 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1378 0 obj<>stream +"K)cH6:88uTncQV8!SKC 9]arӳn&KrNR3Yۡҝ!ܥswKI^q̉( +@h39|)'zƍ{;a15uK:&' نy_u/k)2_p%ݹA`Er"@mܔQ#iԹ +ԼLYT +r,j"i)M>j$&QV1g$xf3<&NċnۏY$cX/JNX#0 Xƃ#4saipR|/vǥdG%Oi@%I{b@SIDnÕ[!8q>wѥ~@%-{vJ'6yjU}} T +'`W`׷`#mp1(=KFf7O兔eF͠0/g-v388mv$1Fkcj _c]΢|gUl7&3ĚiWRW.G  =5vW:d-Սh>YCC7X#c㞓JsJ?yzA ,bwʨ,:g5zu&aTrWS]RdE?LuÿS6㩈 sm}{Hj+ots)DfUV!Ǭf6s3Rὔt wճ']cn7:Eq Tᗭbִ?7VBF0@O'_ +)kF'm67Dn m5y廹fs8L{)]$)h">gqђUg@|#W !W/W.Ÿ'cRoc.ΏN]e?X:5лBA2v`:RSj>sV[tnS *(9Zj+I &Dg3(q> endobj 1380 0 obj<> endobj 1381 0 obj<> endobj 1382 0 obj<> endobj 1383 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1384 0 obj<>stream +Y޼T2v`0hKџT{ଠW2ȯGe}x ;5NR;pmt>ٸ_τ.r79܁GV l.a@V*3+ -E|US<~7M?ں 11ހIT᧔uc;}Hv]V"ϼ}bK0`{ImwU8ʈboN.PL_!MIE*pŸ H4Ɓ$oɽ,wr˒;[N<*W<5~7#3^4i 3䪘Og +[MM;?LQ au&r 3#g|׷y+PO0. #=<eی2Qr>3w"Y֬M ~=-y>%%VUkD@%THK +X{*C1j_AVc. iNy7%$CȺwAR-r9[=o8#Jz?`#w^v 4 <҈kg^Uá+9p.dH2 i,,ى~E7J_AG0'qQ Fw;ek Jj +4c1tn;?:7# ou++WnI D*2`P/f+jFA;vL *U =I(BghD7: +endstream endobj 1385 0 obj<> endobj 1386 0 obj<> endobj 1387 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1388 0 obj<>stream +[^ǀk5r4.I lf$(Mڢ^'n)ދ`%}}mQHzL8/- hϐ)#T]86SR)?X0AQaewLJJce r6,;x96~$w?oKEv҆e?MyToUtKRn` ]v61rhu9(fysv&yiRMvT!!I hk=Yl8PgK=9 ,{s?ā7(?I+tWщ@"7XCIhɧ`it3*pJ1< EW,كmVB߭v %3K [@urmZJrL@{,J<']v|UzR[71ʥbE:Hly-.@%dkTNƅr5!e8nhœC3ja<,>8Ѯ(& :u >YUҩcI6[CΣXRb,-`-@~2M8$ԛLspcI.WWRO8m&$%IdW~6Euǁф*MCpLN =b"e!X71>P}={р?i:-;[+ns3&7'D0L J3ۅ= 3MI{R¼&7~[#*Rۋ88eU5mwYZ~QpQxb79 ׀V$Ed_|7v fr/S +td@(v(y ̈́Akݩ9ej?vƴair6CAiHvÆO8:F8%p?}*<#= Y&U3@|~kwyM$d@4r +endstream endobj 1389 0 obj<> endobj 1390 0 obj<> endobj 1391 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1392 0 obj<>stream +a^zoF„`2I #P2m@@-Rۀuw@nK1|騚buñ.kIB n"e2;=kKբI#+pk)v ;TPb,6[y"f"D5\-PaiTCN!J,a~vX-2,jѬ9d@>F M@npVP|B7?&gM8kq0 06)p}KQ)C+3@ap[>(V'4rnV埈767KΜ1[ƙ[ȿ1gW +Jyw [P_`󿡖TWz0%uI8`.ci%h]43_Jjt#?$`6]i%<v 1K%x5;F Gڈ3;$_|Uada:%kc~}nDP!,E?k6l8nR7Y @m$DŽb*LQ.&D92x.ʉH۹5ÆA9k9 B=B-eheyni@К|J C. إ#h7!OiY\bNRJ> endobj 1394 0 obj<> endobj 1395 0 obj<> endobj 1396 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1397 0 obj<>stream +f;Bu#4x.^u֍b&jCXaJŠֻTj~0jFS qі9C $B4{δRs+q2OtU qVYTBRx=?-GD츞c8"ݟ%G8yɃd/;aMnuqCL?c8~uO\OZig|ɥ^:g z? ׻ϖpS 3(>zEdYOr-uW=:jf$`%^K~ya*=ntG7%;hO7䙸{4lA+PC%bNJ[.5j0޴{+1~AB,<Ye2 :LGN/WQՂ{ x4UI\7{ +氭pbR64KUT? kze育O,¿ 䂁\tJ*kiy3^Fr=Bɡ/,l@Y$tfڏ >۽U8c_yrر;^IYbHDh2> endobj 1399 0 obj<> endobj 1400 0 obj<> endobj 1401 0 obj<> endobj 1402 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1403 0 obj<>stream +k6ؙ msZl@w1rg´hX5.x=8dn2 ,%>`?m܋m:<[V Zh] ++2?Pž',C@TiJM$T+\(6^ +21xy"bHfibMWht4De q\JkkR}##/MzP7o& +z +A)+op^I wVGn"LjoAxwHjY{θڪa UsfJO=I姄|ɴ3P\2a>lZ?'r|,4MֵgTZ:TL#|KΓ(|MA0u87f0Fl)[M!:uiZ#rrc{~:ptWۀsh0e'y'RI OJ6%ۀm]!Cm-,(^cSbP @U$Ĺ4(bd|}1Nv#X@Mx# U7 ƌtzBq+eXenl+PQj6tXR6$vQA5 M + V鞆gpNjM]XI#zG7֗Bt.9< \ ^FA..*zh EZ:ڱX*'pb6K>1 Cx$$nt%m^ +o/UOm:7=:L8L)$ĽR=ap x'nhf$;`k#%C4Hr>DHAO쮜5 +endstream endobj 1404 0 obj<> endobj 1405 0 obj<> endobj 1406 0 obj<> endobj 1407 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1408 0 obj<>stream +ƮM-9Ú޵W*>Z*cIr=1!f䗻+!|4u_BcKIR7(ŬwIY7sNA lcwϓ`i߷6 +%-$F̺G2mSR>]יIic\_[? %/#Gx߅V*L+"{up3yAŒѨA_F g`RB"SA(l4c+KFBZi,T 73)&F_BXPԲ}"6ESs3O&sNc3"Mw.g {Hǡ}oҎf=THSt+W5 2=v4岜pNd$͊p3ZPN ;86R,I{Z#*^he B@mMHD- +xu gT/;WTKm714!zX3 be8e@1 6_qD#D3[P2 Ωͷ'@Ik9hpg}*)nI قR{ ~n(gvr)ML˚>E5r#:NfTWNʏCyKo3*TJ$R$q +حII*ˆm6 ޓЌѶy݆d6pu@ΐ> endobj 1410 0 obj<> endobj 1411 0 obj<> endobj 1412 0 obj<> endobj 1413 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1414 0 obj<>stream +t)D`y#k½nlCN6OOcoJ?اǮoB<^I7˝:py|4=s :?HU)Е܂N.̪_a!^1E ~'JS1O^@d%qfTpQUD7?A'F{' ݯ㇗om⏾dc>δCW@N؟ &ٝ% +5xz<.aM['r:ǚ=E ~jkX/ɯ٭ػApAΦim/ĺ.8_]GhRS; z9wS@f>&jQ8IS;>̻Ax7ɢ_Wsr릠%T?"!g0D T@1vw HMu3GG$SE^ >frQAc?Rz*ij#q{BRMV=]ܳhC;f!nNj6o5 +VV2'_*}Y]7X6z8†-sAl2ks纤vDxmOB5JcMA0T`RCYQ#")[*,+{4֕%wWE9_p융5 % Dv7 +W]w9ͤQڌR8QSGpT<'`m)vV)1?VZc}궪JQ}E>S ZK_X߉ pNpGH2n)iORE9LA涣  gQ7 dc;fUJP;.gwm jaz3BZ0o(ۈcZN(w<@=[ q!!o̻&zL+êsQ,}~)P;:I=0 QaeĆF']N=NRiEIvBf#7~XWDB(>y`xޢU̝U_KibM8_2c^gWTk µQs $NI9h-0*)ptQ>tfd4aүrTR%5 .3.]hiOSLHЋo!?IHl!E,fS ZNtNziu9YsCrpk +endstream endobj 1415 0 obj<> endobj 1416 0 obj<> endobj 1417 0 obj<> endobj 1418 0 obj<> endobj 1419 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1420 0 obj<>stream +5]2V~#< d۸Efg裷H ӹۨ:8[ϚwkQ%Hl_)AL/N"a?,+KuP^ڿν (0?6wZVJ9 +F r<2 5Pڅe($|з~ȄƑbR*U_NLQe'_ઽB C R59>'cf Ybx= +J]L g?E?4⥺Ic1K")5pYh%"s1xVJ E$?.Â4pp~ܽ:^0t'UfP6C_F-D«B3gPK11NfJ]茔HaYgg S:d]?lx!5O9}MQ4iⳕf7JAͬ.ܤQN +zH"X-VS7Mˊ EGc]jbGwҊRyojPDJ8;H9aIjȿ7B[J + I +)Lڷ:ļ-_rJGݷxmgd~[q.{ȾG3! v3+د 틫y??;}%թohtؚ"}*;u.|,=>!uɖ25ȬLYZ |NW,+J6uD M{-è "ngfO0aWP+vmfˤq'QJRO +yz ߪ}h&AmFסkCZ*n6/#k_ɣFd }MA:TDf8*?EcIWsJBN{4 +VZV%cU=^Տ|udN'F*2j/jzRޔXMS]%˱ +endstream endobj 1421 0 obj<> endobj 1422 0 obj<> endobj 1423 0 obj<> endobj 1424 0 obj<> endobj 1425 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1426 0 obj<>stream + +,6)~gHJR8)Q9q̫}~3y5VrpJB)^v+ڗ//:⽾p 6_dϔpCfMMO䨢ڽUmWCekQXx>k  T&Fd*^M,.%{C$χA֝UCl# +^LK) `]ׄ"_*S4JǏT<_XB.A{2KL->d!H-ygiub)"=..mq.uMRtI3i 4QlQ +se;_}&򳎃3xH]=5ͮ s$N½Pm^! _hEH1YAQTrOD_OٵZtR(`~ Ǥj[GO58 us$bbVDH!x@1UGc]y 2IV_I) ly +Tp>RlGM͌=H+8Z{~`gbB+/(71j +""&Ėqoy)]<\ G#Lo'NS3sk S (Ɛeh`3ZxTt;\CIfv.8U-INac2SUp^Nɽ*dA*d8~}cLجfxOX3);4B( \Jv qsZ2g` خEWR.Dz}N6vw 8`BmYFEMt;&;y>ɚ#q}/|Оȇwz-*(+?45of%8 u!u7{co;QÙIω\;׏&/1eA=AC(2ѷO62 lshC8 +*M>^lyO[*ԩ eMa 9!ա: +28d?$.;jCXlcʲƆ> k#;f8v8=rOqck@ԽU0N]Ln]׋=脇ZHyD'0v熋ROVˋhR8fpk3[ZX eڅ ԳᬀrpEٙ +endstream endobj 1427 0 obj<> endobj 1428 0 obj<> endobj 1429 0 obj<> endobj 1430 0 obj<> endobj 1431 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1432 0 obj<>stream +QzuxVaQ_.¡QُLG]: C(VdN% ,TzT{F~dS_\]+XP ZRERǑ{ >,=-K_ҽ9|m]߄۶+;'ډW>c2PpKan}˛ozIB1梢xx<"ל{P L֧X ; BG${Atk|~ 6:~q +qXkD%I qa\'Ѐ^]L*{G P]ݝi = r<\ ~reOH|9`Ga)#/`ϑtcWk3 +󶞌pA)>o:2ZD藠( )`)kDqaX-u˲+*77Rmgg!IYKL!4dDvQ@\B#;@Ղ&#i (lZdHP7k J*o'T35=Wn QŤx }E]2gE9N]\cn< MKa'Cg! G>JۯN@5G)UrdAĴZ![pT}@ѮO<* AUS h~BSp"UWNNү(0zv o0-|NA=H==ub<4%=/ ց + /o}5>7XSrkC}9=o1q~0y{#s]%0l*y.tb6ҥ[.)P7KXҎ BN\?箃JTC}l?Dx`GYzg$:=ò(%o~6)?fgM> vo>DyqnI^4~/MX>mDW4a~;*#x{O!k=̠c7¶<;[49 I]iK=b0 BsiU+B4rF"4|'I{a5c*qU *3~ +[*ѷI|#.U>=BW;? ո*߫.<'h}beʙt7 b3XN+f;OD~a{F+1vHzg*hS$l/c3ݗ*q-^Q'p9Noʶ vp=3j֤1I?K52ۥow'2ne]X>(cRݜJ/dPD-S0(V]3!Ub[eDۂ!62xeP^26>0`k?qx +endstream endobj 1433 0 obj<> endobj 1434 0 obj<> endobj 1435 0 obj<> endobj 1436 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1437 0 obj<>stream +}xw빬ܜj0M֝ȱb!a&JR\Hܻurң\ZtholGsrXGIiKc)صD3&ӳ|pHPx R >NbLd{HW7%CUc ˮf`/z`y#E>&-%5C2-P}@Qb^1 7 e((_݌E$aUt wCo8|Ğ)|vCSo6hz"z:tmNCv<(׫>ew+,m0V!n=M= ![F0ug|{.]5Z3=ȗ͐-~IaCuP(T?Ԃ}[8N Khׄ>?2%pPI"=sT[C0 R岿B +:tS.`]퉛qNy֟#R{_nDm;  {=k{;WLv*X8)HrB79oDD7n W1E'Ƥ<g"v!Su\+s <т}Hϵb7dg쒴wG$P$FR5عQAۆ>_#@2ȘUOʊBXPCzGC;"){ +s<7 (Qu\'DB pob(n*~M؆=uXBclpGsF1n[ìP:iie ~옒ԷK}Tc/W~0kV+'ekr6QL-׳M>BV)'F^3|YM?K.BFy׷hJC)X՟O.zq]f{}KDbu?WR=jS PF\r^ 7Up+޲@g& ,=YxhntjQZܗP~bzH,mf!ʯ=.7I#C޻~ˢZ8 QgQL +5-]:8Woh"YboQ4L|iJ >.TheSwdPCR@LX4IS] =^W@Ip{^/a`VdDZxBM4! 8m@NrU>ɾ9s +,y5v y$fYN-sFH e wd +endstream endobj 1438 0 obj<> endobj 1439 0 obj<> endobj 1440 0 obj<> endobj 1441 0 obj<> endobj 1442 0 obj<> endobj 1443 0 obj<> endobj 1444 0 obj<> endobj 1445 0 obj<> endobj 1446 0 obj<> endobj 1447 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1448 0 obj<>stream + +j쓹B?s2~NF~U' z)E%콼`}cX 1sorZ\c+BE}!Z󔌦t:HRr}c\/o s10_[!l4Ro8ѻ%_*B۩cslz*WW˃%J9>6z毂wib҈T]MjBs>y@8#64t4Nz 2g]T.ؽRDogLa7U~"Pk48 (o j\-zFOĶ lV7)UĿ&yV:;[ +|]ݸc\ױIuἇ)D8R9&͘AM6aTd> JRe*=~f 07c}Qx?U0=; %XM JjK!g7h~I'CT+Tm_~Tړ񌽾z8 GIf~J ,sM`*-{ +q7" v"&C( ӥQ"lM + ҇:[yhQY99$E֯d4d|sz;2nDh^e'N +t4V晹6$gVUkvV"f\ؔ*}iDEz6:m.%l8ϖ o]`LfQ6HB @PR! S+HĖ-NkDï֬[O/R*S +09܏^6b8*wDة'p>URz\4'aVz(7m[^MB _Ұ8$^ʠv9q`-!6V9&OQЙ;c#*{z!W\+'@ oٳiD~+*?˻ۥcM&+&JGtjU#@3}pn2cGmcH[H`Uhl %<2}~ic\5bޙ.g{ZNh|, 5$L0o/C}Cbi܋}aZrJH65s#>V 7"Zy ˦9v.ۺB$y 3]HX$q9̄NQ&{w*CӁ,׬OKI YDQ6!6ď` )T^(B>s?*Pi0+1ocLƻe> endobj 1450 0 obj<> endobj 1451 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1452 0 obj<>stream +bZ.Rclљ45h1 &Ǟ lld7=P8 tuⶺ,t9f^uqۚvN|ץ j4uv]kNJYvȻk6 3,ڞnJҦ{~ȞQmRC1aC3 3qfTZU6mR}YH"ܖ@]J̤AM]e4fM{\jtO-W"uwRZ2w7_WYL;TvJ(;D@ڋ&/1OjmGhjP̓W%;lunRHᅣR#sg) `n&X>H[KOˢh?G-Ars-X9!6{ʦD`N*YIڮ㻘`7urE (F9G/LTAXmWxniEt(F={)%A'b隣`3ӣ8ۛoOqCt?i{--2&>!R)j-kc c< #xrw<'pZ+݃#AhRѡ!'󂡱 qe,;<{n] ++a{ 6 +ɩIi''覿Fj* QQp(ߨ4Y(A87YsߗFkf|RծXYpU"CP]լP ج;+-wR_(p#đY1o0by~uAYJgy,'}nYm]Za]Uyisp9W$9_=}E}Uk%3\0DD OꖁpM +)S-<ڽrqsazml\~ZoyrYK;{!kz{Qμ`{yI}}`T֥KPhgI%xoP %hαL>D]j,Eh28bҩGUjǡ{8ZИoVYHLm޶"{>T&Ur [,t/F)¡*$4jl샼)m-$~ݝtEki,߇\5*~&QwO8 6ߔ\A,÷Z#"b羪V0|7k +#Ro4Vlŀ&aU<[}FV; d1 LD-/ +endstream endobj 1453 0 obj<> endobj 1454 0 obj<> endobj 1455 0 obj<> endobj 1456 0 obj<> endobj 1457 0 obj<> endobj 1458 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1459 0 obj<>stream +\Ɋ:ʸȽ$IVx>u#רp2Pu pF1nK97Yx7Qto?^[ݍRY?Wpa3x7"t:U~L( -ɺ!;y6=rt$2T`w׷l@RA!bæ^OByMLo) +ERȹקȆX[Y2ܲœ`zJ1@<_5J4gȅҔ"e6kN%|"X,!w{K3WKp:n[);?+73Jy)o#1;*wG4';Yq)2[ 肟uUcGOo?̽yrGlڣ]1<=CK:׽בALx Aڄ--ٟm;0H:uSz)wxAuS:\޶-r=!Qjf5` wA㨑񋠲.V'Xh|OlkX~G6-uyN(djA1%o,'h8J ~ͱ=@'h(ԝ\83Iêp܌5\}'OB»G$ ʉє#U.} a +JgvoUE0~{hyvcB&9*JX[2&c|' |  &G + +JHy&2gaӻLaX,/:~0IQuA?޾I4ZVpyp7g~J y\Y`@sP > endobj 1461 0 obj<> endobj 1462 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1463 0 obj<>stream +esDKDc< *CjT)(jwZ/z:ށD=8o]\7l*Å{ >$[Ici#`6S=(*5 q9X]i (OeF+C`Wvn2-7V!FޭrdZM +L{8@ºO:$BŦ$9b޹OTl12DzʢZ+p{q}Wboh'. į 3̔Ā͹ {g9GG~h{zr@X}C ?bF٪qx: r @uA ΄Մ8ehSKC2l{,K +_/x~=jnm8qґ&Ts; + mq^ ٪ sw_)|PdHV!3Tiz +{k _^陿gDS3 y[X1Gɂ&ӸR⏍,%fl>>`G֋'gu@_ .DDF,(TQjEjO׾u^ٕgj|3Wcio^Y4o by11|9-B|0@ͧA0ꜦӇ1#34T?n~SNl9hwP5e)> endobj 1465 0 obj<> endobj 1466 0 obj<> endobj 1467 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1468 0 obj<>stream +iC$mZTH~[:^Sj}`5[0L}QyOϏm)[""'vzi؉\ *{/ (3{u %y;L솭3` lGίd +Ӟ4(yp)5u<%_Y viQ93VHI +OxH $e%;ݾ - &J*+dť߰2ztY+sZ9R)8Ws 7Hs,D5wֺ>l3Fqn$9>.*yǓ<e.bΈ`4L$n[:Kky. kdsפ[IQgBОD(y*Zq# +6(j+$]+hP,ݵ +7RRXx X7@kϙ') +Iw, 4й3VWdTQ2Gsw%& %j*ؚ4?B!ǡospX0G9<͂ +Dz7qc1)5V}xYAqvT[ {FnJe/5$Y..f|ڎǑ +OH썒X&{`ecS<K*Ɉډ9_RDQU?7MSh?+&n}(=8) /$ ,>H1MTHv :w=*l*ȘćIL@k ġ(B5> endobj 1470 0 obj<> endobj 1471 0 obj<> endobj 1472 0 obj<> endobj 1473 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1474 0 obj<>stream +5 Z2»dV :4)Wӊb.\_#nTVܣk +pg8 iaۚ,|XqLTYon.(gzsA(uPd =Wm+^>r2=fFj tdN!E9:fhq$p9;d.KJ{zyb>:0rYɛE-wt)Uhb=(.Ap;!iU0 +TX;'AemQ 20?IZ N>bLֿLo-jȁ'e' bz[jJJkN@rZV MGQJ221`y/[@{PƞI^!{ZlVsD'4vT"QS]ϢKP!C 3l34!'@QW+"229Z 2HVD +?To&u0)A'u"X6nnFz/Q%]hɚYږ0}=ꋟUߺ  (VV>nY$ ^0+$:%BlW3We_-ydqǣ_ꌋM zǘx_Hɬ`&1p;JçD^\^]wmldd)[?]n̼ip6{qRNc崢6W Ooze+? +endstream endobj 1475 0 obj<> endobj 1476 0 obj<> endobj 1477 0 obj<> endobj 1478 0 obj<> endobj 1479 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1480 0 obj<>stream +#v fY3ɦatO8f8 #K-_)7T-kukȁkymѼkي7 r=]u`B`5YתʌNiAdXmk͊_zb4T Qn.0F|6ݥ$'9SwU&%QЂ-1 tlCPAMS`l`cRsCۦb2QLqCD}(UIUL"+#P =ڔAsKC`S~A W:P_j>LC'N+ea$0 g[ް67's7{Odu7NjLHY9ãhP6f]@BgYGgnK ձ;rq{E@Lpz=솊0^̚'wQX@iËH\DB}nI4s .EP9 +^<4v8xx`%ЫVYk[Z7[ ҖN-F(LKV~f @ؿQsDll_IEr d-ёwfO#gg QT<""6p "8|7]QUҪՎXYמ3-p#w[1d2 5T#VsIep}7}FSߌ> endobj 1482 0 obj<> endobj 1483 0 obj<> endobj 1484 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1485 0 obj<>stream +Gd]sSiUn;,/_!A(0LF=1TF%.< +s[x0|JLAqQu vorvm|h)j XZbyL@)Rxy-ƎV:`#8tVd%hQ,~^--pA$>!Yx7 |In ]~%]V/RT`u;'(HsKc-ed+5%^OA]ܔF2{9$AΉ? +yh㜌 ҁK{y1g(a3XG"A$(qD <:j'4I:=!vٱ&WX!KpoPS̀ct6ePCȶiZ!mL>st.f}?`W2x<@v ?R.#_/u+XqoH,aM]-!nv?H:#%*|9_>aX߹z3s`u%oLbW=WDG0RX^l'q!Rw46{Us1mS?ҽ= lnY-RPP/X CmD#:=mgP7&Գ>4pXh0ʡ{V|n:Ʊ &8jBbUDр!9yrm7{,\Z.Q(u~pH\bKTmڔƕǢ/b/uddjR)Z9+6vf`\3,3ͥ[0~c[AeCosE)YQ491eOLX]ҿ1giN h]D~up0,tQ,A ] wFw 9lWX +endstream endobj 1486 0 obj<> endobj 1487 0 obj<> endobj 1488 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1489 0 obj<>stream +j@2އ&gX/K!ˤkT"Ub$p{, + 4,!-P&v6RDFDˮQpiimN0+N $#ꌸGZDVhLVCO_LؓsfazcH֥͓VsqCix!B"\uF2X >@m'hϜ3iHo*ؚdqz̎4 +?{@/zHpffa\\pZӢFãmacMv/7Y,P$1|0o'Gȩq7ٲ27xw9 IRٖيVDj$a/{W$Hil"T/v„lܦFX]:Qv)r{UBknNa}TS^7*s|QC][p Oq'`51ba79HMa0XZUد5ɹכ+1&'d__*1/{SSk;ʳUlbGr)_:3+P`@9n4rg)7 +ڽ q˰W;YD{zm)*t@#^RD_"wFݺ],"5;}j-j!fs @|^o~HEm-#! %zMBx9C'i\F_^h:9@u`斧&0U>7~'(PRLɓlClUp 69_kZG VO7۔OZ&쀉DB vY}X*t[H`;b +-)8"@ +endstream endobj 1490 0 obj<> endobj 1491 0 obj<> endobj 1492 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1493 0 obj<>stream +nqon#'"L%%.P~jnj,yHryX"}8 Xb4mVʘ&V֮Ì'uJ#-f'DdT-嵠Q  rqDx'. ,2TJ#xyhƗ8U5AϞgW=W7,j֓}'E܍ol`z -ag|}wN˘DXIخUɞtg&jE֘+i@4_R@FMBk[Xx[([ ̰N'A=9#7A|^6Uѡ0;|{!c +XΜ|uUK18N*H盌Ge[I=BVHuMFApiib2RGAͪTN/޾,/PY0Eka=ף 7$8hF|dr&NfWf2}!X0l;&aϙHla]q"V^Nw -PzoOewJzqB=LM,OfZ˩]$~/G1UH_?zIir8Y# H屳?]삜鹜"UJA>2S-6*-=t> endobj 1495 0 obj<> endobj 1496 0 obj<> endobj 1497 0 obj<> endobj 1498 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1499 0 obj<>stream +39>ZVUAT % |uIޟ08N*z+C)mFPVvVYH.a6n a2J#U> nQ s]C:NZ\PF(8GN0Đ+U?|(vGd!# ?IS5]SQ\qEt!i{Mϕ8YBdœV@\_$֖j +A߉eh"$k*),:2ɫQCW,C$ܫK(Q‡|mTLs +>ōֿұVԆs5SEa|}v9x*Z elUqs:#[e0%d]zeC{uuSye=(y8cjQxٞ/rHr +>4<s6]qL lYMo؄LpSK\Z]*,jԃ n<+7mSʫF+3oK5&3[>Sl<1s8rp T' S8?ƪ^QγIE b#> endobj 1501 0 obj<> endobj 1502 0 obj<> endobj 1503 0 obj<> endobj 1504 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1505 0 obj<>stream +''b\m )A>xh&{z.&64Y|ҔO~vadDn`꡴Ҡ.a.bAŜ1O_+? +aPqao4yf3+,6{ U$xlz%CvDʗֆ/ +8ˉy+MMTEd8| "?OK"{=TdԳg% gFX6hLeunQP ~klDH۔C-&yNằ7>m@8\. kRv`+2^駤&$^BE˜~xbɳ.HUV ~G5٨p (Gz:l91(`3Mr)rYבPME=,Rj$ꖪrlu#tU"wq,PZJ~g xtQ)rPNh h tSc];m%siB2#  s>H܊pM!19<󮘺by6Nb1PokF8$i)qP7 u +i R0VϤ{[e+ +^:!m]DB+$1 |mٰD@C!(NJ#I '~|d~nD(U?=jGuH>k}T'Bg6,fΟ*:zxÞb,&>S@&ֳX -?7\Ot92;=D0뷽v?~d1&Զd6Y|<,u0gg+(s-(H}Iţ4$ў0+=&t@`rGYIXŧw~\EWnAAxб\DtG  +5=MG}eɎ3BO=uu sR}:?Jz6#uۢ`)bbPi^GAag;ȢhI2D\q> +C(%ƨ^CWQ + +&嗶X~y6DZR7vt^ߌ#1&7ruK1 %*B~ {_Y]QٴCf~:p?V5l&DGކ|櫮 +endstream endobj 1506 0 obj<> endobj 1507 0 obj<> endobj 1508 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1509 0 obj<>stream +,˞9É9[= Y-̈# |d"Bs +$, Y_{&a0^^_bNۆ,L .m\R +:)ELV2R@0\䙵R$4yQQMfWtEFhſe){VjK CxD^)%L{AòU7k(GOJK}u3ոh\¢9BiTc H/s<6ߌtgzgn!KsNz5VWU1c +j`6BrώQ~BTf#"-0UFKc5sp952Cgqyz,WbR6kZ*Grq|i>Ⱦ9}aku^?6lfY<^(͇OȨg?G'[rBxMdZ70@x>1H@ z4 ^Peݎ㢒lS סm=bU){2TpOYLDjlօܷP59ΰ$ZW&>3ZiV3;{Ozv*DYq`Db+}B!M\=a ^ni,DOI^0TѳcbHxi-O&Tfx-:>63D!M=3ev ))_$^lBcZ Y + <0DD˳ ^Et Y sž4ژ]Tӆ vԨ `0Hݐͬ8+BfN=#X$(ВGy+tb`мc 37aA3)FY{sNC]=BGTeY*j첾_p!v=£ncźX?EcY?Q* U'AC_k>> endobj 1511 0 obj<> endobj 1512 0 obj<> endobj 1513 0 obj<> endobj 1514 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1515 0 obj<>stream +GWFc ÖyNwͬ\D"c-HMm{wT,|~{s#@Uv2aJR FxӚ{TGHs3ZLE҂sێQw1g"9Boo6W.טs+˩AP̣D-^b?d.eL32\`ui36_Lj+V1K%9iΩtmWqu" .!:3|2%xc_FjӪ߲7(??ߚ 20t=ѣQΕ̸@'f;O΢'QO4y2y"XXa>ؕ`*eDמk!4S‰NǬjo8w §oMr #pü@Oarz$iD`Fηxa`߰[ҡVѧ& e eV@B-!rf9 +k.o34UZpfφEZ#鍡$*P ч*2HD1#ՏʫZ9g=đM4MT{(2<LPC7Ř(h?D<%];&ET7s,{dC~Z&E* X9º@XO[gQVL7;\(Y%!ar*^0p0 49Õd**W)'eUG.wc590M^ sH~ŷ)Bͅ=voގaΥ(D&=ew;W,vһ9QX|K,)9Qh;?"5 +endstream endobj 1516 0 obj<> endobj 1517 0 obj<> endobj 1518 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1519 0 obj<>stream +VO7aЮ[`{IƵpf'}%!Ľa`O0YFJ@IQe{f\͐|AǛRɘrg@z8xb 6OP%iJxZ\|;߳/" "giRNOD~yªشtŦ4`Ճ=_`W&j4*ZJ>G3\Iq$ _Z_NecWY{=tN16S"#(B$wOv WIBgͤd:,͌M[N7VK+{/.t/ddւg$ |[6d09cc]ݱn;Lwbh lܒx%][z%ʺ>CN57l汪o>@ACj! +tZYt R&ut֟tk(xGAYe$[l 6ĨxoZSFr^]rC ~v#|:a҈I}E+"^{gaBɌ?AV +EFu${qCSAc+%ҞseV4![9Ƶ8#U> endobj 1521 0 obj<> endobj 1522 0 obj<> endobj 1523 0 obj<> endobj 1524 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1525 0 obj<>stream +Vл{wmA.Dkޮ̲^:Vɭ:Zꬖħ?Yj҅#;W!w̞ޒgF?Vڱ!%H}+b=qhCK2 +A>H}zА.);rt+HMZJ0, +L"[h\+mb7@E&SABLɾ3u`4St<@d,bF=a'XC(]Rk*C2Mc7fuH|zƪ(xy1hD8]F +޸Kb܍%<;JfН2wxX\mi3[DD߁GzpS6QNѺ6Ai$^Sf~ێ䋮 ,4{D1*ruJO!̣*fXP +endstream endobj 1526 0 obj<> endobj 1527 0 obj<> endobj 1528 0 obj<> endobj 1529 0 obj<> endobj 1530 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1531 0 obj<>stream +  c+!hV|b1ma4/b& 5%{wo@&x#A h̰ &`2Oŷ6(}amU($f +eyD&D,3E@Y0 !G%z,x2㓪ЏDgLU 3j UA:}Q=^-EqD}H~(_L->Q̀:5<|Т;?ǽv蛶|M}Mq3*K'#ը֞MOT8%4՝o·D4xL|rE6!үn_ 䙥̓xhQd4Vx!7 +=kgȔ*`T*%i,Ji|43Z«vdX@'j7U +endstream endobj 1532 0 obj<> endobj 1533 0 obj<> endobj 1534 0 obj<> endobj 1535 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1536 0 obj<>stream +j ʕ~_QlLe] +qEƜ9>_9eSuՒ +lEmspfɸ OI)o0sY@d%^d [為u3f`CI^y B'|D: SqBl%GI$ȑVu/ Z; 8ZS[-;nՋ!7Wcj4PvQUCA}N_Ac;Ae_ S#[!. 2/E|N&MӺdrb)p!FT(^6hY +7;Z{p}"[f2<ׂv¾D?X0s0Y^˪V\FQ[O)˽W,{ S`FSץr/*7L]Aނ&uFeheX\ +)@1tY9W.;i@"=wNoǩ5cf$d%I"75PB]hWڧrup@[1+feRiGN88 6Z' ˄)3|~gb;vTSrLX`)z"bKtkWψ PVNPR~( ӯߨ~h2myRߎx>e <ܸ^CP3~׋&8P@j9iɔiPyޣp@y Gvh{DƐ ODh&+dNL55lV֝ +endstream endobj 1537 0 obj<> endobj 1538 0 obj<> endobj 1539 0 obj<> endobj 1540 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1541 0 obj<>stream + ;"mPܨ)EswJQjvNҀd$}=G\0=ŹZIhJ An2 òK1J`nrIG؛'sC;9ȃO}4 +kEY,`a!! 愧>4&:%jV*+$OHIAU_L8"l|Lb2);xs4:R.Lc!fҝ(B] &(5.bLX:Q~b7,tYP0A̴uVIBS#fhEY:/'5〰5$CуQRWrjZ)~_itMCj^hp(H!1t@'i>iYOН_-whŏ%Fp] Qphl2eȼ''U49 +Gҷ̮w;/m.n* vܫjK{ Ho=Ml-&LG2@G4zy̝8pC[Oo)grzDӕru,3yP2n8 ݦAJ"yԓ%wNg,?Llˏޔ]4R&= +endstream endobj 1542 0 obj<> endobj 1543 0 obj<> endobj 1544 0 obj<> endobj 1545 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1546 0 obj<>stream +u(ơz<<_e +u/H`[8S+Y(NR/Q1d`z% [!qq=ÓTzW5>Qoӿ*k9Pܱs<0a[h5j}Z<|&LCRdml B3Bite"90qZ1O8bߕTg-6GZtH!ńuu@$/e ( <J&h3@_5N kL!L~ܾ* h)v:&0XXFc Ll4. J$a t:v\Aol `86NI+qI9x2疨 >]V>cܮ֟yjS'u*{$GV]Q-:JrH8ţ}3zx0Ror?eR;P ?^hg); 3~͚gcQA[,:H2u rKxYpՌWJuXq$ O1"SJV|WM(aQpFPA#8&}- 8ʸ ņFkwФy\/K+ 1lYRko]I|]4R]m dL1Q6H5Uy]c'G#PM?%9Pl5R;H]XeF*CۏE[VZCckl݀PDvNˌR X^]l<[`s8귚%`84L?tm5zM-k;tzc9 +&s H> мHsؐ9TRH1ֲDQō #7x +h/8gvhatxӠ)-Q q)ho* +`17$Y<ΈQ_ٝ諾R +}9#P+X}eLALBiYuzI(4KJTux]19`-avߧ 1̣J -_hW8G,/Aj&"Pr<6j٢9Ѕ"%G o\$c4|q^mSp &s'BqZaE65 +endstream endobj 1547 0 obj<> endobj 1548 0 obj<> endobj 1549 0 obj<> endobj 1550 0 obj<> endobj 1551 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1552 0 obj<>stream +&8h́ٯق/fav0O`Oϋnuk#Mq;GC),s&'.mKE?.׳j XwvAk*s"fI%5jeL'e;][sD;ss 8\ r5,%gK*k8ñA+$HPܮ=&6_`Yn4R^^Pa .WG[g<]}|1m7~zNpZL9ing;׹v]Q*h A0y6̝(`LsXIEnY>UU벜,K{,F+ QYsOX]鈲\r 'N鏖vη档."G% eFa>Z~*EU{&`_gv/pخRx>7vKǩȁWLrCP4#gH"~X~[[k-;h f($e_a|&2Eݱ5@A'P#<( \`Pψ|ݦ\[Շz[6'7ʻCѯz'[-ͼ|76 y˵bz!LKFZ5 UN*6_5<.'rЄNk˹bsTܖ/&=UVpVjZ=n.FR2xwtc>-C5~ 0ե%nQ|Y*+U3ʸ\=;xM󬱆tM88Yh@(T `a֌ٲe^M]U\7Zm}=!Jx(t 0c Sɞ4@h^Кr ~ݴ{ +^gu܂ߚ5@IJAc&R"T}5$_r>{x};msF{2k%'OKͦ7= E)ڐDh5#)HbΕ'W8xE#'<=mn,k E ./ +endstream endobj 1553 0 obj<> endobj 1554 0 obj<> endobj 1555 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1556 0 obj<>stream +j)ycuuc~%?J2)-1,z84_ z:[7]I"P{)!z/:` %_aOFnn@5qUD ʉ6^܏Iۺϡ +V!J  w +7G(x׵т +T;FPbdȎ֤ +]P;O fO]LڐyGA[϶qx3b0'[\{<&dpDhI#$\VhQifXrVȬ!edg|8m7R݆-E%R.,[%_'jw!Σ+f3/pJJ)\hdV?H/EIr 8Ny1! hLK+"2`Z ﱌ?NVdҵ;QALC,OA^ ROԷDXRCPsXbX/I'TgmM&Ӷ=|s=4eȭg̙<͘17ԐaqΦ쐘TΡ`m;##S~xg)b㽞ZK~z1nSPB=bL܁L܈)ZZcUѩ%wbUr?mlRR{@Two׵H.痘])o`n+h\Qr9+ҳDN#'QK%FJ9y+q(= "@brxÊ8uUO|_zmwwb|&U_ϵnCL t\„EhF ]3쟕~ei> endobj 1558 0 obj<> endobj 1559 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1560 0 obj<>stream +!8~X9YÚXGYq﵃$woxTHj565҇=G (ϭ =K9dIڮ\ViFwP2]by?jOū _oSD]T]luڥC(%*q%?j^K/=ε->-0]BziTfA9Y3a=;b>5܉?n,7k֐U/qW#h~P$.qLHts.D;)hj=]^=he7ukF taV욖g[M&׎6Ypg6WX/I`7^:pnʚF0, +Kҙ=rdrLr]83P)O)v¯ ``"-Fgr`Mt~C-w߂6mquz=s;ٯ2hkIZEگf2[m& OC%n#E>X5XM Rzh[Ԣ<1)1p0Y{ZmXs<}\йc> Q~"!#( 3ZPJ~p>:1ޤʱꬴOhG I$d쾽6CTf_CtO܌yҦ~zg,Z >HZviq #l+"g'tU&C-,e-K"4&h{hu/joe׆ ++N^;("imvlfS0_ LW؀Q +eHO"Έ&w!o2[6_;KJRC-J v_/zpK|n&b?i#lM'P +37FvGEQ_ d1Q7/]sPL>k-*-\$oj 9A{:'C'PBꃦ,{`x"ߦ-YN}\&7;^HE)˚n +{H\Ͱ-hQrR09J +"ZY:f6' K2JdDUg{n\fq'"\H&@W_Cm|>D,b +GV,:`'0bڝЛ;;˯tY3rܳ)˕ΦaQu&&[ +6}ՂK:]qe"Ln)A.ޞDJ:=Cm*8S04BX ׈wadKHRgT \ +endstream endobj 1561 0 obj<> endobj 1562 0 obj<> endobj 1563 0 obj<> endobj 1564 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1565 0 obj<>stream +^**F >뺛imqbԣS:BТҺ/A *4yމ4MCoTMy_ܺ~C/5Iį8Ɩ㐉U!\jHK`D ߙ~QICP3 x.S=M Nc]oWhئzP-(!(| ]WĪ4]CQnk#"]]$JnL wLv Q=HsW +=bAb{ӭވ;M-Pi"=Uj~1!;| J~xn>/vȂpq_2aPdO,5r U]uGHƨJf;χm A_F iw]&fL)u â^%785!q2m~!h?ǧXr  +)a>1 ݾ$9o՛ǾiT sJ% #qaXx 7ȅof᭸6*XcnH>FZ/҈|VwƐ1|x-[Q pAUQDv5ngpv3 L5ZO#TLz ,j/*T7KxIW2roP,I謞MwI[T!OTO0yNaώf3eM2ci$ūNjPl"?>cQR)8 Xu4IKAWNaPPEޕa<2-@zH/nL7g0It>o. +b~VG ++Ac/ڊWcF"5 ENQHI4I $RF;]EiwM{ x6[@3fN扆nk{xhݮ" [X#ObT.ܔ1:hN WPJi!w%fo Ͷ.jؕ3>UZ6if.RjL\O܃:Lpv`%sjה7D-~{b|@]3xf9EV FJbZY9wMrK,UIO?| SA#?I[AS}o:* g$XXՕP4c{t~IY +endstream endobj 1566 0 obj<> endobj 1567 0 obj<> endobj 1568 0 obj<> endobj 1569 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1570 0 obj<>stream +ڢ-e@q-,3CKXzB^r=N88fQSS,YN2&p}Ʀ!#nRWW؏Sh!6478>o e))W 9G`&.>Z{8.20~IupqWJQ O䊌*ӫgG +ULklĒsr`SQ?L;=\9䤆 6!\.G8VkDDAldIR֘4T91uJrĬ^vY(aM;tV6F,*1.u +d4vY';ltN񠬫D/ ʃ~ q`?r5@O 6w*-FVAylcambrzͲ$SSZgD& &_R~h񕌔)i*=]s_WEg[A̖f ^N쥕3^Q$B]^_?RF 6l +j{N,sz]ܟ3!DaGs2 p gw70gK%w*L4/^X:|CG’a6HyF}a>p䷧4;kySS:'n,5+u&3pmdj=%oV5+ᖁ%x̠GNoγ#fMю;]K&v}Cu>|qMOxUEK@&׸֞`T\sh_9K|`l=;HRKR 19Sv{z,9r/V |[4Ku9( t> |ve,wDe״,u] KGo󽠀˒.]NU)JxkT8>&+3a,clQEVQW`~!+6w\ԝÎ#zz\j:D}>QHOA@]!kc!j +by#6 +m/m7DQ_eKj_4t$ |hCw{ /3-*jA^Wn`ys}P 1ӍDDxv_㿾5op $%z y=![WPwqޑZJF( &4+4V}oʑ+tST\_g9Qej$يdPa`=ohu>OKLǡJrKFYL5doeQoqmsI[*rO#FiGw +~$锘=)ٿs7 G zx!W\1Fav;0p7/<>,Y/:M^(CFt1[FQ%";LIRyqMn4/\d +endstream endobj 1571 0 obj<> endobj 1572 0 obj<> endobj 1573 0 obj<> endobj 1574 0 obj<> endobj 1575 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1576 0 obj<>stream +QcKaׁrc|y(e8RdNy !NHmS$43soxfJYK5+qK٬}j.\9OAdW }ȭllSPZ%(=| %Em zp.qH*q Q޴þGb$HH:Uք jB0S5ei=fD6xYC**49ia6dM g*]H7jECLF.~b 8H:g"0 ]$&k ևgv6ÛmRިǓmoe8KΑnL پ,)ΔDb;a*$53H:}-ܢ Ohh +ˣgO[fr#ww|2HTx6uE hIÐKyNFcU w|c䐲v- @E;Ē Kn'"L>$W1cEy Ƭ _2_42bƗiBWY&EEb#t?JU@xzៜo=&ѿ/? =(}ó|~4i0$19Ji<;{oEd>A7rqm ]w{<72bqރ c }R$PA$qy/oAkRBVpa'-uԺwU-BW)[0nA+|yQYؒU=ʉy%@NXܣ//B1)&blGLt/GԎO0VkA",RtL=)Q%8pGZR@{g:h9P[iB>LKI.YĊB e鉔+2g@n3}# +0, +@]=gf'`wW(՗FJ-bfmZ^OaS#ʗ:3 ُPl QmU&k{NHFOONѲu=ZNp$p4'I&CpNVͷPڐ!] Wex@-A^`Qo1.Bu 7UdN v 9r&d޴f,eZ!o L9>eC ԔcZc2~C`/w.nJdVn}Q|KT~4[ +㺮Mx88O  +-qhuT%O@4o%]qQ=8 rqDjVOWۺfB~c,x"%uP6$;GWGvgt h=];,BaRP=4>FYj8Z-rpwUY\oXqk+Ɏ%qd-ۣf\<.կ U0o:"!l3=JCldϼQU +A5~~L d)ϥ+5}rP-|jz n,d)F +endstream endobj 1577 0 obj<> endobj 1578 0 obj<> endobj 1579 0 obj<> endobj 1580 0 obj<> endobj 1581 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1582 0 obj<>stream +y5bFt4L ރK6_@XrYM4|Qwo>vqCLwZi!MH_XwsuPfJCiCL@v)Ӈؤo:%iweEBqD +y) E%h/ID)y*ѸD I%!_ ȶ>!vFmIi>Q8WipSos_u?'($"Q/*`Wҋ@^dW/2'\#' On${I,FX'-̫6]{=(uJ٩-uYE!W3 ]\[es 6uӴN{}Ab+'0mCG`X\>~d)'0ڌ +) rllx` KSE_Cz~}eieD X(mpgb:Ne(KL鎟c4?-M5os gfv*үF8@>p8$eWp~ȍB΍^?"UhQɝ4-8< beDUPxh[{ļMЙ>F([u +4 Q5uQ_z ,*_`wP>S"L&)n<u~ >^TԞ(棋}\ȽD"CD+{]q l3S#*ڎ~%zɡ?_YE>FsV^k rγlܲ͜\|۲FDIԙL:Ls!>&4;޾:a筠~gPL5`^3I.C7r^g\%&RJO,R16]L%:Έ6D` ZN"'#Sa/+f#]n33!a9DBXK uf >d>onUm2žSboJKdḅ܇΋bo' Avu?T%X:LuҩF0R;R}V u6p,E \/_ۦfG<鳩UdP߼mEՎ5AV0Р*?%Ac~Oы\Z.U+"Ȝ^? I]+]1 _r[@y D3쒣U~Y+^nïO_Ia,\6>!֡u.|nдm7iQQSt~INepX2~302NԒg Efasղ)Or|ڡ1zw =w}HݟU kx~LJ\dP|(L=&D{3F?f|w"vw/ uޫ(HO8&b|4i +|7 '' +endstream endobj 1583 0 obj<> endobj 1584 0 obj<> endobj 1585 0 obj<> endobj 1586 0 obj<> endobj 1587 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1588 0 obj<>stream +0HFzY;.GɾvYd-2$?*f0L +[paj$Q d"cxx u wַ{k?+rp  +\vh`[[v 9uQ=Nw7w,H+E`p$>S%X/7|n]l\F%1-Nx"KT.]!sL?W9.֦?YkAm*+%nPcY|i&. 7I9Nx&Ju kv݄yhB+261-﹍ߨ-h9~Qgͣ>bat~n \7nϥX*X"/bѱOVƐQ~ɕg!NkA&uJ^8ʀx"uc}R(Ƚ[7yUWI v" `{Y.H SN6޷.CuG?#5k'H&fāEup5\eU?PnR#cf9?!ZC NgK,bL6A| :):soRaUx]Z @t‹$h#0Ea`ܵ/'};u^ *T?0?g4ɯANi -ĬID?K"Z}dD;%*;fQʇ 0fe;;ܠ ?ZRSJZڽ;{FAl֐\vp,IሸE(z1SQ Gɟs}# v7Ϩ +BL>Ku$( +endstream endobj 1589 0 obj<> endobj 1590 0 obj<> endobj 1591 0 obj<> endobj 1592 0 obj<> endobj 1593 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1594 0 obj<>stream +Jܢ dVZ<|K]*LuM%M{cA--T(;j*x]lQ.\:(fE@ + +D Wb + qH C5$ntQ6eUcsm;3p5pܰ3PiWa6Ӎph?q0L 86;VNw) +*}d2ilO99ߍY@ѝ\ vΩTY'څC,^Hs=iot@.' fY(TRV!x_t<˹K^z2{2/PٹSH X%VFt[VhKlfֲ `Ԙg\mQ1ijҠ܊y*cVVMi[0`V%۶PGGZgogsةZW6TRȚ$Pbu[YOD -Lە,Ԙu#zCvls*[.Y +sL S6tbU&:T 2-/ʖN@ݨa2x舴]{5ĽuOq׳^7M dVó"x09X(@%H gi#,1B = Frذh4LO_YTG qa6~|[Ō,x!8ȧ7k{М'Y:U,heURgS2pL"&Xx*|jJ5G 7>Gq+gy|I1_4V_sL6 hF͕׿ 1pF:WF2dNG6>F:G n4_qx²V֥p8w҂]eqn^,ء0;kc?ơw1a&.u`Hȸ ȞfajpR^x`Ee9U~'+5P VJ!:]aO{,| +=ܟ`Q|Y*Hs_ۍ2/'oڅGjNicQvQGr1l3Q"JFW]2 +簄 mu]Jm4P5'UH쎤מ IX9yu +endstream endobj 1595 0 obj<> endobj 1596 0 obj<> endobj 1597 0 obj<> endobj 1598 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1599 0 obj<>stream +qd}~޸GR6i(FI!NMN,y.ss$-Sy'U-/fe3z.T g;!>9PH͊Qm^cJgW%*/p\q`uyƨų&m֟5B3F `6W^< y ʕ^o7⑺r{ hGD!{xl7z#u؛H?%/N+jղh/_ +V7ZŽ`w~>wj*,B{TC\Y'>*;gT(N*NվN9>?|YkuL<6q8 + +!%Gz~mX\N9Y'ijȩ$=@~?sn$*W)Ďw'Pb@N`U~ZXAYh }f#AOn \Yޘ ;lDvt\s/ݶ %e)mZv+$vU-`/7%nΎVgW]Hi xX6رthg:urzS^Tw7+kI:$IPu.&;qu*y:Ql)Rp;bGIKB\+|Bwzå31"k545,Ds9>w됌%` pF%|J[74AصezxCJi(Î'sM:x0lsIjD a_x?: a0=* +:ѬiY=_t5ԱHa16ìqK|t:m+C 5)#*.j1mf3xX;YNIs$-/ y6T1 )#ERNDif""wau.f*5 +xs**{ 眦m5Bqvjܟkc* J:SHo[ZV%BmYśM4non܎x2XOJ.-yT8$7e5d_ xDGiKeW=nn2G7."\OR)ŐmHU" +y~N +hk%*fe?+YU?RoSx8l9J_qB8J%$)T +c'f?xG*Ŭ{쁳#B˞AHdjb.pq+a7m +<Am޶ +9mzjxӠ5Ŏ~c6{Ck Nt +endstream endobj 1600 0 obj<> endobj 1601 0 obj<> endobj 1602 0 obj<> endobj 1603 0 obj<> endobj 1604 0 obj<> endobj 1605 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1606 0 obj<>stream + ٙ&l5/JB{X//$۽lUxwQF S fZ?s)~U|OU_h1cyI/Y)"8=#~]=ƣH@ͰevEI5,(hd)}kq&)&!:46ek羃(M 4K>xH&.mY +@٥m,nJrG߃ rm*|o? PpBi ɭVB|̆/rB7t$:g-4fzV#ykkņ2u(:\Q.6~|!m{LQ@^d-A"ٿ6m^Afp#@ )f'5[5rC3Z rP=s<_dȳLNjud[*عR- vTvScﰚU[<51@nK_"Rgy>*APPɚ H4k>Yi,F_x+ğUy |hd5?+s9 PX3i,WC~r pGnoD|~$FaIu4L :7_O1l f{|T1 P~*/U!Y`k44۟eYơIpưx=R$&h%S+qMJ4m~O8{oꥤT}upB%Hg,[^=OͫB,$&ЯYzu6tC?G4|w<ׁ$E1drd v+lÊ.SYDGg|g@AgAH]ovE5?T" +9mp#n[3p&ЇMoNߋJQAR +{niWLmDS|Mr6X lC`3͍\$7f6J,YI|,$שcMӇK1[AxJQP.jaZ],^CG!߁&Iߺ<bXTbyc)ny<7 t}~J3*"8;_6LhG$˜6nqTՎYwT's`@#QZ0.f)ŀ"Tڽ&ˮU"N14)몂@޾zt+Ze%iUDkfQ/Dle3WTừvI\,`>͋seǝrZڟteNӵ pi۰;=ܜj)pNodKe +endstream endobj 1607 0 obj<> endobj 1608 0 obj<> endobj 1609 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1610 0 obj<>stream +0'X7p`}'cSόd-0.<6?wYT @eĪs>F۵%;g0aHͳID:06AX߱yh,Ƈh! <ܤV >DNd`'SZ:N By!2Q܅Wg0WM +BKyU{K}Zʘr)lCq9p/#\mMf&cr9:vs!8};b8ؾㆸ<{{Xʇ6!$S3 k(h3i*D: K_45pLBQz%ZۛjBy{za9>wh:Z9^$o›1 x+F΂?ؗߋUi8ǽA~#Sa.7y%MOqk|yۇ[|%7Ytn@*'`ejO^bA~W7>iL䇖Sds3gYƀ;yѹYr 0&T1Ws +endstream endobj 1611 0 obj<> endobj 1612 0 obj<> endobj 1613 0 obj<> endobj 1614 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1615 0 obj<>stream +EYG߹0RУEcCf|Oe7] U1]lIv;jG'<JO.q hf|b%fLwzNߖQn>rsON'obk^%DBZ:: +ER׿[O/4zfhVӶC +ź@^un/ ETѭQ^n61T{ƫǡ`[Y*S\:Ƀb=[aANvdZ2, T'O~NJ0!XrӭnZ-Ybs`蟞,մry +be;N.Ԡ{oS|뽥Yld+6Dqy}]cq߳96+F=_]zQ@:E'W$dbex,ܾuy(3I ܬpS?$)>ձb7G8FA9kL!$0#˃{W ΐz\ q|f6Y{:6$~ Â5ʏkAɠIpZۇ=Z`S +t( uG|Aw,6P3PwkݭVd8G)wA>~XytT7n%dVb>FfRL4b \KnTPr3$˃KtB~9J?>Wی9˱6hzQnE]% +lm-!fGG:{IPiHq> 4e#2>-I2|M 6)b3Ȭ_$-{(1clmpWZt8Vwk*O +f?'a[I0f]˷@㋭B.K5lfZRW9(Ԩ$\bLѭH#xR( +zUv9$xqhד+`V^ug:8o{{ tv_붰f,)@NV\c}󡳵XPX|k&8H^Zd<)N&C" oǃBe?vQV#aǾ8!h#COf`K:Y "eI0r'9+;M$ |UiOmﱣHh .lmȡC*Ɩ m 6C +endstream endobj 1616 0 obj<> endobj 1617 0 obj<> endobj 1618 0 obj<> endobj 1619 0 obj<> endobj 1620 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1621 0 obj<>stream +nXmGҚq|˯2wA8Um'Ly1(x)І.(=gG6:F]Qs <5*;*mU )"Oiz|j&dy&iy͞B8rTJQv+Z+fHEr(Z[]tf~2:Jq!L`&7ʚxX3It1Qe$&ckFR/ (Ӗ|BC&bӕ/sm*{asr _6jӀ؏xaG=Nan-_67LKU;/d8*R@<.S<.f P;] 6 n4e/@-z5 }#&AU}.#fZϑm^Ñ\ Y5OZ"yܻUrOtKڋZUejPbЊ>|u*1KFB~T +!XtN4xX.%} + ӺqƜ~.wTE>]61!B)W@ǪA5k5z*I D/y\F 3Ʀ\gsRG9h/2lՎ% 1QɄ +~s~ن+1aZ¸aCF|Ei~>Fﻰ[X`4ie_'U3]Io(:W"k?–`)­P<M;|7#aQ f7>λݗ5N2/$G&T WN= -Rd3rJ^)ULƒӉ~?Id0{? +n^>B.G 9QЩ +{kwX b,-0qU!X[vO0qKaV0a I`bl6*ݵmyk< +=iHݼ EVpNoLf4eݷYWj711.gBPzf|S"UtA,G)Vt%ٲ&ym- pb*g_3ډD 2UY<(/0.9 /rNbG ,xF}?3[GVJ{)_#l-ϐ3+pC$Q~)WսuἚv̓b>i +endstream endobj 1622 0 obj<> endobj 1623 0 obj<> endobj 1624 0 obj<> endobj 1625 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1626 0 obj<>stream +cC<= 4zw"Rc˥ =~V:!M\YJMnaع0l _oDHmp=2Z*E ?5 +R5GZjW:> endobj 1628 0 obj<> endobj 1629 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1630 0 obj<>stream +"xGs"kD%_wj?,'&פڈ(ǞD_p)]27R=\KS":(C%CICN(6}|/>AO֠g0A@ߜLV -Н4wB$Ӹ}¦@o l NMZm +"g=}rd/N(c>:[ksl #O.oi"mCjtWn,OU ;;BuN%\><)Z$߉$ȚiT雨hpC#gb0*Oo"=ۭVD!`ISC$A5;|† + n_% + b<2yjlHrQG;kMCBc]}KHëp '\:ݳC2 'u +݄a@A-gú: .0h̶ C3۞W Ǟ/Cev7y5ΡM=,QLJ=ň/1u? mHѺX ?LfdD xb<[xѨO9w;o} +.+!;`@jӘBӧ}N>,9GnPs|)lToJ.?ioި>طX(du״ B> endobj 1632 0 obj<> endobj 1633 0 obj<> endobj 1634 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1635 0 obj<>stream +g۰jV ]l֓tӂg| 7z3@l+W 43 2t9얮(\uq߆SdH1+jf|Z;dÀ;^wwf'Cvp'pȳoNbvs Q $-g e8n0tgxu dc}R`hw|yc9[$R MgJ ?Cse]04*Vo>VVt*W$gT6k(U'+EF񊭉g2RYPԘr.Dr,Ȩd`lJ96e,- + Z"垰4$so)9LclW}F^rU0a!ጅ ėz?iHfaC7Jl} ʈ_|a h׋ 줹Q4v0n/9FwtLpX=KG?0ew!';"`8"8`4!fXӑC!+EnYЊ"AOpove} + .eB=wyv k3/vU3rn gi-VbUoZD3@(<":0p;Z&>ݒWI) +-꙽=MЙ^PCߓZ+.mT6Ac`G:Xie^ >5g@W@-m(#)Xg*+D\٭P݂wjJJ#va< +U%(rdkJ#ڞcnuX,4kl`&(|}a#90 gqۮTG߃Ofwq49:OP5w\%81_Srm}mşzp*j[~˖i1T*M-f\'yAs:fS <+"Z_jc)TOB3i +endstream endobj 1636 0 obj<> endobj 1637 0 obj<> endobj 1638 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1639 0 obj<>stream +=VՐ],%䄶m +/9+:LܢuLoTDνkix\02lxoM#=y)&'aq/֒__d91r ?N@063(s̕)F7s7ݲ7-!}X\/Gtبpy"eli@?pDЅ*[OC_^+8u]?LkNDD+AdNĄs{u/h5 S0$ʡ^!¶ܣthSْUIɋ3c$`풜=ùYi/2nC#7vvCf7{olݸpD q?Jz0d~[ǧF\ + +*K=eit:r%^f$d5[A0n*oG[:#@Xx-iQY!mG*(ݧ=>k0|Y% %`P׃Q./kDž9y|?ɩ{{'#aVw~]G!g5(= NJy&}&ޮ]ZRgEEԮia+8Mؙ%o#YF "JׅF _Y˄FX¢%qfrԩU?Q > endobj 1641 0 obj<> endobj 1642 0 obj<> endobj 1643 0 obj<> endobj 1644 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1645 0 obj<>stream +Yʉ"慨#BZdnIJz)0VDVRښL7B/| |d/ tUn4{f~t ńx)|$u|&afԂUW szƶ{EɶvUyxp,|$R.CCeAcJ ٳx kd7!ʖ Mңߤ7Y;m'Nv* G.yK8נ +`H} o,*PpJIp'8!RKhN7%#눅cB(FOOx(uhӡIxBF xhC7]OÛ +lYw_nvnP3f-MSE"-Y8SafY4;KN~LE3A3UG~b?T]Aw>1PQ) +Y0T#8% +)}M=[LM9G.a+66hGCB)vyޚU{ .U--@ ёpI'GPP0%'d5֝eкh¦)CQ15ijwi(*Aѿ|I蕙h̸P]yP07! u}hK!W3)b01`8 ob@+4&ϖ V!NӗY{L nR^~Sؘ +7yK9 Kk}͂ea&癎WXT?Z|!amHU- {Jrl]Ұyh_{.KU71b:slIYުVGL(^PvGf-iBuEcr(3'3q8aLD%åϑHa/t +])u6p?ߨ@vM&wbep tW!J]IzNΛ Xp-rLg<ш2 o a:4IS5 K# `19*ZGnH 8gbّ]``AJQ +endstream endobj 1646 0 obj<> endobj 1647 0 obj<> endobj 1648 0 obj<> endobj 1649 0 obj<> endobj 1650 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1651 0 obj<>stream +)bرԗ!u#3ę;:#H:ROB*7U/8ЏtDٝT$@QHct{ ހR׮tx?$Z$~\a}Amw#@eZ\aNgtM/>u +hE0v)W @{7;w2EJ\ҟ9=[n!SHK3?^H;m/B*!7mb*D~ xWga0<7L=) Vpa{Sk}% =<]|>7q74q-PckJ ;lz4Ʒ]wn=";NVi ʎSd3͝nѦJ)cZ%h( +]WvGȦ]ו3c&¡H,y- vۑ_ e.>:-xg'͝,j˿Zrk< (7c8+;dvAh6 jHz8)B231L^Udžpmkz7Z] }~֏$ĥsUqL0UгQ\V 45F|sE%O}0S8sO_#C=h H{ùd52 о>8ecΉ%]7@$ <=ݘ:jՙG3?&Fq rՖf!{PaJ⇓(;OG-S2`"dm])|xOOK -vH]{E؀eZ8=:m_ =d΍o5*~OM qbD}#c(M6ɅHm>~ŬXƳ|g&>Zr +endstream endobj 1652 0 obj<> endobj 1653 0 obj<> endobj 1654 0 obj<> endobj 1655 0 obj<> endobj 1656 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1657 0 obj<>stream +p}VVճ7 `Hgy,i}}XUy$Դ*G =we˛cM$hfOD<HGE8&rf<8tBwd n4*' ͙1[YvG"Lϒ%Q佶 +cwƝ`=@8m+K\ԠkϬج`~u=b=S iZV*M]k*8 eH[Y0<&#0='[S XYɏ;]jeè 4:5 e6cm)ذg+Y+C<Z8Rcw*SwnY?VK}@HU͡,Y׿TH6!Z: +ŎYRNe=qXEע{IZtPB*]ЫBgVxfKuBӜJPY~)"TMI[HpD."""Wd5o# 5䀥Hy$d^-o9ɦ[:sI 4V߬ Uҳd;(EN)q$ %Bwwކ}}0[Ae˫u;/Kj°Z@ zF(#X7%:CqUW Yn18w,dpČɦ_v|m*R_唳HY Ko=KxeV?ux:8'b+ A-;K ]F;R> ϥ>JjIzFDec:| dZ $ EAѤ<2\ s8#uL7JpŮM~F/G~jC,XHD(./a [kI-Tj1B"4s`|=RSJxU>D-o ' 2up4$e.@%zfS zU^ U%.ѡ8Ҁyw]M+:G0ug|Eg`xPjQ~ +endstream endobj 1658 0 obj<> endobj 1659 0 obj<> endobj 1660 0 obj<> endobj 1661 0 obj<> endobj 1662 0 obj<> endobj 1663 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1664 0 obj<>stream +]_cw` +&Xd+uCd4~tf5Yg̗5/Zr^6M7c{S&C_ ;o|olv[a!Ѭ<\?tTk~`$X3,IPecp5-l\ݛQh?]Z˻TH6hSG_I8umVb1:7#ȧԪ,GUv'޸h4PMZ)c;Ki:jbnq)%z0LQ] kݞSRD眣#Y\\Kd >9o)A^jLɼ IoAJmO[/ay6΀$!Z@w6Rv+?_0^{u*|t@.!GB0oɲn3_x31Z\IVk~{S Mҷpt"T?-CE/sVmB*#!S<&Ź=kW] + yC<1#!=wVY.3~ 4oJ^zY'R~x_s}/Pr5o GWC>t^d:])a1B8:[vs/ SBv]WGur)']Z;H0snqQ3r9p礰:VU4p9/{jh߾;*2;qɲfDoQt$ +^ś1*2:Hmn }o.SCpSL@뎯5|j4~2P9zm\Fn YWE0{f; \Xt zbʹA9 +vA~X&eӗ +endstream endobj 1665 0 obj<> endobj 1666 0 obj<> endobj 1667 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1668 0 obj<>stream +m Kx80pA2D^;6 +@.!? N\"U -G M(:" <ۋ52G/oSg2En/UN0[ +Nn ~v-K {ѕ3~*K}zI JOtkllqNOy7ԠrL" }Ȳ̭ Oþ4]ܹRc tx` LsF#RˀQ^a+&E$H$P+wd3jD%+Zv"4qLnkZ݊is*bgjKt`z$BSu<- NKU=`Ӗg۪ R/N IzH>P]=)z*Ѩ"dO;(nLAQfn +qa=3v W`鿗GZ!b~ ͐x +endstream endobj 1669 0 obj<> endobj 1670 0 obj<> endobj 1671 0 obj<> endobj 1672 0 obj<> endobj 1673 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1674 0 obj<>stream +4R`T)yXn$b:g煸r/ +\o< G59+H +)ZTw\OzqYW;\鞚@𱿲gS$#w6~'^TtZCOP0ae@= nddZ۟ /A2PP7C^*5 7K!oͭ\0{|S]%QKiw@ [OćLvQ8 A('ۈ{$&6ޕCRN!g +(ɶwd<-Zpi"Qs2DvK]Z' +EJ罽_#+%s8"bē΢hOUDGpQia_o?ρ.-wf 0@s ]'SWQBU# +y̖fH%Z$MWVP[!/pf4]n 8-E :c@6{NܡJ)1cgȁ_T@7 |Ztk;6TOx{VǑ; ^nj9GL\F*HP_c cO#k<ՒGW&~9 m6`ZxcKj2O̚;ia.A|++Z;*ϴ=Gc6y)IK/nGL$T,%'OFaSֆFg涫rً< Jں2鷎X#3]OBm;OH^nJ]Z`6R!L88x LNe[Ydϓ+jԇ(Uanz;ZՕTґdR30FυJQ6z){|"5%hg) +endstream endobj 1675 0 obj<> endobj 1676 0 obj<> endobj 1677 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1678 0 obj<>stream +xBώ$Q[@Ng7r,us%!S +@h! zX]x3̣+fGpDb=W( hp6] #^;dC@T^u#4?)GGdDӛ fWx(K97OƝ{7͢}x+C(齛4X[7+"W6, wJ/]3>-$DCVS}emb(9lu{ӽyiVRvܰo H$E޾ .$n!)sQ8'Jy]v +ᬀ\.ſJ*ˆi6SGaxRS(PLX$"K[7R&L[n+qn =1oGPlAj&QD*W(wb3Q! G] G"#+-} +񵘬zmI꫃nn0<:ě7Xo:~edQbhaLCy;zk-x^$N{Iv;m ^> endobj 1680 0 obj<> endobj 1681 0 obj<> endobj 1682 0 obj<> endobj 1683 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1684 0 obj<>stream +gV?{w^xv >Tw:I$eR,AVzi Ru,wOńe~u:+3O^+__6 "ֱ֨-]Lp|Jh g4r[  ۩Y 뜵~zLX.ki[iQqA;G'!td|;r+. +ƍ߲UX@ca@@E4P6@ 7J)HS\߉xuJu`E&c~YjFlAt#Hߍ3C6)ױuh5kܙNJLC)i9A<8]ԆJxi )~r ~Z1p m 8C_QpC)AhV*9fQ]z2llO?huǝ庞?%M2wnZ^؆wm" w켪o$f2PGSrԓ +љ/Hz.Qv|Z#)Ve?$đ#:djB & <-掌 +hyڔI@dܰo^Uľ,bBl 5?ќۨ=xT"-πz*g5uA/T3E)@6B> endobj 1686 0 obj<> endobj 1687 0 obj<> endobj 1688 0 obj<> endobj 1689 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1690 0 obj<>stream +` +((bW8zCg7𭽐b])bD}ehoR)2pPP_Tx`vQI\$O3I1%1ܴIeHرKVuEZY-d%AX}Owq?7!ZL\#5#]/r2<ً0߫&kpiRjA.J|.MThcAݘU²֦*3fn#RsE2ڳ $(8.oM8w[3_B2f!GhCon*CcǶf#GL5ݮ`Irm-9uwCGC ˗p#spC>EE&EmX )3iU0kDDt_W]0oUpCΌq4m@@f*EDzu(0!_lmt$ޛE($ nGrHST(izG,o@Q׸dݟE1::(k;L@0JQUZT]s k nv󂬤*_I$S8kM:|OK~Y/EHIz +)A~|ɎiΉHwGEeB/_T?62Z,j=Kxf\ 06rök _[%LvN[xr5hAB7pKK|M%/,݂d P?`9 n%NoO7xDR뱗I'Ӧ6R Ny.C+hptbˤ.K0Q> 걜åKuiNl}2Ĵ}BIo_nۅ*kNAtITtИKcy%R.&r<#V('ǝ& t> endobj 1692 0 obj<> endobj 1693 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1694 0 obj<>stream +xG.DKRHW}$@ܴKHu&VS8+dppԵgn0U/‹;Oc tR5.x 'G Jwp^⢋gp6] xM%\:,SIJu^T&$!%> [-*:4VѾcGHss)iCde}ҫqKVrT,QsӋm@ h" 绉 5'Ɯ@>č#, > / e?̷3Nv0#«$UeF!fJ(T4m1HPL570/d^q ؓA;}ʘS7F'xc Bg/~f _dJʄ.!Μh1h &͘ _b\Ww|..}NGElB\Ll".&I +%qg޿e<m!z<`; 'TGa|X½>(Z4{fi\ς綥G_[NWY? ad[e[ۑѪ^]p;6T,7Ƌ"zj?"~Hew#E7LQB0n_3VH,(kɕPbb}D3PU;~+о"L} $g.lxTe +endstream endobj 1695 0 obj<> endobj 1696 0 obj<> endobj 1697 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1698 0 obj<>stream +mѦ` rA߳0k^Aޅu/tZ04 :eȀ pSЂٵⵣhk5o5*;k/SgO%?0oPeًf ຺8%M ӚZ!b%a)crL$' {mKrA;:SJFڜ՟gjK1e8r:VY14tV(P4.҃*^2hR| .,D!1B*OM$yC/ @Ы|pك,L.gb+{d + d4"/{]׶Hw4\ 3sCWW~r,Y]eɠ)Z1L7k>VU5քE4X9bI*M䰒.5 + w~mW|O)l&,3% '96s% hS|MrV j*sE#d 9NֆxTؤ3,'OI@mH>(&),wP{kXWøT qв&}UݽoØ&mN*" +-n0ns_)iwL>3,"fj8b6-Azd +$^va>t`7I0J1ʳF,T֧>H:hcI/C"1,r +rvDt?Wywg(7/U3)bZV p41ڨ +BqQ? w/D$$@(DXјШՖt]iR@f@$Z(\AŲf~^L* ٷһ_8wHuuѬ*~@Ӕ+de8gj&zfTd;/}/oB`kv }ű8;5nw QdkbWXa\- +}򟗨O>x:=j5tZE"Q%ȗDNE~y0jƳWVp6}RjfNU'V7xT ݮ$Ο՜zy |J#rV,D +endstream endobj 1699 0 obj<> endobj 1700 0 obj<> endobj 1701 0 obj<> endobj 1702 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1703 0 obj<>stream +a6?A_RC>|[_mjMdwVDᣁ ԙ'8 /ХYx99XLѰ//|SH~y݂EVɏDP=./UIGigٳ"-emNѳKUNݯLœ&U7GW VBp]:RBٕLuPG#tO|k͐$(a.1.#Zh?BWdlK~>5]w%tp³a +;OEpk̕T, +{138D)/PcuםBT{iEF O Wz2̞!*E N +Z_#ks.)KBlꔬmU\l ȯ&hlgL]L]yuuM["Z_z]Kkj!Ne'TćӌGv!V9~u~mV+,\}k8e:~aͺGxazg-t؎OQ|r.e&²짩kp:`u&̓GF |tQU㽲|2oKGfÊ,y![U?,QnYСxg֮EX$\0tPA +endstream endobj 1704 0 obj<> endobj 1705 0 obj<> endobj 1706 0 obj<> endobj 1707 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1708 0 obj<>stream +_zO9U@V Ql#7o I*as[am]"lWGЈA[ܠ ~PdV֍"Pc<Byl e />14*&:Ie :qlEgZ\WA7Ry5l ^Msř\().I8Ë3!ybʏK$гE5~C]yWCtSEr?x?uۉ 7#ؿcVgs6B1v.cMT:c‰g(@-!e P:Nt,%iPcC"6O҂%TSrР +NC( ϙl:a:Xo: +a/gŸ!Jֺz[sdNF!u+&B?UZeA UȇSf]r\Rř!1\i4d!]F5ou?P .0i!jdmN 5lgw¦qXb"n5ciOlr⹹ +!MƻocpUƑkS_&-D/Ғ\\шx& V3 V!WgT oXm +O(t B0мuc.0ؔܩZ5Udb6]aeKM/(tj꣖61RBOpO(g׹E>bcl~Cu^AѮ;z.u]> X']Zdp`>$DA$(8l',;R6-Tq}Ջzt#/i{ܓ =nE'N"EjO"Yunz L^R!?A8ɑ} IFrw߽gmWv3HhK<uf;-r*rL R>`Eѳ&D IFTx2 F?;VՓWq#sq/ J 7ra1mVb_.#pfvJu|Ӎ"W.&w}W՟ʎ\ j{)v2S*PĤ c.b&AQhNjvc_F5kA> endobj 1710 0 obj<> endobj 1711 0 obj<> endobj 1712 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1713 0 obj<>stream + óM8ѨĿmnv0sI:!GzyvCf<µS9- ZZ@>䁭AJbl 1ʴV*L8OR9pmB쮆q.Ɔaw똕zp*H8tZm_ZH;;k7XG}f^@ u.!ī'eD稶W@ C_r-EPc"=Għ%$FC{59QU01{ayF>{A׮WLOWV 7qqL[. z%)a2v=p> ѷ@%I9?AA0$6D{Wr ôwtܸl>15(_D⇎-70bPLT2xt)Ug-RM~#KX(s֭&b>tسoٯW7;R %~ɀ=sgِZ*hzj}L}С[*ze[ ;kMD٘nR݅Qϝ7:m.`Mf\aLAUĺK_CP99'C`G{[q!έ(Ɣ@,$|G$SU~aP5s;dŎaCQE䗇5wy`.B(a4K{K7!W$c_] @ `Wܠah qnWafx4!SlmƛhGՁYo!sᦞbGLLS΍& DFSn&iQMք͛sj{*0R~iz +endstream endobj 1714 0 obj<> endobj 1715 0 obj<> endobj 1716 0 obj<> endobj 1717 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1718 0 obj<>stream +|z9+2Mij&}JP_<ȶ3QGմ7Z׸٪ֳ`wdRr 5i:ϣ_Wp_Bs||?҈(`HA!'# +40Զ'bZ~gy q_҈Yq@P;u4_#"4gBz6jv-(D]vWF? )G +M7_fy]>:'uدXbZIGm[ueX2یzgYUIj_-`7(E_q'A+L,88O }'|O:as5[B/~.BG~2؊h +0 IEeJjl3u*Nm5 կ6#O21Xѵc\SySw&A* osDb\_ăե2?e7 xcFPo1䮞a_?u1-g`H'Ǥ3,΍.qZ]Lu6Mv ͅ%ȼ!d]Ӿ"ݧ SZW`AOF_gvH"ȪQm05:֧B86g-}bGhu2o2I4HkտfV&,vō=|9̒HA i<t9= ,,1\ڛ$`Gx :サ\$hn` ˒q 3rTЉN%X5NQ!/ 5I"HρL亿!^$ڏ_hgb4 T9Xugb 4fP:=Oiuet; $`,l筸}TyǞd央A4'q> endobj 1720 0 obj<> endobj 1721 0 obj<> endobj 1722 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1723 0 obj<>stream +.ߟ`tb)z@8i)(]X gjX%c\RzǻAtNeNEY)/)[+AX@ MwG@x>xILݰH0?iQAu^Ԉua1݃nrsV[WГ/}z% -jiR8NW!nFt0nȰeiE#@´m"~Y"`O Uwhk\v'|B!*)3B!6޲̎uz/,V+XEw +CV]FUhQ+ܪbM~5IDgD߻h#Ic&h^ԙ DH2#q!R Yfx> +Z~_~XW24^;*.!TA :|`'@_6 4_{MsD>P1f>@Ϭ>݁3 )`EϣoF}臁,KHЪ4ȋ=PP3o7qW8|W9sx24ߩ)P-(?3WtaQYtFY(Kt܆Zh}Ea;G޲S 4V>^Z%3T9An`xa 6} +}/Vd8 /J7Ξc=?~G# qh3Ŕ ź +c(?dA+ +ǘޢb#;֚mZ30-bOl%T\%ŎT F]:{@ػ6;twuNw9w9˲EQZQȈp5 .T-.lN 3 gbᏬBI]خ|BHu=D`LՐ:$kXmL6:obe+" ,\c9vD"f=h]l .PyAflf4Z',lw},;--pQ爠6uƆ;uJ +endstream endobj 1724 0 obj<> endobj 1725 0 obj<> endobj 1726 0 obj<> endobj 1727 0 obj<> endobj 1728 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1729 0 obj<>stream +M| +o|2NX+0T$Ś >2 +HF ՙ Lc7ǔ@Ra8|;ïѦi"k:0sr޻X4=ۄB\oxMR]abg`65[I.@ynd }n̨Ѳ)ෳEfu-E#YKyNQw.-5k\uPi%8K삷L<% 3?k0}g!tt80ca(Y$E9QW?q}}9W=74ܞWUgw0T%|%4#TSIOS\\xt{e]n;=G!r7IɽY 7Y%gc=q$l^l0_;vf0&>)a5sP趻O39O3ы]`,䓈bG|]j ȴ<1k]pYQbSH_9BEAkYCj(u9-9WBd3eRnxtͥH=3$yĽ]D+~!ͥCY?pdжwH3o od8]U :>4> *Tκ)}Pl;eDխHqAo(K;tӿLa@K +IQwT3`|ZmLdǿ~FN& ;į!zY&:73^3- ťlo@6&FUa|@納IKV|AeQ2p)*9h*(%HQ3_˂>2=w=jK5z#U+ JAz< '0m.TnD > vv`JV1qFMaj |nrz, 0;`5xC"ue0%Jl"Z;8,FVsmFW驹0ލ}Z-a+zfw~^;)Ut2Ag1n;qy<ֹyw&ﳮ0}%vh\Fs!= +8Y[,iU\Bjn@{{/G?`*ز1MY]1( EY +l$A2H CggĢSpjoM6 +endstream endobj 1730 0 obj<> endobj 1731 0 obj<> endobj 1732 0 obj<> endobj 1733 0 obj<> endobj 1734 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1735 0 obj<>stream +cX/;mVi^LO̗~8eBd:c;)VPGP!E WB(76 !iњ_!w8$X5qT/c5XCZntBd/clm̀)e[UYILM6nF${R_wK;јRmƠb:յXoW %;>E9+ߔ{m*t޹n "u 1d6;T,[Q[r;׌8A~AsJ]2W ىȣ@ۦ05ySWJ"?(wg>k`YMˏcNiҬ/Hk@&"&dR'晢[eږ#ZmnzSI$p%".W\p~\y`٥wI8q5賫.Sf5>(7& Qh *6 S-cH<[XsT:\:<Do:!1G9EBc=^{Df*EM哼?π2vSh,h6 UNƄ O#Kx-wln \;JEO0@{CJ D[ տUF⻶$u 4UeHs膹,bW3sTКkUm16%Ѿ:^/vvmGdh_:9(E3K;"Z +g.X/~[5a F!$.UBB|wPiڢJCkS4-DiPND<1#-<!bL#9 ,_̡!tbIcEFW RۀOp͗{~:ScЃd$~>^D9l#˂*3NK/<Xdl9yC^PA<(tڀY$el_FAl1=~!| +P;ݶ3m*TVOIMIޣL٩W;l< H5SٮoRR'vDձ)=j]H?hvxb'<Pb-20 +PQ2=>͍y]9YTg"¥0 K&ϨөXXS~;vEmZEr;І_3%F3%ONCQ=#O qQ<\R9V }¤iT d{GⲪo<$ L b}F>}U?r11ȵǺifx=D"O4Yx˙d=SV.ڋ`΅(r +VjT+l/TyPBHDȎ{[=N.̯ؑMZUnkN J_n(^6t|F`X +nȘ"Z++(V_Wn +m@i- ,E'/|gA> endobj 1737 0 obj<> endobj 1738 0 obj<> endobj 1739 0 obj<> endobj 1740 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1741 0 obj<>stream +:g:$05fH{Bc^ADe0hXMa LPk[8 \{_Poٛ&!Z_x2il`G(wu_ē*z:_֢xug2TR4u!NN/*ؗޠ,i~H0UM.Ix9$y =a^Y +q%t A%/kmh_r[ISw$ gRL''^[aW0ԹHGRp(%1-\B ~RBڎw6"$)$yu4YiwqG"dl3"PvvYvi &~o([X,l +k҈&7CQDEZf ZwkQbSJPHF(. ]듎 R訴J5)\LG'IA9'ai~Ie! ٍ"$s2dBac:aB ͏[9`USOzLRL+vOEa46H{ՠG2[RO/1,)sW J1L=>MJ {$O> dHn[t~?bygk7,ӐXLpD]{KMPi/A󜠑a#7; LDtTPE蚁:vK;_MdbsBFS26UGFV|]D.2 k&S1⽏lѱb_p3)yF"GgfS2e؞,mt D_2JUށ5 } /kOZ5r + +σ-,NMv0uO}UGЅ<7%̻hә٪)vvΣ \Ƴ[4)~eN.R.fT c27{C +!~34^ȶTޏ"$ 2"sѷEw +-2r/;2Z.sc֟`e/WAm8 sA6oo#D2ITy7 rf{<)Lr*'+U"7?2}L +endstream endobj 1742 0 obj<> endobj 1743 0 obj<> endobj 1744 0 obj<> endobj 1745 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1746 0 obj<>stream +R12ozm>N%ņ +fsn,t7fQoMוSle Ma5QRE;&i/̣1_ӵ8@sQDFc.ւȋcA+}cg8AYIiTbp >?)ȥpgOLs*0 +Lob~^qUԽnk]%q}qH)đҙ^?q/R]?[;pX6(ikeZb:ƆMƫTT32g"2۵9c1' @kshWvjj #Yvz<$)i#UD]#۟7t~%b{;l屜'5>O3-bOU1 +,6!wnip^ZP'uBwvqC93QSIP8oPvT. }Yf 3d_گY+W~=C$5摛Vnl}Oc=Y툊NET_{۫~ܾX~g Yj&v&g2XZn0GlSkq] zE^pF|2(jM;sliG?sUbNPeUn[ &5"Q^A5I96;A`.f/. p$ r%٭!j}H0!`q#NǃWJܥNYŠp"h$hoE|yIȚk*hN-1-3qǾ ?E~&Q̖m݄({x!]#_IԿxF/М Ȥq>Xo24󭤺3p)ܤ3܋gVVgDCQbL4NSEPb~u%8x9ku/XUzFoѹ!(>j燷O "O*Fi UHurxHO:Mh{e/Ta%`A&G? +E ۻqt촿ltJ=Ŵldt-a M秡poFl֔P`f5cv^Z+ @w>OI*RyTjs6['>flNWXG1ހUֈfKN~w^ApyA`5`| A Ht4,{?bl1LQEX:ބ^icwmx4\")z> endobj 1748 0 obj<> endobj 1749 0 obj<> endobj 1750 0 obj<> endobj 1751 0 obj<> endobj 1752 0 obj<> endobj 1753 0 obj<> endobj 1754 0 obj<> endobj 1755 0 obj<> endobj 1756 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1757 0 obj<>stream +B8Dx.Ib9`?G_@ҦBmn k|!~cy!M_V[$|EΪ4 VTbAq +e%"٢e&; a0; jý*d-j,laj +M?> ;N2djh98L聚GB@z],|UW; Tܕk4.No2-j18Wu0d[cHFZ$5/D oyU{O 1~!o$A._m;6Y~/`^ j;1.7>B.kX(" ~CLG~KH-=N̸VЯk>/6v&voW~+5?(RP \5>$.h##K\P7)mfM'Oת̔e( '=GE(鞃ºM&J㯰H*)W ҌfUޒ:M O-G$ )qHh~3\s;T%0L+\bU]>ՎS^ɬϿ_Ma70KF{H{a6ߚmuSEK, UF㗶W%rwbe)^W0ȣJ) O({ņV/ +6fiJl{%9;{!,ZEI 4qʬMTHv*m`Vi+E 6>YZFsz~ BUeC 1(lUdzD}79iR{Wz= t<ϊ?۽)|RyIQ>ĩ+ +j5fN:bYĂIƫ _vT79vgq&Ńy{SftE*T&|jHgVEOJS92&2Dkap`_Li_9QpHzǢn|֕VNWM_כ^톼;C/ЏCzHƨ%> endobj 1759 0 obj<> endobj 1760 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1761 0 obj<>stream +nD87$3a!XHDĆAA7m<ϊk1[D0D_'6^Ҙq8N_St*ZG>p + +0'f<7f:*^'W@!ukR+jN; %khҜ)هW:}U35S$ ˤ ҍ1M>wZ IKӇ}/\69[O*ggf'xfe>hWM,eW.Pgb{[?^·k@âZ2>K3=6Q*-kjyn)n@.hs ,*@c_!d<4rLMfpbvH7AJ,5`(JQ^o"jVZ!'id㍾~=#,X+j踀/kM7UG (Pv:.j}?>Ͷ=H?fPl7dZ*_)뛋Q5~mk2;@а\4M QSͬ><p`B*N6$qpr]D~W n}!f#c1U[qm_yfT/H(r5.P<oUճ|Y"8bhlK>lN%p<lwɔVXZQv4 [6UD(S IC⣺e .]ŇBh9M2k]'p}nGS.SYu,~C=`- ?g@y7u2{Xi`MbX.w{N_:9tr( Aud|~^CxkXdyZ&tG=Jז&@#$8;9S:u Xaݸme7qc$<Fp'3 5b0-5 [˦SXWD[s/"]ȱ9|n'鱆nF iSe*/+qrp``]>E&;֥;"^-UF +endstream endobj 1762 0 obj<> endobj 1763 0 obj<> endobj 1764 0 obj<> endobj 1765 0 obj<> endobj 1766 0 obj<> endobj 1767 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1768 0 obj<>stream +}& .YG(m{|gℽ 9o#c\rDu%cŶKT\?́?Y62@I l(9R.Kb/y&LOxR_@UI;箽mJT_G{Y"p>B +#jǝɎ5 TDƼp܉)X,oGdppW.)-/cJt>E.ʶNzs:$s3FN@'ha;@Bwr۫q-SmUȰq V7Ν16뽮~_WE ?zLתM+؁>x|8%7\'"5/wMv6. 1q ++vSYB;y?7a$ bDIM',YC+BN"J}Μ#rn܈2ǴʴxB\`fk{|{* Ƭsd%iYνA2?r OE斬>!!PM %zIHC{2 p/-vRfoeuPλil%zF1PߎZ%OH>ؐ.I5G9M?67p%WBR,c^ޭX&Iwp+#ۘk&vJEyQ髶:,[2ثwRGps}ԅAWx!y8z3ͮ&C+v@5U?r~A. % _ͬ :n%ŨecS5E^)xhpb7 kq(m"?smdހ{Z*iDj#KYfXLm +h k-XY(45G(ގfW`Vp7H&V|v)f""C:kE1EI;_4kYB1MBedC|MEB7KU*#go2r4-o{Ui(;訶2u +$RȐ؎?(pל7P?d3V>m Yĵ QkKҏ\ +pVHNx= +Ե1,&+/XG!k~O9\#zYHz8J+y.<{O|VPiUhy:[cM[  s.#>Z&/@{@CiAW_+H u[ڦ lbVJ\7 Q>ٶ +endstream endobj 1769 0 obj<> endobj 1770 0 obj<> endobj 1771 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1772 0 obj<>stream +(S=&*{% 6wE[VT"Ѥ0\warתt4Ab<`i-Iuf9bG-@ݤ60Qf@<Pi{h `+;W$:;Zp?gd6+k@kѴs:x 5"okb5W-ճW`>[[Ӹ}$^pmPFq3ק?G u n]XRH͇P,iQب><m&Pq>N}c0]_(?RzzYߍ>N%Gdv֣rGg"ng@Z8I7 :;#UKϺWHLS5铗xDL3?2H!|6OU-`.XMDd[Nh3+jlr4)5[YUy:ApPFRdaa_2nPVwD"ٸ}~);hF8*;ygZ ߉KX62*@LÏތ|[KHQtiH`3>ڒ9/jʮ/9DAߪW)q=B=d|Y^.[|6Nz-AIm +Cy[NV>,S*Y_[<WVrXLUz +kTb2p@<}Y?p4rlo@w9EJH/if;HGhR־|]An8\t'2FCs#t5e-j߆Xw[;7:MyzY6Z^P2ܩB\Og 6ѿۜ!Uڏ&ӄNuߖE43}O`ﯽW޽Uʢ^HPz[^=k~ÌŊ&EX5 +endstream endobj 1773 0 obj<> endobj 1774 0 obj<> endobj 1775 0 obj<> endobj 1776 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1777 0 obj<>stream +=59^!Y+G8#S>8,"aLArp$ WW: (#QӪygY"Eȷ4ˉ}Y\GbѱynL%qZ U`<X'pJx`13-"C_Ki ]h|LG-=fOڇ$ DŽrB#XC"QDz,1CUCzԒΝ7WYnR*{>:Of>.a,{"3h% =/m&ނ予Rci`"ll;*3?ʠe|&QTnp00*ҩSB46kf{6gj,> PX*L"od.Uwf23h*jh^{ϯ]0 q +LQ7];F"nkXUb 'r' +endstream endobj 1778 0 obj<> endobj 1779 0 obj<> endobj 1780 0 obj<> endobj 1781 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1782 0 obj<>stream +0 ,BmzSoMy*epVD+طQ~ٷ5Օנ˿|jAGco}AUj%ZQӯJR*VɃ08H gn$ tsReYŐǙYYwӐR9Pe + p&CcAj2酵uUfAH(7tQa4Iغ{Є(ie5YϚ] ԲC]v +2WWz*n6vT`;=sugĎ#w†AA2s.lx0Ԟ45b}Z rmE̚mOh-V{6O߽x'Q +$g?x.Ei*Q#ep_Ӵ@7?GĆM++}ѶMJr ʀ{ǫؚ3 ?8zl'4.ڨw +x#w"lLr;3$f/퇜&h|5"ٓzi^'3>e2N0^eyVDD*بZcHx}Ns-] X<ЕIcayz7ZA~i|Ȁ; 1ƘH`av#=$ѕq颖\|"zAjEQcMdLM< +[f +]RGALy?( x=%lzRX:-'慖CYZ8'D:FKnQϪ:K*t +v6dݒt.FQkUlc:&S6d$I (?pR4RZK1L4͟8zi!S7 : +  +X`[P> endobj 1784 0 obj<> endobj 1785 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1786 0 obj<>stream +8FDZ):ȝxqew\aⳒ1%.5 d rB $f=i, 0H.z㏨DTR'he7*1ƙM-JZVG zv 3+qjԡYIy]e4qo6|\(]:)VX֗ljAT  ŋl8J?ҎFide)+ @kzM + WɖQ]yY&bgWQ f :3KAJ7ќ+n ~ YC`n. < +G.<> endobj 1788 0 obj<> endobj 1789 0 obj<> endobj 1790 0 obj<> endobj 1791 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1792 0 obj<>stream +!P̭5ϞpuU#s)%?I]J=t{fˇ6ZNh))VFNM@*5{ #쾗y+U3m'lӏQUHlaԜR'd5QyVk:k΢`9af^+~CEu[d玻Йj[9xlS]~ +cUbTl[ΧDM*U=`PcBkzEH%'S8uV~R$ht"Vv +WU@-ִkP1y =8f 4~T`p] E,Og8{^Z tvkO) +%ǯQ/Bo@I~UPS]D%!49{/e~ Ew'(] =9f`]fW\ `L >@|gv͎{#Q[;%5W!Cz@/\{%P +{Qqcbwg,bW6‚Nq\XxO{鏉 `aeBJD'CQ95I}YlgR:j]AF3Z`*U%x< +(%)E}^z4h’!2p~FtA#gƛd;D"L^G iiSG9n偣z=#X vE/YQ-X?ԆRRi+fr)TQ/J'p¥c.D:Ĺ+SjAˉ=N1L; a''w53lcWootΒo.cK,&%%~ a"m)kXYz{F +´,qpW$BD{XX~ ]5͚C@wVkId)3"QNoO/4PulI?KH,o#+c-p{7.VYB9v~WuHOuIF7K^롡2-U%+p̳k ؎TV* )p1R6uhZp?|Dp +endstream endobj 1793 0 obj<> endobj 1794 0 obj<> endobj 1795 0 obj<> endobj 1796 0 obj<> endobj 1797 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1798 0 obj<>stream +DvU (2[wGgƻp)Jp`,#+vuXҢY+w'~XB_Zz-o[Ě]IR>QYY,=|ZmU5+P%\ +HIhI;>tɄѲ쮟`cӲMт֕J8 ycvݜBv珛8-"a0*+__չjǥCMyrdo8)NB-o<)j^1[i@νk@ +G1ΏB&>B"FjGiyb| %-/n_{Χbz a/\ *:2Ѧr Y\MFÈ?5uZXts  kf))X강uV9S_i,y]@($ɷ&!P%e:LmmrA)UL3O , Ihi`0lu(}`‘El%3QՍ/ULF*Ơl9v0"cSǷ$zdKwmTv}q j6]7 Ӡd"]t'v("o.I^@>&$/VvO ]vBp3BKOQȀ-VaDŽa v3M$@?1?  u(v*?>_^o#%&Fj޾ eJ*C]j뻻G4I& c7nktB0νB "=@`?)D-dS8]{5SX']'_Ub`#lBޞ+sOh+!X*S&2~O;2m݃ < * HPb(cbq12c<8 9 r@Uq|1N|ե-?[wF2Gj@P7Nvnu}WCo*J-#AS~4^45|k3ɣO3I*q?b 5)43* _Vε&C::LF1z%I։|l=_MW.\#qȕIUգazp@Әݛ'|G<ؠ%Ik^oo̙|Xb>#j|kYt5 +es/;`@T73t +}TEaȷdv3j~+n>i09#_ԕk(>& +endstream endobj 1799 0 obj<> endobj 1800 0 obj<> endobj 1801 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1802 0 obj<>stream +@1>ZѩDNЕwON z$9A"^9MުHb95İ.:=7\.qv:GH'4~a[H/?TeL5rjHøH<+\~Et]$A2 ]L?b(o:pQ~_e{4»NTK˥>#YQD i5̣14Rx)L9骕dc& 0sڳueI:{Y/fh0ݾRDf6Cw@肝b5?;Y+D~8?P^|e[#a1RM/;uܸ-m'_m]=T}yKNbDr ej>1iq NXdQmY|Uj`xeEs[<4VSxE/f+~:׼G#>- k'[A1:n[sr +2!W68Rbʆgv\`@QQD: h`%`$S꧿qjg#ZIcAaTK<^tj\ݜb3eT+CfH(Gwˠ^F`]ni>j[_N(}O;F; c G*<@ܡ:h& ǯ3L,aa U/ L1#p5V?E7}^A9lуpu7呆fѺ 5(KKeCux_dA9m!BO=fL:skC.U].Q٣5ucqF[hd;tTX|[g!dXD&A+znl݋.TPb0m׍bg5\P!@YxM*AF~ݬ2P.]B\$3UmNZJ0? w+g$ESRnY +endstream endobj 1803 0 obj<> endobj 1804 0 obj<> endobj 1805 0 obj<> endobj 1806 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1807 0 obj<>stream +?dTz-'r,چIrFr1K$_df6,vwQi {mջ#tP 7~ T%Mcj%a-kľCN-Sm P`1㗎Lf+g-qiF)<OH-.bux)2A]+XqCS*ƼVnBE{`*[?:tXk<ꯗo$P>w1Ɲ\;4)KK +t8uz%^ʜsEn_q3Z LcΑP3xY qru=,\FwMZ}W_t¢]}餮Ɗx[2`)#$Z]J0=wC +, bJA-="R?5vt Y֘XErRIi + 6/LomaڥO|fN=0CK}ϐ&η? )XT),SSk3<g!a ç=dj +/-,>#]e\gag}I=V#3lWX9=5qCOC\" :On=m43?h'BhUY ƭ69lhWK1T#mVV^~Â@ Vsev"§pM)̤^un8noȑ#ڄT5 \"@WP"% i7QMgxpsb>0T0Qȑ<_lEUDjz4N.}M=Ɩdq6+ELwe)4#nB0`U{(i(w +endstream endobj 1808 0 obj<> endobj 1809 0 obj<> endobj 1810 0 obj<> endobj 1811 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1812 0 obj<>stream +6B! +t_J^>-CXT? Wp9VcB3qQ3: 9=↖\Dw]S y[0s7Paxr| tV(}:K g䬟~_:*QoSܘg-#360K DP)`~m!.]o'^{֐-j,$AѢk^7|Wij;Ʃ" nR-yfަ1߷kjY +j. G +B;w5;½7#*;fș)ri')vEuu<ۧ5\fZ4pSpGxo]ږlZJ +TB2\[P ?j\IBi6Ȍ_ń3cAkXlj[v: ӛAfedVhmo/ _?Dr>4U9Yq:w jiB?ҐOWjJ;shվY3ϩ0"C[ .B(ge fyC.} 0UfN̮DyP:'>A,TM^_u"^*6URd)8F;.y0 +uPN; E&I$fS~LP08 #’(fvn>Vrr +endstream endobj 1813 0 obj<> endobj 1814 0 obj<> endobj 1815 0 obj<> endobj 1816 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1817 0 obj<>stream +)@F`t&+-%MQ5$ҫwNPgH<?c|L +۬+/3as,A87` v~>K]IP@I$$#0RNWU"G9uX._5T'9 *b(Ӱ=z5ngTznp1 mCI3B_\/P믏G`v޻JDF,7L'v@Xpe0Ʉ){TҪ7J2’Vz)'[.$ nEJ8rdR ׾xЪ4Layܥh󬗢np|!2 -TS%'MҋVA.XϬ h{)Ub9h#XỺ@|at}N/,WؽmShL%H!&YGÐݸR9N./ I: 8H"pj;Va07C}wתν;&zo2{{BVnW !>˷cg\ǗȔ&\6&a9%_dC7D"/(A x&~jmpOIir8x=d4տU%9r^3gcPbeDoʔ2%nBvq54 gRf|A<ٍ84ܧf1dӶkuԈ/VѮFëKBS`nijpz<9_掉_8pqy֞dhvp9rICso˵_n +7:wRrȪmqyQՄJG٦vL.Hr[pZC+54vbQ_#N\}HLJ~/lk"2~;,upvjcz$,xs,UZ'J̨KOX/Dv攳b}T51Vq`!2RYe/N4^3M %{C+@_XL(L~OtX$+qoAe|2SJzTTA6Zeer,LB*ޢHԆ0ؚ^:#xƜε6I :5_xQUr +׍[ ;rX3Q*UZ#8F(% <5>& +endstream endobj 1818 0 obj<> endobj 1819 0 obj<> endobj 1820 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1821 0 obj<>stream +AW+5rޖ8)U "q';4Hy 9 Q}#=PN9|7s<.<= 2Z<$> endobj 1823 0 obj<> endobj 1824 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1825 0 obj<>stream +>a(9'ѧ϶!6$Mr5g.SGЀjp[[G7^BHnbs#^zܶ:bD4&Fׁp;}g~T;pRBQz]{Р{,dƥ/ss!2faֹknUv]_1] +ņ֛$j{LA `:+6B:4 7nb^yJqQq걾В'Xh5&±=". ǮY*3(w{ɥI]_hyn VUGE6":m1I +T*>N 0R %+.@OAxq~X`>)-.Up,h +]4Pl]F ?SR[g&\UӃ{yOhҧ2le2/,ߊNa;9*i˼6XGt>t7{7 +e~Wʮv1("8v+r{n?Z0%LJ4dIhXn=iXo.8( Ԓ +9'-G]Bz} %!8乲1`w <2X8rT=$CD㎹#Ojcxh?#Q8~ΰM?E$5O <;r8Dx;+;89Ǻ޳ >kYm/ v+r;+ .^ܨl6eH+Ikq5&s0[`VŨl=_|2CcYBĄ)KT? rES=Wf촡Q&(e Z1 FM(h+uaZ=wf*RG+`h W[>%`١ 7}xfSR.;ien󉤴~9BYr9fF1Ni`3gM6){Ce~W ٕ! +pTú1JHWrq=RMXOe{C!࣒8[#خY&IT.jQgbf#Fs6F}lC:PIoД:pA +endstream endobj 1826 0 obj<> endobj 1827 0 obj<> endobj 1828 0 obj<> endobj 1829 0 obj<> endobj 1830 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1831 0 obj<>stream +,(?ZqRW+nk /_1MtЈmÜt]ivk$9]_클t )iVRb?i-:N;`k?!xW= I, j}.ZıZxCJUiZR' +\e)X' +ElEcD>Zڊ))sxލ( )nŬK؎dOh@jʺpT{ !٨NZCWT$&[aUi^!߅ ; DOYFQўñ(LW|{OQ_Cg4q a%mf}tLYycȾAƚ'aɺ{{Mj|?Kđ;mE:P*(!e(983&DwD + [?GfJڕh]w;;C0pcpy8fЗF_©Cj/(gT.\4mN4[]X1Sm+9ر u,Fq*p>c>Oˆ,}Jah3]W +TءI +#E'ܸF#jjB1-j$"\R1l%/Rja%u6Hy `37b=wVH,da< 0kH-*_GdUa9+>RX!o(: W6l=`-+`&y2sf4OqS$G-+`W4i *4;ټ1 {**aD<!Fr:}ޯw-06 +`ekuBGJpz%֡gg{V5^1@cKh0%X  +lZ9:[Tl 9v|s?^NK @%94Q9gCT%m?zOȪgd(bL,4F3W.KY5= +endstream endobj 1832 0 obj<> endobj 1833 0 obj<> endobj 1834 0 obj<> endobj 1835 0 obj<> endobj 1836 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1837 0 obj<>stream +q!_vb!Ot5*W ]OՔE(v(kQ^oc:B\ 5 7> $$=a7p/ _]@AR)"|1.9>ܱ>2{% +WˑL#iU.tD@L9We3 +UWO´O @4`Ƃ= Ղ 2BEg=qhd޹/%qi-𮩢2Op0B?1 !`=zaFozv¤M*o&JdM_)X; pXnr8FtXUQoR gdɉ&<LՊlY|,e ~{`)Lc2'</dBy16k*=\),Z4;.C]hi/ @uKtvU=F=^trc 05-g`DQ"ݚ: &BrQ3/G=3UkՌ#z 썃g,dna$c(tm^*IWD#d0 -,짣>cx-T;jy +x~>Iz z<./ȏ/jn '5!PynM] ؄9@/w78\"Uj]aĶHAg/&ĵHlR<_͔mj"Hfw| USqaXJF_#UBPm{ 4 mCӖiS?9Rt3Ui'] .!351 B+r,Kdv)xMӟ@w&l,{K7̺ Yvdާ\J')qǔ/nIZFVa{6K*,\^Ie> +ޕ bol[)ځ#+В#]R3D7q{Ui~~1`e9C0t2#*3کw+.îQ>QH PMqC謻ȸv Ω;pF@,@HS +D}gZ !5^%Ԙ!Y_մ8w0Nt|5Wi9ү\3[i|{q6AaQKfLE^2)ժ]rJw)Hq +au&rQ6j6%-qŋj'85l[+F4q-8 V^3qerK5vvY?Aä7GѢZ9=y&@+bM^$92ln: =]j&H]qfX+nNG 6ryWmnK}˞ia+BFI/roCerٺƻjVDւJwl&S/!T~s~ +endstream endobj 1838 0 obj<> endobj 1839 0 obj<> endobj 1840 0 obj<> endobj 1841 0 obj<> endobj 1842 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1843 0 obj<>stream +[R\LBiOnI72'$/Bf3v0)CR]6ghlk1$ތjAl|lle>P#[ګ\2}f?C8+0q +lQTG\_W^rIZǘMgwv!bb2yIX?fX&*)ջHsq#%_拳hQ{48Gͪy!T2 R pQֹ )%jַٞ7LnhWLsvKJ,7ʓr)+44DQ4ED/j'R0 ;"`Nm/- 'ÊSd 9ll|R ^D]q'oرR48ڍrz/1TH̝5Zƨޠ!}vɐ}|ڴ1B]J:O;-`(5-nǾ _Ck,/n}Rb63k\9l'3oFp|h}g˭`pC֋LNMK]O2L<;T?Ϩ'[YFlj{1Vo[p|< -ĪOrHG/',~PI_,M~'3V3zv43itR6{| V IW.d,_5Lky_* %٦Rǐ_}(d;|:0`N +cuKY]L &oե4rch>M;NuUE䦼wuaєAum^06BjfKlśj'êB*[niW>mܪ< - ۮ.-m9q7]T1Z` B"FyN1n-`G&ytc݇UOhW%ph=7 wGMk[mMʨ#ᅡ?g'K' +1tL]Ym8Ì ++zJ+^A'49K\> endobj 1845 0 obj<> endobj 1846 0 obj<> endobj 1847 0 obj<> endobj 1848 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1849 0 obj<>stream +QU 'cf 4xډ7 6?*fI* !A2#2vd _H s,4ҔEu _Ilƾy$GyFW|*i jnP `kdJ'i6_,fV4pJp p"~yAԜ:_ _S ٝ4,nCiK+*(]_IoIy?)ݿQR@.'?i2'*6=PtJWk>sCH +$ޮ{\˽T *G]6%0cZ,NrJHЊsi|.*C*oxq^&fI3f[rÏN. vCzzJřa{͗2R\cf6 OHײW|bf_09DWyMRBD]+z.($DG?IE%{ 0Ύ"裹_+J}$ 5 + o#vxʧfO*z2PPFUd2 +yYOׂzc|e7 sVim;l8=¨Yzs'.o৛ E让LܝF,f<ݭdn +̀aiItk"2Y0A1m'ɋYx^g+ JXa7efȊ(GҎ|` +Isɕ%:d10o5^(FDf#C]ʟ4dN DZaQ7q!R(1O8C{ YOs[8A,=@l}\ &7|Nz2j^ #.Mx \x^f{_47[+IX3x&t{j:aohI sLkmfyt޷e|Km]_@ z&\9-Tq[*Q $]i:a_ _7AW3)|wI~=WQ6Yl{my pcYRS{=A<\WTU-#1H|&IMGd->E=)P [Q}LCy6|&s ͳ8gOp1p5KO)3WtpWFI]B +endstream endobj 1850 0 obj<> endobj 1851 0 obj<> endobj 1852 0 obj<> endobj 1853 0 obj<> endobj 1854 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1855 0 obj<>stream +M&1)E dVR̝ jOFGWCvQa 5ȇ2j9@5gW +w3#XCb<"ĕQG;u޷jfrX=:@Fr/}-K +KaPͿaQ'Re{rUX>r[BDcp![zHAm*g;6/t\P84܋C:Nu:6O`7+0DEgؕ[C~>%yhv ܀ +Qwa# c=K{U*euG޴k ]vg=7ž&8LWǺ""V,ǴNʪ3;ZPx峀z/;aLݪ<- 43iZL6d.9P +OlbpOѓa`E}jyX!_]Ι&R+Z\A +:dKh>(45Ԃ*zt;WR l{#Z򬝕d|=V(!㨋1m3XU&TO EÙ`[O 7C9ȚybIH\? p:NDƁW4>(C*YūzA6'v b Iso3gJpNy-m+>2/Q&o& HdXV7E:K|]Y^'q3ʺ8pC$ 1 o/V)wϠt?=& NEu K}v94ʭy#;kgk T].-bGʬ%V Lf0b"YpRQ!zoE䭤8kҺ6Au~ Sy#bl&޾DSpJ"I)ITLQgٷj0t49P'gB + *nxJő N34n9FDs`"4EbM\L% &̀y)H}. +i7@džjbTCM +endstream endobj 1856 0 obj<> endobj 1857 0 obj<> endobj 1858 0 obj<> endobj 1859 0 obj<> endobj 1860 0 obj<> endobj 1861 0 obj<> endobj 1862 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1863 0 obj<>stream +&-y/aU=W\|qzRsS:#ʏyoY x&8}#t͋WBm Ķ)F<Ϗ@jp3[1avyM ;_xb+Vkivɀ T-#XHQ0U&8Ymes/VZk߸t/,vN. +v:o: (WWG_I_ j :W 폋)ߒߋAXYx~&O'+s-DpϺ>yr!Ѭ >dx/iڿGIdwl).o +eznj]e~=?S($|x L#5Mr!ޅ-2횧HB=_ݕR)muiPH +o^`Ʊqd EOj50rh:xxI@ëH.s#j06dD9_IV"Hk#%xA־'Ck RΡD=Zu:RKt=#F&U?!fD3Y\TmgQ ١U']6,2Z\ ?^ǿ)iF`ovO + e&+ݡN,)Ba#՞XDvi7.$@2Y'%aWͼs =VrZ?\*Ug2kH_y$6 +>#D3M~E%j 9 |Bw 1<=b \a\? Qb|EFdpCm^",*SM66^m{#(D<.cSN—Pퟵ7B\xb[-v &mnZ +l8 vCߑ5iy[bc^'Ӧ-7|nv ʥDx8,͇ϥ+tϿz1HWht ++xZ)֊skCͣtIx%<J`בg3*~|6*6F";M_e&]Utڛ.yp`,qeF]I/Νi4X QIdIP{7 fK~DrJ b{ +endstream endobj 1864 0 obj<> endobj 1865 0 obj<> endobj 1866 0 obj<> endobj 1867 0 obj<> endobj 1868 0 obj<> endobj 1869 0 obj<> endobj 1870 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1871 0 obj<>stream +; `n\-S͍댬雔E-=r~EέkRSmX*/#VpLH ( G}{qܿ >ga06'@N`p&{AgE x#:\C!dfa@ihu%Li 1T֍iK"I>@3￰] ةPONY^mzJSpN̏-Zd+#H>\VMF9S&?FqXpy'ϢŇj`/#5Z6bj0.k>5 +&>h*{݈u8 ݍYsl~&A$g/B50 m,*N<"ʊO2y6X-Wڱ94=@ t\Z;RY5|pm14d4>ƪO+m2zkPLi[Lw-I+u32ٺ`^|n8!>^f+y@p|ҡf)o2LFt967bHfgu48sVb֝v"wK-Q8*v]J2؂ݔٺ/}7sԳn݈W'oJlZAT&Ыa8׌x^¹!Ca:d.1-!ؼ_ O1rxj gF6~ >A@QPH|;YL&mlrS#`H@;E@Um Fn7ŇGB)ݝbװ/N?s}x}rkQn[cfݼidjq91qMxΖ#߷ݩ;qh EƷ4XyGXY +endstream endobj 1872 0 obj<> endobj 1873 0 obj<> endobj 1874 0 obj<> endobj 1875 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1876 0 obj<>stream +si.6i^2joE1Xϋߞl'ݢ֬ !a8M^my4w; ytې@DZmOIo#SCtye3I +9] +_o22 |ے8f'291զF-^$\i`xd>פxF?6 HȜ?oGm.n\mh5zKeP\mI1.L]iƼ| kC;<ԮpI/N$7h'Ŝxt ޼X$?^{Nf'Hf%sfK,Sy$c< 0DƋzc>Cu>A>8P*rw͞p7;]^?%7W>Y-/O(b}$Y3ʸkO8Fk{*bujS6)õb'k૱Bev"9 +=J?+ZJh>ʳ~_-&{EKs֮TV72~Яcj>\4­#2j>ڇX™2eY.It_0hV Wc΅[:.T{e>^ך+&j. m=10P ~TLl;]b*̮GQ`X<}"1S7d57;,lIepqn]:'`L}]J +x +-ݲbѯ"IuPX\n_ R (6VzR~Bӄۮ\]_z Bm1̡GV* +! 6ۯV")pP E]ش?+#~fn]a-R +N*.B6Ӎs hq`K֣IҤUYGggb4n?-Q0{`QO'ʂm_!;m j((oWO']Xj:k$ˋA1y<$Zm֡SCFKG(?KMeKI^uZ i +endstream endobj 1877 0 obj<> endobj 1878 0 obj<> endobj 1879 0 obj<> endobj 1880 0 obj<> endobj 1881 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1882 0 obj<>stream +"Yob3=V(IFmW㍈O<1-AH^J5 \:yBmFB=h2:j;#ی;E.tp# LE&~E?$Q Z/ c<DZ0Y#*RH z Ay/=vy"$Xv,k+jptfM<$ <(C"S.fva8EU/s@>hy? ++r(+> +݃,pFd{ߧ.r:$abv\0~Tp' (Ѝ:I tZ*f˫OV>nvֿaJ. +fR3#}df̿Ah+wnvϞw@ꐬEn"@3Sa3zWok͒xL&R|BQᤡؚa+Wκv}SdtT"1| :*jZpqiFLm"iGar<8D^N ¸p"2柔?l'ܮ#%Sy,~]pVť֯x$S [<,P]u1伬b UfIP4\Hud@{ԥPe`I{;u1\Et&RQ7(rɍ Hefr`RDV +& JCoЏ7FseTwfq¼;szD)(\"*"Meg*ƞ| +Tgx>tT1pm+UNuKUlr jsfiM^-7/""`]VV85?.tȴUj6-:9мV\Q4~Vo&uMFӿ?C +c+;Nzv lw[Q9Ō1dV=@;\]DiXq}}|mRcj" IV*ƳD FޢGGEցkdCu#cKi)=UٜB]9h"b#ok=fMW'`-G{G\bk`d {yi$+%Ctr|(&a9a[>ILLn$B߮ji|eYH0@{+tg[6)wRiϠ ol8WҮN/%tJ>mNI ݎ-S/ʅCC)ua9 U?|YfOtk#$ 0j]^QHeSWn }bD!zKT2Ԫn3U}z!{ZJ3ghX{NS:nuAȶ]MZS77yc)t +@%UoDYkq^04|։CTUMz|Nc;첧+Y'qͅ=7a23 +endstream endobj 1883 0 obj<> endobj 1884 0 obj<> endobj 1885 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1886 0 obj<>stream +[ƅ/E#ʬu0y@U3C-^ 3%pX{8c~1`Ogr}Dض$gO&Xh>zQiR%'<> =;-/ErfOmDB3}+Uk?WQYH5.#Cޗ); (qZH(~mb9қXJМ <^zk6_l]{טg@T޻|n>4+DQRC,ΈBeݕM1cH_,;/r_EgP@vĄò5&Ƿk,y; +B09D潁`{s48)H$jT;=axwG%jEy5_PNR f#hQ< >l%,xn7bjL6c9Q?UH|\Aqڸ&=(CEc{U!NMe\uJKT8cggy-F p%^qn`zÈ*f#S\Oz+VFSKNePwNϱA{"5+az}BR{oZa΍W45MO3LDH2ES(a"pG,}w\ ͼ!M`}!v5g0]sQ#uMhӋrn) 1U>)CONKI,.`d4 +uE; v > endobj 1888 0 obj<> endobj 1889 0 obj<> endobj 1890 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1891 0 obj<>stream + %'gٝr.()(>RBvWՌj24%340rR8y?7j<$oymW0`~x?]s;]-a%Ia+Y*= nq8P'{k+ORD.p vyI V|/S:ӕc~mWp|MV7I\i>@ܓ^{],c~OaFCk?YqM)- TP<Oba*T^ PDdi=xn۶zDSWyc&ޤ[4ge+I4BsdF' Hgq2R v[7؊B`5m37dĿ,BO73tЭ I ;\&i+k)I:g[r1TC/ + v&"o{i@KB%(s.gJZNkq} +m8ڡw93! L_dO֍[ot G*֋;+UX'٘> +endstream endobj 1892 0 obj<> endobj 1893 0 obj<> endobj 1894 0 obj<> endobj 1895 0 obj<> endobj 1896 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1897 0 obj<>stream +C-IX])>  jA*Ʊ)%voo48 YQ3Agw^P(d3];7ƩѾ4Uvu +KWvַs:r˒a?f[͢uibps/7&ZqiFN%Xr4X`Tę@G'lPXCG!zΗ~mr'k`&KrajwUȀqO]Q&[YY !rӘ5OA_8PU. I MAUѕ"kk/wrpow^r@zjRnd +[Y)J^O"Xf3#}wёfL~IӦkS㼃B`o1!BzZ0vwd!R^v5fu^bg'r^9+ikNlIAuIPрJKB㹳vtBa~le%Lf.)tVkUA*;2VL!"TLӘTAnqzPJ-(݈ ͩEscDpGřқc+蕼:,`!oʓc[z:*}Z91; #6Y~H,n 'ijCkD9n,.Yןk):-DMx'Ǡ?UW +endstream endobj 1898 0 obj<> endobj 1899 0 obj<> endobj 1900 0 obj<> endobj 1901 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1902 0 obj<>stream +f #2"Nk" g5C + bw"a60 .r^Uz_Ŏw hթuN4by67|Zق,ɾýCIRI&*Qnqh$:I#1AHxI4@yq}Yh;*SH0;情EFe@./ckoSc79Q뮰ډAr Z.{\AacJ!ّk7b H&Ή.ωbrLU#>{Zӧ҉<ˬ8jMc|iY"T&l򲍰K'|4pުa1OF@耠1Oz\yUdḯ2A 1l"Q6Ua~W),H4,8YEhnb/zG'꾣Ta:6<~ -u : G)N{I%},x5-M@"Wx}:D[%pOf^*3o +bM$U+tN~HDBƤj08-ILhQrɠ;Y|ucC+'.̊s-q%pW6f^cLd׊$@l&%Eq +g+ .gB>"slgw7:w~]>o|Xe)n P3"\$ԖN:878Sƒ{&tffCGHi_K-Uh~ezqbp$EbzV]3V`2 qz~,w'2TGrHb|69jC# ͘(󑓋D"Fo}?0g F]3 G'EV* f=DnLCWHxWj37V._ϊzR*w$ -'0kKyC?X2tf|۶]Xߥ\Z];l/$.lJ f)`Qӵ:ikׇ+\_^([ RmӉ5  4!m=oZXUON +endstream endobj 1903 0 obj<> endobj 1904 0 obj<> endobj 1905 0 obj<> endobj 1906 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1907 0 obj<>stream +zT/8YERC +M)xSM) ¨2Ƈ)/;kJBa;[}TMZܦc&{3UVϚj˗(jTXvqG4xJͲLzmUFBe^wX"zrW݃Y9FM˸[F; FɲZ*m:KE[¾)V65<9{DCo^gVP0 +:糲R>*{c0R zKSkxE K6Ж'Fg\/9?~K~VcAKҲ^Oa(ݦ 묋rgx[n$7_*↥;" <Džݠ| ~Ȓu dZA/,7𵋮`#'*:N.SB͘fy_ zgN^?FWQiKCP*W9)OZEu`xq@f۩<]*#;}-Uvm(V0J$03tDQǻ +&wۜg 5KI E> endobj 1909 0 obj<> endobj 1910 0 obj<> endobj 1911 0 obj<> endobj 1912 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1913 0 obj<>stream +D #Jlu|5T4SMC #:?gr)*N aeLf/8e]h~]-A + O8 :{9,fCRa>^l˪ssC%{K"9rjSۑ j"(eM2׭Tnu*u!~{~Y:VbxteÃU+"xs6Qol{L33+1>i򨌟L\ cKdlM>c#gG櫖.&&d7 %[Ч" +Ynޮ^M +#TsQNL!w/ m?_~czU]w[?pg56eR0$\7Πs1pUtr'hFU[Cu-߉~c^W/裃+swL mZY٧!N3+sQg-eyS9ruCǍ%XF?G\w^gS}w +P$ׇKs[..Srn( +(#x\pX?7 +/obZU,Gcm˯;c>3Gݥb<珆aV49:-wlnUQ%ŹʏW+7Yiء,՘te˲ycY I8Ws pTaG p/F&_G0!2 }0'Nr:&QϗP0 @wߪ*҆) ݟ(5d#_Xϲ5T/H:&:NQM+}A^:*heaMZV)jkpdq`,k/v9J\mt }Fv{0DoAsӨpFUPmBoQyED/Gl}  i<L}c#cɦڜ ӱ+N +bU. Ů]p܅q𼡇)W"p18(۠TBYwh1%3Jjv ,Y`6ѓ}0)ׯ?r0eoaL#ީKԽ98KC' ; NҶN +endstream endobj 1914 0 obj<> endobj 1915 0 obj<> endobj 1916 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1917 0 obj<>stream +j7/`y&tivKN1iL#LJpĬ>NSX^k$;/r/?bI2h+@k g6_IeBp%-|~mޒ~#لO Mm [x 1Qy rE{:BlŸ*%Y([,)o`ssMLD:?BXM?\Ϭ_wOfsm1T}ȁ2E#[:++nF@O;B*`]{G~I/_p}AATGI+Z[䪫-4Ǧ4ōt׆VþBN%*FV[<BʎуӅ B~Bi$Gd,˲ / YQ {2ÄܴzǬ$4_抰I$uqNR~$%'-'|lbleV3-F9^ߖGXaUf5h72/ /]O B75/BMnMt?눴jس%]M&}f]gD7yt~ՇSS}UKMwy(m|-lUi#s +ۗx쭽 wTi᭥')AuW%7>y׸ ZQОw(v:,hR={Q.g~Aw;|q@e.ˠS=Ḵ'ոͤT }LB# QqĹd0.Y}֏PsybZ5pw9ǢO$:)ށ-lsC~0Vz1G$}:kX]q)d!t]hL `_*yx~hC=\4ı0lU  J`aL^hH$y;b > endobj 1919 0 obj<> endobj 1920 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1921 0 obj<>stream +~w [| ^w8]j8z8b|,aEpd! l8SN3Y MWI(F43RՈ=ݖd?vV& N'B#oڊ| 6{RLwaA5LG%8 =I'!eAC'`zGiN^%ҿ@JҰ> s:KPb H_G(̝(aP+ :"uot ~7H yi<}x2rN:F_lXvObJijơ SiٷF͒q@f+/w'c @#o˓G2zsyCp"{AƏ1R#)R\1KYpWϬJU\N4U@Snj.S6jƵu'$(!|R+br/y8-ۇ]0;uJS`(?T>ۚv]Sv$aTbEqMhQx-0*5_olB@95%# f3L +0ON%K[# =Gre1ЅF3}} ֻxw5 uYЙl\%yiNZ;SnҪ1pq^?Lr.Jfv~LbXN9$6 zkjy^اb\ 3 -/\pLCxL^F4\< vk:)Lh(_iL'<0q`Yy5z\cl~ىzqdFx9 +ؙ:ѸMV,U'C· 17!ո-r[z}grzv> ˞^n_+[Ƙ Kc+i3X37{D_DIF{QL„E6"1E]![ށ )w(kaVz$*[<߳]xSS'U Y_Lm}oKhݹ4z~Q{RR-r$Uy2d;DQUBs +4?X:!TVM k\[^qvȝ˾4‚lyV&s=CV]9Z0G N9=)qu2 +endstream endobj 1922 0 obj<> endobj 1923 0 obj<> endobj 1924 0 obj<> endobj 1925 0 obj<> endobj 1926 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1927 0 obj<>stream +ꛞ5ܦtN]?OG?D$L? ٯJ$ |tQ󗾈gB@ZgRIO>+J4,@Ǡ +HqFn\Խ?nw"WF@O}\I S%hï4.ȢX]C*1w,}'-L52BȠ߰kDSݱ=#Id4OWRG4^P-Xʹ 8d4{$zCNEХ=oM0 'Afv.&&Yb'K4K;?e M_PaZlcksZJfD'n)H^>pu*FdcǢzve.V쁽d!O3j\p} 8q$f^NjɝAy3-+wF[i?h'q&cK), -w9Ò +3j'¶;Zm p[ +@M;T,e:9~5&GvIipG{~lc[L-"@=Doǥd4+\r~Xm1#XnD"*Gj=KoU“t&P&%iĕw%2օn6;ꝦvJow+x}vW5ouըiyھ$I'u~.[Xg37{Pzϙ6B-(mEn~0RZQ&!"_TP͙U& RvZBԐ@E+ѵxyg!]JiL"fb-CTO$)]NRȑ}Y4}V[Mz[ܠ㨐smM>Ý0`\ =-y%S*5=Fr(M<瓱e 2޿oJA@@Jx-^rbD3k6LJ-qAs|;!kHн?ĹM<6(OA)ŶjjO^iUR+áhk=^1u=Tڰa LR\q2RTY>tAյx ARX ~nLqabroXXa:$o<;Yi=}y08E㕲R٘0Ja-{qf8 8@7`C6a%c9||d3iZXj7kduP^WRɉ/ +ϯbڴS9(_ mD?w xm¹uGmI ++wכ/or:e"۝xbc0ܪ(}"9/n7Y"0r~#WQ)wQuxN<]%xXC/_\> endobj 1929 0 obj<> endobj 1930 0 obj<> endobj 1931 0 obj<> endobj 1932 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1933 0 obj<>stream +~UfkhHLPv((LU372ـ7[@F 38xݝ񆞌iQg$Z͈6!.]2g @#bW'Ėw=IO 4a@@R +{h1LNɟ3[hBHQ$&@2}!<QIYVLCfs뭰A||xBc޵9d+bqlv55R(qbHP4cn6?`iK&fx+NkJ _^z xYJIŠՐC;_Z_{gW i.++;4{jql،Dyh90azv)rvgG\HaJq?4DDV 6% qhSjd +TS|SJArK5agf^HgcBRD ,nLV5j>L"\mw3w)^5Z`W_*tl>/t DHvl}/skE^_w. shEۨثMP{UJo%Oչٕ?t1q>~,L}újRgbZ!r +ٟA6Ca/12$7)~; 59HAnBT=A0JNQT65@k`܆ +C\2t:fPtv>٩hDd—i[ +&ޞq&EU =1"Qg]pRJ2fodmI._T@?mԤ^8?Wdxް=6UV€e^]ܢE `|9VM+ hl^{J(JMd!%tŃpS\UUůnc_B},ZD/'cوm`ܛ3֊?ş=֪e'+]gʀ?./m덷 8mj~tkfsiYkA:>WL"]OHi@& dGP4[fP{ʏB]MײG=XK4#dԔH&U +_eFvnlXl{R+pNy栰 4F7OF-1|UE57tC aF8eojI=]AQ$)1#^Xtϑ*q +endstream endobj 1934 0 obj<> endobj 1935 0 obj<> endobj 1936 0 obj<> endobj 1937 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1938 0 obj<>stream +&}'n\Hj{z)^BhH=c]w;yCH}=첚j"Iڽ,Ȏ]a:oH!$X }?pyQfхh6*搬hbIɧˤ~\sH~|seP"z-dHR2앬2Y~R|ݷ,ӦiM8L'K>_:Io +8 GN ٮk+/=N&D![jҾ@@5 N^9oiRe| ?~j|A`P@4OؑL6Q0bl=nݨSL! R2\71 Ym\bae Ff>Kw;!"UY!'蘣]UiPF'us(CʯZ$Lp`~g)_lDƇӯ+kY:P {ZcߛhE|AYÝhE.a BK3$֘c fTsBhq(֌`knM}[lkZd̟mԹNؐCkD$4G\ .Ao#7_H3OL)řއR0IObIQ6Zu +/fI:[^;GʭGr,AJ>'۠==2(F1L}ԍrJ-VHmdv@+4/6R6*v}hQ*@Tu=ݸ}k:K +*7 +endstream endobj 1939 0 obj<> endobj 1940 0 obj<> endobj 1941 0 obj<> endobj 1942 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1943 0 obj<>stream +iRE-6&l-d1Q HBzxb^@wMl?^FT$ńV!(~R#ڱ:%^(٧L+cQя̸ͽiϠS!bNꞟ<]4-!GbdGVM*IZOl:ī*}3bF{p 'a4RTKK 00HFzGj?Ic4v-BqfwfZ)/Cv] 6z9gΙ_ZEdwxURy(T;@%㴻bEIDf!ߌ8@Df '!6\);~BW+&fC:.i{LѕaU0oo3 +I{|u~g{dgs;եq{y3>H`َ/ YiE~hͶ=q.(h͡Z`B u)aL¼חcA{KgΑv (eoR9%ٓK5fw:X;fr\Vrܦ?"",c9'A xs.1R*5~sFk_5"{Q6Yyr%aQ%Z!vQwhrˣXDeմ{R2WI[__tO"hWħ(?tɠBj.-oB!{6~*ozvpʓcճ{/5]D]X̜o xX8kE)KrmM IYMǯۥ~ǸXӒ +y7 Kqѧ A58&$|xRbقrd:d['6ɗ;8̀hF(EU$L-=hb`lZCDܫˬ)_oK Lb&[Ӟie;۸yF'ȵV +endstream endobj 1944 0 obj<> endobj 1945 0 obj<> endobj 1946 0 obj<> endobj 1947 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1948 0 obj<>stream +]JwRaw8IDoN>/(O2^,iv$QI\9LAD{Z` ++_%%8jCHj*xp n3RIF[(&{}z&¦|[$hK˒N5vheZRzaOʱ +j^3vys,c-cٻ sK,Y"qY;`.+fY~ݼ×779s㊆Kh _V;m-irŕ6e Np:Q 2ILNNT|oq3w22[J\+LWk{.QsaKl\Z4L-|AeTvk 9"DعW8 JPS6hȅƍ /<)Y:i}Qf߇R A 8/X@7 &䲥QJe +J +i9/(ͭQ 09ks_tX Ds!X|1a6 +QV5l8&Hצ7 He֡B0be2t8=MpQrT2P :z8<7! (|4ębN:Bu溼@^o)Vn8yOË-s$ߴw/UuSDe.98LYܔ6oGe!^PŲ wD7wʭ-}sA) +iwn "%;8`H ŵQ%mr %tSALUpa-zzjLȧIBw664TԘ_A_?C|~ +i^U4ҭek;bs<FD^ 2gkx&~P%sDžA +T(7!&0+0-͂=-Ͷ+]t739Z/nAmO] +?ݒN|E +G^wck5&8 h]љ%Tq#yC7PC%x܎C? :+6uQ)A4au1N:Hco$ZƟ ,GU$΄ ~ wZ!Cdh3 p;{x 6UV2)[.oGVo51o@KO%eӋ ޠUc$L%8:,LAt)܍5 . ݟ^"]M%k d%[| he5,Aۙ@`ⅷI:lug. +endstream endobj 1949 0 obj<> endobj 1950 0 obj<> endobj 1951 0 obj<> endobj 1952 0 obj<> endobj 1953 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1954 0 obj<>stream +~/‡GN]63OMZ,~6O=EUA\ρXs1>6#F0zUQN{<2 +:0Lc5Png@z{h4dvrOwxV^8%f;j=F-iN~z~7vPYpu0Sk2{@3@|sdӵv< W$j]MZ=2M\"B^!Zq)bĢ+OuY1(}[&ܜ[_[.J>5( zc6< +?FF!>M6S_qzxj2>3uw]%ٷUJwhZ5˗2E<216}$)_XdTwEҝ P~5p}i-Fⓦ&ϳ1t}uVӟggW0, ThBѾb&^eRrWFa +"0j$0̕W0y(2b["S vmx@80``2ҟ٧f`a_n`k#_4* +D8BOK>3m\i-sDdS v9p3DzOc0WwvAQ5d s20!ZL;2L%ano$HGyZ3L4enDa$J"fX627!44 + 6}DB= J\LpeּS3Q +B`Y%y|fö Nߺ)#-{kAy&e@5Vy/3mFQalUWD{w[̸H)H?^uhcwKn}K׎dE*.К+;s>NXEPȖbb'BpTnrt :qďXp=v +endstream endobj 1955 0 obj<> endobj 1956 0 obj<> endobj 1957 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1958 0 obj<>stream +(-f4f;1I /6(bv8_:ׂJLr44y+*aoy'37:n| re(:e#"Hڪs$|o?2aɖyg4Տ0q)I6'jξʾD'"'AEac6hn&=mGاNP#fqRN9ST"OZhM8*Z9SԙMw "By*7r@3(I/m}M1$Ak8GQ9OTx@SڬV`:ǝbO}zڿ>VF?-*rOiX¶kN^esՎ +N]|lJ+\.{JJ=- MjO<Ž`nDHraeo 0oZu1ES+E03Z!#9=LƐp 3lsEvG*crq=K+7spe vG=>.$Z`ntͫp t[> @bZ/ڕ4H:%dӆa0u5mQ|3P\px G ++*?w)N6FbG܅9I ;?}A[U!s@ޭD B5ŏ9,]mt5!mm#)tyXr>) w ;CZrK} 2U-[ giV1M{M 9( +endstream endobj 1959 0 obj<> endobj 1960 0 obj<> endobj 1961 0 obj<> endobj 1962 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1963 0 obj<>stream +G-oz0Ӡ}C}olu|Z*|5,_LOk5@AS7 A{2y:A/'};+"hͧOͩ.myc(P=ndcނ$‹ 6\&, ĺ-8B)kь˩ %C VwbvywIhs.k15Ϸ68aF\5Rf)Dt8u0r[?žgK;GٳQ5b^q*6s8=$pAVZ츕gL`o!tN'Ц=Ő)i{_$.aKB06=Xn}S?Z|ǽSYIZfȅkwDn|LS@?>!y{Cs fIӗ"敇F +\VO-18@%v5~s 4jׂ}o"$!kObkDe#Tsw|lo\|Lbi; +y?<&i϶iALHHqPx_#x$=8Ȏoz= Ǔ:n{_# Ҋ49k.᷹ yЂ#U +в~p&¹`#_.9k^aC3V6ɵKx CWC㣋q^V38!-x$D:ƾ6۪F2_hJ+x5:v6w_M7'> endobj 1965 0 obj<> endobj 1966 0 obj<> endobj 1967 0 obj<> endobj 1968 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1969 0 obj<>stream + bY2 +4?nAK2$|,}ss¶sV:դ1ʏ2QQ.r"(U#Ie\TWCdIʭ` ƁޜEDXB2Z[C,_1d]'1r'YViЗ60S|a}`Dg*|1 ޮrF@M`v-Iw^WxX2QVdž@|"p}dCtp_`z,Omf藜Ez\h(`e4ک yz$<^1E@=|p3|Amwo7+k/4aYlȋɵ@iVwkHᦧ&6fp ٣LCWdք~x`z4R~ycg>W ]ȭ5kiY]P%>= ArV'5iJxT/r) d{Z0%3!俪f+MBk֫HsߥEFʻ`N*"Kk:@&^,0m6C|z&\z>%zCzB: i<3m*j|&i9 +GvQX. 6d͎4gHa2St;C3?shl +endstream endobj 1970 0 obj<> endobj 1971 0 obj<> endobj 1972 0 obj<> endobj 1973 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1974 0 obj<>stream +,Lc1'j9$P +뢛ņҪ^ {;+%#0%x+-9?&J8NZ?MJa_eli}UgI49ζ+/5?OɫכiկpP_fgPޒ!dYGD;!V%-' 2u #\X:,-ؗ ǃH,'P9`z7qbqo۪qNDXŲ*(BP{o>GL5J rA{' Իg'pl|;4aח&25x/v챣\y.>P" =rFi% {c՜ΐVS +r0B`@W)7r? jYd#'FH06c8PMh=Ś~*{x)b1W 6>4bljPIWq|RˋLi3kOomޮm3uv!n` 7Jø+jg )ʟdQG&nN5[<3++pj%UgW{(^(e]'ygi({$y<ٕKwWȺAoh񗒩3UP[ċroK~jVE,U|m8zʵSupec73+2HQ/>T'~VKb-]=^/Rjb8 "w&E?!q6}#ߎ9e_J0Ƕ=75Z\ !,М%0 Л7!ƻ=d?>Ї,6n.$ H"mۘͅ0 Pzy|X-\ vH " ǡSy op`Gh~T^SZٞY838›P3}ى&lg).H٤kl#.!: %j[&$ρz7 PY rg{*aS`<6(bqrYa +endstream endobj 1975 0 obj<> endobj 1976 0 obj<> endobj 1977 0 obj<> endobj 1978 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1979 0 obj<>stream +Ta .K@ShDPE1{@l˧$t]. "h49<Qb ^$Q4BԌ:;+Yv}e1^$N7L5O~촒f8g +}@+q8Yl]=<LJx":!F'5y;]6^x 1BSui ddt\/*Hh\^p>Y:f.a4Ѡ,Lw*g&g[/:1@H&ƜX!b2%a8]pAktog  ;2M{NZz8@t"ffgNw(@ +H 9RfZُLPZ^`2Hq=oe(˸ D 32ihǺޡV|ӚAuÉBF{9oh7dh煭T1ε{ߝŻg4VdLmI%;Sd0'#Tx"O&+F!q%{HeXfEc_G%@ESpqP,Ì :[<+9c <څi`]3_;cgKa 8-1s.>n0"s:JF`q/ H#7\bT:(<(8|ǹB+i@EfI"S5ws6YĽz玏kI&1;a8^1yVu[Cȳǃek.<2=J;V4Ej )7̒Rȓ>D|ӠesS|!N3%)zξ;МdOϿ6@pKjJ^_( 3>{MfibPjS'd ZzqamoIN^C(vmtӄņ Zg:c_7EC78Y?~VsV` 4%R.8tiAأ慷& Va̞B|ڋ, |q'{bOTk"U>r_2Z=@@1猣 +ͬ js'6jY,B -Me&Wrw@UWj´TV&&bTm_ٟ=O&?Fڎ7V,|.]3 +endstream endobj 1980 0 obj<> endobj 1981 0 obj<> endobj 1982 0 obj<> endobj 1983 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1984 0 obj<>stream +Ǵ9E1O2= +R_4{I8۫9eb;N0-b+'¶NSPO},ٞp#,-*3w'U=c0#жq=ȵQ~C_Kf\N)S%ļ3jzH<(aaP+U;q}Q& "&Tۻ'?Bm&Tw"(^!\8.)S +2l=uqMUAOQo}RsGLUgb$-fk_E3!>% +K+DUc ?vcI͌L~3Noj`C# v{G}Bob%Er+s1/ +b\x-g!*^~O%ֽf8e.0]pX<}7H5XQKЄE _i]AU w. k\4AYYjwr5I|y)r9:e^%%J;gw3QdAXelbvj-z?>ձZ$ AϚvG?7.f}\]NrGЙt9e |b #~F3B#4~v`p[]|߂5"s"]X4lRNp٬Nȱ!/RyTҟ;ɃI ?)sKi$K铷زze@僧TtBqB }5~d;88"X@zԍlogs ҵn#rtXDAխwf-jCTp,J,Q BIYM|3G$*ޔvI)=+NS;Ul@}m4mHQ]Egsm ru~9$>?*r=t5'c錥k/"tLJY?>AEݹXi>׃ߦl@+c'ΰEMֲH9B:U?JTJUɢ]q)ՁYHrռFߓ}=jin +9,W .1$ڙCNף:S#L>w"tّj`dUҋޮ54-Mv +endstream endobj 1985 0 obj<> endobj 1986 0 obj<> endobj 1987 0 obj<> endobj 1988 0 obj<> endobj 1989 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1990 0 obj<>stream +Iά;#踼y'r Y ŐZzO/\gt7^edA/"!;J)JVb scOpD1ؠ&/4Ciuwo^>CN5(DZ8-0ZOtXlVE(5DC%AX{Ԥb0;RCNtvLM=L-.Um1+yX)Zy48 +r>xX zt#Q +{Gx< +`7p#L l[~Q̿=Snri}.\EHKdp#ʄS(o2}arE~& Y+r֓JW|.?3I>\6eKW}eXcUD3 B=NܞTt~ƈC:wLi 0e.p~.߅ >rrو3NE̶ݩ7zL(O6+4z 2=g8xeokokڦ/v=Iu5'q:w:Ø~{Wal̻st<#d^Uҡ6ё-x24w3޷mS´>'y; ^F_HԺj<&tmtVO}ݨ^-Bsn:.wIYey\UEc[Pv~I%l}vvt9EeX⼬? o +m xWuTA  #Uhm|NymJy'!8Gmgz;j5)wꩿ*'{[d=udos]۩c_7: WBƉő.*yW]5zηE*nb2Cp\!xI#iʏM.;䖃;tĢ>T=LLHnP%KL'rÑTW3iWul`A,2\$$;Fo2,8YCZZEfoOYNW d+AYwʅ > endobj 1992 0 obj<> endobj 1993 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1994 0 obj<>stream +B|y$JN&;oN={E2 ( +TcÞZGu@e;2x_[A-C ER% |M2l$~j0\DL_P6Kjk ^dƣjmAX7#0lٜ&ͱ~m_r@dE;/'UdZ<^a]YROnra0~@)P+D_SQo))eUKAƸ_Q`]ºM,R*HzPVϛ!.?$;4kwjs^ M` ; BlK/-ɁJ;΁{HLeVO0!ۤ^sn'ր{{Zݦ6,)3?{/1m⋍~MVQIuK<[t;\QQ]_MYQm\zLWp)׼늡bE$r\=݅ޕiQzGCYIHm=OV+?yyT1/"!QE`)02saE|]mc:v !eRtLk_ DBUI”GH%8f؜?5gD$ v`D?6b!+1Oآ0wQ٬3aYűͭRYI󸼥߅l + qӿV)&T|TTDC5w5;Ƶ(={on1w&-BTl=0[3Q6fr!&|þNmKNyOssRz+ Uy[)ܝ~2(8vǺ .֥$;Yyx`Jt Yه,,pvb@0oQչ_GsF}d2M%^3?X{ShYL +endstream endobj 1995 0 obj<> endobj 1996 0 obj<> endobj 1997 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1998 0 obj<>stream +ft莍B=go%g}y$?wBy86#|+{k]^FՀ`^a=eDAu;9jIh5Ygכea۩+ >=k-*)5wɼ|"QP踎wDb?R~ ǏhߪY*?5JΓiԇQ}5부88QLyQg8 s>* eWo>51NE[J#[2cy ȭ'nƌZJɴ,M%=ɯy\)frfVBۏn^)XՏ^ѝMY7ݘvkU$9~ݛ"Ƴ6fWVϸW6i`+2_A'}qR7 ߶MxmzҮJBytw3bL>#ҕEqQXb;] QwbA4%@#jҴ#iH*iZ,;͸ER9k\S3(n u̲ݩn>0RK /&ɷ,_U#\&f*Qu{ ɷB4{ )oDRL=ꇖZGZ )nSS#.pG\y[Woz6|u4 ! 4#=#poUJD65B2h_^ߞYkZ!Z3 AU |cG1q \cDTo3\7] 0LbO-TT@N@N,oBB @=s$K2 Fabo)8r[GA^u`h\mqL3QQ"ފ3̃X'jψ3[C6: gAzzC1Rld#S] 7Nוf>y\4ƶ^4sLzyn<8b +endstream endobj 1999 0 obj<> endobj 2000 0 obj<> endobj 2001 0 obj<> endobj 2002 0 obj<> endobj 2003 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2004 0 obj<>stream ++G1N huHV׸ ʿLG{5ځ +#~PDL"SI1B-ٮF͜h q1gu0Y`Wqq60 ]1<%ߋ':5E)ttx?cn6S&SJb7^ +w:]@^#ÎûNN~Mr}q![VĻ]9xbr2["z?o -V:&Z@٩K94@]KZ:9_ȯ/{|An Μǥp,40LA=G?{5L?U%AoKVDCrU%q +{й.mHGH%Tx&Wܚ\ݵ^%:43(?YFFj*rǑyp(J"l֡rac>.qXdw|\mӼ fšA< ٩h0FG@5L b8MڗLvs +pnA`o3gZq'^SNoq`;SV][Wu*C_s0YzvMD?FC}!́/\DȘ Yw 8hL{R9]<ϪW3\BA|OSt@!%2. q1myaRL1)X=:<֒m?%!(rV¼([q)Q*7r M-K׀ ER a_A5>{e{{S9(h@60pO043MqŤKm78$P#/^aԃ?pmh!=a<٬*KQu5 gV^ƣՌ )fB%VGb͢ރ-cs]?n f P,NGvxoy2D"FDS/֧7LDRc:윬ČG$$5Lr~E3MM O ďiDKD/F<9taL#Ao>M[ͲA)"*1sv:j +95GM|I 3>cK)XLbI`EIfTj,Dv!)OKKr}2_W}*EObZ8plf6(WņT Hau1A^+y΂ֽUHIVGP)t =6*%2L9ܮe,!rď!@01i 3,MOpE~-z`iOFs`ÞNUvV' EK-0;5셺tU*Rt_j> endobj 2006 0 obj<> endobj 2007 0 obj<> endobj 2008 0 obj<> endobj 2009 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2010 0 obj<>stream + Q>`zٟsޮ[UR`-m> s@|>Sֿ[DypvL(9EόMx:S4|! +eo6 +t2Xm5!鷚e;m>5dxM`aN]EfȨyIϴV +LBsPLF0QIDeT"Y\5-J|{`i`~;,>i4 +нU"\ r}l7H sa4,KzYӅ?nǫք"%sFݱ!khc3mQt;|̍=X +ۯKG0=,FA]E2<!$>JG䘻2.oE↏Txl*s8 &/{RpTwLZJS4tadQT~܅~˼PlU +jCRx)л+DsMC jwmV>"OZnh~|`-ayCmEWHߞbXީy+!6B;_oӰ$'y Ɋwrٌ!HbTwj*7&iub83i"':9ΣA'3 <ߨH0}9\r,.,?A<h071&:x7=J/]f]7Jal.m>!xkl@f;8^Y<|k!N̷+E\voDUȆZ5̞ǦyNi {pH*+B4`Mꂗl < =F,* +r2lAI]$72(pQQ)#M%dt>۳U9CrZ\^`OYl~H2L S\ Ş +I9C7t~ MreO7EXg{ >@vrcd&:}1H)OWc[B`Z>?ԇ@y+."s:4|Eex ݢ;.1o]bf=VlRk)&;CյOK_[Jbbljy8] Jh6o{ @M+KS518iA윅қ?~Z/v&ͭ) )8#B"Rv7=UWfË +1U'0#OS/= -jەkGN[0n$y69b)ȂB#Q}J/Ӱ< %|(_N/ޮf"[_%F^s4~lԓ Iۅ%M~|7cM]6g,>}:ǖ7q|"*ilFN5S9n]*^&B46@a\Xv2P"8A8 4;. +endstream endobj 2011 0 obj<> endobj 2012 0 obj<> endobj 2013 0 obj<> endobj 2014 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2015 0 obj<>stream + &[j G2obo`R6b0'N{I6GLm~A,I_c׍_yF?QX9"j޵j-,GS6- ? SW TpU6Oc(ԙB9ۢX*מo>2D +ZnW6"{n{+uxTWX7HuZX9k;rޭ{Z׳Jn{\&ɰ蜪T)R> >K0}9ϽJlj.w,!}`vCgN֒.f3]\;N nZ@˴Ԙ2@t΃On|.nEem>@١C#_~q5ƴ%W\cf[3.3ЗQi<*0љ)S:]hK_~=}8nȡ4zLyBKR/{$е(AT|AR)ây. ȘFʅ8,wn-~2$3SuET>ctʒˉ<%.gPTKF@(˘=/ Pg!![C`KrH7&F |$QR< * ys(LϏ&CA n_HuS<>3>-6˻%.;8+]=Q&y`ʡ=wdrK,~uM~Zq:0ڃ\1+!8/6 3ܼҺ@1NWҺ-X2\k%9"~g61/Ah +I-S|J]]Y#+nj=6eS$;Kxڔr+CvfA)N0󅷶AZB(/qА#biؠVKFea&π(i,&Xc5Rz.Mo'LmzuY2S,{?,#:B +endstream endobj 2016 0 obj<> endobj 2017 0 obj<> endobj 2018 0 obj<> endobj 2019 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2020 0 obj<>stream +'$\gM0;pd=3qB*+z`;TוsAl`6P%hׯ, `I$ETDI)ƣQ<>a e)n7sB~?<6QO:P"HK7<9 H]ՈRB߁,9->TNNt52SuQZM6K&znH.T)-ɓ\1}GV 5$ۮAox߇ Fd%-@MײBh MPPV!C%Z߉X˥A$I>؈T`ئ~ءb& [خfs qǹD;aC-'1+QL$`ƅ ;D"{̊]QQ;OV^i0eV <5~\*вb 度}hc jAkm7=ϖFb;3Z}Sb/D]~@U44=}{!^ZoX% 5n&KӐT+9;$fՒ2TʬQY_2 <8y$.>sF/a6 +^繎5ho;?<ڞ*l9<]N-zx$l:fu +H]ģi$R ZU]$@VSs9W*]Y`ԠMTkYEp'ӄFۍ<tP["| uP}LD|ۉbm +Ry' GWA# ٵuh {{^>q[ k&@,cK8~=Sx1ZM u|IXc`@2kӳ#w)n Zl+yK +y4S%"^qGjUQz5zA'8!-'Z4;,a%=,I E׽ĽbIk0\SϧYWGXk7ӁF p{@}Oǐ%zEM1<= +$+rclTH%ֽB%r139mdV2Vy&sK^NW(g`xl +ne.h:@ޒ@sviH! Jt_W(^ֺ6Rz@?Y^}7M;'>_qG-1f#|뇂- .O*~d4r8T:;%Ju2O԰q;@D~H <\ H-WMDޢ寢g$s-Q.>*M +endstream endobj 2021 0 obj<> endobj 2022 0 obj<> endobj 2023 0 obj<> endobj 2024 0 obj<> endobj 2025 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2026 0 obj<>stream +%5hd)xQ wD q<Bk =XFUy9PB/}ǂraS{"E2 |6$i-5#YnF/Q;0{5(Lkd{t*&S)O7Gfg8D:z +VH\.Ƭj;ZRe-6 Un9=|`PVhaG?琼H*:3#4:Wui~SjDk C ̘.# Ip+4Lk4)6wW>-DN m<:$uշĭd*Bo$jYö6pIYPÜZQ,w B(/ J䑹*dE!7 v߃>ePzY.KNjIUFh@cn7Z#8m\}"b^C?Z FFUE7i[fɱWEl1|&D * Cay ^F9!fN\*Ieop$*~f6"tj]c$&>.wn~W&{6/v <x0_|\?؁97*;9w l JwcOX-L{Y,,IB>$C&˸4Rp8#`>;'ת*MZC@1Ш =){9]L m`$x;L&2͂mm^|쵿Q- ].r)#}d2opym(1T-)o cbrH_f0nCu1N_{ԨKYVGK%\3Q J^,TA\,@Fq|,)" F;n!MkӥMT܁]]Q6(4h~* ]>4?˪0 $9;Ӗ >g]5CD'm-+(Ohxp<]l#,]qErMhhuz*!O?ߏFG l!FDxPֻ=Ľ)َs1q( + 9Vٸy0{͍doq@|(K.uO(@;peZ4wx"_Y 0%= ܳ1Jp# , IDI~nI fM7eBm\SRd h uq5\73iHɣsǬajҍ\ՙfCgFfJowaZAl -?݋"@aG- Cg1B1lRTy䞲B_(g` +endstream endobj 2027 0 obj<> endobj 2028 0 obj<> endobj 2029 0 obj<> endobj 2030 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2031 0 obj<>stream +B xjxGYohk./+BJM1[H +h[3!H|rnoKTP5Ez/-7UxE(|ۧ1 d&¿q%$9(X2JXgDؔK'TUKʻIHPAOG΍{a?(I9,mZ렞+"|y8^zʖ_B* +Gjߑ KvKUPjscB @4nVM)@GaVv֛; JH+r*PZ%ĢI0LiM ?"8}Y2kLoAov-Եt(zL:YFLT-ZM@2(١Aµwϭ&;\"NJJCG8iTb6bYs3O*h2U+ +Ԥ7AaK&5{0bƲw_~\z~$ 0A:5j B͉yE+v~A%&V8 UDPq^)+{mZ#Y4ȾiG^zn"NØw]9MW,ԣu%+ڪ3/Q?T%]8(4ɘ>UilXd'l/fUJDx|%30Z8|CfCl3d})jghsGw]"?g· @!3D.Q'c@ӶjM@je}„L[EN@Fgc"r{DhEu>er;E["yoƼ@C2M\&% =~]89 4_Ղ;!D1yHO'ѪhPK MFuĺ7q7 +endstream endobj 2032 0 obj<> endobj 2033 0 obj<> endobj 2034 0 obj<> endobj 2035 0 obj<> endobj 2036 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2037 0 obj<>stream +;T-o| 2zoĕͽCUkdekxP{/rmىq.:#kDJ+heNf6D5̱Jptv|%^tѽdj{޻9QۃPcp0k"W>,\I(^{97W9YLV] .qb$S뫰WHI٠xM W;6~=*3b[: c p/4񂠂%o4?Qi]`ب͗cWӂ51xw'L+DwnbGhˡk0z#'_ /11b ;OH4u8!p]FDb햁m})H%4I|:&U& k D];!tTP2:jne5g_1ϵ0"2SZ*9F70~7 "hӠU f1'c[o׳ֶl !3XB_y=&VΤ{Z/LT>?b%$}-$\LDWM@lmQK +$D[k9Z6_J4Cr$m XA"r,B^LrHx l,t,"TAZA| PA5]Gã 0ksD G.Jؕ9Kmr +Oz vMT6E 𜗜 +Z/3Wx~BTD 鷷 [Mo#&LikSfOsyMG]=7w փ7m6P%|">Ut7<([3/]M^MfoE6jݐN>7Aބ  +rRU7!c_"68*:6(ub+5jgi2zRU34x3JU64JIvRޘu&XIթޙlVbP8@A\|TD58k z0$gռΜ=U?. + +2nn,cÞfmz_iK5WdMfwET u5 +̩2~i4U<6FN@^X St^JdGb'&7:YT> ЇPPW B"ZhI-TOn= g7{&O'N6 7 +endstream endobj 2038 0 obj<> endobj 2039 0 obj<> endobj 2040 0 obj<> endobj 2041 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2042 0 obj<>stream +:KEԱhy?4#E L]Q|_F < Ǘ I6sr!lteP3a5MYHWI»ѲDeŒϘ'-{]m~ ^<yS3jd c~k٣G_ɲțfw0mkVRB'v9@G ib޻ KJ@ƾwQF{mG+Qle-8Z΋]f9 4lL"z6!˞,T\֕b'Uߨ>/[Vڡ>I@#viC>`y=0#&bY$um&yAZf&}۫/x}tםy8·/Q/u! +jUн:fǘR3N(`7b䃸ygbO4}0t۳ W&:? +DMı,|U TiO|;C!h7yN#S a}cG$Whͪl{ᯆ>lԪJPSlϺ4!`"Z2N{2r5)/Wkl"\gJm=ӍSߔ+^&$+UvIjR:)ioq28p lN(P<A >Ԁu,CIb$qI/ԦLjE~`io)@o8"Ұj*kBܺTB`طI3}^\J+iKqy"UULL +Nje[n_2粸ۊͷ՛Mgx½'|Ax|6j|^uH{#AȨ|3 W 5<Ù=e6),;vOM:*ɺOwCH;_> endobj 2044 0 obj<> endobj 2045 0 obj<> endobj 2046 0 obj<> endobj 2047 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2048 0 obj<>stream +Rr\:I:0BKz)}i]21iRВ9`QEUz +TdZ?'\|.J|'6C+5õf?B9VڑS v H1'gDKsLB1ju~l?4%̆s闤ԇ3:M2#kwS&)V˸դASE +B>;:ZtZ.-4vC\cQr'w1]0:N/t,X5oZ[l'~ dJm'=1@_B#V#v:KYGMӴ-ek|[x6x7Ljm4`փgBh@v!@#^'`}n:PLSISƙL" $kt7Cy&sZ::*8|k?^q +],]QsD1~V;%Rj3mזJZW0LGD\~O?uaRScb?Нg +%7p+^M۝}$IB 4s +XuKNJ)(HMimxuw~w]O Ǻ1̫q'I(&Iv|B0؟G IL蝷q ".9]QWw-ES\ljFHwv:zӊjIX577`__ۦz__%kK#@>BJ=wn!`/#fǂ@[ +zƱyk2 +)OI6!^Jts 89/$k Bx[.PxuȊ{ϣ@ +H=9vhI|.,Nڼ4QWYMH%A #Y*I& +44j6>N /YwQfl*I!‡_&b5mic cCdvGElXAQ,E Ӽf`Q*آٚ;؉RG9X.*"Qs'-tJMӧ\CLQϰgsnZľ)1[zܧlU 1PGB(:d7 D,s[q33tc=l <)+Y2H[S=v}禈=vP-w)@\@灦߃NFDɌݣ.ƃѳ-{e蠾< +endstream endobj 2049 0 obj<> endobj 2050 0 obj<> endobj 2051 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2052 0 obj<>stream +^cc{Y h $ aZFVp_<0Zz*y^>t&g9\=}Ґ?C[:VMѫv~#DEKi{e{>xxT*e{^8sʤ&DoRRdSР@0et 7Q,rWO;KN%#:gScܵhW)b nq]F;jzc.U7+DdX&ȳق&=b +$OTFY3y^\3iSK:-&m m%u +l$ǨaE,eePzv~xDn_ +F^ɒ[rnQ:aVCs%πӵ*'zhr[\Gc})Vٸk +6C@~$2=N|iD0T\b{Bpm1ÈmL*s9# GF5)9G'/5ch:RCkS@ET +jC?vdL 45ٖS쥼*.Y#:gFaM4qd9F3=Nڦ$9m#s] ^dL(;/G7B>]eYjzUgJ6Wlc2{8i [". 2Sag=RyV:kJe7u( +_RFr6)5bl kf2^Đ ῷ]jq +endstream endobj 2053 0 obj<> endobj 2054 0 obj<> endobj 2055 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2056 0 obj<>stream +)TwJ,VO[Ҝj[qp|3odkEfT.6/}o%Li z pK另l+ +-q~yZ8:,oi>E[NX/W`xW"i 1r0cD{/c mMÐ&;8}ʷj"FL=6`T-S4aY7Z+8B8=/CwX*xziB" +"w9zCw*nN`R6 }nq{]Nq H 4= +cAw +cP)9t,MTHWjݒ~, Iaf-EGֱǙWq}4X؋Ԧ VD-S !hŰ@Ý)u%'h +‘>r:xnI>:h 1s/5|oJ4EK{ ֮fL2OlŲڶx BKC0OO])WC^S ui67tl +S&}۩|;"4ߢ;3XJMyo4Ugy<0&!9H,B x + չi$,>q1DI$Z9'] +endstream endobj 2057 0 obj<> endobj 2058 0 obj<> endobj 2059 0 obj<> endobj 2060 0 obj<> endobj 2061 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2062 0 obj<>stream +?8aP?*Uh˾En% &0p2ΤX @iZ]xso;Ӣ{:)ksaN5 +yaic*L#o<⢚na_p8w>tQx[䆢9ͻU-;yo:2ztEPS8xdoIZt)mF~txPDfMnHr + `Uɍػ䠱GSs`!+aʊ_x%ߜO3}AsD@4_B ! ˔L/oP#mf1bGl|$ Q+XHѰ7{snE-:R8qL' Djm6F9l YaqtYD.⋼~䥛@@ҖvvMIYAaa+zSRR! BT_BSke8;+KJ8w]?~ũdE?pyxZ_(QxD +|Ԃ4~hS f'MH.P1tʏŴ;->Fv(HcATاO)Rv|aŽ Oa$:K W_a&QNM%1O﷔?WWetaO|gEФ)ڢ9uQT[k(f5tbl|A#y;@~FIy`Hcipl帖YVDrرt3\#u ߐ&;q-< H^M4Sɰ]4FJ|.G_T, Uz-,%Og2 ڜ5ԨGiqhĀp1g˃H5h3)kvζ_Ԫ{@vRis?stYۢ[$d-m23D{.%wz.YɍZ>&|$UAb& ^K Q5,CWEY8&M>Sr#{\̙S5gti-h^lFA/"E~=q&Dۮ6Vû&џL +geZ!_$T|hd5QR.o<<]26zK9Z_sV Qf_ +iSBzy`*M+P/Պ3m5fd|tıFGHkB?$M˯u"o8&pcUE{^ΰ) Jږn;ERA/0FEc3{mɥo7&UIr0Re[&"XҪÙsHpI;BMR +endstream endobj 2063 0 obj<> endobj 2064 0 obj<> endobj 2065 0 obj<> endobj 2066 0 obj<> endobj 2067 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2068 0 obj<>stream + +m{*f?#ٱI:gtϩsTzıHxiW)*: Stx8-Y$p߳C^պvLb/MA4^&`VNXi|{Q3_/Sr̅Df+N"K]<*s-ۗp.p}ѧ9 !U{uM2!/9s~͜ =. +. pJ^B}hῄ% 47bQEUӮ.g kvxl}̷yB,slE-޻ >n`:cZ._,EXAjcp5j(hsZO&\0 +H27^!fO" sClvqV# @AYi Ϊ:s0sePisH~#v&;!"`)g-ATdɴTL2ZMw0_Mz|n+@.&a#p#i0~̹ƃ'|Gu┗S0ThG)}:ۋl*dolŵn߇ 7x$+8ǵ#WYZ:1F8Ul3nGm\5-).dpwQ"4GkFmܿ}I*~AM,3&96X0,Z4ީ9t2Ė!Rۺ_$$ΤV~ 5tcȴC4k EZeX Կ.\5m@I/S]>uGddYT*X(˟P0qRw<*αYNhU[d:{ t5H4cM40G<8wIzXPgܿilc1s{ +,,R:^ fC9@bJBHKqxB1Ƭm8?l^)|_[| T"fƂ>;rCT!MSl8]u +ȅYOU-ҟ1uh_RBIb,2IU]2ȗMćҟYq +endstream endobj 2069 0 obj<> endobj 2070 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2071 0 obj<>stream +*NȌZ7(,.e*p {3Ɖ/E*ox3 +xeFHp QPx9iK%3%TPo$6]$6WC + k %Dp||I,aϖ̱FǖP A3Vc2O8Sr^S8B> endobj 2073 0 obj<> endobj 2074 0 obj<> endobj 2075 0 obj<> endobj 2076 0 obj<> endobj 2077 0 obj<> endobj 2078 0 obj<> endobj 2079 0 obj<> endobj 2080 0 obj<> endobj 2081 0 obj<> endobj 2082 0 obj<> endobj 2083 0 obj<> endobj 2084 0 obj<> endobj 2085 0 obj<> endobj 2086 0 obj<> endobj 2087 0 obj<> endobj 2088 0 obj<> endobj 2089 0 obj<> endobj 2090 0 obj<> endobj 2091 0 obj<> endobj 2092 0 obj<> endobj 2093 0 obj<> endobj 2094 0 obj<> endobj 2095 0 obj<> endobj 2096 0 obj<> endobj 2097 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2098 0 obj<>stream +Ǵֺ\O5{*[lYWf=)Xe˕6ς`xҘPOb2ZO?'I=J`T'>XNզytF]VҼz/VJMxA`e98T|2p.'wQܻEl4،yϥ-BJ$~kS?b r.Z;jh4*ݍT$A }%X@r~ee +Q]|A;a$A"]rtyGpn=t讀81J JlM ܵFb/[Sm/g]#s:I&]ԭ=ުthz\^x"da(=+V[񯭥f=2.uvjb1 jxFh,PG~f GFh/۾#gXyi'1nQZs6Ok "0?GtF{I@]U4B ,12&pDlP=$Q,[s10çהԣw=nDddmq'QeN2cf:Kqk**(4aԣg?CiG*d9b +* c#.;$OP.YWV86%57P!BV 3m@7}.bPbv.eߗ_;8C !AճӘMIF IQ[9ʰ.qGp &kzBACV?@q0?4@[O. 2`I2;7h`*k6eb|XO9yg4#|{mBnMuX/{m X!s plj[ n2/E"`cv1qjf\$6i']N%cgY ՘|2|{QiH:[M #rdEY kϔ~;6UNGV/[Y}IJS岋C +yA"ox@#諹{y!8'mBmW]ٯS;юQV5Lq|wTq- *lg;܄}H4'XÄ́;H25uTNqaUR+cʼ5ju\dُ woǨދ |>폶SrFDsEx5?\Ԓf{!pb=Ӯ]ljl@Γs#o],-`WF@VVaXq}gF BVr +RdxU|d?$7Qþ焸&BH(8s0n(XŁ.2hߗK]H\mzB\G҆{VACPDd+`d%:pzK[WPk!FO||-yՈBk" g*(k̼թy]'=Rn_FH*%h2OZD)Π,RuVZB ^s[|}+,CoK>X:D:B9{ԑ]}Mbo +!g"tι+C +& +$UҲi*21w/t "uH H `x$ #ݻ;Jq9uɄ0@CqZd`SeíVn?V!1)&k'$>_]CA=͂}3j1F{}\0}=I;]^n_Xv(Xљ'I`S\ Z%9`Xs=0\rx3C|& vu.S&]:7EMr2/rŭmd2 x^0/́iI>W,HQe!i,@ǹf=Fbeh ;o=!^lϮalë_v|g|/m2cK&v!5T@p[daD\oPQȺk5!iA* +sh5!H0R%0VϔcV)h i|}F;I}(9.c|{ϸW̼Q +儚#|ZI3]289Sr\9KgbҢdrzy-~'_/dh54~GqWUq{GW+U,v bFiHTSOιx rN4nga I@\8!='ıa*;O7d̥X&gO3kd~皡gᚌYkn/P1al3s I,(p G BɮV>R+JZLOGXrTcɷa.pb؂y/QQ Ha F|JNaW37AG,ޢ]KL-R"%0{4ߙߤ3A=h_R ɒVL=lNTyB'HbcT,|+;0j^&DTsNuvh){~9Igz$O9=hr!uh||3R͉>4`@P|@!,Ne*NqBAr.'囡Ny䖐4aS-R|)IE^^'Mq#qi + c}yqpҎӷ ~+ sz]2r {E8'-M ;}{-r\92Sw&ϱݑMq|.@Qlt2 `fzPK?i37xO'OZpFk>m7"N%L)KP-zR5 +4HƝ[cco"-^I]NgS ,vSsKܽxӇ\+´l0 V {U!<+=kF]@7!r)K]SD,s!/HxIHM=(ci1=3&+6‘倀߃<r tjcqj!6F$2` sG]` +endstream endobj 2099 0 obj<> endobj 2100 0 obj<> endobj 2101 0 obj<> endobj 2102 0 obj<> endobj 2103 0 obj<> endobj 2104 0 obj<> endobj 2105 0 obj<> endobj 2106 0 obj<> endobj 2107 0 obj<> endobj 2108 0 obj<> endobj 2109 0 obj<> endobj 2110 0 obj<> endobj 2111 0 obj<> endobj 2112 0 obj<> endobj 2113 0 obj<> endobj 2114 0 obj<> endobj 2115 0 obj<> endobj 2116 0 obj<> endobj 2117 0 obj<> endobj 2118 0 obj<> endobj 2119 0 obj<> endobj 2120 0 obj<> endobj 2121 0 obj<> endobj 2122 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2123 0 obj<>stream +A܇١vaٶj8ŀ /ްʂ>UM\ ѰFbIҲr/ 6;|ƘsMOTmәPRg=\rqQR +O3, `O9HdtslQ`)=@W Fl1a 05k|8|5~yW@;/P˞8 +J  Ԅ>(RG(ɛXtǹveS}=JY\̨+1_Ej7,6[95;&W\eˑN/fH-`2 eS%bͮ/v]o"5 5MMehP"o?q!nԗA@~5P)u\a%dq7fFq j6pl*Qȁ1 q 6%x.S4f9Ez~/{K]L8-~7N C,.#*r|jhV]"DG VKpPqiuq8or$=2q7'7lY^k:Ι}8R*1įƘ"8:^ۧ{/e4.a̜&!+*;'oV&!g?SXh@aifTߛT+l7uw/q\F1jq .J@-6R@M3BM ,w qW2^l|vR rƪ1ftn|4Bq.!:{|yHd{|}xQ{scei9%~γ'n+Ӊt^wxl̒syGن9!?+Ea5xزEFWB ^ȍY +l,/dxA͊nV<h0"E}], 3ꕣk VU3Kt6 \Cv5cX~X-Q=Q5u,lug|/;MOoI]5zhtRȜl.@P5+]UT.L-@9i=.-o +OrȧsS9Ь5$Y˪ FY7$R,,X/\bB*AmWbI aD Z}1{chA4ƺf@|JVF.h.BI2M҅<("H^>ITZ F#DҫNS{ }va`Ͷ'R^ Kf@c W t\MG/SQz96[Bo릒nx;v]7Y܈XZSB̬4A<Bzsu 2z\ŁUTǦ>&>Z*r|5Q4R(u_黦SM3VW6gt]JrWSVK:%l";ӊR4>N=-zzV!Í=v$'{\W SLe2f`0J@GšQ?ˀT-!7DzBWC0Tx`>I EEd W9DÚ. o2p8!Cml +֪iYJ+>wsbѪ#iX!&ZNY|%j9Z"Fv_e؎bSCq$n`y +INCk8ʖ=+V)M a1S{ +B~PWShJ!j%:B=ۆTH֍H3׻rE3  Dյlp` Zv!+I9?#v&n(R^3q u|%lA +)L >˷V9L#2 +pǑ!q#W^m3&>ݛ=uJoمL}DmI v@kE>W~8ZNc~k;{Sx[wʹO"‹e?ZMUd~C}`w*S"C4|3m9C*3^_MkD>7 Ȟf#vrVo+[}EXv?6m75Ga% X +xi sa_Cygnzh6Si{S$}ȼ=r[TX58U3J +endstream endobj 2124 0 obj<> endobj 2125 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2126 0 obj<>stream +@lphU'= P8B0`XȤbGZs7!̗іJ g&ӨT-0#K8JӉ w^p&K*m?e"%j0Hr[hcOd/E`"28edMs{ л vʲ9V_py@^t"󎟢[7[$8^1<(7?(]k#i)\`l1|cJcBiP)1]EGƖ32y +\9w'c +4kf% {B{dQ*<ч(v3$_+pЉc'a=]5Wn$;@cߛHSN}qGWڜ޳> &,L~Y!!I dG lKGuIYb0*f + 5[AIKxZL1--;?[/Z/-TU&.=BOIsNڮY:b\ +jZ :LO ]r!YwgsEØ0fg_*xҺs BHXq@#>'ʭ-Z|!݊9hA@{L^=T4%4g!,6][3@B/,VvwM@X\LlQSWUfq 5>4n?4W+G}sHVXW)*N !ڈ| 'P8i{lw6 !jGi(p *%+}v]Y-@DD׌ɨK= +endstream endobj 2127 0 obj<> endobj 2128 0 obj<> endobj 2129 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2130 0 obj<>stream +dcB{aM 2pTh1)}v[5øW3"(t +9O79zȟ~q!MANGd.;ҍ1ens$`Wj>P_ĥ$%7r~lʟ @ʐWW,2j6'HS1xd.ӭ +pmlj$.|"l0[ 6\8 `5r>wMbicLS} +mS5=PE,ogCdxIetuO 2aAPTff;I/"z+i-'!uXݖ%{k^Ej/{()FkG$'-?M,O a½&z;t=0WF}B^=&}^cc$%5ߙl TIp4.l7":2;F|Y; +:xc1bԽwZpUNStQS)g+4[ THZD/8EzP`h^Z#~Kx@̀e i^Dܸ`Jz>UeXAk IK}F]c4`OTlo8Q4Y]5uDā8 < :`,e)Dzyeڅe!^tt ' j+q!D*Exr> }u'2E` bT})5Ck /3[&n%~CFC@㸧&?]$\_>o +endstream endobj 2131 0 obj<> endobj 2132 0 obj<> endobj 2133 0 obj<> endobj 2134 0 obj<> endobj 2135 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2136 0 obj<>stream +{6=Hr$/Y^r*=&;'TMu{~gD4FG5,0`jAҝ! +5U~ 6L@b>E;S`=lI!ʨfi?];1:2I+ጬn:j~nms-鐖O#x(j4#fPCIzSfM)h{nq*"n$C/ai P3eo`O\k հxn;Cir:hcqkw#"mzm+ͦ~յz'zU ٳ;KPz~\2 s}ނMY`k\jX5U+V./"ylk2L#z]™c88v&]X~|57Ē @8$fk2 +ĂnKqHA9 ciwZV^?6T]NR_xX89%H4v)@Uա|R6CH [` +=: ˄dW.]"pz|ʜ6'HF*(6Aio+$_#r&h@:LXt:e9=vuy'<m0VmŬjj4U OYmV%fɩ}ADAR4:DɈuqbrfCw2 +endstream endobj 2137 0 obj<> endobj 2138 0 obj<> endobj 2139 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2140 0 obj<>stream +3n|GlCJ:A!]A|t1!xr])&=*h)`$<34>%P{KgSͦ@t[S6F8| OyҜ5-QU;͉ɱ$}cq oOHLf +KA.usٚ"꛿N\ԓjnaT{Wf/c1"t +8bcg\`k\sEeAV0}6~\F՞֙P8OxRVeѥMx; PG8ʌy +#-(^*@S*Q G+Rۄ[9)YXx4 myO\lvj"e9W* "726w\z5q `)2*{#iU8 hÖTHn6uqa>Hd~)1!Nٜ 8 ^@;Ryl\ 2`kX|*4jR"8z7Yej'= a78(T[ 4߄6J7KʠU4J6u8d])8s _?g=+sШ-tTʪl2l9*x|MZAs036$M  +d9R^8 ,\wRuV(tsEo7>Nl1;4ї꜕niT ]ǔ'|C- TZǮd)Qg}dB .\fC2؀(sah +E,oU iZ9K5yaWжgTƊqGhEKS~A : +endstream endobj 2141 0 obj<> endobj 2142 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2143 0 obj<>stream +[rvuSx#! m\=P*_f-2t܍%4ͭC%KpIq0g:-zVK!L\ŝqT yPS͟ &Wr-51۸q4ńYz5,q,?/`̹Z#e W4Ŝ*T!pO{L4ʥ8^35BZMhz ;eed.oVJ#\Ty c\D\3"@n4Şlv9>g3l-)!H)4ж۾Q7fw_w__sU0$c<[2.׉ץ{j}`d;*#+.Ջ8QU!K망}>Dtć:ӧpxdE ض. ȍln]ޔl/&cT;0@6=r +Yz|Pk[<,H +f!rH&#q)Kǻa~ܱSXOSsەQ2 f'c&qr4s | ^~'FUDKkN EFp=?E좬A;lsk:O@aTzx*Obad[e|z"IKf A6211' d|rkK">8f{w)H'/-) h3./D8|/Bx駱}">5ާ6wډ59uQ*馠'CRU.@͆b Wy C<:>F_$wMW41~gb[;RiMnH>rmM'*ZӁK6En 3~y^CS`MdO?i䏫!$LPr 4񳼗O1ƌDC-Ή +endstream endobj 2144 0 obj<> endobj 2145 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2146 0 obj<>stream + 0,+U08r 4Ghn+¼ zl~{H٤к{&5W` KuD́)I[ vۆžIa=2&n05X +_+)CU~L"3&D~ct瀄}TOv`'e(=f[QZǻw-m~u^Yiύ8tTDQCZXw?4"3Xg ލIC;\rRS۬}4r&쒝S<l tkTI]Y@#o7@n"#$;W 2q6 ͺ!8B_cBh΃";r}5t~+@ VzA*Q۽+6 C|q}KսO^EyC92l R]+$i ܧ[-E ;h}2LIv_A]΍F<s6gkG=!p˟>R^#T5xY~5ɖ ƤengR&yN.biF' #0Ƶ6}!=^HmRB3CFLܝ@l3+mɃc -Vp7_һib3\_R?qfPOc@?i2h~%~N˥TG4>j͂qk/sDo>rFd){iWjyϰ—P>TuAk(ڞ2i69wfɚ`좏 H0Qjf3~2QAyL4S61rsˍ\ Y{w|v +">~aχ@~Dl PY']]s@"bKѺpP}ķ(.V5?AIS|j0>f* ((5۬9ת ն>$h8ᤲ/28iev?V;)bz +endstream endobj 2147 0 obj<> endobj 2148 0 obj<> endobj 2149 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2150 0 obj<>stream +ݕ侖@Έ_'6v6&O-Gtp[gkaae vǼ\wG*ςѭԦ4e7<2cj F%%,,V45L +#G)t9?cc`1ӤޤXTS+dZ9TA;|W9A?-WZU#QաE2r&}Nsf$Y*fQ~j5Dii<4Zle)1#R+%(eW!xLE%Rci!5Z;a+ 0 8l-Vig!SPj%(ov⑸.4'p1`ynL&:cjްbR\~oe@Ŷo2w\W?(bdorU@&;S' =(GNۆK!f؇ijG]u˵mcD_q~X@".瞸"Nq!֬DךofM9>9X\~Ϝs,υ?YtLHVi:6A{M2ǫxUzط.vI;qZm[E WcO%$q #uo4BeMߜ,D w6M~B#ңDrrG>Nd;?jA"p8njC `iY_*mR+J@)Pqɴew$  U|L:@ƁЌaB sqm{Hf+~:H.-^L#kZXBcM^L64ekl"ĻJwb(\ƕ2l^cF24@Jd6dx{ 5'һm2҈Ӛc^|RUH;}-z1wppD$ T3pXx ּ7a(屘9/#݅O5۬ySh* F`~\Am˝_ZT Hff3 +ݍߒgɭ͍ B4!]kM;\Z=z㛘,2fpLq$C| +endstream endobj 2151 0 obj<> endobj 2152 0 obj<> endobj 2153 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2154 0 obj<>stream +Q d`d b!+of3X'xt0#.$\Dm8hb$ S*_!Rњ4*/ֳ:],uSIy| %3m QMouDPIr;>:x"H|x~q͓?hCCi?zJ =̦O!@egNŃl ݇ d({.[FP$V{ȰpQ^_!_iΗ#O J=DtYJUG @O"5({8}u)d|/G>^:h윶\ұ>PGP D͉j+8?vQb(Xt &eH:$Mvpyp&|~B׏оLޡΈ&0],R?0R`}ėfs ZvLvsGrrMx,<㾳i9 +5',R2Jx!yZ0 v뵢K nuBTl^1":~UZ6KCJvc)\}Ӻ~$L~q>麪xօr#bn]C +b%u~K25T"q> endobj 2156 0 obj<> endobj 2157 0 obj<> endobj 2158 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2159 0 obj<>stream +h>b] }) n +&m !Rk \k:ս{ŕ`{vj F˒:n?`7as7ۉHh!thk1C<9M|eP98^f=) m1vL=/4a~GM'iɧϲ$XԡGAx\t(b@#O2|q\Uaϑ1~_ZeP bguTvS.] wzYw~iP %^>%\JlLcxkƖ&ȩGqd}Ts[0SnwS]wP?;5jȑ%sIY>`Ͳyy"؂sTU.>k<טp_0ja/#MrLu6c*L ub8w#&*Eo$dogzZI̳nOxgX:'ۀgEB nPS*X-8.*?GeqMJ%_K1 1=1P'銜#fH:b%)"Z j6CO/__zr hY#&2Sql8q8^5 [2M]4wi:cT^p&r7p[ճU:5Gom 0_f'Wx=am*GSͲ^Eevrni&"jU(Dgb|8d3FS3K!gL~Ni1mlzզd +~VW0,˳@ε6D޼e,:wO5q\jr݂+IVécQ G ZTN>'Ji0cB&ATN EDjp VAw !%H_5y"U4H\.687T1y}Wwb +endstream endobj 2160 0 obj<> endobj 2161 0 obj<> endobj 2162 0 obj<> endobj 2163 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2164 0 obj<>stream +B] eOgVI8-';^l>Go$."9IZ's?.BmN6~^|;=Bf{ZEq>m.7~׽OX2Z W0N6&Qs#"pM& [+?G Jr0Y]'1=DK}zI`OrKq>#݅Cs\U|%@ %nR$v),J0@A(xV'i/ ׄ6DhG"iJ qG +]?@hϚP9)xmt{YָX⢆2k|͠&r=gEyM F8N9xer}^C`K9}<*}e;[/=r?Q +C%(OgYu%r_}ޒ[ݟsaݯuaiySC>Ψs ?ܽ`R܄ TĠEu((IaK3EPkt`3*ԲC-+Nđ97pmn/pU٦ ,Y;"JK&N5EQ⇹](^<$j0ybals(BZ>fݨ;[/ā*=7khRK^&x!/J Tbr}qq^]dڂ шۊ&m.ȈYUBrZU(G%L>D^Qvk! + +5iY>?-XpCjWР +endstream endobj 2165 0 obj<> endobj 2166 0 obj<> endobj 2167 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2168 0 obj<>stream +IP2OoZ3i<ZU:=6hsնbWUzݡU>xPLhsA4y;Ah)V־]|'ۯqkMwA^<t,pHl1y^.2Ғ3ϵY=:[vcPeGސ*pgtmp.FS75kVE f߉/5aӅAGi'rKAUzAW!$OԊZF[=šMo%Zg(Fl%|Mn^0FYͼn2.5yl`6A9{0r}EYf7_J 0$;LG~[RsK(_B>ʢ`7z;ŏ,5 zD~ĝͤfQ!2gv-eyO%'_a+P~k??s9R9ݬ"1r6z1 +BUN#4哑FbE >pa/x%9b̠ADmق fN8.TSce@{y(ې_K{=f3C# KaJt^`W(Mz73q)NU9;<(.aqw/-i@a;qaKP hG7.6=mZA)VB&P=} HQ_%S6ayGw1N͸H 4mG*hQlUpLCp;$^L0LQtP#Y1ZuVAУ sZ36-FwӒGjP(ݎOφeKwΩ!}^[z d7hB'^@Ŏoc/4]+)O~@m(S-bQV{I%@ǣ*ca@F,*ƅ=6 1<{h Q6&;='BlS- ]~Qމ?0_H6`S>"1M-Aߓ4 2Jey2i8\%DΌ2u  P +endstream endobj 2169 0 obj<> endobj 2170 0 obj<> endobj 2171 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2172 0 obj<>stream +kja;Ţ9ݕT tH]xw 4#;h(IC5Rh|`ٌa@Lj30 );30 5ev鋜`,GvQj 3&_R*O?,MocUz T4Jw6ۢYIh{BOs¹%auqd'8>l0:-мKTL/]xB+wkΥHZ g4 G_mHR0E'^ݖ}\*#t>u^N@Vh`$D&3:L})KٞiBߤWB'R,N0#Ճqee82x']CnQS0H3*n"L.SZ9$&^į͔/ -57|1gՄ,ӽ_+` ,=nY81͝ShƼF8D +bV x_t?zH Xmݫ{u` ^{c]ʊK@"y|lLpsǎ#r+p_R5%qW{q^)j&S2x&De /Y.iCZSlqEr}쉗D2n!$ M~"m@E> endobj 2174 0 obj<> endobj 2175 0 obj<> endobj 2176 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2177 0 obj<>stream +ި=˥׉^i<%,kgc2ݗlEfW2#SbMk;*y2~5bV%mݭ/2Ugb&j"M HzPtoI,"`v+3?y@&d +_gS pg[vѺ2W÷!Ҩ'IUW#|Bs載gI eO8v i(ߥK3([-鄞MԫA Zg-vj;_U(~>1:kCs1ʴ9ʡ5lZ۴24E✎j˜9ǵM׾n-4@+6G="U>ony]M'0?.Dt.G|^߂8Ie$sh3W +9z8Ⓔ30{ hK?@tQ#-LopQ}:gÙU''6P%j) tk֙>rYB L M5fM;i ..XB _UBrLw=o,)*}VS# T{DqAZ@CP5sY%T|sFE,6;;wnI,dz◖dha҉bD(Bt>q~|ܓ>psŵ)3tjpr" ¦f|k6"n)Yt-' +endstream endobj 2178 0 obj<> endobj 2179 0 obj<> endobj 2180 0 obj<> endobj 2181 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2182 0 obj<>stream +Ç+}{j*-T~¦E0W/FH L+P{/+Ts&ǰ,~Mt}R|0{o% k;1\L'K,]Q+rxܾ@y0N"-{OѲӂh\UYϻTP\=W /MxcU{GJk`K);tPH\2So -Es_y{B17D[wzR[r/R"wV\W^oށ{qdqSPuSx7[,&72-!K~rtP~y|z8:QvRё,"#uu~5[HeFPհЌ?sm +0lĆe2Ye xZĬ@B`9n +Lsos*IԌt3TAЎlk퀎.ٽ!Qlp^U#4fms'K;ݣmWw|ZlO9˥;Mǘnx}Wk@Wt˥ZcΙ@AN#p+ +Am/z51t%rg>BT1'jfoY6w:lIoq&Wjuĸl&]H-sQ0[t:3+*W#hݹV6ZջE!_6ݚ_w9b'̺=]5Il.߈T&6WyǤæKݣg)~f+VB5Q1>0јRsOHB2oBֺa輬/T'.|HWjLomG#1]f >y*ޯt08Bztp|t#‹ 0s2_l f`MP.00* *pkI +endstream endobj 2183 0 obj<> endobj 2184 0 obj<> endobj 2185 0 obj<> endobj 2186 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2187 0 obj<>stream +XjaSc-:`2?:k)V:CKXV熑› BLj@&8ǃPIJ XYHTL;Q~mPFbQe~2 XBsҟW?%)MZck6?ҿR2o/McgA8?9M vTa [剗 IX@$Yή67DN1.ȹAؖ5P ~0gY6=@MiRBSdK85;?5 %~₩g‰BeB,HqSp1my k踆"Ї Ybf\/y/gKDHa 3 +VFo x'W l&>3}I8 t[lGoZNf܁T$⮦3iSNZaoK EWΈrV'O0e6u2bdWb,(+@և*miPYL1w3_≅7\j,9L'+ ڸQk0uAN& (ywIzy{JMZ6.l)8KPnK0-eB\qμhDLIg2;߂ v9x|MP%;z+ϧE(9jxf3XŲZ=QVaD 0׌H lZ{̠V$&۩o#xႃ/P3 aDkՉykUzhX;Awsae1gIȺsE=!MN9J+1L!"<͚P;&v| ׇ\k~ԡ"tT5;$MZFqc.`Kxzrrݓ،G { Xx>lФξ4'\/g|Rx{U,x;aHVׯ!cNO!mlǓ+-OlENy|TE}peŹ &E=ie6AmHl[U=]hP%,jͰ+P$")jT Bx6WLGգ16e +endstream endobj 2188 0 obj<> endobj 2189 0 obj<> endobj 2190 0 obj<> endobj 2191 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2192 0 obj<>stream +/Ix&uv'?k_Vs\ '{5yC>3K,g+!C-5B*{eZKe%HƧ?I#r ?raŦiL^fOQVvu/az~* dM^Xm*4-hIN8 ɛ/| }"MQRNH>]{i)ICp$Q'ԗyp[=m(Xγd+JP//}OPC+!gc)TRsz㲳w@()H*>2T"Uooa>ŇvV=q;m@';c{Zư&]Tf7X2HL<'Δ"H`J~Igg_ ?zPwfNX`r Ml ʋdFh%{H=-*srlG+."~k\+ sz>BAay@fغy;L߆~NÒ34n%?o2Z}y[:jZ%2E +wꠧ6\AMH}cAd + Eѐ̲yF/Խkl׫,$Ýq?"&µ,G<3MA[܏^.h ez𩯟L,62"oAzzU`,i*{C` k2t3 ZcZ j ]TܤlD6Ӡͬ 4䂣U ʧXyhAbf!FCdCd ШF@7zbEɶ!* + a^\Ĉ(q{bN^RV"F݃rR{`2JۈSy#=@%0(fOݺ:c0B{}R{;ZtR0:3\ӇIZ-&Ely;{n݋ykoqˉ) +endstream endobj 2193 0 obj<> endobj 2194 0 obj<> endobj 2195 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2196 0 obj<>stream + ?U[19]\`HC=uGag},=^,?zd;E#2eL;5I̼gJęM))DqYPO|Q ђŠ !dGyn]ke41rk-~uw323w8)g1Qww筋k_U,۩V"kAͦ$>\v8+F@x +8=phcz/2,rg, h2 V1CNT,X)k-b{\=~+ $jQͶM&0 C\k:BgB)FH}ƗVwiUo).ϭ#eʨ"sEU0s:o +8I"@TP޲mtk-v4S4W+a&v0P'Vx!Dn90qw뚻uue+QlaV~+ er ی+IW +w^ k#6YGR=tWVݜ-P6kСҼStHFiG!vzGP""pVI|(kNYRR硰B:#-rr`/o_ӳvA HKGw@/AMpy> endobj 2198 0 obj<> endobj 2199 0 obj<> endobj 2200 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2201 0 obj<>stream +u|+ ](8e)IddF44hiڿDfWOy `6Xa.Ǚ, _3a_ +KD4@֟Aꯦ `#EvZ]iYgQd3L(:Z.A0QBPiD}W@7!.^ܡt4ng=I.%x &ZdQPlëOC/-IE@&b ]D/LAΟDD0Cw\J@UdH|ܟEJ +endstream endobj 2202 0 obj<> endobj 2203 0 obj<> endobj 2204 0 obj<> endobj 2205 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2206 0 obj<>stream +jk `fd& *!'zuzN}u}sʄ.p&G30d v%8{1m@@Yv ,a}1(M]&nha"w5R:.s)#X<[NTW=#^^- /{(q> X}]y>1trF5BcNϹuJ҃*Vygpz}BAD\ɒ ' +a[78x"PLP<缢4a{ +$yR' Lbh6Wgbqv)CjwǴ/قՙ@%3e-"Fy+>Y^aD~eKl߻kwȇ@~<|;i>tX~ݹU #)QO7Cv}^}5eǑ*Oj_> endobj 2208 0 obj<> endobj 2209 0 obj<> endobj 2210 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2211 0 obj<>stream +byG VU:j~ Sbkt +gQTJ9VB_IpW$>ERg~Gv3KNzFlk)1(?pJ߯MbJ>v`$"Z>nVrb^;gylat]XJK9ЦS- Se +|6>a +"KybN 0 w4?(ԋch𵎾ոaqAT1$J=@מPt$a&_@"Qn ݕ +V|fL¾@* kj94丨G[(LZc!CYwM9?QC4S@vY:Գ"Hv^"з=y}2B`QπRE&fhzWyrZ!)c +E,޼”WDruT])4/[8p)Z'7xlfK;aVh2U|\dMl: +_knkPz% +֬bKT+{ju(DWgʢx6^}CH O-^xfN5|AUraUpR.w=5E43 `-kև.vk~i>Rq) Č2BL,:qUcJLu4KKhJbBO}LkL}vBq4pY sP0ړ dvڔ#Y8e:e!X-R +߫Q|L+yQjަQ`ݑ#.z^G\v .d;aa0@qqdEVbFCrZ"rXzh춾ۋfGTVظ=KgU!Âk޳MܔoZdN5$Wu\~a EASޤRG>AAyG׻6*"g:rxs؈-"pG0UO3`'\(򦩔*2Z4v k_H"j&UAI +endstream endobj 2212 0 obj<> endobj 2213 0 obj<> endobj 2214 0 obj<> endobj 2215 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2216 0 obj<>stream +# +AEƽR|K%5$(MYTҡE)/!Yޓu%?oj6\Edb)W|#/ΚiW^@'9Uɞ6+a;ܘ"7ڳRd`trxr9z>-*1L^L Ȫq ~B$rA鍡Ŋ +@՚TT_9Fi8+}3> 8&|Jk6Է#.ou/KoT6.Ū 2;FGmzW 21¨´˄<}%r][5Nɭo|;XF*J\gOji(V U1<+ +Ύ۞~/jX]vǏ;D2/5Oi(p?'7+2Mw~ ++_ exNLbqS215{EP֔_JDvԦD6F|_7+^ڪMlY5ܒ8,CUjX*e9#?w6'vwn/ 54زЁb +A\=3Uѩ'f"sx( +KcԂKPP d+2gE,ߓBצּqMu2YuE+Z0 <7\ u G֞w[Ͳ-Z"e;3/)P*+𡕚M!L m2}.Z2m@wϯvl(R0GEv]vQLkXH #فy I/´!!> L*܏ktF,-,^cWwOMj.N/MLUCh"AeԊ>c0x +nWJ©<]kQd*cLy(oqpr_VЊ@>;䏁{vϥю}z= +OvPJ1łԲ2]>*N>Ee4ML+FW/};NJn28\ wCyq/>*2o`)BLh%ȭӭy+,!zN͙H[Պ + W̃-mO{X:jv+Qn ,J +endstream endobj 2217 0 obj<> endobj 2218 0 obj<> endobj 2219 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2220 0 obj<>stream +>u҉'޾ps\y߮MN|cʑ4z1ލCO1ati/x's>F] @K X'#?pq]kMĥC +`/nd}d̦tiyRf>u$xNObd Z]2ᏃX}M=$ϕ~qOBod)4KR\ɌGkZ:juO3ӰmOF$E7ٞ=[/j4"=w{4(x-uHxY;&VNԢxBor01d2qm|) pΡ^+ՁTtU)oE^G"s}COe.ΔpEf :)ɩ4My* aJ( ^WW7|RC /HZI/!$Ad?t2p""ғ %Wm}g A<=Eæc{D-adagP_|~oV7ᮕ]p&\=@3 +@ydOՇKCY~f0[۠1's? [UIbx%nF"!6xNPBPo|$uU# _ +MDÅ7}x,i}[vZ+Ưof۝ xSl% *M*j?ԡCjу6aeʲT{ٸxK}y@xhX |i 0Ғye]kp/PaH9wSC "M^B@aetdvwjH>z:tŎbۭ8,문ą7[/ΔvMU7F17 lg0-@a<7 ab $ h`. +EvME(j8aUzƫ^v?+׹ z2YK@"%WⱷwիyP̴XZ&Uɇ?σ>Hx +wR[ڄrD"αl8;(( +Uk +endstream endobj 2221 0 obj<> endobj 2222 0 obj<> endobj 2223 0 obj<> endobj 2224 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2225 0 obj<>stream +CQs5 (K^8:乺KV}hXPBB@WGV=KӌM(h禤Z꫙En1nn0x d6,Ƞ}qA`&# +tFxL4fC5@cSe3@ǵ,;uw: O +e`?LʾLZ6e't + mNUuq/\O-FLQf`zNc~P;i|aS/6霆 J[Ú$q^U8Lt_WKٚBp0wX=Rjo k7{k#7&/L0,emˀaúϓ +ԷF^x>͋ + qPލQ\%B!֗Pb X@_;R8tash5듶V<#$x9qK|''cO0+(Րh#F!%OT#G?? +5:QnDx6̂3]n9FZ +\GRF,qpXb>V>>aKVzV? ,;Aw +Cgl> + 4/(̴H0Bar0 +Kt.Ei\ΚY½|E%xs#$H%l7eY .ݷZnJHVGg|, yc4 =u9AX[}RW1 $ eO][?EK",ƶb̥ WGi*4oANB+{l5Tʔ&ň\o\ +"=.oY.LR4q:y'Ћ& ћ#A@ GQ ؝IO_k**\{F+LꄣHVKob;@>%ƂSq$!}/zX2vWuD!@66 +hvՂ#)*cOzz)axSWtl33WSר\hZ>zW+'d5EބP}'ϥP}qکHMqIq5}sɌgzѶu玐+%g^珏J4(ȸa2ڤ +endstream endobj 2226 0 obj<> endobj 2227 0 obj<> endobj 2228 0 obj<> endobj 2229 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2230 0 obj<>stream +`OI%𷌱znr%JKbj r + ĵVӅ( {#GL7 ,ʥBuSb|qhm7DHEpTk1BnNpUTx134L0cfrEKkG필d +/9XD7 H_ȞyHe1 ' +/h<;V\ga%=xq '8ߑ00o! +ڔZ_$!?nֱGgx۔,3"7|Q*CJѓU!e~MbrX*; +鞇%ߔG7! L9X0Q"12rfOZr\uQY6*xrkJ&X:LLq0θ챑Dxލ2HMm(GSz=sިT{ #uvI(=sMvUC 0Lc˓纫yz/䒛,C *ȥ +OĂ.y}<%Mtq/ۻXS +gcY26~ݥYA/$ +Hr.W72wPDG)#Uؐ%ƇA"g |1>)!4a57W$GY89QR^٠sYCz|Uى.a._Q"8,]N sI` =iԈmcn,׎b\龔=oՑVqBv ZوuQֆ:c6ܪފ0l +]V7})I̋7UW}>6fs -r +cH4 +&5+ײ} +ۉDm`қ_:Z5êN(rŴ:YZS, ZuL /:FtgD)(Ea/d^*4`K. CA9A59@,M7gծ +7B#n6߁A9h&Ay2@?|/ͪ+\?IK\y VyЁ[Cԥ-m('9 $<1 􂈹,an {&SfPw7klVʒyrG~!j$nF繜M{A^`kޣm+rY]dW$jo=#"7;< x'25S:01d{*0?PbOElSb樵 +endstream endobj 2231 0 obj<> endobj 2232 0 obj<> endobj 2233 0 obj<> endobj 2234 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2235 0 obj<>stream +qR +ܜMݖKQ2jl,j>|0kE1{C^.dP,\~CGteR[C@ iX ʓ&VByx$EPbN7?PA;T670VهePTL'b̗Bv)Bp>O d;WiHf$a +9, +=:#=4`5= -"Mě)E5GarNuR YMc;Z;āK*VhQ{mr 2$Xzks'&˫_$6Oq<-P: l!FmrbAEs.MC9r뗮 =e6XdR̗SM/7<#ҝi> b4ՌkYv9{Ys<+BKc9$5Ī2/e@: o9AfTgh2|0PdG>; +h2˩ƟT _}U!(B<|kMY;'1/U LmU gcҒfu; vNL #BMݐko~K19 * B~He!1VhH}$Upk Ex4XEӉ̒|9GMI?hEZW +2&ެB)aî:GpX*=.@B${^i|xMs< n+qvT1fu-8P2Jr@kcot\PMa+TtpF JԉUq#}[N6=E{L4 #=# ybܙ~ J'~Jm gjtC }dP[AP]TnN, zHfF !pci cˈ;˘DXfPm E7kW3^e#my: 4\I-fBI۩۶ +ݕLצJٽm}L͌rR~6 +5IT #撅5t\slؤA +endstream endobj 2236 0 obj<> endobj 2237 0 obj<> endobj 2238 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2239 0 obj<>stream +x 7j9B4 X qGae6[ rb^ osQ/U|, NY_7+0n4,]^s>1!Yu{ yډ3aX9ݰ +rN|y&bؾmQsܹ(ѱJ;؂Qus/7;eԋO +endstream endobj 2240 0 obj<> endobj 2241 0 obj<> endobj 2242 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2243 0 obj<>stream +Z9X@E>>ne,`6Mx  X`a(p5:MZ!ò,m(eVRCc˔pPAt +0/^vrq; Y +r6t_mv&6䨶qcdZi<;t㷿Oූ}UhnW\p@*t?E߾x)8' Z ވn0/1MZy1uV;F~1C"E{ "fqItMC>C~RLNŎދ/o@&9UIkD"1ʞPmt՟m;/\)2lPCH> endobj 2245 0 obj<> endobj 2246 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2247 0 obj<>stream +T@[$:* +$_Mt&{PhNyQeb +a*EYwD\z`9e>3 !zjN^CEfI!!H.CX+A~LO) kP9xyVa(6nng"7,ةABWQwG{'aC9ŘIǷp GiyQF>)ѳWW͊A?TW}4N^6GbSݔRrڠt/ +nHFAVËYBo7U/ؽq6r:"-΄ IMxX&!E-ٟP9(r`4(~e,b_U9}"^LWTo'Tc{%AO?9w5^rVG4;k~,/ nCv?UCa@8AM+eŗ`tM|[ ̨6xU”0RV=l,c)#$M,ȭ5MȶAF2%6yO%Px-;?m[r]v AHM^vXiP³Fi#Jt!ޱtДI Y#Tunlx ڒ9 lB*"amm~ +h 2RP [FeB-5M4Do wĬdX~D5/JKaW'[U{qmk> endobj 2249 0 obj<> endobj 2250 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2251 0 obj<>stream +zٓW%{ Lcf+,!æTWOUU%mZJ}Fp4.|Λ:%KF#.4Je'9BSZD"NZ +;ѥUP mSc< اԌb2yIa1_KL]u;FE`b=i$L1ϿuڶڥtlyW?5@=軬\*WVD~NT(F㯬;BFB(ϻ5F FG[q_ea-cth,H lQ +$焖םбdURj rHYaQ9}ѿC, XJyʀh49@t7.Ob\do|d EɍmIpNQ0%T  G&ǝDG+r8/eB^bd[oO #U'#ag1`(㴄5ߩz$]r/5> J,\?ٚN9Y;ij_2j"?W82Y…5K]XwAh0(OJ!g/LD#R4i p慵Zu)r4NXRKFf*vއa[gnGq Fݠ^Q4=v TQ`q-F9Zz\̃rg0gR ˮܢxk9;:tI'=abw/X%⽗;j(£bGhޒisQ+nT ŢءCtCCMM#?^~g L>T03JʬÓMff%; ^hV? +GJw +yC|3|$ygf d>]ܞE +endstream endobj 2252 0 obj<> endobj 2253 0 obj<> endobj 2254 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2255 0 obj<>stream +W<6W_ +?&MX,v .<'X<).YUx9}98L + +źYݩDaA4&O;od-m3=&gQU8lqk>W @D>^qLņnV&ѕ |-,oi@Kl^a{aJVr-@B]tc%6J_ }J'4Bk)ԘyYe^s6)/WAð19~rK >C),Rڍ3ERN&YytRtxTlq Pn-ypQiש8};9Ƀt,6=DnE>*{?X>B{K.-ARjLQ>iQ)4/&,]̤%H Nq?%7.ۓ,%j3t|A(ᓳV|VMaZAWu ! v/dU9o5) Tͅ?Z6{/Tѥ{ÝzGKJگ !',J_Ic 1XY7ju0>`Y<1R4Sm;kcd] ^S^PNs7%RYLC(O~ܽ-yUc}zREup51מ]@G@l"ηqE4VGS[uk_D~!':;`q-*bmNe.Sffv@]Oc"g:I %68 A  +ًc^WW8b/tj q#kI?޻+\C0nH,Z01/,/KJo!9L?2ԷKbEhڦjPf >n&7F#-L}8Ŷ y|~{՗@1ۑGrV- R8zHtAַnNYP$tP0$hgLO)/ޤtf +endstream endobj 2256 0 obj<> endobj 2257 0 obj<> endobj 2258 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2259 0 obj<>stream +(u|f@n!FALYRm{Zxek_kIQc9D~Heϯ|?GtH [5%/FiҧU|uD /n@Jg^ vLu:{̦8k.79C @'R{KR7سx(?0\OĝE AZ>mMtib:SV7[81ˈ^Y?:`\>םIOs#bjA9P4,ψCwaF +'؅_|^-NU`-;=Rw=pR:Aٷ.,YuyaPԗ@F88[A,p8ҕUXhƟ /*mUM#AI(Yn0m8>N´UЍIrG^W1KNw7AA<RK]x(3Rt ޾i[8r"Ma`.f8m!BTu਎h8 + ^ No呺ե.FzԂ'K|V|<A2iWj*SȂ;9=8i`QFЪŻǥIjos}`ʞ\K4TuʰB Dw\ H #pZj60{O%wy+5ie8G y{^ײYA0xK&]5*JԞC7u TאKMvf WPT6XKc?"fXBRcC6Jr< Nuvݱ&TnXP9S$Zb{E { y^J? 1;FIi]1Kž>Usbi>bA{rW5U0U#z*'6E!v(%=\ +k,ėkZR=}0l~#mτek.ڄqOt<>۵qpskΏB$Z4qůO +k# +IH|$P<(ZFZN*`ڷҕ}޿en2g*5 ԌGty4J +UFkO[؇㔣2af|WՁ̯l^ +endstream endobj 2260 0 obj<> endobj 2261 0 obj<> endobj 2262 0 obj<> endobj 2263 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2264 0 obj<>stream +)~$17ݬ;#.~P!v#Xa*2~Ծ_[o7o?-I iDGU**In:`) +SHpYAzhDGԋ}zO[(y(Ũ~1ws~2 rы/w(@eܙ jbJq)nf|["]m:3D }@zd J={I$nW +.R<;&Kcfɰ#gF j`Xņv~2s eJ;a@yhez.a 1+E\C|'n_$ l-=f>e.QKD݄˴8I@}|(J?RKkoSňΒbYUk2|EAa5-#6P領Vo,0 iv.ыB]l \F.5%XZ뵵5hmKL?9oD GE_g%'B67P~?\g%D4dxhPGKF?w}ۖε*oN| ^ oƗhCג.5<=SCWT=e(\@Qܺ C2fO?ojUNՈFX(: }Y걝āDrnqQKX$"NV6фQd]xtw)4?A +nq>Vr.he~oD4cU[\t9`Q8![I~WBWGW>WD b-B-zs~ +0S9qȺ:YJ +endstream endobj 2265 0 obj<> endobj 2266 0 obj<> endobj 2267 0 obj<> endobj 2268 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2269 0 obj<>stream +u/3~ tC4Qj9b*7XO46.IP0)cqsiYnd'_y0f;{$9seZ +S ԊR>*y =cLM$c¿ Žtጣ1Ĥ1%s̄+ -3O +P69-OIH"̖6 +oLMtjXS'Q׍e=`zw@_{yPH^iqU(Ҋi*z5#`kQu}zEa!Q7ٹL-iZr>686%}/H\;RqWFeCXeA\au &@XO#7b2kEE p85Hԇ #mƴ`2sĄR :~/=aݯ!2E_Q9kX⬐,'evu  +Y}?gPG  4}8~DזbG7>L jxE;+&0[i>@VY_ǹ-=/-I o#f^vʾ~{T*zG!`)4's{(?o-ʤ#Y|&eR02Fz4(Ҕ l9;%-{t;P䭓'G&}ج΅{kV7/'@_˺)So5F`=+ QTqeHDbDI\HB餃m[> endobj 2271 0 obj<> endobj 2272 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2273 0 obj<>stream +[<}/43Vi)[TY0`7/HVu;rs(%v4={*|E\e٨yvC J^G#.ߗ8cw`τQ2jj~댉xAfwb3'9={:/S=xЩ:r$'24_Pl*wwl=T[T*'AK,>Kt  +emcNJ/GƬWthbW_Ʀb&ƻ+C| ǃP;VV ߼69-%vhk:`8 ?9󶢴Pˬ)%rɀ~wBdVچ 7K8hnK4>LH!dy[wvZf*dP##|AKCwu# )z()@Ma4rhnE/ž$n7t X~o CN('ޭk]L`vJ̕ @kpomvʨ:jZ?0C."vTPcP6mGҊ0s|lc]OB[?+^,7caZ B§swOڑ7 X%*@"밡 |} mPzDP(%gn/`Zs/zpo^=Y!DU{q!`I| +CǽR(;(81F*feY2o㑫,R>i`+ H@u!@`\ө"yvR,^Tee_셛%5s[,ni~NDo17b*pțܡcrH!zgO-{<-#H&]j%8@a n0h+˓YBKY$c[W牳o8 +endstream endobj 2274 0 obj<> endobj 2275 0 obj<> endobj 2276 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2277 0 obj<>stream +*?6sU!|94Iqq +o]O1Z<_1וv-PпFT<"4kT _[Դ/LɵFJ:4hi4rmE\뗭mݒ7?]Cĭl"|3瑖H2u\t?Khz/ZHX.rqEpD1I$T &HSK9ﶽeOpԔ\,@ V)"C@wGǨFa3)K2Y541R֯}t鿏i^:G{25cշ+q*qPR)).`CV%)e0E2?ީn_W:n,_ jfvnƃM7E}򎐟Yܶ RRt`c(Q2 +0;YbWblu>zhn ƞ.yMkf*iL?^~< 8+VR0~im +mا |eÍf֎ vQUQ3XE2%O3Ea3GXPmcgOؚ:2ˁ`RRQ2fh'+vaܶ/0#56]>iVJK[ӱC }p_h+e5dڋ:W jJ M .c*Q i AM9L`7<6;Ti7c?Øyk\s;0Kr=|}/meLN5 +[8osiax)o0ʖ6^Y*H +endstream endobj 2278 0 obj<> endobj 2279 0 obj<> endobj 2280 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2281 0 obj<>stream +tfDwl5o?klOR6}>elB=€XZF4xWlo&)`6L`T2SMMD#KJre͘1Lqn>CeM77 p'g}X5+}1X<67A8<3)Ŵs.o$D`j$lXB6nb2:]k^J\Q:c:j۫]{O&|]F ?Aը)ӶplI]t Eah5mGh0C*>zAePr4Dj{Q +[x7N(R׃V*]PKs2bUUy|_fЀ}B9G6Ӱ'm)@NGS'Djzj 8fHVhЍaR˼x. > endobj 2283 0 obj<> endobj 2284 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2285 0 obj<>stream +_ 2N6.H]EUHϽp9w誸̈́ c`SKv_gUn6,y_ ]WqFGOeĖp4&sR4"w ͘QRhY.S)zװriR +rFIZnG2*X)Y: re(-$SIHkԑipH߂`)MiAW^[4 ![LG̎ Md+o.+4W\-0$(cVOwC_m9 C=/ܐ\B<^OvL[0gTg$J=(>lgQ沙syl y|\vI8N-WQ^0̔Q(Lh3_w>ej@}A!=K>BD +} }PjеYwAr41rfQ7*T`kP(nư$qrX>BX0#_=a/E= _ʍqʕσl-CV UتVC=n;G1JZS&6y #clQ$g_3\iONܔS.ۢ ++Ƿ{fRuG~j,6c!@qh B҅^#"Ձ7\ +PN/|(b:,p@|fȶQivaL5jyvnf0 Oދ圭 +endstream endobj 2286 0 obj<> endobj 2287 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2288 0 obj<>stream +&?9cQ*~]Q ha^' ޵h;K2oo%o`7~v0 pK=HoⲊ=l#AٚhDԝH/=fƫ,r!06ëoT^ae8&NOǢ1u'0!4VIr{4J V𥨷пL +E3L'Sa!XB,ҥ5>3XlWth*&~c7l LBVs0®Ec]θ[κB$lhA1!B24NҴԱ'ТR嬡 "eۜ4IɃ(Fٍ-Bh$OMa,r="u*B#݃ !H*1MR5Izfmg=w_Pcy`ҭ 5]q}nmJ4TBi.תnn9~ =nJ9F*w]lg +k\K]nt1^ILXqޟN6W5lh&%$~Ku[_o$cMUΔt0ǐ,ZB?bAB ECv Z怔%vάj,g1j/rD6c~Ѯ f BWHX7a C +޻#[UMGВPsh>>4jwt*9iu[3"#T D$@M8:+bÖsSyN;9a(s ll}A< +e_)׈&UШ=`*s[~7爌i(";Őj%\ܨ-& ʢB,57wCV? bnH.N{!HنΗ`8a!DjHt3me5i?3e@ku%`mkڼ*Β)Q?o:V'@喑d <:+>CK4ORTEIͶ>g@eP%c/MBbxcvI" eə1f,|mxwʇ`GgNuV:+K +endstream endobj 2289 0 obj<> endobj 2290 0 obj<> endobj 2291 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2292 0 obj<>stream +TZۼ hMQv;M +cVIRG],*\m--R;noyF./wR(uX7_牤bGVganISykwVs4 v+;ZWv9/gWyP5@ԞI8|d 5HhGY +'mŴ"zS/ Sbk]0jdƖl7j0Gm<\3ڝZ [4&C(õu|`hڍ&,ÂqO 8bbWFuo~bTȧU *U4Y".Ct?]?e-{_мG<{~sMǬ +Plm-?f`N.#q_-T;1v8L]Mve +WCwzrGpD2/Wa|GzæWr`b 0k̒HÀG=r R] +%ۏ]+ReOGUg>!Ɠ8(h>f ZZ/7u؝߇%GxZܺ,fSȏZY-e2[zOvi"ּ C ݐq)Ք{_W0ua6Rt"F>Qj-^95w|m6^}*۝XhDȮTm:n-.4Kcm3?yNÃ(dJ+a5`®jjYra0?{2\K%DNr&PG [VhQ2kN_WbY9WUeH ;Gl<t{D^-lTs^E[TR<n.U[si_oJEd\#[7r}+y.^Wq}J?((CL~)mgkG}MT=,pŬ7B)FCN֋c&'cɱ|Vd2 JF}%86߶_$h>Xt)(pʼfRCo<6bŒ䋇ZOEUO#ʗ.m52k +endstream endobj 2293 0 obj<> endobj 2294 0 obj<> endobj 2295 0 obj<> endobj 2296 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2297 0 obj<>stream +ƥm )RGkk&B3+@{649yG.Wcڤsķy-s^]0A"]h˰:ծɏ#*$74ʮX*󳤯L{ɗ$o +8ěK욶[^>P#3W*0um3S =YHč0Bd8"6|qC;MvvMz?\PX[ Ǭwl-bĆjZ\*͆&R3…6$5cs(,ݥ>`Xp0b5X4ݍŤ!04|+J_q.>R+ %­DVU;:iRjǙMkfEL{O-Wf8)ݿM_dÀޔ!r<4[duXUL|dvoo̗8ލ^-tJ.kHEĚzTF'cSE8/C*a|4kq-Þ>v+[™I7D;ek6IZݐ<Mkj5~3~ZǜPiՄNƪ0}" 83'ކʃ U@Tzh38ask?s>|j$G +endstream endobj 2298 0 obj<> endobj 2299 0 obj<> endobj 2300 0 obj<> endobj 2301 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2302 0 obj<>stream +4k^HG%~S5_BuXv|nX5.=yJx&rt7?#[W?xrAB Yl>DG&xFrvQ`t۔|}yK)`W93{sN7'afc+U) +3|*@W?#M q=Tu!p`$^x|tŬ|FXF'sA !OG*q6>P Ij~RU']e(}`Һ&W5l#2P{(#x|8w~o5+WB&WaC#?x!J٨^caC<@TXdל fߠ1BAnHwLgA C ^g< %> endobj 2304 0 obj<> endobj 2305 0 obj<> endobj 2306 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2307 0 obj<>stream + fqG"eCcol@LfI5k ߇<^^rǰVhT:gCd}2w@nЊsnA2x6fMJՁ|կiOfg3]&ůЈgtS@e^E ͖nxGS'sUHzKVi^i݅Dx[~ma{7Ty\~^UPB.G!a>OjmfwwJaV695{<\N{(;.u.א!)Fe2E^?F)=1_9fp110&$p䂈E|e҇6˭X )SvwdniY8O^V";)RJ"k)l=9qXa1fnlw0[*[޲ONLT|+@{e g%k?V*F:ʰZJ:.ѭPW@.7jd +,AbuBE"8}?H?kKS}~G#bm":SéjXgΪ`lh+7KRʊ}=o.ǗtRAr>,zG9|I5qgh i! Nc6VeD^# ROdYs:_Y]R/4%06-˯Ѥѡ;"Ifu"# &*5I9 /G;p/pe$@NL~=z7O?EbI) +endstream endobj 2308 0 obj<> endobj 2309 0 obj<> endobj 2310 0 obj<> endobj 2311 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2312 0 obj<>stream +R4,d U^ I\P Tݢ&DG3n: V'P_vS1z<,]bhI.NSAR|^i>]5W$( Q849n, +-9!hYI; YW)֮;| >l} ҄_1&սnЊ7]ƪ)12 x ]j4ltJi<ɗV;^HF1E9YkiAov$v BAE.SSqWwi?&y%4\vH+k;9-*:3+ o1#ulBm-NsvKd&i +&q;=GKzA~ !c>WBO!R,'cx\]y-")_ A0ܫsaQW4_qm͟fGuvkP~b +IF ᱰ\3>Ն_v yr*9&Q%!/kQFX'vr +endstream endobj 2313 0 obj<> endobj 2314 0 obj<> endobj 2315 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2316 0 obj<>stream +zC3J]iē)jZh;8qҟcծ9ޘ4CJpE#vu$tWx(S8@<jXEÅuԻ싞 ?7,_AU]E+Od~h/0DOR!Ros2qm΍ZRv[ߡd_Js?^YOy?pZ ,3?ꡬ߶`4 cbIw'e| +;jRxQ҇ѻb] +߳ݬ4RJsa I(]_7q:74 +W置9q\X6„$X;|4;1C8GK/Y.^rVu ĖY5NXP}|혬WQQ#5@b@'%ؔR(XN2#=|305KxoȆ`7NcsQThSu,k:jŃnCTBmKW93 Gʇ#!vѐ&Β!Δcw$Mw8ѫ01ȴ^4$c +^Q.3x7bV+γUKړ83I6fo?^#<"zފmYN 'ɞb>Ϛ>`]7h Jʰ\9ilP#H쭙QDbB +C3W<Ә[Tnmzj\It L&(Wa-hU88Uz9*9k +endstream endobj 2317 0 obj<> endobj 2318 0 obj<> endobj 2319 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2320 0 obj<>stream +-.ȴy(9dQY+[n6EWWOZDG&]Q*0WHM2cϲ~5%<s.271o@TK؍i5]_ n-P:>{bl}A5)~l&'d +ܣVl.xU<ފOA븑[}'5mRZ0\ݡf+7>CD!fqzUoDe 5̝xK}L"kr%øtz9ۄ+E.(%Xw!bM3 +$Jj&#:j; c\0퓁 *4sluN֣wx ƙuDvU1Y_n_:Plzd9. [8Ú~BCvU#YGc)zTڑΩ=qc9iZLm*ilz +diɵwg/t{#ֵl.r[N\\3km4ؤwX@pq!X^] N11EM,BA*B2m5#n,SS * ޚgH֫A?HA*/ˏiaU@SBxxLk7ǃ)(Q:3 Z1'+2:## ˢ |A(>h<KuI +䯅o?3{k4"64Zv!CXN +endstream endobj 2321 0 obj<> endobj 2322 0 obj<> endobj 2323 0 obj<> endobj 2324 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2325 0 obj<>stream +1 ,sQo +@Xq["xn?E/1>85/dbjoLމjK 68*fۏg- [Ch:|.1,(+ʰ.lASoq*6׸XNP# +љI}JVk<tJ b֖m-&PK6jRfXNC2|&U&H6.{0o~Q@NWa͹:[^/҄!"Vu±bPˬY =J,VAeNaGj]iQ,f{;NB&U~KTv7D\m=+3fph=6Ll_1 $WUEQ,Ҏ>I-iŔɿړKq㳢;|hi@v_-i }иF?JQ!] h#}dz=0"ZHiQ Ev!`a[jdnހRsSpARpwb0B]V/weH0ZH%*L'fp^ȳ[Hj_F&>OϖuWMЫ^l6z1<994KL8d-=8.]ndM՟WRe{9xZGW8K*$Sݴj/` \y򥋔k}>AW:lEۗizȠ_A'pO|s_ +/G|։aPgbVJ;iT!uN +9cV;(y@hl$u/b}۲ +)C虷V^b7HFEj!+U[/z5~br @o2Sb $H3EMWh5njGW!D9b +endstream endobj 2326 0 obj<> endobj 2327 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2328 0 obj<>stream + R518ox*Ѓrl"hqĒ'ڼe!APVtm10 [y ̒1);6}fRz9O6ԱX_S9S?O)>9QrQ>c +^nKvv2)N`|BܑMZVSnЭMIBߥL׵wjȋ,ǯݶ Y㮊 /qI|h/rTNѽ}%5 u쮿4:>/F=K9<L#,Y< +~GsEBawθ!kFPFvIw7m\na +XqLj{~F/1 +endstream endobj 2329 0 obj<> endobj 2330 0 obj<> endobj 2331 0 obj<> endobj 2332 0 obj<> endobj 2333 0 obj<> endobj 2334 0 obj<> endobj 2335 0 obj<> endobj 2336 0 obj<> endobj 2337 0 obj<> endobj 2338 0 obj<> endobj 2339 0 obj<> endobj 2340 0 obj<> endobj 2341 0 obj<> endobj 2342 0 obj<> endobj 2343 0 obj<> endobj 2344 0 obj<> endobj 2345 0 obj<> endobj 2346 0 obj<> endobj 2347 0 obj<> endobj 2348 0 obj<> endobj 2349 0 obj<> endobj 2350 0 obj<> endobj 2351 0 obj<> endobj 2352 0 obj<> endobj 2353 0 obj<> endobj 2354 0 obj<> endobj 2355 0 obj<> endobj 2356 0 obj<> endobj 2357 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2358 0 obj<>stream + p }A]1'P(5Ug™C}*S g8Τu=|)Bֹ\b&ݑΊϪ}e%>/IpRtJcυx#VwzX@왦jJ\(jU%EWvZ&2xCl8 E+g92f4Rר)ȼӰ[e-߂lYsoQ3 [" RBr9Rv٭a%c@&8c5앺Ivj/ӫX 𐡮|!Qԏ%RRe.)ytf9a`-?2n^`,7X`pEG}5s/60}c ߠ_bk8u`/ R K{FgHһ +J9'VtY } hŗ79"ѽ*KV_# )o2̡1P6;MPe<":]s΋_o\k+B +6c!>$@[1X# dI6]'ʚe5G~7,P}wN r{f/hZ4;z=564<1l3_5-Ieejc*C sL%C,'T| bZ36h4l='A_]Q8ӜNCDf֙@=U\}vgXN5)q_ITgCqԊ f6YRYb5G ڜ93[SHٶ^G/}69hqܒv-Jr1cR:O3Ŕ".*og I!(ϋ)Qv98DccI(*lOҗ1w ,6Y # GB;`U,hJcM&hR_аjb)q鳶0w@ RfySl07! t$03 OX*]rNz6uv4 +LD::o AMvA 5%RwvvЇL^If#D/PRm"?}D}.|*O I(f[SkFkb`.O +i0n9|^0S\ sI0`! zcףMf]=軜.SMt ǘ`Z$n;:> FX2/sgOM5W-<pWlak +EDH G>[Sq4y>Qi0vstaloag)f1;ܡmn)HµRDDSŪ"3OooƊ+C: +a#6+FټN4ۊlq T5LR9'{gD)ُlgþMAGr +j9y(XÐ%z",#Փ@]vgs XI`+1@bɠz ?PF! +b_ +DiؖQ,͋ZTi.< g3RleM7\Y|z#jP qhH_3nrͦN GW|jQ5 sJ848R#Ç53Fɛ|y*]pU6sG3/]\;ČKry/HE[y$"1"_z&$Quj pWKsvo>}3.u4CLLEo7r"؟+גUʍS] I-vy["$ٞѣmWՀ`f'~Mi{C¦2̻:a!? 4$} ؁z˳s$ +/OdAs%-6꽥iNFb儥Zj)~/>]YxԕEJ'L6/ż_pwc~S !k^wA;UzHr*I3!# &61V:܈ sxiH&X'P8eyUk= P4@Vs!d^s:(":]J}LVatv8@ߡ$4s&uH[KKIJ\NeUPL3#+Xp +wY. >?qC0K0q*„`![p4 YT-g3MFnɗ a`YLJcJa^i@ DČybr-B(NKޖ7 5DxP]L3SI +.yWS(-+wq#6PV6ע"-.@FejSTA5 zAK{ 9cqmrmu5TA,u%;*16 +endstream endobj 2359 0 obj<> endobj 2360 0 obj<> endobj 2361 0 obj<> endobj 2362 0 obj<> endobj 2363 0 obj<> endobj 2364 0 obj<> endobj 2365 0 obj<> endobj 2366 0 obj<> endobj 2367 0 obj<> endobj 2368 0 obj<> endobj 2369 0 obj<> endobj 2370 0 obj<> endobj 2371 0 obj<> endobj 2372 0 obj<> endobj 2373 0 obj<> endobj 2374 0 obj<> endobj 2375 0 obj<> endobj 2376 0 obj<> endobj 2377 0 obj<> endobj 2378 0 obj<> endobj 2379 0 obj<> endobj 2380 0 obj<> endobj 2381 0 obj<> endobj 2382 0 obj<> endobj 2383 0 obj<> endobj 2384 0 obj<> endobj 2385 0 obj<> endobj 2386 0 obj<> endobj 2387 0 obj<> endobj 2388 0 obj<> endobj 2389 0 obj<> endobj 2390 0 obj<> endobj 2391 0 obj<> endobj 2392 0 obj<> endobj 2393 0 obj<> endobj 2394 0 obj<> endobj 2395 0 obj<> endobj 2396 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2397 0 obj<>stream ++`qw/0mm!MO+4uֱn+zV=@t!\O\o Ϧ@w +&[ r?'8#C8aS:*o8[\CUձ4,,ϋC#M[wX׾fSC ?8}&9p;F0!A+H5@3~A08SKKX'8-9sTQuViْ"w GeAq@٧rW41D'0 ѮqEs|S2uIk8/٬SYqo)%m'g\y"ш~zG + a_xjɃb-qӍ>ӕS`@d{RGZJE01.DcTɩ$@:\V}@Or)Ba$2D_3 R@ʷ/tBE>z$K3xT~HCg?D Ǥm#󧎥,ܪ 4v%@w3/luug6|u,)nil.@KXC9 zr~(;=sV4&ʷ\xt4`4}΍B=fS$kݔ/1$mNq<?nۚunpq{3ջP><ɖ!pIQNpca)̕ޛ9o^& {vnH,=|%[*Ob2[J[VJZE(OTcYXyM1p+u "|z]C urcjvV9I|K;6rO^- W2uUN 2%j +A ]`iA)|@fDd,YٴN^ܯ^0I}+1A΂$$&%M:G 9뙌\YеX ֝(tg):aGC%d91Qh::g,k(G@ @U!t-A%iQ+l"LXSOѠn ŎX.m:A bIHGq, +:$l7x0W*ix n+h +P%a۩r.Hmb[ҳy^ uW]>2|*Ժh8~lufi' B@GrH76vZXPfQm{6r\R~m~9CFD{G g=cM{DACA>\#x*guRU.9v6H +90u;үF,$O[ዿO/EafӴP0\a'sRώ z^qw)91|gȣָ(=f1W0vhQQ~UxͿNZ}ЋYl"0\\fx;IsS%~S% Pwl9 $bTۯyidĚ%OLqp,AOР؈-h>Wv4)W;S2!4 zߙg6 /G}ThW`VW'CTyzCJ^X෮/Q3h!CW%nH@fu/ ++Վ1TI}57DvVJJڠxH6wx(:FxK9JT0!"xW&i.;^ uj&_]CwI&wa]:'y-CW+ES K?Q~}3jT؂ 2W r|v+mO"')Z;QQ^])rv[HW" 2zDOYoHŜy}wڧ{Ƅl@w \|CVqΔD M Z'8t @76}ʊt;kXjw2U[t܂WM30QoOvEtX>+1HOc>J`==Žj"4#Y]#W4S4%Szs*YGe4B5 :p} 2vو 30QԸ 1obvT˴ۿ͎+}enCnHpIin*suN dIti)E5W#*dlDFߔ0q{2BȬ՞hb4,2|nb4VK=Pت::TyHrH̳7 S+ +vkHv?7z3,xFx[4^QDj*8IѫyP83sɥ .Oj^xtE~(-kܱ,u4-akO-rz{6F> ijd 2$ڤK[,W6 F<)SYB/nA3Fg}%@bӲQt/8(U;dƈ佃Q(f-> endobj 2399 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2400 0 obj<>stream +MGS3ۋۚ:upp[;B+aUwǴ ˖];vmX`QX&PPt(f]n`ǂ#K@’8ib,˜].4xnE 'ra,z6l +0eSk(ӭIU/iۋj5)O&zKz%)6=yO'q EP3:D# JrYUH4.Q0MoFZ w{\oC-_ͪڛwYܜPUWAۃg +XCՈz8m +h+ņo>E gs +$(;MaijQj`JK^0k8K:jħҤ$>(n2 ~ mrW70hN\)o0٤PF|a k4ew.g{EYyPyqqԁlN59)ZC-apN^*WӈIYx[ jFJEwt!L} +endstream endobj 2401 0 obj<> endobj 2402 0 obj<> endobj 2403 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2404 0 obj<>stream +3N!]ukHBOFq)h^2*%B%@V&,39 &&rBGjD_*o3tt 8aWr\'!MIEJI3RR0tw瀒}Ȍ%$h ?[I饅n;6S:۷2.S''[0 E.<* WڶK kŰSn;/lG^ONXH; + +K(d!#\]ܙ{Qt PDY!Ve}*ȂU5~&Rusb܁|塜R3?`iyxyuIwE ɴJAW>i3NjOUxNeOKr&j, +BQ BrRzRn4}Xz3د0> endobj 2406 0 obj<> endobj 2407 0 obj<> endobj 2408 0 obj<> endobj 2409 0 obj<> endobj 2410 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2411 0 obj<>stream +hB-[Eo}U<%cC3=>dM܁K u~6@oKE_/ڎ-Pr>{d<^h5rOtGKC$rB$)~r0Yq`7Oi7n٩^h$,(`ɼ.7C=KFrhTs/]m$SokwBeZr ^h Q{!)_%ZY\+AާANs=RH%]toH,r7-p\ yixZ@xU &6K=քi_*9Y숲CWȯ) D<.8 +5pzliGصA[n/ޫk[Dr-+5, COC/t2 MGYbB# 6*<tvDErpLR<}w&:h#wwA]:=Qlv4 +endstream endobj 2412 0 obj<> endobj 2413 0 obj<> endobj 2414 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2415 0 obj<>stream +HkY޲+@3nƞu>W%xi|ь\{X?4>hG~Y-k~% E +ufWň%. +gPxX$CgXȓPߏeL|dQQkuGe'e:0!Ye0:W%?޽*ّ5M9A[cyIJa2۽EY +_;%WLRA&jfJa7\Gq7X(]oґ \ Mkʡ˷M#zvVH#!hZ"Pe)9]TS:w6ծA?C.j7C) ۼ4(@BEwh~õwfCN/,=Y~ pȓC|w|N]|{:e aqॗ؋Rus;q̈'7\`bsڛV+26f<:KJy5zt})K;{^?~7N nöюKfˍ/ΰEϴk +ZL#7:c$p ~fj8/6żj إ!O +p:᧾0 =Zy)<քI(>P?+{%aWͱä5p|v5g8 u ԎHdXQ,cpMD/l2wy!TNʜH6*K) ?'U(!m^Ǟ<Ո[& bYpO.<8M ,V(p6h-HUnc)1/f2` 1 ɖ0]QQ5Ds*,O(siWݶ +4C iW.$ʴSKC](Y  ;"W2Z~ +[L| J?rL;%ɭErkֻ^gAgҼ؇3Vg9C*B5pEoa5:z I/qP}7yјeZd mG)9d ͱ/@ +endstream endobj 2416 0 obj<> endobj 2417 0 obj<> endobj 2418 0 obj<> endobj 2419 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2420 0 obj<>stream +1~u%`hQpp`gnĂkX<w cX[O || z2(7]fإIgX6潇-0SR?,`]dGwafm={fZpdžbS"U"űJ6v]e[Ή~;H1%Mc[S9KӞ#a/+ؿwqg^ V~>\`8.p).ݱsuP$2Ѷ&i&bkӸ$ūG;좵Na!az߉g(RgxHϑ4YFFZ:S51Oc\%nWk7:ĺ]3Ͷ_y؛QAJu)jlg:`x",[7>pmZ}L TSB%wp6D5S.gpkKfvallD]hZ6k1ex[u;;lv8F{8Y1^'MTm/b}a@\. QȔZV?QNy/H2ͣ<.o-'APA}d!] +endstream endobj 2421 0 obj<> endobj 2422 0 obj<> endobj 2423 0 obj<> endobj 2424 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2425 0 obj<>stream +5NTas^ ")*ty gB68BpNLVSvW?haVJ^*gI.z%ј-7$h,DAyǜRfP]T uWpod rq8.#Kec:G>H%M4hPWe(>`v![mk$h }2A:_u:*&~6GZD`^bZ9\AyinYBmWfk wguC*\V +$ܭ2rK![V\0Qs_./A{|`oVDVi iM Q9Qu]$?Фwv}7nP%Hu ZQ0uϰ- &P}P cS]oT *k~qSD zqb +1-+,FFsyMEpG41\o +PA yriՖ:YZ( +>\JQ5Q%o I=YQ@W5@)S<>R:2ܙvZ8ϏA-$>%{6@&ZjKьZO .ٕ;Ry - 90wlZPÁ8EXRJͯH89džPUmj+<뿠`jvT㿪2 TL:|6ϭ!jX,3Lp:8[դԼuO3~K'' _Ыwh +(T|mF{0ieG}x5Tuݒozªs +7m >rg47͚F⦖+Q@iLI'D T vk~p@ N5+H@٠֖fZVmjoOc D>vJ[X3vShjR&?(B1u.h+ &$iQ^muvd2Y]Q(G\ȼca~L][{=tH +endstream endobj 2426 0 obj<> endobj 2427 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2428 0 obj<>stream +4qbN\5p/ዠ(dRN~ֺzC +$Qj9PM1YvVC6oae`Nٯu՚ Śf u+/qgk!GۥvI#f,i6@՟ަrWO͠ye!}H?7Sz! Ce`)F%aLIMCY7fa&u!%ǟg{KjoP辕?8I}ΟuC0I4]A!i•t& {A&j/p`y0r 2%L]=)ȆrKiݬR\f!@5IbIRwhȾd95hT{(>f'cLC2@JHjCOhv,dfTB!EJ#X^`/d+DPk *<**8l\%׃m-x⇙kQ:\Ǘg\7kF_ 4|(_L0ifdXgé@Zi77UU9 +603_N=y4bD-U>8ݭ>Zcyl +endstream endobj 2429 0 obj<> endobj 2430 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2431 0 obj<>stream +_YIV{" +{QfIױk\)?`g)@ /! +!*l3'de o3^5݄=3#&"UgK7RsOߕﺉx@q%ŕUVS"лVDIdUfLK +n О/{ W9peD7vMWJڱA޵AY[3kR@hT}Wr.pF6~[huyFEjc߿!װhz 8ϗ#X?ٲIL{ynz 2C2u`|fZۚMn(FɪL$ongbɦ*4*Nfc,%dƎ8H|lWaUu'LC$2[e_HA#A ɡy'H:'e,75C*H](d0rqfV"v>=n>J:NwR{.M>8]3qp,rAuѽFZEfro +0[J%y6a G_zg]kcf9eʣzvW6Ȃ"5߀.K+W oH)oHXtѸWq7|C&)ɹ pO6c;U?Eƍ{HX=?!Th1pF'יF\1tBݑϻ^%sM ]wĖw,n[XK;u5uCvsevhKh)B1YC"dlRj5 iDDC1/n+{K$xWfoj$x,^vp NpkG^ľK7ʹ#hs;AKd^@~0-fdƗ)jeimdnRw7M2Blt4hMdI_ Jk'o™&qC +㓆B㭤 <eb .ldQ#sAX,LV%'Y|C> endobj 2433 0 obj<> endobj 2434 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2435 0 obj<>stream +Ws<]H&Xb2w-/g6FLdTsC;f)3hlt2hwB) ̐(zL>H'IW^݀#|7Sz9$m "P]egD$M7 ɤ$=AMP,/B}yn**0v +d3As3& Т!գKT:xtwz aSP?FIy'!^@֠n]hkt9# +Ã&4F'~a?Gee%cEj[^c@r5s+84̉,S\\v`"p%>]>316l;ҥ$"%14 b%⟳~>:w"cWys$ eߜ| p^r .gnc!%_o* 5t&u'ʑ*g¢ UZ~SELv_Zy-kU % %QqQ$n(YWRe9藩tY_Sv7}쌟c㜓LH T8]̊ s6dfw&!EWِЧJ@ >*|8͏9ߋ~آRE3as&+9 LFw-HZ|1,\kUB + ^g[;{Ytc~9wC 2&EnUEĉT8`Ɗ[Cٶ(IPV:j?D-AJTѿ@uKE2O⦎CުӰQ:c/=!M:> endobj 2437 0 obj<> endobj 2438 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2439 0 obj<>stream +@!n&XvHm\h]Y71VfEA!]?xzzfYEI6%jD\~ʾNQ%́G.f{4w2Bd ۉ + &dƼGܐ望 Q`n&JR`49:Joۣw8 JzH~ + QE 7ɝ"5Уឌ|lxmJA'w!d:оM"GO1J;yW5پi<ā9+c>JċZi1'{zso +;@;bA\_s; $/}-?D#8+5SeǼ2[2MIhdC2@݂u4?eCWvͿ&f =kBϢ]҉AÝ!o=U` +9fG5M8S׶w$$A߱bvpvw nR&HzBœ4x:cF 6X{IKD;PZw<7 ]Y?6!,CmKzG&.r>zm0dtA!9?'ʛ)YNڄPekmLxXw/S虳4s:V =}|DZSRx|o2ÎԻCQick lu2]W#MedY+;>lȅj[*>hɠ8 x)8%שׁJß&@/mU k).&.Dt-%t0UK(W$k]\ 3)r1*I3qQ r3EIS(Ɉfw62PR@I)G[w-ߙiD: CٯO`WA0>t/[Pz +)Err,+'  i&uVHu)AN}5zNHuiȆ "bԨ]? +endstream endobj 2440 0 obj<> endobj 2441 0 obj<> endobj 2442 0 obj<> endobj 2443 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2444 0 obj<>stream +-%.k-">J]_s#QQ%'mcjE˽~ ۇe 9ikc:aD zͥ2B;HJ'Z2Za`}#8;zȼ+Q>F bְѦ.@-MӖ:>Bd>g{]ׯЏO9?Kԍt$3DYߴw%04LrE~0wzůd~yV~ ~(@F7h-v +56i)j5|5IU%xz6.{f 5ܣwzGE1[tCYgrWdNU{=dgdؐcd&(|/錣ўd_y[Bb}Lt546F򳨴պ9Ę'wE?bdbe z>ׅ7]tbNP{ ^t&ԕ1FmC" XA]3i\]sQTobɖ~y8;$țƍ3Q 00gFPVFwJ.%x浪v]9{?CleO~U φnI%5>SmO-A|и BD>K[ 'E'udzi8LW?(k$"cBSK.<@re{ɀI:F| +Yռ6_uv%!ΪE/FR՞yĩ^~VA3BLSqSr +LU;H&9ќh3Xڈ +[k)6v3f;c)>@d/! 'A|FSE~L]W.Y =gSadQE/D%+qbsrag^уKYJDS2bE ]P. p(H0R:y?V^nqS M9Si~tu' >G.k/ (wysT]WYvDI['py +FA;LOgc#_*w׵7ǪoBӏLw2m(9lbZ<ēw +endstream endobj 2445 0 obj<> endobj 2446 0 obj<> endobj 2447 0 obj<> endobj 2448 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2449 0 obj<>stream +{6xˬs |(ia8c~T_J&7죜[%9=X8B[DQ7Wp ?"EsP-960@4M013S;06k=u^:˭_`hYӴ4P1IWEW4pgmdpqф~*XY9MfѾRW-E H~}v{ß>a(˄fL4 _PbNח4]:;uBzߠ ×TP^UϛDRp-*IR^ +s?ӨLRV> endobj 2451 0 obj<> endobj 2452 0 obj<> endobj 2453 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2454 0 obj<>stream +Xa_W ^݄hRVLē\+bIi*LU9)$6$hGp9u#Z;}EP+GK1MT$|MO/\a[DQH; _ńg/fj{?堎(pB>mvkVfﳮTxtz;Rhڇi5zy6kѮkͦ+m8Kl8u̴ZZ7٦? +l2!8agDXޔ>*!V<{2fRv)ZeʺJpAA[xS }J,)kSLe+ne)SCr&9?Ӗ|[W!,ʰ;FkI4SBE>TVLCWv qѻ(֋+Lh[_˪#rU-.*+ 0@2:G}B@| Q-??#2z‘)k-}J}_5r 8_;m),yB}YO`qd{%=3g$&>Ǥj +KVh#''0QtgKͷE~lC{@ƒ*ʕRIcG%}AqCal. b=&z9H^ryqӼ\E|JnZ֪؂Ae-oYۻ +Ld}˩ߗ%?dy +k91ܱN7=عm=vH>h +KqlEAvd`yף5Q%XA#]^_D8 C`][ Dd"O0:F'TI mwt,"U,O#Ia%JK[8`b#+7=7_+=fQ.WF> Ŷd?&R_+Le`*`zI")9_n55{"\.{F;SSUaZ)eyZsݔ1ܵ^W, ./ d}!jْיU9HrLj8+Pr44X +endstream endobj 2455 0 obj<> endobj 2456 0 obj<> endobj 2457 0 obj<> endobj 2458 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2459 0 obj<>stream +?D}Geb][K?QGcAmh/O۞VoڤAxKEϬ3S2.ӊIBh\'-ZFv3}?O/f]Gvhr#N#2N`'9!܁ +^ȗ&;(N aY`<Id(5ﺟ5z +C@L\-Ř#fъ܊~>0 ѫ<>ηנا #}Loof52VW+ڶ +_UrT iځV΋N!Z(\g^z9-Qf+)$Ƨ'̰]8TGma~esuYNyg_.g;I8 QRbwaYm5k)cVA`p3<;(ZX]\ao(Qx U-hҪ`Vѻшl[n7%8~KUZGe1s>]~& _Am)׻vÿ' ]):ց,eXKVJ``<0 i|jxte fdUs2IztuGyƔet' ȝ쨡zlhs}{FB@H8P(= y62Ե-*n,j1KuZ j&R 5>}2ݙ?0?UpgۅlEyt$Ļ˶Ǔ%?(*3"GVDB6)R2٤vpa#H )[^1O-j'OZDɊ9jv3# +endstream endobj 2460 0 obj<> endobj 2461 0 obj<> endobj 2462 0 obj<> endobj 2463 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2464 0 obj<>stream +@-6|w5Z^+K^S&f'`"k}3FBz~(!PXE4Fb[8L޳ݎӖ.,?=HSmzl+:{ԏ:Hw{E?N)0?Wh[7Nm|Ci#w:ȟNCYtcWo#h JFUx ;+[cha&I\(YH1J-'jR&h]haW`[9|k#.|W _\KӠ}p7^QrO~2) Ŀj?qق[j w*RY0K2Υ;a ²Dg7!Xg%Ҫ"f*|qt,4IE΄ ul%zwG?ajL${uZ?u>+[3uSJ4WJ`Ǎ|\݁[qh/c|Dw:v:ܧ U=ߤ71߶Sc>)0cTS'&e4grbOw00ܛ׻t|:'|A`qJ.Мd_5#*mcj`8\_cƼTr\ğ/_AS֯&{{ɆC&8?["}az\Y +#ΣMi^fCXW:mA.BeU@8 #uRT%sN!ud0 x&dE)h>z7EUn&c=e7X5cZU,vmFϡ&c(O- ]o>Re^T #FF t7*1O)NRaUDvajv!Yw7hiҷZԋO\ο ozla50#+ӇNj]F 9޺TPqVv<CSc5 }< dB\:o\wHݙ,ETYxyp3( +endstream endobj 2465 0 obj<> endobj 2466 0 obj<> endobj 2467 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2468 0 obj<>stream +KK'(+BOikg HKi7ĝl~X8N傄zzJ*@ }w"pO;ޠ] aB]^Ԓb=9nLqOi/m7p]dFT-CV7Oz{ɓ|MxӢ 1&3C5L$`,{v!8~Y;Ĩ662'=]F5,1_是gĨ (?*ܢWm撇>"蔏wJèONGRs(xS+/v %"Wv/RZN +Xà 1xsSȾZ +]6|\b&"":a>jO,v=Fj~!lKD5Κ4m$劚g-DYhv1 oԋ@mZc(ۥ ]Vy&dV~kD~ޏOƻ\LED +Μ-v8doir{ Ju%FQncaֆw\S-f ˵27yu?H+O =xM >m`|?/Wl3]$PYO[ݱ#p}{buh^dDdINυs퉢6NLlQTf}'^?fHI^oʆX.;9ԡ QjJ30bPȟ&XD(e^(Q2=L%3ȸCWU ŎH`DG#>>Ms`J +|$YCrL\O<eaI +a=oo"Mbz[/SeKY|k6n7IDJv]z(ӿc55Ey|5ʹ^oWPko%ԺzQoNDѾ*mR8 m d #Xm|2$bsh4pu{^7 Clwn,fcsB"chroQD +h +endstream endobj 2469 0 obj<> endobj 2470 0 obj<> endobj 2471 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2472 0 obj<>stream +:" ˱W wJԭa㾈U#@.z6m"+EN2V.tRpIUWtsTWȡ\o=<)/ +T]8%H57^Q+6LMEa&B,ະWX6 fP_G2 sۢqؔ/[< Nֈ)D2$A n! [^;2YbB4Fԙؠކbk6`$$\ TXֵ˶TPB +2:U^:*a@}p"3Ig`$+{DVܜ,o̊PlA6+koZØ+< T~D ?M.Y@"{ 'TY6$C vRw?cFK<0)A 68F5' }jƥeYsp>)ۻ)@@fQѤA ԤXFI{MwuHĠƕ4%` uTS&;bxIFU"f}f4=8ɳ(ynsi3A'D Czh[t{F +g~Y$ܱҞ0_P|+%t_b'z݆+vWc/OYua?\ . Q4 4ݑ_`p\\..B%MI1+b +n341TN>7ۻ9͡Vm]G'&Q3q5OEVCv>nega`4Ƴp(ӂcz:TXSFʡkeQ'i<4Iә#zhPGMU^ 0ʑ=(aC't0j1m>6θJjcvOa>/2곞Uku4 Sf S5#8~\@1.Z6}'rgE1d> endobj 2474 0 obj<> endobj 2475 0 obj<> endobj 2476 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2477 0 obj<>stream +\ +4 20L!Οbr"AlOL@c:ceNoEwW3 +}+NY6غSp]zvjӽ¶|s0s6%jO#Q]|6ϸatTi72? x³r&AK1v1:D)TU=APAk#kݖȵiU身M/t%@l:^3f<NzV %/OǣƻvY&_nf +)FZSz욫=̚~]"k>X~.Ӥ+G=O7StXnkLI-c)c~ҎBT 伧 +j.|iR)Pf# ӽߐ{Gw!8f#M=PCud$=^\"1'ߞN\Vr55v(O +Aqo+|Bg16A$cQ!؅* +n>vYo8hy1*۾$|gO~yHG2CcT Yf->%(nDXWp''m1/a)E˚)U>X;Aډ{K>e],ox +:-R%#-FF%Nedq@]gd뺀9,ŽsRaَ +4­қTD͓QG AHnF *{$)ye8`c㉣NȈ +QȂfܝT{Fķo>hp3|a؞҃gKɠ?ADЉQf/!sxB ~/QJA\7P4Vh-MN2~W~# Y↎kFHߴَ.k{$z'EwWX.]Z(Kv}kecϸ ǡk2%TEa*0Jr BԞFul-H_Xh7᜵aճj}OyJxf(PV] =ºPوOs]c!ozcKX~O \e8 Ib0 +endstream endobj 2478 0 obj<> endobj 2479 0 obj<> endobj 2480 0 obj<> endobj 2481 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2482 0 obj<>stream +]ѓyBOTmG&yp'HjI:5@$4Z$ .kU߭4[OyW<آ2Di^8y9+}Y 0ZM-6:*dW%i4"a4ZlD_@\^/ Ys^ + + Ѵ|xw Wω48&9b/G*tf=L((_|7`gpSC'PQ $ҏD(T\ 16ѐ7#٨+zg{?iݖl'hz1nSED`~  Tߝ9iHoU}ء,Eگ~xNۊ籷kPZipTgK cn!YxC?/x|ꑭM0'qv8 5N$+b1-'O7 +X18e^lmf8Qh_ 13b/ΎPy*須 ऄC+x S"8@Ory +?th$E!vwWM0I ~Vǒ=DsR]|>Icm#/#b⌱%\5d Au-aqVե$ +koF $ ?'`MQm_+djB~\Ơ +endstream endobj 2483 0 obj<> endobj 2484 0 obj<> endobj 2485 0 obj<> endobj 2486 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2487 0 obj<>stream +"-i^hXjCʀC wo{ώx}s#dC,-ufZSmӏ}@m:=3E?]9bؚ[=I~dZ18sy36djRM_[5N!g9 +y~krRm E:t蓘+ OFP1ā߅󄨇ʶP@h#bG|~I(}% +(#!yt*YMO#o/џ8@6ϻ5$~F>Z,ӟeD'P^R+wcϭ $3WJDQ|¹IDC s6s~^=@J6|jRO8\N(Jcaë`n4/ ɘ:+h+~j(̻r +nQ3V@d0/*p|E̕ a2֤9WgSXァ/cmHiTXv/F0Ѵ2qZ.Kt` 0Ya4>{o@zorw<_Qf8ƶ@<ϟXsƐ&tmfĺ&{S KFi.?i*6y2F6f6WUa9MwwE Re/d +@̂hvyڢ9hĚNi7zR,^<513r;bVaw~,7UX;Eӌi[sSt +J +1{="/j<>Nhu+DQQU +P 0V$'㤶0Sm۶ +R҈[(2: ̥~MWP.dpM?EFmē'(1m*I:'` `hi~yy2N؜NR7y}mkypLIbHoucq![q)&xaVXG>-@25ުUB/E+8d7鏌C> endobj 2489 0 obj<> endobj 2490 0 obj<> endobj 2491 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2492 0 obj<>stream +6˺~\bjW-i.[;kIVk9WS*0̻,\*6cW~O JGA}q%v4rѼ3%diܾW"BnqW&pNɁ=н]/Sm v \D̒9?m +tБppkIGYIPkRıO{fCФ`DYhUE8NXoR^ +WThv&sӋE-?T{ݩjTny07c'gs_Л>L~_u7$zL.i +CAqou5쒎 w&ϟ$7Q!SaFmKSA9!-f)kB+=Bﱾ֟q؆*;W@AiH3 4e^Ȍ &^S5$ռxOx(,sLh3nVRZı)M`5ߛՔ%2<X*wjMkaoeY˕//_DNs/*}Qs-)!STƮBm+zDhJN!Ho@DCِPg{D0*❧FUfpI AX?DJ6{@1ӥr%)1_ӱ;u.uf+H8|X&?mliF)l~J%aJsE4 +]ePbtmIv%\Ўb퓢<>;f峟_7 /:gl*rF!@ԯQdBt']] +~ +endstream endobj 2493 0 obj<> endobj 2494 0 obj<> endobj 2495 0 obj<> endobj 2496 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2497 0 obj<>stream +mƵS0ˮ }}<"oty^L#1hFw2jo=oxwIak4:+:7&;EwOG@Ñ!3ζs Bc%+EMѹ.@ Oj{$lxeDؓg0IV%(%um_m{wU7ҝy.~-F+m}8BفVwqNJi Hj2qOvnQ*#^O_CO ܵҵx# ܊!ۿ>s*ONJX&0ҡ= mߎSx8h <q"d)^m0s&wLEвsrs+l\$Zv; ORf=,+FPWtHJ)$M u_'(ޭT J$ e-[9N2\p̓t3%L)1Fq~'a}h9{x)G"s'XRZTG \ۏ j3kZ\=ok(՜*b/m6;T8YxD~X']7I~4zq^DJGVJڿTA ^z%(Q -x{@^cQ{_+`SR gU"{50ܴȕ0!P`;44lwPv*&EacFwIƕ:dGj׺cq#rs⯅U |H)@&}؁O +cDygpPDSqj ꨜb{p$kuL88ΕW Jf-3u`vO{ZaAK|8uv!fQm  +endstream endobj 2498 0 obj<> endobj 2499 0 obj<> endobj 2500 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2501 0 obj<>stream +td`o$"o-\#2j0+&vkPntO&J3uskj׊WiSE%)ՠ-SzYȀ8ZJUb$`%ӿ0ޭTWHXY<JZ5{ZZXMb-4|fۗsm]xՊ3u}͖(Z(59j6잠Z9Fœ$;02;tc{L;Sϼ-?\Xvwg62 ιl䯌*Ǖ3zV6aj)M?wx}k~W(tOt`H6҂D}Qnҗ}{~Bj.fZ9j}h2U bEibń\e=` =u +C9ԼEa;:vA,WcZ{),Fz֙xrD2%'$J& +endstream endobj 2502 0 obj<> endobj 2503 0 obj<> endobj 2504 0 obj<> endobj 2505 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2506 0 obj<>stream +rOsB^dls8L逈yxȽ E-nLxtj!@xh)@apɑ{8vʫ<18-,hTA<|4Xs;bD';Rnen%1iQX}dQ'`s"bu5QvhoDvi[QKNKuYU6nBpV:FW~qWNv16Q߃0ܗܮxxW2bzCz +W%{JK9 n؇ФBS[ ޞpk3:nNU{ƈb9ܔgS~j3ȭ#)CTA" `ɷ:tv1-[ :&twǧ졦v$& 9&U58u8z@mUx/UsEvt:>' 4U&(m찀p|کlS6WNNLqP `ů IrW»M4:!BA]ٞVX*27UWڂFJ<;F8A}}fs dVOH7kHΟNotUB욲312 uۘ7K6Rj{@5WHiN>iwKŋ*/쨚0oß\ϧ6j=Z:. E^cBfVz h|w<֚" +;|ӤVlb9YoQ[s 8z5S%X9X h;@#ϰ]\US +endstream endobj 2507 0 obj<> endobj 2508 0 obj<> endobj 2509 0 obj<> endobj 2510 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2511 0 obj<>stream +4qbl +PUhV3㐏+p#j*tW@H4Ch}N/YbK9}:(ZXCx5WekϜ?ENKޖWL#/#R0#|'#tQkL Iڴˌϡg!30G^Ćll>̏YKݔ뾣N*'oUaAWp +O㗏OzP Ҫo?5Lͪvٖ'gVnve 0UL +Kfѥlo?M| NY뜿G\vi|KŨhQ.uxմ'Zۦ<]#D:ɖ!d S>"UMDn#T#QͰ[8 0fv9K3Y8ǒ9# l03<͏anjROjsjW¸ +ؒ}1~߭%F[D&:26>,KG$ a}VfhGe 5i%a*[MՂKĸ~Ж`r#Y;׿ +p#p5+U2+~F$3UYD\Bdt`F`BdR{1zʌK2rP̥qj/g(Etň6FӴQ*;ݛ1 +g;%/fӹ~ϳ89-MJLlyQ;!"SnkC~{y/J}nȋ2μP ;ƪnrRv0<+ݥ> endobj 2513 0 obj<> endobj 2514 0 obj<> endobj 2515 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2516 0 obj<>stream +! /bêށLhC#?VaGhʆץi j3Iu%INUƻXeXF2ϺdyvmZ,9Ev^Q({XM0} 44I@Ȝ@`H!@d7[Uq8so3ɕ05-x*p EƔJ3@w*d$侺S$}0zyS}Y9oh)Ã%? 8vP|hSU2< wN?Jxܡ+cf"b|wn쒱_ +ocֈ)M|I (>*Т>OR#]Qd:@N5Bn)#0gbL/?z8?8]1*MdqS߰.wK@sf{s_vxxx9 !C*#^k9ض3$ cU9z8Y {{|\(=L3O_Bp=*25 ~;TgNr)($džeR{cl:n6һ[BZE!4|I)(zE ,Z(r{Utƥ hOIv:7('_6u)(YROctbl˔J%- ^E-F`K$Xyܼ7pviSCs@W.#^;bf$6ڛ7 |꽀ҞA[_8?Q6k)t֝,t'Yi>;VsAV[ufs]={NE"J)N\S?Sm5ǵG\PC16WYRߥM9`r7)_E ή}RF`}I=z`g- #QvrׅQ_㧄/Vq *ḟRD4CM!pU:[&hV41rN(S: +Zr ႑!zTrs@ܧ̠Ig#=Pe䛚-$F1H2bPPeH$-29n'|Ǭ:ش(Yn2[G5 +endstream endobj 2517 0 obj<> endobj 2518 0 obj<> endobj 2519 0 obj<> endobj 2520 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2521 0 obj<>stream +jGcO oWa. MR)_;=hʍu6\YcLL@ DK(]C:+"?Z,~ҏ P}[D؃zB.ɩO='lnylL˷fm'&&J9Ne&P$o G={q;tV3|R-&}߆QFZB\|[u-^_pnf +7ye(ZyuLTP7%Dӥ2c( ƒ}^e˭n/$`$JXO@V9I ňP1U8LK-ZAjΓ/1@c)'sWyЭ1-02H)f@.(Ծ(82Х%wdcvE95B 97P,Jy#Tvk +\]NDG=AR2:tƈZT'4Q>KrYW%]|}A.+Mŵ߀Q)[lZӢy嘰rDI){a VC_O@YjNpF=fqU~tXMFeU5AJKe K !v=a6C 3׻iK3[Ă˦h  WiV/[ +|t/ko=#;{*}ÕDNsvs)el:Pao!;}F%n.Ϻ+}4sͬRf2cM}Ll)F@MCM+=HefT+#/FbB[*Yh}fȋv檢!Ee?Wȡث-nI ޭwֶ7;bg\exvTf^RS,amЊ$7$/ԗO&",%kҋ n5(YT~7 +endstream endobj 2522 0 obj<> endobj 2523 0 obj<> endobj 2524 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2525 0 obj<>stream +_vWAZަno"XD꩗>ܖӚ SCCaaU}S&~msj[AUʣΓ2钮1fj9dCt`={ Xƕߥvtr5"k2x`.Qgs'|d $@nҲKyT|+NK-M)NmT9IF/gx6z番a9*5=XkX,;2>rZHʣyC򴙺%+p 5 uX"+bIW,:wa\1^-7\k[0t||ؗ)nlqӹ!/<}.J\Zm醧X%m:!*\}T.¤yb#\Wa[f.`jܘI_X +s6 ? kf]GEJd^f CA}Ѱ2 @U{`"ѿcNœQkBUhR.jpd[Zn] ̳ 2>a0S7|'00}at7,}h#u(i=KCŢ8t,KB A"Ȑd'٦+9IWho$)_#:hy w5מ1l^D84uZp_:tz䮝A#zw`[umt2 )EG_b1Z~{):oua5LrxV)uR-O[N\:yUg ]1LT{j,dTNlBm^ t!rQ s)td;Ih uD91]*e~5^ynfNh& 8Bp-2$y9PF2]^ma`o +r-AN, +Qz^UA%Lnrk8rOg=}kGJVr}9){qO;AmIaSOqy0u0s(rO-^trC@l'6sATV!W6E/|@:KӨl)*dT|enszYj_a3|I ïLfa] >W0p +x*ZeSUYiW !) ql&܂[$wpZ$wwJСӤ%)h/~({?͎{no.O-=mǂC` ܢO¾ܔ^SR4Ğ5+j5a*ϑpZ]M ⼚;ԮB*$%JC@ti:=c$b]v,v7l3ty)#"D i9TPBW.UKFN.Fg:X}cũ= +endstream endobj 2526 0 obj<> endobj 2527 0 obj<> endobj 2528 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2529 0 obj<>stream +y\¿\^>m2]yR C2b$KJJj=nv3Ͷ/pMw#0Q RUXQXEgM M||t ?,8h2?z7قCN;XE]|]7E{jzm&to) eiأIIapdM+Tt:.LG`ޡKxȈ2o(o 2f%R ^b}LWfE~q^Jb\nd`B: Eiܲ:j!+t*Qcq1aDwkGIo$`C \qu+2c ^,"qB%_%ѐ1K + `zP+I2rɾ]7ش~C =׼ogl_("j~gD+)fcA4Q{kX<޾TY`(]Olx+zF?!eN y,HW8VE_v!N0 ty)Ofыf6|ڠⶵwgw1 +!))$7K, cYOX!+ 꺧% qcyzDVxji4PrStRDWHrۗ"a=% ]͡]_$=UWCJ|3J 9Rq%T +eЊ\:ljA㰂  "H}k+ ?h5m_cRǷ7q9)a63œُjXuC45xc>}p5AR7} )BcJdٹZNe"kmꌆЭތ1ۂ@@40> endobj 2531 0 obj<> endobj 2532 0 obj<> endobj 2533 0 obj<> endobj 2534 0 obj<> endobj 2535 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2536 0 obj<>stream +7{JjbYV\5[%`|єR +m0%#IkQZ*urmBwՔQP76ʼn+boW٥9u%odd bw;cX.R= Q =g1ئԀW P8-R21ӏQc ExX*S#g[M}{ZH܄655{zNw q-]=G0A,$aɄ)kZk1ߔj cm-ϑN]yR<&? na8=$GvvpFXAs7uD/$<b($fcaSS-^L9Np_ Tŗ #9B2 40笘29"UyKEܜԉa ſgb&2 +=.yq_kt4f9/[j#Sa;'h0r'("iVkѺ~=WnnԫYd܅> |M/V;etՏ S 熴As-j=%0ke^ |8! :jlt$YםB"f%ݚܖ;#RٲM}vp\m_uc9cvA} +WmFpͳ}/_Ĉ2nQ',=&ܥRZ->~$[A{tc$ åOq\Y"<稈{xF2H0sb~.D KPu8neÒƌLIwN~||/F,~g*)D\yM#Ci)uO{[?X:&6Ed{kڞGIo7&,Oij Arl"*^K:U )~YI9gdn# FxCman6v3S*tpdžI J ,r0, jc5Ę'ю 'ǞlC燬$O{!3^S+ر65zp4j *iMuq_h0QĤ9ݿe2dPI0Qv6?b +?yd *%':;V[KP2f ,3mO{q5le0bVpUsAk|&a'Re<+;6:4QfkRؿ_mf{.Rݞpmk`}ﺱ+ęyhj^; +1դ=0A8@%NS*[v1,$m ,EF5}Sh:ǤJ(.5lH<:x/XG}ۇurˑbYUheo&P1pp&kV5D9F&\#VBg5XӬu4dNim2 +endstream endobj 2537 0 obj<> endobj 2538 0 obj<> endobj 2539 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2540 0 obj<>stream +zχV2Ц9`m5;:sIk}TclA8$N85cY|ާ=&h109eUyȜQU(>wm#3i69@|FLATTD=j u_:yrӧdEGno"rDr˿O}1TRwgFCRKe A,',~}{ Ֆ:dҔ* u}5/)o D1NȲL@DgxmG#i 57 hl4h"(M5Qq+6fAI(g! PA'T=?B,nC¶~U8"#1p"n5ZO Qc*Sd*s{PΎbKn9b}jpQdV;O†U#oMZnPHKIy7tvJ)қ )fa.lSe=qt y,fމ(uHґ$zU)vd_SÚCDT}spq/:EAX/߻ gSλ3Z#l!uBvdVwYRB`.^/4$̷$ *\ J:юVؚ @ٴPGg0tEٜ.F K< Ҋ3 =l()jZ +<P=ڿRt[:ոw36dg4y+} @[egF7f/zFOQzb1 +QޕG4ۭh2)adžYO2CcdWelgFdh _'|PfWVq1V@A]A컸#6[AU=Sj?MY!o4x~h 43\`j6;Ńbo%i{>V;BBGxŹt2T@Aӷ ̉x#<92e:#:eV8Qy"?pP-Wkrώ>BT_alEMɥOJ͛bZ=klݒOZ?+Ҙ5&aV=+26ŤoEWF6Vq(k '!1Tlzuq])h`x?=Ӵb(o_-;MSBSlV}X^ùv,/T뷉I|LCghrcvڧ0HkK5,<و$deNAZO%F܀b'K lB Ѿ 9qѨ_r-ǰ{ _+F}C{u3rs ߶(\bܔ_%ij  +endstream endobj 2541 0 obj<> endobj 2542 0 obj<> endobj 2543 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2544 0 obj<>stream +4PZ!/*D;Gs4 +mjJvf9CM3ԛ@[Pнxlʃ!:TV?Ŵ dLJh솿漆Nl2KGC2#tƩG<5Cz. M;] \8{#wcIIpZQ^]?5;ZEP ~6j }OgߐE&ĭ>,+Ȕ|å|awf 2',S_KCrf~ʴvCY|VaٗBZ`"6PЦ-.ǕtYӕLyۚ#S3vKNu kJK4 +F80@N0`2U[ لVs@Le  `|oʔS<-\ i[.ysm|? 4>D"y| @v |vGl<7g"bv;sПr1] uo2g4=2S%YB灑'."l]r77z=g4/d֬ 6BU&-ſtMqQmR×T(8r -U nCY=ct]4Adt;y`#с|>TMSx{x@EK~愑 1bWeYu8֪kkC UPP smu4LϭTG5(BAxk ~ۛU_zb|P|T(hE1&%_꟤ +w74HAs0@fX&*nirb$f +a-{DO;B~aqy"m"zb0Rǎ]$)Oݲ(Tz{1V{2;~f}N +]nͽgqa`WW +BRpiY9?8BĽj}B6;.s[r[Hp[ -},z +endstream endobj 2545 0 obj<> endobj 2546 0 obj<> endobj 2547 0 obj<> endobj 2548 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2549 0 obj<>stream +lgWf7 BS}t&T{bzCD41wr<=!o?`DƆB0SZ_j7iG`C4W`6,M; p<@ [>Ye d _`Oe-аBh/ 8+D*e >bqTLqkB`/IŸ;{Z/>ml@(@3< p +]!}ʓ,ݲs0KVK2ra &B_ >a3!:=ahT|MI3/Sϲ[Q4^ :/cnǕ/kx6:ޟA2 +K*93$j2Jox"m}Սa*|+12LKc-9 *{JX!B=`/v?Ƀ 2]C3uJ#Ɉ<ьt +?/X+2Ѿg7 61ͽ m<1+x?a:SPZ+\M[x2 ;չ#vE-%_1r-u*F &gNGCE\II'祈 '"PdCip 5#-y(T?UE4h\OIJ&q xVxZz`[[XT>*l*Y`N7K3GOb+.4F^8$pp+X.M.R꿽\zqF>3pv )[bAT잪dQ%ɟ }͢>^='[m2u<ǭeZgA͙?VYh$Q&BrkD;|X*AJ!*$ Ki?YekLX0,Mk@$v}` =?a.9b&dsZ*l_njM^):rU,mmFk6E4`0*+i7Kj?FҷTK;9B +endstream endobj 2550 0 obj<> endobj 2551 0 obj<> endobj 2552 0 obj<> endobj 2553 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2554 0 obj<>stream +5 SZmj=ɏ(=y0e&) \ Dƻʒe~]q[9ԕN B@{cxML,nz7oۯt'r(OtZwY~Rs98Pf:߹QRV إ-dOVz"/cA牎;Jё ARd[tBn%_tdUƵEB3*@ɾMQuďiLc@ +pg2#S5$}B?zksۣXbfpPѢVh&{X /bվ݊@Xx}z0B(51y4cz]  +:ZAJu|w`\ꩩ +ieDIg o$p}W!r?X8 H_lѼٶ:^\?OJ}e!9E@V`2V|pn4U20%Zx-4I#Ū4$?h= H=/a٠2bPWJ{| +RJ|n{cm&;8"JpcrST]WO9=ٛa[0Xfr]F ]6̖@HNAZKa ~d_ /PkҺvM&i1oeN'˯JvLX~NR_De86]_N8In8pC1ejh.gp jLeHn[5o hν> endobj 2556 0 obj<> endobj 2557 0 obj<> endobj 2558 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2559 0 obj<>stream + M%ՉBQt媣 8mMh$MmCbg|1-J˝gڊ{Dx~7_S{nwG5@ 9m"(;xB[",v-# Vm +._iE/yad; dHeEؙC-R2B_bmcQ~gՐeULh ]̾exx +=y0}Z +q[OW")83.`E]HrbѰT5DnSGc.[ao=`XPfgO2 P :gDmXcvi2bPMx\z4)1k':\*0WV_bTr/7yHxL!%}Q`QA!hVZe/&Ь +qa|A$f7@P~vHB}fIqSnJC&2. $UJlvZkh}^"=RuUfߐ-BrhfK"i " c]Z;tj5=&U&qPG{dP#bTC{)S|9[$C{\B9vof~ V&C}*,%h6})D!:"ALyw[hBvn*,_o!jLX0 E_5HOYo m]gDmf(Flln(A?Ybcx/"?; +)QGхbltR5g^%INq#譖;WOˮ)3( 9e;b)x^sI?SJ^:0æN#@/o=d&)JEq8no,no`؝N9{֘l +C'Xpl.s)鮓r +$(y'+׹_ztw-ߗWYnA ò9H`#J.7Q㦢g8} h9U%gAL:W28mYlM: +endstream endobj 2560 0 obj<> endobj 2561 0 obj<> endobj 2562 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2563 0 obj<>stream +yv^EãMtra~? +!,eLigP+(@+\rZe&4MؓcsM'e 5щ+ +kjq=N-'xmwm~ @ɥrU IKQm'(6cYD-x+[SJq!(j;Slb?GGZ/pE&.(ߑQ7ʾ5ކ-ʳ!WꆥhXv_]j9Ӥ u!6^t}d}2:Q< +XXUn4*|sCyn2<#3B>PfI6"Ψw?1ͮY!D G{^cqjy.(),@(Y5 OsRC]C[g3;Gukat֧E/JnmdqEtI:7QY/DQN[oZ\bKŠ,'xѧfs39#w%StgT g;nYg,l&h MH!e t0=%ؙ8oIVsWy"1"{T(V=Hh +Kۑ;i rc!0N!YeS~DT?ZlC%`TsSHԻ"3+ 칶N -DmK8W4]/IZ7=t5K<_7ϲR3ꓦ/Z lkhCU^,ֳB>ȥ9fr:!4{) +`w +Gzyzt)7|֮?=_9SJ`>_eI!#(> endobj 2565 0 obj<> endobj 2566 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2567 0 obj<>stream +}MUN(|Ml 6 zզQ+7:[+ڙkbx?6!$tr^WƩn87\ZSj۹'c>\l,@=I i#޲y!'4GbjWOMV1oMrI>9q(yn" ]r0g8:ZW5pQdZ>^a^"D,L7GtrDXacQ߼9T<xc.HYwj',|rʿ*O iB}1? +\2Fx;>jtb/lK9J!qDn $Vӏx tC-`` <2GyG. }l[~>y|SjxȬ64|7\2#OqVg74 ؃/L&00:`GosSYj%>O:ǮOo𱆅B"^4=:ZevVyhH#"ܢt~(;<5FWoi?>z~o/<2c?W>^8-vM{AJf` e<7kt{ƶڗQHHnS2YYV՟(o͒V -_^ eM 0)ʂcIl04a]vgp=tb%z?AQ):0Yyп|<& +Xq:WzrG)j n" d5IO3f*qgqԫv*d Vj\Hr33eyd`Gţ-:+ͣ6y"!pd;d5`IӶYf}C1r9M~> endobj 2569 0 obj<> endobj 2570 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2571 0 obj<>stream +P\ 0G1E꣦#Ikvt mj{kt_5Bah/K3,7^6llPڶT(&̫mn2lj|X.!iUSsM!v5c76 + n*HOpJ&H ő.&U]b3=X,D#Td,] (5rC4Ӟ)JC:$%f]G~#ל bQD.a6C{|Cwjap-Q6JO/vۍT1!X˛&M!'ABoH~)x(&RǑ:L0#;V8?ZhTV!X+tW{Ѭko?`E=,1@!t)4US:%kMU +4I1ꌼb}@ }^6U1?7ȘmٯLࣦ5#b^e5?"(1&gƒ vo4 G;?+.;po!,|> endobj 2573 0 obj<> endobj 2574 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2575 0 obj<>stream +JuBO AF5Pn5S"KS|㐰7Zʭw[\1?Oܤ+8V!u%@JH<M8FE1'Y'=O4_{!l2+"B(qLoHU1):@'>n.AcQߊ;:cpȏNFՕW;ş'ί2=A]ZT q V.sm/U֟S Ldi!0RuL%P +3&GǓީΌO8a&yƓԃ=D1o5AO8 \ȏ5 |7/@.UECZ; +/.'IV{-֥bm_Łj'Ll4ة1zx @pQ+z Q^Iz3Oeae 18G׈uTU)mbgjg}ϺJO)D a._QX'5& -gQ_B{+e4GCr>[_B~Wkg"0!@Ln;t6H>*(x2^Éuٶd8U3\^rϝ6,i#G҅W~cZG!ekY oJgqSHspOϔ_:z-9.|Z4c le5BPcaJ#es +QH+Tکt%4tA: ]j|I"h^SsXHi}1A%HV!8ӫ]uJ7lKT=N2)7hU +U0]+CpA>1'R/z5۾]kqri5+P(;0t#YeɳvwNb6WޏuQWwnVӫ!>w!@"JRom,Ews'i2ab۟)aJWa=@"SRt20 {t|Fʧ@vݱV0Ҭ[R4O5Q`M%,(yȡ}ʂo$ߜ"@9Ǝm, +endstream endobj 2576 0 obj<> endobj 2577 0 obj<> endobj 2578 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2579 0 obj<>stream +x1|~=Z{WI* Gqg9^;W{RQryvta9>UB́H^rΆDj:ak )㔵ހ n OhjB7Y&.c^U^mUv6|x/ a'Hri6 +rxF˦a?J0OrTU6.k&*OC٣F)6/lڿp6NHG0hU6GUSIyݕ&f@]YZ;a[e2M,u:9.[@v#X l\G_P˦.N3SGxS؋0J;6:Eɣg,"G9Lݾeww^c"2c^z=,r}:0[L$/nݘ՗` {Рu 0.1 fAűGw&Pc@E@2Bο-{KJ83ae6e7Sǽ,. ˞GRH=5NfAw.YƐ\}9l(sv~XsFiB9>O/u.t34 \I.E68V;/תu¤;5xE +_V@pp^jl}GȔ'Q* ~ 更0:{Vfufj +g麥&dh06 d<8\_v'>~-P.J}%\q_|1~gInL|gƐSb `ZPY$w덻ȒEhL{ $ ˚+g3GƖ٥"Ǫ,iF&y0( +endstream endobj 2580 0 obj<> endobj 2581 0 obj<> endobj 2582 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2583 0 obj<>stream +YХhӁߍEjediJ*/v?ڴalQ֙|岠.Je(OV 4Sx%GZ "rq(ٽI ~W~CÞ\m/#?}P6RFTgܚiׄT rY0m)qΠu}/!l3msm\P$qؓ\?u<ǟG7B=Z;&ԗj]SGn,C3b GE,;fKY%Z8eϾ"Y؁=vK#nɦJ;1@җR$o\d@G*YJ#o(WFTѤ{xEaNufV F~F|38V.NjҲ%3;0|4 bL0WF'ҷJBS%F‰`6[z|9HL.'`U%ճl[9r㏛=G?o*Vw呥vZN+T! +'1yfd7Wrru16d'ߟL *7W[3WٝjzUT\vCCl* 3J~\!9qe"o07I0mhK'НOգ0X4T/ 6SEܛo翅 ) +%a +Kn262P [d.xō!{6gLS悰3@Z}0q@ c/0> endobj 2585 0 obj<> endobj 2586 0 obj<> endobj 2587 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2588 0 obj<>stream +o-XLu[ riѿ Wf7Všx2%nR1HUA? " =ԸFa3قٱLL. 2nwhb sb٢3Y;!{ H#dGiFr\F p=ΆE޻$-7s]:U}_ӌ{@{ UkHETFS:nnu0&W1},SQsU3MC =XݣyfU>Io_A1Ta`<) { +H~~]qTX[]>/~-74}ؔw%hOBb/7 =39ϻu +LͲqmtЈiU37ݪѬةNL<01 T?OyOek(sPN"+I!LD04;2+k15)p5r?3jŵL }\G_X%gr?],l]6uu_4v^v@Ս6VI#Uuqng(N6˲bưZɃaBYIaj]d^fj+EP^ ]#6";Xf04[KZ7C`d: r+0ѩ #¼xPStq?0%{(>7;!ieaǐ ++ 9U|M#FGPcu{iS +Ag1i:Lߚ'Ӵ∥gȲS*WCt6V3=\GsԍP/ YyhcM9=$F'd&:WdD;o718(uz}Im]*;~OH +endstream endobj 2589 0 obj<> endobj 2590 0 obj<> endobj 2591 0 obj<> endobj 2592 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2593 0 obj<>stream + +kX~]ITQJlC4ˀ +6mU5"R)HGm@ˠ_a)4)Pbs=ZE{Yh_cWmpr% vtflg~g#H8at/Ȃ4E0)J3(V_uGH7z?HVV !MPۿ/BHh{?@e`Bc1IbZ)J uiVH;cx%-?ԿG ?5^"$73n;2FtJ F83T6}\ءjt04 aDG, 6[T~wU;QƋ W'J&m6%ZBfJ7$@9U9Re1L'bŤO 8SwV\:&] !]hbo{6SPUuP +W6CRf׿޾]xp]JRu +gՊUZ QbD5jF*/'SY$&z>iK Ԟ +DoM9w$G> +08`jubw9QWc3=3C2@P; ^7 +uRFC[ + +W*;3[>^;J1S,zH0-~X-p;Kb }|B +Fxz䷥f w:{N^&Av(?e{,m\UA2:R /hiQe&m +xb@rXW7 w1KӪ[zV b}dSJOT|[h> 0PI%Ek;fhm ]w[~0FlTk n!]oXc( N\%)i^_*|sƄQA3Wsw +\&0c$>cL$<'7IoZxhĜ),]Α;G}_?tp"hy}Ya~ӟψq"SmjMnk2 R'T 3"O9C2iKA4Oտ`-iyΡA⠸è/éx)ᄵ6;Q^|^ܒ +endstream endobj 2594 0 obj<> endobj 2595 0 obj<> endobj 2596 0 obj<> endobj 2597 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2598 0 obj<>stream +To?wiᡪ} +tW"oqX/W_Q\𼒏!dX>MGe>W,is*ʋxj^"H^E<jZaLXc)}lZE Kl(ZQa|ȣ}xfMu_.^wM&(5|ȜG̷mκa鹬NM%cld4i :P0 Qk]ZfF z3d ,n|"$:C:@vH_F{j8`5{#L/bGGK0ɽGf UK"=y $yp]XBZnj3*]GE4f՟ڑ.Kfc)ҩ clui$(+7BtZԳǣ`8r>X}rh铃L}?y6QH{I9t%b'?f1,CQ?c$Q ciU ŋ,\"uT k$:L{ (Щ ] ]-Xit)Ww5 +ߋϫ:dDr&q(B@3up#[y~W +6煢ߛ.{- +Xl1bpӓV*NllT EvA`y"C|=T>+ +QkN!= +BVşcle$pn۔_Tn&ƉE23V!aCʎݎFpϛ疱ձGtgCMGؙh l0Uպm'%逢<\ɯ=y=2'85fo֨ڐ%RIPϧ{C0rjG:g2DntVc&#Z:RmL9& φGC8Gv@/AA`~~#uҌl(0)~؜gG(#M!mKF|2LW|~*"nO0%^ˑ}iVrYװV$]9E$<McWvM-*Ieʈ5-r~08-G4dî䞼EB8eҁfMj&o (%l1oOUY󝺄w|mHۺ07Qj"ಊ# %D=eOz@+ 8G>mpcTJ/9WsW5a BL6 +'6Ꝁp (Vh//슮K ԓBzE+3 +endstream endobj 2599 0 obj<> endobj 2600 0 obj<> endobj 2601 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2602 0 obj<>stream +j5I@_-^|]Iʁw{-V&7deV9En"h<{jw}z>c|M~d7|~f>8H4幕H|oxYK`||j DYg(ݼ /o;#IL,cC3Ʈܰ +3J8A87b(޼x︩?dD`Q1~82'ೆ%Z BcCU,ƠMr'rQj30n`B30܉ՑoTh~=AN-nl:%$RPwBù*ccxٶ~67́Z(;n8 +$_pP"6TֈF<+11 w7x +ԗnRÖaA\[hECŖqZ$GToHNJޒ[D$=nM=#jm=3 ~X9fPԤrbĘ:CL,,j_,?Qlc`yHa7 kI|RN43S%ZfAj1=d_fb#~2P8}o +2y<3nt>6;-9>v2Mb'r&G'W3Ifu0lضdX 3n\j7pf8} ?@d1yCyFns0v֙EY%q>RGZ ];APH +:N5Uv~\_$5Х.7!RGJ:4tj?!]$9^R[S< [n?ߝ 8t&擰)M֜fmS]wd[*2C,.e ;cc%m HFzCu-%^ h4nDTɖp#[%*aE(IJ>|u_2-([s"^nW;D^ʈ CjPKSmy +Ր +endstream endobj 2603 0 obj<> endobj 2604 0 obj<> endobj 2605 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2606 0 obj<>stream +ޱ#k$v Q3Rbӭ>BP}[RR _H(`&j^v>۸jgAt٬> b .9¤*t BNeg¾ T_hok17E@gK|zS0(ÓaE2pZY25R|qe,VŰ\my!hilW txBg YP׎wl2 +vdXqx;4]ǀ@ok5 aNoC`":D_h'VfF|r52|]7p(l`""'>~DQfeņS9NABEiWA#]LO[Ml; +| u48 nehƺe]y"`Ʊyl1#W'xLY! + P^ =Κ.l%@zA#6XR sR P)~)Nk|`kS-,*<< )~r~ntm1F)6R+(urTn Ns0v_Qq`Ԇ:fa|u%ǘYVb`UE7qF?ttːm> endobj 2608 0 obj<> endobj 2609 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2610 0 obj<>stream +$,^\--#,j~l ^%!И +S HK4~,(Vh&d&Aa_`/‰)6 !c4m;G 3rЮD/2m\dYUZs1 C7Go?&L* }yw:rb2YZy5?maM8Td6||l42%:>SC JڋpC?'_Lc6x=5p<[ ]JzNIsU7v+lvܒ/I +0ȉKO:>"k/RU~1Bfp3X׶*F<'ܗw oh ѱ:swuN%wݮ'ZE|LIk5<ڃG}$c{LNߧ$*ֹUD[P +endstream endobj 2611 0 obj<> endobj 2612 0 obj<> endobj 2613 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2614 0 obj<>stream + +.uV\#Tк,#O+gD3cȓAOV%4[D.*K> FY+(l/2|3$6E ,yDCI{_kZ=C&1Z啓i^)^Qxٗ`|;Lq_nyWLOAF&!4g388zW&s !EX?0HՎp n]t"%$M=nQPiMptf }&_H:FTmM*j$F7Y*2_:fi9 +2U1H$= 0B< hy2s#T3Zg_v<-+_%78{ V}שj~Q4jHupPkgXWN"on$[~)*H$zoTG(J0U G2}^֝،'f";E1uM}Rw8{5+EV4f, :U> endobj 2616 0 obj<> endobj 2617 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2618 0 obj<>stream +HBE%#®ZsvJuү\)&G[4lڛ +^T=c&wjҀ~(;XO(a:͙xlYJs$/ Oq*=@MJP9rY} +Mp,);97#sHEw#dũu>ѷȤ:!ZXRYpCV."H FYEht:gZ B6' #2̌(oHh~sL#.(Gp+UB@ :|mz~*K->$|o*j(BN>Qv@O-Ua 4] ؉=,{uie ?c&EgkG"55_oZ ,M]mmGHW2sk/rYέ]uz}:56ؔh5ƨ٧1jv@x,W 3F N]?5vq3x\sj9THg?vOs$/ԝ!xV/rw+\qar$!Eڵ +gHzc95z}PTs̀FNY)#rljY{U%H%[f֕1TMl/~kGBoϯsI<)R:T|Q 0Up̎}e`u&U +endstream endobj 2619 0 obj<> endobj 2620 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2621 0 obj<>stream +oFb~yGmK-9_T[eݔgw *zWz p:#s:/&대'NW̧综>vMR[4|kMÐ`1;J%l.g}_y)#lP5k'Q\\xiVr+A{\$6HrY{.@|e0e-10Lw!loCsbINGFhuw^#f% +MK9Ue55ZerϊKHVλPCẋv>էVO-okPJ"QBKu9.5X7Ez fO3 +Ŕ ۆ0&oۖ]wbD䨜# *#}_fTaԃl=WQ2/Vū[ŮuQԲEYȘWxn+3"KDmo/%4 $#Zdʊk!Z2ҕGLsyzF:BVH=s`0W)6NvAs)Oi>ARyItؿO"P KHR_>Z+›?8_'DtdfSV },Yt%N,҆:euEem5\6Zz!W^$]Dz9.ovX*n6nzP+Xj'eXX!ڄ\msJwq4Z +endstream endobj 2622 0 obj<> endobj 2623 0 obj<> endobj 2624 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2625 0 obj<>stream + u.+1G +[b7z̏!9(,!2v.zZ hyAeD Kw;d/ICN$$,3tju7<>3ןAݬ8Jt*àIڮQ*Ns:wX4_z)-/*<45ԯ|)ci\DwZ_s`vsBϑa,y›!s>n](.󞺲h8h#Vw,4-En͹~T}bl8ΟSz:_7M"#B97Ja wxR*3BM}i*H9q&k~-sM~ԕnUMQs9#tҩSMu@i71xrrnvsCcyj-M:2p` +SûBbڋL_^|>o0@AZpL,,XVl&*=3I %'8cqw=1wdB5Rk:_1FW݃d䎌aUpN5gXBasmV:L<XLW_Nj QFn /Hm& EyA\&)sD ϋ8{$8:ON7Xȸ'Zh▍*Vr끄xœ +u> ;H~R@ Dg=jB4kE0Dơ*#e<҆ ztV'V %=P=,FfI9 +endstream endobj 2626 0 obj<> endobj 2627 0 obj<> endobj 2628 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2629 0 obj<>stream +H@ 2_Ik8OvkfRWL1d`lx]uBygO߷emFN[+k0 /}O!nفrFQJusN!u;(Jȧ>$\GOډ;v}to; Z>\I?/^ȯJ 3,Tw +7bQQ_ ~=$.'OaAT|`ެQ=L8Rf!^C>Ңz̏3bUY앖09Ps^)ULik,?QԨLQ`AqOdCr_<Ks`.q): +1\OMuQ g4Olluq pK!r9R=^ ҾkW#eEaCMT007rדq5 ^EhQvk;IR6܇1nƿ+!ېt\2rX2gZv< {Z_G- 8/ Eb{ٱ䗔 >8KѶV.kFZJ34m$iqV4p>`xqvHm BU\rGS?'^G`>pbI^oB(=[c& 3c w r}f/71dj^FN3* .i\۷d{Řy]yMw P $nK?v AWQ] dui \?c)V}nymg4K*X#fj튈׫4XωgbSԳ/ 1 4_~+G}v "ĥHﻑhI3jI "lvOzRmٳQ +endstream endobj 2630 0 obj<> endobj 2631 0 obj<> endobj 2632 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2633 0 obj<>stream +B-,\m{qYZbpuJh>&fdA2-lr7s[\5jƵ=,RM*2D9va4 B#,}l$qCC" `/旷Ք=9$&Jbk8{N -\=II\Q*g)VJmp<{(8|921:"z*mZs><59k/_ٟR9 O'YÓrc)Te=ޞe豃$]6O_(4e (2?Ơoo5OaqsޖSd3R/'˛2~aA&*qY[K$K{{L\G.< O)Huh3K.cB]եq ƛ)zp +H4 LG/ |wL8yXgYHPr^jil@l%JeJK 9"-v6@C{q}Z朂UH?%p5AXZKѠd"6L3%p{.U衏 pZlճ*q $R}8xỬ J2]OFD⊧恑a.ЃN긍:#XASYx0v2¤JC}x\T C=SUe6x|8p3;PsH*uoI˶.49Z6(vFK;L>WR(l8%$g z +endstream endobj 2634 0 obj<> endobj 2635 0 obj<> endobj 2636 0 obj<> endobj 2637 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2638 0 obj<>stream +-cNQ΂Ȑ#h}8/ :> x3y޸A_AO"V`x',ϱ6c~x"Nm;*Ɓ 3Htaj׊.a<=P shpApI{/J]= +m'7fLf }/ѲAe&#I>ߨl0y짨(B¿j|FSqU ]w3Ewpn$W $4b]g\WbE~R^ E\*^&qq$%oa5 :(EpljSui,c"] +?:C!Er}{c \hF"HZZ\coacXh5m-rWtލ|prieNt|(sAsod`aO$` |E]K:4 E9 Db.^I YSNFdL2mLw^3t+ +*ȰK: aت ]g&e(e5t;7˯dN_EľO+ę7#O,Dg~RhTQFK4?aݮt Po&YU\scNK KZrne,vSgA&?x$vq6PyWXޙDSFdn BmsH+'-#:'?4^Lec$f jĭBؿ0Lɼ{層be +M\&V'Q 7^Pդ>HF%~j~aVKMʾ-s> ԼV:$ۍnsUf&sϿfƿssYTv_0>G}DxfO)oH~>U(K"nɛSB?=!"P5:.p?ȓyj3xg%mJýšifҼ=b4Ve`n=45 c|zF,>@;I1Mh(oy ԁ-ʄKWmҜ[m)}qR gzaT$.)&G5MyDcb1BhB>6xʕlO#o*gĶ3X +endstream endobj 2639 0 obj<> endobj 2640 0 obj<> endobj 2641 0 obj<> endobj 2642 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2643 0 obj<>stream +4bm= + TϮ/gmП'a#Zi*OX'7hS1@şi iP`!6(Έu/ 9<+sjqX WZMW\e &X0eY]$e$<:?$~icƸc:YG`Ys ý]J=ιUo4fAزV PՆ@xRiQ}ݚyS`}*%` ݱdgO&?;JRz:*3RvDp0=~J&+Ͳu[bʆ:6}_$BrNq@%l#?PSH +59JF d5q/L2O _gȑ`+D#×>a}!ӭER`)qZH/}Mx9I.B#*o{D;3.Y6Eƾđi \ +ԚVaW0}Q7Q Mr,"1vsOKfN"Cy"VNW3iDkque.B22{PAri )@usnWwkgQVV;xTzwց-hI\F54,EXKG2AG +,\&/ʊ[!'JUPKuXYԐ|0%.G@ t 5;WMCؽk/ӘLS+\TH)RYtQ)ݔc߈hUWТd%* +K;Ա;'|砻H?)6)FTyQ&1NpiC1 3ȴdS"XoZd޵4R;J2OPeTzX7\ϵ?8!@:}>TOņs0z. j˫I˽Y=ov4FjaNc 2J1> .Ad6g&`p_1o+(%ZSFn{s[iOTzĥr\+wէoQйv:(9)  +endstream endobj 2644 0 obj<> endobj 2645 0 obj<> endobj 2646 0 obj<> endobj 2647 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2648 0 obj<>stream +cy%TrљjDx{\&jʱ4oھbP0H Tn cĬ58 oArz uT m"v#[HQ'\aq)bS5K=zr\HW|o,*:6We3+Z,cڎG`V?rVajNl=\.4 j@~4?s4.2Qk%ei ;%i4zA,Zy@*ݥg> c5]#(+̶$;qcq!9rR[_w'Bayf,: j.V5t2 7MUƧSѶ{\XwKyD,3559/@98&EиFaQnHUU83ڝTH>oNĆ FM3P<8KĢfx '4$xQaFܩNJ[B&C~h枨$h 3e4 Dj)T +vH|cǁ$''ҥrVnN@7\čb̥{`s3dt4{ُM;w,}ZfdsGNgDDYmm|lHr{簹gQu +[p=ȼmn[^P(½,pMppf|=e*;YBWsCBucL4V R !w +endstream endobj 2649 0 obj<> endobj 2650 0 obj<> endobj 2651 0 obj<> endobj 2652 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2653 0 obj<>stream +CIX@.,Oo)JK`SEFq8Um$JIjUV5J +t{I6t!k[vC Dœ&ID/#ltϩ~{0YG+̷B&]%4-}E7kq}:(v,OS|jR>V̕74 aR%Sl ryvKc=IG[CbhQq zM*Vb,%Eи Füp{K_wʻ11QawGѨuJ&؅ORPh8HMKDfW-giI +\jlC/1+PFXO8dlbӅlwVg'Cc bEc3HBdGo+U_g.Ԙ!aN5n-)Χ:*%u4_D:g= 3-mE)?giÛPϽ0.JdX,!!/' QoZWjJ#!v8ÓB;2SnQ\+6Z$=DM]{of$uoFJZ+> endobj 2655 0 obj<> endobj 2656 0 obj<> endobj 2657 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2658 0 obj<>stream +0K +J(n+7߿Z` 5;m׆ ҝƘx,}I.qi^ 8j<;f)o=WҒJd$"COb<9ZhIYBD"ZMIQxdxۊ/ZC圩ܵUea#߹eKP׸s,iLv< Q.[`MyV{>jVɛ[tfFМfTۤigf^4r@Qi/ A]+:ns^GI-)@ GnK ߀Hٽ& .Cybsr,x ۚ^Y؏8Oֻx5'VBB1NG$twSL&` $EKTø`^+f2 ?.? f!Z9Vծڛc&YN@A(A2^޹ GtARV丑dC̳(|XlDOe$P͝rrX''Mp\o까;!4JKKFԤ?+[q$.uOa@T#UIn&|Ke1jA|إ蟖c;@fÞ{0qš+wa-<[spl&mVfrB^Qg;uwsuW,\"4髴(I˪@dkĔrWÕZ47vws +eI| +tU$ITN[P@{> endobj 2660 0 obj<> endobj 2661 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2662 0 obj<>stream +dj^X Id+W4LF-ˡa"ۦ;,CSfs\s=$*b\ έK\neFo*GhAlp'uR +#)&;41z\I$mvH 㫻rjs+gfMZ#7t%/@}H圈lD5\D#%bI'FZ^G.Lw--oV pZUi +^%3zsg`4O@0E![-H㐗]yzcsM G>tM3j2KyjƘgϝ0$2Q&|2qwSKNM,%>%uei|mKW?` S?jO7aTZ1gR +יs%yբhSO;˶6ѓpۮ;(9|׼zet7my=m}Ⱥ۴~1)Ҫ \焥UK.+}rH"Xwo?_yrâ8  .Q ~ؤmp| 'hcMH9a_(N&ڷaXU)*nQ,H;Z'dg{_C%,Ӝo,1|,-X6R)|,ceA)`뿿fdc=g ;3RלeoBgwvϙI7?z^0 $?}$u5cG4{Ѕ軿n-8 #j3Ed[C;gf܄ۑ/#բAńC:jrNS|+=:L_"x>|'9q!j!KmC&[:uz舆mޔ.h]4'2- +endstream endobj 2663 0 obj<> endobj 2664 0 obj<> endobj 2665 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2666 0 obj<>stream +2`Fw].C&Hr<Ă}NFi`{L,kl: +-8%}8\?onr8封 + ˆ&Y1ѨCZ%7Q ݽ"fЯp?rd`?_pJttug85oT.h^ [ɩߝ-To$TY9mch[D0lxbaKՕATVaXP<Q~nt҅v`SHgOg3XT {B - %^{2(~!hR)N6P.5hgν^dd 2*t8i2*[8Bg}#|)hr\b~MiRw=;Nj`P=E+{fL^F+q_vo2.?Ct<, FWI!HQAU\Xrj ;i!Ȓ/|Rzy黟 #%*>J,X[ *M'.?¡XIsx5r`ğ}23ӟ@5/̸?F&{AD5ɞpJ{L0{}ԊaGqރƧ8azg+٦褉 3\^ 39.ְ"46Z}S =HuԊx a͹{76-|urCgGXQpĞ&m3zq +`m/*5_rBﺝJ"9m("$LYsa#2 t +*F˦H[  jBNJ]:7-/7>V% ` 2 +r*YV:{g"bkvEڏ<.NOj#* j +$kg<<1/#as0/( 4R'Γ[+3}I?\Z̈"/].3 -y:CzHUC 6-Fu5kg$*4U 5 ڐNDT ^Rau,bOgR_ArW+ C2ڼ^X%HDQLa)'JfλU T֭{]  j! @J.}(ƍkłS,t &U!ÌB/(4\W!MO +_l3Y• +^aX @W +vo-co۝  +endstream endobj 2667 0 obj<> endobj 2668 0 obj<> endobj 2669 0 obj<> endobj 2670 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2671 0 obj<>stream +*#U|ǭ +~緈jTwG 0}VG;v1 +g)Xv45ǥNvkڒ O< +Vms՝E0Mϊ؅yEh/)`+pf `]4 !CϘ_od\4)An^;N5-B~E'JQ)%Nzʘ <9fO'sHg=C.; T6v8|;n@{Ras켅0' ʼ*Kjdh*=N=A*9ЏoV:5LSzC'N;2h~5mJٔBK +qa f\AxO` u4^P +b.<}TAYRvJgڍĊMqAKEso18nd_ѡNKAp7v30='vOsc@ԬU_$ʵ0Yy%E^P6@{..36 !@[QeUz.{<F* 8ÓJTubƱ6O%W"tպ> endobj 2673 0 obj<> endobj 2674 0 obj<> endobj 2675 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2676 0 obj<>stream +wK'䑧*!WD1Յ\#V?j;oURa@ +2b:1_wre un6f҂0 +Q[hՌND Ѯ[v0aO?D +/En"Cv\zP*`%WW,B,7\}?O ^#Fm%Őu9Yc&-R@kz,%g: MQdq0{՘xI3T<` z\Z9nYlmyݛK/@Y|ªhtoVJ.(t#@'C=Q[(nTRs=KR W/XF&+6 KҾ\<揶G(ט=PG);=v"PIѵ,9cA +?EIo{ A$vS&%w&`cg6}:pO)`Y]/@oS Ru`S*P /m:uêg]!rGg?qT4@ܣ 31;QP¿/xC:8P㸪1 +fQ݌h4\$%Js},;>v8 \t=ִIm2d%hd6-H :H`L`{qxtb$k<_6fsaqT D-ŕ潇z{]6S?:g^tIK{:)К,a*Y8W3`sl.NT%wVXpB,wr ~a{ӏ{]"0x%轍T>(ZaD$].yQMKIҩjTQeܦd2 qy5aFrQnE7_qRS_T!:;wAp Ҟ%COOP9G=m3@?@6Ąa#@ROB4 cF ;;́k3΃`y⋼2痊8-ŻN/8$M4M}9P6$ ~m:M6\w긞ԫAGU0o离!RigUcQaߴ Hj}>dK +endstream endobj 2677 0 obj<> endobj 2678 0 obj<> endobj 2679 0 obj<> endobj 2680 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2681 0 obj<>stream +EܲO=PC}}Erv_G\ݠRXӿ [/!ke!/\^rM{rh3V@A4}6AEpOlXȡe['W3Sy}|nVT;^  +W޻TDN-B!.)R EvKV xhOJ<~I~Nr|uKW")HROzָp*zXwOI᧽]]iёy&uwJEi1U}YAo4ZՑ[y4k> u +|pkChb3`1Q,&'\bؖ@_spӂ# oO\F4.%/F!0r^1;у~{P$/oz=A^h}S'Yz@6LĩJ!j?DOHrP_Y8Q>@ +?r +̜b0i <ޜi{M*$cB[[] aEgm?[Os3[nE2 K|q1hmF,3QYyqs}ݢ-35.|{'y=#^&lN$w(`ޚ< "=`᚛5dꝷW32\O3SoYdR.u MXSz1DÎY9΄ x54%Gt(Ng+഼UA!E/au 6?\ H{a+nЎ +ؘu*ECinutu_Uu1̊DJo㫺y> A<8闩]LAg`vY% (N151h4pVƿsKKZh# -FX^ &3d[^eRyKe^[ !و} T¸ST*啵Ssǔce8H8lmBxQ(cqڊ* +99vW@1 CA$Όq$r +`xbpq/MNjW0~Cm.\&lI``n_Gl,k>coO?#&zB洞:0]øJ+>^ϟi텧F ޳Dhsp,:9T8 +endstream endobj 2682 0 obj<> endobj 2683 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2684 0 obj<>stream +zCDWӱv"6,xqL#1 h=ს?0!>}hʌY )z +|_ +jo[wu[PXt~goۇN<e@ +Ux@ o7b*2ݬA A1s7~3hFzkT鷸`TeG{b^@jE~ , GR瞓 sMf?|Xj%[$ʖX}۩?s S[(']&mA_(ͷJ"e2dT1,j,.δrLŴz,'> endobj 2686 0 obj<> endobj 2687 0 obj<> endobj 2688 0 obj<> endobj 2689 0 obj<> endobj 2690 0 obj<> endobj 2691 0 obj<> endobj 2692 0 obj<> endobj 2693 0 obj<> endobj 2694 0 obj<> endobj 2695 0 obj<> endobj 2696 0 obj<> endobj 2697 0 obj<> endobj 2698 0 obj<> endobj 2699 0 obj<> endobj 2700 0 obj<> endobj 2701 0 obj<> endobj 2702 0 obj<> endobj 2703 0 obj<> endobj 2704 0 obj<> endobj 2705 0 obj<> endobj 2706 0 obj<> endobj 2707 0 obj<> endobj 2708 0 obj<> endobj 2709 0 obj<> endobj 2710 0 obj<> endobj 2711 0 obj<> endobj 2712 0 obj<> endobj 2713 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2714 0 obj<>stream +dV9_Qy45,uH59RUwwsriVBnxPm{=@{]*J'dl)>_}oݖbp>oA'/!!iޓǮw +Z N;RiH]hF*R-)=3T΍ZlAv:F嵘Qus.!ַ +ٵ0%AyS ޣL1j.cd*$zb\ܝ+eYw_%s!Ex^*BQ/p څWSt9vڹjQNۊpUS@SČ|a[>g(`J6+mvp^@& +lSy7;ĊS- h;~>:E4n ,x(ª/AШW_&OSh\)Ҏ lewx6eu'#̾>oسahg( cr)7ɓ +5/l!hy](? |C82QeNj`px_uݢC \4-EUI]oIՖJ<:>ue^VTfvh>{j Qcbu\҉xVø0t +`+k2OSm=9VU^?PP$b#4{"VVYͬaZ`NemH+±E%#J!ċ{[~ݧZ_cMH8kXUj:oԭ+㑊!Fqa ⩋'!zNi*?[uDk'm Ֆz|(9Թ. +-lvRk +@&'9B6Jx`x[U۞rQ cbj:b\f\8z*F~U?k']$$ڶ0tTcBW$ !`xCWj~ۇ*8|U*^ƨmn/?l ^^4oLC?ĸt|8/j:tu@>%XQ~7x-lC]b)7)KK<%8Yؾmn[v~$rY;pJrl]B3M# {Ѣ¡Dq`sw&@ss +dyzǗa?CQپϐwr䅬Bz#Q%0zV]&w(e }{^Hϩ@2Ja+5tC7NryQg_-7egJK')ˣ h)e!*iML.8 ۚ!>g_i<x/,<,.W*O@6掮F +I7^|&q|]ݖ\Zj+)6f g7D^5{҂DL2Sm ZIg/42XГy| +Q5Yܣ6n3Wڧ?#"%fo@| ,=OfRs䮜;n;1Ղ.ɷi֯^jZ衠lzY2Տ +Ud' !nɩW ++d:iƯҟj=NJνV[ݪMS3n>C~Å!p"s#OLvB#yU<3jD}\:ĚL w +7P${S14!c·$c ;n0nT&=55n5&C~u8k9 $BE{GЬa; Q,֤;śvX:4n|B7퍈9@_p?k^2нUI-o0ŗ,)y""=QҬ|w!o]|5 uoR씆`{@q-EC$>/6gsF}QZ"d( jWJr*tJ+Wjbe%X +6nf' -hK7)8.EvtUAQ_ѱI_m?7=w&zt5Vȝ$Vu‰6$ъԒo,Gq/Q.".6ʐ}J3 4D!,(t?|DŽm).Ϡ~w)D1gv,k8u930iTucʞ|' `YV ԡXLuQ4}Nն +endstream endobj 2715 0 obj<> endobj 2716 0 obj<> endobj 2717 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2718 0 obj<>stream +8 +WtyŬi1dT}v[}2>EQ_dҦ |K'ʵ35p6-pTpO;w Q`@ٙϳ몄@)F{x(@ cUr$.(,۱EtJiH:}eg?N:z|L~fH=͸e N6yۡ\YUIW/ǘtֱЙyrܵ7"=Tϥ4ۃ0.fRY-VM!:LR5h#s@g7iJz1c)sxI !̡NMM+U%LXLg5C끷O_omk299d3ln<0JЕZ:W'].`F_p 4e'^>|FXO VAڋo| +Xd=?eGg{lhZQ6^HV8"iXSgHtA"m@&:\04S$KBO?u'^>dƶ2sK.B~Bɹ-$ + N`> endobj 2720 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2721 0 obj<>stream +Pa䠥?ߣVt8C_GW7`1N1Z_U' Kk(!XnuWP\0'9J[9or U4Ni0YHJiw|9 ($}(u|h,r/Kv 6(3Fs_>t  Y&Hw89ؓY!XP}A٨~nx6pMߘ;&ֆxY z_ltҧ@9vړzˆG%_ Faa*{T2_$t.C顈l. ÈʟȀXʰ8L*07Vw}Kk\Zs~\u!^8+n1hNCҋw[?mjMk˸YKڸz`ɀAQQIc'J*I#64(E _%}N1դih?*2{q0]k OUu@eK 2}wO־PC:-uAgkμ ʔ)u}PkYThf=9n!^⭚"XhpՂr'tz1$C" +:ar%1~A$8T!PY[UҢX]RtGJ~ѝ#f+ 4̮~,xq%jBx&UH/ !KIJn~!yăZ m'n syB)@ c% +ʳcHX#9в8zK_zmI$մy yaPhiil⪱ {)mX#`NUCϰ($|dım:Я!mXHRHWޘ=2,kODaJK$V + +endstream endobj 2722 0 obj<> endobj 2723 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2724 0 obj<>stream +T!U^ FK =Ի b LoaSq]q{IXCqŬ(, Z63]/em_XLE6sL9sr7RE +o=؝qh9(yano k8c\'^1A3Ѹs|;u8B}D:׼u Nu?^\"p i0 WC?-$U{CkzYUV+X忌wK}@Gmbͬ:L9\0m%CinAןIf쐺gh!+t +.-Xך_="q@&&&ɏ(PffFx)ϸx >u)@MzƚD, +`$ܼ0:+N\ew(h:8b媂,r(zD/ ^H elwqt70Yr՞C[ߊ@+gq.&sy풒o~QXsy𑭘=%?PhWjްEIUc!w {]Z87xQ[1oBX +56^j G8?Bd 3Q)/?W[ +^t+cT& ` h!5T00_`ے[EgD!ꃐRi^hԆ+rav%%d_: A7k{nA1uW ܭRd6Z s_Ak- y_VH~)f׵(N# %S(sYiK}'=e sX+\y)Q!o ;`V{=ǙBK,y*\y%|;{ށ #(O+]YX&=Ģ65<ڱ2u3yG?Lƹu耼z1ML<(3TƩUYCI==nSrU +endstream endobj 2725 0 obj<> endobj 2726 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2727 0 obj<>stream +fY{rI^Adҿtd՚꩏<.dTC5]˩8q_/( 06dL^[9bIoLY+4ʠPV]g-jl3G<~|<$푀 /$8Q6%TYo y +ۅ i~LR7^Wgd{M)Ru.A'pFD~h|[Uᓢ<&M_}V5'fNEGkuB.5;B(@ЉCMC/.Xy=T5 U Ն Qڨ5\B]c*yjHuUJ%eۂyu: $9J5>EW]=^k\ןr_`F0ޖo3Ќy 3;GhJi㕓ӗxO_|bl|Kw|#ER@\??<C<7l +v + "m|'Zbv4E7-eޣx$1AO\\*GOO&e3%̘nzFoi cZq%x8[YcXLhn[.I(5}uF1u'C:_ad]z +qۙ굁T!T5xkG-v6ݽYTC2Ҕ ]|UR}]х8u&/18obFl\˩&r@҃E\NA8"qZR.^ˈ+4iUhgoF=LUG +&Ҿv*vE7:k *>7H.WR~&A}?/q3&$6 TAvmx Lv(sXO b[7³A1ީ8ii:/ʦo͌9y4-צH/aMʑ˫cYz],N3jz)in"$/#aCك3n9yF^d; f={Cdvv{ +endstream endobj 2728 0 obj<> endobj 2729 0 obj<> endobj 2730 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2731 0 obj<>stream +7YP5$A*/T~[Ol YPO±ʩ:ﮟm dQT>/ea-ByqF)L2X tݳS\.-S1MjX#PlO}cʘU~||I%(XK ֈZ`>Ńv⋗kf@!sV;{Y %Nٙ9~NFñ@. OUlzxT!N P$!(Shc1\2QBe~pyVejZKdg}o53l L5XQyht--3WUTu^hgjھfQM tR`1l"=imxa@vX_` io^-X@mVXOM9A?T01wC<0khs6X/>»Is1#J9F.pudKV7vpr_ +SC,<7C6j((cmP1A, " +IZdqyi:~cu?ڻ(sp@}첀ux`cjyEG226?uf%@>},|6茉Se6ѣL-2Xl\B&(Ҳ { M@b3XxՂ[`/cd.>=&$ѡಅ󣔛@ W?Wjwz('[= }Pi&!ԗY6(Amm2 >1҇*<MtxE8jw㰩rҚ7jTop4gzLJy[[̈́z>U(̨[@ ufu  +'6qj|}?xK:w?HO'M\~9k=GJS;~]q&ޫ幂nEsX'i ag4 #z#0akCe{CrHmFW+J݋bqn \ +endstream endobj 2732 0 obj<> endobj 2733 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2734 0 obj<>stream +'smFFMY֛a[$)U:#>S2?2)E7 ~ .O}r,~iwbdֺQtPXI.x#}!kF* ߤb|LE{xu$S0 zwq$^ȭ°ÅΑk"4rx&#]*-W)'`ZL:V:j)s ^ުˆq5Ȅ=ޑ Εȑk82 lj>> tT8z1%sv۔σ@w9Y '[G7?pf@ؕ0Bxy;Ho+!%hkd>@GӍZA'[9O2]~F ϡDJ6?4]v/Z8_ +)S5xHX0;>[w fƑrꪳ0sP =Ǯ?LD`7yqk̬If0SyT CFjs͞|U+B.yR7oU%ުe#@~,3|dzn:j[ X uC+8$A鮿BZG4ª.WU+K'}H ;G]ASeD5 m&PfZDq0u$Y?m| +vIBZdFAp`KV pv +:\7Hң  7~ \Hn1A|'L+=*9_^ox _;F ++: +endstream endobj 2735 0 obj<> endobj 2736 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2737 0 obj<>stream +u5A]xAr\*qk)|XoAs;U 4(ݦCKwX6*f| qvd m!<BuٗNMgHOހpƖdOr +a;'Hy>fѿ{ל/v)z]9.3=0חU. _mbc.TWڮ 5ڇ1%gah<3NtĝD.Wάpʪt*} aڳ"\[zym-qwՖ3.týX*ͤ;IHBY%Q̴潸 +y; +YjȢ05|"#IFhCFѯ;.$Bi(S{dsE)3XshSFz =|'d:K! ӣ-rl4NöLn]d*#lvihu5Q8TꚶC6l\Cqe :kr}, P 4JPN2}zwitDh Lqd_gd{~W\sܙݵ%J^Zx +gkH@>o?n.DT=LTŽM"gfo+NN"e\HWpE[w>Vh'QojF2 a)Gs~,谂` +}M|zѯO/3AU +M:ˤ7.Am?X"N=&fvY{ɫZ ּ4;W%Hc Mx VgYv}•!}} 'f% WEnYvGm" ǵ\އP{rLeAȏ] ucB0uh|̊ [9z +~gMQ!}E +endstream endobj 2738 0 obj<> endobj 2739 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2740 0 obj<>stream +x; +tK#CZRy0y_.DBDKUf q%\o-co )7z/#ӣ@Ex|_xXy(.& --RM]4•&4n8멠HW9d7re/h)y/p¢c*YY٩Hq|Ftt;OKGYĭm)S9_yC%q&WROā(]]/?> endobj 2742 0 obj<> endobj 2743 0 obj<> endobj 2744 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2745 0 obj<>stream +B{ODeDžvӊiS*Z?zi2*Ŝ2&?n,|f1Ձɓp2֋[JgQ;ٗl<74z#MFT*vK`83+5}ZgQL*Y}}~<|Y&F&?'kJ7^$7p&QPnUZ 1QwE .Xb ꕗ_{5п4@{sƦya5LV9**]A9lR6qLSƃ7I{>ũ)"QRs^b. Wf!~$+g>r8=7v _|S6s/`;+He}`ԀDP#v7cCt(9"!n~HF1 \A|@g4'{Pî"d/DnUD8ڸa֦}SO|<Sjȁ2/}/UHrw&ů`x@2x!2⪒Q8tỤ;C0> endobj 2747 0 obj<> endobj 2748 0 obj<> endobj 2749 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2750 0 obj<>stream +9O^_[zctі6}`h#;s9fwW-p`As"bkt!}߳dl!DY ޽~ I,8'gi7N[k +.Tx n7C8*!xKy)t"U = + 9]#8[S'ϔf5`|!XD}oA &sHN0:C +?QˇGnlg@V4&$+#2VUE~Ю֮f kz?Mx b~&n3W `voFu [bc0[)Ctb=U!'̅OB%ښ' f%hqP4RFNw 7IyVi 5vP8Jozn ݭi' H2AF4UfVQ!dhZK!xW='mSŮhӥMęUL}` ~n +7ͨh"1ļ'r_E􁴞V26V|"<Q1U=yQI #M:okSh1UzČV>،U.ktjT:uOdqxh~1|:;ƭ/"va2I}}/Lid2ߨDɒko;PsIN(!_ W$&c/35ҨHȭ7S:)sWt +endstream endobj 2751 0 obj<> endobj 2752 0 obj<> endobj 2753 0 obj<> endobj 2754 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2755 0 obj<>stream +AVGwMy x: ɻ.yfK e_f#RfAg +LIlߍu2v`I2@2 npg K +90nln &*rⲜ5?.a/SeG0]O9T(]MpK N +u#4%=y8+F`EAIK +*ޟКU__8`v`Ս&` Ei掹 ,< C6pV4(#t,QqdaL:Hxķ0 a Ph~W4xպwv?> zM+7 nQI<,N4AVZ2%J`#W)Uy|ʤߊQsﶉlʵ[gP [3p2[рaLpТj. z_)JqӸK +ޣ"NBe:vE8L;"MbBv3W-9.n?8 yDYl׹!vC'aƗ6d&Iݭb9uTL"Udg -!t*Be8\:8Wp %xrխp- dųP(+P,`JWi`s~FIgև *' d,En`/N89>#JwQKL ~5 +ҨԸXï-LW SQqDƄfsoE?:ôk?Zd S: xq*@CbT\ 0.t;d0/`QA}_eOEaHqԒ-$!==JRt:MM>@3&iU}%U,D$䕕cQDn<ܸdUN˴*c( }}~bHt*?>G.0ӓnswd$ DrN"\X=f +v#r,4Hz!< +endstream endobj 2756 0 obj<> endobj 2757 0 obj<> endobj 2758 0 obj<> endobj 2759 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2760 0 obj<>stream +` 5|j\;Fω; e& +뀋+nCC+8aLE  + JTڵXX; +֡J'=G3en~UHm.?ἍfuGDӽxc&IZwgM UK%mjq`㓏,6m'/b BfbiȽ(j[14< +TeqKEc'1 ~Wp  ڧl $1hOF"502w$%*.8EgKClxd <; -'ةEmʢ:zy\>lUs iz9V_jw2V]ɷ| Qsڌ lQi1av TZ$;{H-wvmlhِ<>{Sx\F1?o DhbmT_ֳQM>Q;~h9Q+7퉸k`$cDF@x9yK1Kzʭtﳒʥd;Дhoɐy PB̴^PJ9d1n%Sع`Qu]9r~ BIv0UuvϱA98B-h[h47{ooNlW'ORqi})Bǯ?s[By4Fnf ; jg+h]QʇEe%z~ 2&[17$S2^ m> endobj 2762 0 obj<> endobj 2763 0 obj<> endobj 2764 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2765 0 obj<>stream +#VȕʶU3a:|`J(]- y_k,Ҵi[3纣3 nsDwF_ }i}mvU`S(SQ,N㏺%6a{dv*Kv-D"b1 }f֜KC2K<gD)eũ"ܪ0n b.E.2&/ܻ'WsyMwGQ@S,\Ѵѯ>زRRY/"Ͳn1Z>^ C;ԑBuOp2q|;2Qtz/j$$>L!k͔lқ-p>H1Z.AM۔)jTPLnolinZ1&]`)+eӜ@怌 kՙOك?r*+\>Pw/[{\ ^:ЅnBV`"`[V}R'JQy4n,]ш#hPyLl|I0DzM6SؐX֍+ƫN2i8[ǠLt * +8,BE<q1'wö1hFiW bfquNNJ|: P{[A|iξgI؈Ɗ[S;2GYOAH' +9~l7޽G0ԶU.%8oXqXMQrfѸTFl^Kӑϻ9UGnp>E j-Aj~Μe%:H e@p$Af.DhZ-h-)p&bjw!/?.|JFKSߘwe|150Jn=:-OH97ѨM'2 ;FV=Ø|UpWZKs\+c6I1PG]䬦#SSfufSpGSNP)-)禢A^qx6dk5\]QI`2,W)ǴZlߩ<; +endstream endobj 2766 0 obj<> endobj 2767 0 obj<> endobj 2768 0 obj<> endobj 2769 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2770 0 obj<>stream ++e8heEqao~n_+(6 goIɷU>)6r7Ȼgxz1!oX(GRi'll]ӸO@ xp[.Y3p߯@lXG v+哔 Ǿk/cl+Es~(dCTpR@Ab7ɢDp m9_e v(p{8ƀO12pC#oUdF,]6Mn /J'Ogʻ;}eZr&8!OlE[fa*&d% ھCi_1#ǧ/,"Cp D#KMVFFDžd8ēegxa fzդܺzHj~Ę> D=8ZEcه^3 - @p\dsS8oUa~0E|cmH8FEvUZo_%u!6 +I& +v;69ăvfӗOx'R'V݀61w7VôQ_Z]ahO*JZZqtk'@Xs-( Q2olՉѠ'D_;)7EE>r?s]i"7Shj\:X?A_M A@>4vI\#%`~y/<`Uk;7B?XҫlE> endobj 2772 0 obj<> endobj 2773 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2774 0 obj<>stream +3M雊y5[Cջ?r&MV2Ǒ9WNws|G<ᡬ  )(޾>R)rS!uQM4ܸ鈑oB-q=Z`1*L(/ebM࿋b.{(}DP]TѼnXq +딨aR?L uxW +[+IS&}S1p 8$Ⱥ%&k?+.EƐY˿6|^=^f:,o8X?Bc0+sȆ#+1%[ wOjyNUQ +iF:rL3& -g,Π$ȓY#™/NP|' 8=p lat\F}hRNg (SMߝ[7i6a]E` l@>\cjvHy wSؖڸs'6vbfF鹛6/p0md1xo+o?ޢ4Sir~G3jW G "Q+vy X6M:^tۤu0oCgq +ܧ"ţ h@8p-%"%BOl6b_iLt9&.A}3StZۅyGbeijjMZx &jΝQ\/]<gyb!fW +"j'Tι%1kԖv8[@ d#A<^eN1@s]?3 +H= V,-C o1|U$~WL,jǷ:pO 2va 4d2[QW"i wjF'e+I-5. +5/jَꇚ}HApF4m7\m/.ND^ +endstream endobj 2775 0 obj<> endobj 2776 0 obj<> endobj 2777 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2778 0 obj<>stream +1?qSIRiL)zG—_C,3пqfњX̀U.y*1-Eڎ"J[VF{9 u;|sVy,4 W'PɌ2xIu0/*l}"ɿ{Uhꅄ<ʲG 3W4ښ؎P!=]-Gg{niUaG['Rqy֪S+CAT@f/u>h׋;| `gہ 71N\݀d +lVh x7]W6W٢ֹnwn1lE|qRJ6nZ8#ĉs߫Yh˜u&XcЄ2b6b:KFD챛Y,o7?Y3F25-PS CjOϑ){#O%"Co e,?X`滻l= '4 jPBw!(r,\)MUDXtnP:Oܯ $-I|jX4@ 0ah'(":wezj0ޕe,]g^- gH%8#C彤Hȩ}k||*>PG[:k?zekfG\_Jb/R S[O +Rf?h\sfzRQ5zMuE2v\dJ,Ze|x\tK"_:[{"t0~`80WE{K SO 9'Cth~^.$-aTvzIɷ;m(|{9 +pNiIdqA,*POr +7J6XZC(b Q(Xy%P<p"Ҭ1?w/TmJuYaȄ +w-ZoŰ#\swSAt(B@^bin?ESM@a +endstream endobj 2779 0 obj<> endobj 2780 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2781 0 obj<>stream +Mц<,CS17gIX|t?d6\ T<9k-*c.~LÝݓ%z4;pNwPiuxW7|%\^u T +9>Aw`(e~j;6Զ-BjC8@{?U_yg4Í XZd +vT~a쐈Uu n +18hBCn$?NW˪ C&e ("'~,L|JQI7e7I_R7 ډSW'+}1I1oOaFu猲[b`HxD06}ё:qjS|&Ci= +xe) s0fGVZ%iM']r"/k_Ah0rV{z#BN nGN׋x@-EJN°t5{C-Ae){F /7#p<0&4V|G3ߴ0Yŵ$U1r .Ȕ9nxMSĕpDp]m{;lX~ {u?Q)WK|P/I +9-J\tj|YY1qﶏK\I?o[U߄0R2nߠPj AGeost[J^8o]ZGSex75*tKq=XUX@ L+s|.,M<֌,G+F!%`Q#iD,ꉮD>lxg}DKu\QVȿ_(:q5japAG r0話 +{:I۾W#%!t+8VK[VSQ}U*%I0).sCP3/$6 oSo\Wy +endstream endobj 2782 0 obj<> endobj 2783 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2784 0 obj<>stream +=A8n87,I$-CkLqd4e&r~Eی! k>zik e%#t~藇} >KƌlLavZ JG Ϡ*/C(WYy;p*y^gq +T<]Ж0=yHq6Lx+Ȩmt?6|R3i-/ٝE۪ -NGSțF7d{&̣,ˮc 0P# Pƒ\i6uNŢ<9Dqx@ Vwg5^Ďut]lZ#@0E{6y5`B:\4eORJTKe@Gz)a順).{d# +G4GE~Rx^*{ھg,7lb)N?D7{bI D =S}(5%fP&ZKuĮ@ƇaGQ9#iNܯ[!_F `AUY%UH£!S<% INv?:`1Fo`Iaˑt1#O~uFN{ڶDs3 !T0m'% R=2pc@D􃜬|zm슼39|;]8^Aߒ.QHM[&+7ڂ)sLP?ՓӰz 77Kam +endstream endobj 2785 0 obj<> endobj 2786 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2787 0 obj<>stream +$1ӵK#jAGjGg:qEy% h; l cc4[үl۪,>%{^IԿ긅+){/~e.6(MÌx퐧#t#9v'7YB쨒>q֨/=`FBYf[ P˧j:ݴl*~E"A%`#oϯg8F~(]*1ͯ-qrTV^>[۸Y~#Ǯz2 /ZjN>b]bx,Ma TZt'뮢[ǡ; cWXaLjH$h<8ȼCGP]zd#[5",{OJr'GIqeW.`ڐv^}H4M2̂0: Ag}<O;gK柕+vnCNyIl2Ck2o.fDPel\Qh#&|u,~*ͻeof)^ V.Wy+Tٌ)v xg j3>Xru^=X EM6GoaňofY*W& +Nw ( Q)cyR5o@ae *m9qT?d{.Zt6U8Lkd'(V݆&<}k[ + +s17'_`ZQ0 +&K_`2cE9nY4}/K_g,cbE +endstream endobj 2788 0 obj<> endobj 2789 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2790 0 obj<>stream +-e:idހƢNy]v%V3`^Y<@&(f +#6J!&oy Vg?vcEc)}smV +"HSjN86)./&T(|弫(pCHg[[]! udg/Iڭh^@G;ݨGN +ـ&v}P%uj';ɰ#p[Kk X5u&…5`DNmu K`Ĭg:l$Iiy2oO} d%Ks那Q6PAt'*!x@#rї~#dlk*)%A'в 莙^\s +v +ME;qR$AHY珽˝ΫHkQ\.ƍD-'6V J w|4;gM)Z!;+D&Lw/5k +ؙٚDAxMs{r88O[!h Va% վq8ѽȾkff䉾~6>)!k`ɚMVIS۰1B?1&2L^[,rb#TȈX0$'We Wo Yy!{P_M2m'qb"մZYWG&&67bO#"R~F[;N(쾚D`V H!olnuy)԰˚i=f$-4nm_u9,> azs8=zM:=,0٫/l4#^cr}X9)< +endstream endobj 2791 0 obj<> endobj 2792 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2793 0 obj<>stream +fΤt`_(Q/6u0o KWgD\]wݏd0jCF8a"TOڴwZ?R +N۹, 47GE~R#՟{W,d;D{|ݔ&iPSVڝV?a.7J Ȼ +Ed!*y8xR6a<9Ҫ<: 7x8("Ctʐ HWoڛHwX{FL{{v38aTmNggKE\u24MV-䵹=+ɳg&ɍ Dw0@enE_Yk!o01s5AR U1Ef#Y?؝(6sd|`SK\JE&B;P}_sfחN/$f?#p5lPGG;7aj54j̮̑ɓҁ)&%S?2Jܽ+zꋏY_э6K/g11'+edXо͟^˛v׳pdn~C6ypWEr|}$?n6``>l۰3Ja#PuxE8gh E Mඤz:MLxL{+|~9HP!wuSӊ*9a{;D[JMuxW7.V;ҷ`.pWp9mxa.7 +"._CԌ{rb+H +j G&-Fdx8T!2r]>N +endstream endobj 2794 0 obj<> endobj 2795 0 obj<> endobj 2796 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2797 0 obj<>stream +L1P&PCǑT_NXqrmJҽ\=~.}ZVT)l F*'/[o[C+a. IcHzkJ +EU8FǴXl-7m~D__Neċ!~Jy!x!砽jIKra)`k>2` +E"p=8˒5|7rР(#ۂ䋨C!9E&jW|ŧVj1K9PiSz{qVpk^Nuߣ/AU7f3bR~xnסRRE/?75,SMeʠ.'xr247 +FʖRmdA681M)q<).}T a1V ^iLj6C~aqv.{>da*ű@ϔ|ʘz$Jd"[్4Rjy$mrj_ +iT ba4MO9Nzq)$3"ib){bS !þ6pK][4crF(!x غ&" +-l^֓>X8OXE({D_Vǧ}F%G6q#*͕7b/ԅ1 +;ossR X8Be ,4Uzm +2HE^[Z=8S*}OI2K3h̘!QY;GI'PR.58@jlqpԓIpn) j~Q}l0p|,W:_tejh51qa#^C{q="[L0^ +վW᩼z.f[$o탵fcN? xTUL* Wp.v b v[GG͈G+t'{ + +endstream endobj 2798 0 obj<> endobj 2799 0 obj<> endobj 2800 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2801 0 obj<>stream +؆?=57c'k${ |jo,6!7F`_Q5R˒޻#dn>*}o~f{KBى<$^hUΣ@/ΊUt Q_lZyڰV|.SmO5( [l8WiQIe ^DEY(R$7bE3ڡ$aܳ\Q􏅹]O%4ݎ ׷)CWA&7.Ulo77yq(N2%ǴzVzs ~)Tt"@l(#1)K_G'v2ũ 2fbcIxHXbə6Ωda~b]Έa`{v +5ym=2/(/+xҹ~[@,!{]BkXI@A M KR`J&&pPAk3!qR^KtP%U;`_c R;9 .jtz1(mn<>U՝R~D4Vd%>},Y ^߭_"d&!*c*7y:ŭ +endstream endobj 2802 0 obj<> endobj 2803 0 obj<> endobj 2804 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2805 0 obj<>stream +` -}2X-\/%_sN&uo]loT+Pkm~6>ˎGɧ -͉G\<JDĞq]8jYnɱٽq WO<.߯IkQR ȲSvU䨔q6Iߟľؚb+ `0 Oѓ-mPf/yi%ۂPOdzH{">Tn5$gCe\]9߿f:E)"Yd~CċޮҴN_0TFfœPl|(F Eol:у `5+v/:0[/-8=-f'}'Dkǚh'I)ώZhcKd6 ?!Bޅ"pY-"ņp~vk{iw!5|)yTC{븜3$+coEo©ɊT:L +;4:$ZORRYKJeks*E4̶5/*hK6+ {ZURh5F`wU''Ć<7C1up=/qt}Z. +fKyERL`WF!W5/bw; /iT0wW!y F.G"~tW|RAX誮²deק>W1=Ȏpc *q}EێO$O>lxWhc.2f.۴dϤ^M%A ghёo Шٺn2qX입\\n&K"i~Ι~v7v/Ruac)!fCH 77)͉-DU#nPqyF8xDVhj< +endstream endobj 2806 0 obj<> endobj 2807 0 obj<> endobj 2808 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2809 0 obj<>stream +LXMm8=BC ֫jOSuiUG x3IBXt +X7U:ѐvV +"~Qou!`U!SgmXRuJyeT4j',yGѓc.&g޸n^Lk*B3+Ic65̰|m*&͋ݷ1CL:U Y1\gwx~&bě*éUȄT Ԣo]T(^bD]׬a[iG4~U +x+h:miE9Uf ?MgFQÐw70ħ%YPFec(]7z>{JslDQTAxҮBYIS[fV0 , +. jlRɕ?T"j3F*7E[kZ{jzdc>#FWcՄȵ0/Z$_y{Amʾ⎫@3n;Z& +Z$MEiI$ G1 +Fiy}{+GAM| ߺB1)Qt֗A.^A~,$xdõ/eb%2JgD[~9NÔ<:@@9PBK[L!nR̩x/ +sUiްiz^Ro6+Ҿ>raʼI>JyX|FH-*EʧX^΋8AjXLsDe>B^L$7Le]{0n N +*k>: +NC6g8;r;kal a%Kc^_x.Qc@p/lHukN'͂oncV~1MG,!Y\JkfM8!>zy'd7$c.-,W\ TO s +endstream endobj 2810 0 obj<> endobj 2811 0 obj<> endobj 2812 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2813 0 obj<>stream +mrayDj#i ~:#>d75:uľg#Gԕy GY]f'r+LԷƂrs `o5j Z&p[IY¢3sZTj8~:x*D(K^<Ce[Aؽ32OP%!*hBD-9cA[P<?f8Z0da[!b5r؟ll}2eH3 +x^YXKT0+VW~dp 83m[xEB؞'! .lP1< VU鬤N, {A% k| 1 *CkiR|* \2a5طN!@_Yk}L V1 $txJjϮY;Z18X`-j(V{bj'aRQ2דb檮-NGcuXHr@|!ԛ4E3+"KK n׭]ف_XcA{_#O5k-ʉK3WBo$&b^ү )Ǵy I-#V+IT:f0pCc~wMZ[t t}<~"AUE$ 2-[UdtYt56Nf $HCB|QQ)Y +|欮D61㳆itDFw:Mg|Yp̦M!M܋R%Dc7<*3äãNMg*턇DP-HL#=vK 05& 5/)k87w=_:)g\ ^{c0CrER>*-W Bqu&vd}ڴ +endstream endobj 2814 0 obj<> endobj 2815 0 obj<> endobj 2816 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2817 0 obj<>stream +7J*$T) ]>|v^7a{":~bB񐤃Vw=hL5s`[ŪwJ $-M\h'xs'=Z`w>uѠNGX*§, .IQC`/}(6': ݝcz*SL,UJo7d?6iad6^`T>:[iO0q8;݉@|R}>/$]-y`~\.GO&{eZ: +QW緘l( +h>,>3e͂xzE˻:6ڴ&DX~a,Pt`]7TBw~CIne۾p4{"_cuG1{9ɐM + JvCXrQ=쁃L{caUUbj\kBB2֐U;ς1 Mx +/^Od>Aj Ҍ_|Db`C;x2 +_ǺE پJ"}v1G0]̂VmgFߟ`hOp8HrVj$YY`8f"p{LCG bD11yE/1J́R&;BE;,lþ?Eځ+JN6 t;Ifn(ɢ2[3r_EWW%n?ӱm+oR`xrJdOq%B;IZI% \ +XV"՟ ] LlxHoag܋gGW"2`[3Y\2B]䡉gBcC$n]Z1Pƙ{b8:P#]CKw&ghuUj?WBGAh^ezlX`'OdI|}:')jU.g@#r؉w| `1рyC 즶y8"wTkwN331**B^*U +endstream endobj 2818 0 obj<> endobj 2819 0 obj<> endobj 2820 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2821 0 obj<>stream +=:D[]uor]9R;ғ3+\ҜFQ50g~dP@R zr(n/q;fća27N|&hՖYoPzNaW(K5Hu_OF[>>b==[Fe]< G/![ zl'S:*K} S_e/ >d,ԝ1!6$%g oն2M+38ْ5Q܉k>,Vm>oZ/p2kz*lc͂gLM~=7&}mRAcfÊg\&YET bԷ$-bFfE".F^҉pu +ؑ9 +Ώ^,_|,OX5֝ϸ^1q:aO Ϗ *)k#bvb~7,r^pu.2ݽvf~C+|<>u "JHND_NzYXeQVu#G7pT1'UZٙgd|S㱼_0..L &YB;pjPM)DZp +=f;VsQ۹|'՛#<wϯ}h,H L߁<'ڗǽ&b sx zAc0CG*?R\Iďhfz ęVuCUX 4Ա7õk (zq0M  LOmmfyP'sPbaƑj G}SB \dە x-`'x) +ܷzɼ`>N͎ nn&\Au%BSPm09+>1-mYD 3(/4 g(`dY)D($M7 FD#ގɅxвąvyceVk +;D} (#[uWfJdG +endstream endobj 2822 0 obj<> endobj 2823 0 obj<> endobj 2824 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2825 0 obj<>stream +W $2tiKE}(f^ H=8xPPtt%i6QS: Z7Y^5bC?rǖ?+O@qT$Ob5_h{:hDWB%P RDtpKslH4fC`/"ux3<:Ԕ5|1D*4w +W#@I#ɩZ\ӯCeބ7(DJ)bt20M:|s|RBjO}Ai>=Flj]ʖuZeVutvɪitʬChLmh@? Nӗ{A ;c*..;do߯JZL1::5sVA}3CE":,^t#'谸QŦѼ 6ŵoUf  +(lgxC>kwDꦻ~5( L~",xz&F̮˓\e`8\ӄϴ>$?:BƲ f'e%;}"O֓t~q jOR#;c+A"nĚuZ,) oͯ|5si#8K,nn Ĝ?JU;&P\_9Ԍyxk|oH7l1XfjcIYA*̵IOZ+a3gBWvJI6ovnOuLpua&yٯdD: iˈWP<(Ĉa-r@NZeGh =ꬉw1";CH/B +endstream endobj 2826 0 obj<> endobj 2827 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2828 0 obj<>stream +aΝ!Џ7IQcÁuJQ$gcL.P?<)LÀ}OcY[[D#ʑNZϢx8g@r +Cc^8> endobj 2830 0 obj<> endobj 2831 0 obj<> endobj 2832 0 obj<> endobj 2833 0 obj<> endobj 2834 0 obj<> endobj 2835 0 obj<> endobj 2836 0 obj<> endobj 2837 0 obj<> endobj 2838 0 obj<> endobj 2839 0 obj<> endobj 2840 0 obj<> endobj 2841 0 obj<> endobj 2842 0 obj<> endobj 2843 0 obj<> endobj 2844 0 obj<> endobj 2845 0 obj<> endobj 2846 0 obj<> endobj 2847 0 obj<> endobj 2848 0 obj<> endobj 2849 0 obj<> endobj 2850 0 obj<> endobj 2851 0 obj<> endobj 2852 0 obj<> endobj 2853 0 obj<> endobj 2854 0 obj<> endobj 2855 0 obj<> endobj 2856 0 obj<> endobj 2857 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2858 0 obj<>stream +˓74!=K씖J +z.n^ Dp0 m;]c{[RBH癚 0(ɛo`Iࣁ~V'eNI Q԰#Da&d4)9k'>!/HPvt4oi>|"ZC 2@'֢2Rh[/;{Z)뗷eL# +>XC)zy_Rii5UIZ"+e~6K[03x*8,WЀ[4 ? kOɮ8f ,vh X_vnCr92Aߏ71V^Z]OlV<zh}T;cao2ô}fqB\֍T<+>RYA_Eo~[\tMah*SX&zoU+6!F[LNl[iF0IwKJ˫-"sSAcZ&R^C7U8_]aRMΌZhS iFʸX}r&}=۲f_Ŗ^H_c~CbWB}&G7?-ӈ(Jmv,ϳGo`]ק^\a}j 1e')JE?P)o(V1?.\5t +偿Oeڻ7֩r)Dd\ހ#같f,B%msH}k،:+nĵ pl܌'5_F&Q,lh 9j$SEI4/ylgn~u7d=Uт$$k7.*wj +4}`|u߄$wذQ^}&ܺI%8Kx^PVš)\zE ٍL#-9j|~͂lq ? +#ZaR9ыZS|xn]qUv-&oXSzYm({`^]np׏h&BÍzL'=bZ\iWTp&+%I1rPJømS7K*7'6O o@{ Ǻ/C\#~-McO/nsn[VsKBV +X  +t `CʆKYt.)Ե#0o?4 :c0fK1FY~[/\Wzo(N㔫sw{H֫h{dοO~=,0Bn'Xu#%[AZ؈ k7ո5˕0tF#./mojsz"l+a꼩RO$/a/՝OY9ŝil:Y\}`ȏNjCV62=)eBQS0\)5E('gG=ȩ?5?eJ;Vp RS +xq2|3 0E'f vӴW2mEey +@[(C9xjsgpJhsͣ*^t0}NzF8/ӊL#MSIIsӖ/+>w@ aV?G%# Z:R+\;":PDTr1]7IkWk7J<~tukRפ{k<y D)GqFJr.[ (ݔy^ͱ_$)~E|}M3jb?7X/}jxv3DZ+ظUE Riؤ1q)0^*Q5t_1ЏXVڐݯ+m@ ݀zW&}e7) l$yL]H&}J*WEVG%jEQhS +Ɠ# w@)_gxBDpWd,2݃xڷlt큽Lkw9 㕾?qtS+s/¶`ٞ\*1\}H +m5% K+TGٓd͵ PIC QC)gc 7^Zއ5SX{Q\ӱ=XB3M Ug*;'vw> w%3Vs*[gü+@כ[[q<$f'\~ha!4jQȒ/WOZ{HBCɥJ +9S@KL _݀wދ/jz`~Z%%!l(\eJX}"37XC:L)Ƌ)U}N1^@*л./8MGnʥc?/&|ПLePNE`dDUo yZpo"W߼ βSv[bށ7G#h +^-&N<;)H# +endstream endobj 2859 0 obj<> endobj 2860 0 obj<> endobj 2861 0 obj<> endobj 2862 0 obj<> endobj 2863 0 obj<> endobj 2864 0 obj<> endobj 2865 0 obj<> endobj 2866 0 obj<> endobj 2867 0 obj<> endobj 2868 0 obj<> endobj 2869 0 obj<> endobj 2870 0 obj<> endobj 2871 0 obj<> endobj 2872 0 obj<> endobj 2873 0 obj<> endobj 2874 0 obj<> endobj 2875 0 obj<> endobj 2876 0 obj<> endobj 2877 0 obj<> endobj 2878 0 obj<> endobj 2879 0 obj<> endobj 2880 0 obj<> endobj 2881 0 obj<> endobj 2882 0 obj<> endobj 2883 0 obj<> endobj 2884 0 obj<> endobj 2885 0 obj<> endobj 2886 0 obj<> endobj 2887 0 obj<> endobj 2888 0 obj<> endobj 2889 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2890 0 obj<>stream +/AC +!:`j5I.kִm &7jsб$(8U!Ppԍs-egsɑ q=8 ͠ƹ)HfaW\N_eʖ  ce +dTçeunSzF-gA^1^ |̭ej 1B%$ bor—V#۪yFڰVbM#?jv +3/X+2ks>c!x \Wۮ;jѤiQm426"va@[7 ‡*VxQ!׫;څ=X@3S Fvhn-廆Q.V%^bk7qLů%nFj:KUڵ&bvE0 4JDvv9YpQE:ru*; I{a>g +~J'/8}}I)35qEUq%3ܱlj1N]VgHo.^9f/W74ܹ(|zmŻ}G^[jX";n+>iPK \v#] +1s/ga|m .gb﬊Vˤs X&n.{3ab 0 sJ"R'2rپ)<;xpu/?w/܅y*UB+,d٨yiJlQ +.&NiW?n2ECɮ"g'D$268&Z;=tQbx@j٪ԛ=;Pņ PU^ WAƂcZaiRoM hi' ~(鍼7K$-K)a=/Kte>JVo*@ Gg.u2iZoۼ8TyQ5oh|;Mw:n55MZ;>he|aKG(H]*Jqd 9$TfܜÒJ0iY}5}]k+;VTr'?|A<> RYzg*T R.'jQ_;b܊%d=͜Tzl30;[fX=\"BYFH)UqT +"Fwe%S +5Q̽)[(|nv +cQFy|~5:-Z]#Ժ7)u^#CGra\}&]h=b!n^6):v[1c }8BP$$ pBN,IG6%i#@M"/ S[g{A$ 9 C~ӴO4\rkso6ec<%@|I4"|2<#TͯpnC*MIfm {9K%cLつH8Y̢.+ o&x\iٗɗy.b-V^IB97oYJߣ*`z7:\NRLFG,yYſֈ.]i&QtlfKw/ϰH2HeZ׊Q;׍V%k'r)S{t)fppQ"6=[l)V'؂9TI%Nx4í].7ShQ?AOG2>h&.IKd'5kFe}R_H#$]9 p "%A.Cf<0",a—M!It5ti|hM(M56ˡ#0%)6;NwI#aeBa+|_&+וr$iE-T:EHtgxUzzhcTx KЭU.[a7/x/KI».p@.kVp;/jq|K-h+_ +XJ4OͱPyxٚ;7mVŕ$Fb%,|`[v2wCT x6^1P?9Z~g6"Á.IoS^\!h\nG&|Sgy].c,eRYCx-%F^E$7LW|2X7$pj&ȹ3E#gZ.kw۷Dbxx*8kP4o)iEC m߮;H6$gVΧӺ 5Y+gs,CD"ɼtdC)m㏷va-[2D "EVl|Ҳ}#75'YɎu J`o?8AY̎]di/]⠭}&_ !J`!!'bnYч) :Q +s35?wz ޢ(' DCǚ3|4Fr*'=} 7eqL3G'CL9mp혻+?̶Ů*zV6SRTȡjB$=ds={٤^. mD$*0c'>9kiϘaM!8oUf!?BT[!BytFT9h ôo>oB^RՋ|1>dӎ 3}V0q +endstream endobj 2891 0 obj<> endobj 2892 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2893 0 obj<>stream +|7޿n+Pm_e?$&C9m Z RluO + 8C6ݹ~ZSn +?m@=mt0HӜ?hi3ܩPg>>/a< qҮ:EIfּ0ǥi׍dX`#t¾n6m+؋\<`̕dFb : ]%S:)8r좪8Dm];yuff<1kɅ*+kd]gk"15C%'vPd(Eomf]r }kvGf;f!jڑx\8CWc~F`BYH/RoDT7^> 7%A0.)vE-H]0BmVnze:m 9p|C^0j1hROEd4b=edF"V $N @feE,37ok`{J.rU D[2-BR⏚CguiK̙w؅9{ȯvAMvD~$/m:Y#l&þxwY/1k"k-Hz }; 'ꠗeJ6 5^T&y"<$ /Q:,KGآKtSu3רOC>%-!> endobj 2895 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2896 0 obj<>stream +bӭ#F$ZmK;4 G&55ݍDW܊[_|+4B(}Q@`!s"_5Tqt\|"`=Zu&Ͱcf|e5Imu[.ƙc!1RKӛ%!B,NJ2w98"Kv^Q]LǓid3&D:~wF3]qZ acFBrM[d{S?NK("t$q_nE0y%'_=Cs NS^] + ,oM+͚5dJVdR(y8#aAoܜO]jܦI1ܖ\"̰pm{"o~aEͳy +uMj u+847<([כhn`\ :Ғkk P3ܐwԊ7xcd`YքuS.>Z]cW8h9MRn^r;} +N3ՇO'KLWY 0a ƒ)`[bm2W%d,> endobj 2898 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2899 0 obj<>stream +[W*B)ݤ^D/,!GӔ^Ƨpt벆'tCZJ1|q_Eʱ䰅33UT:]rZ;w|Y(U,>m6_R5)[K6257i_nwY`Všz:H*_6| Tl ) +I~{n_Sg`ho|lBD/9 'aUYe/ Ryf07%٠ >f`Eq\Pb(7`Ty"ߎ>a +\;+Aem+_~pfʑLyp˱SLfEݻsasjD}(on c 10 B=TI¥G1]ZUrX}b߂Q׻tέT߀UP;F W~GҦt~1>M7紞xBPD^%/J[ +#BT*Ow'g&)NrR֙8?1'E +{Xεj=U?[ 10,!JYǽKS}s:gck7Ebu8Κ&NUwpV:\]N140'ES}mKo I^DC@7ڌnFU̫:u[;OѶA49͵ +8Ճ/Ɗ1cu{s&01#V5$uaڀ8z[bqpCgari|Z1 DAz!E2Gxb{A{Acq + ,,_)L93͐VBmynXP+6JTQ&am .02[ R~(^lPbSKSW8$6g?WԼySR,ywAQT bEMŴ vQ"(v]- VX&jX%rҞl~}[| ~/tJ'`|݅R +HJc'c"ws5&S6l)&#z@-ܘpEqčU[ +endstream endobj 2900 0 obj<> endobj 2901 0 obj<> endobj 2902 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2903 0 obj<>stream +t'r%mYj aӼuIE%k3@Z[]jh} DeI^&?%[>3KȇrR"f|Oh2/BИ-e%;Q$Z|Cz|k7g 5zBC r+a*8N?c%')W_B#ٲ<t_Sv,0' 3-vP/ԦIHO::B; iz״ +fAZ l9D䁽]D>&" \lF٪ +EqhVV߶wf|9w^h {<ƨ`+D8 `S^1!'N=,ߚ]~G>XrBzbJEO7hnAjn7e +.(fCxW&r,M{T{Dޅ-1Bʷ +endstream endobj 2904 0 obj<> endobj 2905 0 obj<> endobj 2906 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2907 0 obj<>stream +~yU:gZbGJpY"%ň@b"X4G$\nV|<,.c>T߇ΒF?I8,3ۖج35r`w>R77[2(Z4u.X g 3SqW25$ "Ya/\SV,#Ao Yֳ/U36P~{9~Op?@| bu< +G3Qk|QoG3 ]O mSQv263MLoCYHPLH,o\8@|{Ot骺B$JK VwWMKhp h/_ `"j͜ɏ*иkp=c*U·vv8 zaQlnًdvXo.SJ*8j@8'nR7u_M ?We'؆pY ,Rola{g >g=y̐am@2n xt#xke׻7YzU:B&'>WnpƞYS=edf9n)>;o ]ʜ S};1veK݆qynAW GG +z%)[@1I?NC3="2X zF"Itimf ,d;֘dCf>m=smy}oӲzCF8k8!Pk5m#lߦX?< xL>?Gl!n0ɑAf(xsk#jm'TQC/Fl1?ZYWʥh@7# s.S!X AxY덢m#/55j]L%00\N#BC5uM;P^P & +mvdcS2`TjYc`VXPeѣJYk֕8G[EMя1(c${Л̻iN2x6>!aiJޗi7m3u"j3ꆁcИ`J251_0]z-qƽA҈MIQq^LZ(ciabw+&CE']gJp> endobj 2909 0 obj<> endobj 2910 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2911 0 obj<>stream +~AѻE-p 769`mr z똠hai?dZ~;ÞOQ'л02 }ۀ" }s[_S` ^HO!W4ӵK䗵YU ru&t_+ealXtKHnŜԹtmrD$IG'`l74WZjD^;t|${3 AV?RZ?K{M 3 T3G~opabn>ܹSۿ5ݑI)z\IT)/a1+ KGdzrrs#4mĦ@z"y |o|Sg7؍]d#U?5Hl{ a𿄙7iZ..uHb93\27*u u{Rjmm>tQ/o Calsp'R4"{[EՒd䜪_>{cUܵ@# IBsWgE^R7*"M"ҾF  S!usrEQ7olmZ%ce(G0AŜ#fGY\\䃻셌keΫ:_En^Uʧڙ Tj>] wLeCl3g?&vn cׁ$|& s~^n*=S$U.&C7/\'m{+ Z姍o;:![jjpmN,o.`HyPy'WumkGv+}O݇ɐY-c!9u2 2uXqE c8y/s@P]H[_Tg7x7YѸ +z,/ IpgI:7*bӬȅSkj;]@Zȧ@{WօY)> endobj 2917 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2918 0 obj<>stream +my9e-ȿ7ޚ42ys=}ղY$d: 4 3aPY+J52OyaOga:I$~J^pItY!kSψ^B&O:Vg!!q(/E U]?R!@ :r==7$D$q` +z;N0 ,/mf(N@%R\ xrV +6;iog|>/I;Jzֶhk΋vQN|]@%'k)Lr5 Π^\]u4踹<8|mgYTb'#Kq{L7-vSUQ6"4ad4Ēеb uズ&{]12:0Ⱦ3LO"o8B<$y;_)ϿrQa7@67VJWeM5K|?Ey}Vi"3*bHcz$-Pء]n'Hh˼wU=*)-'r1E)R +I|̮\}Aa3](6w2 p.P=j.Mp̅̀y0loZD/r+ :W.Uʁ0"9,|̚kbF6.+2‚Eaʑp+",sJ>ap`Z1^? |8lr$lZ܅ 0r*g,`dz VvX]mҠ2w#ru.F.`$Ar<lApz>sۍSw$2b7ё#'FCqSՁ,"|;P#d5f6z5ຮ'- +VNM +endstream endobj 2919 0 obj<> endobj 2920 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2921 0 obj<>stream +2q}TrJ`~*Mzƅ]}M_"dA9\j+{hG6\CCY ΐO2aUOwBD,R]UjvŬR~V}5K󭫗58 +Hp>`Tex~&ݣJ ^yZ)gW|qh>Hp~eD %k sʿS` + *Ksop?X :ҳ7vSx}b1 +k?7hg*aбl8S/}d281V%|Zb6,]xk9=%? +?lQȵH2yB*L,϶Ƽc]ze9^<X׌zz !wbY25ns*ku!WiT4dЅYf&8uZ] uW2 j %0WM(;e?d'rŽ O7E&3*$G5pm46n 0b ‡bd"u|Fۨ(&ZuP isGSCѮX[sI_R W{Ķis|[rí|ePnt[#AZiT(D,! +endstream endobj 2922 0 obj<> endobj 2923 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2924 0 obj<>stream +rS_݋+|eʧiP18clJ.Hzzݓ>WI]l[W#KY*j#sS6\kthEA|SIcuڻ0/_3H ux NifT]g=5HӪz_&wi }8";)Ҝn‚"yU~qJZڹFH`7Xz1~Aqnsdw> endobj 2926 0 obj<> endobj 2927 0 obj<> endobj 2928 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2929 0 obj<>stream +eV1 #Yصz8q]=tJ\d +dJ x=֎ (-IE +t)yaJ${S|樘0OQ(7&cnh鏡e5s䣻Zc`PIg0eYF B̀0vs@:?st*?^6?_ƐhX.[?InA;?`BT1徣\º"w"N7 2+,1FYCr) *f*}.Q EW¦pehD3Nf}`É`^j8+#?FYG#E%Mr*{N?c>=6HJ&˥ssy=ctDm1vzDߠylݖk, >k':5P +JBXk4~ M@1V=Tߘ6z͞_y)~OE' +'ۉ/-y@M{14PTt`=&,ꢰ=+v +u=2!sƳSs;*q$$9f{}KXe܄W$j6^.<ZE >3_> endobj 2931 0 obj<> endobj 2932 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2933 0 obj<>stream +Y-dJM?f`^~t[Z9s}a$eףzHK\SvVI;|Xw'H=$!"dr,w(\f2HVrةexJ,Xl_m{ DmaoO28o8a1 O]/K \Lڝ]IUp'j瑯zGNVz1u13qh 5qX]ʞn +w)K_ԹZK5|5BP̴^?bڤ6o+ԤckdϞ鯷 }Z#q^1ZNozfwJ-hC P CugfhCujWac%`xYSH?@HwJ o1 +{%lSޙqRPk@Tbp|&ѯӊ 9NXE#/Oz럫7fCP|-ؗ8FfX>TT)I ֻl#X%C +seHx_rIXoɴ1r16@dk`PT1RGF~OU Q+k曪5}"x  )V{sZ_jxaͥ;J +endstream endobj 2934 0 obj<> endobj 2935 0 obj<> endobj 2936 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2937 0 obj<>stream +HWtq%Riԟ[7H^Oݻ@͉|i-,DAoij~0`M[TIiN2n²cwF9)<ݥ$d_J<6V!yKQ/̻&Y#IfWyQeWcOd{O/S߷)sH){Uy-(" @\5N9N~jW?߇Hv%֊>jτq#ʚ޽.߬b.!]=轁M757\L_f\[oN6 㴣:Kk'qé&L& J?fcXo8zZ&EێEKfN(_`J/S'.Fks֥ۏ Md5-4\b# 4[u! ]!Kw#\ 3(FT9T[8!$lg.[FgiQ : '_8rQk_n2 NL= f5C:?Ld߰l/Z~U9.d'2L>:t"U5!MbBpiˊtW4>&O/h%Z;UgNQj(^#=feƷ葑{AwO@TK[ +Go{UJ7~j涡q&hqVNOQҢk8[$Z\ishpl}5Z=Dw{"w\J?<οV',0 ԚE{U +}U> endobj 2939 0 obj<> endobj 2940 0 obj<> endobj 2941 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2942 0 obj<>stream +y[FWU i5xS[s)u ʗ,ΝȐ)f')ydm%UдgUSj&M!{x 疜FmTH9LiA9i8ve>̍Z}G0X4&퀃aM?cZpn| %Wk~-luSV[w~ <[ecRj;RS!^Ʀ!͆J@yZOp5+viRPuhzB{e7RqI!%O;&"NO 1ȫ#J!Sx,M)%}:˦"VKF{ 7+3 I"DU0*,0GyVc-ƀ>[ izP2$&DPDZBLfJGoEDe.QGD;hDToZ,CMzcPT-X[b 38IPvJ 38@ܭ ی仹)% _ᲊ,% \| dĴ mg0Z=Mbe$Z$R{˗Y'c$v-c67a_탬GlIn2Kl.\B +t<&_.n5&C~Jk? +2NގnhůWtUN~`d 1ފƓQc(nbיLY^t%V_ bϬԣ +SS<9hḺs5y iB. L"+@˼"ʑ"Z2@~1ߜ52k.hxehvP$k+>#C+8pʷpzۆpQrTk}|(4i&}M.R/~Ȼwn~zMQD&VfJ)g鮐 +endstream endobj 2943 0 obj<> endobj 2944 0 obj<> endobj 2945 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2946 0 obj<>stream +{KܕծO'Q F.&2%A5[Vtttop*"PR/NOӽJx&MP(H+K32h9oerMĂ&[x<cLFh8 +dWeJ"KW1ԟ:텍 Թ I2:cN=VeKz-PWuM_Bpr[@N HtwKLfkց裗藥̿jR?U))$8͑ct  d2?sӝ _/\l$#IZ2D[]Toq0zA82ϼ=eg%ʲ+XPPF@́ȸ/}ڎ^ Gj{$y=y3ٲaWbI!7Dv$WH_y9~FIL@XĊm8XWb}/,4%X,l̴umHZZ F̐&seQsYXoF~Cy\ZU )ǎ, +=Ӓ˼0T;7Xsy~U;m_{6E@{|Eaeiu9z n l7h܇FV\e.xQ!h"(nZBiywrأ' ҫ3m *fn򸉏a([i" d܁w p1h"wX2=|9+̤mj +endstream endobj 2947 0 obj<> endobj 2948 0 obj<> endobj 2949 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2950 0 obj<>stream +7P-u7,)-3ue3 ڽco*Sy}vvGߧ=b@~P%/=">eX@_7vs @BEByFl 5f Z Xe?nxhD]b0y/M 8ꙣ'ۂQ" +Z]g409S Iڑн UXD׶4'3cvf̿d# O# 1u4 {A"3_.=Jꈻ/MA PnGrAHp{,ֳy;ߎ⿊ \spiIMW,P]4ԣb"]J B$<{Yby$T!pZZ4lMph]?9Ρwz(&v:)u L?dvê_\,ũ u"I`eJC Ke2f$`vf!EaC?lti >UT#@_NJ23+s.1@0 wCd h?>%״~c95*<2ZĀk&R0J>оʋo-;c(c:,SnM՟>J+:@@|A\ˎ VyD<>#&3`T2XQ,agO"5gLw >{ +Z.Xz#_BْEօ\7Zq#^N`ƒ储de +$M3GbpTU+v :uU#Ш\GLjW +endstream endobj 2951 0 obj<> endobj 2952 0 obj<> endobj 2953 0 obj<> endobj 2954 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2955 0 obj<>stream +%D +{''Hf^YWU-A7ȈA$PӅ;ח!awtiگovdO c7,~1CŰpԦQț;v@5o0rCS e]L1aR]FN3!]-%t]x0b=ڲS0QM<$ZDMc ZmH(rnKgwZ:#WFZ.ux 7lcW_lF%C;_<$Ap'>Hr^VK>=rT B3n_?/MS'AA>?yD nj:ayܟ~Z;Dlf2N1d_3yI8lӱߴ3Y3&Ǫ>9EM_MkSpJG+dnMO2'åqA5sE?J0_HpojH73{#*dz8_4V?uƹl_-/19w'|${id*Yv{nt}bE:ʂ#1rWhB&V1#UofDfLeFkm}QD&#^/K=s HpX;G[ɮ(D +\zq BD625 p='N !>Ȣk4>a[of\ֿ +Z NW=!: !g0L6WL*WbM+N,m;1Fpv Nr}Ym6 GY :G7j6pUm2? Cvr ?O~1]Lab^&oc&ڰz׷d-0yj攪D>njKApô)lʊZ"u Ɠx P?9&~u1O 9. ǩS8X9UFJEBBS@ǂ9 +endstream endobj 2956 0 obj<> endobj 2957 0 obj<> endobj 2958 0 obj<> endobj 2959 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2960 0 obj<>stream +ݩgU X޽5|ӵYֹxsYδzcnD-ĉ94g\y|V2>%ۛbTdnp!Oh$0gj < YEp{3Pz@*xqݬe2Wit7>gk3k/0{+bjF%xnJL]@?!j}Xu6$qÝ@M!TӘFw<Yc4 XbGa6M|QتL-MϴGҀtzEoS%cD33AMN\Jg%j7`ƒyߴĘ$V}OoVסГë괆֯^:ؾ u{{u9S5gD +h,f+/tK ]C؎n +Fxz0g1;K@6[p!gcjeXkr ~Ivu+ټ"oX/aT+f:{ڀS'E q %dpLqUZA}Ʌ}M9/U:G<4iGV/Hq9x\o/\JsCL*O-betU2`ڐ_t)_džtu> endobj 2962 0 obj<> endobj 2963 0 obj<> endobj 2964 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2965 0 obj<>stream +C?Fa|#mwlЛ>gpxю{՚'D4y ìa= Zi5e +c%w9KCl2U v?ɚ1qd$s>韇74)' &*[ࡔ?cT$XOOf.sFl([$Ӥ~AoƘ6:KwSFy*%Gz1$M>,~82:[,;FK_A&mj=VnSoyζ|쒣>i Ƥp67xUz7vokD~ *F:\dr#P4jcA02%KPo9 YҧÁcQ%p]?/rA2- +R7M2UPˊ[] (\%C'B??گ4?Ē[@2SEר``[zri$Xsg+rlB,{-kg6s7O>5ɣTSQLz$gTñ8?JO]%Eo*;]>:72#*rEIǂǡ?ͅZ=׊Աm$1pe^l!`2U.ۛe;>#qÓ>+9X|]:Ռ@hA22̔@\]}i4q'E@˨w71.>EDЉ]_ǗI̡I|YN34.^ +endstream endobj 2966 0 obj<> endobj 2967 0 obj<> endobj 2968 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2969 0 obj<>stream +);nV)ьB4\\^tm3ni~;zl YLuݗLVEi V3t٘# ]vl`Q R޶8 q#nsUG8dzlo#N j=qSe@=Er6ƘKw,@9s_ ͧx-#3q;xM0A 窭`׉/|-@\0H鼺l&C0Ͽ fБxP-x~h7 (ZI OԂ :PWM:_+~ C0mf$X.mMS&+}ydgcZJP4t$_oelQ"_~ߗVA=ߩ#d3(B%lZm֟k s9CA "& wY |L*t$s}|/Cex*ƒ.u ۄ;BVRo{r%yD) PAo_ri\"t\ҍc,d5=Pn$K5 qU$BQ!M9 em9@ʟ[dRd_RT'ނyWNtt #LffKH';N~pkh;c8`o 䲆L`~p,<_l-Asg#N\iUxB7%XA媤 +endstream endobj 2970 0 obj<> endobj 2971 0 obj<> endobj 2972 0 obj<> endobj 2973 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2974 0 obj<>stream +*Egn I|U,ՃSd5MHcd߹y56}<mR1ghi$=fV"4gW}#Qx ,ҹc^cA=hue +`%X;;fjzݺƌV"]3x~7wG:HZ`-w +> endobj 2976 0 obj<> endobj 2977 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2978 0 obj<>stream +kY +}ZԾ|"rrKI9w @J3vbŭl[•lOG':t#=hy+ڮEcgyS!2V S{KW MmA0eKƯ; U(&#ֈS}uuA%% [.:]~]-v%w/sIT>.LaU>dcY9Hoj.B;^%efo>gT]+xՅ.$2n7QttDq![[zSPv q2 dac>X3$Ծ]R;Oͣ}Ny$MFi57ZF# s~9jxGVybO"av>M:QL,Í[7Jhpe?:ȿUӎ35@\C^\&Fdy3qkdo83AxN%I 8≽O9ʡU)Xyy0Th1o='0|8VwLߕyXwd4Ӡ%D}qKf;}`d_sNlʛ3@HrsƼVZ#5CJPw\COs(>msK% {:C!ЛGcʢL.~AL-kpٺ Jh?eY{NޅCӶ@[x*aUC/,/oWzLn9 +T6AԊg̱w&ޞv +Mw:rU2xD H'ڊ !jPҵAo<+ӧt,r& +5!}>1AI;ϓHqx qm։Iuc1UX'̩l! +endstream endobj 2979 0 obj<> endobj 2980 0 obj<> endobj 2981 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2982 0 obj<>stream +r꽉) >.a%eG =(E[2_> ͜]&;uT9 `^'uo**5{vO#}UM~/߱l]k%c +A+Y Dѵ*>.:ʒPMK.m]D춖5~F!CV2y*kt_ +endstream endobj 2983 0 obj<> endobj 2984 0 obj<> endobj 2985 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2986 0 obj<>stream +2_I hCb1&p{ +|Dہu 1#J: 58h^SLuBFZHQ :uX@=Ƞ~2$D8 +I}/o0諀mZ6w$1ҁTE9*1-fOΛ Yyj8կ2dq]W[eR=֟{8}-ugPQ^T-*:5h@b̔0;T|VU0c0E`6V./" j>۳2YZD 7kd?>sZ}1XxcWG"`:*u-'TK\yDAe 06+Nu1}-lY8c~~Z"L/Stw34mg6f>Z[aX6xb536 e-6GGAA]8˧N/ռ]ߗ*JDVCS]Iûn"(:t?^2|XއU(Pq*;wxHnC9rx HT]|!h/7<jv=ms-/;NWB~Th %#};FbN@?w^oM`=1$gDgfek~X۵8LIHAMT +endstream endobj 2987 0 obj<> endobj 2988 0 obj<> endobj 2989 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2990 0 obj<>stream +?ː"*6Lnqh=x1󗿇V<$A 6@j~Ē'__ЃiPF5nЫ63`Nhyhw R|JmsƵgMf ԧ(nC8!m/Y+}0h +m]2,i휟)t(?/{cBn_݄nhe6TS#ض9^a6Ĕ2|ڬnTΓ/Kڲ; +H⸔Y1@&TM .)eWflYPN$8w 3 v 8Uug"RHni^.X-ZL9gi~Ĝӟ?%AzU{h .(:υ}"~;Zts|Q]^ z-sQr#^xϘd/=ot1 &} |]5GTB1P +ilva%fE,/#P*q](>g6)5hW y1Ld/ È!i߅u0L "Hp,yKKζ$0хJG^.UZ߀鶝CCa/ {o\SYBɘ +D%"@$u%ٷ$G +$Maw]gEie7˟Fơ#sV?Z^@H:5 @T<=ZC*;֦4^L{I~@eQ GPq<)lj}]ݷ"j&]N O +2 `2aI~$ G ("vLQEZm:>9bNkה +7n~ J?Cf^1{kh$m<5}~ы&;> +t* ۔5ue=xO臦,a]# {CҢʚXMZϠUY/mV9OUȶ{"ӆƝqk/ӽx;Cb\UQ%(^ +D`EC.h +endstream endobj 2991 0 obj<> endobj 2992 0 obj<> endobj 2993 0 obj<> endobj 2994 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2995 0 obj<>stream +uL&% +?>* +F_\!~r)tW9Kr +RъT*4'K0*"*SE9øh_֘j0 +&7m}؂r[l3%X#  1Ay, +vo^vWfC[%JʽT{a_s?a Q +SQK= n̸)=ET9G~ uwXv*w0uXusCXBRj~SUcG%6xmj, j[-Jz/N3X. +DfE0q&j] BUiG"lp_vL5ء)F)mPo8fjpzAȖ7fvNlUsQ^d2P\v]h@;¡aE%F5PcR7bGl12xIs vUYai0Ѽs6[I|uXR2;tLJa!ȷ! ehqCub󜮦fTy޹'Ɇ?N/%Qlf'RikeP|xب2.qAt0zf[6Ke>WOwhh3:\J='pI9sa^P׋ + &dWA Jb%E2oh0\֖n;>x$d0mī'Duʎ- +~w2CJrLP >n׉ ++ ?Kn^3&vv,* I2S2 +P4 J@P5 o=Ҫ^^$PX3: r jС3 G,)54;~1m҅ͫ:qhor +# ه]mxV>kS#?0BPrgV6s-Kh2xI؉ֵK\G%nWVW$bLJ +8 /sJ&< +endstream endobj 2996 0 obj<> endobj 2997 0 obj<> endobj 2998 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2999 0 obj<>stream +(T~zMV:& }OZ}UT`ZAӶ!z?cw +S6tVecLS~8!c]6pV(*Ƅ 7f<& ϼQ8'J&ng꼾aY\tƋc6QVcE*7(.sMLb6dy /12 lF وn\7HkZuO8U P^r=q&,k7%sK+)qL.VTЯ/.X\nlĩ/ɸemnGײe%B77I8"'ϭ=W]0\zVJh"LMN+qC:b1E-GSN bVO Z;J$BC^jx|".̇'}$/L]y¡')@WA 5wњl kgV2D.>84Ah],e $Eplcn +5Y-q]#3oYcXSABMKˢ('F>dЕx\hlHdDSZdL|؄՚u-19;X ,}wFr6>{FNS@C4@@WtNHMu+һ&G\Ÿ wph$.NTEI>ݫ"")a=O`#zA!~mT!.#ea( bcjnzLZ8DЮ81giH[!z+Հ):tn* A13[5痢T[آCF=Q= ]}TҧoC!o(|pʿHH}8B::úTYϽ?["ƪ;{G)ٽ~dumHo2Pb' ?}<=b Bxxep!a6&3|`}r$ ȼT4}TMEOQ0X +."x?֡CD8 +endstream endobj 3000 0 obj<> endobj 3001 0 obj<> endobj 3002 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3003 0 obj<>stream +x&UIޘ GB<ˀ=8=Y;5JX&=뵀Z.oTyXUXi,#߅ ylq9۽*LJCXW٩xOHkv,Vq.}e`58}=t`V5)ý(3< ;hB /4Ph, W~!z}qJ-*16IEvO@`Y +endstream endobj 3004 0 obj<> endobj 3005 0 obj<> endobj 3006 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3007 0 obj<>stream +JCO$k2p놱 V=3d/:lW֐֋m*Qc4>nh|Ȝ. '#v{7bOؐ\c̢8z"lXQT+ӭ1":'4 q񭸌haѶ '9^o&$d#ҨpjowZQ{'#Z_g404ɄO/ߕ 3_U,"zC3Ys\ d铓L$ПL"?y $D Ve݉aν +SjA_)kp<ֿcw p;@W j*>v~3 M^U8t}d})Kr/wB|&(G$oZ@&Q5u!/ +ʠ +֮|^ݺkUf:MLC=cWl7q f :<6Keq}Zd5sG@[ƒEЏ P vhAR6IETOS^gDJDhS)̏0z~V%ؠU ATTucv l3檧{Iκ"8knmwUGFgƛ=!q #b:(7 +c%gx@o;JP +# t +) +M_zvaC( +endstream endobj 3008 0 obj<> endobj 3009 0 obj<> endobj 3010 0 obj<> endobj 3011 0 obj<> endobj 3012 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3013 0 obj<>stream +,u}.{:6OEzV!/i )h=_r!3}ziT"2 +oϩfݦ0u4\a&OSWˑC (Ɖ@Vy?(c>z8mdnƺҦRCN#o|\䤊7L! +%(B7oj>aHh5Jp:7}_8;"mU%ծr,(v.h`^5G`gՄ> {`ޔk\g@\fա6uRos AjB&| *9;Bx  {5O-_Y~!}xh2~0#_}1kβ5g+v]8{wMUWLwu|yKGaLJ窀8QmE]S8fdqrBT Aa(zQ|?ԊBt2xK<3LKk<{ 8p3hȱ3lkl) QCh_E@ѝkjSpRf8ǰ)FG-`SU ++rI͔K2ɾE6xv]}RUb̊fwSA/~& C1 hTf\˵F<sT{ʰy5nM<=Żz+D68i?)|C ;w "xl_)7Rܼ_>鼎<7Q0O^dC{~luA ɲvLnx'_|p%u)T[[4?osu~nOUC[{4V ;:6ԹwzbE?Y c⚅BA()QPC}HX::+."yqƹCdO͐<-oljΓ×3 +endstream endobj 3014 0 obj<> endobj 3015 0 obj<> endobj 3016 0 obj<> endobj 3017 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3018 0 obj<>stream +>ĩQu{LTk(;?iFtYX ,EgT,cui6jZI) ?4-ZGb鳴ն"og|eϠ~0wB@LY(89EDffa7p" 2bsjUz6kѤG, IM%0Mpk&:e)|A'M(K(΋(IXJO𨧃~XY2N\ۚ>[UG^^Nu,\rMUFʥ9s [Rb۸n`ɚ[¶kEU-P*pə}$Ξm--/%RgziѢ,(kYT8m[&V--,iT5d_)NGEFW=刏J- +C kF+bIoI50Eۅ4lC$܎9~ڸ_˾%D%r&")/cn`x*rUFz0aEHtv90![R rM&bGAy%f jZkͷ3!$XEi8&Z +. ^ja!IoZӻw b˄ֈ qcw!l6!|!U^FjKդ̿_X +K/5E&Dה{-%Ub)o?bzW2%ɑaȈ)J6'pc I;TK&fڰ,)Ѵi "QH9s +5ZXI rLJ +fi)FRBDW( /sxKRAж5h<ր/wYlI0oS*憽;* ⧇]+SF>԰*-&TSY& D mF_f dÌP@&f}[䎧:ܓ )g&._B.+Ew9&Q=Hի2 ʼ_oFcc+\}(/Me-ZD2a`vQ/ #^4?Ɛec*Pq⫳5cSがcFٟi+ ֘ԡV\eM͸;??%ɔnx=gnvV +endstream endobj 3019 0 obj<> endobj 3020 0 obj<> endobj 3021 0 obj<> endobj 3022 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3023 0 obj<>stream +s!аֱJ)%*FP2JkCB|u_eI;o/uUhF4teRli jAb.bA< 6 ngiRVY;rV~=C:4{;R}1R~AUzxc*~?kH+sflE0F Q S* NZ"Y&XuxcgV_NgJGyL7xy'mv?0/϶)F'%Ɠ٤P;[Pվ<+m6rԃT3 `n""x=@-C~9A];c7VYo"8sæ‚i/!iCdg, ҝ.+n(Im~k6/kK,NٗsIf֭ w1;M[_@1:p`gv4/} q&CCu;^[R%P:#s@/t>Smbhr 疭O;|G "$FjE*1}bewy>`q@pȆ#Xuז%}jQMV +zY:-${=k>|)ժ,3O]; A]ﰳ1}"nxYy'S5ASoeò:BO3,);5rU^0 \ ƘT>kɾE1M;=F_W"}D7|)f#]ɂoru~ną䈔nt3̺*HJ qSѧs!K:u",y %!JR6 N.Kv`fѹ,"(w#޸hY jݮw}[x!F0T6Pɯfkɸ@u= +t9)nj"d횀Q6"Z +nx.i:Xу yt#J]X74< _K +1Zlەib<ſ=ViwP1D:[])0Ƭf| +/bDSuD~ B[VHo8+԰D!&{ُ{t 4Sm 벺0Um×_&]-YIv&> endobj 3025 0 obj<> endobj 3026 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3027 0 obj<>stream +nЛ画 UK6rV +#;: "\SP'm@$>QŒk]\qYn;Y~0q@^q$lV>όv64WU<]^D'Olx +jUjQ{c{rɍX>A:/#r.w4;'JKx6 }ldb*hYC1;l[!#+vrЎp[rH!F:So=JcN_IZ|+u)Ɇ#c҂YCn Tw1—GaN(.+fslS E`([S3Fub8[EO$S>\bB}ZA@eS wNv2A>=rY5 S﯉^70g1kTbV:C$Xaa1M~M%3ԁbml"d,p|I{\) I6<2fGħ4A†@0QV 63c!LnX tZf6,u]ǬKS?MuӀEzNEⅺe|K92vJ8焮Wd2`'ЌXc&Fqd&(>:B) \o5^gl\OCg1m'a"*Oa/0>*-z!03v2<ȗFGj4 _뀎s54 tN>_`V(b~"PwI{_e^NRh lK?Pg/Ƶ#4a4D<-1`AnALBSD%iO@$(ߥsn30Ckj)X֦ܧѴ,p (9r`h<1 Lp@wiP Fjv7kX` FORovXf1Y|c-@U"D +endstream endobj 3028 0 obj<> endobj 3029 0 obj<> endobj 3030 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3031 0 obj<>stream +dTkQ,kKY,<j?vP@79qƘ[0xIMN=%nҦ3]pDݍ4#R3Do6!CFn a(FX4؄h+kZ5+cT<+pМM(+ }UPGLm%uEHpX<L, _ō);S]_8;XJ='!8jmSf׎D?tC}>\jfisk=K] J-$\јk-lC5D_@X:P0ɥb}ɺ{Y$17?\E%'cm%t>sJF`ĕߣ"Ӟ%nW\m\| IfwoeGmqnMy`{XuYN^A Wtkͻ |1qLnE|6Y2 9E.`ZN'')=ֹu9Vz3^qҩŜl7Ih %ډr-^73 &:qU #B[Y~o 8`EM嗔}50|[jA/w ^׾ 󏻹ׂqMwD}mtL!׹ɣ⌖B;,axL(Kb(G; |;#Z }|e-D/ +QI>ŝEm;2ECr(&7OaEBjug-f1Ao^6N[;Aqw-'JW .hmpz $$k[۩TV ]`pḁkD{탤M5 F"aOvm)2CHWtȿ%9q3xU~+ۀzQڴ={1đR0c=jhE6\d<2ja?|U{ -§B{҅ Ho}@w$Ν1?O5CQtǀٓˎjF3s%RUitqahZk + ^ +endstream endobj 3032 0 obj<> endobj 3033 0 obj<> endobj 3034 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3035 0 obj<>stream +KZ.-vǰ|[7enH+|Ph~ kaMS|. ;M'] +XFvZ0Ħc+-1`{N"]q r}Vk8\xu}yW˰x~_; 6_9"xlk.(IV^%d(+% ,=b|*^ M3uJp:A)f p}-`)M]Oy:b5!Y*'ٯ1')l9NPڼ xub-[%w)6l6 \' %W7m]XlEЕNa(J +A0ńG' sҷj1Wx8JCs IV 1#[`= z !]v4Ve0fFf[)f(^$Ndw{[ރ944C[o:>]S8!V?u!lV;Nߘ c"gQ`҉/9Z̶PB[sg22_R"X:'by#0| IK,0$kdLJf]&%a7n]s/&Gjʌr-Tد x(вB + QJUyv WB{y_8d"xQT߉cytU4."38ZX9eOLQ[ΚiY0Oa/Zsfa'p +}.'_G ,1NMx% "b]""쮔`@G;Ieu' ea'_jy-ٱsk M{f85- &ƺ)X@v&N8}{Roϛ8N):GR6ō2GKWUo$\oT/ZjsA;бBRB1h@L3n}|+c6J'6>9:+ [%};"7do^3pd+0;+ +OE(}Ԁw %_e_JF0.m)tsb=mr2Y)b^4 +endstream endobj 3036 0 obj<> endobj 3037 0 obj<> endobj 3038 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3039 0 obj<>stream +7B[ iA%0~H @盈[cA=勺AGBC ~EYH/u:F˥HVx|cX %!8il`Kߕb2 ?9Y~&'bLsܤ`MӖ𬧶~ҭyaQO]⥑B{4/䄎5[ċ ^?Vao [c-+igIK +wH]OVխ1-b ^C-:?sp}j, Psû8-RNGD@w{9uag/yj4^,Dْch( 8~R +Bwc~mAn-?u)\ 攼Vkʻ8^.1 rW_!Ž*.2|yl=gv'<'jpїU4N,X ]kRaΊg|=B^JDBRut7*g#H7婄mtG+*,vPM?йRN@ M6JE##.fLsD[gp85.WE9mBMq JIp6dYZk%_X|�]` B +endstream endobj 3040 0 obj<> endobj 3041 0 obj<> endobj 3042 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3043 0 obj<>stream + cY~:v+q]:\umXo”,⺏ӯ EOS qz{@C7Nt\~6{ g%P|΄tM!}4vS$sjFuSYZ/Ygqܨ4B>7)XaؙO}jDw# B Ń}$ ,Z⥌o8Pjm};Ɂ? ` +:0&#C'oVʡLzA7 $c(G%Yqz==߫AӠ]/ 0OqY¹0ڥTM.읫C3U`rHCP~uH,m aFI)F˵ҠIm'N<\;?["L;0ՐȟQ"~ٍA0  +BuF>,1{7ݳŒ+C}Q|MDy1mYxdNVhPlVz,P [}2[cA䦏;oמq`sN)E!s~HZcgXf&AR ԝ;LH `H4륢W0loVM`0{m3ƭdGtAjJ$KVj6"i<ΎLw6Mwm 8Zd?fKQR NoJKIǖ}1 F'- L=u4a\I`>\-$-^MD{8E %wT]96w~0gLMLd/3 YEBfjyh! R*la yK'j7W' +y ܮn~jϔи?0_׆bu  /@@%_e7g3F!Fő"¦R +2qN0eO* ~x:gN4 oVԶtb> endobj 3045 0 obj<> endobj 3046 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3047 0 obj<>stream +QGmzX'<WZNzZ)ْLI9v5,000/Njq4JVi1j~`?ۏm,+=&lSTǺ!$O@\0ƏPa=|hQk VXfnjR!^,e0]igO=_#`ˊ:A~PeAl&cZ7X",*<-hE&c7K[!Jv5X#yQ.~ޠ>[yB Y>9 cd%%L^:F^3h#~X,OHp.Y'-L`kKHݳa>cwÅo f~rG=l4_3_uKc-wjfUqez4 YVV,UF庢B/ de2QJ.AlFKc࠿,8R"86roT#!_ǁ5`43dxcp ydvΠP >ʗ_$RźhcIWcFFfDB䗓S9.yωɞ1oиJ1%l`daq|Jnf_|}swGmp 7Id\ 芟9áH R R p %? 2cݎ3[k=QR_%)luz#mr4=byox۝Yb'2WK "DI@@>YqlYscб!H!˞?RDU0a,[zx2?wAkgشv^!\ecQY0:cziVEVszxϖ[em@.t TEC%JZdÞn-fKW1LiQS'QS)s l8r+Yz>{Ԛv[qRh=v'ƌ#\~fE螇dO#W  +endstream endobj 3048 0 obj<> endobj 3049 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3050 0 obj<>stream +lV8',)o[#:%-|St/a?D5 +pe7+!څ! ^ WbqK^£T'8f: 8t u[/ +$&5rD +!ɿ %n%ߒ,̙1*^XNddsuqo2MVZ~:8B(VxO>pxת-_ꭊ𜋢 :@ iÜџ9N#U\*Uy޳*Wx9׾9ې$Cnlj&YNtuIv5g4? BZ9@㾛G:_V96f_ 32>MתVګ4?`/y{ A. +!h e0$Z+lO0_@ȩ/”h Ɲm׸ashU~O;QmOu)p}&aPu%ESE_JnF]GoI/@ !OH:>:sUH2Ge hǞsk)ΧOC4m к3qQ#]"3X4*kk5j0+bcs"g@zsa!vҰ%kv 3qg]eSR=B{5twcDM)Yq"YFc O, G( Ѯ ~=[qBK6-my@7u,A/STpF]܊b搂 +4Ŕ|[o ; &xrF+F%8^-U. ,a-+(2?ifTuדcV{HOd1]qW~ +endstream endobj 3051 0 obj<> endobj 3052 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3053 0 obj<>stream +" C_/7Dj ,· S~V:j}P3r"i*Uȁ̋ k@ցl6¥8Jr$\ೀ:ey 4Rk憴_*+֦8%cQƁx݅2D%L؂jAUdh] h}hezMz)Ŋx5 + } Jסr"l +}&G*K.{jL)09v0ݐ:=gng;"Fz.Ɵ,d +M`k籋 PX`ҰRNtFh2k̒B$1.T_T2vHQ0<*ak2DԁQ;?RE2lhh~@#A((,k+a+g1wY#Unu⬸<%$wDلЙX~ϛp^!=lUfSsxK8<_7cWa N5k#8Ւ@ܽ\iW⃵Ǵ] +ZHuZ Ic60 ơǚ@ݑ6#Nrb1/#n-\ W Vj̈R'y$&ɸAMw"O@;!jT'{Ć> endobj 3055 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3056 0 obj<>stream +^5CF M-2RxtdA Nkxݦ +Plpggʧ, +\o_F_͛eW{{EvFu{yMg_`4'iBE?YrH5c0P`ُFa9$l +xA.|ڽ#;̜]aM{9 +m٠RsFp@VSMcw_!LymXA؛_ $ ؝OTIjPy"vl\/VfdVL,mA)sݘY\_e +18ݲc +1q@ҪQ N(hxM`yo\`ݨce贓ES1z tǃ +Ҥv|`7Xߎ&&̟Q:ohZtnA19iyw++d b565Ѓ#;!`Eg%K#7_buPF?2|]hN2+4IUE\xW'Q;]OW"b j 'aڥK윋`KDgW0+h؍rHoA{PMDi2jACtaoF3IbNqHȅj jU1?. Ȼ-f> |u;go=Nh}BS)b02{:{ (_0B!/='#tG4QRr.gRotsˍlqV>F5koj'3_ +endstream endobj 3057 0 obj<> endobj 3058 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3059 0 obj<>stream +5/5"6AϥiV ;hG,f|Ď^P+ENL]jT4\M >*"ۥjzИCX+CieϞ!3WøPAd]sEZ̝ʵVEQҒtv-N\T[U0`6f2,PZg$: Ig-lu?*>y.!:FN!"UĿniـ ">B8 ͅ:;fr`/7KGU4q`2겶Gb͚Y;*K{uwWHvy>] ˱InsTcҸ@P`{ +F]L&ͧۛg?ǒ&glS,QSV`!\->Dtyl +p#? +0Rg^mW[MPOBC$}p ۉkݰ]vj\s>PCn a X+A4"|wv̽@uȊn}J&}1glJʸ +endstream endobj 3060 0 obj<> endobj 3061 0 obj<> endobj 3062 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3063 0 obj<>stream +v#r)q]~AYasXR=Z@Vڲbig_z,~G7J?e"P-TA{*.U]i*(GF.HI,l` 82%=%Ko%zA7)ȐDTnGdc>IFmhr+5[zr넄0ӱI: 9?<)4 r[F`7$s*4G, +۝=fZ܄S5 +n泴"'Zxk_$*([0KEz 56ɟx}x7$V.4ZFA8;]"̟O%UH}`B[ټs?YUg)L,g_yB"{gt9PnBX%C;Ig@ GL7go)LvN"Qţ=u Jܩ> A5eu6hoiֹq3^GU +YP)j n*5H7"=ʉ8r[=]zC]s? $9oġ +xf}⤺3 \nZپtŶIo͖3.ckBQoL +endstream endobj 3064 0 obj<> endobj 3065 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3066 0 obj<>stream +C oxVSptx"yC"FdW\yn?ַQdN\@_}J߷ּn> xꊺTvT^dP1QV}zѭ\OQB=_ 3TTn~A^aN[p" fz!fHx.XL,8O}g%Wє7w +RcK1pI;P H#ʚy-ALoj, em*gr¤" o{z.(ˁPQ%,h3(QFm;Gw]+P;~[hyǸv@sHnuBV-IURb-L&bjLj?T{͇3",U9 @>[§T^{d.WO)@]2Z8uh1w+cj.< P"h#Nj®JH!>JsY{cr~ +endstream endobj 3067 0 obj<> endobj 3068 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3069 0 obj<>stream +l.:s߱L #_p>76_₯d5(Ey+%L<7_U2m{٠TnPFWWNjª 7Tmw[>R';L&hMV.퇿 jvbfH1xsx:ΏdC(414mlEQZ~hn_Lt`EWg:@b}<=襜Y=`ۈNP%vu~>?r5ΝJ`4W@ck0Zs;'Yq73TLx9&07 5SJ{ i4Ϋd!/p@d0Tiٲy&q`vleqNDž8=XgQhKm9>ID!zBvtPo3e#R#NR[%qrm;^NYnT<Ūsvq@a8$( IUe&o3;ʰvΜJ Z!] @SfWQqi[Bnj0){Y W_ۗ)T bAUac`3^H +endstream endobj 3070 0 obj<> endobj 3071 0 obj<> endobj 3072 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3073 0 obj<>stream +W<-UQ=;a/VrBx~d5|Yavw #^-F'Y@,N/Z݀LC;ɼ"Y-$(*``[O:i 21]j#{'%PK+)@_#h63%&3 P2~;4Huޜ/?ri1of6w's5V9a&eYyץ"I]Y0$V~ů9wKOh}'FZOԾ 1cNM1y.L %5FbVv/nۘԻ<1Ѭ#OWmqsN[#;:aD"X;-ˣ^던L#!c^O 5Iu{hlnK$lҫ,&eKWgE߽D˃HA3Y=C7$w=++Keܠ)`r ^ ͙k-ox>if)O+8љK&[9 +ki6M0be 8ONs])I8ǞpY h/108 +tCK}?xb[_iTTI" a>s*+ +OYr4=0a_kII| +A:r" ct3)XăW11\SZ}d7nȼEz5&h6?46G]>EJk2U=nL> endobj 3075 0 obj<> endobj 3076 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3077 0 obj<>stream +Om<~]O ZSO<^Q X/Lz&~r򳘁H>e4qjY.;1T'g۰T$MI<^!n5tb@1d6S5?uOcSԽt|v[^K 3ؔfĘc'ˠ/St$`x8pŬ(m_{G'6D`O<7jVw/~L3zCڄDP(Y qvEBd +msn"| -XLN$\laвOGp`9 S<=w">SaMj-#aIQ#ƂVoS[_6{Λ +endstream endobj 3078 0 obj<> endobj 3079 0 obj<> endobj 3080 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3081 0 obj<>stream +"o#H˔ +Zc8۝xut~L9cU4rvsG~(b1X iă)%1WEoOCtd)agqX(k"53)CG LGgy<ݍ{/PP&AwD]4B:Y2*6x2{+Њ.eC$IM)%ll@(NqOM'ڝHd~=n-b@ +5c$ z>?{P|`5.'/yW=j`徭ZQ^qXu諰0 3<\2S_EO/O0C2n|SHŰްn…xqފ{:'` +)M,FQUF;Ǥf#eD许 f4]}9uڞb.x2 #cq?k-am]tmqT|GoH`>Ik6p f#R=V ;O@BuL47 +N%t}0o-3.̥.X $m8K>OJ~l9S`b3-Q#N.}᪒nq;ԋyuwӃ/EF m^GC/(KCS Rц̸ƛCmֺF#Z¤bi&?Ǥ jD'u*c75 u ҲC8VHN?,BHڗnso nIB "W@%U!;J|0v'3NY?`R*O|XUǗd sedNG ,/i{kIRp`051X=l,z˝ 1cT,K#.%|Tj"B*Izjv +xޔ .-b4~uB>%'^N,(%[SZW"Pm׭Xc%bw*_~r{ʖ%YpJˡWSo +endstream endobj 3082 0 obj<> endobj 3083 0 obj<> endobj 3084 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3085 0 obj<>stream +Px 8ܦ-_1c3NQ*w0{X[iǰ;ReSJ$3Hg`wR9 _Jb8O`^>6*D%4Nsn +~Ya`@)!JղBs5F SQ8:d{fuYh RY>UqD6UF]у[73yұݍV2+u :D_!Ώ|ꡀ]q8AƢaff 8%qbvrخ=:(&L1_Gje^ ]쒅2:&f +2/$F1|p{'|bIq GqMV4TSB=H>j^LpjRBLnÜ?Rv}bhiz, +ܯ:9˧+끿3[)B@Ӭ=&c*M/<^cXK$B.1 &Lb.+KIf&r_%Y$=84[[Vyw +^FЪ54 -Av%[6 1?$e4bz@aGm^s sea d"/̲0s*=wit[w=y16=B=0D̮GM߽ؔhlϋnƃ!ewJpiKAHZM?p{Gph/J"5H,\x?&}7gY>Ec6c=3&*ئ/Pv`%ZF6H{n<3"Bu.D:#gWٯb!ȇF m4hܤ)n[/Wy&jPqΧf8U7B_ٷJ7lr&jG>[?;Wdk/:𝙨>gfkw- +/SRD6{ +.g옎iZ`}B 6m9'-Tݵ)۶׍Ms2l8 +endstream endobj 3086 0 obj<> endobj 3087 0 obj<> endobj 3088 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3089 0 obj<>stream + XkN tm*ă!02HpV"b! #e =h@ٗ,1s8,gd&2 5"\ txz6|z&2PIF x1Mzf3+ Δh@#' +endstream endobj 3090 0 obj<> endobj 3091 0 obj<> endobj 3092 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3093 0 obj<>stream +,<aq09jT韡q?2 Lr<5N_?r)0Mľ 4l7HI#ZҪ2 RT'xc++jth /'#5\>v0;J(6ER."#17%_lCֶ*t3-(xupxr+rsH.VQC[=h!9:d]Dg٫k(Dj{* 7v\b~g'i#P'd(PaL=hso4K⠳HMKY3HX3?Jr$] hdŪ{Gʪƃ²\ B +dfS ab|ĸoӂַfX3K?(0 AnnO4܀UzalGW]³s\/gx>'f̷`CK xfCl.oTsη32<@[e fI嵊cţgw1RIr&8J, GlWl' 9!W鉩e~u:c2 qͺ4f.JB_C= 2 8 "2qc K"xzo{@zxT5DlY\ZeGWJ.y +l(( «5|쩊}ɬ l*/Hɖdkml;pBqL3J:S 69׆rPr$ӆ0~l +A߯ZIvT! d$DPK9P@^Vo0BY wBN/ gm~g7/EǹG>[e1Fs;gNfdq͉`A/a|g55W}ei+ !@ K8*o[_"t7Q:IDu˿Rܭ!Չe~NItO3sMUqKwA!>%| +˷Y|R W2>ΑU掲5,P!*,sg.Y˩s߸g7Iv"r +endstream endobj 3094 0 obj<> endobj 3095 0 obj<> endobj 3096 0 obj<> endobj 3097 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3098 0 obj<>stream +[B_v9L8` +"];6stl[P=44P&2شN Xv%N?=?\R6EEm;'r -=Nɯz +vd|#NtΤ 0/wl=>/|],Oljt99l@B Ԁ4V-^BmA칌^{7Ck̈́ŠMㆥxl7fvYmߜFqb6.YoAQ!5uv7n$jp6 C< /IόP 5l z䧓nALasМFab!cд׽'Ä&A_194;woyCe4}!H5#bRD5owyv%TcrG6U E"\DstjأR9' Hڕ$91Gv53 f. ;KkBHZ/FS|| 6=}Cd<+(|RS߫?670t-j3^1ɼKZV>JWBֳHÏƓ+6DT d 0/( +G|\ 5=(*z7H "p󣽭u^IuA2"m;zǪ9%-nPstm 4ԍ(Iju%eVX,))QlxAPk;08}9T+7p<߽ZP;EI$yE  (^5FF0+-TdA6_ Q=xzL~6\&& qKsBmNk#:,u>;a]N(uY;x>_'VkoKE\!I*S 0qsA!'B*,>/.Uaw=0>Do2 t-w3MPAnxĂ|]0K}'qC$@F +endstream endobj 3099 0 obj<> endobj 3100 0 obj<> endobj 3101 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3102 0 obj<>stream +ЦX3 tRUZ*9@ss@ֽS{2U fOZA-XT|G23xyYWA<#I- ڊ82ķ<WG98pG<* wj;10.qo_3).VyQ@Ypnֳ}ZJK{o:f D;k,tco"JxӤ|Kn4>?VDI eni^uu܊P۹sEg}U" VqC9$Q`HwL EZ vϟ=nXԷ.m_;k.hN"0G +%4ѐUk]&zBe~sֿbfЕaiYW98 b+8x>vPF0'}I0Fc,jg"T{VNf:. 5P6 Xl|Hw@sQn9kT )掝3 E/ &\zAv}s||5ẅJ1>n‡/>_Ɣҁ{uFP` *#ߗT&JeP.[>\zY ݒN a;r"d'\wY)Y.x6fKN\>xMgŋ os_bvOb9A"ʆ[)5@^+ # ȷf!0/4Ar-.l#~Ɵ40aK? +yxRQEԍ:6Rl`0*r|N +1mpL.J egZ lJBxaEXE=@|ms]'ܚy"71٢ 'K?x}M]GrBWhk,놲 E*&w4_H rvz(^r+"N鬣?zcnr}X +endstream endobj 3103 0 obj<> endobj 3104 0 obj<> endobj 3105 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3106 0 obj<>stream +Ó +&K-cYQT"|fzCwҲsjmα|c-rdd*M\[GZ߶EI~ks*Bd)m(Gȋxг(YRpe' ",Ad4=x=TWD17E|ܬJ7\(¨k(\LYªܙEk;ƕx'>x#nl"q _>P3Y* ױr%?9u$%ex+? + VS6 5!6K2qXۖ5 h_92N;z<@̂)ة+`'MqbC %kHZLyM[|HӺGPE l<僺tJNI\-Rha!ul.ΫHHTUٶvٔN~Ĩd%ɺ*z6M}x"8H\lu#d%&zxmAx&mm9YDvp['Ƌ ̣ႏ kld u]ך G"s׋]qySa.]`&֡gvXfi9Sۖ=߼MxJ4B +endstream endobj 3107 0 obj<> endobj 3108 0 obj<> endobj 3109 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3110 0 obj<>stream +V!EyP I7鷣IpwN$I'޼* +~Q0;|P+"Ť+Ai봿vvJɮS,I&Ś88cs\w9u4BHθvЫ>Ds Z=nb;ƿt~ &Wt 'keڶ+XY ;j^`Fo^Q.ޅng+ +oa@Z +_h +Z.ÄD^Q::<4 9zCaʥOau w=2wXH{B->V<۩!ꬱ``d1)xz}~O6}8)C{m{'Uf B B6Js]T()7Qx5!O T P{$^cB!6_L͇Uu4&ce0r%VXHGlM.㰚w]<|q' +fAPgG{@ho\Gnzsvk*EqyzON[nvaj~=&1XdW {n$’EgWw2nhm,,-(g}TwaS,x"r %ƌ*S׋q #p)ȖlHjbGa喘߃,8M:GFx`> endobj 3112 0 obj<> endobj 3113 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3114 0 obj<>stream +pa会'w5SW',G7o܎Yhآ o(~}ɼٻ9Ե<OdNasL9b^?JI D,+LfNY*5n=u貰!m%3Z4L*_P\Z}C_.z^%kԚ`tZ +&@R3>0+-2QF= K0^~6N.'=kƞ +SREʅ@N?k~J 0뷉XU^bq;{/޳Y̲+Y?KJQ"# _C;eG"껂.[\$tUߔ. B`;vB6 M- +R#XCyb_vÃOtWx 1..gJ8`kBp&GůV_Ew/2^v)p&B­+Q\}$̕5q7:W+~7I7H6_|BpBLF[N2E7UD!- ;,df +aY]eQʆ;#>SLT~Y! m .1N~K큊\v+?o;2qL7@Yj(:;e3`o΍F'FD,Oq`֣JFLAGИXa;?Vؖ[US+JA5euAS3*k#HOXʿX_-[kH\؜kUq 0Yg赙8K!$c>;} 4e/[O-*`]xgG,*~{t> aK%NQ+r MgE,L.+y 2oA=|9pgڵsOd 巶wf|Iͫy~Jn:y6숷:5DžC6VG Mdžh_ea;>wm*#n X,&g:}4+`_X' +endstream endobj 3115 0 obj<> endobj 3116 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3117 0 obj<>stream +aL/اa<ۮ +c<}g<~(Jf;r6@ZhMD(%,T?P!\USiąBb +endstream endobj 3118 0 obj<> endobj 3119 0 obj<> endobj 3120 0 obj<> endobj 3121 0 obj<> endobj 3122 0 obj<> endobj 3123 0 obj<> endobj 3124 0 obj<> endobj 3125 0 obj<> endobj 3126 0 obj<> endobj 3127 0 obj<> endobj 3128 0 obj<> endobj 3129 0 obj<> endobj 3130 0 obj<> endobj 3131 0 obj<> endobj 3132 0 obj<> endobj 3133 0 obj<> endobj 3134 0 obj<> endobj 3135 0 obj<> endobj 3136 0 obj<> endobj 3137 0 obj<> endobj 3138 0 obj<> endobj 3139 0 obj<> endobj 3140 0 obj<> endobj 3141 0 obj<> endobj 3142 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3143 0 obj<>stream +f1eæ iqVm<@-&~Cq 9»2$Y=M`@P ;=YQ+b߮pl94DvvX9m:E"r9{MXteyc|l a$D@'+]1oUmR. +=;1ƙ5kv@M3RwKFakpH.O5~'bfdReb{%Xs}M3$hz\170;K-V0狍pSi9 ={Q$mT@NB~Z%zqtyɏ(h>0SZr;,V>o@S2'_kQ+~J6ُ`j_N$n%hӪIGyT`Mo<ֆG>v_o.bO+8o^ +"At!s7T?IS;mE1qti, +t!A9N_DMC.^4qvA[]WY8|)BR~TFѿSS`ZOVZn1dI[* KJkBx{/Smc +U +68Z Ki_7'k tm:|o8u 5nJ7୉I\ +b|k +_Ci*Z{bjgC~e)o]Op/St'Ka; =dLު ]aNk L.pi7P 3>$\R+Mi9may<p益&|T{|'CLiٶu>$X3" Zx$1C6!&G猪׵@@Ƈ|sNa|$\vDԤKBEI߭.]/$5`f`4 BTXNHEc"S(d.M6I+ +u!p=vxOOAر`CLAwhrE_=}9jrya wVͧA C˓лύA_9Y~fJr*2mس[D]ZگNF@n ңmA_V.!xG"*EjE{JYN-E +#W-wWQ=Who]P+:flKarM(̺ZrSU(}DZ< !8O赢 +7s>x44&eَnټIݙ2U0U,Oc@K&q&#@[~!ɽunZP<2Աa%kKf +3Jlڻ0=]}<?|C+ӎjhv @xeCVy#A7NmsB*⠪89lDb>[u!{iD5/W8# ́)c;7A!^%+` UKT:u@1 >g #Lh;fSR$,:*F0̱l^p!e56mC/Ift]~//Q`7"aP ak6s߷_='0s.Zⵍ{u^Z [5 /]x 5 ct{.Al/p\(-Iq$/G6Jҝ6,1 + rBUH6-+mW_DəKmh:*_q/_/0p +G)׮r|TAkI BZ^59-^ixe~*aޕߌCw$42$K U`X1ٯ'ס8'B6Yw-SYǩL{ێWe3c;{͟R QtF]m"<,}Tܠhd[OqZg[^eq˾{̲[sWíbX0&) + Oc g `K&b\!1f_Eyۈ[(be +!rOc(1ރ޳: \@$h5U>4m|%{O?斜cvq-I;iZ63h̘cWSX撄mvW+&#b vމ;e] - Sk +LFh2 MQlf"BO_Z^kqA({siցZzr~\Ӑ;m~2zɯ +P֊D ;^peA=  x_V[h89O +ZuFb5/KQ@l?zW:L+M"%}, +z. +endstream endobj 3144 0 obj<> endobj 3145 0 obj<> endobj 3146 0 obj<> endobj 3147 0 obj<> endobj 3148 0 obj<> endobj 3149 0 obj<> endobj 3150 0 obj<> endobj 3151 0 obj<> endobj 3152 0 obj<> endobj 3153 0 obj<> endobj 3154 0 obj<> endobj 3155 0 obj<> endobj 3156 0 obj<> endobj 3157 0 obj<> endobj 3158 0 obj<> endobj 3159 0 obj<> endobj 3160 0 obj<> endobj 3161 0 obj<> endobj 3162 0 obj<> endobj 3163 0 obj<> endobj 3164 0 obj<> endobj 3165 0 obj<> endobj 3166 0 obj<> endobj 3167 0 obj<> endobj 3168 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3169 0 obj<>stream +!񓇹 M)&3rPDa>Snx&VRqM hT'ܦڱ+d/90fS_n &$V\ZL"& /j;~.NNf77 dkAizs;kC4h0.{)(V7!.gL\S,آ S$+tOKASBHa@yۘa_)v~?@Z#V=*ka**i1."R.oQ+Ya=}\g)mq# TBu3,#a8&w`:zg~Yp(f-C|Jtn{PY}8 u4w=k[܉v~8uBH=hA,$'3%/-/Hr'+ ۴HbH*xl/KJ`!=NxŠi-9t^LjL\D>ğv#}Ksm_ڻ(FTw@ +9cky|W3X0 +s]u<4'Iw[e՛jA}{b͢l%X2V]@KP仫1x05m\z&Ŀf߃Z^"Ac 6 +~{Q~ijp *SP,ռ0M I O x>PH&VHQZ7)xH]BG<r;C澒[b7~ڏ fEna0Oktny oz^R=/cxgZ.za# ezйI}F2 Qs@^gn$ԍr⩰҈NCs6h"ӝm.n[58!TΚɘO&0mG9vA<.)0!Y|D5TܶQy{QfA/V@J6N5xOf͇Lyv7ւ> MCHG֠8ʲOnշw,vQ]PlRM+N_*OSfJު\4͝c]3ӥ +`Fps2gocNKO|wGmm%3~s,PG{cw,mII G/)\p3*L8cU^cK +'MHڞCmo>s@BZG"{0᭟/ ˵Q>U + FÊ lhFF~X(B;|=x{FoɌ#Z^cM, q6蝡9#)nqgKkeT߽5qZ8fm&mwiǶjHRfgF=D5XA,t\cW!W+Niʬ񾠥_㈉Xa#a AM[=- 7iwed3-^iF8M.(. ^GN8q*AOmލjjϴ[Q[? |/:WaxF46k'DU"P7RoipkE)I`N { *Sn8[ޔWɾV%%Og}NBG +(辒Kb㶀b0ePԛ[sG lvI3]H|ߦx2s'ix +S"\n3l;O=%CIwg9ڑKx@ZhٞtB<`|\c{Z~dMDX*#y5dq!.|b[*U)X^;ڒG% '$0c XdAzΨx՛0!€6flrj}'<$2rC?WM]aZ8~NB ++->7|A'C`C MOrksaS|3eԷ_fhv>PG< [Z+Н2/19a0wR3; yA/n'ѹB*Pq6?6mֵn e^ 9f (+FShefqF'H:ҹ/guc{^[ +7rH>#kּ<UҎ2a^'K1>o_nm14ǒ:\J%9~]{-`Dl̮g#-Hf;3% \WV)z"߃B \ 1|e(/)=i K#f;^ĭZ +<#`_#jkXZ:S'S=S)lW{n˻K)9s-;FCZ))Գ605^޵Z:JhmXHΨ<UkƋ|TнQȞA)HaSƀTD̗p̦L:UsƺI(ٔO)nE֍i+W-DX&z]!_[':s+Z vPk^nZ]=oi"YO/_Y=/U]El~Cx`(d{Bn2ܙ* XBe] (&\kƩ5ġ/vi(z>_0鈖j "~~ +Z!Ov*>]A` l4섺]!.(bf&qt( zl:-Tp"q=P!^W^k5IǚIi9Vx +R6_?P?%2Fpz_0Wj +endstream endobj 3170 0 obj<> endobj 3171 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3172 0 obj<>stream +(/@|tUcc/`E\ pB\!k%l( nNIZ Gs"B|bd~o1GFQ.*KHz=sLi04`oʵ6A~; vlC{6*C!s?eDQD0lE*||c0N3:Om+Swa-&öa*Cڻ:F Y`[.㯯01SdRf +BF8Cֈ KX@U\MZ,nMKՓzz6%vKR#Y`Xʫ?>M#Blwq0Y?mf9$I%ht؟;q\\sܼ ?/+IT+<w&=ށ<g!HG)v@946:h_njq#Tav__UG_V fJԩ<-i[9R+%kqoI @<{ȫ.a*\@‚'B:̀zZD'JGʪS_0zR`-/LE3֙Z{]/Lb + ۄ֞*lH Gv- + +}@z2V:>v $ȏ[D$H/T@[tmR(.խq">gk4$t +jWKڲ״֏cQP)ȳP9${ +endstream endobj 3173 0 obj<> endobj 3174 0 obj<> endobj 3175 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3176 0 obj<>stream +Q-קN` +x;\~R8|֭ {pFOFp?@IP6ƪ@`!N瞸DB'ޜ"*?30vJqQ…~;[#]j?>)ҾyY;R#H-ЯqƁMdzVa=mN;:g>yh tsZ7``6s0nErlXQc51?.аu +E++A㿲u!t9T*괐55LK,罩==1dL<ű{% +}"g!|c UEkV2a[)\K~y/8.!Ƙ=YH@dV ?(x%Kw#grQ—L` E7R#­Z_̈<8RI=9$.wDc(NYv1_V)`B*xE"f 烆?/A|pI߻䥅"jE@Lpnss̰Η2{7f^cwqNlULv ~UDBܬPqb`|?_K97$ ˆi !.qroڮ5ׅE%ЖXbxfNٵX0kKsSݦ,gB7;"u5軠~"PMe.pk\ZhXG}Q=XBx V^ +Pc +endstream endobj 3177 0 obj<> endobj 3178 0 obj<> endobj 3179 0 obj<> endobj 3180 0 obj<> endobj 3181 0 obj<> endobj 3182 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3183 0 obj<>stream +NB+f,0F>JcL'0ğa kJOc!-fCǎ=wuuStw4YCa47<6 `;ZHiU^5CL2s8Nf,x uz9;'(_S~a*AN +S-{WzcJHQrn +pv/ lqE/sVLm׮WIsrY+bu|.xE%cEI; OFzo<*]|Đ73HǧRqVD`tUCrL)V/ |,Dנ[z_/}l7ظ!`ǚX}x"s<C&"(^5Ңѳp|z=V( t%ԁBWBv`c%j +S Qm$ŗ{9Ruli3Tſf x:X +'({R2ǢaRke}aPfAfH3)L}20%@99/nhLk a< .S(붻mz4_А-ijB: [Iki!-d;bn{WK8U^F۳BleNi]s6tU\ioC Xc[3Q[wh:&ч&"fgq#y00 Oi.͘ʐa`isG)QMK d>{IC3w#.XL?WQ8@=/V(ѩU'2;@os.i(b?1t&Ng pe2} \v,`5UgHMh5M~Ik a`.p$F:>!;1 SZ_$l*:BPL=T܁$əǘ#WwCY6 c\wͤilֲU[qs4$j1vD\a#-!Ya;k +Uπmw0tÞ2;1( R?{G_YV6&p tl5g6fT`{h3 Z8u^GgL֎ +endstream endobj 3184 0 obj<> endobj 3185 0 obj<> endobj 3186 0 obj<> endobj 3187 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3188 0 obj<>stream +J7.(F% '-RןJ#{ׁB})TSd "q~s1-? +Zm + J"' )oʎb6 +!ʠHxIǕpmte^=5 #1Ko/ +V'(Ƴ`ttY-d3 ؃8־(Kslo7ΣTaՇ]]%%aMx%~0_^_ߑJjoݹ art\% +w<]SZng:S)~Mx|×b !mmuB5TsuZ;ۏ*.P.k~KLF3ꆊf?_/}csx7ʷ.VL)&嶭nĐ7-5< , ghQr_I|آkQA)nE~&.LU͜MP [9%7[M,M+2c ԇ4ko~ jgՋ|} n] + '(MH.-Y'NV{ %)liȬ7s-Hxm>Ԏ\ NoCK:՝`oZ Z'{k+K߃~~zb%<zc%/tg_w@L +:S[A#xfuSa,-(aORNs%}9CP'f}g/6b843;9|=1Ύ؜K㑉X$eUVw .q[Uvh E wkwLg3nlQG̵qM ~0y QD6ZP0ۍtb dÜF1, ww2[( ͵]SIf _Zža [S4/d]P^LJ Eù8{?vÒbTqUYn3]ŤV&uBJÒ9?R&GbJRKV~])0Sk`k+dfbWA|۹ +endstream endobj 3189 0 obj<> endobj 3190 0 obj<> endobj 3191 0 obj<> endobj 3192 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3193 0 obj<>stream +wI z+t`{7"@kCF{=ߣЉ} Ev!`v09 g!!XE"M Ten |EcYR C;QG62pBNŷ}ɧ'KZ1@'MٕTy,d7ǛR Fpvx.X8l+tMYӪb:xt!@:(6D2Eӹ3 z/~KXNF[੊R5ఓ/BcF/"| c}@gO~/鉏FcJ^W&`e&8 +%TD/5\8I.+H%Y#"o 'r53xMOt\"tX |$RLٖ@XKzk]7X^93#HgS^/Ces=~4s )wzXۉ&q$Be@ +.Dm [>DnSv/P rmX^Ant[0@Z*0H;$|d!0ZY!EK Jo=Jd|`dR4'gh w2 S;R#85B"ߒ@d?/{x0 Ɩk6u޹F* KrQ̑=yԦdH0$:W5+ g.^zoOUصr(`-O!AT?n `fU{ +5[E; +1 Ciqug ꕴ9EdW '[u͓ FH~nq)rZIVO;(:sX M@u(y~V/A(kqYFm%n}_5J-x.aZ\mqw/3{. + |נ@ȸMb,Xl].yM=c@0PCwrl$ @`I B֒n1NKSF f(R Uab5']LE`+zCsO +endstream endobj 3194 0 obj<> endobj 3195 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3196 0 obj<>stream +LS+MJ-9/߾ )~a~ QSTID*w 3tCLi|3,TUɗqH&lճ 44mֳ)[+#%uə YZ:O6)ImEF8U!y\ XW~c:H٥oY3 +qh8gu|_Z17bJZ.ynĊYkMox&LE +])jq-+,=$iNUX9D_ԡ}H )7B{$2i3mU(_Dv[PNv-^?AbUQQgߨFUtUA<[6go?YKcv5߈P&ŲKE&ou@X$+ΫX~&ƶ)z _{_|X`ԥ m3I> +zh U7l?>u;A,2?ӫ߸pXeN>J7o/YuԝH,ep=|As)N-/L5bVb +0'j45sG~.pGU +(vv]$‰gi=29Hp<g~ +endstream endobj 3197 0 obj<> endobj 3198 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3199 0 obj<>stream +%23.O@R\F0kB=z3ԉ\P'֠1UH:vDyY!mE(:3A܍TPKcY^z|a׆4\]ŗfTkw06B, y;AwUFE6fQ״ +&]wC|r(`mq44VpaBZgj N{ "5oQ%v* Q3"E:i`DK9ΥJ:8KIp" AHR1? ؟tYÎf0āL$9i :*\kD$d +0Tt.,V-ζk;&>L+p6ֱ2w ,f{Fd<8RTt*|G\Pԋm[R6LDD|[ > +endstream endobj 3200 0 obj<> endobj 3201 0 obj<> endobj 3202 0 obj<> endobj 3203 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3204 0 obj<>stream + d%,0?!]g4N`6[ _ˣk" O4JaM9& <'"]N7Q#lmg)ю :P-i -˽ Q4b AU2>X?pF5s{2l-RLMgPZט7iᣥه5UEp?HkU|Huر*uoV p%Dp 0>AZ* *k?@w7K&$p?^G͡&vz[Rdї+3PsMRvWxoBČl-o?ԏs5\ uy/\P/_`/^!]!eҚ =c^,x.₲<_zb ;4 yM#TmsC3PC8L ˄%o+c^YPEYز[k:2pddY`@M@KDൊ@#'* [bю|!$ڕ,l&Jh`…#X]-(J +;:^ +`NGgq2#Lbu<ZS%Ц~ 7YWR퐯0)V$INy;ТA;Mzi⇴\@HKHqp38 +9ckm>"7fdB'j~˛9뚓77 ?kE J@ah?#P֦c%<;ѤU~X A:ṹiHKE&X܆~Ћ6iߪjp+!@: FjQPU8׸+rXmdYNpP T=^ì4>gy'?9}#>>4'-J_@d@%k2%`.x:(?B [/JEvU2/8}hyPc_s0ռ阰i@w0B>$Yi(vFe{V~<KyFz?6-!2!ϖHݜڄe 7rk+,ZBdF/; sN]8~9Mw_%jQ +irL;<^Ly"~Aeq^/UH>qkpg7M..WٵW ZW`> endobj 3206 0 obj<> endobj 3207 0 obj<> endobj 3208 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3209 0 obj<>stream +'K8+Cd5NXQ?P2Ba@ /A;;%YtS=IiQLFA:^GUKճҲhdy + A\L,)9bvwko6MV5GBAQ1qʽb@**S.eE3f_W3F&j$V2;bO.- Q\Z|kcYnV6>X88ᇣ>pؑ0/:d a+MCy<;2vy;3̊lJ$: &;eaM)&7#Yg׬ @4%%W2,:Ԡe)R5:XT1'3MrϨ,7aUz,pH-(*I +{9&46؍QC7nBݡ;X,ĝ-];=lw|Bc6}G#|(ߙFӲtsHI!δ~j:W&Cwî6n6ث}]>QemoٴHElJ$5nUj l;:vM-,Ke<˅#>1O'-*;ǾIFYU G!RCneN79ssa<p +KϴamYob8Y0(Ds'˱Yo,Nr.78O;ZiMLn>wV3;9z**4*P~ y֭RInIS&W&|Vd4J_O?k %{JE. ᕥeIJ>W{z5se\ ED@e +͊dCHRS(M6+5&WfO<15.9v@5J,}çi+d$ i\0p޾>Mq.XcΣcp% cM`/%=,Jz|$L:W^NSODVcm=SХfIRaK4'jKiw ~;(y S`7 {o+ӄNFj< =˜ߏzYʵ +endstream endobj 3210 0 obj<> endobj 3211 0 obj<> endobj 3212 0 obj<> endobj 3213 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3214 0 obj<>stream +j9UҏH)J<Cmct-0j#Hk;ߪPml@jswľxl6XJ.8qiᬞ}o@<'aDz?)>>\òZӛ fi#%>/((ي0HJ$5EԘ9Shk=tu#yu W%W|?߽u#lfIC21f"ɻa3ׄwĢO'Ss} VFNMGGYnr=ʟD]8i/i)I+?r'6wzXWzU23?Wb)c14Ps@[u=`;:;sd&RBTE}9 ?~o6Jg] 4w{7CYX-ְT6Yj.dY; Hݢm:ՎNG緒-M/k k>FI/4W]Cpl XYLh#f)1ߏ XİB(P^.XYLdOs$H[QF9> endobj 3216 0 obj<> endobj 3217 0 obj<> endobj 3218 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3219 0 obj<>stream +v`[5(ّVYQi/=32Q/\D +bhFͳ41|w!]25N+z h5&a_x{IӚYyF䱊q4jrI?8\0dmpAlY箜܄`UG6&/c@O`tgЉYHylyG:[%u6&[ {M|-]t(3с + Ԉ ?C娫&94C1bVB AfW9p@K]'5i"v'cw^Xp3.u׎N.Z[pQJaʶ0SoDd]@룈tqAdIES:!K Q-bopȜU/3?Z+Gc5\AXLU%Q0F4ɷWpu^ESxg_Z&_'W/@)A :-aջDJ34OCsF{]_k#t Lle1IcࠒE^0jjDKl:=]l*2=M5 xRu3k;}~"Y3g:-A>W@ށBfPme9$PamԹ7h X?~[q{r-/ۑ %#?LאhQ1 +FLc=i`H\kb7E_q,Ɩ\SQC=FQE3 tx 7#]u:ĐVQ8154pd*|7X*As +q,-o \tm%oA21QƒN%o&v͹IVڨ}&_2ƈ9:iK ÅxONGw~Ļ<ۈ3gfSk3j:RQ8P: +endstream endobj 3220 0 obj<> endobj 3221 0 obj<> endobj 3222 0 obj<> endobj 3223 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3224 0 obj<>stream +:J{2Z/New@ݤRGoG~v(O+Ll ?5Ɋ[(0VMdKSX~ ֤zdyjΔĴpcơL _CbϪPG2̿qى8'⣄|9TԓE#z(dq{]야- Pp +F: |O 񹌀Yvc 0\c a` */R~AT]*{[m ma;:646rq\ <{DIg <7V../1 26h{!rdb7ZVe.oAB'Ԥ1p%!'עcYDK;(4;*]s E +;Omo8ѰAe1'z?9ݸ-1u_*2Ug=awըDk#4T\әj-Jd# sZ(VYK ?9xf{`.^4^%كB>?'PO^VFY\ym t$Ӵ"V< Em: +ٓvQK=U5Y(<G#i YDXb ]C#`3ĖLv%h! +Le`B( +Tì- 1}1㋺ɽU8#XֳFCcAAḪ +o=+PۘLֿKݾFl0xoJ)g<5Q3]z|K}p2 N&48R8/:NW}ԄUP"vjigv;u; a^B> endobj 3226 0 obj<> endobj 3227 0 obj<> endobj 3228 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3229 0 obj<>stream +=戦"p:x2J{V;Jfqjnk?f%̠leXt::Zf #} +5,6O 3dcrtN}oHa~D 5Smt ve!.̶ua+F.>SҺ&*%_.7z^;BڍmIΕoAr X2?ѫ7'v"28[,/&_Ef1j$ ڡӠKqBQ%mMsZ6|?kjIE$ղUhQQiVo9!3R`j873Y>9)54(5/$(u>b.<2j7l2HIή&jW(U<0w'b:! 84$ ogvg#G06H04ʔ֦{5 8 Qr\Uf S3ˍ)Ovdu?>Hnt29I/y\2k34C#-b!B4~JCU.0+jlϨj>XOC"@gxBׄwtFSps@d shb9?i +.v޲Rf h6@mE徊\ 0K@")4́;,c6Z ?.d脈G@N!xby{/r` +}>wB`C'Q YxF3v ̼Χ;PS`Uνe5m:5ɐ;&hyX8)0Ŧ + +endstream endobj 3230 0 obj<> endobj 3231 0 obj<> endobj 3232 0 obj<> endobj 3233 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3234 0 obj<>stream +ECWolBZ:s^邯/o'CY5~Y6Js0*9|ە_xZ7s%4~dF\ KÞjTIx[{vnXmfQ^*8$@cRz /bA16;3AR!O<웟mJ>{d\^mXHwY +LHFJ@ӡae%`_Ùم>Gz-W| ؼhNz?.0 ^ Ch%"\TΙSqLJͦ>sHikVl; +=y!DV*S]~FO^c8AG?K/4Q 4GM=FP0)irg|,@#\-uGE Yq:W7}'\}g ?3GW9Iz"Lۗ/zVô!q'1cIT6hT T5;\?} &j>l=:*Rg_Ese u ?7V|ޥIw[rGð䢾h$_TM?v=?4|>v +#[bS0)2e?1 2c!PlՅj\C/k K?kB8 +Fc g2޲;_5&9U1/ȓX:ߕhA}cx\^ma [ ' 'nca;טּ.斑J! dʰ[-Ob[M TR~ZK|ۙ~n>!ֿ*'>Qs.D |k7/ɀyp=uwSĨ`[P|gTc$V,vc TDD=619[|P F6 !BFhvs2QVcv=>}0#i1 GWK ~Vm4>WT +endstream endobj 3235 0 obj<> endobj 3236 0 obj<> endobj 3237 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3238 0 obj<>stream +t+a%̿ fF%QN (ֵW|$ENaR2hܼ`?,hU >ړjjVvPEEMl?]@y4ZhV/oFE>T=ȥ `*]iG29!x0G>8 %/$0}jfJw:qҼ4g67QiE${vYl?˛X8 VRb *ßw_WHS.|hѣ+q&=Á/is醺wvm5[C'gAͱv[E(\0ڿPBH[D|7S8SOA-%}{H!2;Û4tt<|A͛y'=d =)uh =wF6kOËt,QmnZˀj@i1GN Fxq1cpmw3`f<}į%b:Xƈ193kF"|UӃⳀC1=Y90Vyj,&XڢWo\["'c`,]U&!9UԦpt+GY;G&iA'fZduc߅WW)Ā!)@ؖE{䰝?vPBPvU,3$;šmavq@Ţ|$\>)Pp%"0J}zc}P!ͶHFM0'R@eѯKc|/x/V&NϞH4,(|X7 ٞWl>43.h~!{;q>]&;xf(d=BiLΛKY^y N/*`mE'QjPMfyAMr4:{e|%~*rR$ʬF̓_.c#m]Vj}X@=Ɗ*%ԭJ:(V2#y!D n;V)54mjC#UG8|ebGPH,'NA<19}tLET;J!  +O#Z,{W`8UoO}oMݙt̏2Ɵ +endstream endobj 3239 0 obj<> endobj 3240 0 obj<> endobj 3241 0 obj<> endobj 3242 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3243 0 obj<>stream +Ln_{ W6E1hE|o@=jY&P3~"oF16KS :™2 s<ݞ +*D\aN07NSa|N'Yu~/n$Y`&5 ,s:MUO-)$S#s[3$܏ XJL( +9DdB^tZA!C_Ͽ:8P).+2Cg~D0tlUxǼb{B؟ +̴7^}bvUXZ_[fXkHˆkM=w!c B2R~08ù`{ؙ1t ೆtfߝS)?z9Nq bzi+] UJ|`gN{{)K9zR@k6M"6خ,n CWu}%$ʿq߼ƈ#,ZX+`ᰞ`݉H -5n*z#6|t;hvXza7嬽^W! B5 'pʝ`Bz0O &p2!}|&Ń`$SdbuP{4xRBw ᫆M_Ɓ* +<%|>aLi˝t^[S\b2gItbu  d mு/~#kn=d¾KOtY$&H'm]aMjNY:.cʴm͵Ձ%<)]v.70tH1r" +]fu3,w +̛) '=/oT6t,FSn ї7˛hPG}Y ?ߡN$^/âPw6QG%\Ƥ3صn0p܆ol>@SdM IK0(EXLR:>6t)胳@UW S\њQQ]PJY+6mNQ'O "y뜒̓j^|lq*S$ǛcWp*QgE3TIJիzݷ_ +endstream endobj 3244 0 obj<> endobj 3245 0 obj<> endobj 3246 0 obj<> endobj 3247 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3248 0 obj<>stream +c믐HhwB=;7,r@eB|4fsGmכ"s_{ypL.4G*b_/T\g(Qi&KA\ +ȃ̯i +R-CLy\jD>d҃zރ:T}NzBaݡvQkOED!gO6bC/Wa"=#;+R͜v9\! qtU*9&8$ʌ?ksfjN n3R&hG6M/px_Wg^%' W.R SQ>)X4V%nEgոxUgAMXgХ,ҽI__Ik. ^O&U̐4à +Eik_y!IGU׳V8s-^,ռk*W&#CִIO +IDWJ2N_n1,0F}!vñ~M[r}UIgB%(_US<̀A-z Tæ߫pN[x𽇓MJθF"rq_`dF?Zf&JDU0.'~ +3jQ;_;G@']j:hg )MjezÄ+L} QWe=bĘ 0hܥ"mÂЀpugFhBq1,vpуks92VK8?eC剴N &6nzPFxKAd[4+Ƌ,3"p맽>OuU#z s5Gͥ] A0Ex}IN nH )"Hx5teD%L)Es"icS|{uGk;TdÏ]H&SB*b*lY8ǐ@.-0B G&H!cσԓSmw! ǖ( hRdo9]zmp1?ѝV.|f̨" +vXl5=jD)I_h kGkl߂Gs?y§BpBӃRM;婮'mVc br&q?!5[hk1̐^^x秢4̹ :wĖI!V#/"# _{9$)\bn]72Yמ{௵,pҘ25DjK[(j[rtqP&- r'ָߴ1 97o]6Ű y+\;%~zL`Z "υ +fJ|J9e 1 +endstream endobj 3249 0 obj<> endobj 3250 0 obj<> endobj 3251 0 obj<> endobj 3252 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3253 0 obj<>stream +6p%(`^08(1^GnejZ:Ї0;[ 6mB"x6vK7\KࡅKٺIR6%d\8 pG>|fsڱ>\F=3ndze*ffb` 1؉E?DA7Li]5g|n^B>q{ LN8<*7l(օ@3gn\*L /ʲ(֮FfGWĭ}CtLrC*r%}2jTq?{g.;8Z5_RC)>Gޘp!ķ=IK?P1orcֻgkbm"{ݑ!_뱵2#ݰ(?tzPͣn8/kKHYhẐǖaIwZTYKqN?Bg4D=;k$ƒԺ +\kxo 7[\GfLr!X~998+,^#;J8oԁz2,oGCuhS- +endstream endobj 3254 0 obj<> endobj 3255 0 obj<> endobj 3256 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3257 0 obj<>stream +cهC sn86E[47.3L`( 6XQ>P*wf=m|adP  +6,rvf5KQ"m5O!!qL&JUk^.GPi#V(*r QuWȊ^%Vn iz y#+Д8wgMDTFywt؆!~ |_H{/AڑZߗ &7c7?ekT}:Hsƫ$f9$UVn8F{qMQzâNP.XpyTf;*I_nku`s_@ȗҢ\~a3DM4}6-sđowƿk]3})Kx133ҤV.+VC^Hg,@b$cAocW'a$WO"JBAJ/6L'Tդl|}Hȣvݨ$X52H0o2<1G6K[V7b@bJ\5 ")n_2q2S}OB3< zahNZlK@x)eFAur̊TL)1RJS!p +N.s< WWE惫d;/d_cpҝ/M2*MfKج`ʼn^4 +c=m*rbO~iA>kJ0֡|@ht,|G& +V8|vƎmT +Ut.z/B'9٭A-`c5jFraz1NͥFOs'bí,(_6<*\S2^0Ka/v up3iَ}DMaO7}BC#ҙ uR}3l(귗Uؙ9nR7W=Z(ZCs  tf;^nyUjf#1e- VGN\9 FB񷘏]X}.a:ިYB<c`b6}#K?]m&ijm +endstream endobj 3258 0 obj<> endobj 3259 0 obj<> endobj 3260 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3261 0 obj<>stream +c #W%`69]/B I3i6'%{bM۳pI1V'^.8\>j0J9#hFyDk{ vIAσ慸HbA;8QNy;Bgw>.vh#-gʀ"\Q@]54d@ƶq;iBX +amO=ւ1!Ylc&?),a )=2{AzF"ۗȖ :`jäPjz2d<7e,Lr,GPkw aWNRT&٘#b%X3 +emJiqX߿uX3Ӗ 2Ӣ 7E37cQ7 ~Tt$H| zr^N3Kn QG7˭c+9ARo[c"MafFȒt>uiL󜳩f 0,Zj_ ݁،㚺;?F"+r禞|u=JnU LZsp$$ +bo@ |Ee.6}!P҆h\E3+/^&'bChpXN7꼗HK%sug"~}ΝP_ywȲtrcX*q,_8qQ(vx[9 j[O#кHm +#1S2mxt wn46fjcaQuD(0SUZvk9~2َ0P`u+kj,ÜFy\\|1e;e mZm%Vf<@"; ehA~' |K<Фq… ŀ*A c`կ 7]fzJ$@p}Am/őogXJ| +endstream endobj 3262 0 obj<> endobj 3263 0 obj<> endobj 3264 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3265 0 obj<>stream +ᄚ 8(p˴c ̚FI2,3 FMkW6Zݤ^^t8ֶF+&9>cirU&cCpAljd3-jѨ]ajPQ$n@ . gI 6WO7K]NL׋ڷ8̔ZHU ?=͵Y4ܖGS$cS4R5S-7:aSu&@2=b-K:&y}~K)3V;W%Pd'{uyeQkl'uJ-^?!UMYW "Hѡ@@|x]+^C\3Nu;--OK]5ĆIAy?Կc[wC#syo=I}2EZT4wʫW$?7 Ը!"wJ֭y>5'b5Ŷ0lEޭJ^bG'j$iSMX¦ZvIc&(>f>Jjf +MTAq6;|fl١4Oń:"U[B_ _#菵eo9]1Ѳ)$WݿCrbL̓z+1^/;*# &zFʋ6FNFl Wy6Dc"lh<ƼL4en[9=$6V2r]Q<{5׹4jgbqI`_/>& W%,_`Eɨ.| Z_a8@_ M[%)1U4%6@+rc ^-Mm8>'ƐCL-,Knr9IWW'k3|G9^iGc59de0+^~tW1w4HŎ7fLne$T# tJ CEο$ه#a捸ˍWT0Ar.)ℂ;N`P+՗Ԡ + ʇRS! X _QnCu4Yt#n]|oJnPM$fbD^fŶG1J<%}&7J`|ť~h3TJ6_ +endstream endobj 3266 0 obj<> endobj 3267 0 obj<> endobj 3268 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3269 0 obj<>stream + t F/g`@– ]P4k@qݶXԉN1E,@$w%ԂC)S?TO)x SebF 3d,ع2fWt14 +a>;QR +!=+/*'P +_s{,ә@L$> endobj 3271 0 obj<> endobj 3272 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3273 0 obj<>stream +2ٔrU}QŭҼ`Ł׹wʬnSI1g2OX|tă ԽV.Ta|# >d4K,< ʕ6 ث(/]AW;3TPW iۨR^J1o;V ͵cj.QmF.?fdk%3Vl 3_S#u]gƉɑ +'-jj)zw^Fy{ ++{)HABƦFE [RmxGn0!|,a?r2VM^o:/g S2o(#H}4~8_CmUݱiUUmsF굽|NAzӪ*dLpYxf52?ñ9{ȀMGpTU F]h=x(^b\H wU>d_&BmQ146,ov`d &4Mp9jbXԝ`0WR2 8}3`9EfEgJ0I# L%^Jl&a5uV:eH<j`\E0Fblf8}^*1y2 Vh dl|O#{>&_ >`\ɬld2)A~I'rj{^rEMv_^igqy0^p[ 8W8#9S=B] ~Y{b~$= EINvƆ_ ـ^ZM5DZbʽ6 yc1 8)`UitD sdO"Kup$@3,;̹IM a=$mmSg \k a&һ5ck.=s^9g|yLk GwN;\a{Ũ|3;gOI$BҀ#jݖxjb|Sq{0Qᗉg:ݞ$V,(H]7ޠ, +endstream endobj 3274 0 obj<> endobj 3275 0 obj<> endobj 3276 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3277 0 obj<>stream +-q\wr̔Ƣ NR_฽~S=tl*t{XB ֫äPdmHA?>WN͓KtA>6!Q +#ggv1g\+ 4fm;zmwOwx07Y_3ϩsf=ՁiehE𹝢(I>™pF%F|S)H'  )7xh+ݚtp0>yEܦX4!ΝE +7 +ķ:녤A`}K—^ʟ7gA.{t%iS:tzya~9AI20Ģ*TN+bzˤVA +?:ޱY:W ;sW|U[ؘH !EP8a?8 +乗'Rb +endstream endobj 3278 0 obj<> endobj 3279 0 obj<> endobj 3280 0 obj<> endobj 3281 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3282 0 obj<>stream +NN+ ,"2cW`t,M eL147-+E~IF6Z/KUt"@|A-8z@R*6!s6WKژ^#`6@`֜Ol`CENolcSȲW +7`AOcYmdTntydɿ&{d qD!Ee'&JB-,`EӆŞ1,xQLdT=f)'Bz||S5#AvE5'QjX_"7YmMxF+_ȅ#xJx%aw(PMx{.)T78@ꑾ“|RC Q;~82^?9O\wT!w[3 \ה XN>^kz.NEJ|*W! ,jQ-S +cCdX%&Y_n3+q8L|qbN#XwQwA$reS;Yr]FQb!AyY|Dgc86לe2-'mfېk91Qzw f, +J&W:q_Pü_PUr/qjů6mgr$vU9Ƌy0YO=(/-Lĸ{6ux.\vEG ը]n.4zp+st`0 [uNhZFdcp9RrJojctk.sհ.T.̆L{RB$775lzΆѕK8P>[= ?-a=ooJIcAP +endstream endobj 3283 0 obj<> endobj 3284 0 obj<> endobj 3285 0 obj<> endobj 3286 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3287 0 obj<>stream +1י!-8f>=kzn=1C9ab>ה w_P6j(NZ +a}TwX2g|eVq*{uZ]ǰq/~@>YL\ς3"rfz4?eʱH4WAHYNrH +U3:0O*h&Md@PJXko )L+T_coru2o SN]56 ^>ܗy?j `kO߃6o<[͐e[ڲ 4Vb4BcyTwB|4wYŤ㜡<+%,!iNy ПP{(,A4wǶpXC~TZôK{Lpyg^vpʼn + {),a/3[G/qIRNJ<PAdK h8+_|䕅A)8fZOd6W /u_t*gm$N9:{z_=*Mi7CCޗ ׫tE .VF5t׸,!(3A)$ z +&ЄIfZї9*~C_KO'V%W?̅b5@*i"C_]9N |&@9dL=Bwkp_?rŵ;徂3yu&N lZ5,=B1Y>cCqٛ"Ϣt-u,Oj~ +Mbc_-(47ϸ/u`C<.Xҗ Q/ʯ=BaFPY̤0DRW%yB#Qb4 +l5r1Tlj,Ep3 >uqN۠6'j seN!42Clh35ڵ"A?_=H2Wr G+,EJvњ mWW) N@x)9@#<$1FFpNtx=)Gx m d9Ac9%j+z%qE|!v3YBa,ԠQŐ}3`l +H<;ib hd莼`f0rj! +endstream endobj 3288 0 obj<> endobj 3289 0 obj<> endobj 3290 0 obj<> endobj 3291 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3292 0 obj<>stream +z"ױ}R HCA*03 Q2^TDZ]!2ubX ?uhgS}bh +$@U:P=ˎawdį\ ;厌reb!o~zHёYˋ{x1 b=*5g!/B(+A^*^l9d9$W5D;9M7̚6N}lQ٨Ne,Go"| Hb'"`&Aq:;'jn ]A7i\Wd+i8MNQ+<!2v#&!vt_.ZE=Mv8X[4XM'̊v{u!T52L#͹;=V4fz{mph:i_kwrje|<W5ؙ,PW|a2[.E|Aۂbbw\/29{yxΐCehfs`zRrӰ#>fտWX04E jG6( /6Ѿ4W@a9YU,bCG%Qs]ҴAԓs s'K>}2?cƑW'Z9V1Wڶ/SYwNWs# 4Ga>^:v&b=m8w/oV(XV/!INt[JM1kQΘ{pyζ4D6p +b^zߙ; ,re2ЏDnc R$*gĚ6'Q$]Qb&+wp{ +p2S[I\(#e&5~#ƬD| Pv0Vndo[( )M}7񪹗.ξ/W?E1]K}>}zj%{"Z3r?> endobj 3294 0 obj<> endobj 3295 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3296 0 obj<>stream +qb"ĠzzWEe)u)Z-e= y< tLV:ꡦ[~8JΫb;. +hob6;'oE$ .1A>ōbooy>7ulkF5E3^f]Ѩ?Sp@)Å69oflh7J,k2{3[_hU_stb>b,\bZ[8mcFZoոG]>,vpR$sv*haX]\{ѥ952C(NkA6@ JHsHb 3֬[4܎zQɯ_koJ6'S4nzB7rmsUipQA?Z(Gw.@dHkt2GBQJ33[qGW;ug2})@--&4<_CLN1H9kغr&3aM?:hUg5^u{oeob) +&b񤩤z}G 'ʿObR+5]/)D ϛBik唯|.zo;um%_^x<)T)wZIU,zvY^.+ K-pkGcsB*ETu9Eް[QvвEĨ 4]T5l-{q|; -tOg40Q\LPa9`+KEX h',ô4%a-յqeejktK8USzXsEB´4 m +endstream endobj 3297 0 obj<> endobj 3298 0 obj<> endobj 3299 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3300 0 obj<>stream +l;̂\"ƣjTjQ +KhirN?3g_3[|oIU|/[9밡6w2Ϗ@=JIg"1,u4ɸх;( zξNՙƑgsIt_jƿ (dr~Y)~MtN{1%n\DRU,8N&dk%Te_֖>dRC]ѨK^,e׆ծ'l_ \tCsNLذRA| ݭ=ryB(X Hi(K c tcC&cl>Ƙf[C2{Ԝ픢,]VE +8UvEՕ9sДJU1ɻ&cQօYA(j4Fi&82Gf\7҆޳qRFQ{E9()bY=2$<A@80Y8o%A-> endobj 3302 0 obj<> endobj 3303 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3304 0 obj<>stream +}qƚ >;$+>aRRb /3(tT3mmO5BCDy Wq)y{/1 t겵7cwuw+L;*'ܴeQ}=_tr?s@Bퟘf4t>BA?g?ҭmHAàQ-15;> d;vy倉.2^ iCQ|Cib|XMVYD#K#P69Нʪg|b{itݻ!3X,E0r,4?K< ${{BAy轊0 +ǖ' UN7,n$#x-mҊlno5፡󟢤VBmoQ +ĸӔ" XY}~943?VK+؀{o W*`H]BO{srA7>E+BJ#AC(D + +؞ '꣤Iˀ bC좓s)Or3R-#4)=3&oE0N4r/q'2g]rx$髸e ?aϻ*܋/*FD{' ә4FQ"FAC~,2B>lM[%^hoed7~(9>}:L|O7/e$q_jԠy, ~0} +"OI& 2p5Dg%k;jw{gQBy Y8X;@mKqhzhDL ˈ:*z}}!޵Jbm_1>Ƒ +endstream endobj 3305 0 obj<> endobj 3306 0 obj<> endobj 3307 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3308 0 obj<>stream +b, +3v(Z_.Uֆ7dv{RsZz/1ST(C'[v.s^%N9W0ϋJ 4,3I2E?ȉ̀fQ (^S aX*,C繆A[V^AHJFz0HO8p<(dB +[ZEp1<.YBHwԥ//(0DüԨX|64H 2~8{`I# fOPZ3H) +_xJP@zVkK6 uMiz +1{ܽp{+ ُ {Ps ΚNGF~ڔk ZD֣Ci4 +$by6י.ftNS +p44x׭~|lBYZmwh ְ@u3>Gc; >4 Ǒ^!ngbt%O3a*4|lbs0M,ّwz<%F!'" r ؗ+Q4)o !RI 0VF`^'.C%o#vTIDau(^H:#>;Ls6C! 3tւ`XluLW=[: 2B{K&6qy5]|' Iҕ@J+@9(Z!@Zb"CbN=g%+$ฺ"(4Arxa۹4ԫ^ZmCUfyI.d5'=p#rffasMEޅE{АE` iawa ,DNP/bVs~teNۑhI l-#ݲ:E9A]jbO!ѻn +endstream endobj 3309 0 obj<> endobj 3310 0 obj<> endobj 3311 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3312 0 obj<>stream +H +;ʜw-MZ,րYET<='v㎊Xu1h4csAue0¢Twyë̹ytGN<6Ho/Hɛ[K({. +U-0ؙ2PSBqFmZ))֬< @_?nțvy~6tFu7j7-7bf4'_@S:hq3f}VbVl|d"d9{xRkg_k Z8.rNZnRs@6 RW֐H[c}Y= i,0!ZrmD7 tL ӉE_yk2`5 ! 9w?d}u"*qH ę. +2Ru/%=4t 2uBLUlvvar/;?hC!&`?z$\OV +Z;`| Dh$`1./[N e2@C9/$~.O`bGJcƮ(-|’,g$(&i/΁ fdLm!sJtf~WGGSv}c%Ũ 0sš ;Xij`\%^eԉӌMH--OlYѡd;逻9SOc`v?D^Rea}E>k,Ș·IKL6(0 uo9Oz~:'ƖIDv8LmS9PSkwqX`Ty1y9G FbQJG7 Vz\HL'Q?Frr/Ag`R.cȱ[ +endstream endobj 3313 0 obj<> endobj 3314 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3315 0 obj<>stream +ԇ(QY [mKՎOEp(#{xolbaW-7,0 Ph@7%D|OXƱMÅj)P'e9( +a h~x1,/@\;:ƛ-ٽDb91JqkjrJL-*cp>GļS-CFLSҹjfec^| O!( 2.H62몘n(09ο [ycҳ!صqΓ_VTpo'BC TiXmju.,,0 v%hb!H/|B'(n0%ʬvMIzʫ!sT0p*P]ӳ/AF3}"c_V2{ ˁn->nQr8d4,7wjY_nQƜ2veۻ\6 (;*0һOH O~\ߣm{Xnf9BmweT3[!{9|Q $^.N`7 +: ZId+XRo.v*.{g BpMh3zXޟx@~Adz59gPe OGN}(@yU4:#3[qHح_űfgzpDNGVMӼs>'%z90v(um}.dW? Xfč;z׍\fy$mQow2o]Xnw'켜9)%PO ςR12+BtvX7??pl +Y +-utV7Dc ߦaIenr5I]J 5V$ mD2\:o|K$M}_l[. *=JȘig.DQ'`0-bB΁ċK^|,gG gOS‘ٟMFcn;a -%NJoWfMc9<7\:VbIZߏnP.X( +Vbn? HI-if/ +endstream endobj 3316 0 obj<> endobj 3317 0 obj<> endobj 3318 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3319 0 obj<>stream +1ʂD6+k<_Z *B_.atg"Uf0ІL +c氭lTa1D\ ,f"#ArTI~$aC!,"NwŠɛ!ٌ/n+Iz;̳$&1~+w_d֠(6c+Bn2|I*#LIwvܳy.h.GpFR5͒>JSˤ2b# +%M6> iG tzoTlk? +GF$6%VT? m$g"){2\xeVS:+Akࢰ!i +~ip.dhpPC)5=/O`yLR̒7b)wQ +r+-_@}ad5@#y^*DgG64϶XfY(DWC@tȒst/B 5{$qn 6Aݦ23IDmXI91[X"C/aAi9Q.ír>xm}Z6_;8,5xdC\xM'3Įpey* +endstream endobj 3320 0 obj<> endobj 3321 0 obj<> endobj 3322 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3323 0 obj<>stream +g+1FEiM{ˀk~p La!W7 ++QmwS >)d.JTjϬ`ګj,U]~QmESߝoD\N#yߜB7T>7[^,pf>Ӕ`?(JLeY"f $ Su?XŨ8֝" 0ln}+RH}%dw ʕ]]^8qn*U>K[f}M%|:(I fG&ӏ󯬿J,ڴeZZ%Sc +";O&#M_:1~vѧGA[Zpgp |8GU5*] +,zr<xܿ~M&3+3a(M'm,?=%6}h9h?L:5ÁP=gx2ݾ` +Pߵ/:=4tj?N [o\ or Y;?cЗzg;,ߪYL~̧˔r=Wм["#c s FYs`k~en :IԢ.bC{B˟ ]mqyչjZ®K'HAr3IĨb4GZC^,"vui'w\lހ5WXaI~/}ݼWsݼ]( +ydFqS{+ۅڅԄ|2"*[&*c$haEs}R?u9IcY`X#n^z J=4* M4Z}Z5[]w1Q5!͠“|#TI +endstream endobj 3324 0 obj<> endobj 3325 0 obj<> endobj 3326 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3327 0 obj<>stream +TĒ'b.- +}$2 ӝ2&"qX;MG,e Lے}~eic 1n1dm-ՑКk3kfFCL/دR +9%zA9{D'I_h"5"j)g/|;\2#Ԧv(|pR]6eh@J *T+VL¸U J⇳î"nU8CX¨4(Zj G䀷`.`yn>}rZ '=[]*:aP5$d4~w*ȍ&?Jm{?˴\Pvxk24ZIڟ^/Ю p/{=0B$:Du#4Y*!|[ r(JbPEpBWlQzܳGa-&ea$Jm#h+y0 QnzʢMEROP^)w46tN ^s@(4VLn b6{oDAm(s>@łO] |;$nt] ~Κ̰{$\3BP=E;bۿ!P蜉XNZӕWB> endobj 3329 0 obj<> endobj 3330 0 obj<> endobj 3331 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3332 0 obj<>stream +D>MtA^>s+tHJpو*ҫJ=$*YY &}N+[\'IԳ.:(D+47݈^7iO(iuB|7-&dUʭOClMvwR eq$P~AfzYhݻ3 +S"55E[t0~bX\bXɄCbe +쫇E,%}}p%X )u@ ;}/ZqTdK^ijC3/GvVƌ(}Ĉbg\F~iF\pT&~nWrڠ%G$yB* ⑷$ +$,l>=ʃ"-+xPPk[3%m`p6>nUa?/e\^U`j}/5-hGۆ At[ϱJ'-?"[X=#Mn7=oG5ixBU6kFL$+o&`kz׍EZwE'YFlC7tX!Ie +Z +}n|Мo:h>ˊVf3uXk·ٌ,#c?ÏbhU Ld#Uw7dMƲVG_wރ$ݶb;4t>tǗ f5JqVG\4HSZ 789OsTJ# + p1kg:١hNVÌ%̃%?YϊܝCSCQ;d+5,ѱFc@H,fujLHϗ`J2tnEeb6[LЛ6k0?g.n_ئڸ`;Vwy).dc)z]OKp 4XZ +F_ ĉ]S㥚;ws 窯ĐzWr0i){/z$dJzZrFC6(gWh:5cicۘ_{Y'ВK1̾zgnpWLI7s4%T RYY0ѭamiAhْߣ2; T*BHCxeN +ۈbc/z'5;\a'3'Tby΄E2y1h}2rKVzlPY\\ z~7ZtҴ*i,|jnM +endstream endobj 3333 0 obj<> endobj 3334 0 obj<> endobj 3335 0 obj<> endobj 3336 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3337 0 obj<>stream + uz#&~X?:ZJ! &E*%`(@|ݮ@&llSv3䇾 a)(Hr]vڤe[>5W#O$O-|< $_= Ц /sLُq'6G?{ʒQkk,eT` _4'!Q13d861&kW `/c\nƽ̞6(L( yƆ.boҌoԦG) \KPt SjI䅏)Cz?oS]/J0IQr'0߹눂-No1`r\{E]<XМFR*Y_ܧΐް1,x_C%b[W8'ХDJ_A$zfhbKZC:vmwQS5XE LJ(2oTa߬H,{Vbtʩ-H[xA9SԅQ Ut>Lز/{]Zg _]WʈYє7c\qV`^CqqգeD{2J*龳V +ɫoð.va+Ed#Ms)}wB*ǼH@91oLoꏗM5K16=F;ÔGuxd*]'gK YԜ&ዮ +,OL/laR +endstream endobj 3338 0 obj<> endobj 3339 0 obj<> endobj 3340 0 obj<> endobj 3341 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3342 0 obj<>stream +]m(L@NIrk m"u9,]?30HE3M +-DM܂q=GeX֒jAl9.)NlzC6cp( 9<I4+!nT^j?7q:JXk@oްK)@tO\~ڪTf)qִ2cvL4D/F}}9+%äDJzŤY~׌%IɔX_R9/ +]Ta7 %h'?+2ea_ĉxE[ScH5-`QmMܦ(tID~ Б5F$jbKAw>v7cd1ÿ_AE`$)hkނxIa=R SţI 0uҁbԝbNWq`oUu^$] +W?_GW"Yu h!%90&LI9RUX3l)D,o@gDGEZ8,@Gyku% o"C@x,QD|FccKQ˺6V O4>!>ωlsȓ 0F9_o&Cr5كI: {Xk l0Li5C muŐQr4*P Ң%&'!,W$`nUe2r{{aEwԃ+b$ +endstream endobj 3343 0 obj<> endobj 3344 0 obj<> endobj 3345 0 obj<> endobj 3346 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3347 0 obj<>stream +f5τbVK&gע>dDՏ"n|vee3znu;֥xMw0BTgekډS)HVcH(pZqbC|(\6L!Z?(fN!EslM٣.,[ _Cn-HbV8oS|LqATMD`،JDQ>E4&T#ahwNw +vmg ͐F He6w&H& :X!!0E4$84y>JזW2[[R谖Z@xC*r25D_Pɇm,JvnNoliC`{=n.,vzB*P݆egՙs.bʼnM}k{ .}qt̉v2,B]REhgJ +a9|gv@M W_T|^AAhO?Kz>_ yW$@kmnEnI*TgEd9hp=mQ)ۅ#J1Rz̄` fID`K !W`2. >,kO|AAn׍F~k5kWq&O QI5\0;Zz %vJ5 +endstream endobj 3348 0 obj<> endobj 3349 0 obj<> endobj 3350 0 obj<> endobj 3351 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3352 0 obj<>stream +q% [QVDYv-&X䆔|)iv00Hf>zrQEWR]Eƺ5ܼ>_CT-T-4zwt%5+8H;Ǖfg)A)?cwC/t頥Iy6J% N0"aoZu!΀1Vfc7Gw i$ip*7ɸY+L. .[&Z`Z"yQvP{\Y=;末F)çVSayڦ䢨e|wW͊ߓ"S{Iw)V4v|{,ocM.FM-gȊI5E@P9-BthƾTBT8x :<@J{g:I)D/~blן\$ń 2WQ;xSyDleآN% +"{VxB9($[`j3yrG ;[9X4w=`*!}_нuwWYpZh@)[GtA>s7zjpfr8J,?&R?Y| Uv2KNʹvpg;8>쓾H2"(dJy˺D{=Y|pmB+-xۗJ!GOuEEk*YjR8K?ͣ(d.pvx.éVCם0 8j=|R\4R,=~ uX5<@dh  +endstream endobj 3353 0 obj<> endobj 3354 0 obj<> endobj 3355 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3356 0 obj<>stream +b<)u)!]D j@eAdiŲP2:.OȎ߽̖ѩ0On)Y_lVF U:NP#@`aPA hUOկP$ӯA=ښx5c[ި~06Psϸd ^㛇_ޮ8e\`lR3}Ns_PUGeB>ꩿHDw +g֋[u|e$_Ŏkͥѕ@?7K?6хxIq[H#Z3<' ZeWuf^i%3}QȬ vq[a|e>i KuaTHGh%hF໎q0<3W&݉-d?w!,0H]xS(6n}& +<ɭh95\+C;b #y+#C޿N5a[[ +6 k!96ق޷;v!L9:qwsZT9*m]3XIq?@ugU;iF&N(etXֱk>孲 Z.URg^cr1i4x2?hLLR,|9>zR r`&d=Z ΞZ͇Eh%֦YkIIUEl.l5[-z1|e"Sdz}XG\w(6'? :E$Ub`{k3&khGe'Xrʠ aje8NNfAJF'|`pjVugfWEkBd(ͯ4;x<5ڎl}9,oB] or}Z j8ca^pS]jVx,{1ۏ\<Al%+ՙKp5%=, W!j^k<>Ӯ0:g^7(]E?+q6o`{2XLv4ǂ M< q0adao{QfWIMx2}\oJ ;F4m*["ۆ s*e+ 1DQ}@Wlԯ+7 P!743bVϓaXe&خ +endstream endobj 3357 0 obj<> endobj 3358 0 obj<> endobj 3359 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3360 0 obj<>stream +,? vJj15Aa|WHV‫b6mEo5{>>:E4&>ǽLG %Z5/WcjԍL=V?:9(Y'e.QjγsyO"[>2[v-YcK&oڜ:U!rUc0$ =F`(@K\mf }[NQk0^.^Q"~ol0˺)f+C-TI[6T`(5v%dj@#5PnDYˁ8X5s| tCq0@q"'\Gqv{5`rd ?ÒÀ4+yfWnk %N.SƒCDŮVsBbh*Zƥ+|(L*\F).$eZVTaz/Ya^TjY+6t +MK9eO:RYOX\ )ƃQa4٠֬'@"IʚXѮd-Oh-~]:.3u8ETAGW-c3J{Άa.\-]Mӆ_5դb@ 3&f_&jAUVC]ɢ[#IͲ@RfI@=M0Qp *WP +aoˑɯoYAjISHH ~ Ľ|c^\Tk@!90D6[L?=Up/1\Ϭ!; ΍e'PBH))"^g,.f6JsD+J+pd~IԃsKJdGüOIhhP9:eKj! i/dwջ t^e꠼kmEcAy*m`u,;l~n 'Wߍ1nfW%]UOe:@F=ֿh(#M=:HOח=D>0h"xŜ-@DCtNyR~'c HiUU8ḽޅ8!!{HzN"/t_@vI@5{9;F&g!>65sQ 4wp +5g 61 %` +cb?HFSrAߐ$A]zD٘Vf! ˖|Z;XYT?r Q @J"(5R[D^ +endstream endobj 3361 0 obj<> endobj 3362 0 obj<> endobj 3363 0 obj<> endobj 3364 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3365 0 obj<>stream +Քps~F ß4 +>hq{]s2UmV2*yq&\I[0+,M fDܣ33BVZ5N\'@5YGB31筊OAQѐ^b7枺&b_?En$B>7}PҜ9 +f%ؔ<٪c[E!syyjLKa".D&niiO2dLp^i`l|js`BRK %Ǒ>PƗ$Xĩ)Sxr|M1Y!Xv}u_,zRYs[8gtn5B5vz-z‰"k̂SRe_ԙEr!;+z[_B.\H?Ql%: })v|58|Q[οt 2}ܕnaRMR]*[?HrDÆٜVYɐޤ2ahD~ axQVS| >\bdOIqe}At5?w]{1"]㉏:cwAcs +'P;'acpR\`A1FB"U@Ŝq^MG7> endobj 3367 0 obj<> endobj 3368 0 obj<> endobj 3369 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3370 0 obj<>stream +6z/\ٿv v$WIUƲ`t}Қ,Ý*0~_Sné;XБRUׄ9EǰxbA&Q^X& 7DuX: u? \9C]ȮakKe/ n{hMqvJQ 4^Ox|?}U)^Zl 4(khkՊ)m(v)׼CK?SG={M+mz+l;CXuB2J f;9ŦY4jOWrɺ+UC)\qBMg5ȖX>nכɍQy +endstream endobj 3371 0 obj<> endobj 3372 0 obj<> endobj 3373 0 obj<> endobj 3374 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3375 0 obj<>stream +O8q#NUjHe +oA~CjNW=Ʒ_bpEp2 DI/p $Tej`_QEvWv[I@=n*)JnE>HT;DnSZ6:3E+Dcc Ջgb?Cmrƨg-"p`Sw`+v\߻K| M@n>4  'U0lGϷ*4{%%>CfK1BeV6mA@7us%EcgGmuZonu6o#hBrV0,!\MeQexwcYS2OWn^s˳0K [HƊuz;1v a= / +}l0ѧKm.yN2` nZ6Mp@JO4.%||\"@4}|F|Z`VQr.(NYq|#ifކ;±#ø&^R̈́  +g$wX + AX KD`Ʉ\Sɲ*BㆹÖ~C9F" gOIAYbu@,~HK53>(L'S+U@ Ju2 ,^4kX!0 =%B'"Ҋ?59yP`18nId uDlQ&B q~X!) ;'zc9@Y+aF*}_dN(d2U仂Q$*tՑE^Aײk?OLJoSH!d +a"UJvy~q Fp4 [-X_vPAs.6/y'(o4c7e*^DE%߮%`8+cWnw&Gz]҆VEj[޹H&BTڔ|9pt0p(nsюY 0B H_nml[ށHR/sYl7cgmܰWUµtAY[ia(P 1b2?BKS;QWٲhQEm +endstream endobj 3379 0 obj<> endobj 3380 0 obj<> endobj 3381 0 obj<> endobj 3382 0 obj<> endobj 3383 0 obj<> endobj 3384 0 obj<> endobj 3385 0 obj<> endobj 3386 0 obj<> endobj 3387 0 obj<> endobj 3388 0 obj<> endobj 3389 0 obj<> endobj 3390 0 obj<> endobj 3391 0 obj<> endobj 3392 0 obj<> endobj 3393 0 obj<> endobj 3394 0 obj<> endobj 3395 0 obj<> endobj 3396 0 obj<> endobj 3397 0 obj<> endobj 3398 0 obj<> endobj 3399 0 obj<> endobj 3400 0 obj<> endobj 3401 0 obj<> endobj 3402 0 obj<> endobj 3403 0 obj<> endobj 3404 0 obj<> endobj 3405 0 obj<> endobj 3406 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3407 0 obj<>stream +3+{=󭓇ُEFo>@z;P*U :`ƹ3VsٜJ+;N8p ++BA) =8%aK)yW=!`pVOm6#TQd-)N6Ym FEUw:ko`Њ«#A2CQў6'P>G;8 -&40Xfb38EAb$ꅞHt!}rlf/@ac$ǽ;eQtHQO7YyB"#DNj@ FLCaMd_+@(HY/vbQ#Rլ{w="Ɠ HKunPQOrrc&4 ›wmo =/S5GDl7%FLbِASָkg}h}b`wA; )g_j]Yg9swCP 0z A1 .O`e-sH|:`Z塀 5P!L?iZc6YI^M9=Z:@ b6?ǎtH8WcS|iIHW2rD71I<^vTU Z.HI >'\J2WOPb ?>'oqȼ&E/N5 ܰcĚuЦ=#榃'CBR_|{l%Â(aO!ӪB=Y/.Ubi] uR,Hr; GOG׶:в6_;yA<5n$ t>4)J0)p;m + f&ՀWh+릹v֌LIK.-KdYcf㭚#Ww\ؙd{@k14XRf6Ҏl}uŖQb@eg Ub6Vś 친ï1TXV{?v/}ӿF>}b'az 5|4nȟ Eߵ31}V=VzmGB&2\$|֦,TbBJf^kTQÁQ  fٶ,V6uKќ&5cCLݬVX&4 ?͸J:| Ü?jRHSJt~-:Ղd&.fL2@"f9Ns.})x`X['>JxUG"icxέ +F1?鶨̑D;.4 +1S1"-fl/塝ɖJZQb1cMȀJo;'s +дSyRsq 8.O,3 +6zg_Υ.OvY2)z%] ++h%Y"2|h2ZC8´=BD)_!9؏"&0#Ǐby;!s,8dOɌ7*N@XΠ/I=-VT8T&ՠzz G^&8+ۉmtn0ζ/s Ų5&ΑX+ZyYJp5vv$R/C6kx- 꺬ݧDKy{LK8]}7v8=Ħds[ 1r̘V\e@;ZH&,7jNY#8M0x)W:&Ĝ +l3052RO;(6:錋l# 1Ug~OT^P^YNe(߂"oȎ.NMkߟ[:93ebq鱕~nVM_O2b8cE<X&TgNw@pbդ1xc*R$0w^RIކ7M0 + q%+R#H|0GqNSA ؔdmu>z=F|[i()yS$gu-PYHLLCX揙^G @y΋|*٣S"$Q6m=$g[Gm׳vbQгA0u>zGp+Ϫ(EYT:Ķ JQ%k'*߉CĽq*݁*e?*S!fk#6wbu_ؽ(-Ea׎ }=-4꼔 t#N[ Hgv=fUծBi4n4dWPKOuxnjूDXN(O>KM=cQ,U-jiOo#f^)j8]ILIBS:߽5'gv{;U)gcp]5jµL-Oy=9)Me0T!0L#*phJ2%U249JIg]'wt%'%Ap 6qZ]kSQ^A^4Mb׽ٴM'$G$5_ ؋n ,@}B9aҵm+: Ǩ`S3ֶPNO +R-ߌTgvNESdۈo= ?*Y?KMW_&rX~BZ .F] .PWDFIa̍[L.-pmgڙ| +endstream endobj 3408 0 obj<> endobj 3409 0 obj<> endobj 3410 0 obj<> endobj 3411 0 obj<> endobj 3412 0 obj<> endobj 3413 0 obj<> endobj 3414 0 obj<> endobj 3415 0 obj<> endobj 3416 0 obj<> endobj 3417 0 obj<> endobj 3418 0 obj<> endobj 3419 0 obj<> endobj 3420 0 obj<> endobj 3421 0 obj<> endobj 3422 0 obj<> endobj 3423 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3424 0 obj<>stream + +ȷ J壔{$V +:GՇn +# ]*0O]2J( yF^a0]\Dw6ageOBFsbL`LO% B~@(* :!GR5\94ڡ&\b@w|@ͅ>> MH$*xJJG<cHcQ-b}&Fe +կf)>t*õׅ ?Attp"s>*-i2EX'n7_"K0IxKaqvҺ^I$ {-aoagX<Nz :9x@2 #IHae{M# @~eY2N en#B̒Zi3JC]ɴsTt~HDCA|`PCNrAXa$ t&IXɰ{ȭwlMlrDM@/ۜ'aE bq%| ZO YBz(Zmc)LM~ә!}" F423M/z\,@^ D>2VJTO.ީLSfGeU`QΝx?=Į_a#&XfK*I%φǺ/d Tj(qCX"ƠBF$2u4|,D)RG< )n 4k$H}{焄`l5Jqqkwηy陾ƞl (BF6Tm{$nb:O۱f+#$к>@Ճ8ڈ]O936|nxn)Bc ӕ{Ѷ̥PQ@oΟ<&m²W |-C[w!nE'=sئU- \4u縁y|¾፾ݪ@az;=i4=+3v!f"T9:'i]pmM[ |K[GV"=O]cMȼcn!mO⚊䦦LOQF YO9<}^LM=2)Bb3UZs~o4,ll HV95rSOW+VO- 2;:٢Xl= +}<7Eꎢm@SR6fe}U#"-Dަ>T +>c~e)6Fu-Kba.4e Q[19WLߌ6&>dn`[nh+2Euh@\; ;;)jJw5 K(c"*H,(ׯúW2.,<%5&-=x/F{QD!gMaͻQ%,TPH$g1_[.l2sn + + *k *o @{RfR6A|s;yamn- ړR`! Ty*T0BE4KmO3r9aHa~?`d%{(gk qhd +e~!(<*{&rL^ +endstream endobj 3425 0 obj<> endobj 3426 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3427 0 obj<>stream +seNüPkPӎa "+*[WC~?!؈m/C9`O⾊bfd0O2o-,PTt@ɄMƝt=UjamNBolB+wyy.w7<^㗤nȾS@V<ԨnAi +gI #%Sd<q;2 i zX\axMğI)_v#2(sUJt*R +&V-ym:F.uR*NА^|ECG/Th|д遻ZI[qdj u5W4[O6dt+W*J|sAJV//%q@·1TMrVHE7o6D2>byKC/[N]J4"#wea lg;ͽâyQƽ|=9YQtI,CvE`+TBR~`fV3ܭi>GqAtpa?FꭋHDt P2e;6Sxʪ{.8 #HqkcG!Om4'HUF%LL]3SYM^*sjyVxҧ qckUG E +(g:6Fe,⃸6$ J\_z봹lkg2"*+ݜ.+[J!}xԯĬ~'x;zsȾͮSLEᾯJ=bM YἪ#s:Ѽp3AteS/UףdbHAq^c;ɇCJ4}DLvMqCQw45cwy38X8׌ne v?>XLу +endstream endobj 3428 0 obj<> endobj 3429 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3430 0 obj<>stream +[*Uq﯊T  A&tEE_;3׏;vn F84Cld}HY%ؐdRǢEvE_~mQ)Z_\*mϑ$оK{(#{B OywҬ{>՜e͐=q pS cH0p2YBZG;aUhk}H)n2}JU% w*G Sܧ?Gu ͦg݋^%ۧHEW,CPВ9ZoyK7G'*< K-|\O+/dՉrVZs0wP9,EtzWUl=:m&s#:qB&u(Uz>\\^}Uֈn*]ަB>yQ2(yw22Q)>/֞4gp7LccC!g9qV0wL~NrtI \Ob,PL=*C51 )l$oZb`ԄBA&Vub$fͅ .C|筲PA}{ _:cFl&C!zNu?k8|pLqIXbؘWMdG.*|wqLqQ|-Ts.ZG-5ɋ`YU=%nUHQoGfrEKȢ`]T{[F㥵=jF&2YiVp +endstream endobj 3431 0 obj<> endobj 3432 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3433 0 obj<>stream +4ꟓZ$`S{,:yE#aMiJ?RD!VdtBa?|wI{#C}Rرw]#<34݃*`p+3du^*Mryrs>V|Œ7_t(X !+F0Gܑ?ҦmR.`q%Q&l}}nC_XKU,ipHWNˑVT1|hoUo;hI'pݍ2Hvլ + *PܭrP^0J!/97C/b1ҍf Sts;; /T +fΓ}`O ?}ٮseHk.=Tz31&Ij'؎h`&TJMTXƲ٤XH_A +*N×`,_PE>o}Ub"{[G%)y &_?gHUr&:%c^oMR5N!@o=k;*`\}Kt½Vk-{Q"JM4d4vhg[z Hu]װӬxe ԰$LLr8PIdeb}R8֦ eLWڞ&~2)Yǃpܧv7HOZqGs)h_(i {!_y.A3`\JDrxP/ʔ$ #LXwY%&``=,c,SHR@H@]VU"` svG@䒆34}!M#4˚n7v.8Μ~ko+ׅQОo'v|MXy,eI*Lه1(P 'I_ln;hG fN[z̜1-@u 'č] DmU A_g9+(wKrg0&e&tImǥ +endstream endobj 3434 0 obj<> endobj 3435 0 obj<> endobj 3436 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3437 0 obj<>stream +I+bHŴQk[asR4؇sHNG< +byx˝3c2)֦ TB#]eMG60b>QW=7:X@tWaD)lD0̛@ +$Π2\dl +([Ƶ9u0$7tsbB_8qu7k.ox'tk{ݴx\5uW0boL;6ӒdC4(ԫk&`h|]7p2vD@5Ȗ-ժ[Mh= +l`ܺXߌRpQaP;TC?qћ~"^cumѧ}BzFbk؁~ +p!nQ}R3D`ئuo7Z/BHl#z/LfF)XBۯ|F])!8FrܦtJjFr,';?L@7Bw#;өx9!Sup@P> endobj 3439 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3440 0 obj<>stream +a|$Ł&}w@޵ݙ08 AQkA0@J/{pM4kzp&B4zkR_#s' l\r@fHG"OFe'Oh +E^چ!H79֗Xh۔K]Ruųa됞'N7{t$8E4ǚl3xjTЁ6\ Dtg?>%a}uq?qcoC厶uwH6"d`:Rrf^[ {ZU=c{I .uiOD7> endobj 3442 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3443 0 obj<>stream +TEMxX0~p]SDTE'8kH{n1u zS7@ؔl1|n{N]wj"+iU˭HV$l ]QPDYcÓoLm(ˑwoR>N٭ÿNnֻ3;@g;JqTߌf| +%qn[HR -)Q a^ 1}oITL9~И{ [`9w5m]0=8Y.>d<4|5Tl1-pߙ{ rPF9nrL)PIzr-}\ޓ);`BH[Djf)+K 7INY^aN=)=_VHg5l=u *Ӗ1,-֢Vq 'uOb`nR$7I'ͩjP"]4H\qn؏vJ>zgRHff; ⟭Zp[.$zK܌qs(\sdE0w xӾSMdiN6E3*83yBU-GD{Ds|J1ӾQkbm<t%c0(0A)iN|[Nd|g%H1"a#qSys,/NhY,"&3!>XucQ*ւ3腈RLmoDr>Ϫn}4NGE:2mUv}]oVT:My, †OB +endstream endobj 3444 0 obj<> endobj 3445 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3446 0 obj<>stream +D6uf7 l~ŒƩhky\FVE2јh',E#-;ْ;NQ]+d_Awcf# +Joڑthp!M\w-lF~ZϢhnVٜ$4/F.oݜ1Os\: `|puEO?j|\YeW4.-{%xE{=o^"P=xS4hj-ʖ*Hr7_׊uVw)9[I?]AYB'wM,^ZAmwאaC?).KbSxFw:%2KOFbU'PYu*>7 +$FT/8xDw-'SZįoy]>XgUKb albOJ^Ar%*D\HcȲUB}R%bf?\/.<_2*2 3 +<'I3bFIm _ZS]PؾH sie.D%FvD`rr BT|Oip3\ 2T`Bx]d^}4|շra3=+[gƴIN57xuxd6p +Kg٘݊)&P]Zi 8(L~cK xMQV +endstream endobj 3447 0 obj<> endobj 3448 0 obj<> endobj 3449 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3450 0 obj<>stream +A+PJy^N_X+G9;ܐbNCxf/uee׭3zƔ$ C +l qvUq9-?n^< ?cw]993TZ!AƂLˮNV׈VmYܚ\_DTm+?$ +X[h;aل}OCwQ޴Nr\y +:du?l-S-710(3o[ g+AdWx6 nfH%lb'7$x o3u7,wg{sS9fSZ2 WDrY5sI;J5g<S3$@D[ݽ{"Mi\a15Fͮ5C{HT["LF$ܤPLMw*m1RߌY,$g{Aa]GAɶPA|U@u~Zh=*I.jyh6hX4Mzb6ڊJEh.$(8Y-(E:X=Jb$jE$&i;M#NO:[PڨdLJ F,XhٓPZ${<$+ܒ'Ŕ4ܥOQ¥gY'tGZ@2V]ʢr令taT-F v!;JRM1`\0^.%[HC /jjῇk}Ts T5Zo_x'O He"8RP Œ>q7p뛐iZ);L[+|a +ֹ͉0Ɗv4\A @Uo| Uk0nJǭp1FX6n +endstream endobj 3451 0 obj<> endobj 3452 0 obj<> endobj 3453 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3454 0 obj<>stream +eע*z[b?.+$ZE8Բ2 eW+ »!}H#mM&UC%^˻pIuv)nWNC抾>KFC`|C3<DhZ9yEUIu8!2|jG#$VijRh8UoYnү +0yuF,jʩaפg('.0(d3jh<͐t1U>b:3|(:@JYFRj6hcd0cI\4k5Xt QnXfox?{=qǀx,gJL ܦKfȄpr(C|S\/ fضυATwl٪W/\YbPR((}uJ-Qyց[q1U .|`f7u'Y%%ͷe IG\3 :h%TUY<k +JI/PJfټPG߈XdQM[;{<˜L`nè:6'Qg:- 6疹oQZ 'G?-XJsܷOT!nB+¬\Xg ˈJ?3d>2&#q @shڑE_1UQ_~:S:ڲk}f=p0ǭN $U'f!W߬4g҂qdsTJ)_o9)kI8z;mzDr,#FƯra+葕25Wl6)XJ.M?}ml6Nmܯ{2C1A\18Vnw9 +endstream endobj 3455 0 obj<> endobj 3456 0 obj<> endobj 3457 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3458 0 obj<>stream +%]-g)/SҪ#&q=!`&I5`]qPHvuqq$ԒP DEd:(=aQ|?0L&n0ce98*$_,AEH +%l /:0,2Ag ]QbS]]rS0F9w+t)OU?A(D2tflzݽ6)+k>Ι \Y Hk0qlz)-Tެ!C'>.%IɼC?YNiWP,'`6zYGӐxn7XA +D+L0[9u&"`m`@]}S_M*w2b.#OMN.='xz}SW<1,ɹCX]0{[jo<FyH{~H gFf%ي7sݐ6{/>D3N KӔT +h> piεee8DŽscpF i# 3})`j!2Ԩ +VuiW{b!)cYO}=ԴP#Hş-.=a홸\Z߼'b^m؍_ƸHU jℵdQqfA(r#rcP8ɏBoґs_)\TO9Ӷ*O$d}4Vgbnan[G[97mQ|îBK*^%w$]">vUmHEIWdF kO߭bߚin4g; m#&T\*(Ws- ".o8vSp/ u 23cJn2 +endstream endobj 3459 0 obj<> endobj 3460 0 obj<> endobj 3461 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3462 0 obj<>stream +ujlL]bq/SĤ;g7 "g,b_:Yxk@Sw@_JZReu֣'3+11@1*4@?%)0S5Iq?܆ԔO.?cmaw=+O +7쓏7Bjo!A':A{]1gN+/ZE笠1_"}Oo't} !oNmlUF)zTDIWTv\e]\g/]Dkm\!<ȴ㚙]V)K.7wplkWWY4V\~~.:> ͿboVoݪ1i.ЋM:>?WzZ<PTUNpR1C+,ՐM%6 83tj~WoQ`yvz˻pʙ[/:k ǨǡBl9]y%,ecݻqװ4?,pY|oď<ǣ2;НY.YO?@BY"t)MLYX8<4#چ:{ʊ E\F&butyWRt_wi^xs/xZ+? V9m޻)6{C~ckyh}/-N`e:Ң> endobj 3464 0 obj<> endobj 3465 0 obj<> endobj 3466 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3467 0 obj<>stream +-bU*tQQjBL RE||XDxx^vOCW{7HS3!YB:+4um;˿•SLJqfoFRcM4a b&ө.}yb${ \C6il⁺ +쬸eZ9] K6BX-9-v ~ y6Μ)o*yF uGfiqxfVd$8܄\%iF1]$9@l͍[XUkNlǾ# +I&ܵ">aZlܤ!gb-&gR^&F(pzx|; S8rOSig v KZQTcx7&~ۨ@;PG;`śK]$/S9> EmU|w}N8zLMpx <ᄑPJM43'v5ܰ0VwUMÃo&ıE(IzCYn+#K^Y:+~Vx##}ҭD2>MzR͈Q +jn.^$% +or(?$y zoďO +=r|S m> endobj 3469 0 obj<> endobj 3470 0 obj<> endobj 3471 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3472 0 obj<>stream +W +N{)]}AbtV|=d[_D-=eN+;BoI38&N/h6(ձpD uy,B*4edpGbTҲLv"ȷR%"a~=:iF8{j'络p2@V"w?p +.w7GĀm-5YFi@lRԘ=(ɌDex8ʻ"5(TNNdOk,Yl o}\X;%'I'@BhbYkhox_ ,[ӓCrS/]=rγuZq hZ /;K19r8?(g6 VWIcjh_@ZepT ]J:[?T+%ב&[DQ9)z {:Ymp6>qIɯ d ^ZQ+6L?*# ^_kغ0yBHg~n'~#Z%Oh}wF*H@(ކ!T5; "G`sSAצaT+YS6q͌w+z5>G8.2+b +JAh(z_8[S>^ |}t!q$J}T%>hmtN2Z"+T! =*Vy9$!Naʩa>k;i0;<΃_"RT[$]9y<8. 2 WؼMD>;{&bI`sS!"Db3}z6[l104˦11biKs)us+BQcހ( 4|+.fL_ WDqR%O~!6EuQ>}_bhN@Q3'LD<*H;0 +endstream endobj 3473 0 obj<> endobj 3474 0 obj<> endobj 3475 0 obj<> endobj 3476 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3477 0 obj<>stream +Lqh25)H҃$nDj ˊUyrK,b^>1 T>{TyÿU^SثS',SLǟ +%VLKHPf20@@^jDjMה\F/|!BFpa ,u1WO٭_KP!_% S ʼV{:,8ľq +.-h|gX'=1E~s=WaNz^,O`)9v>zʃV@N>N#a9O?X7\AVPs- ?RYCiLid*nUHL~gMljK),G'}x3ΦBt@TJy~4SR:*{ .Is G3vE`,\WGlM&2^ +?L*5{󈔍GlE!5!Ϥ;uxmS6x`svxvQnwȏTU1tkBj[_UgDbzY]؏%118ƢGklk OP 1z>Y" oI|vv t /W::uE\!7y)`{eװRqc`-m>/C&޽3˭MiC:FCa]S|22mlQzuGݯֈ‡㬨޶м0G2*CX, I 7AoS޽>!@X6wfsvk8N$&hI$-"K& Pm> endobj 3479 0 obj<> endobj 3480 0 obj<> endobj 3481 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3482 0 obj<>stream +y ᖎ^?d,9}g̘ Gr%Zj ]Q\fûo0IâxŌy8%\jhTD$ILK{biMrƷ+ݔrMHNx('T4x$OPI/͐>m1YS j\Χ>R Skƀe?EU6j /ⰆpGނ\Jd ,F*Z|qC@ɁqrH=:>vOKw0/~&-MN5O_enm&'GJ T $E]b,~Vcɖ,\ iݗ謖I_t-tG/+5dԟeߜB2\4ר]>$ıcYa_=+YmBt¬ +T/*J-;Pv}>NE^$g|P]?Q]RBǴj߭}> endobj 3484 0 obj<> endobj 3485 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3486 0 obj<>stream + +u' m,Hf:xX2²ZU-|R(r3c:{닣B$e>,Vb?=NZf&\LrA_%\1T3ccHEo)h6sDQF-?y94xz>c!\V^x(&t+ !.x+%pT(RDhKX(5ȎS1Ju]06}$QD{~E ۯC_A{Z;g& +jf+:k&>W0iKH0}7pyj_Wy!ӠLdl4Z~-JL+er1VٰMg%*ڦ_5'o>ez^˱(\3gM6F%[ aw5huiD2ODdY[ɚ>ᑔז A:Տ%<#w863VQ QR===UIv LH¢gxɐ<ۍOGxg\$̸?Lx^#qϕ78}: +<c%\4f+vAm_NwUB}oXD"&Z8[s4*ĭ[5Ozs)AA ADZeqN)=E⎞)L:H-ӹ~}<85(t%-݁ cRݕmƵȲCh/ +r)ǿ%&mg\B-"9r&b)Z+#j|EL1b`vbȃgʋ[*@BQ\~2sSPC> endobj 3488 0 obj<> endobj 3489 0 obj<> endobj 3490 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3491 0 obj<>stream +|e%0!0rM8 ~R3cU +܂}! rq݊JBOuc-Rk ]~!L~=D[N?ZNrcS\~JƯﭒ5jn5 +NeoR# p>,PUTdǩ{wѷ(PWڐ^zL^|"#|Dw14 1a+GUo*@€Q\[HM\Kcq2vÖ]k(|/ԢbJyˉxu0@egWx͏p/7[Z">6buMs;:1#ʟ~GyelMĐ}ӞY鑴\QꉙPF*5R!1۞^+R&Fx%nץ-$U#])BWFk*}9yUoĩC'tѫ:p2kfN'VhAK ~GNMO YOw=M{cXЍY^ 3~M34űP~c$[%yl7)^a,8TL_k1h`Yns Z<ӠkCGsd}|V-D@+.eV$psyojF?ԮUMu6Zµ4~Ԭ\|tmCml[KFИn$vDݐx^4{2u<. p؏ r$g;pk,T> hGi-:BqyqI(`6DntA!s-k12O(J/ DJ13%>F }3Ld0j'{SR[WzQ#SV+nMş'e6v +]*,7r_ZPJ:/TD=}J+VNTG\]RLp Sʙ˗t3.!Ζ/^ԬحLzYo68+CMO/19*YӺic"]JJ bdH1 4XC +endstream endobj 3492 0 obj<> endobj 3493 0 obj<> endobj 3494 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3495 0 obj<>stream +$)|Rs3 4*:܆U)7`Ṉ +m:%x%l:!L~S2H8BD'_Ԁ.wr܅{!Lѽ^$ +sybA䠬%;Evv.h:"H v2$ˀZ7.gYKڨ%aQrܔ(9 +cBKur jd.X^]GpqPű\y^)M"pH ');g +Py&zBrVtz U /!E1D5?1L[7E:;j~k;w1p}X_})TP9w`p[nE^G;9Ip?ģ$Jq3 }E08Ob!a|Ws3CX x@'SĖπZngj "fs <*b+0x֖$P>0i,OJ腭Ǹ3M@iM֗'zatiE +endstream endobj 3496 0 obj<> endobj 3497 0 obj<> endobj 3498 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3499 0 obj<>stream +&#Onȃ}{ӒcO8ٻ` [!#mGY'ni4̂G)'EI-VP*3+on1f nי$pn%KKl +M1zM$FSb& Q7mx;uƿAFvymDvR6Yg]gJG*Ɔ׺#`ZHMǓ.E룘h`mQP-m3-p"c6v F KUӯˑAitVW +wf$DU Eeڋ5X8]xwyStpy6U.PPF CHA0IC]SvU6qbf*VɶGCa d.`̈4gV)a^-肘lKJ6}tZF\-ƙJM~P twd)٩wChpAX+ 񈓲IuMF:Cw7iS%F`BRTu\֖4|~r~v$_<`m:7ٺ~*€u؎ȚCrCjk~E@_kO$:^/JrQc-&éfuhNn_QфIb9Y<@?5ID&}f[ᔐNd.ۚ^ ̐'8I^y~\`}ѹnh!K=ʶ +Go9gI]K-"רvY̐X` Dji*0~CiQF ")#0lz +S5! +lSf D//[sNe<jXD)>3Aaڊ18w|O4E+"~I)";d_.t(0~w!)yz:YϠjbKKm"GEungMWڎ2L]# W*'赝1Vwy# 8v2V$/Mлfg +endstream endobj 3500 0 obj<> endobj 3501 0 obj<> endobj 3502 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3503 0 obj<>stream +2]W0ꪮJm1ln!`x;2},(L倣g_7af)ZoLA 6z/d`,pfT+X*&,Sr?՛DȺ-l&.1sI_DB2+]X?vb.RƇ0Ąm߹0">M5N99rɛѻs !oBh9U[]P֠Cۿ.lI_Tb}@̸Tba*ATTPXfGt*1y/(ȲSJR|T0alh(_w*؊RJCR -@TIK[bc3sZMםDVR;ꋎ}hjMqn>C2D=SMέM֠#Mq/d( -, un, _S=VY:;ٙ)Y/F1#aX1& 5/ ᡽E/~ʾ޳- +0YM4te6ǝþ\Jo{r2_.yG،DJ-%DJx{h'VW&^ZkMF]*|mJ %I,"i?KʹoKD&w +ۊ3(z_jVi+cű)LI {\mm²=\*5{DNV,J(岱o"t˾XY_F>DGcԪZuO>޲nF&xqs +㉋ IݛPPo]& yIxV*5fp~8MY3uzK 9ò3Jg$_c&c(l +endstream endobj 3504 0 obj<> endobj 3505 0 obj<> endobj 3506 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3507 0 obj<>stream +\Św#| +XCyM> r3蕵\&9MbA9Kp<L5\]F%s#oΞ*I_25P +)T+ez<>z{XGT!+qoqp⮈)6ݳ[`dTYoT Bሀ fY۟7Yi$ᝍw.gug(51fMW-FLD; A:䒂2 t &ù,KK52{# [PFcUYm+*k{74E{jrLJf?mяjZ2 "O|m0 M/l +&'O-ѤbM1ּ~iyX؜-S1cV&4kG3.Ӎ G-Sh<۰Ǔp4<;qPT0^~< f3@S3 +h%zݰZkMX y̺ gp۰ B;|>] +ަF   r|n!E4l% +endstream endobj 3508 0 obj<> endobj 3509 0 obj<> endobj 3510 0 obj<> endobj 3511 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3512 0 obj<>stream +MqQ~]5}_*pV3$$2DI[ |8gGEuq^otF:g\vuD7tFR*UrG^xuWB> +dօӓ*b4rqvQV^7W͌]e +Z*]| kպx5C9m+rɕbZt'!m8L\L|q12Y@ˁt$IQ$\:2:+RhܫBu}\C2 C>h]8d(D$_AD '?z6­Uq4c!nT:ÒOy.6-(LDO +9)EZnDQoFf.0E%˦x`OL>Axu&xB;g0-8^q*d.(HﱁN39h /ڈyK!I/#wׁp gqȞ}2`:'Sgus| vgo,Rqu@n>QvµNзBAM+nl n:~%ΰaߑe+Ŵo헶p#k@=: %R2?\:]{rF/ÜSh}Ez`bk.|]sׇtU;ΡY@'L+0`9ܱ-5@jm9`VzczGzex16e|Ԟ;I55N`7, x T?vKhyc9 PbzzߒŤP*܊d-ڰ %_(ar6a se.5 gvivaҦ2ѭPu|O& +kšKK{j +{ +H O KeOg +endstream endobj 3513 0 obj<> endobj 3514 0 obj<> endobj 3515 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3516 0 obj<>stream +b$N]i1^u?8m6W𧭸m)jZb[O{zUu:mt;Gqއh"&xixj~)'tp8R17؊!2B*WPKr 9y&|7*4)a >².<+4/miَ@EÞW&SLKK:MHxGa&wlyr!ڜrArs{ZN7b +:8+bqp1Wfhʇ/V/Ȕ-U1XgYz:,GhM +pi JִTn2Lᑳ)̈́zTY_|N&ϛ91=AX7>FU1g;E.MY^ΥFBwm7pGh /)A16QqoW伛BV*_w<8Prn.~V/V R|b< +FU7 IAtU%wos׃S6kħ?Tړ^|o. L{-3sxXyrI[ +TGb0-&h _ʽB<5(27 H/m2>imi%Twwg|"lq]w$T 2}<8[Ÿ%L2lP}ӯ B>fĆaj.y;q?h$g~b0k +pձ\@$)H01?ؔ)TFW=e 濫7,.Y2&)jJ= Gq1@ +endstream endobj 3517 0 obj<> endobj 3518 0 obj<> endobj 3519 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3520 0 obj<>stream +Sׯ<ͽ.xȫLLkrfΩiCżqYdo9P6=UFjz˯7֘[Ձ&TӼ~f9r0C_;"tMaDpRfҞgmGW*j,1dm+ O"7$VN8Ӥ}Dn) Up/\_si\*Ai-QLB#@LSCKxv OyTo;fv6eΣ x0ɢpQ{a9 H@IhY/Kxin'_6<&b֫[)1ZYB1@,D{>ف¡{Gwt _$ 'c'7렇Bkye'OX{\xoUQ>u‰)&%o=haz|I2Az=vג@#:C0Va{ac{$Y+dzkyz8r31{aЯ}K2 4B%ȫ,܆Rgp< Q2$iѧj(wC_ޤ~:>?Ž $|!gBΪ9"^EDV sVw!לGZivq2W#bS`Y;d mJ(jzW1g/xI_*T(x=s@AXE9S6 'REĽ͛ k>²7Gv2ړO薠E"WJiIHC8+򺺢t㳿ųKewBߝ*x͖;U4vؒyEZ8~%Z*E5qPF+wEKl"UIHخֶf.pK^-PTv)- -6n;'{fBDY՟AY 7zDZHױ7EvV!SL(j[Q[,G~7줂/nq%.pxތZz9!sLסދGZ NK'"b(4 +endstream endobj 3521 0 obj<> endobj 3522 0 obj<> endobj 3523 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3524 0 obj<>stream +8D?I柪-իAh8f$ܷ-T[ۨ@O`9dFp@C 8jݺVٯُ!l5g:}fd=y:x af;7atCл""C-)LxaC|E*Y,ڣNf/N@n+gl6 |3i x Ҕx(v6n@!6 +-j6-Ixw%}#U Ȧhe1چk[uM6=ڿ9օɢof3M}VEkNeMATpN(Bʿʕ J-[6?" qΨ@g // xq 1a8hl RHaϝC׸[R"ƀwYBGÓ@誯N}E ΤMf^†!`Ӓ XR 42ļMꇹFks4ji! ;!y#Qj0xV["N Sp_S~ dXSbwrJcH 4-W8fjO`2~*FQ:_(lbQ%%ag +K@y\l$˖WOc={5G_ʶ4iEN;mDLi8&֒SEv +endstream endobj 3525 0 obj<> endobj 3526 0 obj<> endobj 3527 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3528 0 obj<>stream +x3LmJL&0 q譀LokufQ6{Ц.K*fYa/ø֑9c$ VgR*bKyT)p(+\U/&IQD8Hduz͋3puNQ3||.؝dm@: guC !JdWHș\0]RSBl禭.ଞ< K{֥:d;[iS;N\Uݡmz ՝IfLVӜ^vyK⍈f~J$8#-]gNmKrr@97R}xIj _?˿nYϫ_P *(rǕԿr Ȓ&p|K`LcJUN݊Vod2 ӑCϯqA4#jup$\FoE;jЭ2I-A$)x K +3 0NPn {NYA]':VP5t%L@IE*^W IJQWʒxUmSIwUNuѡd#(;ۻp %|Qa;NjiSAjB+ xEpvDyUq%"G]Aيym9( ߿"wҜ7MlB~g" t ,{s,{ ?LpRƘO`koi%wr +*D :Ҹqkr@C#CX1ݐ$;$#3Avs]2EYu9"F _|Ǎn 7VǓrKkIW*RYOgeuc + pX**tLtXd +endstream endobj 3529 0 obj<> endobj 3530 0 obj<> endobj 3531 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3532 0 obj<>stream +JwDKr^-DWvX߫zv)<QLa4P36/21gSݎ}%2>{VkCD.(ED쾨juWK ]F\:!^s5;4@'>_W06SQoCg(yB7T\B lq6^Tp֢~(-I AzZiNwGI_m3GGB#,!i7rҐgu*ݽ}[!.a]cOrvm?_QjdT2l>k 6Z'Vy;u՗.jt[lӋ&Vm/)=o> endobj 3534 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3535 0 obj<>stream +挸0mڡKܽ[=tμ<ÐzoqX踙ED5͋ s ;|{n|Y{nB-=+RY GpP@\uʠB}%T"}t6#4 A &*~`=y{C˥07z7t :f7N}Tk]7ࠬPtrY'o|4zP.Ƃ'"¨g/UB`*q(J͟$ބu" e_Bh* $ Fc" +B9+y列R=<4D/[Ql0#pi¸XdŬ=v +!kfV3Ֆ|>1ad2of$)ߡ +)9j?#@.?z/rŞA裦>mbeqA464k' +]6 @af:C!bS_o'xAX7遙ڍYfJTwA~WW>n/.b.DdEnn>mx5GTTJx7hlVPع*c=꾅`*Q\SqOU]Fu[e،$U4 YڪoaA(;gR4C)Ɋlot*`Tb )زcu,ϒKR%҅rƤ)| +endstream endobj 3536 0 obj<> endobj 3537 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3538 0 obj<>stream +ڊ;U' +^/d'7c[<.?!ͥ|ڷYb@g؏%'4ϼ-Ks0I84i#E#EHu)QYȔ3B#vf7 +B{YLhܕ19W-f%6>r\Y:tNPITo fN :53 ڈ]@g[6I3Ci =~e@ }1 ܨw3hg:^ 5k:WPzb9H̛ pL^#1"m奺.HwhWNgU!C\b%6chV{c"a퓋+t|4%2 ] BtBqU,"ѡU\4}Qi_~=c[֚>BD]Ѡp=8ԓpqS SF(G4KQ۔R=Bx #F%HߣOm?߉BGMS ٍNRRzC&1dU`Ry"C Oiг.=s2Aa8=G foml}Y{v٠.Yޓ!P+}65G JWd6 skA s`p^͖G,j+,L1^+TGtN>7:v@ur_Eod,c P!a-٥KPj)ɭsIFMli锸 c@Mn(Ve'I4ƅq5s+p wuMJGTtvLa)Z=@RZkAbmU>Bhp'0X +Y!1OLF|؉m5;\!w*o!m`ޑ-ۿH͵qz}@1F=y*Vej@m& +endstream endobj 3539 0 obj<> endobj 3540 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3541 0 obj<>stream +16F3R8!>ƒQ^AȦbuL v ԁtPpS~x ˫A(U)me}\mٕm[033:4BM/w [=|4Gvjna->6T i"~>_SE@^te j^ Uվa~> gPY ԩޓl BlפwnújgmC/X5og!{ ,%-+ +5>D[o/tR9< 54YzbnfO4p X0 BWv?J?#b@@30Px,gpLloſ6m!3`$NxPi1 2EUnkDOϘ`n l|ohRӾYj)ł_ T5$!꽹oz=STRǭfRٯ3dIUEK73b>ϓMnnO +2|YPv|[!"4䒉 S\oؼ=F[FѤv(ꢁ9Lbz"#NS45O!>W7;"Y Y`p!k/2F0=M>3uF/mbՑ\> endobj 3543 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3544 0 obj<>stream +}z!D(0(Ox'MRTD2o3zRO#щv-HEI5J!sn&).*nYp߳B(ު@V=hD/ +qĔ|IS:PS^eԮ+^ ufۏ,񞏵cayEh"Jkt$-v䝟=DF0N NE\ dYn~Ka +Yԣq@P|M1[v폒tqfWf2[(_bX1ih$Ytф;ܥʲ /ᘭ~i{62/ķˤ\|D#Bml]L x/bؒe<@z+s7`3`:9RR̀}-lbB7'X|'1ULā~eqVCǩR&(hiU"9}E881Sq!K;[߭M $yLS .hٌi%erHv3tu +I.t64 绯4i#D]RrG;`ͺvd0616g-9k]X`2tc¡t?Erq"!4t|ea&pqWwFW0ڬ7I'c<ڱ!0iɿf!rVߚ(SL"9 IMyb`[~XEX2Am뭸 >,Db-[!,3%`cfrqjPxZ;%3 / {&jRG 0 +endstream endobj 3545 0 obj<> endobj 3546 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3547 0 obj<>stream + {Ugc\/GLͷ*iT:&eu^47.7R𛨗_/r,~h -Li",)}u0̅\|Bض%ם R E4*j2@6y16B`F 5VC;:lchz[;{`5x cX; +"N=R;|Z$텦31!–񰵙`Lw_^XML798_{y@[9G!W^(r+Tp.kćU𻥯EH m( -\; qDdz-OwK+jr|ʡ)3c% C]oJzZd.%ZlH0&,*Aڼmz +@zEy>k<#1Ϭy%:A`D3%X`Y9;ˤ+ A3}d7c ~;f^^OU+ވf-1E: 37޾,$/x.4ʃ&& +(QzU20˵sbCM 晀Õ+,gk!JS !ٷ )VXw]*ֽ{2Nl<eֱ&qM';>)@|G +endstream endobj 3548 0 obj<> endobj 3549 0 obj<> endobj 3550 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3551 0 obj<>stream +(*:=K-ڟ!wHX02߼Iz89X2`ܠD.O)UшL[ n$'婗qtsgsō]7c-Ysߥ,GSn5^S*Uy&wb>CSI:z~YW!3eRIqܪNҷ(/AZZրPC: ,P2 $ErQsPdI{?4G4~')pBS?J4GX<ǎⲐް +ps@MS:!&UPU漣> !Osv[` T@]Wd^"aA"ߌzjܫ]:!| Qcշ6(񰋉=#J/4[QZJ(㌈!Xjkf<&*+ TȈȈL'mR(-OC` +<$-'q +oa:&l]т$N;V<{΍⋽ܻ~j+yV[.sfytmˡ#C[{zǼx,lL:d'K.]Rsސ"A,X +{ho'x>CA?u,9Պ%x3^z $9xj*Y:0)(HϏT/Ր|͞4Ss)h Ϧ,߀P^:aXE +i'+,mN a.b8N6t@س$Ӎ͖tMh3_mߨ!ʁ!缫%OA}RO!-j \7ñG߮zwL",bQNwk$jieC;Yn`B;KXa8xhVVWgG9#ϰdLC@;w!SaEog.tDn(&.A۝Jkt9gpi릲ۈ%6.#> endobj 3553 0 obj<> endobj 3554 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3555 0 obj<>stream +D_Bެ;&O?=:+|.{*(ܘ_A7#+9a3=mxRx啔Ë岷9jKo.rצ<":TTHwNjVJC$h9"yGdʣWI3{}X:>Mj^W.{c%1e;aQ9SW[b&)$I8; k=I熑[y94I{p- h&PnZZ])m;lf=!$u\pPP]k3e3KդТ&qU+o>8m뾔g\⚛29[Qq:Lٟ&9*<;m^fV2 ( zpkK4$[- + A>^ar)RXjžJ={ӈA+|\^p8;ኃN2sԐ\T "7ܞ1, +β@h5/%<ԺVՋ {胯;\fv}/WdH̘_͚3Ĭc4)EK7p ,45$uXv,b{;XC.( D' FAI4P}ti~mB:Zhb٨Fi|Iߥh5YڞX}^{Ag2kncVO!y6w6r&iQOdKqU!/cyjސC% 緓= ?3kA&+;{4]ϣ4M28Sp_E>,΢m<21r}K#t]K +ʺm +\zwdEP_Eo< !r4|A5\R~;u}ng~Ү?b].yiSېFT7~u"+o'mیk$3g J2O9YpX>y]kflٿ!IC2R)E0,sӹ +,l.n63RCs`DQ +endstream endobj 3556 0 obj<> endobj 3557 0 obj<> endobj 3558 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3559 0 obj<>stream + ѯQyg*+?LRQ)q$8ڑT0/`{xy/qmpxH/ܛ?gVN +}ʏ2^Ju=bUa ZFsl$ZXc _:]^djāw>8SSJz:aa&dG9.*c/&G{{vx/s/!B,UK~R<huЙ^ Akk^z=FbCv8f7z]$c0S{,[bD|}(ǜ58w魡ɰzZPÂP`4 QLij*=i(9DjMFp10 Sg{0F`kcsYK^^0;m|Wep;ELie m $HV{L\E{є;bhxp|),@w!;aY]f ϯM'@)|g'Og#%12Or)EMӷ:P+M>㌇Gwx~"-n;ɴc@s9W~-zVS/ibZXk~0h>*=%6>B~)^Ӳ4u[v +rfSFB($ŪAVl'{Lː˛#^3Y`*|"L!m%Et5QZNJpje3-.>XK\gtY$p{[ >"̰J>K1U4.ސ?oB|7`}݋ +endstream endobj 3560 0 obj<> endobj 3561 0 obj<> endobj 3562 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3563 0 obj<>stream +3i*(w3+N+=A^DsEd۶AU!vݢ}])P0KYߩWS] C +ﵟ:<ڲM-,3Ŷ`7+-.+b%lkn_~y¤D尗\9.qqhͪ- dg- бH#V"z. 'g5dVR0RS\>@o1\R軄L #wTjz9ނ<2xe"{T~F3УmBp7jzᏆ\<,aN@ Xc }g\J~uI(8&m߭[ǁ,g+>ٌz9ڢ%5vP(B usI=PHWA\7BQYaV?!2ȓֱfDg֮-/ݿG4LJ~> G>.de{+/ 2:M,n Eڻ.WsSUQJ;&0VUBCb8K +8@g=J?|[+9\qVDB;>Э.3lk^#znPN԰9C8jL@,<*GcT6Ku\&tG-p 0qϽ.l -N ("4 $n,&=ށ% jTњŜeT@xGKIURǵ5=SxWO+ԯ־x$7Ns2?@XH]aGN|m,h;!~{>O]{PgɖkD-s#GK}|@بs4|‰ `kNqet4nyLF X`p4>t*kBH2B~?54׀E3{`* 4z/Y AF_^55~Z-~_5Q2_yŅw4)nno_uSDnNGЗ{> Pf2i" +endstream endobj 3564 0 obj<> endobj 3565 0 obj<> endobj 3566 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3567 0 obj<>stream +2&xm\^`AeDgbtuC0֡B +ǵ2#j<{$m]T+b3leV*# UEZZNdwhjEc"‘eU5s#9$Zn[1ŠuK$X,V7I\f*tzbAsϥBF&lNKYd/;*3<D^E2nQuX*昰~f)gUGϪPJ!Vz? hJ?y~BS필ӖԳ0z!\qYs9!f3x[$!0T9@tq(t6m %qo?mvJ}thJn|{9A[_&?fl,w SJ$&f`:QGɼDb>7@ ++ +Bz+<TԎiUG^Yw7 Q9S'{$=s +陫I7QcU [)NKYU:J)T402kFr 7~ LnzNsY^>/f0ZIj.<:hf̵1MG cdl鲕*P*öIN l=+q>ck~_a^W2Gn5vW'$4rX}/Y`0F$B{v5yn@Xk37Nާ"l x{AL-*WnGD@ޝA'Jx89[t4M| Oop}FrYb_~2g! [Nߡ_E궊ЊK`MV?9{I c}M,HXb4u펷0qZi/8xgN/e +#ٓ/kϴ +endstream endobj 3568 0 obj<> endobj 3569 0 obj<> endobj 3570 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3571 0 obj<>stream +}}}} 7dS=rbLX?l̜lF&e} JW7- iBfqTIۍ @˶^R<fM+ݢ`ElYAv2m hPiGg* +v#46e8C6"Jwnv_H&I:UBN.:ޏ&R/2Q*"$kzky@"-r`HNDӈl!߾!\ dSYG5XVIu oHBo.31 ] "ƕn,:0d{а݄>x)inMA,cp5xOtv6V۽8˧/& p7z5$lEJI2f|FH$+[EN8>dgc>ꮁlǍCԮjr +8FcfꏽDpT綟Pzg;ܘ{ۀ/`gYX!Hg_N ` }Kf|P" K]Fxd%̇%fbl1A=fF`& CU5R;ԥAgbĸ>^ iOpXxGn*rsϵCe +bc0Ds#"I*wfzܸB g-N'WmWR^%ںcP3a; ;Xv:+B.P0XE^n-(ΙvK,+kyKEF[ $,݇Q O@A魍ӃF=ײ2XKh 쥳KҧԴq4[B *(lЇgLW+ +endstream endobj 3572 0 obj<> endobj 3573 0 obj<> endobj 3574 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3575 0 obj<>stream + +0yv^?}C32kV]7_ z0~a1*H$N2"c2RU*} df%aV|$rݒ,9X-̤8FTn1ŽǁLa=2w3Wf@ fKtV6I\6:?0%gw>W'u-QZwY6a-URrgWiܳa~Nrmtٰ:z}ֳӒfM2 ǝ[ yi5h /]ztUU?P\_?=cb7؃dN LSD :fޒH TW=tСҶ #O/5_ӗiqzxPJx(qa%x+ oێ7)Bj +OxC^/(QK懸Gy3N |z +cRmn] +yM{[0}9!߾H!/V.,! G+_uZe?UALBqs[#$\GOazS^?yi5@%67r++Yc^1bԲsIK>lHAET/#{&'oϜ 7zmElGE׮ņ'w)u,]>JWYh{? ȗLȦ\T L#n +ATsg cc+W„kwVZ +f  rASm F^I?! Ieݡ`@Xwfw҉V3c]{FPe_ xQ?vw}D罁e{F'WW#bc)7R<}}n| +:!ӵNNOu7sJ` 8 +endstream endobj 3576 0 obj<> endobj 3577 0 obj<> endobj 3578 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3579 0 obj<>stream +)[ ۫218׋?6nT~PZfR'JBsɹ 3,̽xkD2`0` F9`A\\i N@meq$lyw&(|i#^?lgi8B5ꐶo8e=l5yǜ9>EtvlV4d{X23O1Źg7Z9ԥ{[ ލF,Ni6喭l!nչ +:A侁8t_,:qOCaMr &L"1܆nNGj.GMGyԒI"4}PNc~PC\::56=KRyX"op -TnPq|Gh?$ /d +-"Mհ~z~) +=~ ;4갩^h&]"4ܳ +iqXXByGBG`yaq 챐)1`C|+Aujs>ڀkiO_EʵN2|iyF4MMrZ_1^\iNd4oH츜0#LYaxGM `FNkP/{} AG%> endobj 3581 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3582 0 obj<>stream +)RWUpܖF$W.8m!Il?ڣAf枡4.Yy=KcVBrשHۣfk;So3`Q`r[m4Uz=G*ߵ'7 ,ٻ U #-@1olpWlEBa(t@@8ۯb̯LmgBMm^0zHqOZF}}}$~"9AA"b +=Vp r7Z•O҈yiЙd{!\AA?(/g؅]PF|-AN OF˘lR:;%YR57x!sTZj"0M +endstream endobj 3583 0 obj<> endobj 3584 0 obj<> endobj 3585 0 obj<> endobj 3586 0 obj<> endobj 3587 0 obj<> endobj 3588 0 obj<> endobj 3589 0 obj<> endobj 3590 0 obj<> endobj 3591 0 obj<> endobj 3592 0 obj<> endobj 3593 0 obj<> endobj 3594 0 obj<> endobj 3595 0 obj<> endobj 3596 0 obj<> endobj 3597 0 obj<> endobj 3598 0 obj<> endobj 3599 0 obj<> endobj 3600 0 obj<> endobj 3601 0 obj<> endobj 3602 0 obj<> endobj 3603 0 obj<> endobj 3604 0 obj<> endobj 3605 0 obj<> endobj 3606 0 obj<> endobj 3607 0 obj<> endobj 3608 0 obj<> endobj 3609 0 obj<> endobj 3610 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3611 0 obj<>stream +2\mm=fj7c <$S8b|KQp?F'&27#"l/MLYߗaqG`-uq< ߡ IN +>I͋v5bhC2A(Ae lHr"), Bws-o5Zś $#'Ȗ/^RFUrĹj(A|EXs_PRGK>![mF(iUaZb7>Y.ڦkãfW&dHf4M0l' ӗNV׻38SXw y}.&|ǎxPc[>ĄjvAeYW"CZy:^+*1lhOK0(&WqQ t1J.g!  !l{DdhRl\r"ԑ ǔ"X4@+:ҮX| +κdrI+=*NqsJ)T5yȭWo~a #jWWWɁfA6<\Q]P<%"r20:8 x^LњdCbcl]Uu C۫窰0i_ u]WM|Q){=G!(T\[kH$&Kt|.;W4,;paK{8Su6qt]Q T:03zgSOS;b2/Mk;*w<,#z)ag4dmyzEhƃ۶T;Oi]Z' |u+,aT7=ͤz}jIJ3sTLM7[D 4_/0è<,`Z;-!G!&ɩQ5A 2O& +h.^:CuqaIKKd}h:N vI lN氞؏ p!r[!{5Wƨ4 H@luF>Ae~u[Ogalz-bΨCE(&{* 9$&q(G|$FU &^~oN1 3M+m߳^I[}Uun)#+%@[NQ2v4|Y3~x +oOBŝ^}HMUqXGsu |G BPhoj` +J<ejOe3-"?{.Vo]N* L\AUx:f+'vvK,cAqz=,N*Vobr&wif i\OT`JvE'҈~mY<Ǧh Yt:_N\ø$g~wџ\dN0[:|UJsERq Ox9u9j00طZ+D?ph_3iL/Ѕ;PMv=$RE0cj1[aIT<1zHPfQ6Nz6P+I~Yrs7q2|R32ז//C+M=J=vx5y +/h٬+ULge?bDt7$gfs&{jiX +3xͰ{ s2Kvl/PJ2QIx۠qAqcs|/F> +_ fuNAuɝhӣjxdM$¤jk81}^ZzqM w3>emb4Pæ&i5,fm:k&^EǴ-'pMIgBvV1-~®++n*`ht>W1 +G4m#Ȫ'v-Ѕ""c~59+a>H(_(^Zr(C7`;aJ+OF$O Pss m}C 6b6sEuaT>;lzjW| (<H8 4[*mD(Ĉ8ytO^\8gyygBǝz[6>3x,ya}#yǣh|'c0(R857\ڍ+È^kT]]{ޟLN + /փ_?\nW5 աQ-|d]1"Giﲌt.cI&h(ʄ眘` yM;2<P\3r=#х I-$/Ruz0:[EaӸǷv\#^"5+~@^1& j Cc[#ѓRF ?Wٶas]Kyz_'k7:q1vVareq :^s}H:1hì</#_xQfs${7(bfȖAa#dgm&D7*ihG5qd+'ZGf#7eFw{3r~GWFFd@S'<8$ kݪ)ShY<x޾Jn;xj`{ Ȩ,jÒt|_}Ƕq5~`?ƭ1&k0"ҕSQ| (hƮ}q+avGd2e8{8PN]%%Uɉ7: %Ng6jTAmr؍)ߡ^q2?BAMX(1MxE?SŐ9Xˎ*M͏&ے9A(rnR_2-( U)>inU^i#߰#/VP'ϮV!dWd&9= ޿yeb%$VV3"+(PSnt֔HcixNAJT89%oYaQ o.WIB9SDn,r6:ZſA q\~Lj巉3#- +oj@ѤuF7tؑfkp*nU0:[z_ 7hEOd٬{#:J0 raYHMN-bI;`xX5d3_ʶdz_#,jcmkluODŽD +5YX8U<12mBYm2J%s${R}K +>^I]ʎQPhon̏> endobj 3613 0 obj<> endobj 3614 0 obj<> endobj 3615 0 obj<> endobj 3616 0 obj<> endobj 3617 0 obj<> endobj 3618 0 obj<> endobj 3619 0 obj<> endobj 3620 0 obj<> endobj 3621 0 obj<> endobj 3622 0 obj<> endobj 3623 0 obj<> endobj 3624 0 obj<> endobj 3625 0 obj<> endobj 3626 0 obj<> endobj 3627 0 obj<> endobj 3628 0 obj<> endobj 3629 0 obj<> endobj 3630 0 obj<> endobj 3631 0 obj<> endobj 3632 0 obj<> endobj 3633 0 obj<> endobj 3634 0 obj<> endobj 3635 0 obj<> endobj 3636 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3637 0 obj<>stream +}2xE}hɧx e*kſfIUi@T6) 4eAd-;[y[n;GXwD& Pl MI^J+̈́Q[4\⮽Tje[v>LQkB3IKQ-$-ǃ):a/!"TV(R Igf%P,RBgo(>Vuun;m} 'M Ӑ 'G^&[c۠M +3bR~6(CCuU BU)DU}#8d'B6M3WmVQ&YTT'ܦf )G \&%w$c%bbc6zu.j1^$aRO#/u^@ t4x,r_Ԉ9ҬU~}0FRm#jvW8Oc l+4}ep4 "my3 U1? bħ1#uH0)n6P /snmĉL67m%V9. ^UD> B_;'Q}[%PH(jUod)Cc J"pʦΙ7lzo?N 'hi'~G0=Ҥ, ?#r:\וwi@se鰣u9 `P?E% 5X[Uyk.hpj4鵊[j̆[7=O|և:l +Qw ǁ@xA&O:@ |2bg<^c k!{.8IR9p8C%P"6X%E$z}Q7ϼM+(H'Mg/h}#Uw3cy=qbX#@PLK؜B#"TWBҞwWGW gc!(:iC@xdǀv*Af96?!bι_?cM"enYRZm`g4#agVuJmAB2Ad,nh/8{c`u8`8z8 +w/o'bѡ6u͞f,2i9yr/4e-zpRF,osP6_CՋՆ.t^*hEwv\[5Aq57%-m)ق@]kx!SQԇd{bh~'d?P 5'6o'^0WP`xZ +2Wt SkyθOFV ( ι#[sƕ.tptPEfCQ^W2Bϐl fp +ut}"q z( 6+ņ + h_q.>hN\uloSWxԕiZLKRww5gl\YPWِc"t%dJ8j+r/ =_xE^/Bx-Ҳ{v v@q-/=QwiCb.xOC\XFpl2(gtñg_ܓ}xo;"DxmOͦ1ŃA?X9p Uby?? s4u4NjԟGFٚ<@lvx6voZ^l*_@HjX{IݽN߃ًXq 0C]ٞ%4m:~Meeyso;v)_B3l*=hU '%v8`j %&^E6|}<_,20l2&ƭeDQo9bӴx35%XzZZH8_LQbUp ysuW{O:*ZK{"e-VrD][^ m*Dr7ETa>Ջ8+Q0kyJ&hܑ?+,B*nmmka͔vmL~>}>,6P/vѬ'*7[1etD`yEh#2YFKڂsh{c<7Sugԗp+'/YHd+w,vSti &yUg}d+YºTϯ_L~o9K,Hh^+ؼ=P{yR +vQzCSCjX6 +endstream endobj 3638 0 obj<> endobj 3639 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3640 0 obj<>stream +=3C4QbHp%Y/Aڂ&'J3H(SMHw][i:Y +{R]7|2cGXĉL:(lY~51 l. 5952<y(D7a!׶ܹom)Cg Pc 36*Ѩg1M~28.__z)rvuksl}оj7.Jٝ%xrnߒKLKOo6>0/cx!M NU`Uy݅誜\ZiĸK/TAtqpuv>z-អFIw~'-w(bLpp3;/=|5uX'n!Fv Qxxdd+&Wz <?k'.ϿzGg ,n~=Ѩ4o +endstream endobj 3641 0 obj<> endobj 3642 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3643 0 obj<>stream +|os/D!"ˆ /L{w"y8u)w9r Qesigsxjqlϣz$b,d(.UEyh;48gxn{̎ rS%,o8uMTTm 04ӧ—H0>nXH_Ҝ}Q+lO .)'I]Bo[C]̹Dv]gtHJ 2]HnHy)L^OTl RqpK?6=? Ƨv>2d1W)ߝUViROx0dfcr$ޣӳs`NTxrYM&i̥)V5=wvO[/=֝F.(Q©nS)'4 +4ߢIfFX%^DhK5ѰֽugHz1KU}{;VT8RNIWb3]x&R,kTeRњ51{y+"Oh` +@m>-H]9cx +0n/Lձ͟;$F.duh|Nw6 pK_jKk܂%t +#}>"\((?Vk Җ9$qf衷 1XQbm-:u-4UIV}Uqx/1Dډ&LD"9Fp)_G`d&}/JviavJ'v'3tی}av%UmL쎉OXr(ZL6Uŕ@( ӋS];qM88 SiLZ +endstream endobj 3644 0 obj<> endobj 3645 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3646 0 obj<>stream +_5$E}Ֆ&B@Mrs\Z|EUlO*&'"r+ C}C2Ҩ5/D߅w=c2$fμ8sQ|<W,zK vĉY˩yH7R%>L!un#2M@FxM8F~QjgTs 2h8;zb*rR\Ŗ~SEyX fϿSr"0j.f5h^$8`,劤F¯B"aQaK-#4[rxmI:ꩺI魏m +xB8${:a.jb`˟.}U[Ll  (i9/H]JgyCx`%Kəȣ3׿ύ;@N~C/EO +12uZq"á+1,}X7D"q܏d}ѷ̤5pvGå֊3 ڃ ViQDp$>u%"7qz.7hЂvbu.*:LV@Vč:W^H6U%Ȭm*ͩ$']^_&J.3T}r .ͤJHM(6s!ug8>՞WPޣ'wipd vS*x ԼΔ4s)5@+©_k; +endstream endobj 3647 0 obj<> endobj 3648 0 obj<> endobj 3649 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3650 0 obj<>stream +@6;>[B\q2BzF#o ;ʐ24Չm.UwHYi6[J +f`tܯg>s3F@i&\8u/g,B_p=sPO0Y*W +Xv;!}r!<rSB +V?1s'}HIJrp*; 0>i}e+>xAbul?k7RDPGCʍM }mH!(p : X"52B]e#V.EXif;nn͓ G\O" x"\TE.[-F˦vA(??lěC|kvHB)ˮߦ'48b]]9Ŭ&P}JTހZxy4I6 Ֆ_g)jI?-5dŬ(G9S' ˅eM0;~svv.237[k#VIW 󌹥:| { +Corat]ظ[?ؘ(@W=P\З4w$z}) zՈz> K rqxS۩t2,63.0`@v&l@|8D19h?yoFUqGdxxӕC,# + +`=S3-5Cq~D_qKczz\ ,"`xq*w"&3ɍ_j}KIƗXs)%"ĺ\. u7Qj_ b% +:D[Q]xp t'Ah\i-ULTd9x$ M#nCpCsS&)_2֤(oڴ~Dne-O0eÇvÃW0,DRӌqTJuHyxaw5O1*n/-tO(;K֚{چ޿ȱ/,nV*!0`l+ &˸MDscd^U2!q46ģ-g-;EFx5d⒐n%<2 +endstream endobj 3651 0 obj<> endobj 3652 0 obj<> endobj 3653 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3654 0 obj<>stream +4 Į}fᛍh,!vJfN;DȊi4les%g>ɜCR+{=`:1)ȃ{T!^+ 7ZD[oD{wI¬lV)#h:D5 tO>$& vGtLyb%ߟoWi5>ݳPƽRYWNZA&q SavW1|cLe<281k; $~T+ed7pM U)4ai{kȖ2$$ ك'$ +hcxxV)" B1^f<_R7~!T̏}geJۍIJ5%<]d?|VZ|^cl5kb7!;4if|y3ab](Z?3uQ|x뱍[c;qí8@w8 +6(Wkx9oeN8E*@9.8m5PZN}\ڣd-EKpE9Q$]nC]џt2nJ'& Iq*}Ro+Ɋ};1G@ErCtRB+@}K/\Aټ˸YOO#@I.}{8s"VGg⣊t2Vt w4>]4-5{ 4;mX ;(lKvY.6tzs1D"x4L٘ū>&d8saQYgݩ)mlR*-ۂ@B +AJ9mU]h 15-U +3NƄPФ^W +i2 gxAB$Y48: bp{3\@n"qV<3ODMἠchhQ]@{}d1:k:_j w,9@.x`uTK@Jtyj-Q|px +-Ԩ>,e_Se:OgmV.qRڌn +èyxCNoׅ"%53@X~T32`?a)k*eY🊐+:CІ:m23j[׃=!S,nJCa+nryK RwlAxCOLa4 IJ\3׈F +endstream endobj 3655 0 obj<> endobj 3656 0 obj<> endobj 3657 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3658 0 obj<>stream +3y eRR&UMEWP/4!=WBI_x̮2QEh&!cV(Ƭk+_sĸ:)cǗ,XD;Q995Ow*uPHY,. Y ;]J/z`]Vs!k*~p 9a/lj"IVJrrEjFcqg_ngR!?lk$Oع[m&pn%e.`SʫC*nת@#u›7Rѝ)J >o5&ZOm*56ba*0X9Q%P]tfAo4h?Gq^^[7lVq (o[ՇH7> U)3)J䞤^λe,Q:>-*+ +{܌ꠁU37t Cj&U`S]AXo]a[0>_%kAVNdq3z_˨ҧ9ZwAQ7k$S "C4kTJrd\㞠-]Dz:t8[$eT Qq2pS/3kL)R}UVٍiְz0'IbZ1jnL(ގ6ɑ.16O' W&|MǖgWIϊB`Cy 9;j'~ȟ$/*ˆ7j~;_3nʔp0QS C2i,DWgflZY-p4}6jWiMps7%v@TYzRm]+|U7 -OܼH:Bt26~LQ=2I`諄QePՀF`͸V&7ql Iָl&mnTŦgıJkg=>`NԗNBuL哠ŽGjǚk65vO1)g{"lFuCj꬛^ Ŏ08H8$ +endstream endobj 3659 0 obj<> endobj 3660 0 obj<> endobj 3661 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3662 0 obj<>stream + /2Mvה:zi +(â=aq9ldѓԓvOÐpֺHrzv'/V>&Lム~s4tݽXRÞQۤ7K+u))w{$^I3U׍zlt u˝f$y#^: +Кi=0 BNU1dJ >U5nLfP0O9 -4ևL/]ސmCQ ktYݑE&5L?JhKW+$@9߳ف+gY.N_HךTg`DY0u=+bCwi*#Qԓ2fT^HNj<0>>ngXSgl4{ae|w/Gt?UwXYgQȽgmZC/?܉ߟɥbb9*9 @#Me;燖!.Cq!ܵ9}`CK&TY6ͭP&>ِ;לQO&sJ *e9T7m +fbjpqhWZ$?ўQ3kWb53:y./[8/u[7mnN9%zQm)ȄI'uxc7䶽@Kg-O~j%O2S)NSP{R>iݟKu__U+.Sev +tVaz;&$z1hG%r\\ιY,TTɿbm+#mSi;4i6ݲ/u!tC@woL9ΎVl"mk`p XEqjk&ÒJ~~A+#M!G'9j> endobj 3664 0 obj<> endobj 3665 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3666 0 obj<>stream +a/lߍڹ>fO`G?`'q:5^FR&[IJ/Ļb- #WQ[#}ȃr2]L Qzꎔk4/\nPlnأowє`QJij13/,ub%0]= :^ߎl2zC0÷c!u{p!Cn.U5dV[ISr6P{3*ZnU\\ʼnBv%D[ +G . tA!= X~ +;BQB|h>6BuSP;?vmFru9S_,W"1S[Q/ + ɟhLBx*+SEݚ0w/XNKOL#uL,8 7L|HSO؆EȄ f> endobj 3668 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3669 0 obj<>stream +blO^e'Pӈ!tJ䩛T6*k<LvmrwF(;7lØ%&vH? 7A%|+pĄ nww()%uslI~#`SnY,G=]2~;(iY`mZgcf! Cւ`7"+ se1SzfRES?(w *-MOg%{@ z1Slhg{^戳SgT7/Rm,_z6" U#o^͑Y, >Ǔ"|>EX4.z1ܞu-{tꆐ7i;;メX [Wcڬi-XYzPk*NymԢ^k#s0( 6\(X†{)E}W/3.C +=E9 vX6<Rև +lpK@R~H>rZ(zs1G 10Wzlvs/M es9gt Uٙg#Q"a^ ]#˳hHt Ri5ɔc|G8 JN +endstream endobj 3670 0 obj<> endobj 3671 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3672 0 obj<>stream +WmO$TgcU /w&ҧi/ӛ3 +Iߢ"͒\S@,4֓Č?Q!|Nszxj'wS컬;It:@<߭_ wz* 5=wcbWA_jL<`J)MRS{ٔڈ. +r9 ՠYɼӻ1&wiЛ's5"ׄTti\] +D ZR {2=y%I'R1ݬ![V87ټ0FVXTwm#9$- U3r씴MTtJ /' z|9}yLFkBlN'ʲDf'9*s +`aZŢ%gg6{5,$){ tߋ u0,!-ʇfU`Z6J.,fz!ym7Adcӻ9':ȫr OJf+OYlYls }bKʷ4PO6Ѱ.IL\MaB՟#s'2"L6"l4 be +ykDU9Fj`2lzx*ӁPqЈZ󟤓VrF*,A.t 2v̠&Mz;B.`J*c`蛓zk܀ +endstream endobj 3673 0 obj<> endobj 3674 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3675 0 obj<>stream +CXX'k\ +ґKebeޞX4%.HlY\OL/4J8MޒZM#CosJͦ3+PM갠y ^bg0غ}i7(-3Upjx8\$1v5dJ5Zvuwh7E5'FO7 af2 HY華:몆$Lte؂>e4+DE.yVp7q3>\´JψLw loUJLl9#? fFmSTa>.GfSOjw7M4߫|VTUȟS n_6n&Q,+}?<<<6hټK u &:M`\b[fM0CsNiLY [tPcv [XoSmW{`c! Q'ȈRPأ)\fE} ob8E@Yy;y = m M# i`lTY>~ߖx=XD)9>3=CQRnhz :Taj<]w/g ,mg\>21$h[Qq{ƕYr8(~%A$I~9tIaii1'#z٭Sp>[/[֡~Ep$cJgX\F`pT'6:3ME+ ıZꊨ8*}$ޔ} +_'nU:h: dshӏ+N3Lښ߱fg|lHa^Y[C;C(aտ+C, +endstream endobj 3676 0 obj<> endobj 3677 0 obj<> endobj 3678 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3679 0 obj<>stream +:ADH?`gu_3rWe%B[.̰D8iT‹@w6%FΘ,>ءyBʉ̒;'GSKշ u+R~n9L\r+NOKʍXPL$\BYb|:/Vt,(?! NQ㔞\G^x s5}C˝b~\β(2;zҧ!u-\&'2{oW)ӾBAY v I<QO1<}Ncnu2VdZ(1HGJYV89]4jV^ݮz?/({~9ovrkĦxߴM왼lڂLXe7TQs+?082t2Bz8QRL3w+=Nؘ6;YF Oi ˖1jc{h<4(JZBhQSx + Qf'OQ7Ps(^.\]rs_bB1. '8ZvտBbah90 Z kG0+-gJF +endstream endobj 3680 0 obj<> endobj 3681 0 obj<> endobj 3682 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3683 0 obj<>stream +{w.p wB!;"EO$벼Qrˣ(kZ0)i?Ly^b`_j<*q#xJe8}@Zv9L!(BÏ ؠhWk1S/6c'[Z@4b +цo`rXG34h=DǬoORm}WETnb, Tn)s==%W +5`ӊ]AD۾$-.w?4!ͩt +?&%܅'և뿶/>ώw.T !Jzu1iUӽe;+*) .*/ưI3\ut@# EuD,a +q:B5kDCCuTi*we1JÈέV.;gJB YCXf<y??B;>*<%u,mW -ĀNơFY#k`oM"5_ȯ |n"!QмlH4CGbwUF_;ѓBoۦ$ѝA`эq^*5l"m Urc4tV45?3" ӎRU<5O+o% Э XY +k|o-yx4Fl#r`.21%zJiN ?!l%:_5f֛ZR(ģ.e_ӏx(h?# @%()\'c%Z?2>ѫ&S&K\L"Hfo-8gq]Vzf ӊ 7Y:cp%)<%ۤ yt+%' +,v 0s@c j*LٻD4#=|Qg(v&_W(_,e(5;xC )?/7c1j.gXl蛒mXO)#%,F}`r#C=5 J^'1r92T>-Ftjԩ#% +endstream endobj 3684 0 obj<> endobj 3685 0 obj<> endobj 3686 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3687 0 obj<>stream + _xK7z(17uBjحa,i$Jqp!nuq`B-QQ J:zq ꎲRr܍pWNX.{눬4т+Dn tdStr*Mn,n!?ti1ʹXGcpNaBF6z_lC `@ +jL hIˑ{J,ʵd; Wڕ!A$% +ikPy h1CQt<Ѿ^RvKp;IŚQOz\ Jv7a\k p&*(IqeB|246֪$#ukqJ{4DsɨήjF@8X=VOFL^5TImSEdّ;e dGlP}$q@vdy8fqiPNATLs8$'L +#R^)#ic(кۻ0pӿ]>؛ "zX A OTmJ2 +endstream endobj 3688 0 obj<> endobj 3689 0 obj<> endobj 3690 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3691 0 obj<>stream +xݔq<,]mN)81E[[b} Z,"], ]ZOU-@` hz + &=XATyc_EdASఀbiq +,X>䵬#pƴ> ,|*e%,{bPqHwvK'+k\O|:Vۢ0Eg*Eߵ +祉zAO<^yBE*j"$$`M+ي'8|R1}Idݼ0Sbx#2*N{E{" l |E$ЌK,,5IFƆĻT9)juR'ܠ嘊\vJڑ;VeQ>6+U]K7X6>Ud{$&ǫKx*NL=Us5Ze @VRbRDXlShowUs/pZm~ RYhiڲ[%HAwړ}K +jz׿1͏c-buH +.m?gC 1Y>wVa{d!ƢNi{KRelog}OsW<;ùHw|?ZVB[0q^AXٞ|Ղ #+۪:wCa%mV{W?rXqm+)k7HvW%3Y{' *Gx2á <فвԋs sQq/kC2n:k tos꣧kஅTƜ@Z[xt R)Sh٬Qpxw8M2>ׇ?Sd5;aw4V9&ذY2(űX iy(A [H롾=ZC +endstream endobj 3692 0 obj<> endobj 3693 0 obj<> endobj 3694 0 obj<> endobj 3695 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3696 0 obj<>stream +Ofk[ʁsu#-Bq[5L\;y ,–dbY3' lt,7Ojw/MEkSBRM +nzuju,#C*02 ^{{q1hiE> _g5Q}Qɥ/̲(0tgƣ8PERfsT0msvUWv5oI$<]Q~uBg`.cn˦,xreL_DAyՔR3AcٛFK1~ET#d\I'j ";]1pQ)Ar6k5m禺kypd;NxӳG/c`Fܴ7牽>'oZ$o:ڃ\1'/e1rI:i&nAW]t_B,>u{寧_EXJ\`fk5ڨ;9;ށ.t~)y@їPL%eHϫ`c+ +;3XXߣ̙-3uI= 5 ahǎsF[Y:[9`U֩al#5VfűV뵿`s'%9`y{'r\s$5sc4).9ܐ0!|JNԝiؤx Pgx4yQ6"ܾlOhwxJEwq IILY-\EYjq7AB 0c7-KX,QoBG7:7)2&<@l6C&\"yrռ8Ɇ"_m(yw_yK3w ѝP;b0'Ab<948mϣ?*TkYnv)r;[ +ލ$&|n: +endstream endobj 3697 0 obj<> endobj 3698 0 obj<> endobj 3699 0 obj<> endobj 3700 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3701 0 obj<>stream +yOxbl_};gYFbB8Lܓ70B(3fٙ&>Y(eRr_{I=Y+8YPAP +5_dO%Io' U >*84__BDT2UmIgwʬYz&e1XL\nW{l(w>ȱd!۲ *.MP.n:ۿ#qawO;>Nj/[)n&f-i9_@OY=#4.l?[!}OtM5 !Ar 5%=pf  YwcZ_tUKM& 4Br9 +PΏ17@7 mFٕT0BxfɌnjF.RsT(ރJL8ntׇ(Ñކiwd2pl&Be)#,z狩„9 +8vO$Vnad^$SC5#vYASEIvtJo UZq-k5YiY" Iς ;_O$6qҏ5{Gn%-^J Am 8z Y aI;U籄)&#ex,sJ]/9~acJ/*vAê6EՎo(آ`@ ^Xb⩞UJHHt? WàxAAPldӣ 7Sɔq$!XC2'm\sbPS$p u5 $7 1}V!!!1j/,e _ LiH+Jqr +endstream endobj 3702 0 obj<> endobj 3703 0 obj<> endobj 3704 0 obj<> endobj 3705 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3706 0 obj<>stream +ppHo\nBY6B9Nv( z2U!#7Ҭu;u H2b1B/hjx UXqW 454iKaQLIJ2a7G>^K`y# bwc;6W5C3WErX]JCT,Fg^ |OVҚDMY2it1YӑT6썫TWP\y(n`Qh 'ѐǝ$(n +g?)?ULv4-R$6|Яg 3OSY"znD/gk f+C4(-U[FA"!ehO{^ $wfpyF==}.`=y#}UU>̷J~l@H: K1JL.=G1$ECB7 #/0gC Nİqݓ9k$+w20'tz)iZ]a4+9 7䏯 T+ˤK +p늏 sl*|qw@d[^U/ ; ݫI? @6p!3ZOřKMbGKđNhY/ɹt UK`u1"m( 3-o<VoVy?'UXLX8% y+++tRa tحgIˣ '/Ud2n$m}t=`;3{LZ:)= `tD^9/bCs8,BS +pF]xHĻp7y3er!uK<5VKsQg|} %/Ş8#@)/&IY)o v*`*ULl$,>T +endstream endobj 3707 0 obj<> endobj 3708 0 obj<> endobj 3709 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3710 0 obj<>stream +Cݐ,IER7eO!-Uuk^xEVms ?EbvXiB U҆ML7egjC/ +Yۢ}>sf'u5 Ex[ZXxO2{gm3TBUMjL.9F&m8ZsLCKp(e)ftLɝֹZ2yTt,wWg@&t thtI]=r*ZJ:j2@Ze,#R#B,dy8nSs% PR\^SLx D"&-RvUP>%Kp4DOɌZIR$+k9Hr\z1֑`֙S&.?=$HJgj͂G2?F%)A':Xw`Z7[Sl0A3ͭခN8|}D쾃,A# y$mQ7+><|$,#\ TaL* sIu{.wqw!Cn+U8WE]OF6+jw D%tq?n}0%r]WFW֠RUiKsXZ/h +ndw_ +wۧ_S 'y|C9t ( Qǡ`kܤMWm<}/$`r$׈&|K1N]Sq{Æq?m;5͖UWTvug4G") WƯ}l+WKFpA~yE޵ןW 45JϥI=ؘhZPKȺ>ݶpv +endstream endobj 3711 0 obj<> endobj 3712 0 obj<> endobj 3713 0 obj<> endobj 3714 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3715 0 obj<>stream +WEަa+J]Y"@ a62[,#̩U6ڤ IAߞY뒪Gg! \ͲX;Xj_뼭[HV(_ gLlqnfA|%)F 5hC5Pf2߅_8^J/f"q[͝A4ɯ1/ySQz|TWq#-0C! \[6b"-qgE2Pz_%|oRJ*q2(Rę?;gkb:y!_,%yTOZp9zWi5\/CN$euu@K4>CZ똚v-"x"FŜ`zBԭJ$`ɼ *Ł\Y" +xn/&m-F zbt9qT^pҪ +tE"xX%֚Og,6$T<lYm0fgN.}6qL݈i3F;ĥz;Ŏ +xru`xѱm6٦׍0.d֞@Yf +bGΊr&fptn"_߻{W=?-k i"›}enyIî>zc}zsؒHY#q;+8XeECo.aòl/*59K8!F +B#̏~HNf DO@w( r.-h =' eFŘ#L}8N= +"I?vfk~̘F> endobj 3717 0 obj<> endobj 3718 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3719 0 obj<>stream +6 PUC$%|7ݕ]e+1+ ߐ)lćlZ:Q4]'dA+N`SOᏓ>ݫ[*K#&'OPVVD]j/XzhAg5jJSa%EAuSϤ5:)/-ղ~^/JB\1uU8oก yEv8)$sAsY]Yʃِs\9ε{t>l*zX Е6PU(#R[r|-0'rԄ9$ڤ îk8+K]zrM ^K 瀿4CD3qa W^HX勻#:I4'K R)c:jwrO5W]2x?N\D}diү6'kI֚9 ;k3{`)ժ:LdY򡎕@7EJ /,P\Z ь1pŎ +Oy(&&+Liu2d׈gQ>P9Om߸RNkW9`g ++y ^, +endstream endobj 3720 0 obj<> endobj 3721 0 obj<> endobj 3722 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3723 0 obj<>stream +m9=dsh9(8CJ/z-le +pYC<$i! #T/ A%&fJoy1J=3Ŕs2/i\vbKNx`]yAakV?-h"`-۝ų)7 5gc M`aZb|(,{@El~C܈Cgr7qCNTN Io?>a@FF{Ei [hp2Md8'=ޖ K@U!R<z_yQ2s`2bz `{j26~:&Z?Rn0`JRO=S젪'{/ Tx!yr7QQ<;e#No3f8/ٿ :av~IoPG~"'VŽR +HІ.3 M!?nOCJ?h۷md I-w15+ۀU h6Q  + ѽ U\KYO;X] M8kNV)`y;| AQz͞ f 3KoU'k kA["陬/agFj!|ANxlxRI0%Ȃ 4|j.Nm:?].{EiK"SiA yPyCTRZyV֫w62^/)1Pq EҏF2Q9$%y?Zl~:K<`8vRnlg-J ZWYGf'O +@ƴB\~@Ԓ_$egޛ!_A>GHjݕRû,"UqXx +O7hU^a[Lľ9V̼0['ˈULJ}ū UWcǪ/.]s +endstream endobj 3724 0 obj<> endobj 3725 0 obj<> endobj 3726 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3727 0 obj<>stream +u Bhm?4)K{0g{%ZU5&IҶ+E>D|Ty1=UͰيwOsY@:Vw񋺇sc˛24=QE:V aVA<]CbI@+gnHaGms^pt] ndtFW'&ɕvKagwP]^%G#7m7L_5t71/rފki1m 4jD0t4EU4{05L`⾀`p7 :/2/,sLblөd=kԝ +Dw PQsqnC +u/;'ǪUPH +endstream endobj 3728 0 obj<> endobj 3729 0 obj<> endobj 3730 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3731 0 obj<>stream +G}w8UM0e5'6T*[-͢-Cv7b!G%1z>az0LmCAЭ=#ydy&$I% xAj4j=8E@Mww u`2MSv'&"G/!$> >_ga]Nm/R] 3IdGUAvXH Af8:pѰ:yX$\M6Ӊ4A`o3MBirAƏìCVDm +*CW@ʋ4ЭSROd}/&(Ť dId58y_ΖW絵W;UtMqmg x>ĜȌʤjk rSRAZՇiuˉsYgmIuU!ro$車RD+qJ|iSuxVOt*x@:pBFG6O 3jo|qQ?ҟ*Xyֳ9g׶BjQl6t9c9˳d iR@-y/"= !erXIkkf4CZ1/IT`߹טg;cŸ¼#Ha@L))r +endstream endobj 3732 0 obj<> endobj 3733 0 obj<> endobj 3734 0 obj<> endobj 3735 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3736 0 obj<>stream +rr{|7+21Qg܁`+OZxL4!4 zu  tվZE)YU `)U=y~h"k[TNف?Zhn_ܓ YxhvVksӪWvd=EG~=ΓfU0Bg=T_i"p֛2CK0b-(3Bnh =ZtVhU3xN߈¯9#r)%=RW/%wL qMA(wSʨgvDR +Teǜ= cWZۨ>DZn&)Ur` +\̽늦C_J̀hwk Hc苡hO'&?ް\Z[/@G4XGRH L3AmC25BFNY + |3 +endstream endobj 3737 0 obj<> endobj 3738 0 obj<> endobj 3739 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3740 0 obj<>stream +iГGtfKlT `TQ4[GLӷ{;aȹe5ӅGFWyMuȄu {\[ [ hGN4[L"b=|>71X!`W}\ѥaaC#W7׆Eq*5Z3*=j_awñ;SMGي/Ĝܕ bZǹӓ7q'|vuWRDZSmF0 l6"uo) ԇH"j +RTew.sxk󬚼vzQag7|:t2FZгJ0T rZ]9Lh.;x$l"/z)xJp'p4ߞ`Jk[n_`;UE^p7 +V3TɊfƾ[b0 G:nEj 5gKq>,Ϫp(HuʪPaI!j5DlIY}E $+´ݔ)&)Jt~pWKw5Rӏ%?~Hv* +Kj&kVQg_8|+p^I|;ud` L(z$era@t1&Ȱ+|rA$D;-Ӛ+ )NX}]!u{IH1b _S0 =y~߂*8Up (̖֚Z+5ʁ9 +]5qZ +G}2 rb ^6=q+*ZU+_jqnӥTlhʳ\}@9 š/| mO(7nRGuXf3'9's3=4_ᚼwP(~rz7DdSN9\܏Gxw9Bu'tgPQKJ<]):j Z)ّ(潀Ijt<&.]헱4ϼ:/lBiPGEsٛ)ѝ&y,ӎv!-ԕ|MP֕'e\oX ^u{.^G yD Y +endstream endobj 3741 0 obj<> endobj 3742 0 obj<> endobj 3743 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3744 0 obj<>stream +i4~ВDwkPxpAՠSd Zjd2YhW:S(;ϑPPQu%,& + ^t*n;Kk{'a*teЎNʹy^X$N&f8{LkzUiꪉA"K'>MHRoZ㶑 +H2o3&$ +/RMS?_^XXe?.ڜmd7YI M_V7;; ڟï?  iR/ȩ)9DeͿzOnZS@4-TE NW—A5J|09MIHz2,J{WH"%ű8JxփxRKwq;r7 +xSJi hxs5YX^ +H5 f֝Pv,,:e,U©3uX9>P̹nP +r$glz^nnKArGnƎ+U& A%c[ӻ]J;Ril4 +[a?8$n+6&BdT<08Fd.T汩mщ8ZB=qzI:{˜t+hǘcFœrmtVa0`- k~|f VmC1VVl?p9V.G#7Jl*n7hVAՂܕ9(dNd5V_d/< "w%Lu2~E l3KȠs %e¯8P7.a+s3c7z瓖z(YJt{!#ƜiJ],s&֪c8xqcH3=M+hN0_2O8_4R +Q0K{2Ƣޑt Ma/Ck.dw Cq +endstream endobj 3745 0 obj<> endobj 3746 0 obj<> endobj 3747 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3748 0 obj<>stream +aҞ 8b4D +SO^ h^;JY jk7qr9}|paۅ5z+JX`RY2'ʁ*,0.'}#Q=q(ndÔJWڐH)ʄ_9l +=&" v]@N1ՁjyU,E77@5X bT:!:XvTxGh_ײ5$'4ćCpBLW3/-T؅w0#'"Q=u#!VCF?2C$`-/DER )mą#hqV3GBNRTڎoWbc;\Հ\ݸF]F-M"}g3&9mLux?`gM!,0M[#6EQru_0|}(fJ/9~r/JTxJwjKZ ;Z;lz!;Gsn/ +v[`,*$V^-W{E0$@!UDUcL樮jcGT{-/ĵ6:ȋؔ0+18?~(Фۢk\Sirǘ aݮEfRTnd2Oё)!)rf--8բع̯{3`t0 e<Իv=Wj5.p#dHbHbABY)ع~B0ď025zKBu0LCg7QRЃeё܄'!muAE5k JG{NfOV$1dٲ[sb֣)/nPOʴN4>EGI $O5{_?m3үg[aq +kd02Nlp7TLZfO2$xO%B +<°M/)' +endstream endobj 3749 0 obj<> endobj 3750 0 obj<> endobj 3751 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3752 0 obj<>stream +R |;\1dN=yO^˩XvE|XO܈G;DenYo+,\d-9ΝRb U7!)QX-Qmjv^||NOj ]-! p;r6Jj+~1;=J~B[vSqoŽhGQ?kR=J" z#f;xYc.~A=)"-mR*'ԙqYr~8M(M0r* 2BK_D2VR!,\‚{z/A?1h<W"{"('יǦ =5F܁U #;m$UG۲8R4\~:,sɩq+b2{[(,ظff%&p^S ̆/Gh~t%v:/̣Vc,RF%@')=s+J{[JmLu}R3;tX̲]R}3i\> +y%ҬFDP$g!z'+!{1f}yex5|/1~ +endstream endobj 3753 0 obj<> endobj 3754 0 obj<> endobj 3755 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3756 0 obj<>stream +g.T#ߦ.l\/-mx1"_\o|=#g z|a؞Y im$Qw{?6.3/h] +(GEo +>Fu`0]!iIL o+ 'ޱ+-˂v{&4r£'yj~?pأa8.& +<L/8Js;&Z4ǟ<2& _"~!o] +}:17ȁs0 +.HN^ě,II/+;$ԂpIZχBܥϳ?yP.}騕aErau8iASύcv\tG>xKEcvIX3~BuƳ~v :o +gس~wrkQW_ 1Uq+cgjݕ,MX5IcfɡMVZgG#w#ܹbUL#ȷa([ȉ)p\a΋%!yQT4@gK}e X]DFYL,Mv0@^P.%:_f,#[{%C%_uNf^.pTխZ71 +U+ Z*IyD.;k$HgF*Q֭yUuo_d-W޸%.G8gxYmJ3zei+W04,-ܚpl/ɡ;y?q#(fI!cpxci%c mmF^Ԙ0DCۼ/{-|PK +endstream endobj 3757 0 obj<> endobj 3758 0 obj<> endobj 3759 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3760 0 obj<>stream +8$?DJB&ZZlu8l )u,Z_L*}ʹK+Vii K*k5"}_W/ϚWZA+rXݢ9Qg/tATNDq#rr:D-x0fށ|~UbO}\jJFi,d=h +sBy_-{uzIiA75q'%VMQf+a]@dLO!4Hi [B,"=rkIɍ Ľ8 t +]T0u_E;;Y69KZV4NN_Nx`Q;,azJ?'0ƴx6[Z68Ygqݩr_v[qgL\@׍!*|֨QXe%ߤ}H:\U@S}8Iqj1ևH]; ]3 ޿aP`qQ+os,ܶ|1k$r&H~Ovo¢-yd*f(׵V Qǰ;fsM +f]E16EfLT RJ츆~V  j&:4'JaA]k:;t S2{*3?5-nȓ'ߜp|Dozj9=U$a2pm?CCjOɒHŠvs3ٕvwȭIuHG/Sޤݺ盽K#>%\r|wA$ƵD +endstream endobj 3761 0 obj<> endobj 3762 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3763 0 obj<>stream +u39Y:io $}~q^|,#7|LT,5[a>O|hu~wP=a2N& 0kAaQ)>ghYnsFX?&Vzr-չpaxCZ=HM kԚm˴TO2Kp_5вi2ȝyfML]s[R䌬5!/1 dl$1UQJj4v(R:Tb /Z׵z4na[H܈945;ղ bk@L#ֈ-S{ݟRKTiOA_v&[?rO]C `yݜ3 On Bn|ȝ})%pEZAV*0ӃėCrO K6uJv$6*MܦFQ.EH;`]!K팘e#Jz_:~Mk@;֝N@RonlvĚ +ntNUOxۛr#*RϖvʿoY:uujqGf )n_H-S\xG?jMꉛЙRNb +endstream endobj 3764 0 obj<> endobj 3765 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3766 0 obj<>stream +y2`,`:' *a" P5 ڦ@F,0_S ZC[ƭ!+rVm{s,Cl\ZX4:/A2WA;]0ňi2&fF %EFK_TEmVɜw~57(r ষ@Y\yN,JTZpQ9梯utp\2`5;xWޛ 3$K,k9YFG@G/* )^vZ\mՅո u FTըtei߭:vE%_Ibr+ %~NvqFwjgM>15^ `L-~g+50_L\50v(W6Tvb $R{ݹUh#L>ePަݦp]oOjq67Pʈ\Xl r*WĐACA+~zќt Bdn"&3Mol7"-(KÏ5יrꃌ<Ȯľe,XkEѩ0Sci7|Jd>SNb"I>;7:F0`6/f[5X,ßzL!EHv@ox0H2DcxWs/THGձ/ԐXpRʼnՖP9 SoLK'DR&i'8 &}8۠Qgg;avlEW]_TVN} *VVoJ)"b3W\Yr2aYF +#[Lj@j~Njpj ZIԴ9+u(ɋpSAVгjT+U]ax*d448 " xۻMR%2LK4";z2Y#epX$C+CK6ON$%z9~.KACz^/0q-"tXN*}E0E+'y~! *[[Im@nR:)3F>3(Eڎ  _=LMnxQEQƏ\HV +endstream endobj 3767 0 obj<> endobj 3768 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3769 0 obj<>stream +b5~`͞iꡈfP +p55D*<ݪdJO1ѫ_Di#ϺhY胐r^M:!Y! ɟX7A4nCT>QqT^1 yP4̵M8H|_:W/I`qkvEPwml*ͯ?O/ +Di|Ѵwed)>{][X/txrpe׵|'79 2v{@#UmԳwo3I&"5{^ٓPC1uȶ̪ z׭#,X`7C)oyf`X]It_(A( 9D"8! +?| HB( +k,G`8#đ)@,2Z Lݣj2eg[W^Ӯ.^_ʩUbc)Qe<i|< _c Mׁ [[eV5 TB8:Ζ[i+]:/gjXR\84 IŅm'd "P?UaUg6GFY}ANKX +e7nfTz6rB ,wM0DIe9a߹#p_9}jBs!Ӎ +|a&pPGbbH#c~sh9̠MX hcR. ٛ]~_\UF&7VFŽ0BV}0-48e +Kl8MQNsn +endstream endobj 3770 0 obj<> endobj 3771 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3772 0 obj<>stream +HIx4=yظAq6ōbdL29yWbr=1˝''@)A;6:C[nˀA#g d *utW! w +Pu͍БNNfc*ݛ)2HeŠ% +P?mnAO{4UC2G_Ox5P  U*r ր+doڍszYjahx 4|`gls31.t}׭_=>kפ^r^BX^wǪ0$P-Y7ЭfE"ԴZԜӈq8Rw0iD۷ (UD:q}{o0 +݃@LFm,Х!'iy?>&3y\?BK1D +ЦM7kwipv7'+gIK{||bHZ[Zٵ@…)F'Y*JYXq<Aڱ{ `7TYz01H +nm]u" +~Wmfn-m>z7'Xc@q8tm6Rh=C +qԗֺ_)MO[ƾ疦W6\-rHDQ(3=Q-]BJZ:N::ШJ͗4ZaF]W2>R0p_)Qܣ- Z +endstream endobj 3773 0 obj<> endobj 3774 0 obj<> endobj 3775 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3776 0 obj<>stream + \6@#iSP D0UӨ38WZMC迤tXb@9ED)\b!ѭ |*<f=^Aq cl\{pGzQ,1Q{IGY}v%%W'Px3 5ǰL8e:eO 19Bwv<}R X|Y "Lݲ\ g|.6eu)Iij^vp+&u)+$G  +Pr⫔3W'WаD+sw`g+ז(?.t-3`Az# jH4fu)%M 2jtP[9zq* t+hjKn8Ͻ7$$6#Gn*/BZ'-=QUJf*kCQb%56Y|w!OzzwRﻂ rFO]tPgĎ l+'H& 74]Eؤܒ#7íyNX6LሯZr!hz[ 6jznm<ͦgGD)ܿ0*pqI>@W3y)'M1mxh҈K4xcLNfu쿆"5(wPB#,vH;vp8'|P@p>K׻ccP +endstream endobj 3777 0 obj<> endobj 3778 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3779 0 obj<>stream +dq;23 DîB3,u.S8I,yxq/S{8627559Di7L!ۻ [_l(Q:0C6DG1D~Ԯ^F8ɲmf$-Y]L&4-]ש =*Dp\tO6mMT,[ o˽2Iu8Q e7Z(gZт9jOGGUu9μgaeD섺021,EVġ8#G`,?D!3M^8]-jyAt";kJUè7kYжPO8j.c5U1.f;i,nr;=wӇ8 gz,M W>WBMSoB6^6FlKav]J8B\! +?hoAejVr9~Ȳ +GQ5ys n6"nfvzW䆌10Yuy4ŪraAZ y,\"+^}2G?% ˛3aV=JjlTFT(: q`GaS90vk[V=\10v-9+ \Z:.&:^"Φ +M|9drV0)m:5HXUe)\xG%Z&Db o p +Oe4W]^>Dli2$qt'JK$*k +endstream endobj 3780 0 obj<> endobj 3781 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3782 0 obj<>stream +YE'me'l>$fK+02Dw#"*G.i 8 7 +`2ӊ9Ͱe34a#wRkIUX/ \"eO=Uo%4 '75f)x[\Iy^Gb#<Lvw!R/IH n`Pj6w xR_hu[G"A䭥8]YN^` 3K)GFRR2at2Gq AlsLZX + blgE.g3ޓ䬌óH/Zmcv6z2`$5~7,]8_!"#jw&?x*-5հ(րjeWn!)̌H/ Ƿx80'zE +8DwJ517};n_ _x'x(N@|wɷ- ~ +endstream endobj 3783 0 obj<> endobj 3784 0 obj<> endobj 3785 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3786 0 obj<>stream +^؈Bxd!r=z[^VƆϸc>iR~A;&`Xr(RYWǶHsf"}nԢ:Ow=fe ur>⤨^/VN&xvF?!LNE Y&㘒00eZ윪GxV +ڒZg̅4A7yHzsMl`-H~E-!%Zȱ]=^RKAc>ܓSthM/xb!`G9*Bk>o]\} ׬IL<=I4r'zƦ$4ٶW#sSXš ݴ+Gй&]kuӛ0A)NW|ec6{_%$0YRo4n0?Ma)zb0LO*6ur@T%5T^r%Ua@ b[ sG| w)`d°c5~58M2u d˺I`Gqo.5qAnjCa-%DkOةOm2TI:,O* AY?5D0c=f#TTB'wC֝sfKeb4p3{mj>Gl_q4^Jqhr.\V41=$FY~(oKO{##0ivMWo &CbbpW="zw4 +endstream endobj 3787 0 obj<> endobj 3788 0 obj<> endobj 3789 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3790 0 obj<>stream +,W5pނOdL39u@Lw>e{-2Aޒޣe>F5 .-$Fő@<1#hBi-s)z]tm>u+Yjz MS\d h>x+g_aU_fSqϔD%pFzKu%0c{=(v~T7lRDn%sQzogsC" 2"QQƪ~K󚳦I;`[Jpش_qѳvo>fQ]gE! 05PMY80H*ؓf Dꡬs@l RcjVTYp4+0Bchtq>ߩgi^S7kis1˥ě[ɋ?zW獮 +ͯ|'mP/#M=ŁVb K ?񍕎jXUWiֳhiTr_nB y=C.`o_Ĺ w={;wP}VгU5˶eG4_g hxqƼ)c Pӝ\bf{DCDs/QXZ4wt;a[ᘡ(jh:p%fQr .JU5 +R9z"PV4w Q|أZZ((TI +_fOaB/]y޵x-9v v<짾RX.*hpSMVF "0QP7 l~Dftqa|[|xQt=g +@T[ˈ9[7-/ö% fz,Q0H+afWF(Da heDޥpp[E"/. +fe;`e(\;t/ּ8]O{[p̣tM"9=l7#~'X;?_=94-ܲ)~lmĒa@A4nM5Oxajd ti/pA}TAE]?yL4$o> endobj 3792 0 obj<> endobj 3793 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3794 0 obj<>stream + +wBo鴄NPxms7agu4U-^5^[זtB 7,_!C˅/k*|쮮F s#J6ިpLY3t9D0> ̻Z^Xw6h e〿] N0!ʄz(K>RF"T/EĠ +ci MO+9j?u~zٹ)kug.Re3Pin0}w!R~?WWjKPTh'w~t [$ݦH^)T|ˠ|9HT+lp'Yivҟ%Pؕ4Xf Dq ȗU\;CS=W4olY]to<],6NcCU/sczuBF |> +g#"k +l2D3Ei;9 ;%9x Y[J>"^vt5iHgh&E{.|ax1[O+q=8|]CV̈́I}-7Eس9O]q j`KL[ҁ Mql,P)l@\XbKzd895Uw8[{8. /D] Jw'rGN @<1iNe_F-[bg.O wL5b2P?\S0cA9L5 /Q̄lAv9E@h#!IFXSJR$Axݖ̤2nڰn& @o_ȴ D6aj!r,(3cW[ީ zbyY[З(`x_2<G')4Y{zd N\`S + +a~sad*0c߈L,pM?@)/1[Nfs/z; +O$lGh[k ׋N J SOYVbZMH!4?Q'z8,kkzxLS~j"R{ +endstream endobj 3795 0 obj<> endobj 3796 0 obj<> endobj 3797 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3798 0 obj<>stream +C@EƜo4MtQ3қ6:ZB~VIˏ<3=grI}%?IO +:bf qs[KRD`eҨ<_ -j,X~-knZA^9@)^N U]=Up&-̻wŠ8/]a һz]+żWuWcw\qvXDGnH4%d^?\Xsħaqj(Ț5bcnt<"c'BpQjjPI(9F.KKJX0hLF$4Y,|ؿwiuUfDsB7eM%@@-`Q]<+\YDɿ# +J~nr/dF:@Dzg:'Ivw4z hy*\z ,hSR6DaF؇.>m-Y824r{f݊n˽|Lev>[ cpaq%"^k1_7Jz#LpM?ߕdpssf?osup1߁6Lsc>E$e /ڬ033l'rn+iCXATb֩Y.Q$'eW?@bP$yudX\yl$ppf>G> endobj 3800 0 obj<> endobj 3801 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3802 0 obj<>stream +D :nl+z׳q:1N !ԎܐVcWY4r`~s^ڑ~:#sG1A럵x&gM9|8|Rz]x]3?!/,WdMx@g۹_ ZA;_]m$pRH}XwIɝޤvTAp1,JY>_6s /u5`nnUy]lCcB .~se}o匜X+KZjp;C2d%|8%z_Vnn֍}'dla ^(+D+u:Z38#DV͓T X {<DH>1FiF irc_؀2d`h=݋$k< eTٍ Cnh G ^' O=`$x#_PN(h^)c6|Gt> endobj 3804 0 obj<> endobj 3805 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3806 0 obj<>stream +luz )&Y);ȹK{dao$}wD$Wd ɫ2Qi_igO;d:GW2HJLZn tP`e|F0?7+W;VB0mn7;BHgdY@ٍŌjUe^%' ,~hF'(3VvRFû(;j#qoM ^Џnkxy}ƢGe:E}4PQշ{bw" SSec "t3\}`7!v6'lLP]騽YP3-3*>RN]UEYC4L+ߘQ-Rr2*-8}ɞf2.7ruڏ|J*.ДkHfbf < + +xL~m +2㭏Hm%Ý +_CrJKa0m_ eާU94%~}Zt+EQJ^ 鱋z3ң-}x)œEwCOc|T `#EI~t0gI/B[- Qf9X|2Kc}ohR97sl8p686 XI:q\ +:9~D> +j0DzxAs9w]/=|Gٵ[QqHܤG(+9hYޗ٦;7vbo(<8ܰЍ?, +ŐϽoT1dPj/ }ȳGz"9"$/U#" +endstream endobj 3807 0 obj<> endobj 3808 0 obj<> endobj 3809 0 obj<> endobj 3810 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3811 0 obj<>stream +wickSe5Q,\Km`떪?A^4fQLn_oy1 Mi +cT _eOB%NE60cO]>tJ@1=q$]<ĥryF=rc tk&pZ*`2{"RM : UC?(E9N+Svvǔz'-fΗJZ`-!6Lqh7űkGKݲu~PoDZ$7=@!xutRTg:9ewrfa6Wh4TPK Zh܎paMSe/ׇDAOb=zq(L4.e 62rxuE?tyNDyRX d[xԨO  +ސ*E5;{-NPUš8*q`~m-z`|ƀ8lĠqr `Ho[ɆM[3%'q@[Ib=B=HC$\N59RƍL=xdJ& %%) v?X3V)5OGRdH#2ձ3cؗjdKe$N%; +ܽ9$ mzGuX$} :̅ګs^t+OM׆(=5(s00r5 s g* +endstream endobj 3812 0 obj<> endobj 3813 0 obj<> endobj 3814 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3815 0 obj<>stream +rbʙ'JK0mBNn+]j긯Ig-\},~kHO+j"%ń$[ ӒYp"ۖ< ('X*o-o=>=k$\n},Yj[4uww7I5>:OT"T+B2ڵN}w&.0.KQL j7 ">x+x[\dq$1GcШ-.Fb6&=7&1_d9PZ3(ȗZu`S> K&jgllcG•Z,^ Nװs)סJnl7yy,'XxloC!7gD^} :۪鶷c&7+_&_ ÃZ˿zղV? l*zdn:9V/& }GIt۔4l7i"&Vk+'b> endobj 3817 0 obj<> endobj 3818 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3819 0 obj<>stream +y;$L3L<} JŹP "^"ΥV#I!̠ݓ+\+p@cOZ?YTv)!Gyn>XK8&Xmdry}KJ>sp- pdW:^b"9rBo]0 l7XޤXҬ:D!=J k}dsׂ; 7`E&qKT6c"t Ң\A|pXwK#FyŇhp`B|~F7r)XwmԪp1?RGfY] aM$m!G>K +Kis8$5JHs,yEʤI91 SK|v%i((5r c8F#ϐ]/&T"̹7G>TE@l%9;M||pTÍk~B-c5Fw1Pjh ;zmyqlo8?JU8f GTQ5Ι8+E +?5U DnF4\cCzX$"0k}h0=F 8ݖWy `:Tߑ̀~Pwf#*I7\p|G+ fsl"Y~NJZЋ#ܽm5 wy:mH PhIP7jĖc35VNLn'R:߫. U+h$/h26ιU$ԒJE4O}Wo +֟h%?vyZxLyQrܐXZM)\?ڞ$Ӏɂj懲>܁86t_"NڌqhwzLͽnU%X}%N H +񙳕󙚨O'r8v6 #BoYB;z +o &N>XӇƠ,+P3u[䲢K$| 䩛)R lui, ؘb/=mHW +endstream endobj 3820 0 obj<> endobj 3821 0 obj<> endobj 3822 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3823 0 obj<>stream +(A1ȈӂfCpN8y=Y3OG#D[ek#c. K;X5qAIFyߍ1112o --L6?b}}I\/ ,St XPQ2bYu-.k2/hϑkK~9/{_.X Ĉ9\o2v\aMLrB}񾴍G䰳ˊ\w7 +hfUG}@XaȖ=4TلoMmgι[~zbW'}uiLHMxQP M31O91Q;+偠]ԯ!#Aېs~6 Nq'V-K`F׷}79SEi= &2/V@Ej C9}/8}#%y}=G4Y\% Qr Uިz\rT"tI S#vL([[~ĐWCfHCJ;hHԧ'r&q9vvSD8J\OIXR JR`Ѱ,Ja0Qm)Pk| ,#~nYNLuˁms$1*2)uh$OU(;7 +wG[{y*b#>q9_# (Ňgfj9_&CЖSH!)hÑ>(P4i3-ʲ +#*,l[N/Yݵ?~?g(twĵhs9c|mA56oJ +endstream endobj 3824 0 obj<> endobj 3825 0 obj<> endobj 3826 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3827 0 obj<>stream +Eat.*p +bor몊fX׳3 My {pruo"M,jq2ҟY**6:8/PȠ{59;ht\V .EB>%1{u`CV7lb؝n]: Kdz0uyM7rg_xR]PX2 *7mд8xp'_ v!d7vX,Hy,\݈ks'ܚb +_儉eFhV:h]yʆƺXhJBG0pRr@gg31!?v"ô1H)*G&jYѩPXř t%fT|:n?:<S!Yn5 vny4m3Tb:<6Lv7.i]+nDIH6o%x7o\=+Nyu|`V@r{&[7#e XBTHu՝@Vs/r4Ds7n)sd²0UBqSuGY۝!mJrn.yiE-%ɝ\H+ ]C)[usMy7i'W';`4sS/gr$V|yCOn[U"̿7D::0ucBU/Qa:?@w4E@kJwȒ΄Yj,lu4 )1ܺ8o~f;쥦u)w7>4f"}JBK6rYdojs 1 +6;iW`XY8: =5܁6:f&a<^}6Ws2t7<:ʺ|r.o +}%+SsŠm,P)F+/)t#MGÝBGO)P_d8~ոiZR2 ?'CWqwUl^&6Zj0! #=f)yeo}/*TJw;7`U8.` "4۵W2mZ;S1c D  #^y(jw̷?C +endstream endobj 3828 0 obj<> endobj 3829 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3830 0 obj<>stream +95{aqFS#LuWҐKpj/yz31v\+OGV8qϘw]3K'2`{WP1 "un10W}0bgb@qX~Ps x!t&G|V +v<BZMڤ^q5vť@\~Z#g<~x W{";oL᱊b4>JgW rjj}(u +endstream endobj 3831 0 obj<> endobj 3832 0 obj<> endobj 3833 0 obj<> endobj 3834 0 obj<> endobj 3835 0 obj<> endobj 3836 0 obj<> endobj 3837 0 obj<> endobj 3838 0 obj<> endobj 3839 0 obj<> endobj 3840 0 obj<> endobj 3841 0 obj<> endobj 3842 0 obj<> endobj 3843 0 obj<> endobj 3844 0 obj<> endobj 3845 0 obj<> endobj 3846 0 obj<> endobj 3847 0 obj<> endobj 3848 0 obj<> endobj 3849 0 obj<> endobj 3850 0 obj<> endobj 3851 0 obj<> endobj 3852 0 obj<> endobj 3853 0 obj<> endobj 3854 0 obj<> endobj 3855 0 obj<> endobj 3856 0 obj<> endobj 3857 0 obj<> endobj 3858 0 obj<> endobj 3859 0 obj<> endobj 3860 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3861 0 obj<>stream +yb@o "cǮ05^,ժDM_'u]6/5xE岫np6x-ts5 7$5͏ RV2%IIqw FgXGG1:SID;]6^;I.MqWu0 4Ie{w +q `QΒM`HlQMRРG~qᑫ ?;neA^KML)iεf.n97i7= Dm(KiD.$9Nu-hLVe\)Q_ǒ_W3BA8y% +}qvm"E[<2t&m-9b26d}s\XorDC6F$?\dOp1,^,pX5O~'k!Եv&_'ZHW"u#}XfƲ2V3࢈O;ps Vsb +O.z8`(46RM[8>:{ >+p>?q"f AC{9|҂ m3/h " s< ~T˟{#pd8)AN"-=NC ۉSQ!ٚx_UFwNA=_KDLRFJ)j5[ 00ԗkPuNŭ])X5z[+ٕadf ]2=YlLK 1-?LҸ'|phH3̠͟ ."${<]}OG<.&ØZn 4P䱎I}Xֈ~ +-6 KW J_;q my2)!Ժt E7|M.iԉʝJ"'^ ]PҬQ\#"Ubd^nc 𧥯bom{Į'L:eqZ_*,<&~+d^bu+D'ִhףONNO\4C4 +{ \S5s\V/ Y]S>QSOCRܘUٮA0N|`bʰ 6v♎=W*o!m1[03*xP=j =񞅊__z P \2K&T6oƟ,sbʗMU0F\>Vr'+pý--!75&8w[[%dn'?MU5II[hLur{qu:$_:$՜Ǐ`ʚv?GJR}; +@"oO}uuzWƒIp514D >sQn9 m7!SY`o!1emv.t<r6?=n5`yK-ȀK H%Jæq_$LબZHUeBe2w%L"׬Ϸw B92vozS- 9/n mGٯC/wWA*~^׌) ϰ`iŬW$J%!Tˮ  aZ)>孜co%^t18ػj PB![fξ-iX$i0PX橙g3hI+Mm|ƿd(ř@1ڹԼ,I-gӕv[$%.o?S@L\ s220<;WC$ +b/te#P4)D3[tl𠮍v >A.!:=]RIsf:Ezz˝BlÇxd>KsTL(TG2BkoFh/f+oX̐p"L;t$`Fut1$oBjt]-!^]݀>-Rxf y`ed6Wzn2>sۋ۶"T^ B[zW(KAbent13`}25x +9T%H7U_?E +q2ydL֢AD세J'к8pu^9?~5%tPXz8]j(-PDC1yL?ﲜ`h!=q)5iJ,3VJfTs|"'+AMo-\MAi`~jT"Tz3Yی4ѽk/&%޿ 6`m֚|C9!mmD&__[=(YTzX]$ܫ =wƭ>)iNzص}?^T*D쿬pDژ'w+8-Kv<8pWկlsAr7S%}Oi#x*!byAadYH[F9z}<ɝIx@;Sa +hS|1kLRzכ\ȴȭ{ pCZYtUUG-WȲ}/V0ﮄuʼnZ͗Թ|3 <ムfj966*d"cS32jtpuPqńX`YriS!D5_[ofyTqf 5_rԎvKTp 1t ߠr +nİ- +endstream endobj 3862 0 obj<> endobj 3863 0 obj<> endobj 3864 0 obj<> endobj 3865 0 obj<> endobj 3866 0 obj<> endobj 3867 0 obj<> endobj 3868 0 obj<> endobj 3869 0 obj<> endobj 3870 0 obj<> endobj 3871 0 obj<> endobj 3872 0 obj<> endobj 3873 0 obj<> endobj 3874 0 obj<> endobj 3875 0 obj<> endobj 3876 0 obj<> endobj 3877 0 obj<> endobj 3878 0 obj<> endobj 3879 0 obj<> endobj 3880 0 obj<> endobj 3881 0 obj<> endobj 3882 0 obj<> endobj 3883 0 obj<> endobj 3884 0 obj<> endobj 3885 0 obj<> endobj 3886 0 obj<> endobj 3887 0 obj<> endobj 3888 0 obj<> endobj 3889 0 obj<> endobj 3890 0 obj<> endobj 3891 0 obj<> endobj 3892 0 obj<> endobj 3893 0 obj<> endobj 3894 0 obj<> endobj 3895 0 obj<> endobj 3896 0 obj<> endobj 3897 0 obj<> endobj 3898 0 obj<> endobj 3899 0 obj<> endobj 3900 0 obj<> endobj 3901 0 obj<> endobj 3902 0 obj<> endobj 3903 0 obj<> endobj 3904 0 obj<> endobj 3905 0 obj<> endobj 3906 0 obj<> endobj 3907 0 obj<> endobj 3908 0 obj<> endobj 3909 0 obj<> endobj 3910 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3911 0 obj<>stream + b""'#a}plKvzA[qlzɾ z@>|Wvx&p^+J%}ZpIc2Oԕ014l;mE1dž7hy˲$˱vT0"WȢ(.ZW"Rg]U: oL";|Kz\oNuy5$[Y{9`]Hx{" dO*%YT.,03/$!$֔,։5DFH=fFn1kWtܦ; F7Ti\u l`>ۋ"}%Ngj pD{+RF){@$Lr4nBmڨfbkN~2~UX/13"Rc0_\P zu=b#Puf=54$wa5D8SOQ.ڣػJn1'p FDk,{>!^(υ%AXb~/3~U&b;u$k?:icdAak`튦vs1a}ptHHGOFcR%wb$l(2H+D!&^y(֕C7ސd(L9ů1"DМ8cKE`҇{7yS@+' 7 efC ݞ0jJ)=JSfe91llxD +>{y +P$,T!aZ?`WEjɨVO7Q™;UҽWCNrXCa#lZBԚ`,=sMs63 1X َ) +۔fv37Pa"S I"@޿Y󍂆^7 "}Gf ݠ5 8 vuPM֖ۅ@t m?~R6S=B;,YmP#]gOܤ?0),t_)z=ږNhBw`~_>~ۂϯQApNMwO0UBH>s3-/SaKpg^:踁$=y&i+Pw TSA `@pW\P1-Pm mfeI]Ќ^+:s'EP],':oݵGY,+ͬ?OB_Y5vyv?u朘=(2ߖ;/G`v<|? Ye&D +*sUq%-D,p67ݴ mCk{@"'}RmC_ꀦXF +qRyˠVI[qvE Vܶ&Ę}iuXjPp++N~T7|3!Xg ]6'%WK&7`ZKPLԵ2@ƒ<00g!p/ :J\PIڻE6Uq ZBCnf+Z@7@ fʲ?U= !g^҅==O}?>wMڕ,b?u.:?0cWSڙFl'ELQ5~;Jlْ2=+D%%B `:\fsok#<$De?%Zg#{Gd䱟rXoZ/#fשiV +lBxe6-gIL/n:=PLRkK( ^evIt #壥{Jun'K?nlak~EXVH3Ut]]eC٫,Uᓦ%6HKȱ0g/NVk lQ?7 v Mh~6Zh' pRsZ!("v5J=5IHsRi``.y,ǘi$@\ +Ųv%H1ss}%dvfu~!P$r(B«|EŮP4%մؼڙnbYAVo8ʁAyP}nY=qUêIQrb.|YK `0Ma'/b[vʧ㮟e14^sKO5VK'`76/,7ĥxQ8t`n?eӎo( "H$Aya;FX4;ƝH <8;ekBL'8fgΓAb}*ސXvD"ls-PZhgAo%hWɩ?oy~lGH7TQhӤc>rϮu:Ldt?Ge*ۉ1.N w֯ZG~@#̏nKH'wljZ+Ww{$2mmfpKt١ʚL+qq xX${,7^#N +sQФahb"Pl3zS6}Q_2PA)/͇w,%LC m6~ƙ(l=qf~?>I}NS1,ai"IV ?nͰE YJP~a_U;9۝ +endstream endobj 3912 0 obj<> endobj 3913 0 obj<> endobj 3914 0 obj<> endobj 3915 0 obj<> endobj 3916 0 obj<> endobj 3917 0 obj<> endobj 3918 0 obj<> endobj 3919 0 obj<> endobj 3920 0 obj<> endobj 3921 0 obj<> endobj 3922 0 obj<> endobj 3923 0 obj<> endobj 3924 0 obj<> endobj 3925 0 obj<> endobj 3926 0 obj<> endobj 3927 0 obj<> endobj 3928 0 obj<> endobj 3929 0 obj<> endobj 3930 0 obj<> endobj 3931 0 obj<> endobj 3932 0 obj<> endobj 3933 0 obj<> endobj 3934 0 obj<> endobj 3935 0 obj<> endobj 3936 0 obj<> endobj 3937 0 obj<> endobj 3938 0 obj<> endobj 3939 0 obj<> endobj 3940 0 obj<> endobj 3941 0 obj<> endobj 3942 0 obj<> endobj 3943 0 obj<> endobj 3944 0 obj<> endobj 3945 0 obj<> endobj 3946 0 obj<> endobj 3947 0 obj<> endobj 3948 0 obj<> endobj 3949 0 obj<> endobj 3950 0 obj<> endobj 3951 0 obj<> endobj 3952 0 obj<> endobj 3953 0 obj<> endobj 3954 0 obj<> endobj 3955 0 obj<> endobj 3956 0 obj<> endobj 3957 0 obj<> endobj 3958 0 obj<> endobj 3959 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3960 0 obj<>stream +L2}K;}l8 YDv݈Gɸdۋa묶aH*%}X[*OIǞ_6 ?nS5൑=6 ŜmeN6{' GW7uզdQd\Sv#fe:6tܑ2Lc.rhkɖDb3Év?iF^^ΚmO6PA%HaIw z=lHLbeSn[I=<YE$r0tշovr!K5*\^P$h|9^]V?J*gw_`4WZ\~ܙ*BF'h4 vKCNt["Av I]-< rsCr!/Nx)Ǖ ]|z0"1q+;2IeJ%`fI֮z+^ &몙3^n7QONW"5YhiEGD,Ak=T¦msڥELFsXJŇlν`:+]o\ؑ B@3px}1 '+7l"(cJbApMN2{TJ,9䜍J-6R! `7-z! BBj6'l^AN +:h.-F_gX3բ;}p0{K7@:X>~׌E2Y< =4#_Q3IV?]'{ev$Ia2oE,C +(,fm-|MzӉ~pJym|ـkK'o1i=m:jcAɴ5&a옚Hz1ܒ|W56, H@BapxBd{0囦=O}G}ݞT#"͢Qn4ff-L+-`!^ ,ckL涿dtU\^@GO@WK.|B@c:kVy($SZu`SU04ԛ7ޮoK~]6مer]Lps|˿JPKKK%2٧T@|})LnGHMp2ѤSKL8nMg;=JuЩ!簎tlPCpc+$X!~|KBANw9BZՀFmZ'RsLtL|jaaj eCVq1䙚*_kU+sK&/T_U=$,fG,US^GGK\ 1sSBtAGlƯ@ZE|hGXK]&U!Y{,{poyq!uGj0z4G7€qa/xnr^_`_FU t@0qWF:zg)d¬fژqBr\j>PUb~M-"T5ƁYym.e>BBZ4o;aD\( ;`~8\#o_~f,\DNt KDb&3zDF{HCM 8?ZcT!Orf_-fZh"qja,n '$v^CV#uCHY?2qs"4w2Z]iv HO`XQ~uZ V"Q o\O.W\motfc=]4}] +6 v35=x$TwHL^芑P'Ӻ%N{OxE X.u +,3n3C`Y@hؼjx_1+~ݠ,0YÄp dvV\Mj7Xg<Zoɠ$-fs.)BUh8V*csC!<;N=|' 7)N(kefNŪ!﬐ '$F7ZoPJIOTeG692ͲTp6A}GVşj>1g\Fv\4]WZ|?%o,8-ڂԻo0Be"2i^P&W: l@LMOojSZθ"mMI2(zضitJ}hu˔zn}`-*;ዬ v.86*УJC-Mh !8X20csӟyQA Z0kG\Tob)zA +"ItivXg!xk}eCsZSf"͠81`/xwwUa~PλCeoA;hfqTJ Pp[9b6~[]B䕉[G}Eg|0V՚,chYjz?W%VbOz1vyW)3:M%bDƀlPcsw '5sO8c/,>}̆Wa G|*\7l>Ukl%1KAdS~N< )2jo#xȝ=TٙGu,5К~v>vau9e/‡.> x}KdgPpEٴ4,~6HIZrJ\d#Z4zmȚ +(xZ& {\܊ ܿ>G +lv^繒\v(e{bVKiSp( zɬ$73&+nJvdBSVg s# 'WsmvpWE2$2 ( +>[j R%BL8M. LJ+CYqd[=x^4HĀ6ˋiIy04v*T(ۄn B`ǭ :z0 8唖k-H;4Z=$eץ1F澗yO=NAavۂ4,tH6] +t^>8‰(Έ*ȎGsx@Yo K΄'BEͫ <(P!XHJ+b[0boz4Ta`H#j@06 yO$ShWSNS +XM=]-> 2>/7abmMB*|r_)xX7 lo9)gaq8[c\׵Te7~GY~M9X"stC50D[O +Uآ5\BKiyd#o<  `+ȏ8Ӯspha?sy1vU|W/cy7 *r 7/*kP-ک;pvEP 6ossKVzmk^ )"8XN:%R,oh3%q렒 Ƃn"*=Y=6LEbWCa_aS/_-VlQxVokn_$-gB^((T }m%WYpԄ8w@z䈧+B4mzY[>Q?QAJyW1 On[ӝT5bǝUuam+)BJzNd؉U|E Vl.%jm }Go^ PiVqDX͊, +endstream endobj 3961 0 obj<> endobj 3962 0 obj<> endobj 3963 0 obj<> endobj 3964 0 obj<> endobj 3965 0 obj<> endobj 3966 0 obj<> endobj 3967 0 obj<> endobj 3968 0 obj<> endobj 3969 0 obj<> endobj 3970 0 obj<> endobj 3971 0 obj<> endobj 3972 0 obj<> endobj 3973 0 obj<> endobj 3974 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3975 0 obj<>stream +^OPobUm'h.Ԯ$l֖_zqpGV- +*D*9t7iF2)C-wD`*"V.yDnJpY#lکM`7J@*SFӬx}S\+~;˾'"`TISl*{"0r[C1<{ʼnA*`1a#Q P=Z{^\/A瑹>\_P]̬%S"azSi?N ^=%4#V/1gIbJ^;J,bnT) hZ /֛:aˉo@.ZI^ =)u \5ank}&8m_y$QbywƠT`Us\h#DVR1V&viitZFmk;X rYE,_XPfrtqU\!aT&}Nd/ }+DS?R_f_'_=eT #iE IqSWjOJ!'k<{F,*=+b_[etK5]u{5Vk/ /Q .'n-.]ep VVJG&gČh +Ǯ:he'lOU6YitSZR)\(\<U~e~\7}U +#1RQL]}K촶~¥;&zw./NC݋֫4`O8d|-jLZ AKʻALՐruS ?S9}3:FQ SƐfJ8"yIans3˨'mˊ_MBFly}>h-ž VopI4/˧R5WΑO"% pP +4<xd^qZdV-׈RFFG=LF?rtđ-%y=&Ρ1jή]§Sc ¼yltS/fÕOP)M]` r{_MmHN2?0XVb/0e~j)#F'5቟!|m|=2E/呺^`zf@S[,z€6 I9A17k #I:Cyn<'l~d9 Jy̿{ZOfS[gRBx[>9JpΑ!'wV-f&fRNdD 1lAMkm6 NQ}VgcQ @`Q%XY?tm&bYmƚ&@Le;ֵ쑞X]h415R.)\(Tz$2iH##8RZvlgƦz8)xX=я=$IEuv ԭ~ oA!< i!I(|v +endstream endobj 3976 0 obj<> endobj 3977 0 obj<> endobj 3978 0 obj<> endobj 3979 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3980 0 obj<>stream +LWrN4q)VKiӒ6rZaH⁽Go-E"tZ=>*2U#ڧa9ly*)AYpFݳ+g>Σzlcچ";/r +ѵM7DUj8AЍjY%POВGz*q *EHVwz):dQ/P#W7E^! Yەv<&C ^e5K[mͫ]NzާP 0(Au4s,?[ΟM{ 7wM_)$ !pjG +7Pɭ(=ܔyS;U(x2"@P  +,".N1T\?&ul! +Pل*C^ZI_G`>h(ۨ`R%%.68@'^"F>" d\ㄢCDE[Pq/rk!,ki^vu9Z1JL[ЂYn1F `J'˷(d"c}adn}ԃK0z@E|9nk%aN[xB 'jIΠ<gk% ΀޽8D5AUB +峏% nv) E4BmQJw9'3D˹7d'x`WbVJ2̢Wl\o9j70܉Db|1,QHf+ۋ|쉘( +#J +endstream endobj 3981 0 obj<> endobj 3982 0 obj<> endobj 3983 0 obj<> endobj 3984 0 obj<> endobj 3985 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3986 0 obj<>stream +@,Ѡu#*UnJf8b+~E=P1RQ5L8z:oSS[rY𔫓޸Я~=,uXPiHk1wSvXb~0K)ҋ('mʳH2Hrw$pt:kS?0|*8J,^Q&V %1w8U|Bg9Ȃ9̟JCvl3Lgp{!J]>O@B`WqM88&ݡ$XGO3,I/$h)!9h.7oV< ]3ӻb|xBat{pdN!'fQ =Jr5Yau0Bs$@^lg)c}(o , M!TuQ><06>|dQĮl`9/bggt +}ݽDlpr icHgJo u3{W9V0h]gxY%Z[e"4k$~'7U"* aTڒb'^ǃ}V2 H DGܼe#3ÄCkdlD<S5LݡF3)?ؖ>Ľ{vxm=.08kͭ;{Moݭ٘49^_7?'?_%)}pW.`ʭ84 @SЧ꧵8ĚRS5Lj)9LCPOu1k+ZA# L :^n7bh.Q3Onei$]ljB;XE)+[ƖWĸ1*B&4l'k|zb4i8Wb[V~N3)IMadrQB:mZA]IK +{a< 򗷽 t\Br+ +endstream endobj 3987 0 obj<> endobj 3988 0 obj<> endobj 3989 0 obj<> endobj 3990 0 obj<> endobj 3991 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3992 0 obj<>stream +s&,H$CjP/PNne1$(bTPg$n AAÌND(TϫMn>2(fQy}Lw2PU+ZB1%.[D[\ON鹡T4YB+dJq4t's*0]p" ~ _ԢogR Ul590289%E(_ǫ,xujU@x8a׽X:vd+iD<)H霶1[ z{mq;Ȏ&iȔ\yW4|>!z!wjO7Yg\{%]yIHR20a +&%{Zt V~%ν}iHӤ3zdZGѪ9FA߁u_cp. +gdr+(*#CeN/} +{`Ҁ -%b&@neں +BJi R+'7T2r$O>h*_Ck&H#y"_u-d®ᴂ^5a6),٤%ɾPS)SƹUÄd\z <11;{:M؀zijհ$ +fv o3M"8?*B9UK|y_Lj2cÉvDQn?ҹi!v6ac*i Td)wouv`yo{e=7~?yߟN㐹w:ڻA8vJP'=7Y({[fGޛ .e*Pl8!Mz8ж*3Wlw&Y=D bk&}4(W3ɁCjDD㴵̎S.:)4:v.Ԃ=ke:!# zR싁@>\XD +endstream endobj 3993 0 obj<> endobj 3994 0 obj<> endobj 3995 0 obj<> endobj 3996 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3997 0 obj<>stream +A z4JMg GkiS^׍ÌpyzBNt^@A+JdQWR#O(.մ\ zsg$U ڻiCpƯ-LX?ݚ[ g226V@o6 +Ug>7MGPǍm+aU +^`xri{L\a~q[?#[l\q"ޖB8EHPKXسiϴ,Ňщ 2+,׆ĵb h #Zt<Nx^ҝ{ ͢OU԰=rx b613λ=*>'$~=eh>\!2[>2x -A?y ѻ&q5y'r-?}"?2)Y[Cl*{C{ny}J8/ƒ4:aМy9V7$Q|9)$HBĒy}*] +*#+5>iHO%I2@~bD*[͗v$'BC3!)[YjLGvHekNYdbB1 WF9P-G X@9!N918,Ct!hpI*nYJn~-3I~Y[#ExCzǕi{g +W0p[{|Y fJ k-BY +W+Qw<~,C_U,Kp^:{4غ#a2¯.5،N˒"nFsAl&,%W03NbKڼx6g`V\ʫ+% [ VNϒE͈ X"1ZlZ!ݯK, +endstream endobj 3998 0 obj<> endobj 3999 0 obj<> endobj 4000 0 obj<> endobj 4001 0 obj<> endobj 4002 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4003 0 obj<>stream +<š'&d&Y K$Xtw}Z}@-5~R!TCGG/KlSXҹ+ufuJޔk{?|@S+1n{4)Ӗ^ X1:'ȧ0Cکڅp%nK(_=bɨ:Fz(-M7B.C=|Hug|n;#ij%DFW +u.*۪n|!rYmrs24)sBFGe<3 #,=8F(V0 +@N@5=ʶ/bFr} tb6&}X}p1RyR}N[Y- y1#OiZ#I&;Uni<T=؈E7 +h=M@m 5^Pu4CH:Дtb4t~B#Q4Uqm._~?x֔2AV;lpΟ9`>Ffܑd:܃QnEzzf}7HJ{LeIs]J"\W~SB 9HI&$:jx"htShIHVVj$ @Ȁ9:^?k;)8[%zeT쪲 :%$~^QZnzxb.ܖv?Vqf!Hcl F/zaHkEsyRԁNfz \n)s80޻Bn +~t CO&m; Ś|`IB;@0ޗ35$d?FvRYYqJ/[uV>#(jݵ1Ϡo>8֝1*pȫH&4`-uLZqKI/C 偦ְ:KV>_0G*\\gо3+GlW7A<N,6 `-,ZѨVjJJZ\ހB[lnoWl`tҢ{sdzDzpSNL*~e2߷2$\@g߫P;Vw6屶W0TbbCw&w~i@ۺqv7mwʜ/KZ:3eT4xgx_jV݋T7KR7}ypsC8:gmx +endstream endobj 4004 0 obj<> endobj 4005 0 obj<> endobj 4006 0 obj<> endobj 4007 0 obj<> endobj 4008 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4009 0 obj<>stream +T?)s6qa9C$J +]*'[言(9ӱfG>6Dn,AE֔+y z4L$W7ZBGq1VqoѵJ߳(%5m 6ˤK8N%BNs})OkPձϮVC̀J0s0)Z0|EhiGV,f|7 T8o;,XpJn?ja/y6RAጛ\KO.LȳTMĻ^rHBՇV_xlEM'o_AZ6h_*飴`'&mE^+A5 }745+<%h -R N? *p]L?Ѫ5u;)?(pKn}J;3e|0XMa1j6{۔-o.-e] q1Ŏq(oݗ3L"7jc[[_Awk#WgzKzɊ-d䶓^ڪc6jm";S\ "ٶꋢ-.~0ތne @jd&ڑY~Ǘ&>Lѣ]~_]ʝ  't.BFԜJCٯa^濮Ԉ[f"%Ud~LˉtB:&wQW:TYhcd9BqWF1[C^k3[ɥ #7%w%0>]8p 6)`׏%j y?42ZX> endobj 4011 0 obj<> endobj 4012 0 obj<> endobj 4013 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4014 0 obj<>stream +8 +0[2y@x3>Us3Jm)1dblLb}}(G@)h +.,f%Z&YN^7.c + +|zK[:IO9╠x>۟l +>cŒ2"S:]b$}29`d,]Y.(/Xƃ58osoKӾH,2> 82k?ʰ`%a_H'%O$I(%k,vpm{@5\ҟ[aK +b`8s@ j`y[ ԉG!p)AFzVhґ_j'b/v٦?G'n:./Mki O]"(opF@`IP&OSޫ*; &yv_^;X +BϠAyBw;p_x|JYAA!9øalYg-OU{؊GO!ZvKVd2eҋ.k@.qOhس"(` Nuq=K8R0kVް77).3XX\ O_[[Cػf,gXwSќz+}/4=_,z7GO~A2tR{KfPHJKa +`7cGRY~+e5e#BQkmC׶ (|aLVrCPj~1?!"67+iRz^86T| "Q\/䎕sRGe#ѹV%b &-r7:*4uOVJCaösލZޑX2,w?d&\"ec}^4 $A#8o +Mc?1롪LS "Et/,> endobj 4016 0 obj<> endobj 4017 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4018 0 obj<>stream +ةM'zт +x<Ifa 9ߩ7ap%Pi81(]Ĵ(i_toC|lLOq/ZE$!CVOV^;\FTU_oӚTDfFX=êW/|8[UAl+=BI_ظ$ U8d #s7@va +5eV\~}#3Ml*!+8b;Mk+fI˪}ܰ.o +endstream endobj 4019 0 obj<> endobj 4020 0 obj<> endobj 4021 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4022 0 obj<>stream +% Pj)LjVkd]Zgo1C7̺ +e :@Qy]T}mpҿ5_-פ b`kDr\(_) Kw&-?wh7C u!$MM A^sElc22dus2u<ZweB$oRd!'c E>3_~GPi1vv37'X0 .Mw8$f j0 JW~+]'.Q>l6Bq-4 wq) "Z߬}1~Qs,IX8qB#L'0hx~zPxD"SbNH3{>'ܞXӃsfMc{'UxޜHv2c#s 36BQ_fTA[;_j94>;IȣQ+-Rۮ]P aX-Yo@Wd* |϶KW1쩺ÿ0D-wr -~|pzP)æ{wxa?#ɠnwk뜒hz*V, =|J|ЭU:D'0q\!tf9ռ7,k(4.\l}m~e&tT6Jl9yِ˴߾t>wj-gH!+ɜ{h&p!>TMLJԃLn9Vm +LO@ǐORLj~O攀;,N1+nVoea,_ l,R)@j a)L)3b K;|1)9W8&DT vcjr7 ; +)8V B/Ho mq\rK3(‰2μ-b-]DudZcwkK0{,:t<몳)fSay6BS?r +endstream endobj 4023 0 obj<> endobj 4024 0 obj<> endobj 4025 0 obj<> endobj 4026 0 obj<> endobj 4027 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4028 0 obj<>stream +Z+۠8wXҚ8r~˳4k=RSGd +a֓͡>r A#R$f44tڋ| {$FD9bx*o3-EA SԖ/:nS܋ZEy'>_vqtBY +;n:9 >{ +a|trԹ˹"BaիG7m}uxhӲ2R;B`=YbiGd5@ee3F35D%,)EF%GOD4pɺ>겷:Et+FK1eN,9PFv̛P3J+[9}=t-Uȷĥ^8)^ȭkcVQMWݍQS o[eI> endobj 4030 0 obj<> endobj 4031 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4032 0 obj<>stream +@F/)r}"esj* c~TjpzVL٪g&z^2B҄$d6]uGht, +9XY<0U x#ᐸif@ӫ8e e}R̈b#zB߲sQܺ)à/Y G/fo;TV5@~;.l]~_U&2뗞ݐgk|z)7> endobj 4034 0 obj<> endobj 4035 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4036 0 obj<>stream +<46~!}Gp:*h3Rveh8S:Mh-A\R'9:]%N-e/z$ИT෭A#cxG.BݴhO/d +[GП21*x@g8'ZPBkPא״9)lc;\(> Eo/OZ DtaR'-o [¯WS3ftXD82J.f$vT!"-y㘍@/ᣔ;?d!_'MQ-T[n`sSVXwVJI }ɋ p#A +sk'6j+!ЫcwۉL2^S8Rk! ޟ7zr@$翀Թ8K3`!szL=(c"*B4=sl?+;&p܆y,3*[{zf|ihhyqY_}]8qQ=OJ ,W.vVgPn"0>5\<4a˚2gu$۸O՝v\"5oeh;m<2 k1[lFJ#3( +Mu$)͙TaOpǍ%.p>e7GTI<8Ɨe0nۨ֕p(^ԽO*D(և*(n En:%bgSaUQׇ0xuaq>Sqnn>BSU[DV#b$ P^mSS| yaiZP;M4ЮPA88<$_-#׊~ sry`!]^&" p;*@?*v:vԚt?HJ-M%tD?(`:a-%Qr]ͻ{*EaC(%W֎%y>e'~Yc&I?LrjٮS⍻=KiNi&֬yo +endstream endobj 4037 0 obj<> endobj 4038 0 obj<> endobj 4039 0 obj<> endobj 4040 0 obj<> endobj 4041 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4042 0 obj<>stream +ͽcBcܱUֵ<٭ V&MU۝r[._ zaqGTQ[Ӎtryvo2CwW;!b]hxMi?aj[Y5ݷc!Ww0R*yjA|^i]@R."s=MmMߨ(-Dpl yKy0=Dp򺋟yZwMP` Ѭ`>5c;mt7t) %[l_?o!ef׈ @7!5.NyF$QnV}߮5YҘҽGl]/` ]1'짓9zk(tET,j@T9 )9)zޔo$.r3xŘFR=|ڰzXHR+R&{P F}lAv4dKS(Bh~䜏oYo&E6b~/%f iY+{NqiGEv@!1O}`-\f:}۟gfHY1Q;t{]O"8> P/6M3GeD+n}{ ~k#7jDI yBm $Y2=%0[@YcxӘ.`g:[mUx=ή3Ŝ.k_EU󢑓8(Jۺ{TLhjgk +I&V E-{y^d"Ƀw0lC9sjYuyivq^1ő:^Oo{mOwFCC~@KE .>SB*C%S ռ7 ׇ~R3)8ra!IHbzw:Q^; e1x2s*?A:y~-riG1.M!J#U]1 5#A4a|ոrZTM ьPrbu-x~9\C_Od|1N~Zu>3ta4 C~=Ic,FW1_V,JaP>@O*hR\##v'ېmaSs|7gʼn +endstream endobj 4043 0 obj<> endobj 4044 0 obj<> endobj 4045 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4046 0 obj<>stream +0iIIFuWmr'4Є>W#y} N@7+e~{L4LB¯1p y ŒyYmHbї''bs讴}./E܇D"C۞$8*&\y,[ A0Cؔ#Dɗy{yOFP\(rc1X051~S,Vޮ># PZ! /ֈbZ*<;$7 6tr{O|˒V?րq +FSئM(⣍1TJO( +3"_ڔ77~^熵UqNgaAHt^+N@23<( =aR}ȿJ"Qke(;c'_;)L + V7M9NhIkp9D m_y͙b/Zu.B.TƖ~ P I(I|ziZC(c,x適pME_S'*'r: 8DQJ"bXmi1{b?X +2(51`tTvcjo &ydtԯ^lN+n3M&TC=Vyy!Vq(fj'u[Na\P@I3N>/,8 0>"EsePa%s "ii6t5 #l=TQcU+LZv%)H{&y|r6-bVhZ+#&Bu&KabGAMPQ42ᱭIQ撷~wPh/sKWA&rJ. ™8PgC~ +endstream endobj 4047 0 obj<> endobj 4048 0 obj<> endobj 4049 0 obj<> endobj 4050 0 obj<> endobj 4051 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4052 0 obj<>stream +.M=t! %Rky +2R07,Ψxc + #_~*dǣ+ dMőY We3? ~5Oo${oF?VŰ!7rO@F̎{]vbIDm0,-Nf'@`bYO"r`pX!;F̷-, :5y5 lA~63STō8rPt/ +He:gN:r t@+EB7U` 1LJ$ڛA7Eg)arW٧*$Jǃګco_ّr?1+,wEXJHu2{ߌ7vSIU%Ǿ"!` D(,~4uٓM $y52F+++(tMlL냈%*pi]7]i^< e'W`B ^*έإǍóWRJpBxR䋃|#+rr~d>1PVI.|X< +܊a0u['St8K+KVɊ47^Q2h=C"ZΈ(\0'+HG #;JpڥZ[y[j1(gDtZ<юHљYODv8i3_"ƝB8Ho.б!ѽA)a +TZ!0#(g!nh٭>> +OK +fLQ5y0ݜ$y/Ϥ#xl 4ͫu!R(|Nu0{ȧ Zͭ3i @0E߭V3wܢi0Zr?,igA+P|!8tƉxU`Գ&rU Yud u}u1-A\RKi_)K1;Sjq ju8Vq} ; -8ζv~a` @ U:hhm+5qx{~Δ'1a9m*M!,N4$R"kCA `| +!b6՚zZ(Qc:f>{θQKuUϣ*:~Cl ȔMki\H^F-$*33:mQxqG[74 +endstream endobj 4053 0 obj<> endobj 4054 0 obj<> endobj 4055 0 obj<> endobj 4056 0 obj<> endobj 4057 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4058 0 obj<>stream +yf.UOQrUH+u~yUJnTjSu2::EI"I~m}UvOROr+ڄϱ~$nTrp0HfdF<}%ze<8iPt1HDJ&/Xn[=\CGf^0a賷.V.K$VAɰxM .׏;Y&?˜F(z2@' +oEajX"̙b+_reb#rJۛ}:jc̮eycZ`$YS)qI#_]3cfMm,[w <'é[1Zs[U䉿3pXtDZM~= SA4}E!rr;m舍gqnlF#?4{ѭtB&GERި_K P2(s'gk-|@a0pP'(_a!23 P*A^L'8j3cE RJ +`/RE yѥn3M@uM;PHt1,G+I +a qkoi9|bz6>6uVVbOCOOYJt. CXl/ڡIH7$'4/kŨk-&*l%j$KGՕuh|׎ *v +endstream endobj 4059 0 obj<> endobj 4060 0 obj<> endobj 4061 0 obj<> endobj 4062 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4063 0 obj<>stream +f7))]afވ^T.=rm-?cliG.V/Sr*34Qlɠ FۭVR%Aj&T)aF8.+/1cdЈ+:+dp E,5V-]OqB._DoŌH`.s|d?4Ѵy|D +-?C*i"3+.\ p9n^dvx +3>ΘyҼ!^x7ގ=f;q/Ǘ 򶀉i`.1c)#w`I}(Y@M_fQ豦CdbWEH$*`/Mn1\9Xph#OzSKԥ&0d;NҸciD7.ez5W{\%G.uߝ}0rQ);b ~m\cNBQQO}]F C1Î@Two UO5`jwjgOR3]ChC(6wD_b&PXClL}f~aa g +z[H"38En +WKDbz>D + +endstream endobj 4064 0 obj<> endobj 4065 0 obj<> endobj 4066 0 obj<> endobj 4067 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4068 0 obj<>stream +5 bI"+FZZjgHjH +SD`HcR|A.Pb3tf ӄ:84]@A4/}k#LAi 'R4" koZyˡ2o~0w!KDT^^vWk}l]{ 4޼Kɞ?- ]ȫOO{xuzHAHn)<a@kI["-a~>v2)58Uc7J UZEOS MOAMM% ݢ琲 +ܺMJ>H?t1ʚimBE~%0"௱f]-鬉:53|ɨFHI_/],Xp[mwfk5 W(f5gFêY19G +Jp\7,=1 FW_hO(A=Y px@bq.+$ga5?lH#9wH:k#f`rI,)5*8$VkJ],t?ӆav`Yӕph6[IH2= L{@F/[e܌rdX~Tpovo/N=}{0|TPo"7ې's߱L<H;;x>H{w+0&one|KЎu s@INM$0D{W/c*}E{zrvdo7na}M[ +ʈ3ӹb.eLIPpHy,C2NW丩5wp#@0,*sblʻ/7I"l#$h݌fpN"|bׂ[՘ O'ŞkP$@NK7}vП ӱku +endstream endobj 4069 0 obj<> endobj 4070 0 obj<> endobj 4071 0 obj<> endobj 4072 0 obj<> endobj 4073 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4074 0 obj<>stream +sn'>s^7?uMV}0w| fNL=ֲKޭ+ *=PCOgkp[&$Cha:hRjxO /mJ:@a˹uU.3-yP\'^B}+"@WvP6}艻L4xbWG`'Tx/u;WѢVOJ¤*(cmZЂ\]vC.{n}uG uk:]D|Ѧt٨9us( =?ӯ@d»`-͒t﷣l#uZz~|Gmƀ9M ~$\jX~2I-Ȍ0IYR֫_ZzfMho[XT{/+S/NYa!U176;5VϮT +&N 9(S-i jɧ.c S+ +3$+`x} (Uް$SxlZ&`Yل8wPy5n2aX0<:YT@ zF?\hӊseLLMD- HF~'.[5V.T`%.bpkʮ9`D 1a Ksqځ&e{w{SЖTz{lΣ=}=xy([.DAaFٶU!%jM ^2cPITR.HuY]lcm +݈9є!:RhJ-E6[DYrBw6![q=mĩs(:(}ή{/C'el\pAVKH/jꂉjC,'4=7V!3GE_g]cU +_BPB_GM̃$pAE>$?w= +nq絆rdMbOߴz,K +VG`lSpED: +y1fOY +endstream endobj 4075 0 obj<> endobj 4076 0 obj<> endobj 4077 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4078 0 obj<>stream +.Dcm5:U`͙C,ڌqH-֨JF5mw0pAœFL>gyTѤb @4y= b>l<|6^pV[TB'#%Mo)PYm/[}#7][=Ԧz<^(Dۈ?sc/?FZsMcE` +=xDPK6fkړ/B{<`K22NhgsƐRL8H QRh:ߩTfR_#@bNzjm2dJWyAh]6ni]"V}1@t_/or!8z@ +?PcyT1&ےSoS +[g#tsݵ M>Bllh%~䦷6l]N<::=i +ca +Q otr=kC-X6PĽ`)=[x+%)x5_-}äAX$Y.F-G,Ԑ K ڃM]N.J(FEsX-eRW%+ўgFmrUE8w֓80yZl]1}loJ̄?RP'RDmI;YAO"OہtL`]rNXDT$ouaFw`P`D`M6jf6{5Y(N;]DՂD]@-JtئXX\5l4;%ڇ?P k RTb  $%sZAѯ[JXPmiHPr]W-T·$53 +:}At>CPoDAROI=_n +OyD'H2W@ƱNΎٯ{_ `On< "m)US};յyu,TQ *â@Ņ +[";%;0om`9CܡN:Y3mA0 +M* +endstream endobj 4079 0 obj<> endobj 4080 0 obj<> endobj 4081 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4082 0 obj<>stream +7 sDlZ#x lʳ5J +1U +_ۙ{jpcB~̤+`i"oOzgiOk%Eȳ)dKGͼN1ۜهa!5(zd,PPn|I0勑,˂y@*V\5'1iV'<ֈ4UxrkhڲѦ&z.r+5?9?44:Pn ƍm!W +iSt%"@;rک>[Zf|9 Ff4y*FqTT% X/'_>Z3qUKqZ弉g4~CwIk]|?2 f+8Cm; PVm;9q!iU2|:Q`WvI>?^QILpĐa+zQqy/MOCꮯH7,z Xٗ|e'G( M~uu!ys4ߦ|=^&1pL݇H vV.ty-=)j(<8v(vRMTN +*5PD3v_yj?`KWW VGPyI4.WHC80n`,i%|e)[ r#U^E)~q3WW'87[.;}>" .ܼUᎧd+i)oGpU>bqҌ G0ԜI.Gi8ϩ'tHY)$(H:_O 岙uW F\ghiC?E'dY#2/Q:_( +endstream endobj 4083 0 obj<> endobj 4084 0 obj<> endobj 4085 0 obj<> endobj 4086 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4087 0 obj<>stream +;ȥzaOahdf"9oA-xY^Ok8g/VSr7a &ج._X,K,/3h21fp5(""!.)}6ދA4 Bx*A-7mښ}2bBuociT ¸Pӌc"F՘Q +-3/HH)D\γѐ%b@̬(kwË1BK3k30KgZYA9;@㸻7E*,lüx'[tefVG4kj![f$]M@Rjdvkfjd8%lzHU@FKaqGZU mS(O1-ܤ8{%:k{8E\dn50]bo8aEu1e.  ~L ;2Kԅ&9f:B} ԟiQiJz`t +!4r&,CbĒpv41qO-6h=RD Ebgy]@W3GJn%[V0Lm~O-%+@jo@'k^Df4j3×s +/Fȷ+4d)x8V0Ez}vO4E^: ƮjBzdv qSh&98&BY +g3WxCЅ7[P8HωY_L]~Xb&ܞei߭ʫ*cUIiýQ1Fi'R?rbeҠ['bKPcfoIY19z0govVNyw6_o h"1Q\ݥ+MB]0 +t*ī +.6OM@E05y))V0ĐrZir +V4h?qW #t Tn4i K]3rdp\EJ*^Z +˜P mLA {}ߓ}R zEF?3x? +>R?lTg= "(|{GOkܑ{.6$w#eF +Msu"{ϳA'Vld\xElR +cgRݮ5Jҷ#y&NO+l~BHHlF:-#@\p%KCT6ip}o*I36z-g`)'Q=t9A-c-s3{E'z")֊՗>̰ +endstream endobj 4088 0 obj<> endobj 4089 0 obj<> endobj 4090 0 obj<> endobj 4091 0 obj<> endobj 4092 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4093 0 obj<>stream +tA\mXt[uwld9Zniz%<}!Nz/Ǡ֍L hč=صn;|W:)U؊g#Lp7Ql[#X3Du nSwU+Q2.= 1\H9Tټ!!YJSM~}m-[%=>|ON?ŷ$/[&91YrZ3v#s{TL70Vi)Jpt*w}^#cK5@9}P *q0+>V5 w#;B!;o}X ZK.;ozzўC޲Ȥ3ǜex~F`oV|/DNu0.`hn +igAMVDZRl|s3IrZ (pM>C!wN {[K3ƹ;x5Y!&* +"QKߔ/}/-<_ےUJxF.]AFjuL>$ 5XjoK(euQ:*'C.nG|+1 &~-\DԦlH1Kk[zZ&X_P=dPQEz@ @uL3$wqD^D-{daԓIKw+ݔe`fh9z%舵 |̖tzb@vQ"9SfUʗH,Ez ~脏Xq$%RZǐ$p@eW%+U SeTĈv +Κ%^ް5o (/߶8Tޗ< +endstream endobj 4094 0 obj<> endobj 4095 0 obj<> endobj 4096 0 obj<> endobj 4097 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4098 0 obj<>stream +"SWɺ Ak(ݿ쑲[0,Ok*P͘lۤ*NS`}Ek.m@XUcy_Y$VQxu"LYʇ c`A=WnL.mZUy`?a(§-t({iN^Hdh;kD+YGOOuokHx3dFQt>{$p\ݬ!ϸs$_*yk oh.qV  ۊS _YY;Qpկ70'E^DW1f+WhN Lxo@_a_KbpT`z- +mi5Dkte!?_s'ESp7|Jl!w\;i)V20%liD +Y nj{KOP +ƍ#29,kMeڷDnv'fW$2A|5w)=d,i3rbsTDyWE(HX׼&\#"N_f!2x@@' ۉp}GӮ *(qDo̝= Tkc1̶L22j-}W +P @t1\fWϜ/'F_bIBY* +XX 2A ܺ\\l^j7i5?2n yRdڼt-kѸ"<` ]/M;o);9²Ҷ1n_.,3 V1iКo3 +t;rjRӋь|{2ӷ𒬼ΪZ$}CA[>CF}ʕie)'+Y"V݋*IK}wⰧo_(O*XDI$ +endstream endobj 4099 0 obj<> endobj 4100 0 obj<> endobj 4101 0 obj<> endobj 4102 0 obj<> endobj 4103 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4104 0 obj<>stream +g2ؽEAP/ +2H_AZ48{ϝ5_&cbrU$INǰrp:wR!rI!\s\H0$ ARΫĵ=ҷu[y(0hNBY!n+F2")6tc U +CmH)02CsYPiHAfo8FJ|pWDt)F[/epG1Pvӆ# Q힛Q<:I7١|uPJJ^Gf_ K@.~JEhB# !Rp7=Tyuv7HDz;-ˆK+͹kTh nI⥰Oziwۺ6/)9'~d d1W409bʾ"ͩ3q/50B}6R{wmrwa?߀ʮad!@'|m*ƪplKC@M_ڣ :Bi4 O0$HZB cA vzL +bSPx0-8AMPگ1\b7>6_/nLaFH9L>Pm;0ϭ ͆J]LᑑuxI-3h@ ` \TQvZ?xy:^8Ly >ی csvu ?ZMC !\Y`ghC>;JɎv(RII<-W/'[76149Z@%}XH^ՖJZ?2$ _u^vw 0BP ,QI*JCwHbRh7\tK5^J^5|豼{:+V̰Ma&qԑҮ1> endobj 4106 0 obj<> endobj 4107 0 obj<> endobj 4108 0 obj<> endobj 4109 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4110 0 obj<>stream +@X]ȴ?x">bd +eɵy M?ɞ^Sd'uE]T(x~t4z:F.HffN𭆸]Y!>;Q3gaJڱçK^Z+qgJ۵k3vx?{ri(޳ +2yu5VmRŶ!.ke#^8ED4 EeT`n5?o']i`#Bz9]z3E-I{HE=YOEQW'} +ۈ)R(=0P JӴ :*".n]Q9TgšYނ hv%.U*Rcc|ʗUK߯:YlPuWp,mZu#uNHDžڷ} HP+y!rv9G~duxb>D +endstream endobj 4111 0 obj<> endobj 4112 0 obj<> endobj 4113 0 obj<> endobj 4114 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4115 0 obj<>stream +eo^KQ[B5\ 3{%]r U>ahfؾƦX \d7jJI*m%D/u5p7'%EMF5]\2 :So2M[/q÷j+Zu}ڐ C ,w{!;~U'hzeF ߴV H$"V-h5tQi)гf~tG 6b `}(yfU0mBŻ:Uҍy@~(v~NIe ) Pf)v hU٫c +1_Uu/v3qw/T!]7jS c~^~/\lp">4X&<1ųaħ֝aWo1sHFB`;C;N¬ëSF} d2 ?͐ay C&n肎DJV;|ߏLxzH(͒?PJ1;256 ývAZĝmUL$m%0~9,cXe9g8۾eKED$j ]Qlϖ1U BxS*o>ڊ~G'o +]v` ;O:4m~o UYmPcNۯ{KOy\~69Rd uI՗ Pb06۸vj&J?Z:zjBÐ2imNj0U?p"NZKS;A %)x A}qlЖjZ95C~1Rw(X6f|%c}RId=3V.cvȟ~ү3E:ض4Pzh$uJ +endstream endobj 4116 0 obj<> endobj 4117 0 obj<> endobj 4118 0 obj<> endobj 4119 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4120 0 obj<>stream +jMH5NeR*k R9bOՕ@ _hz +H&H~eޭ h4ӵ+A͞9l60~4uM3\PXŵ:r_:eёcAO(="6j]<8bdP=ּв D4+4Sϭ'5xet%Vu[‹ly8gKTBO>IE'悚 xcSڅ⋂SI# laWC]9O?㇕xF=sGˇ; +-вm $r$ET(߸:["^kHYQH+iQwVsPpSsnϪfkrZ6 Gwe*ᭁ jHRk[BZMGIo:=hzF߈KRDx<y+,UQ ++b2;q+B.PܚX}>*l7!U} 㓣t0R#teX>3ɻ0+p _( o%%Waw`~?$z`W <]_`` .Sƭ޴2hAH1/E?y\($n"k{[l|i܆^!F2qVIД=Qߞ^WӵKP5uMû4(QÀ1Pn OM[kd9o09}z)X8k3aͧB zuhk) Et qeOi&FtO*ѓy_a 4z>[~GδMEߡTp$X̪Z +U#9ה^`gنV@Nc_orRG㐁?hb!m]9A +ֶPL;;hSVbO|xcO*6Vm.=Ja6bQ փ-onG!U •>NX&r:}v(hYkǕjWp lo,C">- +d~Tzib.[ +H3ϚS˼Kqt6qAL!_XLFaYWe8Tu^p"ZO; YR>8FXfU# 6a@i@Kcu " +xd`:>kC g '@)ȗY9mGy÷i\hG÷&l(`&JS?Vq}* +m`H{eOazFgknx3У_#A}^ILoY!tnJ-vl"UB?զPvL~N~neNm$*r="tK vYgimm&?pjMtw}$:pmjfE?v^Pq&z4T39{`suC`S +endstream endobj 4121 0 obj<> endobj 4122 0 obj<> endobj 4123 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4124 0 obj<>stream +n+jI%Y4xY3^-٩+13{8eB7ʋ5-i~{KUOcU$hV v0Zw+":>cfC>ݑjJ to_u:-fDzyG=C*y)Qq9/&<=nER/HG,j'Y/=H Hh•&7τsFC +l;}s'<_4y;,~wۍv'tG Y:Q_N ?i}5{&lc_LO{|Rz{Wi;vf8"(&aLIHP)ά#˹(sr6h + : [h @2Nِ'OrrXڣyACqPV1f|!Ze6*ҽ(e:sKd#VEZ~'jIRUw[ +` K8ojfv !#OߜZ>^r5TMyUQ +endstream endobj 4125 0 obj<> endobj 4126 0 obj<> endobj 4127 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4128 0 obj<>stream +rVozfDehȬ袛2+%j+l.Ɋ$wE$/"Oh{]}fv '۟,,-frV?c?V:e֜%j0< +N'`݇$X=8i\˹g OJߖʪ%ܸ;I|YT('ۘǥm bTVi&kRnEU7'DH:e_WYwy證*j[k^QlUF²$ȗpN +O\ aҭT$W]^aG!>06rz-IRbsl6C%~VgUUDH:O.BFlڔe Em {JuǢQTM|P{fnb`DTq Х{J5Je0w tFfi.4aT?G Bn{sbe8&|"E‘ X¡zSi8@K 9/X]A +W$}Fw[2(T[Db>?[#.hf 3}$vfD#+Co@gBB8/y^;!MEi|`@:@/(*nyB1>FXڲQΗf/YMze" <zumCV‡]_RHlDEĂ0@U&3w TgOeC2z."|XAwx 2j0r Ȼ/ZusdSPa1O#gO_]0+Gˎll\DƓUK/ڜ?Of5ZK +Y'Ffw`.Qk<_۸)BE(Yf̒t @+> endobj 4130 0 obj<> endobj 4131 0 obj<> endobj 4132 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4133 0 obj<>stream +0͜Sޔ R{R^QKxC+8d#t& D;!/2[h^ #!V5ݴsjaT!)sрq+ C9ʥ.*jK9UgZ4OǏz#b;.+Đ>Q>阂T^=*Р{C Ocfj!B,JQ1Զ-s}E*rM{bGt̓VJ] ?! +4lŶ#ow4R\t^0aӎt67MmQ8w-p Cd aM7] @59#6 9C29Kcjklכ"0FgQ-&7,,n0`7t'>{ Ĭ^w R]:暎 e E]/Uf61{K +n%*CekWY&)# Ih-VBsѭ'}⧐vTí&zL5"!LF}-Xc%DՔ=o7K܉ІrosicCуt@aEfd33TዿJ.sD.T2$4e ?*ǫ˅ ަgy̟Wzw?ӱ8)A(l>a7j0F!}Jq%ʷ\3ЉR>pn2.GXg;b5]tXgyPvAmI\;&IdWlB'KJ34] @rzx &d_S8G>[dhf{WS`y>F\sMw_J"u5ؒX^"kƶg'M7s5SfF VkU(N&d{! SވW{" Ҡۅ`$I=M7#K05f B,.(;$kG7m[q6) q']*=EQdƒr@PT?[b[VH|)|zT֍>.1gBA53)|,{`h<(ޠ:|03}13AsNI@GO\Dz +6-{ +endstream endobj 4134 0 obj<> endobj 4135 0 obj<> endobj 4136 0 obj<> endobj 4137 0 obj<> endobj 4138 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4139 0 obj<>stream +,cZN !v%Il^(гfRLb0>&91[I|Hj( ײ|42q˘ +O3l9p%I.#d%S-~u:C63oZyѧzrBB# bIYPű\SِjJGL[<۹NOnkŴeYV&* _T]z7CFiuu"Q7Ƒ(W:p:&fkx.*K/}>qj8~ak )fn>t/=36PrĴ؅ʩ<^ΌTfƆy4ѶG-Y!N[#]2,3mf_3+Ё%ɇ6b S6}VdG~LDtHE2~i+N~mWpyYϢuSZ گ&v#M<646> endobj 4141 0 obj<> endobj 4142 0 obj<> endobj 4143 0 obj<> endobj 4144 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4145 0 obj<>stream +c]# ;1Օmї ըK Rk($V9xP)c^t|}SCoq!(yb +?:GMe ղ3VBH{DґP^./lmzѢ1MB=+Kzy6+rҒO mhFU*[%$aIB[] L,6anngk@sQtF7O#_A=GmlϖsV W:LAo~8Z5֙#F yN,NMY &b`Z;n6&etf^9,kLu(,bYWѫZhPEcUTFA׏QcM5i5`jwn DCٴ6c"Fa(gpz}1Y6t6:nZm_(vP 8 #7tU?kZ;&rR9t+`ɁVуQ5fuZjLUbaK40+\:rd8 qFZ˃gZ:CO{];H}­דwڍ}4=g8|EQ}sb,u91a6b>AHp; NUfK'9T0u9Γ?nYKfgmOuIAj6 (#&I>)i4$+P'bTD9&s~(Wh!k>;@(ʀl?Q>fiy h0{^iYF4J~sL&ڏ1Rhx=nz;/T.*X)J ? vb=?A ''Ա,zO'f&l!D)_S=R7z" qY슢0FE $(<[|+⛈ܼԉEW6CA H]O"²Ȇ6( -}DٮQQ`i|t _0LRm"u]%p,_WQOS "ZE:6FCè&'`4[ɛ~}x/i#y­Y+dGPtj]Cg6Y+W7mNg^67="sĖ@8> endobj 4147 0 obj<> endobj 4148 0 obj<> endobj 4149 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4150 0 obj<>stream ++Ѩ@*IgOTKx;uT(w"䣨v@rݯeo;? Iw 7ʰ,~ ?p! Hۿ4 $> Ox_Mo2,>o 0Rd^E&Gڧq2-VZ)gk z"cPvo3R}S;p{i DpR=ȳǓcF;(BM 1Fy78t[8VsSWb'yuj׃ MӋO!+m +N =ہJf>tP~d#"mm /Z1:9>L=n+2X.?y'dͻc( +n_G@/9Nw&'HMFw컡>T +7o ϗA(_ ӧmd f>Gݎ̎?ǔx+)+!3hg"j׶0Xh&ݿ'b#Ti,T lmȯ9~Fه`ȼm6b; v> endobj 4152 0 obj<> endobj 4153 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4154 0 obj<>stream + wxj)u-Ƽ+E_w7 ~N[y+BtBU@C$$ߺ3HwL=M9U Ӎe'4zU-ouƃ]/ 4\kC V9ܡD/ \L[X F&<1O,~/! r6jM^}&rsA6;iJl&JE;{jX!FsL|F[]\eMCS>ޘBܙνSEc&9 3E߆O Z'9`o)j~(>@ ZɐQ\m-+.`wj֊5aE]RS}J\}*V!#MK+E(yt;]揖慶Ki QڌvARg{qe=Do{}"47W{w\%Gdٞ?-seކ*c9@r~iڢ\*yvh~Y Qy#m&iypiRSZU!J(wm-}2< s(2 U } yF#eWVVzK@PF8$/ +vn'4oJJ\ +4Ju{[Z.AmB³0oYmN5(QmҖ +endstream endobj 4155 0 obj<> endobj 4156 0 obj<> endobj 4157 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4158 0 obj<>stream +53 uoxR7_P5Tj6ZQ ] D>3Ò g]B pZG[mߘkr>\әēz#Dl>jLeobB$Ox?RQb>TZb;M{qMmS5T{(:t@6 Řm2DKw#%SSKOWs)P8=<:1]'1@?K;i0cR>$z 1r(TB8 Dh~GSw8wKL1gTറT P)7ZT#:̍xeNaSxƮJp u6ݨfGz2ffҕ>݈o[V( JrɿZsQzR+ BIӉnX:<'WrT%XpӬ8)8t2>_J &*2Z?re"zTc|obAK R.Nio ki8b6LoҀ-,e6")d՚:қ@ktΊLe˅L`H0?3mB0^|Z8(HWh抵}CͱW#?#z,H/swѬt* FS~~i2d,cX!7Rw_@CiAFZߤ6 F-#3{keۇA|_USF@w+8 WgPstI E!JR$^.a!>npkQ yѭ[uAd_AG`tS6Boz+r>+y\3wV +.•Efi{ ٷeе 1.Y4KgYjzBVz`%JuT*SFCI#7)l1 E:d+.o 4ɕ<#8]7&h%K] +endstream endobj 4159 0 obj<> endobj 4160 0 obj<> endobj 4161 0 obj<> endobj 4162 0 obj<> endobj 4163 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4164 0 obj<>stream +0uM,>Y6o+@|ށ +(8cR1q450ɩ~"Nl ܿKtvY08}fraP T.Rc eً<8'N8zYNb!Pշm(:5lI<g@Rq,[ރ |TDgIUr 0TVYXU'qtlgLhuCC)` eri(QqS Z*muWq2Jݥlݑo;7 ȅt7G8} = }$PRxJ&s|dD"Pӻs!X_H)n C!lUtZJK(*^͙*>^4sGڶ#; Ժ QGt\rO_Ly>cd*n +;Na%g4<A|0p.j u~ P+qܝ;m{XIhߌ@Ze׭Ţb?II1-pF.]e٣,m{x nL\)8(:7k"|V/D65ou[*f떦,3 Eg>QyMWrg1RLG3ЊXhֻK( r^gl$aB+yީ=㗗{X!dwnWڂenWF=ɔ`ӰH +endstream endobj 4165 0 obj<> endobj 4166 0 obj<> endobj 4167 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4168 0 obj<>stream + 9[|0RmQ+ͥ %\_ ҙSMIhSI5$ǥ=-g`$[ ZI ->wig]U2AV1A~XƀzbY3ft!Duñb X[p0Kڇty,x-Mr"!༭éZvC'w#rŒg=Qq-D9 FA肗YHz} r +IP:n-43}4G˓X1-ϑtⴣ  UddBVhׂW-Z,'>A 2+`i7sL^tz0qMYqᔨ-?$D_UP҄/ +s>R +"XUڟkWO2YX_@\͞/ATo!;z-Ha06cfO(dk~94x%C[914:6/^|m )t,)uڧ3 z ZU(j!L&͞# O&Jf9uL5S8chB f{Si>ZR1LX>- NxJ]#2y8xv.>N) U2E}s[' _.R #] ЛU{0N6[}uP^9- +޾|n_8r_?z"-8jȣEun`1j^V [^lIeh?tRݒFw\|XGH<8TeɝSJ& x +BUkq<44^ev+-yBYvoŝP|- (Gl;TR9k +endstream endobj 4169 0 obj<> endobj 4170 0 obj<> endobj 4171 0 obj<> endobj 4172 0 obj<> endobj 4173 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4174 0 obj<>stream +o/5əZݱ:QWp],&55bŔ: d?O:0]$1 ~Lo j*&=[xlb3 +lkXn/18=1n"gP{5 _N-'qr:VhK %?aP!3.pFL_6DrI8-Lм>Qd>,h|'<)?Q/#FU+ 6U}:VÏvc'1$DsPo ߙObXpܱ0LѨ伨*7#rDZtn|n~ն\"g +ЃZ/02|]EOy[|\6O4[?7hmfz*S&ۨ>ysNԓf}cTн@f2X˅IͷT2uM 7Lw;:G\ !uIō?Cľkzi2-rŔ +lY?P(f(Jcp׵$f(& QEςָ Q~'-q‡+)`:[y5za?@w?/ q-B39d);i=+.(? ѭyuѵ =5X:jOվӮoQ>J[ذfIW&\`G.NW +wbwҹ> endobj 4176 0 obj<> endobj 4177 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4178 0 obj<>stream +Io]Oٯ*ԝUb04<%ӆׄp Zvf4Lxd]j'NZnʉLqǏid-i-RKW{$v.]b89g[@-Ո)!(W:=D_ K +*[%l%5IX0FuHd6w0W*<羲N=鞟Q ӯ*}Ag6cljN ZK*A{QL|'"V(t+oܔ R+2a)2sc7kz!~UC.G=kh;XL8Qřދ85?ͼT˂ڍ^8F1ڊ2&4g$OE7ݦk +6!hipͭe2aN5}O~N2H(Y<AA_O|"~ոd;cKZۗ*bE21۱2(J1jꩫ2 #t{#{UlE&7{XG]V0[9^70jiM*,DKyNɲ bSWT ڏ&ݘ,sBF N)Wk0xopŃu!ZbR+0d|?c#i{@eRͱgKlo;WWyrV2'AIwG>N~sGp k/{⢊n(*3Ϩ^N-9f"^>:!аlDPJP؁Zɧ5ԡ[NF.CsVc9YZA~b"\$-=sv%1i9y8d,Fᚷ ) +cN| ׷žG"q@E$Ik j^7Jb5poNnņ[%"Ø9ʈ -83b3 +endstream endobj 4179 0 obj<> endobj 4180 0 obj<> endobj 4181 0 obj<> endobj 4182 0 obj<> endobj 4183 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4184 0 obj<>stream +/leoqE(S򭬃#N6痬E@nBa +/%)RBT={?S+G.ힽm=+#~ 'z:]zZ59Kʭ2HĪQ~ Xq]ĴAjxPvӻ9pIx/:UWx Dctyn\rZH+- fΟY^PIe5 | >CAv( :\}*+&+/PIco2DިWfËd_ryν-t]֐-EhR2j{0faw{pU#M.D8H*|)lW>w{XsNI-1eu=t@LbJeK gce#د`&BFy:mqc|%$楅A6P^x;\$i$f.x"RÉtɳ8]-7e{!l>l%ޔz>uu +5z8z-3{,2_ ;EY) PQECe $MgE <1 3cW"?_ȣ[Ei΋a\JKHtg$8`CAv|8_l5E'?NF_y1D ̫4Ŧmj-'bЏC930>ӌv×)Q=1 +K^7atE0:Ntk8\}U?3B $&`$h^v~OpԯVu +K^GsL =Zx_|ʐ +endstream endobj 4185 0 obj<> endobj 4186 0 obj<> endobj 4187 0 obj<> endobj 4188 0 obj<> endobj 4189 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4190 0 obj<>stream +H>B7||j7ggdXǍ7ОNdJn{)z+N- ŋ Zd-qY]*T2zbH{`^* { TTT5Vu؁$ŇOHQ=cTzT)7#$|.mg1?P SyHƂ1M^M@g_d#@ +N uKZ'dSTrlQ +\R1HoC"OgCӔY uG'gOPJ/x m əbSM7Z&εxwӈt RJ.27|XٕD{JY^a?0#LX $p;^ i8'i/TRП?W2^?'PrT4:&U ʍ]ͩ :Z*RbLk5W,K<;MJ@}٬LO:ea@ۋF85Nډ|VӁ"&"7bi ~ 3ݡ=ݛwml4m܆C{5DPJ 0Y*Cf1ȋSȚF'$4$uhD_Їp(7|M~ W'CkMA5 Z +j-b]|@ lƿ,6BX@j?>ixZ Q^.kc2Z"+/8~b9bɸ)Rvm4~v# + } [k]{ ΓP`2;k,᡹+ >Q_N$u%٭,,WYBA'#|S @ +endstream endobj 4191 0 obj<> endobj 4192 0 obj<> endobj 4193 0 obj<> endobj 4194 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4195 0 obj<>stream +\6^baJbF,wUV'4*+~F9Yά⬼a8II\o)'$J,|$7-iv4UrYGA+0ZU3n" +m,ˣ:yYpg Ee4 '3qw]s/ECRD= Ţb x!-ӟ!S|TgpK{t +&\}2"M`/ ^Lf *H+aA07{>3Qw9+.\DfpdB\׀gt&m8l0jRY +ol]sȏ`)|V.`L|-JV8O3 ]%*eL`|ym*k6{JX:KPFRPVPѩ3D ?hstWn!eM?^-2xPWDeo-^Н%DZBukʭ0 faI xvkN1`ۂ +LY',#؉e0欸pO`d v|]lT+uA\Uq?}$jc Oǜ}0j?"9a.M>C<b"bۿō6P#d}wSlww\iYq}K:+1m#U #/WokCf*3U-ti D #)ni"Mz`T^)nY80hZ0B"w gF'h>MۙsfѠ?GwJ(OXl,' K3@mA]*:iTM+ +_*p@$\=2F 3K}vExr@zZr=N_|l7|R\dsKM!"5Va7|`OhA}0;OS*+BR]xӀW A˔2 ͡ )tMȾjOd!q*__f.RO&X ~8SOoziBUH84wbu!VcW +endstream endobj 4196 0 obj<> endobj 4197 0 obj<> endobj 4198 0 obj<> endobj 4199 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4200 0 obj<>stream +f~n*A5hj~5 QA!rm9YͳvjwBX s4!q^#hMh\Xc煠 | +PDEA M 뷴x]nuza9'!l + +HvVڗ%Cjûa6m _)&Ӎtȉ1P&0&A6K&sߒmrxkN\O>Yؠ"&Hm_h{*bh@:7&?j`jyE/ *s[x7<7ۦ"J*E@g0M +|C~ +![/@Pw<4?Į"Zȭobk9 \ջMl^ewC,hSQ|~694E>3ů- +C(At jFhPTu8iJY'}y1 V7NyA̽Ul>18UXg$iϜjbv}*s( b8oY:CRH[(sXPSnl^AiYYKZ y`NNM%m~L쯾H HmɪP#ZAL&gEHZ*>xvy VrėvCW 缳1Ls6ܯa~q[Ul=lN3I"R_:ơؤH@4"OS<6Va!4+h@!d1XGP|!3llXkU%.&Q;wI-' xeFbF2kV` +Qü:)[MZًRI% Wfw2=U}:yL{ /l:Umvig e*iϺtRåOm.s;EdRyL FT0\%A?}˔lZ?6b5O!:&l'I[S*d_|t Jv;ip!0JFnN~xB +*Z 8Fׯ3mO uHOiT'u2LfH?!w+Qefϕl=̐\y덙%4F>V\/yu  +endstream endobj 4201 0 obj<> endobj 4202 0 obj<> endobj 4203 0 obj<> endobj 4204 0 obj<> endobj 4205 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4206 0 obj<>stream +Mr ՔH5/_ C{Ggc`3NY,Z1~vDշwHl~r?{ͦ+ɂ'B1gGs}&1weUF&il ]*M}d|MivI?7Z& +eu%1]g83&k:݀Umb*uHBDcaD0m䤠l{.0jwdZHIcGZ,/RK>ht/50vuj4~\0bi2k3tc.3,1.Q-%ji}5Er{G~=q,ø8OUދq֧m7b UK v &E:F[asmąWKdCĖv7g$1ojǴԲ .T328,%l y$ŰtI2 Q#zc~ +m:8#* +G[{Ƚ/ tR~!}$4e-ΤHU|Ɛғd'ή]{î!UPC0x2 ̿rX_W.v9+hXUNM¹8qʑdO筅q,%GiB`Ob:QΌWHB6[ZW`᥹j(Hхzhb]qY!$:-l܆\ۆk Vwxk'- v΍~I8Iܪ&ñz,n7yz|&kzDbPF{H F]2` SHo=9E i-Y.Ӹ3@P^}]M",Y2{$U,8QiIۤhi2S<|-3qD.ZP ɂĮOoµ)[9J -ߘ$4 _u8HXi9_0 +"rGI 9lʉ";;2 2:sx!N"J7O!Jhms3!LTovR,&hyg`B/ +uCv2zBX؄W#"y> endobj 4208 0 obj<> endobj 4209 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4210 0 obj<>stream +ɕDF ypWܭ݀]Gs8 _Mn0д{5r3%¼2QoWQ jڴ'p#nIೝ)߆JsۋG٬u XD~KޱۥXbf6k,OYÕknS ky7xw|Y\mISڐhh-l9NA47#pf.c2UH\C^xfЙD"BGa+Hd: !IXGIO}9- MVAebKL8niUm#zd*۹( +=&4 w=2ۏ]5†Q ^"CCgUYfm9_$ җogCte5%=*1:\n^saڴ83ؕWQnpD7dCvh1y;Svk:[5/AsHd6ˤ.Aj޽jzڼ5YVR'365J!=VGGmnT2A@|#! F >/9^suf#Xwyx ઴|މ/،l#@Yp]3ĔZf[:Jx.'hNiOU\k-!p ZQZìƦL\[08F{4ۖ;k7"k^M0[Ɲm'G5$dY?CjR@Sj8<&hEu5c*!VrBLZKޛ%l̥eW x ++@ۊh9xoI]N'l`U +endstream endobj 4211 0 obj<> endobj 4212 0 obj<> endobj 4213 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4214 0 obj<>stream +,ʻJ9PJ5gīwfRTyλY阎r w2rRC_Lg"s` G&ibZ'@.{[;[}i~TF PIpᵽW,$z&';i*ǭT$5OCфIUݺǤ2'eG~/S $Fg׮ՕY=$3Uѝ|5,DawS9]I%qEBD9 +5NboBGo7FƉxRgyBH ԷS֔. +k1kMq0pǡn X]}Ȭvgqv5$B,utѺl;F$!<ךLVNO'i>Wsy,W$T WE~XGDU?AYjS]Hc|ِ?-AߒZc˵X/6y nJGYIt' +A. 47W fsc_|ЃJns77_dO`b<XEnvD~=q` M͖#C +9rA^-pjntG-qE?ɡ + Rsg¦ӌ!p+AyFZU)13{3ks"h&ƢA휽ڰB·DXS}T +Ƙs7Bi о6L_kCr#> endobj 4216 0 obj<> endobj 4217 0 obj<> endobj 4218 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4219 0 obj<>stream +JP3z.ٷ0Rp,I +`M˻bcYСv wF視){A܎ֱNa6)Uw͂A{Ѿ63_{#41%ΝV@a^xːf?co CCR a/\*+v0Ry?Sxj;+]r PhЛz=`5~-&sKh?Sw k1p[N +4QbA@H4juns]&zX%RKϟ8"Z\Mb`oqr/d`hx`xg}t3&:槫0O +0&TNszCTs[RK4` (8tzT# iosm>]*\0-6@]+H/m2kwv'szbžI}ٽÕ񒖪BYn|AO-P@Qͺq H5XGI&_S.ps.,H +15%/5~lH#T{Ru݉]{-SCX d$o%%. jh=UVt܆kP'.AB6,cCB\ꤖ] | +IH[6|Ƭ }2AV3>±kk*t62@7;J`pھW wBCt2dĴp%kwEʀPiB7 VDK,΁Lɵ L +?ܓmse 3 E"ш 1\l F -B;:caNJ ZDJ#*ZN +?klȢ[VBdzHYz.=r`FN:eLx SA [K;gJB4MU7&$/ +##}@ ocTPΈGBQ3b o)V#B'̚SLT&M>S?L>d-Q|-l 5;dн74ui -R]֧%*Y4s/Juyp8|ڒ{={C!W5wwK+ܘ8]µIq{ہtmOh5NNy11'чYb ++WR'_ÔL]\Iv5ayem6B< l7Z9PyӮ@jGUA/-1IK&oqK\܊s +1԰o݃le+lq])!;!GW"t +endstream endobj 4220 0 obj<> endobj 4221 0 obj<> endobj 4222 0 obj<> endobj 4223 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4224 0 obj<>stream +sg03^f$iEAjiHnIT^~` gC9LP}hq,p#L%v4 hw r\aD^+# {D;Xa>iyI-|*J5WETlki(J[ҭ*Ufp}@@'ߛd=jv{jB6L.LL:P*AVo#QhXet8zfiPw>%gP~G2+}_AotB£3 u קvri8B$~=.t6T#-UZkc}Ƃ,h3W4y,@֓O+m ݲ +8Fɍ-N}Myb^;-xl_ꋄ̣s%/F 9';qY఩yU~UL93FX2ٹ^wm> 3c6f >]w ŗrОM0B֤88t?_01'Ǥn/ЕN*Xy3O ghnfHuF' +C)|xbGѰ&$Ɖد4HvVF]c.np)Y㺯yTl %>;hbauA?v2Ux>.1u~Jmfefγ=mnA̯;h@O+4 no7WOQ\>s(9&Cɑ4,\:g6FhJv5V2,Sd)ynsSeH1&]/*gCsnor ' %6l>vTG?j98"+`AFkq@hp5xf`%@2va?%2H-Y@as{D|y:Y=a!d  -nơX @C<4TR9w`yS^6mE2<?T(Wb^!X\-VOPBtj4uɎ}6z/2ⲄpLLwaD~v E-7$5֨mo&=3Az#CݳϜ'Zfl5F$7:TjZ +endstream endobj 4225 0 obj<> endobj 4226 0 obj<> endobj 4227 0 obj<> endobj 4228 0 obj<> endobj 4229 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4230 0 obj<>stream +5 =kMw:*nKP##^Kw|ۜ0&J{\GH\t {|+eN~uCqۺoƬSy QNXIO=i^Yͧ{ٷvp5Y}&|]JNL!SRr͏ƐN{*7yf]dM(dcp7[96ր_e\dXF&BGj3GARX]Cĭv/>@M;;[enJNoUa+ڬ  h w>fQT?ɌϨSLV9g 0vp*1fW~GsBAPL$fV[ +%L̹-gc^5ed0Mz&x^Wu~@mzL3c9(]m u%;i:f}+m46zb{opߘH v#_I]c;s+#Į7%:a=k?C!n\▱`ւOf䍻*EʏHA_Jke%D;56${˔rR Pw0%0+?9SRCq3n!M^w ~c90{;ѤXG4F$ J#E޾z"4#q`-w܉U0gn +'j )--3_OL ‰Y3't[:fo*NoNIvj0 ۸J +igx LS[oOi$0^$h8SUwUNz}y)& ΁zZha9AZ2gcYan!!'Ǧj3'M ,U4?&0R}Oea>9D<{jESҋoBJq(mxeˏ|9&ZQF^D5 2 .v4z|I%w]"%36肠*fLlgw)[?@Z26^9s' g V( ") sBJo_`nt aGi8G9Cx}Z3I# .x&r>eW#n=.n~49e4#öUL_lл% !;\:Ϣg(`yz}s[%rXKW#YJOڧ^A)KѷQR8#Jq; !WO!w17IJқE9sO5UsxX {F1{C)al>Iy >??|. q~".L~7 )&zf "UU(e({s~W8iƈ1oo%*͗uƸNSN4.Kt8Tn +Y9e up@'{+OOċ@O"ˀMH/}PgV4y \-GSu/L他`_+8!L5ZG6ɧY؈r))c @3jhؔ+NHNɞȢ~`7GX|k"¾ȁȔߚ K/5rAVsR=9T +r:AE.k%. Z0PvLHo/ bJ=10&@ +lHp,)`ZNJz^#=$`)@܆5%\٥@;Z"L3Í +endstream endobj 4231 0 obj<> endobj 4232 0 obj<> endobj 4233 0 obj<> endobj 4234 0 obj<> endobj 4235 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4236 0 obj<>stream +v tS@F#%bf$N &ɿ)UOVK{ÈmC^cLWWnq /s^gmd 77Is='^50~D4?8@+K{LxQĈƅ_~FE2Al|IM>eΩ(xjZՖ?0VP=MU+cDQp[Mc_RPdC(/'/~}$<ǑViA%!HL_bga'B\b7&(֦Ɵ"-4A\N_P,B,[*~ 1[ 1C J+tX5%r^.&Bx5mg$`fNTpnE풄:j/^T:H4 'qw$r*+kpæ :{ZB_RֺoI% w^1^tJiOˀUV>Y&<<`|J3CÌxy`ޯdSL #hpsnE%A'N&` ]w7Ki:x +9,l +//R48='ۀ'H$uBfr K|XP94)71 @$sSl%&$XߔK_U{ SWA?+>AX)PɲHbT@up'fvMw8*}q S1ǻA83p),JrW\Dr"aK4I@e/cTzDuf_&#pX- i1[vb4fF +KzbBl3t ]:jAxH)LK2hkB8C"x59ƥ #_JWpy^~Q4EW@CwmP;z<>ƹ+0l +endstream endobj 4237 0 obj<> endobj 4238 0 obj<> endobj 4239 0 obj<> endobj 4240 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4241 0 obj<>stream +$0ձ(I! R 6#[1@nr5DbLr<0 +eͥ\YΕ8z?%q;8LCM I݊l̩$W44Ӏ2Ro@.;'yȇNkaLfTwҚuٲ9XNXD +}*GN!x +𩗧~-@H|^Ow8]0hi,c7i1c;n7?4PH5Uޯ)lO|kfzf\Vu2Lyz\w0S $aNN?1d[/ n، ,f[orKS|#&Gc:AP"/J|&pa` YQƃ}u߿Ɂ+i~@D^μuwtϼr'LG=:'ȳMr&<&HBliB-6p%!bBH6 +]$ RZmDga"5:NUbf|}pl|)t%3)07cbJM1z9K].O22P/c<Y9M0Ѵ=[bȯq7654 TTޫ/P +Ղ-S֛'iK 86~; <yc@Y=1Iy8~eTC*$+"QE)n +w S> endobj 4243 0 obj<> endobj 4244 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4245 0 obj<>stream +up޻F@N%09n2==ȁjwC;v5znhi^c> k ]Y/Ofr3NC17͠kP{thGv7$KζיuHxZZF"\\ +2 ન! +97JU均DtzI(J9 +-Y<ʮdb=<9ab)#jo̰j!^S}q$c n\E|6 +Ju[re +p"J; eWnHAW)6s8}̥4+ox_Zxaxz ZPT~FYf +M|.$,[oEo V9 >]{8Q~7rH9Py,FZ](s.S6a.I;Q4$ \M!>C5E9jD nS -09cZW- + eSX̢|\&r\?׍[5EaC%VVN" ^{s?%*! =&) ΌA&ZEQ>- 2=Ydu_>R ,8:w)J"F!k&? զ +̌:"YHPkhχv4<9"4rn*vMiGYb3eO#6ڢr\yMa%t.E>vȤ-dɀgQJ6\,%3h|I 0&٬yFrRvQ2KEXR4 + 61紵U(Lvv˻R&c>A\Q W)!z*D+nAR$L@.ƣ5Oy"~S&( ??\B[5> endobj 4247 0 obj<> endobj 4248 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4249 0 obj<>stream +/J[[͓'!_fhS#*gYYJ9;~?^צO (fNM8] 1wtD/\>㢩-x24rV,1^9'۾QUL8Jd&nJSlr u><ۢw>[S;u;;mr,VP0طTp μSng,¢V) gՇ;dЬ*'u4Gqwj퇊]q:.ZFbvr.y֓=>9%bQWvgUơ1Vo53!UшVZ_3!a S0 +ē7RLٙc}/׌L2ӥIgD#&<NL2bNOg<ߥ@"Vss6+eJ9@Bk#dq%;_NXQʓcDýEz0 +k{L֜Up+NΘRS{8|?xv1q.}m0gD D : R=?aXWkv؄'y(Hي2k[FM jNp"o~͇k[+).h7 r'ܛԭ1f/P;o2uL Ĕ(qzeͻjG>d$4.#tm]g9H ❑z$`UN?yE8 ;>FkWs2\wgw2 +\#IPDWd˹2,{>fDK%UuȖҁ˚24bPF)n@цߺ,c#AgowCEN+{ ^%fHD[QDē;~>q%t7X g y&^;xA}*)-c?#*nMF@ +endstream endobj 4250 0 obj<> endobj 4251 0 obj<> endobj 4252 0 obj<> endobj 4253 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4254 0 obj<>stream +-WϧcbYRL)+U|H WߴIRsI^qr{6G)EG[tt7=u7Ÿ#`L}冃09=pکh 3sCf=q9cR[sl_`ԭuM3'2nLC6Fn@s%P17:IS!H%S + EX*1.}yf ]p+V&T*eYY$V0ﮆtͺT WswZ1-y;??5JL&: s`c[G",-V)r zu,Zޚ(P#^S'̙XAQsUMӾARg ߃mixa̓î`u]at^,~WSRWfu5H"Tfil=[hfYjI| fhBȎҷAL=O<"Gj՗E3DI`$NlPqY}K6fVP `4fawn<(*[ $(I Iuf0Db<{؂_^VX4/B(`bgyh ?eB~lDp&(Ye֙^ LU1ײk1; +1*7q0u:cם;>xŗ +VJu8)QAt"(ěEEw詛6 {8+z\궭v-ƺHJݐ c{zxg.t.ڞVuЇx»̪D0:At0A1q3XX3;i _="ukoZ % *L^qe`TlH(_J(+/a2w7̑.[f٢ 0x#P…|T}CC-v/D_ud+vJ-{Bdcee ?Y'vU|162} Rr/f: [Y|AXiN種};lvFt?(lr7:9rg佚v0!> endobj 4256 0 obj<> endobj 4257 0 obj<> endobj 4258 0 obj<> endobj 4259 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4260 0 obj<>stream +Xp>B$6vSfB&QBXkQ'՟Tyj!EzT\rZ>L*HJCHŏP?&TsBya##kݥl\؊$Q3$|ʰ^"7B {*Z~68sGٝu eڬ#J,~K۷`r(la/Ðh G-ש6-aƚ-*@vZR;.%T ^P"~ %l`ղd+z:OV~(֑T0NH rKK}FWT suAdIf&7ف%/&GKӬ@T4ztKW<1̽txxZ_p&< &o#4VڠW3ԟV{ w@XȲHƐ7;lGV@j~ xUH -Y%NQo5Kr&WUAP']I1HGȹ)/=E~QewA:+^k@ve*rG)¾DN9@s)<Z#pufi3Ҿ| A?kۉYn荤r'ǝ7ȣeyt6 $P(i'U.jx_`Tv#]O hZ0b|lHʶ `[irJE_mp0@8>]=.OTt E.Q+xfDzQRL*yCV#0 + K`}07(vO_FwX0Ȍ2 yLm9ap] fvQ'{.@4p/Q6/<Z[./IY54s>98-9(A|s偕!k*>$ c'm).-?Ok}W@&%Z熚۔o٠t&nwA*[ya&Zh$^:8't05C#_ϺG E"A&o!pk.T?<^2J;nW%ݍzOM[;)%3m  ]S{ +endstream endobj 4261 0 obj<> endobj 4262 0 obj<> endobj 4263 0 obj<> endobj 4264 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4265 0 obj<>stream +,~-dк,tz- en4j_=OP~wRHijF(4cMh'eث[G`3R刪j,:݉da˾F /$fd9G S.en_b% ȱԢCRnШ< |=woK.t"*ۼCV{f׃G?CTt[),B/'Z6 !GYBھ9ůzp1n|UV.~t2e>Xr}]e"r̰jVL`։TSҊpC3SFVƽ?P/ +.% }+ܨ^3CrK h*{vO~` Y']e4S-]ZtDbž5`׊Ȣi;4,e$V4ὐDE G!c5&Vg)OAd}贡F Q|貑t2wZ}A]5=ddSCl1'n( JjMP +jKKbJ ɒ^Li_ep;fWAH/S+UKnܓPu $TaGx>ɱ s JSig>6x-8E,j鄌&?)'v&J摄r_4p +S+mBr\iDd61Tt S(foV%Իxz.h!3g7O=~8@nI^>H퇍 W9 +5]t4ҽH$1aCXi,Z\aԪ4BX޳f(>0҃% +endstream endobj 4266 0 obj<> endobj 4267 0 obj<> endobj 4268 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4269 0 obj<>stream + I*PCM}{ezF;p`Noeyy,5mlІ&R+ybsTS_d5 _I͜4vG$XaaCCL ;OqI)'YK}UpXåeJRaLωm8z6.20$U^=+R€nFR;Q7#q0[CLKjH170'q|ad E|?g"B5p\%#Ԕ!}IU k@HhP\> շ\+rn%T> +E +̣_ET~cN` xMGhQg'oto,wVϧŪcЦSJɕAWbk%D[3] +V:|㕄:Hn쮚ܒ^,qEJ m8R!o&=Qw-*Mи^kޔ.!黵A%fMtsjg&tl_g= uid50JO:*(LFmd3}!fVE&miU(x9;b76QI&i9 ω=$弄G rU=\R@aBp찜+ > endobj 4271 0 obj<> endobj 4272 0 obj<> endobj 4273 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4274 0 obj<>stream +Qs3?õ&2nQCbsế;ҭyջI6Ts"t09I]Af."Hi> xHSOX}oA]S,4^8MSN(oV ꕰ.{ca>Ezgw:;-"W;;7i;XNPJqsnt1uE4F +PߨIuR'/8(}s (6jmtqDwk/;A 9WGs5ndgnǑPvәPQ{]œȐӧz&]nKH'=`@bF COk1}چldq83*Q_vPfA9ەJ? MF JVh:i E}']CeSKu . C@Zu. xZm-hv#A?˨{Wb8f1jUE-jo-erܟͷVs1 +y~.=snV6| 5ZR [Y)F nmr6R;g|`螾mrN0ĮQHe,/ '(Fӗҗz86ŶpqISԏGG 9#3=zYf K W3ME}!ߟժd[Xt(e..PyjƠ'QV J/7 }3k̕zVі}k"Pv7p>.KVBz3UI`s 4U7Z2v) +; +endstream endobj 4275 0 obj<> endobj 4276 0 obj<> endobj 4277 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4278 0 obj<>stream +] 0tvrz@'M+em5($Vd KckO`ܧ֩^##me2Φg Z3j` |yr>"?v(,#N%yKnǯd9z#{pJP;?7% A(X$,A~VG| ǿP(Iڵ5wWՌ5`oَgE+*xW"W$ur^ZQPi@4e@.d<qR5gY2[{Jkz>=}zsQa};Z4s2^\HIb~Rok}ltr0CTlmW3Cgt$VW&tTd,m#bnv|(=Ղ ik AaHf7AZu5UH uq,8^ TCN,BxLOP%G7 󖛋s4ս/ +AW)ReH1xAx(X;m- M/55N yF!!%QšB>).DT6kEm,IJ;ch?99H _&sph.g&"OG#E~`#;W"y7|z6\8팩X#SojzJ|9.Hr!~mi7tD7kW1Ju? Ol)&Rŗ_-aAJJuNfj?]0[{auAS)>w1Ţ:{Fȩ +աvA[>-z=Ԉ)IFQ7 Ƿ=7kxn厞lN،Lȶ@G/Qd.+ gkEv$[Ԋ&=向* ۣ3ZRq-lY-靦9 obB6ϥ +endstream endobj 4279 0 obj<> endobj 4280 0 obj<> endobj 4281 0 obj<> endobj 4282 0 obj<> endobj 4283 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4284 0 obj<>stream +?# +EJBVLY@T5E-=vՒV5ƘEeB 7O2/ֱLA,he2.Xh^V4lGQŐM4 ù^s8Ԡ9RgD/ޢ{QbDOv]BBzxax[O6]_$wuf 'nѴ05Žy 8~!qruҵxD*C Przu- n +cVͨfdqQMO}ױ r@zdf9XM$i2(d7a)u2tΘ۫.)7Wj{b[K=!!HlzukQZ%tDݓh\|2ѴG?\ua8"ڑqI~(翭$okCpMh@Gc4|GHEW]&AUceܕ.5c(NnE #3 2q)3ݭCs\Iz7HRZ`AV~G҇Dg.e]~;^tKm@0TG/'@af<-@ } S߲Hl|NN|KsДXs1lT$ +t~ϏSiŬ5huyI)8 y8VF8c'Wl/ +ݙ)*r=o]tV˓緀t/?.u$qiiI\d&Â&EDwc{d_e 1T`8#g-zmDH&E$h5U_%,ӖdT bEI[Z1dDrXs.27|3cP 11Bx_´rk\;q0+ur;lkbREkkO+$xpUvנT\B>Jdybm/9V}Ӑ̭%_\> endobj 4286 0 obj<> endobj 4287 0 obj<> endobj 4288 0 obj<> endobj 4289 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4290 0 obj<>stream +t.1C'sn)k +<1_ PS\``P߶$ y0e\c\NZg`HN|RJ̿R5oi V%?9%>e0v'dL** +%3^~āǾ EVřj%Fc~&4k(}Y?lՃ"?SKC\{)w<`:U[:t% ZUtl (ž1F㭬8E<(O9}x7*F_@A!'̓ʸP?ŝr g< kvCF1}-FRek{ep(;35 QcVJ^cK MRҐ"ƈ:*jh7Ilmҵۜ8*YA{G87 +5eJfR&gtmU[c3NU9bVC|cs!r/pΤ_boVxT~hԢ GnUq" ;n@[WfDIl5 $iE.ahuMe0YDwO4@+8cyZl4Ox<ꔛ;~AÊz`K%ɸ`i)۸{iwr;Ő>m%JF\pF V#bbm$2XOUU8KHt?8BߴFisX."At>p*F^+ՃxǴONxxI D(2;& r2.ahC6 +endstream endobj 4291 0 obj<> endobj 4292 0 obj<> endobj 4293 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4294 0 obj<>stream +܉$_oթ -qWd&+h`4Q%ynoiS3 ѫq!+(\h+oPwGq|/8>:T.>{7:Ž7j2sYJkDG9/ƦC[ 3HCl>Sݏqw`~)33ԑ_mW娧z4ܔHieh1_ 0hy=!uz$ySBx8ԍAoStFH./5B1ۚ71 p-=JZj<(Di% +1IW>w۶ƇE`C.rPLe*\6Ecχ%N2iowyq TQcpL4K"U>aYanx\oLY(#b<:!8t٩iG NDe" Ǩٳ\b3i{(u\9jfJ*H,~#L5ҁ@(GѐP7,d3=vu ,>GQCYܺ +슳*=YԦLK,}&$QeT +Rϥ )@k3D诡.b%smL5O| L(D'dHu +&ܟ~ PM\F's+ǯEq\oq F,޾>c0\!Eh) ڄV$ŠU%FϪ|v?&>sxX|nSxo5&l_Q|۩ %2r߆ pr HaYOW.6azk/1z\TձE\?v֐CdpG}"czA4Ih T`Q+MeSO707WSvzMތA5vb`(WVu{˜l,.sbuK99%,kُzuW> endobj 4296 0 obj<> endobj 4297 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4298 0 obj<>stream +p šmAN #=E\I6߹=h6<3CDfrk,E]#C6^!u1 J3sYtNoy"{9Oc,-h35M)sU{I7kƐ֩*]}Z@\kz~aiM|n*FM9t3b01KobUf#9E4`;0K{}Vܖt' +.N09S6 =Vd(OV{^Rn}299;-Әm|'F˚{VE+Z7L Y>`S62ñ ))=V]&5(XW〷S>j_z%an^׉%B]Yia׳W3N.(9, q3˥9f_6Գo +vM@( 5Š$y ~O2E'U7 bh^\rTN;?"1ǜ_5ܬ4I_އ)vaUJ&dEchgSb@5d?BL(wÕ8¦'#o7aOm +endstream endobj 4299 0 obj<> endobj 4300 0 obj<> endobj 4301 0 obj<> endobj 4302 0 obj<> endobj 4303 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4304 0 obj<>stream +h-=7ssy7#|SMXU}mn(+UA4a +3Fj/ՠ67Î^U}BoLrU#hq0thҒ4hNs"~Q'ALrvP>WXoʵqH?z3zjnc5wo  t+"_÷W8Ϙե@nzBtLvv۪|Ub~9_*zoQ(ü0Be)*<&fW>" ɬ}Y^7|ֿp-G`dG'{zca"wӕݖy\G +Wjx ~>ϩ7W> endobj 4306 0 obj<> endobj 4307 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4308 0 obj<>stream +|ΚNIJN[<v4}  EuA+~PQ;J +:1ر+(eH {aﺍx#L4Z%O2-pAulfrc5n7U%mÖT@PbtM4Ey4&(\}ԻB|)s76{0,2ScDڃ:bbdU]H2)LCY +J TU,E@[Km:MvV=~g~u1+Z"qy1 !Fm7BMm+/Vf|w%P&/> qKGR@-/:LH>+&KJ,$d*ZP͵f!^512dl&XST܏N.(괿e`UDy]d?2Sk5,9. a  dVEs$+nb\k,y*Q,2`'~ JP9)L0>ϐm=AnRm9fU*T:@l}^=B W 41^-tԮVrXA@_D#s'i&ho-\>o۟eKB>s;t$65$$ Gڼ~ej.d9tс\/ƘV:ou#d%n &.*֣N< z^F֍baQ^5 22D> endobj 4310 0 obj<> endobj 4311 0 obj<> endobj 4312 0 obj<> endobj 4313 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4314 0 obj<>stream +OfЌؘ +]0p +mWYvXjs$rU0OyG}@n_:EkTZ`5"]Ƈ8!"D7=JgKw)NYm&#vƢr`\Jv /*mKȠNx=`f} 2zN$` -O>Cg4`y.JBzfp^TU/)({ڃz~o䕦:sd5ˌe?8MҞ?yDm,F8dPWBdqee"uoS93n8Û9}\RZ p}c${#(ލRiVd[DE zMF@"ʅ[+%t?t17w]!J&i4 +{~n3= +endstream endobj 4315 0 obj<> endobj 4316 0 obj<> endobj 4317 0 obj<> endobj 4318 0 obj<> endobj 4319 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4320 0 obj<>stream +͉ᛗUZTڂ{e١OERcz]7/HU ]KLM5z_kq;:|9"!^:}Xi[غ^|v*ӟ-|B4reVw,!YEv'wҴ ?cL<$ڷ*0DZ%_ vWYM7Y*.nr Sc31ݹ* +2N 2PhXt_?! Om kTsWǚ04)HK~]R1r~i&M"ww$ψ@T&ɘyBe9=AdbheТ*/a]I@dP p2=1H ?@i!`o>uZRd&X jwgd\eZ>n/M$iJ>c*{켊)NokS~Fݢz2)%cǰsԖx,XnHy-ͱE\3S~:l ╩'QMd9:!lC `d7&»|;Fx9/Ÿ8d"MT([7_nJ +9N/Px%',͡C`YO{ϕj۪n^i~Y;B:pd4 +xkY-NRȪҲ Ϗ_f/Fߟ[䈶 GǺ" Et|i>_ZBit/shxPdDU'tcHh"pĠ]f?e=9m|ao#_?+:2Fƒ0~) 8*";ESy&Mܼ" l]⡨lDVw)˥ހbk;M!WR'nљ颜Nt>Jv:k5dSqAugZ|Ѡ?.tx*!_H>Vq%"ϚdC {Xx>G;L7D( \:Λ{t]OWG +EnƚмÀ# +kq;rO@VE nh)<Ж,t©"b最ZYgw0*'@GhhŸ}l +endstream endobj 4321 0 obj<> endobj 4322 0 obj<> endobj 4323 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4324 0 obj<>stream +74~LhSFenTcG5fY} H"8>aE$©\pٯNJ,a_`m"uʐ@_{2VΪ_h6qW%$ D'X,>XHvGEWD Ј~X$TKW7'{duO#J\UuTfo'v7o"sON\6?俕ַp(rc"E2/=o̱f*qc[NlHq.S*X|wAP6n.0#aﱓ Z+:7d PO'ux +Tǯ[~;[)$$& !3TĎCb{ wP19jRmڞ819xI ,׎־g1W.h&e:aSgp>u{=#ݔAS|ʕN̥1͛KAD$߭ `A]g`sDذtȝ>DC/n}:нUƵ:5Ubjt C< ׭ZAc >AUBxR$@p :QJ?ׂ]m5!>WA7S8xDɓ'G&x@꭫~"+Jߗ0@g.о߬!*nVϤ V"C%L'^ r4-E'`S)B|:J/'ԣej׊8ʌo+ict~ ?U$#h/øWt N !ڟls;3AC1:dM@VnڏxP ?=*ʖ whC? UP˔TOEu VTW,n&L1[O+G?f/ɚ߫vH$+1)k%cpGwAcT$rEȵnX 226~' TҚװM -Kh e>w:?^"h/Zy|{*/L!R:K!Z%}Ƥ߫h$i[Ex/X³qG d_IK.U$tQBM'z +endstream endobj 4325 0 obj<> endobj 4326 0 obj<> endobj 4327 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4328 0 obj<>stream +\.n,=7:?>& ތ0ͷ|:vI)jM |YMαnގhzc o܀HAZ(O"΄K[0)[jxN(H,j3y%Z4be~v*nCW˲N5W`†\ eRѰxㄬz:*ODь8Tdx&i`zSLp>TA(m WZCƛ!RI;kF5iTn6Aйҙ|fb;؏B̺=GrŽ{7mU(,ڲJ\*NC[/}t4Uk 9$3mxw5E I˄ +rπxOIF:E*gF{P +]fR\hӷi6Y +pX F/'!`aY;w,%feXTL;VuWO RVX|Wj6huLwNYhc,n^-/Pjx|c[Ew|&_NUZ 0sF S /b~MDT5UJe+W1gNP2?5kT060˺FyqPUʀGQNEd%]?vBᵊ oŸr`ç:Y{$a?YN@@@N# +@0,K55YM-#TPZ{ +a%QC ?Kc' YpfWRװB:EO94,lHhaEݵ>BС;~3Y]0s H/ZI`8V "qSh̷ 8 &IƼK=cwbS[=s?nPӺ5t8U7Vjۥ35Nz+uA*u'2Cjbޖ!P6~Btfi#=|č&1Vs?Lg-A10A Ȃ  8q6>n%|\'>W89xN+\*WNLB+9*$+A)dmR/Gn25&GD±Oh U#'^iEh[6Sܣ?JNʑ}boC26{aeKd> endobj 4330 0 obj<> endobj 4331 0 obj<> endobj 4332 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4333 0 obj<>stream +,7t/&awssˈsp(+] xpH xHc=,d쨔= A-l+Z0+N.?Jy,J%m#lEjdf:THBCw[̫ Ė`zzItť6%;@,zwjqS$'Ð̢L ̂:"搐@}lw4^x9 +_D8!EC7d>샖GͼaxGwݞ\y34w×8p8w%Y|Ky}8 $p)tJo e)Qa*n +ar/w,NoS_VC峬= kn)#ہ̇\q(W,q\ςmlr8\S NMtaswb ZY=`u&a;)0hؤvy[ߙxSVsY~_z{Flڵ^>vtCFLh;,5[Do4|}9ܚNh|F$wT ,ޙY;Ǩ^jRF韮2~gY("/!LȄ9><)E QT b.P,?K;:i5f-pZe0GXb6f> +nV"zw !6˃,Td&dkN~G53I\`lm: %KLH5~~dMuHPy=Nœr" {b⭜nRnOyCBg H!h !h{I7^ +`̲2Փ-*vm\> endobj 4335 0 obj<> endobj 4336 0 obj<> endobj 4337 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4338 0 obj<>stream +Hw8CõP}$UӞ2wɽ@l>:9Ct2Ӆ۱wtPq׭U7XCQiJfKfUz[GKőIzOv4v z"BCF~$H^E*O匦E mXZ@Y#l!`{ ^䔉vɧx@Ψ\Jݰ^ZB ;mپh2_PCj|9~b!.a5r0mTZjԍo+j5?i#nU+P,,c3X#FΊ(K5jȧzBV݅( b܋Yjua +ZKOf )G w7>,\rR|sfћ)\/9r@sRJnj-'rLzT$\Sഖd$#+,Ȇtg gmlszl;aWOWw.zО3jByl!K Nyn [ϥ !n8t8AֻKM+O!@/c%ϥo1CƿÈk^|L6xM#' +"8%:xo]$GlU|ZVv//@[xXOC2Qv + EY2GÉZ`{Zz{oN-G&/,|2h1T+<#,6'QEٳdl5eyHb>AV'!O@UH:f.% |j@a}u*خhCE HKѵxpP HMãh1ҬKS`qkH-b 9hig-m絞JEBӫnТ5C+{;J3TNlsOSңh-<bE@NTp'mٕ5UW,$y̨8y(6#SW=T,6vwNCv.34ѸPHs~ +sCs⍘JVnQ-0HD/VۦJgG +.;R7*_9JzqݮuZT[/ģ J-V”SUOuGPamw +endstream endobj 4339 0 obj<> endobj 4340 0 obj<> endobj 4341 0 obj<> endobj 4342 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4343 0 obj<>stream +"H2/.bdyd I1ʧ&9tQo/#q|`vR b٩J"`D)Rr[y148y JnC7S&c쟵FfO ՚G9M/1_uBx} ڰ"ޠ +kocEnJWwzzb ZVI6E,&AIq)I~8\I96ޓJ ~q;qB;OAf‘`;J# ?(xi+-DXXVl}d1z?= QcQg5`:Ba UL{$WT5PİMtF T j)EÚ鋺\ƂoՑb:rރظ.4c? HSI{K,u}DלT;E3qDhu3ߵMصL 1I`@FKalG>d*h +g>_]Ou#Ԩ:5ݔT=07̨J3ܚUu.ɾǹA%TLm42٦Tܸ-sf9n] +ڽDj/:֔cX\t6@$Z3~&>8αA*eO-3}: COh.q13["/Tm*UqgNxή]zGga%}+nM~~85 +;0^!'k̞wdH?G*7QI-4 S1񡘽m+}6>-\yۤJf ,Si^0`6B6ud؄Go2b +=혓Y0H|*e4yi,5V+Elró$⼓wϑwiƂW(V zЍ4zEN[o?mڄZPedPvUtR`B@tZ +endstream endobj 4344 0 obj<> endobj 4345 0 obj<> endobj 4346 0 obj<> endobj 4347 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4348 0 obj<>stream +@l/',$z!CWS?|luO<ϋ\[7Y->!%%jRQ]\˨ʼh/s\$fV7|#:JTKR)&VnMZy-u:>e; ./n%Mݯ%4)tЄzgܭZO̔Oޢ O2@ޅlJ`5[-~y9Ck2$Ir8ge3j[djx%25#jdyUt@nͫ5]%<IXֺԂ-}кLG"@5#ooC+c&W Inک`ξ r;Iԏ3YW6>g?؂+ґ$"p4ƆqT>\AH6h{Hk>,VGe{ n[(>^QT(v[Dt90 l! |('ٻ 'xʱQH>⋚B6cW:7j~tW%Vq[b7# ^_~<;b̈́ib7OK6]|Lݏ~{kM')15:VۖdY'j54!jlġ2[>pFmؑe,IMg7Mf`|WƅxV\G@(ݡ J +-j״"9ҹhuMNfěݜ͛Wm!\ Kq`h?cU"BUU?ztg<%; +ZF{śYWڊKSA ᒹEBR-pcq`&ڨ^u݅4tVQD<*+kX ])]{NFO9DD ׃H,Qp ׵$͞ !=)IǜT|_4Г\z$ *U1Khc +Yjh0&Ei +{`BVEEJvrErm +endstream endobj 4349 0 obj<> endobj 4350 0 obj<> endobj 4351 0 obj<> endobj 4352 0 obj<> endobj 4353 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4354 0 obj<>stream +OIf(:°qu݈HOF8߷}xnGˎ?_?v~|ľcŴ&QI +yI`I)*Ͱz׿9weI&:)>N[ZC.Nܓ<1WWA?6/_|(GlXwPwQʗQU,pVn[cy;Ղ Ŗ^`mbOHem9PA0jkz5 ={Dǽ)9_-: Huֵ4=3 5L79PXbmQ"?Z8N^cbfOJ *Z |kF@BvK0ȅIO!,pTZsDG}ܦX΀ӢW5Ncsg>?&3˺m(J5u6" ub|q(H&F|2˫T> endobj 4356 0 obj<> endobj 4357 0 obj<> endobj 4358 0 obj<> endobj 4359 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4360 0 obj<>stream +(P.|n"@v`TNSSF[[Ʃ]!a< 1XflNb.TqUuuRLOvLG Syh.ߤuuZXJ,?bO6xzmw謷 ;YF+i%QxWPqق];)UL8qInMi!<be47'Z[pqo~ (f7bq@Lzn_+٭JW 84*ory=o +Z{Ud. |T@a}`+PP> .д[bO 2+A &s9kax1t+v70Cz7.FyC\VV(ib6 _{7k w=#!]²+v4^20ML!Ff@W1iQAlZ$F6^t܉pb0\G0v_2fgMl0!XtCK󌋍ώf>ѐf1W$2s\ČdSWcrMZ6GEdN +㹟"f9V6dR&4Ķ`2Jx/J +j9ۋЩf8V +&}LFpw_Sv.ZRMB`rso3 !I/x)!?U֨mϡ+p%@(0fKݚcSļ>Ea~{;=EG_@q|_[9zu>)JKyǽڪ:w6ʯ^oZtoЎe yjA~Od4 `{}ӑ;f".7=#Xh /Z؋/ \͐Ese0[KQ" 4mh f%>5vKMDV)r IyuFyT4"Pj$i~2VvYS"En2s̪"LņAڊ;4;0e#] _I}zU~|i:}I&ώ߉&FiupҗJ;808 +Kn!A$A|xW p4), /G5!.&4u9֒C9ϗS9o~[#ǘKIB?{xmαxxLSv̨W5djsd6EL`-!3rC mDڡ8??zVG6Ĝ-6Z[mcqU\Y0r+_/HmSG+v4֥S|Z7~Ctp%Ŝv +{ǀ/`T ڐ#:^e~M>6nS3">oZ=wyR b(R_΢{̊_67/fo] b^ag>dca&ZWMTố„@K (LABwp9&].Gh EZs*KΪC&0 +^mS0?xwvE=;"yTmt2cI%:~I>$39}^+tA̞$G_NQiܲ&{ߒː:6JWA8M`H&B:)sNO%V +endstream endobj 4361 0 obj<> endobj 4362 0 obj<> endobj 4363 0 obj<> endobj 4364 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4365 0 obj<>stream +⫗07ƌU8Y ~A\&fs:ցbt_c af/Lcܞ'I-KAvyJ@sX Y읗Yeh l=)Ed2zPJ4ὭE\P6EZnY J'&G'o2alKvP{چTy.%krQ/ՖRw$J$/ԙƒ}rOMto:V=5έj7*~+`V WVo󦵅})lT}{`m^~r3Bs/.9k %. +r!'A +dd~$:"s[+|}?:*tz_O/ǣ[,I}DVJ\nL?@͒(~)d793UЖ|T D"P! x` jtxߐFi{EUT f64xEfօ:ܫ9c\}(f4P)o~o1n]崳ڶ yp`_M%jFOHIKz +зReJٺ DwoP{V. 4̀ +f5ڃC + Ц9qu3;•azosY/A*zHe|Qﻯyi;T' w#ьy3N\.dasZ|Z|FS}>觇jChd0SQ}x:;*KkI#L,SE5RNc/B#૸)B&C,@mx\g)j!2 zVC@[X@-Z$m%ߤ;;K~Eo:l T~/3S˶mzgC30!jxw >8]ӑ6X^Vi4( F+ `CG3q^:LXrtVz?џ[GG]_5C8#s#xFs{z%i_jۜNA9/ 7+u)b\N1|J3T+^H4ETxеV-P}p+!"κVk"9 /k)dM,`i&e>+Uu Fˠ7_7D.]u"B_$00V !Pl/TGGp$X'}ײN#u D$2j)U2k.Zkh27 Z(ecP0< +endstream endobj 4366 0 obj<> endobj 4367 0 obj<> endobj 4368 0 obj<> endobj 4369 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4370 0 obj<>stream +oʽ <5֮~^|{'K] (Sі;2.=zZ89e7Punsn.bh*34Dg]zHvAm_pqu0\xHpa{pf3,cD>!O&`4ܷ3pk%D[xl(PS`mh5̹_ҬI$VtR yJOkqp^L#dB!u4 6C4dkP'{Ce8XZ\<$kwJCuGJ'qM"Ћ YYlސ?;/f.UDZj^w$3sa?>~FsGޱ utx#pJwܜ?-kB_> u?0'rsI: ܮ2 ,:iY=˄+!ۇS[P/ R앑|"[^N =^6 `AyJЙleЪIo Q +jN2ʉrJeTɱs#ܸ0IUGn1D=$!g {@&T /O[69mV cfffmz_q٤mٗy3y:ө >7+F(\ 'VF`id–'ȮcSa' +ςU.anU23.=6]Z8N#Ysx927~שSG!ENYF V$}vS(JlKtdZ#H;F 5s83lW UVn1;w)7֍4( :'`{w&c来z2Ye &3@4m]}:d"&ΑGݠit"F+"?e`t,ڳAlRD߷;s7RaxAb}lZq5I) ԚFܴ`yx'HEQUs~Mc;u*\Uԉ=Q=bocV" 7eSLRwͫN rM!J@˂ާ cy@%x:R5Jpr`ܶ^ Cn+f$b]sc?!Q)0ε+Ϗ[7)&PN~1)Hh4os.mJ:e4>ng/,>SCfrg +AT"hm4*iqMPC ґdKv:Vzm>Ny]E7D (=yȷ|˖aN^?< e柍=N4X#_ܖQJrFVϯӧ' 0(lY^Qh UG})b)稬wz3K Wqɘy,V텀Ҁ4g&X!#N[L;Sp2蟆Ř/k=lZEd NMidOb=WpϢ/8b2W[mC@a)Z1RH}!FN7V f y{jifĠ;{)-mͣ۟r :t:"U@Drd5w#3U8~=9<v \fJHGe +endstream endobj 4375 0 obj<> endobj 4376 0 obj<> endobj 4377 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4378 0 obj<>stream +]FEuE3E-y?giN9BnqzẄ́Y͓F| +&ĂENOaRQ佗H`Iuڡrx1R8w>tQs-X҈ؚ g:k˰j`5N([,yWJ2x}R!V{I8T 5,?8(y=WP@.$/xL桄h@Kӊ=`"ت1ȍ0HL]§}J=Jʸ:#F7 +6nvyDFw4铚+oTQ%ؕ6xå,J}-_NDsޗD7H{ĩK7THY65sD-S31~bAtK?pEtA7Ѩ.YncCGѯaYeezx92FÏ֚ٷ/IjnZ!ҎSR^fԪ t&x?ҳ-wo)~[I{zW놸5ծf(lճ˃GsZ6J5fɭ1j(CI1sj]Fبj~#3ęXӀf ++ T8XnݼBf:~O(A1>8'XŶDY,FPd`ˢGj;mz5ޓz1{@%ûO(;?'ٔuHSjz#:Np!X8F/[䂙bm琽 -VJba| h` a(0;8Q/^ !W oeՙe**ulPEH*-?Xxl #ڮ֣j߄ +gWCӅ6rjģ )1Hrb amq_-I8d[EJ +endstream endobj 4379 0 obj<> endobj 4380 0 obj<> endobj 4381 0 obj<> endobj 4382 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4383 0 obj<>stream +X4FsdJ!2Ҝ|P)iL5sy0a ~hvf=wRL +-tr`~8 rYiWDB'f͕=ȣ ׋ZԫG虅qs}UVnyZwԤ|"ezie+f֔C_gGoAG A#elGsٖ>@[I͗ * DrjLb~᜔VHuiN(.] w!{2 xz0#]'ܯhE [8eDw `Q4@BMCaF I +VV +oqdZPO!x~OJ1$hʺN7kvV!#Q S8t(5>?I Eb}93qB]pE8yqQ!a.lY[oݖֆwf٫UT>Dlc?5~oH :c> endobj 4385 0 obj<> endobj 4386 0 obj<> endobj 4387 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4388 0 obj<>stream +%;Vjꓛ3Oʵ'kV}H~.C[ +hs]!PLbݵ58^ To_vJBLay ½ + 5^ #T&h OCcb`Y_%DnOcW" +E)kحybL+_T/E+˵چ\Ѹ8vߚ6TmW,iy'N4J-kwS:>^&'x+oLˤ6krȐBJ(còǛ lyo9ҫ__eȳA(ghPA#{xR@TX:\h 3# <TNC,˿;fGF )GZ'R`[ף1W8۟mfУ17$ [_+EYFgǫ|ւV0 +հhk.d8tn`\r2H1![:$ (f.h!M|!l>_gȍcq pop81 0f+i5PƷdO u|WU-S(*Ja辷N׌8}*μFd/P!M]l,(ue?|'-$MW5X@Gp!ຆHK/}uqyI6 Y+VN)^bq+ZiaRZOôSp5})\+Ǻ~}n=|KU_H؜ͳԱڨʯkP-z}Ӫ.}=Qy)(ID}̂f^_;T?`#SQ熘fAS]:=k0UR(zM ӗ(- +Ԙ +hKBiF|angmE  ILm]'ptD=_.hgƗ} ,}nU:i#Oj 2[9{b* +endstream endobj 4389 0 obj<> endobj 4390 0 obj<> endobj 4391 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4392 0 obj<>stream +DDFPXqϛuϑFt +K;Uz4ˑ.\>޷ Ӧg4#!gO!{\u +(( {,qT}tL +y.t:{0>q6"qC٭{\"Ϥ JI5$=C-cefF iAjS$U~}A#fΊFsArh0 HJ$Fjf㨢$-H6JHqM!.*"x@MܫKߙa +TAjzY1mK$FU2Vu %Gˏ/&c3B+E_ Pߧ$BB鋖EN㶽%!c7/v{WPqj[?TzsOгKe-^#"ɷ fHu% [n,~q{אv-weK_5DOZZLK)z~': ƸupFt#] l4`~ ZM8ct%c"/ǭF04(7FP]^ŘMxq4, fQ/9y -e+?$d(Sq] %1_SBS&m +s|2ʄa/x5t_Ś]?o(t iq|Z]6(dAnz'cUŒv!@+!vSYh#:=2YL֪CLK[l2)KLReBṗ󈌁OО"K((62}/,zhܽH.;-,3EwѱsՖ˃Q郛eבdŻH7I +endstream endobj 4393 0 obj<> endobj 4394 0 obj<> endobj 4395 0 obj<> endobj 4396 0 obj<> endobj 4397 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4398 0 obj<>stream +Vht Ytm'Q4H,X.*]ǟvwiC5-Kn7GBZGd`IǏEYA|mfE!q2KFcdiCG==y]AAiJ>ew^{@!p:G{ hE0GXn]AaUPS\k&/3bѯ0QyZ΅:ۺUf mӠJfp$<E8~a-2کn3% vWެȲTE)wŎ]lݣwP|0{W1SDj{#`: `|EoןU@F5,Ϯ#UK"IQ]?n5'{GGF-3JgFu/m^=Xnh+!v=8h 5{CoyQcXh5pMaCHj=񡿝28/ ^Vu %.S$P#g3NA|qq;vRyu/E!ؿSa֑W %]pUuy`9xϨ{ռ$5_1Jvi]Z;ݿ]]PJÅ2qb呐lww@V:3_x)1z6! I3t7*8bB/OI˳ +,EkUUA\>ϡڨ0, 4w*%84l {ީ0 MJS +- LJͷq#`yM%oדzGөƖ5aK :I<_=D2q +jӋU_ !?:G +h9K?0鳗S*84"W\0/CBP-w)w5iuJs2tšIاH) +`toARҋ`g ѫCǩdž' PH'/p|i 3VH$ThCxP߽;p7B(Y0duG0yFḃ W ^kv{!|&]Mp:9k8bmea~ $乀lZU;VF&d uCfNKC嫛;H|Γ?G} +t"D->umȾl]gf&fKTx$hΌ^VzU9 +endstream endobj 4399 0 obj<> endobj 4400 0 obj<> endobj 4401 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4402 0 obj<>stream +F43;z9hЍy*$ e[!u;23?=Y=M[5BTZ*h>R)o,w^XYp5bm/ѾTML }pFSTD줚3E' IDF^( XP2z:lJRs0>eě. 7YYvUy+^$J#yO@VeɒB=jt=kJJ;*16~3RI VN6>kbi|x6i$ +vBH= 8#Z*ӏB!vyî xv޴gt{KI8mR7KP.cHM.uN J"Th\a??]6+CH;q1rEWPFs-pACnQY$/:o,[5z|Ayތh'647Z%ːs:_; `+TD64+&qE!w?1}wpr~6Ɛ+^d s?"ŴDnExVLyU9!vsޫ#w q8[H ܃N83W\nȩSdsf3DS!yW]ܚX G_$DEԐXlI%mٌ=E%dFFG7|q Wo)$4l]bEv`<+.gD1@Ɍ=#q,="+/ķWK9^Ĩ+%W$!3 KzJט%U8IOg ~ +endstream endobj 4403 0 obj<> endobj 4404 0 obj<> endobj 4405 0 obj<> endobj 4406 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4407 0 obj<>stream +cәʝ%7QmSŽ$sT_Ems';]< u86*hӂ&F0mP>hUGxNFpn+V$Kپ~Me-,bVOք3^X= ov|MIZaTYUS>Gj?'{Lf0_zwFY*e#%q_HeN5WO= /^QhDиgV7Ĝ3a\}Nh_qM?RF] CyXd> + _@N"JX*1t5e-&;hCGOKqbfE%(o$5[$e|YR1<;xY +8/] _Oڱ+ϝotLkܽWq$[̻0k ۼsVɛN:fŷ2%EaGeaKOpC]m*vzG ERG&_ԿU4!tFpWQ|qTIu v\z=48#.} +N|wB^j2DP'jU>cg&zD3y>JjJxLyޖBSF@-~QDCPX'ͅ-L;l DNAq$<ٴm!j*VYi_C蔈O? +dSlQe1+vtLc&PatD5y5-%".Tȍ1p}BlWJ3=L+ZO{I GgF=qSIJٌof VD|w*U`d]^($ϝr^Pҍ8 gQ31(C`RZl!ACZIKlw{^J@@<H+\1n-Yu$|}w,ՎWgZZȸkzw)t3U Z9E"wW"A)<o =3hاzi\Iz垣 +`f3eZ+j [ȫD~LlCRyO̯ʹCk@E.cf2S_6 6 +endstream endobj 4408 0 obj<> endobj 4409 0 obj<> endobj 4410 0 obj<> endobj 4411 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4412 0 obj<>stream +XGOeiM_icΏ~X4ŝey Q{cMNiM28q|ԓW2Q\TN{\G  ++שK\cr3E]Lbee,sEڶOt ̧dMc.µ4C(`ᒺ'1->luYi0C7p$Y^մb.3PdG{EԄdgTh=Syҹ#[_(@L# ImHꆻH:t_&_Q e26tzZ`C-r41E!b75~b2mule!q3Vbd:'`5%c}es>Jcn[v6;Tcj^7g [A'KNaǕ;X;BoqDXuO!ٕgj3GWRd 6D,_~zhh[JfIMAp.NX_GDy!&âE-˷]3 ڊB -XK7rUpDe?yP`~zʇYA2*0\6#WȦ e Jl3h\π-_BA83iVZPMZ21ZΘ\(Ů1Yyh9~CVȄ~vm0r @sTYu{νT7^Cu40rK|5UUB~DY»S/kR[>8·B}0=)a ^>!yȢpt6= E=> endobj 4414 0 obj<> endobj 4415 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4416 0 obj<>stream +8Üz^|?V%R|/m"S&oT6 If;l;>ŷOQYa1ejԗ#bS)ˠf7ґ4 -)db-ܳV.vlks<8˽Kp Q? V}5>dElcD oG6z-" C۸qE8rWfaMpos6KViog@,6 "k1v7$SYf`g2C_+5.YYWv%.e\|eBOu"]%2A&R.ɷ|38\ONW b 4Qxn狈޹f^5d9{4I"Q] ; {ŋ`3PS7q g ȏwjaUjkî +8B~vwx-9q '܅p +8XT +],x]HqYz6O!5ZC*_šK}c~) T`(E,e֮ \6FxGt{)zH +Wt> endobj 4418 0 obj<> endobj 4419 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4420 0 obj<>stream +ȋF}%C FLwg'-?0XW3j zi)t^L .IK*.kvk!%vЬssf߉̑N}|oiE6pH0plh(!#Ut&jЗ`հ`9PoZtf`ɦ$TU\93N]y1ڤF, P7/8jamxll"8̏ 䒅P!Sn0Ä'he?IbR]0a殠꼊]%:QҒ̩L"ilRli.ft L j{-PJx d~`Gul +1pÛ j%E ~\촮!S;{Xaykgpci^JYiΜz`F\Ȕz(pc>pkr"RF*8ȅ 4TDo2jj]oۜlOSǕQ'jow.6I,(JʖphMNƭ׭ +rD C}u'ې3$Y? +J2] s CXN#f\{Ae2lXW2ۓS,ɳ8eC[Y%Ɛ.\At.[j>Қ-8Kbt&I­֣#x;l-컵Q!'χſ㪓{$GME*]ΆaFS<35.Dt(¤:r5s{XwR$oW78$Z;o5 (*mǣY۪e}:4ۜkqv|ڵf}YO,6~If +xRרaF(뮞@=̧ͨӴ?:q[{6Ex)\io3۬;js"oȄ-L-S7]E9^pZ`!y࿓s#2l> endobj 4422 0 obj<> endobj 4423 0 obj<> endobj 4424 0 obj<> endobj 4425 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4426 0 obj<>stream + yZ_'YϻQ䢻6G5Mhnۊ=[* +)̤Dzy1"xu&}@eS;"0>g`gSUj,q'q[ҋ9(j'x9pxe-=A Tﻫ:h'kΪ~fJѓ8*?{P/(?.]254Wwiq<"Q䋒My?j֧3j$]81 c7Õ2vO#EwMT4{)cLx*wݎvL>VΓ\ޱ2Izq8!5.[gEBA1 hD8oss#TZRo{ ֨TEA:vG/IJ,彝)[,] +*rp(a~YIGu@xިKG*.37ϊ'S9;E +#= Sp{0VIODUfr1eaR1|= +[y`$8xX?\"h lj2 l q:tG+J7WY逾Ii/PHі$&uJF FKQV䍄?KFE#~ Ю1.(?(?G}r{*®AW]i{B(w3k[{5@N3 fp9@V_lLr]i&1msW巏Fү 6,4>^Hv W +C }na&&_4dȱC[" ++SLugSlyF?݁nW +8=8o-6-0ƈjgE=.?ߵvok'(gLl tzS8i 0Iu/ 4h` G14(C< +9h{;IQi{75}(5G2j  =U%) ?!*8TO\;(#vY*ogm +endstream endobj 4427 0 obj<> endobj 4428 0 obj<> endobj 4429 0 obj<> endobj 4430 0 obj<> endobj 4431 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4432 0 obj<>stream +i3eRpS״3 'x2r)psjVL言Pu! ARA'K +ۆ )pE5T L.I + E7#][MhR#Ww eO]+'{Ap=I]#!<5LmchSso~=$B+DNuMhD8JJ~<&Q1=["S| J!t\>Yi$>G&tˤx"Xf@r;U"+}l\We$8[ is,O!)qZ/MK@z#H.e&f'z{nVL}wU`Z@'-p3Cf,ů,Ŗ+.Z+ZUWhx +:S[4hBHe b%*$,#OSsPfm#q: iHNL۵mJok<U?Z;n &3d`SCqdfdP\&KɬkPw r[ڛU~\aҗK +8N.cA "4F4 \ +x&$ؾw5m(}jkIg?o8$UkDe'T;ߣT[8XJh;قh,.ta1ru%?I]268Fxy+/ݒ;1,cQgBHNy[(ᖕRhGzS$jf!P 0-sLcYveoyqj ƭdïQ|u6|:bߵ̳ h [j]8g*'P]m +|Ha>4*ZղT)~^ 5䑅{*;Ƿ.-~[|\ טdTD 0bU" P݆n +~3prۖZܘt5NZa|JU`Q6p5Yj8s`s<SiW}45/\;Rw˫ܖZ vTyu®:"2Fˍv/t 1BHwfW,l]@ T?]LfY 1z=G Ki"Ң +UZ }! +Vt?K34[&ULؠYP#fzb[Qmo@ij X5].S(owZ9!٦mUj5 ̦BCb=̴f6~ɃSL 16rZҴ#[ +*忞 +jFᒠ3xGTY;\.&1 KױO:_L@\Ic1Ppı P S_l.&f8?nxq9+De9&|')$rW<)jxLz'eMz{ DK;Nŷ7@ʛPPr} {iqAc"TJ+B.mj ֩:NbXYH_-/;'?A?Vt;(`4$C_Ocy 6%`dkU?zWJw7'󍯫Z t6qՆXK/w962}{-fD_4cl +endstream endobj 4433 0 obj<> endobj 4434 0 obj<> endobj 4435 0 obj<> endobj 4436 0 obj<> endobj 4437 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4438 0 obj<>stream +'ۊhZHE~ղM|w[l+C6>I3ȏ]ҹcL oQߗMMB^~Ǧ>SRmj+߿D~Wt~C"w˘ Xb&݋M ETVy㱸?YqmNŎj>飸v|\vLF ?|<Ƥ.؆*S_JY!َ"w$ +N.7?}]]9Kp%IحXbmLˡ$czX9:`Ex6}k8L@P|Z\P(ic=IB5"mߕ44'9=W#üJoN[ +H۱EbB<^E1na^BulN^-ie^RC$xF GuR9pij 3^j;F ls[dEq1lE MܶyqFBZ/nɳ xЌʳ6Tq4Y*i:FΩyS4P7iL9d[vܷȹCz{U.5`)HC}V?\Ï#W>t[T̎b*8KV-gZ%B &UTP-dNGxMk?A=T{PZ)%o +E=<'m[ݥ}EX xy-ljאcgCw)4s9,u2+ы>}|'%\;*6!Se^/= ka3em( ~+"T7=+ + 4|J=劽 %Y鋃 +endstream endobj 4439 0 obj<> endobj 4440 0 obj<> endobj 4441 0 obj<> endobj 4442 0 obj<> endobj 4443 0 obj<> endobj 4444 0 obj<> endobj 4445 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4446 0 obj<>stream +>&mT٥n 06vՉA)?QXsw:fAQ5[& BM ~]/+pT(#L5`қ/D$9ZbK1oG 䪛TI ԡWӵBUlrk 'TE5W@^3r?=qVr[lg_U r$ \ų_.<&ābxIn8i8HvU?l4679SȢ_sjn_o{vK$|.ufT E1'W$"~ېB;Z8}dI ĘΦWt_[UkG@zw'ì ^'ޤzsz\?qdE=H?fqVPqAa%|! L%UisyvO _us`2H⊄I=tv8Sk-~K;$p<8jDH/Ha6&dS4Z:g6m.\ +7*2WدN`g_{ot7ur+aw&zӃvY vnG=$z[KI4`A(,46,ݥҊᅎĆ!J]>NqI0]"oG Y\P2z;ޠ1*Fw&"^S +C@Q>ʐIkD}^P +endstream endobj 4447 0 obj<> endobj 4448 0 obj<> endobj 4449 0 obj<> endobj 4450 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4451 0 obj<>stream +gyeĘd p-(QGDwY3[r߁䱞1 8ٙ>-ls ֥(՝=26d?Nfv^sĊG&D!ਣ9Kg95ZH/>`UOQ"@VG4UYuvN8Cu֢^a; 3EEq4Z9:ii$ @hYqBq^j4h V+>4(8l%5;EG*[y^$Gkf `#b9e`ѨP 1?Z(뼥Q8ǔVt]fvK@ +٦l8 , x+-ҬB!\B^$ GsbUW R;4&=$(LAܱtؠL40Q&F])5aDL9G7d e+ W6 +cϽs֛;]Y:@;4k7&]JA5f@S\o|OxƷ&pܡ*G42! +?nXҰ6e%Y5Y +{2o\W!Pv56>CjTa7ڞytKWYW% 83%܍'c%z +Kuseƛ3(EshX1*t=t +^[$i,Xmܑ]k]r0aXw(*Fmuk'ZU׊DGf &e*!yL͋<uJq^+rV*VC+9z +endstream endobj 4452 0 obj<> endobj 4453 0 obj<> endobj 4454 0 obj<> endobj 4455 0 obj<> endobj 4456 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4457 0 obj<>stream +)3 }F]9E⿎{6r}Ntڕ0gǗLذt]N싪ېG`uT,#-wiY&^^r44X!\ܫR lI})պ H&@^^PLp|Rƞ鯠ngSH-Y[iTCS|z8 Q!Y<h8^g]eEv:* +_)3J1,+.2lHO"BQ5:y_\sS?:^^6X#9JpfĄ)_f]Vw$*ZO_Ve]yP Y2rZ*, }|*䶹ct ^ߝ4L|V&+ 敪0Vs5jM>kl:z 98/%1E`jX肒GH=1Vң$|ǎiAA.dyVX̡0*R|ޘLdL6IȂ26L +/p2t9v4oF5*jcFշ"JyWfUZEw1;}H[O76]چSqA5~>[ʹkFD6rTu̠\Hge8w/.gc}֧ɛxlh׶(Ic@C>) Tn~RVؖΌj 8T`Y@Ùx0ʰ97\ߴf9Hن7Ïnpe\Qq|~ 8~`J$$՞JR;3؋;d9Bȴ~DTvٲ+ F i%lA!vqR^6op:mgaD}!}1]{8AX%ԅ_)oѯDމ"R?NP?3Ѝ:ayvkc'~o%y b=j8 IfZdB&e;('dKmJw*rүVoTx}q쬏|8p qf HMUheJ ޮ9$eZ;j @m` t̡3gX7@ы\)9 ߺ ~͂zۂ-@Ihr*6\h(E>===& ]x3B'G&mЎ{pd@*P8s7!Xy jWfM4D\[`aRt[fԔ 9MkZF1BɁ~k c90l]KN!42u%raxW̿XӚv@jLGI@TURْWlʄ9EtyD.Yk*K뽧B<=@>3+9t[;7pVLC m66Sy c۞|]tīhg~cZic6j\K= +endstream endobj 4458 0 obj<> endobj 4459 0 obj<> endobj 4460 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4461 0 obj<>stream +nU +me%PDu9t+/9X'm`+vEpYe% +:|:b='}-x%Ⱜ8%k-\7D.Fnl.MYQ .y4MUW%PU7ucKOn~WtMǀ#;>Ome.Nv!)t$C۹SL\jbP.T 'Xer_ aљӉJl@W ~$: +钋R˚CCߒ~Ew94>6$cV]T+'#z'QVC8aP a3b9/3cl1A^Nʸ>1o+%9m =*{TQ̨ܵ1cϤ#+Pޮ3KN:H ٗUl|o72(b_!h;y"M-3# {ox8<|W5ʀT|kxRaz +Ml}fjB' "'HDAHGx-֛?8av).{T]b5EQ@w% +qƢZ<;g'fb5'26&U8ʓ&'6{0v:< #B@S_U^3Į.0e57vX\e#x%ױ_ ESZDкa~"MKTĖRbձQ1#0H6'"=펁.p&8YJHvu>I#0b(Xl0k&39¿S!gAyڂӪpED@`ru Ȧb쵯 uIRrtӜL)X*mx]h*xeRo]a·0@wm{AQ m. +endstream endobj 4462 0 obj<> endobj 4463 0 obj<> endobj 4464 0 obj<> endobj 4465 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4466 0 obj<>stream +DJGa @Uh_ISJEtekXRyqf{E +4O +ρq2B,lWI7hcH,#ucrWo'ZZv"KLe 0=J4>ku5LmgpEgnɄ.%$ %'Ab'PEu*? 3<^ +@{-I)8)|b6Y˝ +Mi#6 P8__:+_:Gs!.J֏&)JW{^Lu\T.(/\w@ocLptx`m'k{Ǵ9Q?/ 4b)ȄVC!oa[,?Jdwc}, W%@ݯ׏B;䥻d~ ۥΌ5M 3^|Toۙv w٠K6S#nltݝByq3=Scwdw\ڑU]w7³lBJ_YNn>e)46E?1SO0F%izTOWr:mKAJw}/Bx}&TՉ_ۢϻ玑vs9wfM|/ᴈutmK(,BVUt F{d 95?.WV>dX֌VޔgtyClB_ Eί綔$TMhuև*MP$ rt|;OմcuοɌ),L<wh+ChE\[Ink5qYbM9$~%żvi'%rr`N&6Af4P'N\0B#U 5c/?QY|<mFt>0#Eao|)Zԉ3H'=Oݫ 9:|c_l?f]/|jFXHq>*FCfhHdbm6 /| lܞ#WO&v TJWÆLH\jɺn +J9Q[_ u [Cz@8@էڍoXRn+T26ӺGl +endstream endobj 4467 0 obj<> endobj 4468 0 obj<> endobj 4469 0 obj<> endobj 4470 0 obj<> endobj 4471 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4472 0 obj<>stream +N7mbT%|E+il'+JWUON5>'&/81RsVo.fdb Q*vKUz"?{)XS 5 t:7s_hsc2j`mʮj@sCƊ {yTՉw]r |P(+޸RHf s{<>KOCGq8.'OTF9h`hIKQޢ$OeMeo2~8R9t> endobj 4474 0 obj<> endobj 4475 0 obj<> endobj 4476 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4477 0 obj<>stream +|6[ESm߭_;Mj |2+p, + [s>%nK4Ε@D:O2qY!'H9Ĩiٿ=WcQ?N:8 QVPNPS;6X˯ói@ORdͭX +2xi \o))w*QL4+65DdAP;6pABon;"tPKi>y8^X~H[ݳ. &@=plQGU3N[bB+'ys=Xb̸>orm:kj_&ZʥqsԀE (fa(riCFg4CEӨe;1KZIŨ/0A{ڇS9v霅wu*1[}ULR_|&x4=b(Wۧs"RmF/usB?rq/x2xK jyK'u{! /J cs޻SGRFkx5'ƉX:DBSO_3`\xk(gODD'm#fN,l#U4 ,6o.w1G|\:6;"^{Ap  QĬN;Gwogs#, e+`"u{hvQMSC;]ߩgTJ549SJ + _'4Rf`%I'Q +JjUkO@u &vK̨}J/ m"Xl M\zϟEї])Eˣ$s::~n[Ɛ +endstream endobj 4478 0 obj<> endobj 4479 0 obj<> endobj 4480 0 obj<> endobj 4481 0 obj<> endobj 4482 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4483 0 obj<>stream +5g1,{TJf,q_tWM7%׾JaJazOչsx{(ޯشOtdOv翠lkEwFg!!H$Pa Fumt TQ&Gc=;c %d9_CUeqF?SfRo`&>˩-YZ=*b4C虃a7wPAU)~Ʉf̡[{{1prB<d‌ʌrW:T$1 aC0% + d"LTS78-ڱZWeXT}]4qbCo j{Z +,hy~ke_: 5^hֲj `VyĦgpшq+#K [|]G6fRب̒@hȺ,sͣ/<2~WF .&,tk)OPԉymHB..SLdcylgq`pzZipg)2J޽n':AoKsP8;BbSVs\ڽx2?"$U4S_^],+qEW'd3gU ?+Mlr5uWhhxɁmO^'"L֒U3DıQ#:WuA[luF%dYaЩ'E={֎#'{Z/tfη,}䆽-ò/e>ܹT -S :Ke AƾIP*5n4u'dhӨ^2 b~݊<($v0`ڵ^`"(S'YrPzZ4( +1Nr 35x˞4}oa}35&lVttpc +1'vس3˥ "aH$|x%h:!^۪[B|53,}Mͨ%[R;gI6MAu_8N*+fA3w~UFœD옑]AUI8ZQ&H]ր\mOL99t-[ Re\ ]11T85sE^> endobj 4485 0 obj<> endobj 4486 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4487 0 obj<>stream +,w@ cP2Eg&N23T(1yo 7 +,dz׿C{BX;n2G)`D:ʭI 'Pȴc{ҵ%6i#a 5r4ؘL렛") anPD P$viMa;|j݇^!y5!3g&OPdż'tN7_b'F>^501P +(f*mխ\s7f1pdA',F6m$^#p}*3~oKu{J8>w9}_Εg=^{p=AK9rӇD]xvc8P H%R_hyX(Z2*TLRs{Z~9M> endobj 4489 0 obj<> endobj 4490 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4491 0 obj<>stream +JP=W-jr?vĹNr1Qw|>/w3 *@wR>8~b&!ȇ$ ]tMӻ#>$X6l4kwc.lЁQ,Yl2bhCq/5jid( EPd:el[W^Ee"?,BpLR*9g.̯ xn"P +}Q 9r,pjYc3pV*6fΛ+2'c8嫜4=i#BWhI}Q 3\l"c|44T7 \%2%5`hrw#5 VqB=ꑆC` ^pr1-Bkv.y&TT9cֺ~%J;DD /I-3*(kfS,$/i3s ].F},;9;J$ ??O[s'}K@4i&[?3sC!zdn1lzj+h+)6CR-S[=f'--;V">33KT ADE`0\a" *c xKi FVn4ϦF*C[.C*&ˌu,~#2sW[ k +^`DTumلNh}5;7S| +GMhcS ~'.1GAO'<>df,Vk[<+82E`+TAw&of +d*Pnve#n*f^hXRԖ4^s'(uXIǶ*&I8|avhj-UTw+;eѼgºۨ; 9]~u"5 [hӧEJ7HhMS(3Ffų oYqtYG?n= VzUvz" ,֎EWQ*U11yrn.|yc(1*{ \pMYz7~'QcǕ r#R+sl6vh'?&A0oAnuI'bRl)6n1Dӛ;d=VUZA_-W$Jemb\Њs\U]Y GB0XOgskyZ|03Vc?&W(z$jKLYS}R7+u rTԬQkR|M r4*P aFP[ouxh& +Y_HggPQ:X嗢%.~_Ma "~a89]Dxi?{vΒ|7(\4%4K{ weH!xBӗ‡~sղHI`iy+'R +L?# 5NDb": +endstream endobj 4492 0 obj<> endobj 4493 0 obj<> endobj 4494 0 obj<> endobj 4495 0 obj<> endobj 4496 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4497 0 obj<>stream +!nٲAfe^qfD/=Q4 +(t0Gp` %EP5a°#P(N!7KKoS^=!zCՄR:܋Ok_\}!+hW##W S: +ZrJZj0O2 bᠾ><Ĕ&g^mU5Ei^'hLV =e5~JFJ͖Pټp1~<| !@?]] s䄡@hDoqXZ%vE$-_߭Cx'%A 1@p)T*NhzEPT%=clgǫe5Xv=f#^PWp_JkgM&%rLeIHޒ8>쯇K[q {,Fv"VR{8}V9nOD46헋mXx,$L7-6,Le-پe]04KΰWXwn~IMw㇛í,">zl2%F%m`G ናz1ZI05Gml%rO1 hfb;v7211e6~ +c#17OӖ 2[KpXg):TvIќyR(vr7eL| (im:6Y p^fZd*/~p6Kc5~+?,v9|$0:N4j~}=(e!`7vWHĒX"YW1֡dc2oNw*0$!Ԡq㕧>+JN80ɷ,&N'k .:"9rhT2U ːP #W<ѭ#Rf6ٱ(:$x +F +r<1Aj.\\!Y3=T&j=(cѸ`ȢN&P{^sZ2WG:i`xiํA{(<(EFi>h}R,Ri^NkZ9?ԃ*V[W,L<0nDžTݼ%u?P7ZTOވ+BY";mo=D$sRݺxQF)m3jP]Tgqy~&tCW,je=D" `ڿ{2 +Fzˆ#Nj81GFV`%fc +G).i(qZ¬pvn+rң3%y M5c+!tf.ewU> endobj 4499 0 obj<> endobj 4500 0 obj<> endobj 4501 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4502 0 obj<>stream +g&T +jwȅ-p J,1,x +*x`mn|YW?6NWXs+N\OsI?eX|I|^/6h;f2M+v&IJhֲa(o&Z.VLTuLJh1t5q4"qCiYy60} 8(Dħ/|umԣ3 tFwoR&䊹5)7A#.'#gwlयJMp?D6i&+g`9Tffdn4:ށ.:.~Q8Պ/BL!1қHg;*mOJ9ʸ/C :8oiK-;\-.俻 91<_%BayսnWJY*42@ܨ78TIe$EDv3t.nlsnb`ŠժGVw-|"J޴];z.`e#lFlgEI d_o^xD +ET3^2DP͈um9fo*_q0m~`*_'$n[Pp usBxCd2(0pȗK6=6La3 Mg'l-O<;ZZky}7~8vkNh_kΕouRlhR3WQt8uxnhj@0A݅7R)~|d!̹f3Ҟ2vY\! dlIl`cJ1c0[.MC-a)^A͜^7N> endobj 4504 0 obj<> endobj 4505 0 obj<> endobj 4506 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4507 0 obj<>stream +yVJJf#z5bIvƶ( (3)2k Hq%йDMS5ʭ 'H [7%/, Ճ]ezT7^R[h^]šيudp663̝Zs3uIfH23sP<r*yR9nI|I1KIiwਜ-P.%sM64&ͨ=U2]jr ⅗UĶp~U TEE3%(^"p,4Mm]RJLrR92/BOY4SfNGy*رBl%' +Y,_ۦ&V3QggI*4j389~s'E(z)vvD7h~d5׍&|}]qSp/^ð¾_Ztr5Cejg3Ȟe ڄA8I;IJ km^9HS> endobj 4509 0 obj<> endobj 4510 0 obj<> endobj 4511 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4512 0 obj<>stream + дƓ0 rtLqʦIC2#6hK͚3R_U$]Ԕ26M0ygPSW3-ԅtT=o}Xr!G<6ȇ"C>ԧ(~'MȍQ|Q o8J&VbFn ͖gvJlp1INrkj&tcCiGCH~j]0-i,yS?:-?_ӖBQ'4ekh,%U@Wt[\ +\fHUE<(/GmWg-/ FmnDܼfllcPs,ELG9#~[y6ڄUy+}83#A?AL*PO>B +o≓vf6"vkw\:S x̲g(mܗMt$' + iP: e#uT~]B)Q80_րks^}R"i{:r`LJQIJ1v [zThZ>GQ6$QWށ$r3'avlj-6Kzn˃ٷ^B;yN8^MTDž8\E!nU leu +rDEIDiI +=Q/Ni2d3\ AEDH˃?fR>u{t_ܝMHjsZ*/TMNpA7-@J?|6 +#@``(&*cpT2 mN;fEcp/ 5Bkf|LhJWNMkx3ミMB=pdje0_Sk\GשV!Vig$+oK`ZOi$N0 +gg.)cxg&3d&rx&d)rKfW::&wf0z<Iꑖo Wm_:"ӌ()Þq'_lnpkQ\IC:y﹦KDTM_%kUl<>ɡgV0)zr +:$"sNף7Zt& ؞5ŎB* +1<U;'W|5#ݘ"~A]C!ܬ=bLBq4hj +n+ *rcdUttIWJʄmꊶаFOP&WJ e~|i9֖R=LTC0UIXw:[Aٮ+2 t.>$ åeI~? .{:`DdWrr#T0|J 4#=#Xa_1p2'nJ} Yx]20ڑGUpƐ +endstream endobj 4513 0 obj<> endobj 4514 0 obj<> endobj 4515 0 obj<> endobj 4516 0 obj<> endobj 4517 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4518 0 obj<>stream +@͚ >=7UZ6M RS=`N&^.D[\eF }$gF7Z!bȑeR(L^:sZ,QM?4Jɞ, +Ōd_wz+Փ xEj\ZVEPU9~W"_4K%Y2Dkʪa(.|'a Nr 0IMNA9g̹0CU]"}J%l*Ih_^h"Y5[Tk[[:6kHW +b@w5FZj7[盬FBӆ[QcdN){[!e;.e\cR+sCĬVnTCr7ؿzo5F02O͸uD$#Pև6OBE +`Es/ߒ*hj7WPiR z<4IHn v <]~]Vk2zB:nK*K0@2EȨW(%&t*"+;_K^u^ÒՃ ;@._(hfU繅!pAbyphor%v3R2tv/YLojtfB^K|`k`DJѹWZ|25]G׉e?coLJ(Hzq2tJ-:2I9:>v.Vo׃O@=L@4Fey1%CNFFvܢf~CUΨ`v3&J4'?ӄynӺE!l"O@ю!͇kd]f/ȞP ;9e/7be9nT#-/S0N h IBFI%4+XGJNM,<ڇx͋ijcE}N=8K2u;AWS6@kce/L/ +endstream endobj 4519 0 obj<> endobj 4520 0 obj<> endobj 4521 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4522 0 obj<>stream +.ۜ{h[ +mВe ib(qQU;ב+Qo+PX% ZdKU`RtL|NpSUNgB6Iٍ'9~Xї`* 6謣(Y<6vcln0:e>p98Wq6,=B.J+n(=g7|҆0T-q D}FK,:ow}R8m.{,åZ®njPI\{`1_fI^U95|}kzB5װ>{ +s"T٦ɆOQoNB ghU h :~^Wj{٪5ēRPpY}sp86l)eQk!p2S;۬I>IGkNK3d&m4Aү :-3r&z*F7Vͺ]-j)[[ĮB۳I0cxxyG2lm,=kG/S&!)N"pwDa*Q+-)w8oGz7w|` ggiw͎J߹=Q=fmF}= K,4=Fs-.5EVi -Lq#qw`zBQ~uW(95gҹOb+~wl'_Z&&[gxBTn;}Ӑ)[ oƵuO04 [ ̓{|m*F 2 =JѿAHCO lA5|Rsة iq2ǛdX \#R2G a1q.-Md*թɜkLLC*D-7s.p,S#I`wj*Ww_#I/B(fr:XxPnK +-+7%tBW +endstream endobj 4523 0 obj<> endobj 4524 0 obj<> endobj 4525 0 obj<> endobj 4526 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4527 0 obj<>stream +R᧋^JN3y)w[j#"%F~ˇ;]$ )* +]Sn|N5ghqwk!ӂE TUH7;aa?TZtG9xQs'M/HmXZb9˻6sR'C`2M2h]̧KD>եxh9A_S]-n*I 3ö'XVp *c…P'~uguikP&kdLPWj8o/-: K oufp5Xg|'OX1f>MyR.KpjjXzC`bVH̘ʪwHTa6 +V=)Q׻^02:v9?/&^aK҇b2| T9 %A>]cs{?F}Ђ53J:m -@DҒC?(i|i&rJ2ޢӔs7kl{lߠg?搾c"1N:0zVR/~T7nm0Y`1|gՌfusqn{ˣ.ak\#K\g擸 ȁ%!--g>fH'( x xl0uc^ͯUe?̦y-]_RSNO` pab0pEjFW#TyKZ",wqX>C lVe6DN.s +Vdpuyb?Wk H2V< :_o+cnp?|ޕ!Ipi)XWԂ-IpdWCN!] t=t<ȑM3r*rOmIJĭ;f V +9w"/ԤUtG;Ph{H;"2V"EI&GAP1FSф#m.><竍g??M;eN o-=佥} Rx +;9UaLtL^#A:s͑պS54rzc4Rd +endstream endobj 4528 0 obj<> endobj 4529 0 obj<> endobj 4530 0 obj<> endobj 4531 0 obj<> endobj 4532 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4533 0 obj<>stream +1A绿P>?"cbc8a¹f.#2xaa\ 8Hqw<AM!V-ܘj_ +.`a9^&;ǧO"!w(BO-E~D$8w#n-{ +$,kF7o;hi45 Q*t3p3fN&:Zjfu\o**57r!mt|[> endobj 4535 0 obj<> endobj 4536 0 obj<> endobj 4537 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4538 0 obj<>stream +wVHn5Gw-PPW$z._43-!c-,oy68tꎢKO<"dCVOS, ]LtST=ZOJY/J  +.^%ӞӮ0J„#ġ'W",@D#wV+TX0nBVH"y4dkfq~ctҐ.dOKi/`G ,@ }m7։x} ;#fw @uD vZ#q4Yhj[!~l h2%Dxwq*s+eT +5 tzkLrlxPG=Xkψb3 xzumX 퐓98EDǚ9~yTR.Ķzka9UOƗP9FLgaiiC[r4WOx,@BIe>٭1sE#1yEzu㥳g7&!ٯfvlhL(WlęNpT^5ZslnravjzoxD?[:\nB!蠆Xo=dc tK-H'+ _-|/q_cX ]26"qazEe #^aDLx V? Cr-e^AX{9qcnds(PBI\, 2=$9VsM$] +\)I .\ݣ-+P4IMۻ<N;\+Au%Xtc0Jh' ;ct3۽P9J Y 4pT%^2%Py-0WݎB.f4`0P01Ʒv->_pJnf1^#iEjG0ʍ; +endstream endobj 4539 0 obj<> endobj 4540 0 obj<> endobj 4541 0 obj<> endobj 4542 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4543 0 obj<>stream +D:ҙEcboY?e~#…8Đ8}a&gεӁ V@HU}.aVjIK;$ F_'T\P@n #;L.W/Nt^CX|j/ ?6I >_zG/eӰ>jokj;Ak)kOZ*x9 Z*\37uG:(j϶T9b+(&̣^hMWo"DFVZ/V~H+@oqcCwgրM6tFh( aFhQ4{[}Èy5`n2fB^>"QطAe_h᪬%ƿq ;>L 7 +<7~)&z~;} +iJ>vR`kZ?BCt8bk`1 $'BlU KZXQSg[jTgZP`{lc"WY L)OaБŦl#D$ӇM8WB;*Ы9 _vi̤.AO_7gɠjYКa),^M[N2ͺvH@ޢY->˺f2j?k|Hi +(c  +"YA81oP6&B,F"o6Ѡ?2Nf+{g$MאҔ=Ӱ~eU7y}_BfbtwgEw,;HcTAKڂĤ=4M+`[REk`R@mk^.Xm5@ GRȞlR RRby.X_)H(K~_3 >`t3NrI4}o-B0<8|+(Y\Ω[ ͙U+,ED4kxA[U*-b[il3 H"%2 BTɣq>tM8ZKHu wuM}e#j%@n6$ZOhg[2DbFk H =ԑ!^TR;֩eve;ze E3+4[ ektR-?Q#4}iw !79^jqS [JY9'+8獒nш,tegǧkT;K܎v(~;rqϏxnf${>Eǐ `olmfPϏCUCdgDŽ 0Cf +rnQ{moTH iL]~¿dscQZ~߁b#砩._ϰAs_0{ETkh|ؐu;Յ**zOPS[5q/hzOK`\}LW`|^+jBc"p{-PSSeXڧaT +endstream endobj 4544 0 obj<> endobj 4545 0 obj<> endobj 4546 0 obj<> endobj 4547 0 obj<> endobj 4548 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4549 0 obj<>stream +Խ_P܂zhν 4/8;t[h$7 +fy2.`wluҵa\66…Űdb `{]Ϳ= ȷ>N͘T!lV+j2vpR8,% yWE#Cpnt*wUAo;;& UH  +m￿Cꀓ\rհ03 +kx86cP*Lrᒓ9@9*۸o.8%{;S{A!=g]S7z +e(* cM!b66ĘfVĩbww@q_ L< 9ժp +4#]XNؓԽ_vۑP +΢Qf7@(`]ə4-Y~t >YudwFGۢk҅1[fj4Q@&Ǐ! +dMj9  J0w֝oU'h3x) 7|O!C\e\C{F&p#~^CUI@i5l_dgc +kyAdl>(Mj>]J\t}ʞ"uOU?T:ebp/f`tYi:==H3s9o"ћx(dׄy|$Æ/DB:O4wT+5E]hqc 4ĮE,^(n_sxCh%{6~F\dTAN3>3zmbs7 +N=Jh*zVe N!"7~>0ڟ mګJrpc4~G?ȊKWy_vA'4\Q>X9hpz(F .!N; [5Ԫ;~PfЀύK8OPC +endstream endobj 4550 0 obj<> endobj 4551 0 obj<> endobj 4552 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4553 0 obj<>stream +~b*bu/~x C׻&oz򗹚ac,`§$&)jYOmBvq=LV\}\"w*퍇@Es\ +VA,:rY&a<iǶ23 +dY,p- +q +jOjnr@UρmUp{Z]C6wN +pq2$hOC07C87wP\4\lɣ+to +N79FaAFփNHHYɺvnd^Jp!FU^7,܍R=: QݯR٧-BUsM|yRk:QVKIYo`7N՚\v&9I~FV/T +%eWF +:9.A5~O0(>YbbqPNܔ~YgoV`UN#U'"J qtʘ?j_7|Nf2{ĝÞO_O|T-V Y'we[ӼVLQ`9َJAs7`y 0d5P6׌Fee [D'C, l.5bIlBL>Pt]Pۆj:[He]{v +kzC<4'j!L\S{%/!;Ga೐JRJT,Zc$Uۚ:yt>MCKE-BkAv) : +~`:B˥ƴOy(BUi` @xCIZcBkY ~lAP> 0> endobj 4555 0 obj<> endobj 4556 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4557 0 obj<>stream +!ȡ~9*/ BdrKLK^C!'& x!^мn]ot9` %5ĥ 3Zp4X aˀ'fQB2SvBr.xkf;9(Էnt9ü< +Nix#noGI1Ku`Ckf06tiP蒶7sV?wt`qqG:EJg*%a̞s⺃ykg<w)7̽yvsCۇl_3q +ɦ\`S : /ٲZ(72~o㊹d7*R'bGtM*8|Ĩ`Y5Jig):E bF|EE1ޏD~dP s~&LcæЛ]*4PgCVnϤ| ZiA+f6Ap:+=0F +"cDX~sa/[1שoTvՖꚆ㠤:77yfuMHf!x%iA0Ƶ#>_F:|DP/';}+^}GQqz+ڸѠ ;{hn(n_Ԉ̋2E3@cCuߖ.niBj'V-QȔLu,>Œr˟ 'myaǒw7 4bƸCk_ ) aYo$B!jّS+nX`v>EF,_Oa R_$mZЂ 8j/GvYZCDЌG QT# L˲-+87("JLJwJO =MkNJvW8!e(HSZYZ`;n,s')8.U*IB ^s*A/[?Ϲ t6loo- +endstream endobj 4558 0 obj<> endobj 4559 0 obj<> endobj 4560 0 obj<> endobj 4561 0 obj<> endobj 4562 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4563 0 obj<>stream +Jtu*6W~4KSlnF +FDd;2HwVd u: %|@䫸h)+L`l iK%L'LYxJ +*_8rq/FͩfkzN{1K<9'Qh +.D$~A4*bYD},4 _3r;Mgk +K>~rєrB/<؅%I(S#NJV2-ՌygLLX4HnmEs)f.%jeCi2|/Z%t1{*_OT_ncV ^m3h,_]b>71Ecr"?kAT,$tgae +,ɨM6Q99D= .ݻxdX_i_|VQnƓ1BSӀ#wekkS0DjXwz+&(v#0?Қv7w+Sf$b2MV:/#0;xѬSm>+pdLB? +S)wQisg)Բx#톅f!៩OC^?37d9WAiܔlx@ +a)yя!Ehƫ` k}!OiPXk~I;K<fͩȗE(0j,75mM>I͒`jw#*86Q2?>&VEA[Ԯ#^Mx7-0:t=M_&wm8ʮq7q02  M3:XCFL~ b|8u)U iz/YL!ҠM. W2i3{K?ST؄ܡ0Kes3Ϫ5ou+jC;3URIu_ afNPHUpᛴ=!a CleC5ß#?oc,aUx;Rӕ?RvhɺkhB12v2G^ /Ɔu?lߖ 0ށT&z]8>P-L` +us1ReI \B?|F-Z ]7|2|-4?rQeۂ}{"dF xVRd!V2cU!-m!Q/&r." f!:s p)cKCмҍSB a,ƥbDd,>H;Nj-F(L?QA+uc{\P+7@lڝ_]R(plFgʠ75zE_+s G_j!|:! vX%?j}Jqo ; ؝7TYa %cVOFܻK>ˠ{V[iGhߚOdt568WgYuqYs~źS|{6 +endstream endobj 4564 0 obj<> endobj 4565 0 obj<> endobj 4566 0 obj<> endobj 4567 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4568 0 obj<>stream +I3$SƩ{ငوu?E6(dR{E.7])> G8ʲ`/P"qA +Z#L8?7Ta ]o":SF@rL/(@Qaj,xp>߳\[a>hR[$j+6hDxww4IS#4Σ7h#'Y>Ńj.ҮC~TGј!$XKI5}[FY[C|3pʲF8ub=͛%I*x &"MD.i7&p3Wr +s1;B `H'PFL%EW ˄*'OD!AY07LKp{U.m8~r=13Q((J+>MB +F &8JO0wy$|SovAzH- +jhf~#,;=|횓5kY)ߞ6c9Ds5j 4shWvJ"p霿X@fЭ0 ɒ&pJfP*m.X:dob ~JINL=RZ,6W>#ǟ>iv |6H/&%2W `P2ڡ}/`N[_> endobj 4570 0 obj<> endobj 4571 0 obj<> endobj 4572 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4573 0 obj<>stream +N{\iUCfkYKDu(oo'(F#;vrS_mxtٚƪw6U_Cjg]f + Ѷ &YprCXkF;PdAhpLx&_毭 e k(EQdJPW.ʢOܫc@7S5Lu";b;}}+{.9ёm:*SacgĕiWRdGezW@L +6)rW\ ,x2BQwn#x#\چr /8kd 8ɜ<ǡ95Y0Ʉ"d׃3ϭxNX]^5%t#zbviQa!2iҪyHn)|o^? ՝/2,;B# i`%miaM2s/'?NQ!Dra˄%P;( +K$֌pfHaw\;]%3\(sto:),)?K:81QR˓'Q e#IE&@7tCS-vJ&JΈn@P/X` ;[S~}5\?W/e@sc#HIy%0' +ݰd>#40kU5%x7pC2`iI !ՠȠWv}٢B 3Vk=O) K݋p*EI{WNqj +}7krޜlS[5qM +fSR:'URx=ih_, +mlWx":UgZ8zx +endstream endobj 4574 0 obj<> endobj 4575 0 obj<> endobj 4576 0 obj<> endobj 4577 0 obj<> endobj 4578 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4579 0 obj<>stream +ܫq17`,ughsqlf.eMRQ{ S畇4}roєkɨ ҔRy5Jb/ *;T}J,#=7D}2;Bl?o? wʕ D^k͗䰱]P9lKBbI),Gt{y.FTJ>ulٌ}\`NXwGy~c;:IU8-Ӧl (0 Lzw&ɇgI&@e`eఱف?yCx*aL`o bd~ VLakFRS_yDUŽ%`բN@KT;FAdfIDp3u:C/OlpcgHF-kwm Jv\}fP_iu2mTh|P|{ێc.ϣ9IAhFjDp>+k9$hZ\1:f1;kԚ)0s:ѐdGްECP8GryvO41"Rx5"?tPlh+t7kX@l{VՉ؊KQ +endstream endobj 4580 0 obj<> endobj 4581 0 obj<> endobj 4582 0 obj<> endobj 4583 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4584 0 obj<>stream +-#<6Mz:J @,BvWԺt8P/"1΋i'Ԓ0By* l0ߪ8D/WB}Uj%-@O\l:Kg>Y?׿*MrԢE ^c2]qQHq &Iĥ ߥbEÜHfyx}/3Nghbhq4K/Շ~5U,B{8X`5Q`*)wMC.g@VwdNX!.Mf + o6͇=X*&o%VYBP-bYn\2n8I'\՗aԂm#%DEhZ>[#`ca1Qׇ.x ++r=]b +}qQ. W FمZڅ?'Z{foZLWWߑ*5O<tNMMqncrŐa$(*2dbA9}fI^:-#J"MabxnM~3WzqE 4|a>-\MMfTfr՜vy**N-=IwV%nTA1!@r#%cMIf(KР|m"*qΨ +*1ǒeՏ +I~7&`E2>oɦ|>7]R&kQu6՞x{jyRBefSkl_G$ ox!rhsR6(LC GP3$vʷ>8 &> endobj 4586 0 obj<> endobj 4587 0 obj<> endobj 4588 0 obj<> endobj 4589 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4590 0 obj<>stream +F6qEI3PRuMQVquZ +$H ݓBS;*ӡ3 :J#E(+bcNsUPXCb9-H5KCb9#hۓqGZjIjPH57l4$aPO[ LA0m$yKr<^C5&P `} 9HNmՏn0ya$M6Mi e7\w wmz_ygi< +1$tA&:Œe(X%ϸ"ڇsjA`~ɗFr>"-ԓu~BbŅw0_ع 0c CrbVYr˿X/fbފ cP}B٤t⣌_Y-lAH`|l$ +_bW,Ã,Kz&@JQ!meXe8\ԏo絯ScWu~rC(*I >(+֞"DU9o7\ ~(K~MF&R ˔3xS'&xc R' C>ye)/c:EVʯq%Y̅?$>QhHVԣ`Ao1 _|5Gjq7v2qHOz2!Cz ՠPVXY^z- mIlM]'{ |=z\pzH?HyIR. t=Y. .iQS+x^6q'~6Er%wrzkh +]Y:/qz B('g7}o g1upfbd4&]|Әu- )V$k(7XŰg>}5MKq:aT9r Ձ +endstream endobj 4591 0 obj<> endobj 4592 0 obj<> endobj 4593 0 obj<> endobj 4594 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4595 0 obj<>stream +Hڳi 5\/ÆNB>n* auyxvՇ 2",B ts#HgPU=U[n2)֙Yl΁Dpóű)h}\?DŽ`Sn`"9{nzɐ4&&() *qQU {\lVO$18w&`TgIYV:4ov-@6^ 2Y)9^DhڒS&#QYȐsjNc>#UU<"Bh zL@D=)yc +KR9fCőnÚ'6T'ͨt80Aկ2Ƶ$}xɗo~M0zK=a0{7Ep'P#icA]c()-e BR VepՔ +- +B=#a\AJx8DFDm҉~~S=oV=, |0O X]6}Qd!2>"p1 8#|QT>>J\Tnb.۾Dl 0K!AJ!.{M_lP٢'-\H"JD\4o [{M 7>ҢYo$^\]n78H LAXwc"Teύ4]'z`KmIKI6|&&ݻi SPҞ<fVw0r&~?p&!r-KSoJ Y!G1Z{z[o{ZyVK4R*I9#Ƈh0fn_9a3${ ?u/AϜ>يѴU0󤀝hQeus+#>~܅祵[:7[nR>cޮ@&bTWw(jNmIv8YM / (Sҭ13^󨤙h`xɥ$~[Cm3 Q#zs))Fu+j^p:-BE_Bjoa4ub+m & mΚ|> endobj 4597 0 obj<> endobj 4598 0 obj<> endobj 4599 0 obj<> endobj 4600 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4601 0 obj<>stream +K;Ƅ]5 bK"!p +.\ն 5~¹Ig+x&z6 &+3a6OUlhdid`HEXR{{vTVb ?wsmL₁nGܴ:`4ͱ=|PvAZlzcVBB eHouJmSg1{y*&-9LM)xʹFYX(^+C(a2NP6Ĵf}j%8A+mF'u#+Ac'-dً׮ARo='o]_ +ϏbI-r,V%e5~w@yiЭ^!=e& p0&᝿;U79pm.*Fڔ_nb`"eLq`)8N TdY +$-699X> dz]s֏X}Mtai}bNEdFy{SbӸ+G"6fhT==Y[K>m6"^}U6 x-}:l/YfE `^#}ЫMy/z6AtWH0}j +rQOhOTE3?<RL4[vDc1 &;$zN|f8PY9/1ҕPH5jy;|:X,M|(-ak-V+hVӍ~wpg +%kfDY"1B%uq)AT-Qi|O҂TyޟP<-iSCŔ-3pVQbN X[ԌP{ X%pg3]lJ; +endstream endobj 4602 0 obj<> endobj 4603 0 obj<> endobj 4604 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4605 0 obj<>stream +*ܑq2{T 1+A[b#fgva ?dӗx'5&;̯T%  8jU);(۝dǫ@9`%|xAi`@[8K}+ZBLQpXoYSVIlmSHhCn0G}>4]g45*.t0p +18V'4@bW6jz ZQ~xzS au4gw E>;Ap[Gi]̓4lBtb ojYpAAzgdK97;z4ĆҔWh:Pt4}QP>G(y];-E$W˔N[̍91잉 "׌c$3̶v;FЎS>.e`4R%$Y}Y)PExKhnП]eAA,ra2px 7PW*0sdjygis.OCZ^ +=Lޤvg_rüU(r3(VZOtK_0Dn!> endobj 4607 0 obj<> endobj 4608 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4609 0 obj<>stream +gu]ԘlWeI7qFP$8FqN9#vH rwJE`]}eC?\=!480,B81um3Ey?Ϙ Q@HCOͫL܃OWx]U'9~h2iASpK-\xV:`tJ^坙tB ?L;{#ӤhڦZ6h޳!bHLK^T ݢC8W,faq^& /M/g08opp "@&bp􇚏:f:hAʘƾϞ ~i=  +MZti|bZ%{'fvq +U*(%]WcU^fOvd`Ml|Dk } +TgHJ;wK{s'\82k=Tdn'_<ƅ&:byT՘IvOH9~m(i-Kd6*9$O7rw$⊪GNP5PEY4l{qYQF@ZfweloToi Es%6x>ZRT5OkT=n{Chny6'+OǦ*-rPK!Zy=ୱY)EAm +SLJ|hУ\S59Dƍ#r͙gS$,oj2ϰBKV wkIߊ +endstream endobj 4610 0 obj<> endobj 4611 0 obj<> endobj 4612 0 obj<> endobj 4613 0 obj<> endobj 4614 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4615 0 obj<>stream +ji :ʮMk-huG*Pel +6s>p?'/GV@fai<-FlIMIF浬J~0|_Ix]c_,$Od2܌lL;CS"׿c^iMt8 h$ +1uw;xD'~WWZg#Lp.fOup6F+!r' varYjBOFY\ * HyAK C$k=,+XfϗʜJ,,dǡ+6%ZSViқt@w݈.MM>djT/> &R΁y:N|g>p:Ýгh2 BQt@F]_E&Doz0ɜo IZEi/`ύ +%*_8`>4q/B p}j_d iD"jO1!$ /QoXP)UJbOA8%1nSq +zfmpvO2DžJsC'EL'm.%O)|.#;تB跆*uIoїn[*VR=}H_U +FU=5G-f׺ȅH"CnQ=O{ȴ V_a ㇐蜀`jqK]Yw>:tWrgu4K}p+` `}iVuP`=qO]EJc-cIslUbQa^MvD& 1N=Z뱌V=4*Z!# Pk]ׯ{%(;p끰CBҭK7BvR5{yO\$WpVGKIZ;-=Va+ϼ38GrEfaZBtΪ:BšK}n;YnB2A".bIoHXQߤUc٭U Ҋlϱ +@^B ,$Ĕabq^738z:pK>?+P\]<rնQ{hɭ0ؖ帴!2VXUߌ {_ʼ$׌3FHՂ@};8;  (x&&z[CV3Zv@2phXQpT4ҵd^\8IKDx?Q[$e-6npΆ4h4L )|X[E7@eï:F{E{*1/.t0>+up+_ Yī.:M~g =IfzUG&\f%g˗.~)Hdq}Hpw6Ɣ2L!z@2oi+Vɯky4 4!t2Co.fTmÆl,CV€W;[LY>o X“?Cgz-vbij@ +;C!幕> ]v 49Rrc@ +q +endstream endobj 4616 0 obj<> endobj 4617 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4618 0 obj<>stream +pŧ/V] +r~w˕Rgf?g<çE2aEaƹr2}f{Q!}acaF"z!E~V6aLve&[ÿ÷5RLޖEk6 * M$;nFO4йwQ2, ~s] 3}v| B7:~̉ l(p.g]1JpĮ9Ո9.v\fLCj*U%WfBI7sH}nN Dv#),OGV5NR,5#8}dؐ" +endstream endobj 4619 0 obj<> endobj 4620 0 obj<> endobj 4621 0 obj<> endobj 4622 0 obj<> endobj 4623 0 obj<> endobj 4624 0 obj<> endobj 4625 0 obj<> endobj 4626 0 obj<> endobj 4627 0 obj<> endobj 4628 0 obj<> endobj 4629 0 obj<> endobj 4630 0 obj<> endobj 4631 0 obj<> endobj 4632 0 obj<> endobj 4633 0 obj<> endobj 4634 0 obj<> endobj 4635 0 obj<> endobj 4636 0 obj<> endobj 4637 0 obj<> endobj 4638 0 obj<> endobj 4639 0 obj<> endobj 4640 0 obj<> endobj 4641 0 obj<> endobj 4642 0 obj<> endobj 4643 0 obj<> endobj 4644 0 obj<> endobj 4645 0 obj<> endobj 4646 0 obj<> endobj 4647 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4648 0 obj<>stream +=Tw$Wk]#kYp ƣ[uj>avGDy5 <`/[S*[ԏL8>J3HdٯZYdMt't'°${ *hO]H^gӣ2Y-XeB-L &E)Xrɼ3O<3|鷜KUaGLuf5K'nJ #ebZ|dA{͞}f>ighRl樏kӄ2 el{(A8o%S hJ} uOyxcA^V `fatVQDdҺED!tvc!R=!!7w=j_/U4(viFmW(2dfoڂ2 mNyxM*9ΰ'MQ&A@%MnG]IUQe3](|EH\vV30I lBhmM>cM{}*Zs$c'V~c +N6C2NՇqY`ͿζYtbk(W-(/7Bٞ!rlب9ջt c(NJ|Ӻ$i0|" +YC <^rz`F3 a/ؽt )0cMjg"J`c7M3T't6g;O +0fvW"0!%!Y~6ʡY88[@f(tOxܲH~\RrhUCQ,NR=4ڪϡ#$BzD\L [D;%o$yǶW%Y.}rȇhC6Y<M'biqWDWLtzɛ +-kz5J c +B ΨUFQ|4ŏu>0I, x]CX-\ +Vs,V-Cfd +d 8I[KNIڧAYc?3$ڔOˤ;6"4n'>W-~vz1E +qgD +zV$#hAHQ3lqrG;$ԭ-{[q~@/H8"yH;ipW4 ڳQnqbYt m퀂. G9.6@3-A*]fAŽ"m& +;OO:H >x a|E yae.YȈRù@RheX!^9.|W'5Wz{ճ| {/Q43Ӎ\1%[ BEu{ٮ]w*~γiF+k15ndEFY{U繸0+JTVNLM]94ZlT",&Dh^t4Vmc@O`@Q +hp $a5`CV!6M]&i`\-~':0edܶ6$6b UdXǖtFB|sBl&qXW> ',bdr42V"0*G~-vLR3e0ltVϲr'>\M 0J[Ք[^0YK<5`\X-x1 \mv? +MV<%v.);mQi,ͷUV^B7k١Q#迂n<=:վmϧxfo{:L:> $G>ׅ$]fXCC""%@{-Un/O + +'@t"Ӹӝ*>}FmeS6;<'b=AѦl_e˶1 v07IeC, N<= $GFaWBX?Ю$@fmG:])g+qk5#}Yv;DZRG*!S@Y%Z9Ov{y#u<2_kRh5m)9nY y)|%⬽;71qMqAQrlzfFsX*i}~ǗWbt!Іo$?z[ +@6ra[:df1~ +J :JHR]N kkX ~ؽSIML'R-Zص_cGK4%i?`šUXʇ% ,q` %u~4\HPRt vCEJAf~U/ZjR7OdLxwA_  ]*K?ۤV-aĭr"X*%[ZS; nEV"Yr $͗qNtD0"}9{~;W*d[5Nnd[KK>YѪ7)ugޒuB8#S/'8nD6D \0=_-KqOdi&Z^Aa7t95[Ɵ0ē|]a^{C)(Kyo4{u@iRwP%\ `F2zinkm+kM6;FRJP(K7_KE>3/ @|Mۜ}1J{̀uL6hiԱPO2zZro½jM+G.؀iOfS0A kk#{'4*5K4Q[OvqA$s&Y^#iXӾ.srHXy&EG#I4aiyf㧇7̐Ez)* :h+3>yE:$i-rj`#s<;D +xdʀ2MDM 0`?\z']Xд 2cB!Wajt㍝Ӷb;|S&XjwzL! c~_}-|MD"E]p zc1K̄d2q]E5O ۪]#GL?i +endstream endobj 4649 0 obj<> endobj 4650 0 obj<> endobj 4651 0 obj<> endobj 4652 0 obj<> endobj 4653 0 obj<> endobj 4654 0 obj<> endobj 4655 0 obj<> endobj 4656 0 obj<> endobj 4657 0 obj<> endobj 4658 0 obj<> endobj 4659 0 obj<> endobj 4660 0 obj<> endobj 4661 0 obj<> endobj 4662 0 obj<> endobj 4663 0 obj<> endobj 4664 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4665 0 obj<>stream +?vV7 Od7s8Jěm=YɑTIKvM|? j1]z3>v^=7O'7Mm +ݵG KArV23[qV:T">͠ +Ĩ\l"6[}d觤.{OG8z~>uLxֲ[duA!pf_SI,hw9Yvh.?K¬6,ޟyfim`1[684# G|)-b*-Ǚɽ7'yK?ќhIMڀs^N!G'̐й%! Gqq7@Xɗ ˝ƌSPRqfǵj<\LU1ia >ecD2*2s2;H0$M{Tߞ}' ͼ)ԧjmW*'.)Z`>! Miͭ(X2ݥpBo7ͯmV9}.ɯw{fn_|$fYƽ?VuYzwT+Hs|W:5xx"p@wTqEz-ʒ&G׍}D@8tCI6+MbH2^E{뙴zMyӌ'#WM:I߃Mn3xX-t;O܉kEsFO$$NS[x$)y)bؓki散Sv6&OM[G)<`ϙQKuW +ِ2p'& +cM3Se;NƭJw|gftqYj9#f,Ă4];S/C{%T˵( 3d&=_|R:kf 89#ǹ*b$۩o(XRO +Uop'8qt?E졸Tsy86JZ``czJy ;6ITX3]P*51RcԑigPTx&+]kZݹQ^[xJ2Z_voO_̘ *V4_7s#Qەzjxe1Wtsxǹ}22OnDJls}L\tDRIMBn8^QiZ!.I6KOIݍ*VA=ڍ[S2gi`wK%ݎ&~oBF'܈gY^2yh:QiGXt ~^F jHB~X6Q,c${xRE~4@*9C܇۸Ao=*E+=7@IuV$&ʜ1,s e2jujW.j0C>(oj +ݔ ) x3t! +endstream endobj 4666 0 obj<> endobj 4667 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4668 0 obj<>stream +Oɧ$]%6".ف h6@tzH!z}ٗCœ!w??_*Na,Z^<@ㅗGn~nKw&7m=?{Alg![GOPf։fE= kVC='R-}G%sOKSI1z% ,0:q{O׆=p + w3KpRě;]/Gs&_"]Xuyή&XM(*hG'h@S4Yn7DYL @gp t7 C|a~FIOovM#vEhLY=&g KϦ&W`1 +M- +اς4n9dHuʈԣ9sx-ο+rۈi'\<&I^yOp,  9?73 Qi8Ť:KBx҆Ã4 +o0OQS@ <>'L8b#f) +D> endobj 4670 0 obj<> endobj 4671 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4672 0 obj<>stream +*Zbհ%~s1|~i,g&xX=ʾ:K\A3ݶmv@y=kvuub}*E/p(qώSQ P̕V6iRN<~<9,T;dvܲتs[/Ay գڋ7~pA3gIpAdoPf]^&M3"lʡRXM}[ŹŗW u;;utNٳ0 MI|fG\򑄺:.C趗>ZJ+NWxWBlo {HkqHuha{7`@Wj l{>A1BJsd!$f]b9X"Qxl>̊a4"&\Xo0sX8tݮK/urE "HN\m7/"E#7-ipS6z/3ђt͔,uhs^W.h$M5yaC0Dq =M 3oJaKYk"2>e@CV^h1K _z +_C̡nNu^tF꡾P*3= p#}¿z_dp +'Yb +hTS:%_%2z)aԝqF{KA,KA.ƥµ^{a<-/Piy}fڇWKlOj\r G{Y +endstream endobj 4673 0 obj<> endobj 4674 0 obj<> endobj 4675 0 obj<> endobj 4676 0 obj<> endobj 4677 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4678 0 obj<>stream +ijF{Jmt IzɞYtc)Oe}BIZakڻC+֖P5 JiV7tSp 6J k>FvY?cK ]TVޱ,vtP Wf-AT۬hm%LӅTj<Noa㝾jƂRr]ޚ#n&UC`/ +j \^0h +]IMpX:*d`TkJ 'lsZ2>Ȕ*ܛ[&<ݞ<.0oq)Eڗ։9^`^ޓ9Qw" +%q]b p +ENbW7d[2ʏd8v4ԣA0/TPBp3Z9/{v^/e>wv>BN;}߱.R%ndmFh?p-tڎY'Sg]R0LA6RYz8.Ǚ +ًܴRV|7>4kPʡOjOs`œ#̓ $TGw!CB%kP}W:3<f>w( ?lz^󠃮SN% Y' 5E1t7| 1ղ + Zm&%UJDܫbx )M]NaP{iE;c8cJlzjǟ$g9?!BahQ@lULP[m;,Δ̍jzQGd~ )}4%l ]$#fxh\=Q6EDY4R;VRssŠ)<ۨ%\x׈S4 {9_ O]'KxzدZtC/?^FMOd5[~,d"lPJ> endobj 4680 0 obj<> endobj 4681 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4682 0 obj<>stream +0#yPQa2i>+wƉv`M,OnC3wbBV`}\M μU QN94Q-Fݬ*=4kj ~/"k@ O} -N/R7C:-EzU]bx/c>)f9:/# ?ʚ=Z$_nl8xÈSukIƎ@G +WrBD^:] )(0éX',xSmRf^a0a aijHYV!DcD)ކ=_j+_l-gXiqSO}X}|V i$؇|a=^;F2d/ki"(to*TCf;9 n)N9DM!>^m6QEX쫍lgwJOD#M)J.m{q_49@I qKcUf:% <@#pkuW97nPWW*S2Ԗw9K/h>w6ve qRǹUIY ёg݊iw $ST)xp9s]:2ӡ TvHJ_ @ &%NjBؙ>iht,Nua>hWuHp+cG_RSoXАO=Df + +?!`\${E<l +lMˑCxp,26E\n``9`[I > endobj 4684 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4685 0 obj<>stream +e|R9I)kqEݹz$^l*?6}n"no36ha's>fڥ_w(V{#^ìRX<1Z\6v_Ĭ RQc!uМ*r3?|޴1*e_ip0?3܌WF\߼kIPk>j$յ Zk+ϥծ& MXf +s}_rW LQ{~Ⱦs߯j?bwsڥ5}qĮuHEV=Lo9;ÎjI27JՐSE"n曡|5^6U֊HmޠP^eۖlu\}ߍ!+~ŽF]ɶ+@brF~״J;%vo +qPFaXDH!?{DpZ$ ++ČH|RD^ҕSSI} R G1@bZnU˙#K4˻B;[m \kB@z밤KP է"ڿ磦kN- 8m \چ +'㝰_f#¾d!k^E7 Dpc*1^+Ցrp̽AåBU`Y\s2Ozhqvb -1 ar*S!Jy0љy2~n\F [y ]VuKMqMr)TY6ƢOp'?C-een*Eǧ^֮ڈƏMT>bzp>#˭ ![X Q:ٴ~&&ёcTSo~Â{F2 {lqi +endstream endobj 4686 0 obj<> endobj 4687 0 obj<> endobj 4688 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4689 0 obj<>stream +)n7\<T:pƢ ԆdɝJ UG~Вfle>' 0|_uC5g5G:܋'ƅYUyr!⌟$.aejXP%"/L1q/s`RC+ULA^Kv;_lhSVg fMղ /LPw B{$v֝mk oB0[SuRv7 +xA?_揄,J-G[LW!9 A?iffa5upYX-mi&4KPfѷbPbt,5hl'h]?NUG:|Ċ. YbrSp!w᧒).̦0'a!Դ;@/2L0VsqD$|ܠQtVGEqxU= ɢ*q"NbgcDqbiS;X]]`9} rI/P;=cֹ"IQŻKPv'^}Abij%F9_[2+_j0i¬N= p"[㺓0KГ iN>R0(@ D &4Gڵ|bj Pc=l\K4|/~S6SUQڟSnaY.ޑ‸94Ղ2퍷7C +zT3#._f}=M Irk*5ٞt#%_h6Y;Xil >$7֓\!;zlT-3}eHQ2"@`.Yޤd+A?8`QUp|2, D%I +!_0/tL> endobj 4691 0 obj<> endobj 4692 0 obj<> endobj 4693 0 obj<> endobj 4694 0 obj<> endobj 4695 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4696 0 obj<>stream +<yTW mݭgj]| ;D=sU (B8<+&vo'@UtWT6zػKfsK1zG[2}ULw +ъ}n՟HCÀ;bXOB-F~O`D7ǤQPEgfE-Z"XόKDܸQg8qg*+LȔ&X* b#lL6H9\@I7Rx^{" `kY5s־+ei+ܶy\lԭ\ZF\==H}>]G 3WWN0W%pv9H6 -r6yG#Erha:74+K6 LDiRUأ2بro+(mI +n4H(3e%;Y/08`5u2IU &:;#ݴ]?xZ |`g|;@B>'?MU~`Q/Z$)WKdD/(9#mQ9XX"'vy$J:e3Ny6% lhbg$\׈SbOS CW&Uuě^Hw@U"ZF1=!gPaj1xd*'/q +NhLzb M!&Ite=ArjΧQ`̾bH[< $j̸R:FB{cH~.Hj+9m&XóyNlaiD iMLT=*T}Z'M[d(Z_nحk;t5X2ldD#1U3, 6Nh& +DLo9Q+q4 +endstream endobj 4697 0 obj<> endobj 4698 0 obj<> endobj 4699 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4700 0 obj<>stream +;aIKɁ࿄'"<(b!I{)ć;`(?tm0etgO>\]L + :h|x#~EqW>~%*qU[˲d([^4x7׷٤4?rL9H\|pHl,1 e'+oȩFewr 0/MG]=Zq^9< ofjA9qo׎5hn`s8ts ^ӫrOv \nXj=#&+D^1PwÈG+K}{4LU )-" +h gmR" "</_ZCvr.o5galAfM_|A<ʋf36cnPpyhtjlk.4Te+ +C(H4& F*u:YTv۠y![J~26rėjuSHv3+˰GXI +],ּuJX|?:pqU:jvϑ^>C_"`#(EǚOOQ7;7<:90:qT v^4PLR|m83팣4\[|ʏZ 7y5#\Jf}EoF +. x#s7QOLlv*ߛ`bXƩQ`wdmxSY:L +nέr?*O>事2 Z瘣AI~g?ʌzۥ<9L!)C\2smὫeZ0?ByȕGooOkc^ГbwHfgIc8:HFS;x_wU@ +pOmFϹK9s}~H7+WJʂ"b> endobj 4702 0 obj<> endobj 4703 0 obj<> endobj 4704 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4705 0 obj<>stream +!7viGGW!QY/>lv('^.?,Lv1>H_X9 ^',*z#rVW_mGRkuvfzOr)+qS 胺ījOZ?jM=ZKuԛ-a]g@,;k^0HQf.Ԣ⒇ @:f$T݋l2?9r|uMzIЀTP uK"}tþ2yzMc ^*IrÊ`(pdOEa2IMTB@xU1 +F\#1!/*{7}?!]dVFe}-ɐS[IVMDpqn{wd@Æ˅Z2cM/A%(#m5F:b3~̾|OhN3^6BAFGץ_ '2+8Gk-a VCJjAoW:Θ8 OZk)8^ m +k9;t]V!hÕ S@ǒh2&.F"P2wÉ8aXM?wJ7$<Gdԫ{vOb8U2`3j΄dLmJmN;?ЁӴsRqmVB8DqLIYnւĭLxKLn UxB%-:!|}cG^f['w9ߑ> endobj 4707 0 obj<> endobj 4708 0 obj<> endobj 4709 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4710 0 obj<>stream +6py]M/:,a-'o !&%k~Y0ag~ %5{)ͥ9$do5}%q VO}\Dz}GWB)Ұ d)ߐ+*tVθ_%=v:dXJmoפ׵\%+Al4M^FGYDKB^wT3"}c|R9L~a#=}ƀ wQl|HixN7> =4dWiuyQ/J+b3u햯_-wjTIzyҪ\t}eYSsbnnG^E-BʡRœy=Od?ߴBIQtf]Y[{K#8e)|$Ѐęvl]Wlnw|Ep:24"֦Oi[{׎U'N@5v~Oڏ 4/iAѷrbw 33AG9z$3%8hWGЫ)lc%PO4)y?$ +)wj!7x|̃T09z*򾞰"\J 4lT}Lt \ ᐽ+K 8x nJEȋGΈ<,gdKenh7l\B7LSM%vHX"HO]B,itGT!!bG(HRS;.u`ިZHұ Q_PN% +59? a_6|wK cV>i{E3cWxa,Pa|5׍ێ\+qy$k?:zYV)ߔHû[ӣmֆ0V~V;e$D%e7н+~Cj~ATaEfϾn@S9Gcĭf߹({wTv +endstream endobj 4711 0 obj<> endobj 4712 0 obj<> endobj 4713 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4714 0 obj<>stream +?|r:%ӕ hiT~СM8B_]X~ B4ILᔤCRD~g2Ɏf1S&܍mg1* +[r[e/zk6e݊,xHd 'vCx& #IZHt NJ?# f@ +8t`S]٫nq_4h/W [EuRdkZyCSWrƞ{gSyR]y$Y5-xpE8(Qs)a0[Q$8L'⺠kJ3ܲ; : su`l,:]ܐ,8$QS@jRa`ag\9w&23--@}~Zvlac9DN v%R}L,?GLq(blĂ t&FݝߙƧAxy&CxƧUGѸC͔XWԋb=iuמgRcQ?,fjc1*Nu +^}3C3H?ؓ0#PI FыrRb5 -T!e.,E hM`d~(x✩#\0QEH=&xI]%^6HN{Ѝ\vUF[T]ƒ^ +GM $ˀ1Aٴ^Z} "s9K=bAԇîr'Bwܴ*Fzm*]#c"D;X*`ɫÔ޹d?n 5OaM Fz O +A6\ D0'!2aҠP \ V=ܦ׷*΍鿳> endobj 4716 0 obj<> endobj 4717 0 obj<> endobj 4718 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4719 0 obj<>stream +oNo.<6_1?j&@6yESŧOM p,a8z\U/~ltLj:6:2Hb<"-xW17 1# U<*5\(S(ZLr\B\ +'g ġ]խ :x6{_,N29״5hڱ$"ς~^GmPI Xw1GlZ=aG遹uGn%ռ;.X,7!a^aP-SR=x4sCɉ]*DMf+9nJڠPˋji W*Q:}Nޫ4!6 - ),S[t*yav +b>_g|ξJ-`7B5 ` ؂~&Izӎ&n=/ +  *2Ah] Հ/-~inhAR(Pips 5n  6<*KxXƓHԀG=5`!g.z]C?d7tdQV֥;+ic!JE8}"zb/B](f~9{N{T 7t9(||ixL  +lJ/[sYpd&Coֆ~ExF_ +]CiiK AH(>8c"h"XKs($O9cS/$CByDx๰zn}Ќ @S~* }nlm4OM8TwnŝQe΄6vJy]󏩨\]ƕ-P,,dlM0F0Kǭ0RI`[KXYg )TF ʄ4HH@:[/|6`lMe+D\QdHqť7}nRELQa/+X1$pb_*dB b ؚNW f/sFTr.|//pve] +endstream endobj 4720 0 obj<> endobj 4721 0 obj<> endobj 4722 0 obj<> endobj 4723 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4724 0 obj<>stream +{!>a؛ClLP4 v‰:-)X<{4Ku p& 1!N 5xg +\L1e; Qxg+ь, 'n`@IAfh$ +9);Twk_>N/6ݬJalec{,TZiQHC/4ֈf{ FfhX0z6Sjzd q;Iq92C_|6k =cL6k^_,>X0Qg}ܙv>IŒ(]Cj;24vJuŏLD9_yM)XLP'?LVY4"ixTqhS x5{aC_<bReS&2T X2eeYj)ؔ-譐 x:YS %Rp{9v5C +U]Qa'8U +f ZVAAN-~kp䵲RÙ9E1u Eu0+RTl{uΚ 2U=?M$G,^/کqwáTHI4kvg> qDˈԑh9)mȨ%LeimG:O|GAs2JYGN|_tdM(#fRĠ@WcywTˉ}Msi{e•d̀ ^V*b_W|q)4.}춤MfTZ +wEulp> endobj 4726 0 obj<> endobj 4727 0 obj<> endobj 4728 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4729 0 obj<>stream +垚g;Ag7epn~Pj67Du=_$vT3W7.Wi`lyf\i%bLz,|Ǣ<Α Ag:6UP)mVEf9&QtwQO=$?ѓ"foʹmpj>"[hV}>_xzb10/ KX6A.#=tG&bϹ%07hɾg[RYkߢ(ǿaVf{"0H<0VQ 9S蚩,fq 3,敭kM-XY`.)4iaR|][drpp#S>PQG5oi@Uh8 -qfQI|} H|pCz<@PU+Ӵ`R }vj7Ы]=75a\bbM"-|F³4:P-аp ([$N S`eNqB.G89pzdQ 8wls,FbOAWpkwעI2,F"3}3K^>%}ڜ&_L`ƕ/Q&"fKɣyXzUc&3yCdBoH6E,ϰLlzi+1 T1}vd&Ivq#dZT#ax`8|-}w_gu(eo EK!LUnJDT5`WEXvԚysɏ/didKɽZ-jK,$ۈhݔ} ͣT~WfiU{ofeUm6x+f|~_?Ai1d6F&t:#y٪u:!r`VRV g@I|'0)ͨuw*Rtap> endobj 4731 0 obj<> endobj 4732 0 obj<> endobj 4733 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4734 0 obj<>stream +)R +YyՈbJ"Xי=# p`,L MpM&3ƟrgX)+|W+wo s/U&!f0^ T!0ELbR/%w*b ky{V.GxCW8߁}=ac"/X?!'rv{~Fr85{i wA[`wd&r3eqp +.D\ޤSle}ԸcWg+GO(!?Ҟ5ddZ3CQ+Y[(B3ۤp/U$<*jRXU0Y|ir4{@{D=˸pQ&șn_gWg9zHPa/>[zO| ϚT$<2꙯F`D waf?RHA>MI#Ϛ%d~"fD +endstream endobj 4735 0 obj<> endobj 4736 0 obj<> endobj 4737 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4738 0 obj<>stream +fF;\;z5 @31bElvySc"+foxDj+qr*MhŪ_&xp@}>Z&}G!X؏~GfKdbPW ^>DRX99({XG|<'SR ,?p[QGI~en?DfTG6@Zs~KBfU5 +fx4i؊՞lɒHd +.CzOb-u1D EڻGNZxDo`R*]k*i6ɓHŗo YEu){:UZQa9eˎMz >F0d? +Еߎ@~\_%*$y!ALAz-7Wob׬1jp '5 myĆӸP?k8$s0`% +gȾ w|259WD63'y3(σp DCZmH2D<fqw"e.c8Eɴ=bܵF);t/iKsklc\4.p;9_VR+03}=Nr!8y.A47šY6l4J +N49evW$[j `ϕpS7`s(pAHK~璭:$'L!MkF TJFNSa3.1~A+]fU*tDӉT\4s+,rٵUNdw u z䎷 :ϒ ^&<֍ +ϭ7gzᨒJ֭k# :4aBU||4 ɡ-ZIn.W{PNZOG\ +AC=|12g$~!'Ǎ.ثCk[!AR$"> endobj 4740 0 obj<> endobj 4741 0 obj<> endobj 4742 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4743 0 obj<>stream +'^P2#hD `I@m}p+uwZBFXoVpHCDJ.<ȑvο+8}AGWګMn W6sLQ-@@zq). +)ג-w'(0fEe*l ++#" )c:X<"Ix4&Ֆy5.O.|X5*AmbJTc6&c:fxUsN^8 D@![G6 sN,< taMrVmLb2m^Z-2 G'x.ހG'cA~ ~oDȝ;ܳ)~p`L@.vNLr +5|B4Y, Xdq #F_%MLcHlҴ|T۶Fr +zkƻN.) ⋽Ba~q_@/ g'θw ^##`*ٿ/gڄTpkL/ރo7æpW=x^ +S +py$w${Cm4r̅rWb>!, l:Nuj&h^}nj$.A tWۗ^rїɴ6zi]+) .Qֱ '=\ DgתQÚ:JM·&戩_@>Po6)V4ܣ+URf`J!o$LL]a1q!WBڍ=W;>7N945(p?>hlƟ,&|>QrTǚxm48k2v`w-STDdIYմW@Z.yr_7o!ŠM trneu< ᴤvRhcLJNEJCwUY8T?p|yb#5 48Q;ٮ7E= +ڥ9!X UŒ3 wmC4K<‡|4 ~K݃몃 $Zm2pkSmB +endstream endobj 4744 0 obj<> endobj 4745 0 obj<> endobj 4746 0 obj<> endobj 4747 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4748 0 obj<>stream +Iyv'W"DO{\t%p ]ę-2t6ٓ z ,*.hk-O 6^8~hl钄%rGުFq_P?8m7}a[ѽ\kW_\ 7F6i~c AʃPbZ Ot|`Ë#h h9˦:fH?ιfZOry?)kX+xʭ=;#@s΂T[ns%-[E!Bi.0=XGÖ[J%Le٠'۶-u.nI |38جE618@& T(pnQTpcVup"Ue.]LL=sťh"@c!wzIgOٓo̰ WShX!)(8(;Gn5EM??:UCP>W"јKsDcqsX@K^Qhm&{^j:e0<՞xOe;9OFwbD%ʕafP$&y $hpϨEf y&Pl9P#=^󯂣yqa3+'?cS>+zK4Jfbz g 7C!܍NjW //5Sڴaug2Y,VTf8WdZ\Ώv$+<kISxx౨Hyt /Ao=>Ro2ˍxj4>h|Nn +endstream endobj 4749 0 obj<> endobj 4750 0 obj<> endobj 4751 0 obj<> endobj 4752 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4753 0 obj<>stream ++/@j/ʉ +Fܧ"9ZOe 'n9VU2ցrU%43,Y5`FӮl YXBuUdVTqFz +SUJXV7 rd,Y%>s{b{d+m=>~hUQDt9{DqM%FzC8a2x! g6] +?ÄxA6 +m-cD)r?/XR wn2G1 eUzVmHH’&XqUDxY ߰D`!5_Ǜ+VΕk{G)@JF6oEFjsMR_e'm bZPi!PuKq5ijiNiX4+ms47hc"3D"d롍"HZLo"ؒ vOs=bYڌ1}>9Obm0ga,~52Nns;\cܣTXxQ{Iv1/:.IfM1ǧM\CmV*|@'xk bKB~c0‚Ҏ$DM\#:ӽY)G|2g8wèw؉{b\bTy)܏jg,aƄy/yhĕ):vq B@P%)E . J!Xz!dUyV5xWS ?st=`v"9PEg=`$( WI90ۙ74DbwO^P%=]A+#g-}$_/6Ƒ302%Xy. 2="H/#{dTߌ7RKV E}h"ke&0C ll<|R9 ?:^XdBy^~C0| mfjs)zrz˛ߠ-D4"V] +>ݹi,mcc5~rFd8 }QMH9n@h9VDo& +endstream endobj 4754 0 obj<> endobj 4755 0 obj<> endobj 4756 0 obj<> endobj 4757 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4758 0 obj<>stream + 'I{9JXј&4Ӫ@ѽX +N{9]bC+?fV5:@EPƷPS"U͌Pe:7F##TAU, ,DMe c5K9@M-xsq?בjpo}J0y 5.юVfω9G!<=^P(=gMaI+i֨X_xE(h M$ɻ+έ Y0J,ߜ"\NiB?^0`pNcm[HEƄ\}Wa-gX,\쩏I6¸b驒-(Y;DYnLqp硦3CP?!+h뵏0сk?R?>E롓/[=6Ot`\^@?_#VsFω5^pH;F 2dVnQC]:oHD>CR,bB;~u%Jx~ChR:rVժ賟Ω_\>OиAn_}). 1v~KC18Co>d, +7AqSh(ur-ا| e sf#JNG|'k"\j{ GSb `=;ӜBlC^f?ZRrUH%!dM.0.NpdkE#q%p0&wS9.JXooь'^MDxmkȳ \,B._3$$ZD#8PC ]Ic\ħU!" 9 sպkל% PT]#vSȪ9B5*o>> +-i w2`qR=#OCEE(]9u@L b9o EO2hs"WaO]uK#9< \nրaoVl5w,@QU0{c DZvtn(Ry\ʵcjb77L~Jn)/& +endstream endobj 4759 0 obj<> endobj 4760 0 obj<> endobj 4761 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4762 0 obj<>stream +;虹$H%gF_~M!M+i2Z:j2*%|!kPJ9hW R>!J8u8;w)47"uR -9T/I,žvT8%b؁SϪQBlF;1PhH0Υ x,]?h>&G6rLG ә7j.2 œJ۫{NElyLqd=7K)z޻Wwih.T6a ,`!2r+,iB,<@T@5`HCc3wQn5"mD]սBK[„>NJoY<.~ (D𿱓ǀ;XYqqRV +^he)Z}ޤBZBt1.Y\>*QmO xW6gJ@S[ 2CCwy0q&ɳ +U,X!]6uQT Eӌy(w,%@;s(fZ2κ> endobj 4764 0 obj<> endobj 4765 0 obj<> endobj 4766 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4767 0 obj<>stream +0%iʂ*tPG A^i?)X٭f.s5xzJPKJy8ڇUh +sExƴ#*9淲baQ@5y}@TĺJa}|^x2R+dHIo^S*g3iZ*3j@ .zEI@_į]3+<Ϙ> FA? CbveoXjagoEs'&՗}7^7/b >}D&\aMrnbyKqGPDNSك2 }.4[Ŝa3,*ɓ\N뮸.g1Q{Y.S7@Tsy++ Q1?#}\~Vו UJG,|!͔ZyNJ˥~]qf3DFu>^LU/"zuwIE 2n5+Vv#68dMQ#˹#%A6;ÀC +&XXn8Yy`=t5%h-Z5U0`ޚ@M^%N2j7ÐD i s~pO.4[hV~1Lb1 r2*0S`K78٦KQDJßL`„XX 2pЈ'o/~m/2Ezd,PrVI\MU$eyOHHQ4Op4-#yakAw)1Lޝ27[sVDmmưhD0:,lh\6ԿxV&6%b]6"wp"\7G.zǸ%M! D + -m}˝괳Թv8uFPLYY*>۰E# + Iwnv@ܺF偲M]GQkJNVeOpYMe^Y_2ϠR +endstream endobj 4768 0 obj<> endobj 4769 0 obj<> endobj 4770 0 obj<> endobj 4771 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4772 0 obj<>stream +h?`"fK9p3݀WQ]N4EDj:"f<֙XX3Z,p)wHΉ"%PVn`heg]ooy0U뺻OR^ΌFRR'ryIi@iDYtLp ݱر=o,44:Y =ߜ@Ju˹hw$ˮXaeTV/_bu/-CF0$>mmsH0M= y,(NmhI@)Ip1^.w/$]ќl(YfqX<>`fo_ݫl.8|-"K˯;:~w`[ԢdH.P lnԙ{.v5Ƅ. !2%,yieS/+J@Hr`UeE҂\% f7MHK'ӵ]2Y_Ap1+{Q4COh/˵"{y,RNb[>D&_Җ^F&gn?y@nխMDL׻-\dtqI(7h]F#b?SK#^er?DZ_bo[7 +p)[R#t%DY+2Kݏ+ +ڔ֭qDž +endstream endobj 4773 0 obj<> endobj 4774 0 obj<> endobj 4775 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4776 0 obj<>stream +vlI 3fgSX䋳q!s%{_ ߐ%j.4"/dʪGE&싇 Y1?Y*f>puSW_)$Ve7K*btyKEh"U?'J;zfSLy%[s<_jI81* ;xbXzQ5QJ&b`P! 2}D4;wlw0UW+F(+] yl^{}Xf،`l߄82>̡ǺQg; +rf aiOvl(+:p+qG[ ~ JPfbYVvj 1&S48"F ^S)⥳Yܾ[y`*WY/1iawhdja3U*i%݁?zDlRf-&Nx`1(DVq +˯jn,wW̤DzxZWa"ExF]Q꣓<+BbVbuM!,]h S/"ulྪakY$nяyC*]drvO44gxAgaF`v DmQkM^!E/yqzpL3<=d֙a\;(M8#U(/|{;;Z %Z>Ҝy7OYws..Pڨƃ[HSPtzy4t@-WyJ +endstream endobj 4777 0 obj<> endobj 4778 0 obj<> endobj 4779 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4780 0 obj<>stream +A=S + E$;,W +cMϥG;͔8X2ǖ+VaS+ yAc}3916f4u9ϋʦ +"PaeNj$B@g?E@aHց#Li8@k& +z*@Oɔ F0C1FļCoG&gN*>ESLT<<|m9PYh P!^7k'j.Mhw΂M&հZ?BQib`ZDp/Qh4Www&Tiu(l-$3<'҈ iދDŽ w +פ 1s!wӴq+ YL$.cd[4P(ɵ<č_kb%&w Ld ܪR1ZDZKoyLa=С:Dmgӳ2H9a  +# )ЅP~'حa6%q1Pb!g/,C\sۀPXТDI2)|}Q r|BE2.r#o:lZmv\j y܎(T&FѸcyi-$x+vڧZɪpjՉH +s VUC +I]CvF.\h34D+#PZQӔi +gφqaBL1I˺Bq^8 $QWmoON .FUFq ]OSg/q<'';ͣKx#;\flhrAU#' +endstream endobj 4781 0 obj<> endobj 4782 0 obj<> endobj 4783 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4784 0 obj<>stream +/Fu<'5pЊn +3\ 1aުZR}ѠƓhzwEY 7mj;gDR.URȄ)37 (7&=QWD%,%`[soi'd}gfm,mq9pv@={l>Ix3zw_'-K|vǠ'iߧ~ү$<$Ȉhif_TgxTkH/5DOH)65eGɢ8g;{,[v~iA' L+;4Ӓ:kظvN{FK\onCY>  Nr>:\RРpOO~LÎ␊^U1ZS@z~W;01WӌF?Y˻9Z98ꪩ:x_#@1NA~tLm@yyPV߆𸮇DӇw~~,Yq.@>zCm0g7f#l(9V|V כYR|>kv$;:#cj'(2\>+s wxOZ˩eyxTgM%MWnݣJ\~\b@?s{csnT?Ӆ/ESER߿Zҗss;4s<.Q1?TF@9\Po_ml. Coa[n'%*'U6Ҿv|5|RWJ`/|EE[B}w{5uA21Y +endstream endobj 4785 0 obj<> endobj 4786 0 obj<> endobj 4787 0 obj<> endobj 4788 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4789 0 obj<>stream +S{"6%TZ7SNX,?On8i8 U00}[~Z߰"ƪi9|%j@L=N3]SP9[1S*F1BC\v"ن#GdPA +CE|Mne@~үev.:(U06 NMntc Ҽ׳bWl K@ԥx!527&ri T旤M*Gs9pП+l8ãcZYF€-$JF23f7|;d}\ݰ&l_/pq"~<I"а%dzh)]zpPaᠮ +3~!OyYvƆMF]7#ji?s\Ū_BSi.1i%i)m: "Q>z^za'/S41QNTUq/s٣;Lm}W?_%1 ): pc KZεic(׹EpB:,fJk ooQc̨{YөkkXDxWvju2b&82Ɑ1x.vF4Y} 'ϑ,:Z,!馯-Ru9XsC +>Tژi:BCoUkLkh(J P + +endstream endobj 4790 0 obj<> endobj 4791 0 obj<> endobj 4792 0 obj<> endobj 4793 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4794 0 obj<>stream + ż6Dۤڒ5n:PρJ䵲Lڒ!L(R @ty>!>cBjM*6k-8 8:m hb߬I9+D`\nQпroq[-vW&"'gqCkztmfƢ}V;Ppr‰-)$Pkxh-`aaS~L#V }owg&*дCEU_;4eI=/g+'$*7ߤ)ԟ!@(6-D56$=,[J2'-5MF^=e&;3HEN5;.t@iR<ۻeRYDS|J1s7iyt!AcD\1 +D & 7^"$i1CvDy!چ5!W.uYS\ȩ +RT$0(X8@߾o=OMw?ĸ[HyC蝑sgc.2ת>ݲט~EL<0 MPH{-e2Ϫv,a{y)GqpZ$]BXGNI\WGfpKS~40#4V%Lwb!ѡu#Ji?ylx$ۖEE'T1no1C'[xQ;_Ie u  ϳCm5^sAoS\Pk=$j~Aa}_s(we/,Vp)FCGVCN6*lw]G\Y_Ddp%gq|> endobj 4796 0 obj<> endobj 4797 0 obj<> endobj 4798 0 obj<> endobj 4799 0 obj<> endobj 4800 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4801 0 obj<>stream + z ۏA+w̵9|%'ZR&Ngʐ7 M9k }%(fsDlV&() 96lgJ5WBJ %dߊ6nd}Kas8z7 ++|鮰*k99o}߸b֤&nNn$1\BpEhC~َ IgI Yx]^%@O@5^ sx'񨪟 i4D%bi90lin$vDh]ꏱucn5ɫL_ +*uHaW ?+N#p'1irUZr>5# M }fΉ 7u%,M-.0(¡ڶu4&( <ˀ/$ڿQ) +0;xyV2 +&3Inh mDs~y,8 +"SG!%G$s%ܷg#) +~݊".v6?U1f-RN-/|tCcTSQL +DY"=M%&r+)Dm[q"*I7:F`Y&R sL$}SwDDm3€E +aFpm&pl]@z%,;pt5`5)@QV\2_3quTu'2vf@/FFIp@e92넟2"=@MQo}~/vhU׀-لLYzo)!sGN&u;;G +}>c1.jx7}`|yk N@'v)X@iQRvAPAs'C.Vx} $}8E16Fd!+5!n2w4ՙ{&tR^ʒ"J\oVx3)(Թ;|COxRJvQ7 1!#{-I  鯤ʿYLT vB'B +KWlAPFh|f~l*m{X\lzqVk-GBPXsЮ.nK-Gs#q \i1i>o-ȑv +endstream endobj 4802 0 obj<> endobj 4803 0 obj<> endobj 4804 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4805 0 obj<>stream +#^"XW(>a $tKhV`!ij>u9ovï,n\:`oOvccT8B#m)RRw99ò/3G<mG_Y ?H=)eVRf+sP%aF3TF dc +Oom z& +ADbԱaA*}r,[RH9f;X^ z1.x xVзkuOi6Ctj];ǁ6nr;)j_xO26{߁г +4*Oq $MYfQ^Mpoڱ G۱GizF nD~HubA9At|by[\\ggc*9x{]:Z_b?D):Q +:a(G~ E(l88ܪmf1g䮍! LǴ..S 뎊3Fp2}n?{.aqA_jXQxG+'Hb]Iu1O~"߼6W?{B1aH +Vy7h8~RqDzЄQeL)P]T{X$L +;65){zF0Ȓ$Wz6qe%W=uW }yu&o8攁r{Aŷa/<0؈Sx D> +endstream endobj 4806 0 obj<> endobj 4807 0 obj<> endobj 4808 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4809 0 obj<>stream +7"|\%xYg*1Tf<ҹ?v/8W#+@= *apIOw ?n5e=&c﫷pzr 0m'Y0]@"iK LC#kI-rp:r[RHmUr0Qbh/PS b)c*kaIWP7Id ֲw]7~yvg-+)T8/4SwLk@nxPD6MC V!w ^g1>mqNc0Zyv* @WN:}*{efwTĥ@K@A*"hl9_:^[$9HٰBA8Ng ]p/@m6t3IRkfjtP.Ap#خkk,t˻𗣉 +h>EyC?NS۷e,Ț> @3~ 1{Pn {Hh 1xطjWáTwi&;ϭW==VU߹woPS 7l!eT྽J+/Fg Q0E2T~0Ug9q:U# A"ԉI38k5|fq|{xH晘O_D rN &ZbL}#n%4TF*}}r[X/kMxW).fMY%#;J+ +FmJym7f+?t-lvCI&ɆVo^[WC̪NM_ B,iD/gs@b>D~ ݺ%UҨTMk + +endstream endobj 4810 0 obj<> endobj 4811 0 obj<> endobj 4812 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4813 0 obj<>stream +gi{Tn*?;ae1#+ ZPdE9'.8xxd +<;p&UpkJ3mxpJ ;~, :hMuCDQ8XIDFS(;$eܿzpb +{uY2T=T.QP`-tJA--0Ru`F `dCW!R ~ynugb( *,(\ieY0!<$dD% ;uA'P',0[𱡆_ۙyLua-Wq$_#HUhgryjgʍ*.$1I8%L{'cmWu Ȕ$ؠeE |{>c.WqqƮJ4]%RyJ +sؔno e 8 J ݭG\2o.h0|˳V*I$ +endstream endobj 4814 0 obj<> endobj 4815 0 obj<> endobj 4816 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4817 0 obj<>stream +:ڷU\²AKLg` Bw{+ʎd|QCjRjw P54cb]]ʲ#6Iȭ'OgHzAOR%l KHKҖ3ԊHHcn(ճ.\kFI/Pް+S Z*ػ,4>M%Sc`B@qTד<9b^#:P +zu}Q<]FX! fo3rI|.˃MGܥ+hxQŨ_3+8%6 ʕP@0ޅ!BHF5> u8E2J@ _@I +r\3QuUz[Y)? +^.d%sbDm'ROnZ +]̜3gɓdr| /lkj12a%l-W"N7aI +ٱOl:(eER'2u 3ǤU^^)K>Q&# ctHg(VeVug`͕Y5I4.p10ȓ<g-Ugr%:uFLz?+쿙_mHg R +OCn&g_Uě"-EmG=3NX?(V *6@B-Ct3.cT{V97asl.kl2Cwc/ yB> endobj 4819 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4820 0 obj<>stream +p 쾫}Awm +cP\km)٘g:{WbõK-yߞqЭiL[|yԉNw4l$Hr#f`$IeQP_Hq:ХzU)r>w/,jM`#yxY⓵/] (ŀJ>2*:1y]d5Jp"UWo ?]hLX[.[ٕæ414i$sQOãIG*))'VQ'".[)MQ),>/Y YHcԁ0oH0O"o./,#ٵ6*u3xT 4~$I1Ds9Z\ξ3,e^~ye]A-Jd@7Y]T[r׻ f$IS\vCoc}SrjV,Pzi0:m+ᓁgBM +endstream endobj 4821 0 obj<> endobj 4822 0 obj<> endobj 4823 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4824 0 obj<>stream +_ŋo^=C@&FDzhq[Bՠmw?"_3SP C/PZK/>U>aSfvW[v⭘,I4Rw'=H;rsxzz\SG'0az\yxIA=ފLsՈ'c82>6k-zltM'!伷5Hz]9B Nsd`=sr\( >s'[coyօ3~E-U)ZZo+S?% lԵ5e2 cD"G4!9։sI;Ig=3ԇ/8 U(,! $Q};F,:164ϥ>}ibj`83IT]:oSiWhwUw5{WsbB)B߸8VpTԎkEH43ve&$yy}(u2;doN|Dwa/LAxl uծ1h){!Y>;~7XɲXDJOsF^+=ml.Nhf'\2Vh~&ENQN_?7at?[aVX&wr?<[* a[P2-e񤔨SE%,l_s: MiVR^24Ĭ%ߝ;zV9\;:P_ҠTY0U ?^ dEDcF%Bu$z|`B o?|$dD$q탫6%&VfӊɊ'YRB!&WvgJjL{M +B%_T0X@x +endstream endobj 4825 0 obj<> endobj 4826 0 obj<> endobj 4827 0 obj<> endobj 4828 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4829 0 obj<>stream +h4nA_與45쵠F;E2a> Lfxj0 +R(9^ZpC t 8\6m+V$cX^";IPlh 饜efоՈ Y&qr:xoJz +i*7d:3_-;*zL(F(UdƈhVʣB&5ϲ*K>w=”Xo-Vco!Js.?8t4jnn˗$Pv'% pxzx; qSqonWx@~o0DO. +ZszBG`t#OmJx})bB:n;זuy f"*)^*vyR\s%5Y~9yQ& ˥yl@{'k02B]j}+ ALUٌSi +m6wһK=X1<eBt^4^6V +xn\jNJ4 岮dL17P`Njx^&i~,[r&Ue(>r؄[b$B?jT{q=I 0eXo";+VM6D^s՞LSB g3kfB,x| -1L!Yf9VjgȈ_ҵKv}]{ZՃ i0)D؛Ҁpx5@ jzl:To;t[K ^t +endstream endobj 4830 0 obj<> endobj 4831 0 obj<> endobj 4832 0 obj<> endobj 4833 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4834 0 obj<>stream +89em@bSG#@-bcPjd @gFU|XGx->=z4 M" )!EyWnN~Űrɣ)QȂIrW7^wv8# Bygo֜ Uնi7O&ͳ0;*e7M|>QKR`H}ߐ/̿PYڣ5y/xZҦb04{4g!XCZl 2o*GfcY=P* 6 tȴh!5{#TbO?&7={$ی\+/_q|!BҖ̮aXL 4L>\4BNkΊqa ى7%0~ei oW_vGRF`cDQMQ4b@uunT2H ڬ.73(K.!w>a'1uk|ރ_p;;WZ7pY]Þbh4T8=ښ} M>> endobj 4836 0 obj<> endobj 4837 0 obj<> endobj 4838 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4839 0 obj<>stream +|) %_,mG\,Gi-8<&aK",U 1Y)QrKaWYMc;ɭ52Q|jV!^C͏NW_G[A`|2ӮM/!3T|YTߥ0aB|f%h> zn]#? + W3ΊC]S6ECD \{*aᰎ+0.,$/c2Y׀SՔ6KoMD1 9ݹyvvEB|H>I|4 ԉf 7RQ=3Ͳ\^! s? gCIN}gg-9##7Un}a\C =š,fiH0VRH9tlOR + ́p^VՈEAPօi|UL&Epȼclzen50 W>'R k=iʑt' X}A1<֌%3G맼9AQ2Y~RJ.2\ưlՍ<%d$Xz<1O:NrX #NVA?aL$2+*c`/tfZ9T{)*(2^nΕ`[͑{!-ܣp +L$7̽ᬢAxm##.n__W E"#⥥=8 +endstream endobj 4840 0 obj<> endobj 4841 0 obj<> endobj 4842 0 obj<> endobj 4843 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4844 0 obj<>stream + +3ݏep<>sF"9 YlPfD8 Y M#?VMJחAB_*N:#{%|3WJ6m9T>'xAԉԂLqq#'/ux;aYP2O mUߘ ko{6 +FJΤwF^\^3ڍ<S?A98=2ݾAUC;s'<3Ar/ٔӌ A;9#vWƱkE֮,6v[Xt +ApvWP7Z^w \z:='~C.xsfB]=H꠬_[-[z%a8u7/YhAmrVAxta=FK˲i CelTZ1f5Wdv |sT1oꭇnwo$zΒI .?m7M;br bl>e7Ӫ:ި}PgxSsc:Mrx? A.ѴEi %/+xx$QaGl$I5C8yCH}y &E,@CN*f*u$+9~%y>{Mk/2nrι)f &TR៉m6;)EgZ%~AjE~_wk^~5)eso2ic角~dywa*) '$j[&7f33Ɛc9wm=EL5_iP*(tye@6QT̞ep,x\$byC($<$hxg \%n>'VP:YZTic-PxBZ_+ZT7vtjAJ֞ ѵ>JoE 8KZ嵂i3ɔׅ P42+q6U=9BbOVim(n8]ԋfUmfZ/D7.~(8p1iuK4("j,\߬nt8mz +endstream endobj 4845 0 obj<> endobj 4846 0 obj<> endobj 4847 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4848 0 obj<>stream +oe`run1.=#xtvZ%Α4`-OT%̕jOnB8_v'6-NerO **P|Ash})PBjL|Ւ,^޶i:ŴRfn;pˍMo'>]]2n,*SmY&Y!]KP >zvW 9ɠ~7u2-GDRt%c5r( [ sŃ]Zp7R r?I(r.e殜KbNFI*{UWLʭAܧIRQ~4jqI]Ӑb{7T(qBLsB$]AߎtkFƑDL.Zxg3:嚵ϵ)L]B"i456z\a0$,6 ʵ8Fڜ"C0j,ɈɳD@ޫ/oW;рGQ^Eo>fbQXmhB OWki T4 Ӟh# D4~B/WFAsg_YA3rWv:,Op`2`3Qxc޼,Ke C/^.afBԯc=CT}qbG| ʹMXa.sufzIch.M$Wh37aws6B+ۭyd_aôEy0`AWBCM .܅ _?ӵyr֣( +endstream endobj 4849 0 obj<> endobj 4850 0 obj<> endobj 4851 0 obj<> endobj 4852 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4853 0 obj<>stream +GɧAm) `툲 )tinq* -"`i= Z[gw&b4‘{UoP!B 6e#h깚ډ=fJxMfƭ`qOq+8qfA6e gYב +9nNhO/}8멒uv6H7Z1uCrFΐ4vזRLq}.݊ 0qۊ2uB{c`aý^`Z3_tZqHVW,qܷLef!eπHV$UYծb#P +}LgڎWPibEtA~`gTx~݌d"$j?tr L7#04G :%7. aeM>O *Tk^2gx +:y-EL'm%٨2<#]=j#\bS'Po@E@.qH@Gv(BZ1'ʖx-,slu`Ɠc.ipeClC(RyW1taQ?]YGZ\4RN$$q LIkxDը+G)uUt7#r%_d;س3ƼSkF~*)̸lNi !> O :zzۡp^)_iO%;;nx/ sC3~"…qst?B}pk9M#TiKc{fFdGMm!NSS`]&Tّa@re wIhͰoџidL&s3eR ^-B! "J~bWi,܎|ŀ7 +^9f?t<=}nA3: +ǑД` 'c6 Ϸ#(=`ڬGRTi&bNS2> endobj 4855 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4856 0 obj<>stream +%[af0\0Ow5f=#.K`pMu4Bh)9"{wC3J$w]VhFl?OeZ[:IpF0&L5P:h)}޼Yl)r9,iEf> endobj 4858 0 obj<> endobj 4859 0 obj<> endobj 4860 0 obj<> endobj 4861 0 obj<> endobj 4862 0 obj<> endobj 4863 0 obj<> endobj 4864 0 obj<> endobj 4865 0 obj<> endobj 4866 0 obj<> endobj 4867 0 obj<> endobj 4868 0 obj<> endobj 4869 0 obj<> endobj 4870 0 obj<> endobj 4871 0 obj<> endobj 4872 0 obj<> endobj 4873 0 obj<> endobj 4874 0 obj<> endobj 4875 0 obj<> endobj 4876 0 obj<> endobj 4877 0 obj<> endobj 4878 0 obj<> endobj 4879 0 obj<> endobj 4880 0 obj<> endobj 4881 0 obj<> endobj 4882 0 obj<> endobj 4883 0 obj<> endobj 4884 0 obj<> endobj 4885 0 obj<> endobj 4886 0 obj<> endobj 4887 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4888 0 obj<>stream +)Rp hYc|%%X*_ݖ˼1J4]z 7\%\㕫'V3%H v4ޏLH#Bndܳ;3!8t@n(w/@rke>?+uQi"wC@tAϢ'  }r_)$v#pwq7iOΌ5: +] c , "JA}ݴصB,hZ;;T|r+sz3nr̔no@.fи.bnYzMNF,:hXEO6xC}9kߏD(}T6ۨ2njmm'TP't6T倭Qۄ3n;ʱ'F4Ѥ0}D;h~Ybj+P[Rgy>L\ɴz4r%w8T, Ucޭ6% 'C?GFd,x/i'i+D(8%GMRDW-؁l\vV`ɣA)'A~:RJ"{#G/&9-/9-2Ɍ~HkB(RķsO-W(䳝֦!|4\UR~!{rZS,FnK {0H?:̇Gy^ t[` '1Sa% > \77rF>B5@B8po'na 2E`Eq%m +aςXjVӰh'`7|kKr}iJN (<_{f;6-oqS]ѯVE 46:ilg*?C-ѽmÎZlP@XH;`PTqCXZJUۭUP.bŌhuF|bӀh]/_ U;S7N0[' +8.$80sۚ3 g7^0<š~ڃ/$i~}xCl΅L_E+R'?ysOZcDzZO;jfNirJҚI%yütG@gj͉,Fyyvn >g?YHˇ6IYv̈́,P{=_c ^wQ㡯S77Whs!͚s7H!;=tQ,&;D#A3FmF!\r&F<*t t+!+aȨgV=czx(Ɏz|18s9&aj` 0x6@ySCp zsTg.wL5dշ'sԗ6a8m0ݐ=< Lr߯(%r#Ӡu6Q yFkP=@līaj$s`%v{]l +/2xj1ʂry}POjk>4;i0ܤ e-d<9* G%FudWJKaι4JH7oS&J3/29OwW 3WTdypAaLԻ\sS@81M쉲OAh#ݬpjyЬVD{ +aG5kGMoJtjy N?.=JC/ Wn$鷟 ?[ҹQc[Bc+Fbm9}P6ȫdI_Z]C`Wiu`Rp5ޮ'ĊqzET2Fxk9G -C8ݟr?ۧQ0;z &es6)w(4BvY*RSF-+TtX ӱ;Z +qGl q!ɟ6d{xngm q4tOqMg~tJtؾ܍lMI@䈈>xNDl gAvwwa:8򄊂>SIZA'~o*nIxzzE3jiNЕ[s c#FTx}Ц>4Yu6raHÑqVƃ +K^4HZ PA*m^sB(4I1C{W4& +K`Tp5{o VEL5(I1ėl#>4L6=_X2e! G5[˄E[>fR\QX +07Wb#QnCyla ~oGUr[nh сӐGr 3ҿcD ӵ[ʂ(ڟ Kf"*/9Mq5ȓwr*i\3f[kI;DpXArN[$qC84>]x}#Ďoڶ@6DZt/cY2&i.RH)c1kבc?cLrg6]yFV/~!}Li6c 3ZQK&lgj09gFP!q =ZeBNFruQ1#x!hPҠ?77 rdFMy쳻[v 1uυ6؋mjqkUg{C5ym`ʙaFx/}}gTƇYQH1haf$^v"nTB{)`\ f( /hƳS}u[bA6EVX@Ѱ9dfޣV֗S̼k) 9IKL&\e^M\X}~v/kUP~eQŸVD62=Hɯ՛5/"4 ;SC˪],.I)[zѝNbr_%`+l[̈́"Fݤ֞kFwN~Sht-x{! x$t7 +0wTlP;HȎo3cT.[}dנC*AΉ8ɻ3I`o.S ]IAy8dhnEW*ڳSm ~ %kvU"PH[yBL$@;Km@ef(Qt/d Ua7$O\vuz;Q>.NY_f8B5WZnE윩S%4; +endstream endobj 4889 0 obj<> endobj 4890 0 obj<> endobj 4891 0 obj<> endobj 4892 0 obj<> endobj 4893 0 obj<> endobj 4894 0 obj<> endobj 4895 0 obj<> endobj 4896 0 obj<> endobj 4897 0 obj<> endobj 4898 0 obj<> endobj 4899 0 obj<> endobj 4900 0 obj<> endobj 4901 0 obj<> endobj 4902 0 obj<> endobj 4903 0 obj<> endobj 4904 0 obj<> endobj 4905 0 obj<> endobj 4906 0 obj<> endobj 4907 0 obj<> endobj 4908 0 obj<> endobj 4909 0 obj<> endobj 4910 0 obj<> endobj 4911 0 obj<> endobj 4912 0 obj<> endobj 4913 0 obj<> endobj 4914 0 obj<> endobj 4915 0 obj<> endobj 4916 0 obj<> endobj 4917 0 obj<> endobj 4918 0 obj<> endobj 4919 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4920 0 obj<>stream +E Q%w6~c_ܚyjuH^XB~$/VٟO-d=lK-(˿E}bgE5Nz̬hu=UVY{ #~8F'qZ&F "?CbVrS SK3(HH,LJ#gUIJrQgG28_ ט9ևޕl` +I)n+ĥJ@GlZxzH|^~bB&`XG:ZL ᾋm{ iqȼ{LBLU&C"4S`}Gn~Jx`OvʸW!HvgS37hC?2> IzڐXfy5KP o<.ժ| qpZdxAA:Zg _/z<;y\cYuD[yiWd[/qۉJEQ@·%FaZ}$)l%Iz@0"PHbT% u2~ 9ҞZ<7X`akp ֚y__fDz]I1Wk !1B^v:PÇx /o3'lncVF #yl/| Wo42F[Ē0g9sş+,˹2 Ҵ!`ZY͈zzqLƙfdBҎQycj{"eplEBGθA +hڰiU'{L; *i +oEK9 +}[[4C%j%j&So(?-{5M-4tcKfFwo Wr|>UX3`- C5D8Hx!0#4dhǛ[leB]PdV*)frtXvHZVLO,ԙvҁ +݆޳>此yvh;Ugq7u(q{!aW/j$Ok ͆5E1l cW_ 2RS?ΫwyFpqн,ip &/AI8iEOLJ7lUG<52=d[ +|%adDzIgl +υ/Sy +qLT\VOSҊ||\uS3 !.xt~ߔ(u;ރ cp`2dDA40YVvQNcrwHS5flxH` H8[4!=g hjN#PVwczNva͹ +,<bL0XԷ{'`O'wnM^]w L@'f* ry.4<Nё]lI\Ҧ11er$gw !㤟mi7OϨi!,E#ڜNgT*Crb^U 2HU>f +.CJ+жlD'``Cg-,0ZY#1t_uY~â+RQԌ Ъm|\<8%D[x"M$kLZ p}Ȗ̈́k=k W9mډ+YLcHOAT5c.fqiWRsjK$!`"D1e[_BJe`S{"QmUweO&'XW ⷉ=19 Q<n_/ *0!3[WpMEqW>vZKFI~3x& omĸ黲. p]k(@WC9L U'-SAn|Y/: z&ga:-&pѩ<5.an 饁۬=`+h˰qIŜ>䔁`/92MP ľ$r5BΈoڹ,GqkZbcי@PK*gMJQ\za9e ~$`^Dɘ}PuTZ1ݨo}a!It_W{VP .FӌhIW8Ak1"GsJ~VRLWB +@PT֜=lb' $.16([/|?jD#tw6Mۭ7_Fn8ؙY T3v}SOc#!0+X}T瑥_2. ]Z2o>$ Yp!3F(۫Q'H"wigʋ~ #=a1k;Ǣ-'殽VDC. wVb /JSAdM'~TYK)Xlued&|0{'M%h 9:6C +endstream endobj 4921 0 obj<> endobj 4922 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4923 0 obj<>stream +%̥ "Wm&iͧFaEp`憉ҥT\=_x8ސI.dfVI\LO9 N:yh."3}{41-R ^}~LytMG2Ʈ'(EZsȃ2xHfb\=:{P:BDYKczn稖'M~fBPThnk[ieB{㤤 ww 纻%c:)9u |#88ɱ!DkrhuIPR,;Hvm`y@Pf3䒤,/Ȇf0p!])#G:UaUC0wQ,b7`t4R<  /I'Cj?mPx |U4+\@^"zڔN_mW{ +(d(@ȡ)Jwێ 90Ap|AE?W 3pi[<{Dp;cIRtG7oB#)^ٯp7}%txަ=n;Bk]B 8O!~APP=] +|5oP* )Ul7PAyHKGUbU;ץwV`ٲw~` R}륵Hu +S13M+y%tN0Ԗ8&MqYT\c<_سXF{e{{f6i & o4 zHԜgdsSdr:<ziz #rg$"rRzi^+ſoL녊rbHP:=NdXh<0`g6f@}xak|xnsE =L(_C +endstream endobj 4924 0 obj<> endobj 4925 0 obj<> endobj 4926 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4927 0 obj<>stream ++>ufW+4i.yЊ-Fi^JDnwC ٠N_ ZPR +P0k +gt btBQ7lmoc̃x;nBn8 +T\*oqav +։1#'N?C1w[e+*! bFLI' Zx/c&*A A%B,{H5(62ł21XV7sκ 4b.zrsxcyBioLTv6gZ^{|$.I42=AJ +kj?TU6]WW+6sȥK\:zOp{\x<N,n$4HyyHEB%Ҏ~ETcMX 2@zD:IK9[?ViÔ}SR + ׮9 +h̩IDZwV+b(1VΚ%`0DkkǪ*b 6*sBe4"e2 וdM|6Bi!P2Kh2ߑȨ3&NL%e,ieᑱ9_aODbGer*-l>>.P_? ,B 4.NҒ˘(WMt#Hpd=گV'ա:f4G|]"4SFմր _\1r|Ahs G/6pҋl9jgTYi{47w8}uZyAn6hͨ R-:b >sq$P;P`<:dRB%c{X3zCww92n9-PoDJNkl8cb(rRzhmZT 7j+j׏FyY&~jI Z8ŅDǼK2?} S߫jϴ}gM +endstream endobj 4928 0 obj<> endobj 4929 0 obj<> endobj 4930 0 obj<> endobj 4931 0 obj<> endobj 4932 0 obj<> endobj 4933 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4934 0 obj<>stream +ƕ[ǧ]hQT͸~o b~@9ը}OpOrUt6RyIK kіI٤XMB[DNDfWMjag$CR!Jc[zaluud+>pԗpbWY>hA]?-._xk%%FHoZ +Ru&0+yu]ibTn*pD8Ds*N.wzҢNMȑhZ`{ 3kQ"Yżq*[vr)=pf5Ag)yXc~B۶:hT=MNx`') ֿ874 +^Z_֠yU 4T3n#tzV.3Ɣ*DZKOğmȉ͇G4޺- YeD&ڙwKn%ћϩ_q]k^lY"v +*J ",L ^tʏŤ1<2^y)깁bf[݌҂ۚױ"Z}@7t<(Oޝ&'`82[z}N˟R w{(/mc[\׽VPs, 5C] ?'{iKj3&K9,9 vKz>OUX8Kbf (s:ZA&sE=i +endstream endobj 4935 0 obj<> endobj 4936 0 obj<> endobj 4937 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4938 0 obj<>stream +KxZ?Ugq4nx]1>tRg=NmňM:d{UV?"\1XU +}3j@V&r]Rcdڎ k\nTLՍ|Cp!b*x5Bp w;!ѐysdDcUZe?^[uH`dS+>(5 bN50nDVÆ7'$WM?kYM*u(}]|-P0%9 W![_ ,ɓ%L: -5cG&Pbjด6m%-^. ׶{M󕭥}VGC1WeG3@"/;Չ1.{='@Uh[ SYAl<(w"_X~5&3m-S8!6ok?#* ZaӞlB/(+-n#hddB6uY QutaŊY`19HI3oFO{щ%`K+&D7َ{M|- 㯰]qMDw?.:d0R*ӭtt:!_]i F^O]b|H\̼R, AZ֋p2#~h)ho @'ڸNp0?/jQG?ZՊKS%%hi s9 @L†ORD9N: V"mecQ.G$$xYEH8H+\ pLFdzjjJ&-y?J8+}9pL)_: L5 mp_ͮf[XOȰIRpRSCbTST#*aҿl̸9Vꑳ)nF9 5r6`8ͶW6IQ?3L HqIm⽤drqAz\$56.o`ܘ0P9'ήlݫV!2A+3l0Ö^L ,NO4'BLdY򎗱%^$PF,^*IW]? ‹&d 4چw?}$B"L? 0?u-S{;K )3-զW6`QVU9Fޅ2b +endstream endobj 4939 0 obj<> endobj 4940 0 obj<> endobj 4941 0 obj<> endobj 4942 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4943 0 obj<>stream +njlD*ڒwWԚz͵S*@_Dn \5* 륳șCd?GGCš3)`!P_X Xahxu";C8B}c|I4 KrcCaea+<_ߨsJ`i>M0AQ4-kJ-~vDU;tZ;$e:;(I|[ =F/ u>Yh@I2 ١9Rj P ȹkE9#T SݰOq5&ή6p[ ^p:ſ?w;~e ,}_V#Ixiy+3nWiq\.é ;0U-LnWzG#eCSh +z. ')s VߦAX{v$/_0^ٜүt !b2|-&,||/},1YS1֑aјtv[)vy7¶^8l&?:ɋYMOZӣ%D&Ql.&⚌@u-Np$% +r#1?G/ knY 'i0OȎSL,أh|i׽5iZs2-%Gd4K +m#'΀2m*1Ӈ > +endstream endobj 4944 0 obj<> endobj 4945 0 obj<> endobj 4946 0 obj<> endobj 4947 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4948 0 obj<>stream +kITq[zQ wՃu4c4,fuP"[ÉkGDOf <$?DKፎj3DI+AX1dlyeӑVDD5p-6zлL~ V;?үuB3.P@zF9Ǘd$ae9EieHkj"g WU;4]GM`}3G(g߬<)͹p1)\@ؠ*͗;Jr cКe.$38( Wy<M#?0MV9ٟh*dC.·H#_/M/_1>u^^SZSE +CZ,֨1wy_j,z!FM' +W p4̫+A7x(ԧ2:hU,oR5=x+㔅Rd5%2Lɜ%SS`soa_׊8gޔQ.dBc]l;k:9{tpIBM +C}Ӊc C-ʱ.՚S +oIM_zLsq;X3T RK3l&, ޕBw67֧i,' ҵ<9p7fe[PWg@AWxԜw0>Wq!_z軷##ܠV+*U.f ]ΪN~pj}s=:YDf'骫j:Cr؁ P,/=(*]QigږAQ SWcx9j.QTXYNظ؛RbmoZH'b8C,EtN opT_F[fnX/j284pdZ\> endobj 4950 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4951 0 obj<>stream +v"@ pBAoyhRPԁQGD9pB縬-WdgDHcݹI$?NH36P񧉄0u-^ + cin`TK"Oר9C'ˁ  +ˤ /~ *S?qw/Ny-*&¶ \!`@v:#=hcMe}wpf8Du9? CĜ;n1aQ_1Ϳ:}AlC;fOB\"j +Ӿ ?dª +X0_XyH LQfTQ7+ۿ8"[$Eҗ(4h%g}n;>ǻר@C⍽-*짞Y 0/Nn~ >#r  C>ĩ5P + UZA[ HaG*.4NkƵtfmrEz;x_u}6:gz]{i+qvŲ,\LR n䁈1$N_2vJǀQX6;y%!|ЛɢgCJ_ZKb'%[5`mhm{~[n_NCٙ:ADiPQMJHX0tDd*B + rk$p'"] |m#\a:# +[GwDmYcGsYR I#-8lj9Ύ3>$@Q\(0ayF ?K؊KrA'M6̙Z+^~p` }mQx?ݞqf+:`BE~IM4mQx⮶H}|.S+I> endobj 4953 0 obj<> endobj 4954 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4955 0 obj<>stream +i +? ;*S~cW \^?)K(?}y|. z^ ~^m|A2썤B64~Feݣed/,gd +B5 C@Lϋ/^D# ~Wؑ<$lWP!R`\?R|Mq`n4NU2PQ#^B"@v [>9Lzx֒2́IWvohL#ĉV:JOm686[799Q*tIU@BE[Ң;'{>t<q8ٜOfw0'%0-$ B^ &Jtm'AV_wg9u +)ԘǐĜɽ-B>&XNye!"}K*?s8V)2Ag{aG8mVȿbbX]f]w=eY[\4޷:zۏ{U@ܔ9jHTsVQpb;/FJ8Q#s]_f&rޱ/Hy"GÕ=μ+Uka +F4kY_s<|`=?=^"~C}+0/e#A8̇&m|K}p0g{k N^?0;pnIU\.?9>efn7f-ضc@wOT kEe!#2S 0,@A [=~,mr U#wșޅ\`C 3$۠!PaEػ.x⧅ǯ~[xIy +ZJ_t5`8 ЍTJȝEryڞ.Fw? +endstream endobj 4956 0 obj<> endobj 4957 0 obj<> endobj 4958 0 obj<> endobj 4959 0 obj<> endobj 4960 0 obj<> endobj 4961 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4962 0 obj<>stream +&6h_\*h4^t2 ŗ偞;T|#LJ&BSЌ%.%*ط4u$ *eErxĔfuӒ:wJY@J΃dX!␚䜅8\0 I]++9V^`4ܕ\̆ +9aZCv-%~ۦQUѫIf2L6@#:R +&AN] :}B*#,)Z*AI۵Xޗ軝ű4דZFňPbR׏L? 7g-):pL^xV,Nfg1߆U"d#wջ +-Cr lTU(f|EZ=)ŢAq w0i[mL1ԓ|VdgbZ|&i"QU]g͙:O+lzN}UW)O{="M Id0\5fg㐖.$R(ʋf[I%((zFX~u5wex +{7Ĥ睲ybM!Ex/`_Hvtt̌Y&z5/VʑsYp0Ja-;H=f2'Ua]+щʘr#B d&qfA^$ %"ƲNolA xƁµ .Wd#w2V!=VNz?G V\=uԠ)U3C =j܁Jä]i6R>QӔ봰p 1J@SJv1Tb+5Ŵv'BEMYxQ.^rd bdS!}'K{l :9 + NGI]C/ھ8{ڲ=u;;-[QZNhb +endstream endobj 4963 0 obj<> endobj 4964 0 obj<> endobj 4965 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4966 0 obj<>stream +‚"NI0ʹ?eCNb00-a0KƤĿ-?Ͱ?dFjOnj>KoPEyxk+$ R)ĿE +}>w[ҋbꬋ"`Gu+4lt?qIi#J3}'{Owƅ\kiR`I@5.'Zw9 u3׺kYcĨ@jJ1gL,fSs\̗'(G?#J!O/ w\{L-q[{q[-y[tMpr MѬ +5"GW1q~>IB.=LǶ4 Hj1{_eMȚ4fvh9eE +uCW451* +}J]*1:bP8qa{ET9`Z̥kb6쫟)\5}em)c=Uωia9qڼ8Y + + JfN1 չ븭uNhX lJ[PJE ]42\k ֽ -&~nŇbݹڷU$i)D'Z?|kٷF]j`}_G[MgIC0K+?یꠍӪ/B>EL'n*1])nU2 2E@8pi1'-8e t{?XQ@؜ =#Nی~ŭJ{"׹vZ#miUWV-WV.1vO8 wQRMc>EZ& R +(r0ԲI5ꙟc ^01,rއlG_8Gv¢,4J[}Q鐆L6ݤD +ytӛq.Q;+#/R&y%z|lLhA:g^0`f +يCʄ{Y%nϩR +endstream endobj 4967 0 obj<> endobj 4968 0 obj<> endobj 4969 0 obj<> endobj 4970 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4971 0 obj<>stream +Y31c}*nBd18; R>W&glR8 *Q-ez}#gZa^}-T&#)%$R az0(DV< n GLցO2C6(E\IG7&F0r5Wq6ZC D/_'6 "G"_9Jӝ7@A/ c,D@XMCŹ(e78Ћ@IG/O[r9C*ߤ"IaB`wXɊ-(O>Ԫ#>!^K}U؁d*\i)CMհ_RJC YP21M-&@8g 0'Oݸka(KRWJ3f-xs~W&,<Ƭʇí xxQOuAYm>T, dٱn + 9o3oC*ށ*ӉMŁW7"3KrǸceqPja;a Upr+rBfqНJ90*Us7;W{]vFyj'bavd@e(vYas^(>@QA+jnSDҪ١&:+[b }: +[ailFVh̗4dn@QR"}+lY^wVl¬5| q> AT?&p?p#MK +枥)z Rt0bsI&qy~& .H)"oy,X5]Vd)}"{1T@546\i3iV*T6oS[|> endobj 4973 0 obj<> endobj 4974 0 obj<> endobj 4975 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4976 0 obj<>stream +8NeHHWzAb6=_ kpl P3N,wÛYqqy_2bZqK~{İPz y(F ćS<[3$'fZ3A.tڽD]B\W Bʊ?hUMR.-\DD`>YLcmb/,KRlOgTmyCa?rrh=x%b|SH3*#95̋e\H\J#z'"Y:P1MK evJ4C&t ǀCv +`lawC n-߶`vaNwApm٣^^NTe6.YUIzg5%TokucGx찢t{b;-u@ ӾGpA7ŸZ݈x,/apxvx9rcGn7{YSXo(_3K0DE:Uy.2Qo(#Ư_y:-'Dd>f‚3_Ci*N2V-cIq4eQdhDv؂y55*Ky-@G-b>lcڍ&QhLǦK_zX_܇sgyB +. ؟{F,̶oŽ8=Py$̇w2AXѾV6nkT[KRQ 2 Oɻ!d`? CE ּg@!>J?ԛfePCQ'կb,;FY݆?OmyÀΛQ(Ip1U +x.Zr%^Ԑi]$(e#c^줏@4Poh ?^W,UQsv Ι#)]uWg 芰BNج{HcdpV*ٜ+;o;`SjS<eBMMʡJ +zn,`mx|c#;67[*Z"eD⃕hCqXeBd}m2m)Sw:ri/}ľ~%SjyqAk=\- oh!9u5>H{DX$ۻ +(Y>ǓUI04²Ԩ +endstream endobj 4977 0 obj<> endobj 4978 0 obj<> endobj 4979 0 obj<> endobj 4980 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4981 0 obj<>stream +TCz)H-w#fBȥJIPs❙4P#\$YSnwʉKUx(H߹J?!qY_,r0ﮃb syXaLDCmtP TK=oݺQ. &FxA[}7CT}@8o9[;b2 +z?vq,С^^ʼn0$яRR:j ?ɏ SbMƗCXDL@#DB( +ec~#M8q" 8LXNtQ*pⶽ>Aɬ;v7Spuzo3sZ9a>)vcxdHxHA7µ{ +VO̓rk‘gYlHD:CqH!^ɷàLϠ_t'xiO&mzR=tu`!4}vJqqj5d%S$Uo)d+|'R-1rnd%rG :L@g +昪A88x +){5H:s>S!"SrYfeh5P:I +;?3{:,4 A'tFBoG8oI !w!נ,i\ _V]9$gbQaER 7KpƱ3r!9:liQ7,ZvخԢ<P֑Q|Myf2ua-Hf=:%_4u2"4;x9[0/`,9 ႈ!ZF!d=caYlV4$ ޕ%pah?/z_W@e; keItVMVⴵ+,Zr LzzBX}Sŷ̱9+.tQ]yŇo'5gڧE"96ɚP7#й'宽Q)s 5PL03[Wl޺(mYbEX2ʀ/`cXSAqL~b@Oi(l W!rnGRSKn*?t%-ߨ:\W%P`=;cebHW`y~#)>,SMm +endstream endobj 4982 0 obj<> endobj 4983 0 obj<> endobj 4984 0 obj<> endobj 4985 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4986 0 obj<>stream +^ Й/l~To풎9tS.1 έXZYķ{r6g}+!ͲRxg'oc= `9T~W-d"Mx4|݇2NuKVR0gciGxՍ^#ylx?VZA@rR_3; C;jX]bHgWG5k4s}Z|Hׄ2h446)֕@3!UEYY^8^$.∙EΦ%\)mNy[m:-ZL䁧]V q .-(J(q@mZ7Lڝעa';ܤ ~ ["D&X|/9v2cX2nGchV}>WD_ +H4MR纐<4Z=Vmչ DaQ9ˑ{{5ζLFg&'VZHD/dYTux.aIԕD{tIB n+2$`5GOͫ=/ֲ&*RJ j98Il8QAm\ vm D$Gg#𱈹ßC22 +T]wDؑ99usVYhn}mxb-='Cp)=|~zJ,xw#^w)}NUwDZ!^X#b5&( +endstream endobj 4987 0 obj<> endobj 4988 0 obj<> endobj 4989 0 obj<> endobj 4990 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4991 0 obj<>stream +Ef>QjMպUk?*$Nfn4DW!UipF@{&yBmU'ya䤋mex).s,0dEQf҈MYPx5 +8!H9`E噯}W$^8$GpIT(wj +4qjU ne4q\D/F82@͸зEL!ոoU CԘnM_nVT{Y m$d2$ z +Md4(e*<ߌF6;t-26b2X +Y +ƾrEnPSY$GT;t҉+3a=՝)R0۱IgS +] *&HIYvgDM"ZB&{4 95/>Kb)yGD 3տ5Vߓ+.ӆrDK]!$eЪ{}2&ŎR4flL +f+"kI|y4wJtnq]eU}'-C{꒧%`vI H3MpJk jrσP`RrZP#*yj>kzlɓw".O%E2 +.CeEBYcYJwUIܥ<{!ZnI?`{#OYn0=O.5L,5jnpʺR+i},3t[qPoPk^s !mx h[/YC.;6a Ôq-Dq]WP~ɾsI'hˍmY}K@m;Z6xG+l%> &ܯYgمU V^\O;y:1tM龸'qF ss}nBc#.>8|q56Ր> endobj 4993 0 obj<> endobj 4994 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4995 0 obj<>stream +c6ꂡ.V*ʈ_V߈u %|"_P":T~,>Ru>jGƭ6,qM*-  b}~:Kd*\&6"qh?>J_Dv|X׌Fxv}řvlIc)[ ,hW;f3 +Ļ{3iWMxf(h["Ɍ@$|ڔ"SG,.#25[접c#kXnv]hE=bĸ6@SwiJuOê7FxvoZ&nw4sS*irP֮ Ry,1[O}$+[]R@ Mfy7[@{ӷ_iѭ +שyS*_Mp +5W +,.!o 2Ez\~Q߫ s^kKEm +aNo}A:r& 804J `@hijtLRS'\CeuʜG,_:f6!hvtu{Pd\ܠL[w vuiSുۥùHn:4[:^85%XN:[a2#,weu[DdeBXblWEY;u@wR^ f$4Z ?^E2LKK96çNbkO-CxJ#;MbK d!/=O0S (U/.%LNEބ +5?8(/n'>ŌQUʞ׬ad@4\<'Xfl +CC 9s_J AfrŹ/ xnMjߥ޾Q %ZrJp_p!07n"]!Ye4hH,Vlg6[eA8#G[{=@ /> endobj 4997 0 obj<> endobj 4998 0 obj<> endobj 4999 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5000 0 obj<>stream +f}::_-3і +>Q^"?͐]ssnR/#@i>HgҘĄPV'p eJv6'ߚ-Qڃb|U3q;]dxaYah'޲ӰAgS,!v^vF(^bQn +9xٜ@= '2Nj TzbPtM K, WW*- ؂a.q+!&A+G@~ !0\ӈ36eL: f̭O +D;G|SvVLtMa,#'A ?XdM_?;>Â%ZU7e>đ xS]Wۍ =2"ޏf"&NNdtvAU[d#* NLtW'&`u+QSAS(p0*/ +LX;8S:;zGj"EFpa90ak'\83([sk B#C*sƒ[mB5n,R?LNkd$ժucJjbhdsa`Y$b@໓N$mɆU#"ʝ?ViCY>?FsuZ}۳f8RySe Ϝv>~d0V/53EDVpD>녃G(xψ_>أ{zN~ަm;4Dh\nɾy΅["@t;lIJ%|!ЇlIH;&1ߥ}E,˸#x:afA&#W z_S`RPvo toKc]ՀNCb;!gκ s{X!3oѷ40y˨k P [\Mkgg󗢎Tze5\8 lVҝK-Gt Nxb~=ŌsP`G@Xv"eTM}:iC +@Up˖9yQW +endstream endobj 5001 0 obj<> endobj 5002 0 obj<> endobj 5003 0 obj<> endobj 5004 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5005 0 obj<>stream + J0PQW4erlwٹ)$"X#<)etEW,V޵ߞeGPĨEEo5{7Z؛b||֓[cp+Ɩ;G5 Idv +Ovy-Oľ:nzhi;EgdV0$* +oFݐ7ys(0sƠ'z@_=\gA̡Z31Z@CךbYKr@u񗒔 Tt6T|Җ`S>GNf "4iWm$4 +&J-Ny8}U`qtNNыbWxZuчo+aB }ݻnzZᒙGj +endstream endobj 5006 0 obj<> endobj 5007 0 obj<> endobj 5008 0 obj<> endobj 5009 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5010 0 obj<>stream +cߛtRwۉYQ!S_'~2v}=S9`5s> 3Aǃg(WI/"T{| |/WGg#O.H-uW1n?Zd8rrkZ/}q}(7lטڮ܀k^Rhd[CK%-p ,YR&bXۢ9\Ӊb*J.sOaQRytY,F[`t''>x}!I.|>\4^iΊdK*fPx/jz,M^h<kw2PY{$sG +v؟eh ֦; s /:_NO,{CtX}tNfU /&ƺ@ c!Ȑʽ]di2a2OSa\w x<#pt*v v0SrO1+%m (N: +*AM1' -EGԬU1q4 + s-44=P;GОCҞ nrtisâ3_1jAjϞ[=M6MoI񙨮Řp:X;f ^@2",ϩXIP%4 ^3S.-M''$S)fAx"Rd;$Jj_UZg0,nXRwI&sau^zsYd̻KJ>~|7Gl( +k\X&#?bxZ~O | +AJ=]l"A IOh +3O-5cTWfIds0&'BP8нYFJCRP0NxhѰ6ss)'c$4\`)JMFM ,xS8WS6z\Zw5TvÜ!mĩ$a WxZ@U 4]P&J +endstream endobj 5011 0 obj<> endobj 5012 0 obj<> endobj 5013 0 obj<> endobj 5014 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5015 0 obj<>stream +tLfLsLW-]a_6Koehms)\i`4V;׮g|ʋnvV#E0IKF\\:rfKe,j  8`<ݽ:P{S=N}~]RNnhY&aѶC㦍cR,n܂A$;%nh-S0AeHhǨ% V'~1&imd'CÀ#9Y:I ,La. -jS2aω-E XtѸ;Gu|Zn!Sm'%ve'3SxD5^C}DC$xH^}9N)R=}&1v/6Dž{(rICN9t TTPm_vo]$4^ ȡMB u[)\A+CpNl P}<(XA5;1,[E 1˷GAV3WhUxuYBs_IY#hZLeȏ J +n |'1ruۀY/t +ob0]?бyC T0"sh|!#pvnH%4C-٤܁Ù UX]L$Հ. !Yӷ0?|9$d8Se'^0\qX~SeEvAʫ@5 s,ϕ5l33i*YI7׸̥^* +jtFG6n +endstream endobj 5016 0 obj<> endobj 5017 0 obj<> endobj 5018 0 obj<> endobj 5019 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5020 0 obj<>stream +PJpY C` +Q9:јy50OyA¾oi5J%ڏ A 6BjCDfW#H:u{L-5U \ɵF+k[Mqc8}̐oՋ;L/ٺ=Ag'v\#<u-Fcߋۼ}M8hZzVZ$χjM?W* 1AiPbcJYKq?PWٜ֐3t=h\z#:O5wi1%bCg 0iz1qyQdYꐮ}܀95'XnFϮ!f}X8AzXDZ-!^_sk`kCjJKޒ㴓\$,t&9'rR\QcmݢTZ=gE4 T'iE숫"fD%B98xf,>bJ$kkr86Sq?/qI2Vܐ^ܿbnY‚g0'`+hrwV +܀~ݳ06uzio.%4Yު!i~ޜD'Mi , <5-[\&$ +&|3Yۮ{9䵂Sl.k!)N _JOv\B,} +5QGCOoᣢӎZaKQ26 c &ԧTw!ˑ!ɖmh'w݇_lH>~av) 7S:?CIw BoJJNR8ˎP4opLdwU=Z +,J_\+ka[e/~g)P^s)5nqS~F3Yfb>&pL;5Öث1, bD?ޏ1W g}ߋ(zR](_OwTFPH[2 izY o&̼ی2rKKF๡Y4:6= WviZD9GDqX%V p^&_ +endstream endobj 5021 0 obj<> endobj 5022 0 obj<> endobj 5023 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5024 0 obj<>stream +h0 ޾D1a\@28՘$'H/B6K6`B_lGIZNOMf,,hm?l[9 0|`$$Z-GV1ŕaRz\Y{qn]U7fg&AZsQ9tS?cW.|3Bc@êaƒocr9D^J3Cr,&_I@G>)}į힔5?Ɇ Ў F"k mf(O +LU5 XfYGSVXɇHʺ| o:}h6y1rD.lPC֬ Nq>⧤]0bd>\e mH!"E:p4'GϤ^n8cHq]gHyCF޿Qhi7bV9 ˔g"}#A]!nptFWKخf #ű*oW't b~rB+֡D1* [=:3֛u=lH +u%H2TZ_DzT"( 2wOBy:}Ȼ_zxșbg<T_Dm}rbba !9/f h! |mԴ#<%Ȁd!è6tPv|u YĤ(K"#d֏]rӤPkCWX;4zNLv*4xƼ +]y$D=$XFaNi ̞lAW-L!Ā?^Q@ ۳q8JnD ZGCoM,h<"wJ&P!N:SwDRt,TEq$9]_x^rcă&k KwAxjI/T'ء0E)%gDNEǽf +endstream endobj 5025 0 obj<> endobj 5026 0 obj<> endobj 5027 0 obj<> endobj 5028 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5029 0 obj<>stream +$ JV= 'U΅=0zB0?uM?ή]v>wC +XVmZnj>+yaHH8f] u/BLwѸy'ӝƚp]H癣/ַ;]kH` IMuNZ Hl 0)+@u(f0ud pEh)±g[ZxOl-ER)c#!dOfإr {QWF P"g,MC[ 1ov V$@5rƧ59ͬɛC.¨"HU>2 BMtdݭ?'\$T +1(($q828놑Sw^/(-:T@* yP[>LЌV"ۥxo}Ӧ>̌®03"EEs\WAص!2ksS|$%0G(Sy7yÚ(5,qNנ +䊣j+Ɂ@ӋYlpTe )%8ˈiNbjB`N AK2 aU'2x4sD "O^) &__oBۮ96-,۾rԞgM<-ƿc +J#%920O䳈ܦ20˄`W=<񥽐:z14jS}0q[דkި8']'apolj &fzo^.^]h@N-: GI^A4S_-*Ó_-~>).| ]N9!np9OIRkvRÇO{Ȫլ>:sNIH.E7QCĔ + +cz H. +n`|SvT,m&m#JU :O}ܱlg(}= xj,%) % 9+ۚ=ure er.ԣ◨%+el36.G4ц,ud=&d3֊5*1p8X5yGAR3ۭz]j4 G` +endstream endobj 5030 0 obj<> endobj 5031 0 obj<> endobj 5032 0 obj<> endobj 5033 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5034 0 obj<>stream +ܼgHX΂07*L^c:iYgm$Ơ`=x%sz(|< t ++\2xU"3-'w#hDR^{%:o=U5 Vӿݲ\_NKY뿶뀱TkG`.?ڜ~޳@1ݩ8=R5L8GӋ]auN;AzD&3nSNJ| B +0+ t>rmj[*"f {۾DB(5A휽&PdZ=S{rLrhv7 `b! o;}S<a,uf$C㑵jp2q2Q#9r޳t"g}̃ DJBVZgNު +yEuȄ>/=#"#{JAZ|?e6f94Կh9ܚ:_1(Z%q 3KYTx 97}kKmQwX0=J!YVAo=炪B#& KFGNf>uoz}­B Dt?cB>jpR~ԭGq)4&˜}tnK + +endstream endobj 5035 0 obj<> endobj 5036 0 obj<> endobj 5037 0 obj<> endobj 5038 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5039 0 obj<>stream +pHMTEqV9`!YӉDATt~)#LǻaLW?2'iBŀ^]SK ²=NfJm@BnH6p+jWm +6Py!+ָe#3_~ vcByŕt/M/{ +& +3)SnM480EС#{+.%a,<:S"Wa#w:BtvV;,@x J怛YАHv+TVϪ'kY +)n91CU}|`CE؎YKQxآpe76(`Zu3hEW/ߑ3CCfS6~3Tg۶zrqr([-/IrFȕøwj׬y*%Aۉ-W0߳ 8Ɯ?T84ph$7m'=Q#:ifg5vEaٝײM+Xq +Uyֻ0RֻS>=Yypz,'m1=$펳V +!.mKQuF%a<@96, \ 2G_=~8?BWK,G5\Ȑ`yn%nEr#4ڴ縗ٷGWvEXP YŇO$h*#AI 6O6iէC^P[m_& + 1?" +<#WCt]96#{ޥh+eMM +YcN_4Y|{}rq2JhqFsc~c&`BZعs,jbaxp +endstream endobj 5040 0 obj<> endobj 5041 0 obj<> endobj 5042 0 obj<> endobj 5043 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5044 0 obj<>stream +vu[rUOvs8P·dnfm +٦=.S$J=\up|M)ڬ 2W"}{GOE?qP3l)bHsNms|qӑqRk 2c&|s;ONω`Ww9)}މ_^2?(8xlLJ8˄{0N2Pns#ksHijKmdiRSTHw?JTk\PېshaFFP#}?#+q2=%nJhY)fs-BUsxBST]SłYS51ԙP$h%,Rv쏭PMWF Ss$EF:tk2t{{;-S"Ъ4%njWŲZġZd4O&\d< (cO_HnO2 HcʂR\%ʤzfy4=c6R߱("aDUOc>x:q3 SZ*r#  B½ rI˭NO7"-Qu11B[ yjmս}4dMpۿrSBhctH%cMpWⅳf jWRX> endobj 5046 0 obj<> endobj 5047 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5048 0 obj<>stream +g{nW .ڎ|7LԢ@+ V Oyo`~3UHH8T!5mWjL Mt`k.cDkJIPFG]3jyГHQR+ cL (wQ ӑ +fm7Cj^_/TD8|";UIJbAwa[# =V:{woH#rBƷw)Aj&s{ZS~>}[ u[ [(5 0}#OQWUȁnhfpϚ1`*uC9h<'2DAP'@PxXfŴN\x;CũC\tݱLiF?B pVĕV[);5+K/\!]>gmb!`lB'La(jΫ:ʡ._##cˈaeT k/4 tooϡ;@K& /g $fVsrg~e@]nS"\nZt&x21TVn/$oGQoH~B [mo_ª4`]M09Xu/ǞW; %αӣf H`[LѸvt^` K' ~%w-&e;M2xx>mJTtL_ZEʭ|WI({{ GX?2\Rhyǭ/μ>z 4DHX \'-y UؼFםO@J/%lH(TNݍ6b^"\ +endstream endobj 5049 0 obj<> endobj 5050 0 obj<> endobj 5051 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5052 0 obj<>stream +gE '=/*>)La D%ϰB`vwekv#٫\0=gkeFK@p3YH\"2 +.nu +88Gxar#Q-7o9c@x$h_H3ͧg+Wk6# B7;t]4oэm.؂Kak-Z)OCR$gA%Kbt΃mB@BT(pdH[|ِH_QSSBk\X]me(ځq?MI9/$& +f/ uZhc6oVl^6굷Ήum&mUJ@24T쒌e 텳1%F~0̃H8dL ػ'A8do>GͰ"< Vѡ>ֈ +@RnPUDorX@Iɓ0r +&:ýz.ή@%)m{ccdZdߧ@.&P%]|3_ TJ1"êבsϧv~`_6e r#mVN`sf!gݱbaok{d8j(ó :?: -qDo{+E*ǰă&1c<9fctdyE#O2R+ !}ZJhlO1$ ~nC;NiGЖלOAtn9ck <{G |86IM@ůݳ`b؄7 M h#dg|_d9%k ` +endstream endobj 5053 0 obj<> endobj 5054 0 obj<> endobj 5055 0 obj<> endobj 5056 0 obj<> endobj 5057 0 obj<> endobj 5058 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5059 0 obj<>stream +w#ܗ詌yKГDF=C颦{ƎAߚ2=&Ҳ'1£€{K~aSQvsbl?j?t RPe9zVQc/5n*3C]~<2zCf] T MpĩZ"Yݖ]gSf~JC/ ~񕙂]ª߀jK84Lb&CPH'W˜\ɷ)?lp6@3黒%szhs((߀To `)(pɴ3淤 Vד\Q]lw{^nĿ%>o]AQFNpjYe2˦ċmeS'--SJ/aԤhQ+{%m?{|4.,3g~)RW޷v!Gd%cHsfluX'j4|0uƼ 640}D/:!8q納ܽ\Ibj bu/  +3Ab4c" 3>+,BCfVg=m抂`J8[K1TWOzBc`Qy2Z迋jrIQQA[HaސHfP\"NMOM? =Lb Y9UU#A73Y|w1IbHEJ# m 60rSfҖs/ڤɮ6ɣNAEwb};1tb~=|TI<)%h[ޠU s7MuEIP5C%_ZZ;=vN-25/!eymޤ09s 9E e;H +}/`_nvfp.Ja9.ǝhL6ء&3^ }78, JΝ# /5]T9Wc@tqo9b.{ѦԗIG0#MhR7vo\2m~\ +m}P.d#*1d ˶jZfg=ZmC2|ho3v%Mu-*P6Ɣ02r8>dV16kgtsMf4D|LlH]xDkDl0T 꽀<A3_&Rev^^D^s*NYk7?do{?!rgZ, !"/.4&>KWA$Vl!NJ"ؠK;,CP>TҹQVBȬ5OX:`1a'Nn'$4ljUD;%'% β*4S4RT)-np8. +endstream endobj 5060 0 obj<> endobj 5061 0 obj<> endobj 5062 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5063 0 obj<>stream +znQArFBK՘/ϟTeޒ +lU|Fț[( Ɍ%] ZI"YX|IdKd4ֱU6q{u|cj[Ήg;vlԉm\gtgBTEqezJ4"1 }qO3̰Ն0kG6I_+uG]L* NHCJ>o(]=y :GyJ-*(%P@PS { dT6ڷ)`"Ղ5%sWwp4f~&矐̑ښ+ H3FGV2KO7oNC*?J+t ⴢ{W*v~ /?IjFy\Ͻ'/u^x:bgm7OK0dk"M$9bt_2"4!M_I(% CRCNy/CZٱȏz'LzAe_H+J41D] b>4ѹmSdՄQ,]T[w,L + forUk|vN`bxi^j nNpq&fK Q^eF`>1k)YQqDQ<-B(R,ԏ "MRp9&+]`; +3b$7b}jh#: +BFqJ>bHCn 3C#f}n]1 }A>XYYPZ(S*2)˾0^`1UٻeElw̪5$98Lmy2g`BWnщ];&'wXޕě(ic 2IPU9e)T!gOQ< zvӣ[\T rךYyH=ǧNIe tno%_4Pk{Ѻ#käb? W,-><8V؃?,!LY~b)OO\́[;U2<-pOIو&1ߚȑR? Qxke|R+RDE*[N/9 ~ +"bk&RM SŘ|e`iŽi-Wg1QdCuVZQ_+R H4XK3݃v@iDs29ӫ75.2PS)Z%B'T[CS&w zyhϲgҍ"7IW!!|WH^5ٟɛQB0-' +endstream endobj 5064 0 obj<> endobj 5065 0 obj<> endobj 5066 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5067 0 obj<>stream + .}ac00{E5QXݕ%?I rk#fNĠF\}VZ^#FXf6Z} cU߀rz^9(F$'26w5нCLYipʴb G=oJHPlpP>I~Weփ^_kّ2t!h㻻R#$" +KXCqg(Ɛf%P qJFdpU%5 Ag-CX:A vmsԘV?Kܴ`rINj2l^Z 2 + AMߪ\Nah "c>Ɯ{XDFol֯$E+VoWʜg8?uL~Ho4s*W2]GI=L,'㬍r.2!dE7}0-hebC_9DC3B6dfլM+͙Mn=-6&g$o*!&vrj)ٙT9ŠJr((w^O t/6ncyIF*ޑ }jE<>^ ?l^) 's_/\`R_<981hu.[>yZc:R-lm۞MpJgKPUC0- ֱNE_w"0fTtp(4W^~#$ h9t^n~c'_Sy aeYUy3Vh |ÀK]ʹ1ljlaӛ>a9w5&&z6臤/U!{+PBRGxa +A fHGm*>c=Y +endstream endobj 5068 0 obj<> endobj 5069 0 obj<> endobj 5070 0 obj<> endobj 5071 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5072 0 obj<>stream +YY"FUfn6f{km2Zr#A]uy0a,.Ȧ[A}50GG֘HFHw#lz 5*A^c>m +, nX#1!q[c-|h#b-~_ɏJ!Ppո9q|ƈcIs&oyW M}-J@fSIjKM` rqT1af)&:],rXJ{:._z!LZ]HW aSBPC頃e𻚗5UCjR%^wbAt(<C#$ r,K8:mb8iġ8^iz V.lz3aXdm +5ȠʀTŲ_,JڸkmBfcDN xeQ({loʴ6^7mOInG&~?[!!_+|"\* ۺ/ܛ{]].i$FoD}'G_蛢Uj>Y08T) ^g.>t:݂u*8"a&YVpY=XͨٓYuU#G,ɓ8{ɟ^_=2WDWgҖ;WOA|᧮5cũ;:!4؂-H$@ʔ,QYm]=->A! j][/|OދmhgSUmPX | 倸DsX>gw[TUS_brR`P4nKꪺhXkr ,mԖ{٢D " +endstream endobj 5073 0 obj<> endobj 5074 0 obj<> endobj 5075 0 obj<> endobj 5076 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5077 0 obj<>stream +_pkq% _MoG`N -_ ˳#\m#<AWXTd1q4x/@Y{ + ;gid`VP(ŖZLo_IRS%`\eu)!,k9[SK.-]zK]Jw2ym~{M\u9ڨG^N40NJ8\z8he>z!oх 7HD `m$n#YEorfnnIWj$("%(æC8o4gtJ"\MЅ J$5܃bOMg/aU9KvE ڸ nF&zM6ccX:;ťkq% K&T>IN;e qSFSUZ!5v&GUV9{%V(HuX +-wA[N =[DS:W gV9H8NW~6*8pέː*Dwu94 1ǮX2 |0 7pc"T!p4?w+N*vuה PR솝6*. !*A_Ω5Y-f`>֔Uq&3$[쌢#(H&⿄3:QC7{]JҔ0/:.ZzT@BߺTrtw@{n@+W`} J=TPVB튩n$ƞ*>E>–\ѩiz$;OU{,}aq^5izl Uh ddk\?gn⡐)(UjY5rcN)`1m״ t +x6;{IOκ"5XqD 6) \Me"?'awS!V^1H̃?Rkek8 `,ECQ(vL_ؗ<ʘ~2x!s\l5Jdȱ8 52-E/X GZ:Z +{`$:EinjhSG{e,/]*@4(IG y 4߾{{@繑5U8ʓ".T+F{( +endstream endobj 5078 0 obj<> endobj 5079 0 obj<> endobj 5080 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5081 0 obj<>stream + Ue%;#9]sP<xM 7DAݳF*=͈5-w<ɔHwj8SԑY]H9>A+Y PI~G<6F + dV' fyPjybmr7uv|fJGȶ{1~ Y"WSWL B +E3M"U"\릇^ 7gXPĘl{ LN78b @C0 S +'"V ׇ[xㆍM3^] d%/=bcNMA@K?>T cw,9 D_F2hHqɮ<_o]XV~:F.R[L{ ӯr\|{''E3 ζSn]63*Sv`۝:[_ån~q +g"1ٕ6nNGK+(Sb pݏϥi /Ts1,2DpqD_[m9;V`1ȜKZ}~Nweߍ2" 堸38h꡻YWo?W'N|Ħ#є-F; lez"3: PS|©w;:llA &. F0:Sn+bF[> `ϯ9ns&hnA5c zAd5{湦>fSLk_tE&m7\ Bxި5qm3s[P\#K,ӧ^8b;³.&]Vx6F^PoMFGʳ=АHZYj#cԠ͒.[o9^eiD+վͩQ\0mwïl&J7hφid}Lb _a ӳTl4$.' DvhQٹޏ C.?ZP7@2u9-6W- AV'rH>ZZ:EЊH`),lJjւx,kpeA7o_:m4{RH`~& +endstream endobj 5082 0 obj<> endobj 5083 0 obj<> endobj 5084 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5085 0 obj<>stream +0] ޻'"ϣVb~g4iZ0g|-Z +,V} ]Ҩt +>= FVJb4C{.ND̲݌ ah,@c(s^a0 :I s@$aҿ言~45?!Yߙu鴯8@UƛJRڡ'FXhrLv5V:(ʪ]#5[z(e1 & XP 5zYw7_b.ઊ1&874ԧ!ƁL-x¼܈V 阶*-_)k+::Z?ۃm^ds?YTӫT'k1Z~ŵpq0hTú^zLT4G/> endobj 5087 0 obj<> endobj 5088 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5089 0 obj<>stream +4v#V0euxG|՞К\Es ]W< g)M$Zųo00?o{dr[hBla黬УN,q\sX,{@r@6*ymNy dI&45j"$ iK:pZX=6֡S^Yne +Nh!(/?y P΃s.֣+/χ쓀U&ᳪx> Eg/􌂭`j%7uV!n``I|kXvd!OEǁOd"Fs +82SZ黅xsṱ+h-=4[ѧX!Mz#.&etiƏ$Ι|osH'|v"V}p +YZx'4_#F)YdƀԠw#`/GiHӕv:گ`lP/ޕ,>.o&T;*D50])ZdQ9 gY;}Sߞ8!S6`s` j94W +mGƻG/t*#]UrR +endstream endobj 5090 0 obj<> endobj 5091 0 obj<> endobj 5092 0 obj<> endobj 5093 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5094 0 obj<>stream +8xYA)kP7)h_ ԩHRYozdDz+ab-kr@#Yu/#uGĬw=^F`=+0Sy.a,!pe T]cMqܞ*Ok+XlJC!$e N.$5' +xkU`*CYBu36֗mge5ؠI"}:CO@t~o-J)B0#6;6Xu:r|991sM=3vثͿV-b 6KU6hm~IiKq%Dm1E(y]hoCj *p9 UJ+uJn/K +"-}AR mySG%ٚW/p;PJPw+DC| ?.:AM۠8uz[G_n0-yF;6cXo!Xcl۠+`ta /7. 8v^zd#{"Tʒd;QwB=WžG"N0P&Z{Prdž;*W~hrW ",CIz(7_{NI0@C<ΡE!.҃gƭ#G^=kƧ<"x8!C@ܳ? 6Z +B@cSL W~ƬzCE%OEQ:tr8w'Q"jo)ڍf|W^CZ$tO5& rXۈ=󡼸k\[ +bݠ:4/`I:>dehO, J-Z4Q_Ϗm!bGDn`U27{Ćb}҆>Kve`zFB^Wꥑ=g*>c Q/:xeۥ.KA)RT;iWl cw%(y7 BDuׄc{{ i&w.sv7mBHbV7Ecj= (Gu*)kNSS欣 rsq%*psG!pb'x?[ +endstream endobj 5095 0 obj<> endobj 5096 0 obj<> endobj 5097 0 obj<> endobj 5098 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5099 0 obj<>stream +dk783X4}3%ct& )˹׵W1l@fREp(ԙêNk]-^ duS쏻;DM^| TZ@M?mc]@iQft+)_͇*mHD^~!Yl<(3XVlmEW!kF1L=%_EF[aY.h8/M:i ЬYaOOu> 1|h;VsXXbis570qVԬ",Z)%[s f|%,p}EU#Թ.s,b٘&K.thr_> b@/QEj;V%Yp9 Gh\dm8xEwGv╤t;G_DxI&{޿ ݷwyXE SC`oOL{ BӼ% ._Ÿ96 +9@_Cq[Jx+dLR6qJ)oi"K1 8g}3DHu})fnYlO_̂j3d,hҦ:,`}4VO1˟/]Ű8swtـ%3 cm: b(`Z=,T0 exͧ[JYݢ*|Qi@T RuDb|ણz`q1 I/XTo}U!4v^lQUh._^z+_Y;%#֣mJV2XJ<{uf>mPL}VM} N4̱mi~%j1:@rQkb;P05H Yt\IJҚ$\D&_;9BFcћxTBy(R7 +a39MB8"%F\wVR*THJ` +.u72Sg.;=2s]mcfM{е>7z  +_Eќ5UT&t4$=~:raWpzO_;]H /ѠE^.^ܝ.[O=*PLR? Iǯ:g3n=E].fDɳj$zR UH?C]R}hpnk (~WBĦX,In +i"Ф cihr +} (# +endstream endobj 5100 0 obj<> endobj 5101 0 obj<> endobj 5102 0 obj<> endobj 5103 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5104 0 obj<>stream +̃x.E*M+eקY)ők`8gm[@O#{ㆫ{ca85ؚ@*X֎^3=vFbєz^5ԞhEiN9<ڮ]%&Y$`*em2ضQ;j@nN.ItXi@tWsOIWv V#gR=Ҹ:$wNl!k +7~R޿ 0/!8In]{4u {&[${€(ގ/,mq[n*H W,'d=ζ8Zer}!ކ&9p{}m6b;J:$_!?$Nr28£lOȑNjQR(u5 $G!4M\'31f+Kdd2ԅ>2Hy}n=]s_R uF[+Y2Ϡ/~9g ),z+OHξ |;yZ;lLJ;XQvtG`5(2"I_HvfV/ +{ @ 6L"8^mX>J?MFiЍylrV~ߢcOnE, S$HCv) 2o\hĦ㾥;;Rؼ/hDw +d}`@ϓ3;'.VlT SZf*I !7U&v6}AIX#zViV??j,Ck;$eOZc.&L4aN>iJQ β] #:{O 蒄?)fMt%`ޙ5@(?^́?o ]?byj`t|> !tX/`e@YwQE9ƕ:DBvCREAkb> +endstream endobj 5105 0 obj<> endobj 5106 0 obj<> endobj 5107 0 obj<> endobj 5108 0 obj<> endobj 5109 0 obj<> endobj 5110 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5111 0 obj<>stream +sxFDچXQb{+߭e (qa,l4kjѮߚ@ zZFq, bƉGp8WS^gk\.eSNpƥ 𝮯[T +0gx[+ȝK-}IX:okn}e/ptȁթGҙ58X98e}<>EWFYԗ9F'AcT ch-8K˿6-*=iǎNiB(=H/b}!jKJI/~у k)GDP)b4,upNyh:;DLda(42⛠:m 0M--Ow|h& n!ƿHL\gRoWzć&5\#]7m[[L֊.[e5Y=)ٛw- ]H :ng0>YC˫W2B^ܫdʐg0dnN\~.PMK:!@9lu{)_ GʥRA㚨GZIRmA0$} 1}zjy?0>C(J:'y>xwxM^-MėT 鱒dQ.:6 Ht'X vL IR=CtVRN0Ηw" `c.- W3EH8=,PMd+S4`vcd0޲厽D{êNӫS`MȕBsD/ ұS,؇MJ^KYA +>g:Vihܳ XS~[Sm&zl ( ,1F#"<U,ەNI34تHc1ÊU_7y& .BZq( գ*L;@o?G8UqfH!bعlOQ#wj+p6tkvouGOv G $ z^7c5)ߘ\n%l¹KXB_;p 'C>D{e_; ̰d7-kt|_WlUZ]>֫N \%'VlιG_ b+%܊ٝ$ޏE/pV'ԣouع'p:LNxmy[xЅZZ+IسHXSG" "#4$#[nHR\$zkiz +endstream endobj 5112 0 obj<> endobj 5113 0 obj<> endobj 5114 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5115 0 obj<>stream +\W$TOd*d-Rm_O}$'j]2pN{8I}xjY->R9)ID:X>۬8^|dɲ9[;6s\^3S*RӰ}fwG,> +2*$G%g.*|"o=f3R[&q-FPE +q@/&;j*OU5¡SHɈs<:ĶT#má@?*oO +|jvWU*dLzޗᎻϛVGd,SC +gq/!z -C2K*lD`~ևL/~&Z:L.5|(BʹiSn2iW{>k rKX*]Gڇ3,aAz`aW/<]_Sytiкq>QRA`N^sGvCɫ"p"FK)}PTf=NzNNAf;) ;EpCmsJ٘քֻ7O:;DOPZ0k +;l +}̷֝79GYAQw6"1Vs7BGn1&;.x0AWf"Ěm`Ĺ&42y ?y?C7^4.Z so{Ѯ(\l{,0c|Ĥ(J8vĐ.*CJd=G+S$\@[+&ppHOBG$]͔{]-S`̝ +ſp!_7K.38|M9 MU[+r/m&:cv$3w4{Ӟ8[3QocRWTYi~pcQRw6U #[ YPUVN2? -DL캵/b=$y̲Iq)> endobj 5117 0 obj<> endobj 5118 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5119 0 obj<>stream +wF-S0Fٴ%U=Ko 9!>'YRDҩ inbo7=مĵ JFC==3N?Ah##s!$Q>j[hCw̴!"`jԽMtrǽJ|*<}f;}ISomk}<^O'q`qbzMH ǿt*ɷ 7:uHtXеx#\5n.Ϙ˳Bkj)lldP,KaZ7@}4ix!a0 1 }S`JkaC\x,L68rŒBiiac2AzQ-oŷrՐD:fca\b2R "NkJC3 +n9@W"w/ vE[yFSעEKv*桵 ܿOߣ\#;w)$I ]K%W<$a \7A[j/1)[Kv#e% _8B<K63jF' oh>5l?#0(T/4=Uܣ~^jh+<&H4tb +sqv>]/[_(ۖ%{j!wp FP3wejby/^Dcd'9p׀GIúGo7}|}c7~<c~Bf"d~}?$/3A:d5fޖYCr6)Т[ 1K +VmgwwMg`YYIJNXA3!@pAփͪq +>rNk/rtFfr[}F_g_!EGG| +endstream endobj 5120 0 obj<> endobj 5121 0 obj<> endobj 5122 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5123 0 obj<>stream +*1\t)MP4J.8/jM9kCs#hlKdȃ^liv4{3<6;w琪Kߧ!],h8Y;z8񂻠b%u4> + +-_a$ ̏|j& hιPHҎX%fV1m(eOF8}/nL +6VrrgR2bax%+Ccr|N`κ\N2QրMʐO+EThgUh"F=e—> 3 pAb\N)}KTB²Qf?K,!gu$s7$ij]1~^RWj;,O;Ӵ:p.6;AI`h!Ӯ P'iӑQEg/p(us_ 6K;OBLDi{:q;"V~kkj[.g/\FSd`6ɏL­QH\*DŽTޡ@,nכkh+[aq[\}/.9w~ԎB>|O"8 +pL640F\ i"tVAրݮ^T՟{騢8c6q|FUŒ: NB#@}.0B}? DHv jp2 a]kLiԙ̠>H0IɾOF3`\(śnZX41[> endobj 5125 0 obj<> endobj 5126 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5127 0 obj<>stream +>{></ڊxy|\J$e' gpj{*L䪍c C\KL4-b^ ~>iUuU(ou"m%X=;gvkQt2BWJXqtc,s{_z3Ih$Ζxځí9Ouo6('22B8B>? !d<(%ڛJvjXBb ﻺ}͆[<3'3C_}w_|.Qn(-*Gњf]m^(`[/ í7xJ"r/fQ0obdDpl,+dĈp<} ~cؖ vAg= AjџJ1iV҃/1\V=gxCkj1a'Oէ`9hϛ+$YSܡ[wsu#,ŏq(obkR#T#a+8&5gzOhT"FĊ'uA4te[ e_pqƑav~E$&%`ʥGZQ((vg@x3y=Me2_N598N+C +7,jNz~`!V@*k_IEqGli#5[^G\(TX"utwk_b0a4]% +endstream endobj 5128 0 obj<> endobj 5129 0 obj<> endobj 5130 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5131 0 obj<>stream +Kz*R=ߋ%]&5zyKWI( ԴV̓ +vqǭʂ=&TQ8Gn)"I$6I,/o}Dmfub6F eԌuڴ䤨> Ѹ츿5vkX6tLPѩBwCJlW8xh5e%y}۸;.x?vWx6 R@/SJ)KGxе/yؤRҶ~7|>fDVVNDʷw%[02XAi#=*cʍ^8zL6 Gl0$֚WʅoK_@^I}ٔ\Bs\9 Hǿl)=擈#cbj(]6f)~ 'L<#>W8/A+*e0 Jv!QA&`*Խ"c//M'I'[SaIcTFG$ 5/g&Vծl +endstream endobj 5132 0 obj<> endobj 5133 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5134 0 obj<>stream +h| %[d +:~f&%6'65A'Xȭ߂65Џp +kHEVS`0T*} Hc#aZ窮kXښ*[BSⷾ۰_Bj3K[Ǜ p]Y% +! aBY+s]W@hmG{|Tf4 +vNYqV7W rltVۨ\W9fV:,!by[ˮ;)6OB^R7Ji*,Y?~V7dO`Fɾ^M/葿}#zuy +N +endstream endobj 5135 0 obj<> endobj 5136 0 obj<> endobj 5137 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5138 0 obj<>stream +L-s]QJ}>t^*KGfu>&# >Gɏ7ˉF`qkwG^a.Vػ;tb|#'լlK>n8L{ՎJYeː3c7:8$ H6u+/$ UQ#dFj?1!MSsVpbT<{ +'G(\a5dL ~}PIYF'hה-hְiGV5dazZ`?jOҝco→];ȥCݩQ{UZ:xˌ2wPJ %T.(" +$DK-P‡3sUߝ=hCK.G/DAڀiFX}EqS@F =_kHPmM~hηJXtD?)c~3(3U]O4Z<0<5RGk\qY`S'ҟ{TE^-eB:>wRpxibQ?sa ׀tQ +~|>9zy|z +[]mZb_!HI&)"~R?Eh~ALvXJ{0Y<i)ԠEttRi8=0Y )[. ?k䩯/u lYE@er.9['qB2O`5eq F&&_.;aPd S\lrZzӛ\WY;?y<2Յ4hq[9 _d6?DWO,F29W.{@0, S LN<q\5N0S3^V aF<43 +],%`2-7sp.5ʊز/ڔkMtbX9d>)dG;$=d3B:Sd*YD#v)U2YcB +&R_5F?סּr +endstream endobj 5139 0 obj<> endobj 5140 0 obj<> endobj 5141 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5142 0 obj<>stream +VL=[bIB$^l`;1 +c1WX#Z 0~L78TTϯժa*+͇^S~;k 3qnϫ\`9ߌסuyHO} |4ә. 7YL1y=zFwʸ:PbMWYQj4#?Gނ]P@a{%{{lb;6 [݊鋒0>du0Rɨ@ukGidA^PVQeE)ƣ'* f+s7!VQhLD!X~,޹'\wiJ3Ww~uxm&Ā[2L$Ý?+;+mv;ˢS쟯I)0kb~I&z)-~y`~pLH񲦝?"` 3w1~l"}&5uR;pw 6xbL:rVT +nWڨ_KĴM+D֘gGafk SYz> endobj 5144 0 obj<> endobj 5145 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5146 0 obj<>stream +*l[W{lsD3ʏpPaq2T-1 ڴLzdZp%-XFG,@^0V儸tQ٠7\FG `Q^+Vbȹ/ҧޙ5FՕzҘ;.Y?HAח[(ftZǻ װ#1Q{RUF+:ne0f쇝Fr2)5F +c$0P:UE1O[<;> endobj 5148 0 obj<> endobj 5149 0 obj<> endobj 5150 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5151 0 obj<>stream +4f51k- ]GӮAr0 loZ;6]5:p=d,0|P?^%NPnUhBo; xp +v&g,8`whusrSPCؕKo~B&wnl%?ʲJ~r8I7Zt]cljh_ ow\|qȕ_ &&9@xճVjIfE!;r^~udDWٍDmZ6}h*l0JSj:Ա h%^TՍhM +9 8!8kspL8[79 ?|izmWr"KSCG4{E:R<tyS1cG>AI]L`3 ސ 'dp5=[FNWTfD|d`!fd~U䛟:37o}$`lkt6?H} $>ZаV .SӧXy7KwvDW~+yFsk-.sdMU('k(&Nt~Bz %=mm(rwJ=Όi0O\p#<優#aE 4%ew1nwb(HsckXs\szZŢ !7d>^HۏC񱥎՟z} _rKEsa97Gm\6rߕ޿.J76b-\BRdhXZaͅ#Q[ +#5ANF`(AZ +.h NX";E OJZ"us +"0Ft5O@S$X}Ix3hƩ1%pvݭI[x@ F2ۙRxaULq.C&1#&pMGS=Y\R8+.\q%$Hr-KS9lٸyWHe^* ޟ8%'wE"K? + +oH4s?U{4k`}ѹѳv6wXT*NM= 'SL`$!K./A蕐gjaն_ݪ= +endstream endobj 5152 0 obj<> endobj 5153 0 obj<> endobj 5154 0 obj<> endobj 5155 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5156 0 obj<>stream +QssgaYAuNq 3gؑv7׻d +v@Ej$d^*PqCH]{jZxicΡ}HnfHGp'Uߜ{8](w%\oo-y)skT+.h.}dEg Y3uF9iSŹn=>5ԫ=62SuGc;ר%(稱q$6* !S/%0q{po)Te5cܑPiJ*}D +ٍPMĢZ|oC*~\wlU?3:ϱhad#6n.l@ŁCmEVbz0Ы @4OlVmb!dYNX^=޻hIqC'Gv[Ff)x3M18◆iX~X@5 Od1;s!qj|f\pF+!od|41 bICYD. *Y o-U$Y(}Y4C-B>Iq`1Xr3O|gt*Aukʂ/?ٳ73kfj_dO,3Q}B^f*ne%̢"v  ~ +fMk6@E2u$K$y&ڲ@o^|(3m1T?s'y jv[9iG@BzZ5WL LtGTFB;W( @϶ꆃopҷy:cx-Ɣ +-ܘ`DUl+ M 08@qP.ȖheU^ OސaY@::֯)6P;J}.FCdK=9O8!WXo @QX˫=${5ŚT1MOC7=b< +d4 En dw8hYbC}2D̍XSy|\FQJkFUCPo +endstream endobj 5157 0 obj<> endobj 5158 0 obj<> endobj 5159 0 obj<> endobj 5160 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5161 0 obj<>stream +EaO`ss+by)gߠ %/뢟̶d{KDΠsK;%tlA`'_mbB 6h- .=OOJ-ohov-XnɖZ0uչn]av3͂W=cRوԎdbpM +&> endobj 5163 0 obj<> endobj 5164 0 obj<> endobj 5165 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5166 0 obj<>stream +J2ѣqj-b~n.Cqxe Ah/,Z7$j+'tVc )x{Φ^RO?yuӏi@OxO X1 +g f8 i ":t;VPtꉳH4z[.Ft”-TOi[Mdѫ;(EƯ;G׹ysVϐT0č3*PmtCUAk&h%ÅnT*؏W;CpNI_ +endstream endobj 5167 0 obj<> endobj 5168 0 obj<> endobj 5169 0 obj<> endobj 5170 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5171 0 obj<>stream +Fb@N uo&[` v|i5.WR?rSFKNgS ZآQ&h|/*R̻WAL8@q_'+g3IWtyb:7xT蔎,.Wҭ@ I06O>YH"B#Ȥ5-pe{HޠxoL3qu'oN)NW\gtʍnr\5_W=As;ܹ"X= eIe$E9BV^Jg[ɝABeu{85dFcW@{@L'22m/J@2QEs(5Cpku:)UlD)J @74>#D {QG 7M 䣩6ب~vO5 Јo#N;W!Jl3)lD~(FvTY +_Q̜4Q@%[$ ,\ +g &C &;QžFhaxOFnGt!*^#"DJ?e7 :f}ꖲ"8пPxqr)/*TU,Gs ; 'lWųJ"P: ?f8TZGw}}HK vyZn0RiX=>$D 5㡨 R+lVKPe~[W|T +endstream endobj 5172 0 obj<> endobj 5173 0 obj<> endobj 5174 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5175 0 obj<>stream +rϙ$ 0~ӢJ%U|U]x¹BM|]oN>S;}tU"uc6k#wZCNM5c1:5RC@:BЫSr%.HIzS痑luSR{xZl)F*s׮b7e~UC~w`底b`md4`5 K +U'g3`:КWb٥{<QX_"24B`0Bحloy?[G _CP!~H`.M?Z"B,'tu{,Ƣ!`߀qm|[۱߲*GNjq2Oۺ車۲1A.њzocڳ~5!?F{^ i1aUܴ6W:Ny^اKH籂u +endstream endobj 5176 0 obj<> endobj 5177 0 obj<> endobj 5178 0 obj<> endobj 5179 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5180 0 obj<>stream +x>}ڍfZ{; "jW51<_\F5#4Q6N;NcޖOE] tHDCCFwNG#S78/ˀ~yw!$Z;j߀JѢJbI#.8)tDvV>@E:K=g}SU 5MʅPEʗK#g#Va6QbjcZ˘֮=ӽ` [_$K5;|7KZ=xepW"jH0iX3(j崋JQi)g[ ѽ + v>'eڛhS2\~v˩̩ Ԅڤ0i 0|5=.0WŠU9WB(:~SsGP}Z fƐ{D7# Zv5?M̠AjDvYp˭(kA8[v>*L@*Խ#Io!H[PoQM֜UO{ " x`ڏ|p85_YEZHoK!))<?" 5rKk+ +bT:Uׂ!ͷ3wŶ.o([4 ܼh~1/eU+/(Ϣh_OgRǜ u@z`ʚu1;aӑGEx/eL^9lyf9 j|L%p{,\O|GM؊!mi[r_/uY<K@-] +endstream endobj 5181 0 obj<> endobj 5182 0 obj<> endobj 5183 0 obj<> endobj 5184 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5185 0 obj<>stream + +lL&{eR )!}GBh"d3 PeB FSPDZsI}`؋?aü hJeThoܧ9ww4^ix?L_=?D+!{e#`lG>򼘊+n4~9aMy:-&j0[tIf:hG@ٓt mEƑNbTW`{)V`oyhY^67d&;y1:7dPAl.?_ W S4ԏK6>?Pe4~0K. BWIۚ +BvfL.e갛); CzF]_żNF;F0 rI"vk +qʲcM"s6`M(B/YXJK6=;%mAhr6!SֿC`Nz +ˋ& mBK~9Cx0r\ AcӚYCZ$ D޺KO"'1XɄdmjt1J`(! ª'Ok İK-)sqp +[{=DAc~D z~Kk?*z +5Οj.&5/Lr0icãJP#Ěbh:j%hȺ!8/ZpʯYr,z]juZ$Gwgj!k`#I|?MKzx.2wmGhln +endstream endobj 5186 0 obj<> endobj 5187 0 obj<> endobj 5188 0 obj<> endobj 5189 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5190 0 obj<>stream +Pf10wN| ).w1g|qkX#3 R(ooI~Nr/C Gw({7XyKbt䤓V1]Q{Cxq׺DžC.[4ņGg(}YPF)mM;´i|O!FOE5}D9H m9Vʶ +S5~>#eKv61"#_t2o{Iޅ[v(2 lƵL%_3b?D  Epn~j⚀7-P _V"6aE}\.>f> KeFz(BLgp * ,GQ`F?k#$`ʓSxHF:E\&ZiC ^C3cY'5"іµ'?|6PZtl?jUɿyB)1+C.Pdl>`_H9 8Ehk6'(*KՒ@tE?xЖ*IDE}ΉP{n3m5ձ+c?+`; +@&!qsyiΡ&I*ϋM4AC|Ul$fd}7mp`[LCԀL%5>pHo\b2Tk#^:ޠFm+3myզ9*JŞQU~"Gy{/iZ`&ƳdP<>HNShU4%K8EiLTw%le*3;C> endobj 5192 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5193 0 obj<>stream +GFJQ+^V94PI\̼ K$]y]JXPIV䷔\e!\56Rf~ڬ?ёkڛ_Py &q5eCKj?a8e+O.H!BK*_4 @vyR1?“%zyp*|kvF,ŝ_-[giLxce 0€Z<Ȝ@~㌎Z<0-7D8g=q ++oM_8iɲֈ mW/MݮDe̜_)$i!~l SXMQ&`\p?R-vC8et11O_TEM +endstream endobj 5194 0 obj<> endobj 5195 0 obj<> endobj 5196 0 obj<> endobj 5197 0 obj<> endobj 5198 0 obj<> endobj 5199 0 obj<> endobj 5200 0 obj<> endobj 5201 0 obj<> endobj 5202 0 obj<> endobj 5203 0 obj<> endobj 5204 0 obj<> endobj 5205 0 obj<> endobj 5206 0 obj<> endobj 5207 0 obj<> endobj 5208 0 obj<> endobj 5209 0 obj<> endobj 5210 0 obj<> endobj 5211 0 obj<> endobj 5212 0 obj<> endobj 5213 0 obj<> endobj 5214 0 obj<> endobj 5215 0 obj<> endobj 5216 0 obj<> endobj 5217 0 obj<> endobj 5218 0 obj<> endobj 5219 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5220 0 obj<>stream +h'7TO()3d~[{BZPA=G|pOh& 1<ܾ;9V3+CV`%.$D!k^~A4}8b4*&"L">o2ZmQVGvCY1>sB B#o|Qry_*9RU_$xk@sQR}^*VF3/8o)?FpƨЍ?d4aғFm+D&•-#.5 @#wyj}U"үg]ȘRQ$ +َSRA lTЕrQKD4`tA_ytS;[% m<<f8 S 1^п@z'|6B4xp!78/myw.u塞}6&O{bTlrV (tSƹ̝@R a4]LwG%C /:a8鑯H09ydVeڱ$K?ɎeiH%w(j519Hg]p w/P*)d~K^ե +樂)UA7ΏgѲ #*jm5l=-Àh.U%Qg1Y=?Ezկ&wj-Z# H`f.DE1ْ؋N8kY<#CY'<h/Dy1x,$e%vTE+Y䓈$X +za аce/ 9/@$O"Ii}$>B D烢CMU8sDe jXe5l +G<@7:Η7QMA/X{ UfTS'q&Q'#ջF#OGti=(Bpl+%SU +n\w\UdgREhF>\ G7.km9]w..K9_"F_[~U)`CY 0Km~›!FըbNgpPzjGKcM}4=YL +rDR90ª,i8_Yr,{3R?[1OS(C`'+#H$Oˆuq扤S8M66`d>qQj@ +~,% ? {EB5 Ή-dii᱔-`FY=mahǍ)FN kCj$skAvd|XjYd+Yb>7\L+mdՔ:L7L}_dio& Bbu-O|ʈ,A˳r~i(ږZkZN0DGPb2b bI\ tf݃-v@;ytid`G> GS$:ΞtRlQ~J2=σ F%nB2I.&AǶ+z 9$ǒ.zYq[tNu8z7VlVO` +endstream endobj 5221 0 obj<> endobj 5222 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5223 0 obj<>stream ++KckFKb^o4jh q#`6,G*|c"XwҌ2EQ fX,p|3c}"]'u[Ca6}+v <Лnzu|4RI#Avb׭ 'XNu,bZQ +DtA6ͽ؃zRNZCCG-)wL :pf| +#A@R> Y}h4|^_ιϪ|y4I |ޗ8G5|c;3 mmJ' qԤQc>q^~1cZJt Z5O|?`"DP /yǟO^_(F{A/m]2!Pm>|DOo9 џ/HSà y8z?F=̯'ԏ(<y1Qt;~|;@qӿhU`%;:E_<|"G40Vox!߿{$~A'4h?@Bdt1^=$ 7ߢa߬#6j +endstream endobj 5224 0 obj<> endobj 5225 0 obj<> endobj 5226 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5227 0 obj<>stream +PWu:9&lH`:\&2{,p *.#;gt,#thV!AmS% Yd?"4TaZBLR@Q[iʙ?DW h:++ш\{OHiaS<5(ϓELDZf|;7t6]mUCY 05ʝ{bh3WIɦ QE|`zkYSz+#!j/ oى*k/=ן^VD4V":]ryIR']5 /zZ*Pud8$ߠiO@7K%策!+8oO%!$vHb"?`> +v:E촐LOM;)m>>j{~Œf LۮWY&E:Φz0X׍MlN lC-] 4v^D偽Ψl8H.̚ay3^ Tn&qA,|V͏xBm7H^ +%ouI铑 +掻LtCL(\oCdMz[T?-T,)FxF:#2K1djTyH]:wKEGz.|/ߐɦn6<&A!* +^u4ep&US@7$ee w\p`1#üb 9Eْ,$ J(/N02S|䄒FRhsIBGHLpiĩcl?K(~V2']P<)>=-q5P<.#ѳ$*GUI +2<_?hgԴ1l2EH>#i2UW@ܱ +endstream endobj 5228 0 obj<> endobj 5229 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5230 0 obj<>stream +9#{M`7UJJ.q;H5k}P;weOԪA[O۰jOT|NDߥ 뜏&k %pؤ>d^'1ߢ{g%YFԮՖ|ٿYK/fAի״F6gاGq`"M <谪~dLAO%6a|@x-LiWe3^2Zt{Iw|_}G6Mǚ˥>݁UJ^М *S$z N;B2X7֞|C.bT0s•1" ~҂<$B&;Si1iBf?4 &: q7H._Oۿr #ff88( _=m7F`AC`1 ~{.c2'sJo ӧz. "Ϻ?Fуг ;Xq:b'^;/v“ӟ?wS0S0.@ B(W0QKϤ2i0KҌ(MvƎg}+Bٸ=xZ4$ i0ǡÜrsCΜsޮe͘}`lJ^#숁ewv!|=Ai3Xeqy/,:ymSxW`,wDմ%M;4> endobj 5232 0 obj<> endobj 5233 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5234 0 obj<>stream +vqSqG+9pg<j&܉G )7_2VH|٫Bҧ lD80S1d^ry"|Iq9ӓgZZO3avA۸qDύ>/{;]m +R +]YcoKTi͂biZQtz*0nh 4X>t~ru{UVɒ`ȱ2h̴q"{ŠT%?}|=+v&:ZxVt#Ci?A,i|.2b#t٭jp):6H'ױZLuKH}؉XKk=$}T]#k̿ Mm=JCĸu=dt>($dFozS48;p%Cс[fb P&;r%o:6+!83:eD%9F kP?6Sb-Z2 +Anj޾I,nչS? +7Y( Wk͟a^Fj4q,oZ2C.ڣ Wkʊ0a#W]j\S,}vWf=W[q*;xU9s+%£L)e+1> endobj 5236 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5237 0 obj<>stream +erOO--^Wɀش-5pCZ x *7a5VjAÜ,bx.yQ8]Vǹ o."aO<(92a319Lsj}t ?tm{2,,3i5 \]S_=X^w:\'clq]n"si0Dz(y44'Ȍvn QL6qȼ);ELrՑem;x! ԕ{sCt>̈́w\k!Pt/tBt06&Ŷ6{c25s7cܙKCR|V'}g4kDk pAyee$A Sօ D. Dٍ6VjB#nMIdd B |pBIxjgjp.Gt4dP˫C'lDQ k{nrsF3/z=|c, zx_Ee`"6#HK+aq@-}e-hsNm2OS= VWEw,$=vlg sz+Q?[\J؉V5vĒ' 漮+>VZ\ʍfi=>YZ5[YVՂUC`!H[CR5ԫḡY1r~9<_#ef٘gޒZcM_wcGKx Wab$E>u;tvK +endstream endobj 5238 0 obj<> endobj 5239 0 obj<> endobj 5240 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5241 0 obj<>stream +a}>8| 磎1 +Kŏv`d]?l$!jאc♙$ļ횊?ydC-@*^2+m$zb(+}%q?]FG{) 5 Y3OrdS`yrUDrGtҵ&0 ܋u +#LXo %V47r_)t )[ǣ8;9Y^wSkȪfY+6OR +>#1+r+CKܐ o^;n;y:L弈ܿmTczKc+8ȪP`F (jeN$ q$42w9rJyٶBrw]6vX,I=@朜X4g674Dd`:Ϡ"*<Ԑ넖,9Ɲ٠āT.ϻ/͏ b(aW-Rg5<ꄜ(IJOzGHāngH2sE9 Z,\+5ңt!'捐Ԣ2o +\qBfhۣe"oikj6fuԫ}3Le>3FuQf} 1@Zy/|ʈV悃$~nՐ_jV!auԛfiPP|A(F߲b)$L# Mw,Ё{pHr nrR, S…} ZWP}}mPd!T*7}/' +ܿ(=b%hIżUn[Aį5Pn@91pD4HLR,!=7|DpsmP+=B]\J.e 6 dfJ,{uY{PsFMn IsƑؘm#% ސۤo׊%3>p Wf;b9coPR)vV|vb*d׶kc0 +endstream endobj 5242 0 obj<> endobj 5243 0 obj<> endobj 5244 0 obj<> endobj 5245 0 obj<> endobj 5246 0 obj<> endobj 5247 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5248 0 obj<>stream +g"V`떳Z?󯏵ϭ 뉅BTSmbܕxfQXhkfN2﹀9awi kM[XL>GQ9p 6s6~ˍx?38@\a׻)R[*TqaJ<+;ޗ@P-;֭W%SU6Cz9C! װ޸+G_pG5%D9g+Gj9pp%yشݒ)->YD9/6oʙ;hVG?+ 5AՈ[wCj̵ַZ8T}Ǧ::Ƙ葌QG]`Vt?QO_4ʥ{t/+ /x5h;v{99].I]hPG=b>ZPplALd%fݐ8 Ym&%&U~[4=j nUTz%ԧoA( C]/_vh^%=cSM n}RoH+2:dCo{;;\1C :r-nDS܎YuJH_-5"dD#Ͼ zLp'= *S(V2ϸN!(!C77N3Vu![~g`OL'{a]ۧJE;yg)d!CoƘcYt%q|X23vֻwՉ,(DtJuqLQ"$ BdEoD .va돖yF'b04-0IrNk) kIxHX*I0oZz5y&g]EHۮ(HʢbfF7T:Y> 2w>> endobj 5250 0 obj<> endobj 5251 0 obj<> endobj 5252 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5253 0 obj<>stream +2Nm.IZ؀3WԌ>oB6N–Qa#qSEF9)VK)oei.퓡DIT%|/ХAzN/݁BktqGD[G-1MzHowGV&޼@ܜ~kZ n 稉V`̣R]tPy +쇀8|/gĪ.D:'A?ڕ:>ѱ*hb1|l؃Ӽ WSO +NCa0>HwU>#_YTsZy # \whీhCM.|\eO˅q!MXz(-L燹6b{oA`:+0(WݺHW8UJUXjwykFs[i2QN=j-ymEP#>1A ++D`X %.kk*֩mnzYyUm׮S@&VM-F06ߧEG%PRGJJ+xߕAVJUo}ӈBvJN%nWHH`Uy +N]? \Y7bx] ] n[xe!g#H!VwUܬR<Qfqm|gK ^gLk c⡀FgS[%q@ ];`_AuD}'eѝrn۰V"^| ++ԞPGT"t3Ŷn5-/Ej&I +^&mF*uZX =NC[{6yČ1zC vMab$g3Fra +&c;>",zn/˒rhbfj77!O\ jFlc 09DVG*=KգO5:qDTǵN?啺풏A 8[Yzo^ ;38 w +OtdC1!k +'{Ah8P6|+~ rb$]e9U%g拈>0WRĥ 4>~9JY> endobj 5255 0 obj<> endobj 5256 0 obj<> endobj 5257 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5258 0 obj<>stream +wXa2EM $(>3D mi. >IWf4pO-blfe |ZP+u/]ckB r]Ž +W1Y"$-se1ï A? $r:ClYFX"^2|zJoCj^} Qs_`d#GO6hj#]黰+IRdoZ]y],-mؤp3>&~F}I u^r _-k +8r`y[M`#8KR  .C(vMUk#+՝{؀dոRn:شN:(! + +5*.ϩP{`5f KKFШjlʉlq&hNBiLyȇQمں>4iޞ)'nINrrT RD{ uL wva}{59MnĠ+[H‚OQ_0(MQQB>;`JW.2 &\!Ѯ}X*nߟ֨yے:/^YĊ;)k:q!/_^ (At(<$Jp]З/V=0 txKĜԹm2}Iɚ<߼Unf0`JMf諙+ +endstream endobj 5259 0 obj<> endobj 5260 0 obj<> endobj 5261 0 obj<> endobj 5262 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5263 0 obj<>stream +J@9{c,+)tD>zFо9KIF}kZф@w_G؞oa Ʋ+M :4>TF [{58*́Řdrd?657qk%ur2zAcHٝZ 4(jPkA-}Ƒ>g{?pv۰ibܠh?&/9/Qa0H򙖒W̑I?+$.v%KXRoAy'"gf=D;q5SȺZmL= ~(kSϑtm1xI?L.ȚEJO5K{s*g C؈"Ơ$2b0Uf .}Pәc%` + :(/U =W`:梣`(> endobj 5265 0 obj<> endobj 5266 0 obj<> endobj 5267 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5268 0 obj<>stream +xV$=ݨ '&( LD,:G>WP<ǭɸZ3Ř'>6q.>YOFK*j8a^#no6fXjve&;35Wn& aM5Kţ`0 ٔe(Xkj*nv1ѭ +4J0tp?0j3܋b9f:xk-ƅ8wՈB*Kk<B8ŕ.+9oSf72YT }]U iSc&nsHQ&V}HHwC)[PdO`<<|kru$ze m7S'${N߆,2gU3AFT _S~`* 3ʄ̀Lzxf" Јo SbGw|:e SDa,lI"Z<ϱW+A1Z|H</KW)MS̳[^,)=~YlA#M^d@DcFǁ&:)wr> X*cG6?Hr?bWrf]#lصofBj%*h~JFZaxlB%L k$/ߖdZD1SyYͻ:(q==Pc8!@$ +KEc6L@6v>, -]չ§PMZ9Ăy<>ƀ=Ճ8\9 [A,L2Q)Lg'.;SiOTSP`mwT8v<Wd+mE*es7SHԀDH,zsE`Rw6M#6DYv0 U"UA`U{H={ӥ3c@z ꄒ[ck` +endstream endobj 5269 0 obj<> endobj 5270 0 obj<> endobj 5271 0 obj<> endobj 5272 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5273 0 obj<>stream +*gلanQq!<"m)A*)Y] bx )q.:>tsmnlpD-DNХ*yW+FO.\a&Z{pa@nw`Nw{FKaWaޅ,\iQn'PA s # his1p +hKTo2J}밡Wz]siO;" 4?3Q{BBl4rFRe_ &iZIT _ `sAZd(hĪ@ԓ+Iȥb|,`gXg4r[c$ B޼4ߐ^5=LXioqԓkl}RA9iQ䏵dXINDȀ)A99'|8H~tt0O,+ʶ,ŝs[F/9|kr`:՞n_m5\}+j| EW#m@:*j«şKcc`Rh˅!X󭂕4ȫZ.SlQRւ[K"tO`-(oڡɞq_~'p8}~E(g# 㥨^xV;&fO6vu _Mr`g. z +3|;JHu}߅1|'P1Դ (v$4˸H)ΧJGZ_]Z +zίWNwJhŮ:$g"9ւ@f2&fk5f0Klq˫* zT%J?VthJ3)Ku:s'>Jcmho0XٹCF00Q[ԻRq(0Mam# +endstream endobj 5274 0 obj<> endobj 5275 0 obj<> endobj 5276 0 obj<> endobj 5277 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5278 0 obj<>stream +2j_Znf)<`RC&*? )F)kl +~Eoָ5xRip\F'u& n@*3 cNC*nߌ|lCn&-@,Jger ɮX("&\9pnv@.\21ꯖ{U*`/v ӷJ1bߑpV0GArC*B؆l$0 u8RvV'3~"™WD5yme8X 58:|L+PBԿ¬r{Ġ z H+>IV wt&&G<®ÁLm0E{KEJCp!јd/zw攱~z5X6Ӆbk< =&r&,+' &%Y*ءV,REK_ ZKetl-IWuJ~9mۯW@1g3 Xĺ`陌d~Iy(LC` ~T¥$Mg窐x}[v$<"ɶՔJ>>O#h+ɡ;j֩JYAt?owX87pK|h ~gc7ؿP4]6txvyvA'XQO8s!U2Sl!:|:]94"|\]~UZW> endobj 5280 0 obj<> endobj 5281 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5282 0 obj<>stream +U@~_~ڪSC5 +g1# |y>L-rV.f%F{5F7W74 +ïK^E$d\N8ivwq\Ȳ/P wL,7]4$ulQ +=oo- |uYr3\O܈Sƾ "-[.H %tBfגX\ZxޯCĽ#ךNE(85hHmW +>iH!Y"?Gkm]} /-`Um(F=*۰_a<ȑԔXcyA\'I/"Ɛqva[J +_U ^`m]i6[]RǸl1c e$}šs4/Tcr>LUIwƬԊoŎn-!Gp,Bo!!>y&[D4q~ !MUPy"c<ϒsb +ӕ&o_B{D}ꕒ^&:_1z7 QL=QϨdͼE4BU: K6B۪/yͷ:΃t5-УC@ *gSw٠det5<|Gc+ջS˸/ @~Qv$VT<:]/K18|bkFclJ58z˔rr9ne^fWZ5WwNYWSY=K>8F%P{ϰjIfrI^ZA9 ^C UNH`S[dC! +5 ]wb)>~[Ίd\G y{)R{%"B5n;{Ôv3|6{ T֚qx 8P R|~D8yR1|`v}R$]ʝtp ֊dFVM@©|M=Nס{T{`F7#'w.Bփc~ +y,1/d9/vLׁsu$3L`92ڕ)bNwwK jp녒.Za-V ] +endstream endobj 5283 0 obj<> endobj 5284 0 obj<> endobj 5285 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5286 0 obj<>stream +EcP㪒-ƥ۪Is'dyғDCj$Uxlв*j? Z{wsZgʚ BFt3[% In,LT毸eԾn8>8pc<V@Vã+J=$od%_CE3gM!@ ڿQ*>x˜6P'"b3idSpi**/v<R5Nz=6ei@^巍_z\Wf=e02Gi͛șAq0ŀ VlA-(Cl™U|^T $h1 I\UZL*^+)=wiǙqg|4@P6ݓ:KW}56uh#p$q67좠;(E\RwI@dgԏt-r ?S@ :Ȟg_vm-ZoZs] ɲ ?REҢ;1]tCg!4^:Sd<1`7 V=!ugCy|[!2J~G/}1jQ` Pjx^O|<% +endstream endobj 5287 0 obj<> endobj 5288 0 obj<> endobj 5289 0 obj<> endobj 5290 0 obj<> endobj 5291 0 obj<> endobj 5292 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5293 0 obj<>stream +=m1d1Hm}74c ~ʏ“aq2ǯ>8MŸ`q +=+ rD6m^4厱Yr!#nՙ*S[|#0p'_eu8_/Ӯs\ۮ`w>9r?Bsэ*fmm$=XH5}`8Uc3/t-먱qˇV8 >Ւ [ʏ%Vcj/ _ +ٸnك$f&qͯV/CH +sZwap_dVk &qbl+uNj6 ʼn|RCr[8'#Rlkw@-:^?<#?'.yr_F`Nz(v0LjҹY.=Zʼu!iaM*_Cn=>pUuk+ERE*ٷk a\`^=7#v1|ij=90oYӾ=!PEqA6Tuԩ ؽ?ȩy8ٻvƐ3px| +Ե A +QVe`꬚"ܑbTZ_ 5ӝT0*!> endobj 5295 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5296 0 obj<>stream +>ja1scdƅCNSF1 P2^j۹ZZ8)\b 36~?%ET)6ɴŵԒ' +UGUӰ#A{U,E{e7_QN`@Lj'EBS`*͝Sk [ +=X)PN,Ug.0)) hwYz"hBKz$OF.gg%$ >$6R TǸF{S>( +(ѕ6qϴ$E;c2g;dxMvRRjN?1j5CZ[%cWMf͟HD >OP E!AR hЇ5(fQ" +`ew)ߋ'e$yV@#_.Ɵ[ vRh"#f1k["*|(vqD2.3]j]8-ꘀiyHKs#c_ \bfϑ }=z.FiԸɊҜAFkC"5RLu$l=H6]V`H=РY*I8HmWӤ2%C VJ*- tK\͞* ZL5 +endstream endobj 5297 0 obj<> endobj 5298 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5299 0 obj<>stream +6ܓfan!ad'.19 3H;9Ilm5k9Qsؗ@faeg0I+!c n]a35ܐ)o'o9q%eMF}/kt;_$ 8jpc%¯7 /3%G #rp.'r#7dN# cLM6h?;}t؟;,&05kH`R%)%Ry*;;=E1Kj?dQu`,ѦjJ +T(Vg/0V Lv56$;++|CW9^HI-cG(T`cRѝʉ-> endobj 5301 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5302 0 obj<>stream +LWիǙ_W3BمyuH7g׼=. 뤠ar"ɹjלTg}*!#JEpQP瑖},uʭFv`"]|:^@)ir P(2VӜ֌.=oq/sD\uWV2o\Fv}a9t9v˽@$%4u']7&] Iޛ<:Z9Oj-C6r}i%* m“F0#ԉ԰{K4MuSc/pi) 5`n_I7Zg_je-«km +-quz\L]p*-AKnubNprRƎ"DL +endstream endobj 5303 0 obj<> endobj 5304 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5305 0 obj<>stream +tW[&Ypz2Td풹4SW@,('bS/>B|CW`Wdv}@ .!fH$ō:N{rXK2BDa'X5uX(!?80z XNl[RRŒ^F}5Xb6$1*XH):^m++ O"O8ϋ4z}wp?d 5 +\LV:+UfM=>.êy{}Y_S*%`hy 61]V38ByfX*OJ=N(ԕHz.;r 53ϧv}GL :4Pz\ElLf\PkN\7 J!R^@q,ZJ=Jf=aC?fp}Dhlu?ʤxXS]aq(^1ٔ]7SO+\BG7 8FS#('")ʆD1e 𽣟JdJfsMus;M2Rh/JO0Aa#p"8#3cFZ'Y˭uY ~B!PaKhWW~{=⡃d\խ."ņN㾅Z! %`̼[U9Fݦ*mRLl T'GRi V wa27b +endstream endobj 5306 0 obj<> endobj 5307 0 obj<> endobj 5308 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5309 0 obj<>stream +CqFUf'_Q*O.UdY$,:hOT p'uAInS(;n!,sdi~!b b5MK`?n;Uսz(-n6x%~º7*\?Q'1桞 S\Ңs@@n z,R- +>WE^֏ҰPCrCQ[V|Vn'Lj$I42n;2sHHlnde]_,{M >f?8)CFIQM`^[gO ,J԰e< <~Du֛;\2 IQgcVdXLk > +Tjt`Z@VeX5 "rH ]Vv!Y)U$D0X?+vՂzDT!{}~$h#5F5o[[q;ڎ}j'*<ъ d@8,eŔY|XCbNc=kbD~dx1袻BC1!}6 iC^6a2}»Xl@'Ha +ġ7R&\n* 8 @ +XC~gIiJ3-. !]-(O1,; xP} nq!VR}2ӊ9e@Dx..+<3Eq'N/Rpf12c-Lh@\1̀(ibʿ. |H~r)Pҍ?Rfq]0:8P9?c:xj@N"wi*hi a@j .au# mL\TZƮplzĿ}TL +ZvU3 +ץ l?UIqְŗp2 Bu*^ib!fZ4IQ#6 xwG%K3/omo/F#ڃvj@Qa9.ɾdZL4WT)G"vSeF wD9_*fR^N)4=HT0|} (> endobj 5311 0 obj<> endobj 5312 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5313 0 obj<>stream +$vB! y_RTty(} sE;}cw֬&lɨ׃+ҍ\Gj#(clVfԙd^q&Uow 纪;K]>5pE좻% D.Nk,l͂_Aq;(]}ˑL;{QpH#|ki/i0{$1j\.Ŕv+W} `-wJ{vf[T Z@/+'|QX.kBZ8kZd(| +v2O8:@~ãP>Y0lH=Z]3ePLCK"ۭʂAzԇ!=Yq O4,;OT )b +p7{JXKE//7,%6EV|_`NMh^XTDp29~C;@Iia',4ָРͼyg!R@KG}j!|1`~-˧ ēخfax(B;ĄQ4\`-[pv!C"'y.4|f8207'ңkO +s/u8ÑsnϦMn#M^CihUdY41ktb҉5pE~C%fI=;zkj~f&K FT{LPSDKaeZ\j x^XuXN$3" m8x*lINp(PӍAH]9p)-aقv-8 1f:^P+'v^2Z0,33_Д +endstream endobj 5314 0 obj<> endobj 5315 0 obj<> endobj 5316 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5317 0 obj<>stream +`d\ +}? c^ft +]bKopoxBqE.7s\vy^Z?HU,b*BB|Ui+&5`d'ewy<'B{*?fOQ$I{enKq Iw>gJ3H+˾m@7)Ūv] *h=uKǷYjb>qSe c}xj{rc2"} R3Ok?[,Ȍg"66v ;&D)Wx=!)+92Ev5؄q~8F\w5NoݣȈExr8y򶡆?PZ5~>]wlyqﮋA7ꆰ (\&qAydЍ"5Ϝ AW65 |o[=)`k %T&}|mzI2G'oL>iWwۭ jU] +Ƀ4Ùisl>KDC`/ u_AR4{.\mHpd =Q*1rZQy2otz ⸡^n{?U:tGb)$Ά&o.*,O:4÷` +wR& YzGOSFP;d\'G$=כ^o~I}4ld6 &DM#ץ^ /hBP4tu,R9)qEGg2-X;u sEԞI0qZ:?תxzP`GfI^']qj9 `p-hr@v7%^NMXr֭98,10~Y\j/!$NEL8'a4ۿs3s[oܕӓ +kQãFMcEE讹[Ű +endstream endobj 5318 0 obj<> endobj 5319 0 obj<> endobj 5320 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5321 0 obj<>stream +GjU2X/׆d8,Y;TX8NJH,~HW +|gWO!^d&y݇lΙG;8 է(U/Oj8S%V Ss7%ceKi&JUX:nK`7 ΍Ln7I9 өXk(3KM7 ,BQ q%1FߑLe +Yk8jt8bڢ~\LO',iboǒh<֨ }uAe۟t0j'a;U)LrB׾sX{!A9"8ɠՙ^6ml]0:ZxC`2*v:S^%|@yO>}"yJlyِxJ?&{&tVw*YƀQmt1H WQ-{QLO؟5fs&u쏖dsZƧ/9qA"(ylr8ewCb@;<ƍ_m%x6t9}@z#@rTcȲ-Ywx lq'j"Kvi.K\u?^3uIbᑟjd\0-q'#mU=zr7Tܪ1ZgqZ1v$Մ:|(4N1DIJiur{مUX,wмQBԵEvO*=m+2k?ܘ?g?ʬqGȜU6UO"rŘ +_]Bƿ3̅>,8U n;7LVPVʼnS)h]> endobj 5323 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5324 0 obj<>stream + q4=]5`%!FK-fu_ȹ^FE/囜̼wߣcZ)j,tm8 q7P΅Z,08RF FoK5mEY(:?#"zTu($Z!lI#:*_}fԲG4t`5bϩ30mkSԾ8g_c{QZ*lu?*ЭP"@RX(YXd`"H mJMO;#Hjdj +]HW_TeNNIF$,A=qFa`e"u7n{{d +endstream endobj 5325 0 obj<> endobj 5326 0 obj<> endobj 5327 0 obj<> endobj 5328 0 obj<> endobj 5329 0 obj<> endobj 5330 0 obj<> endobj 5331 0 obj<> endobj 5332 0 obj<> endobj 5333 0 obj<> endobj 5334 0 obj<> endobj 5335 0 obj<> endobj 5336 0 obj<> endobj 5337 0 obj<> endobj 5338 0 obj<> endobj 5339 0 obj<> endobj 5340 0 obj<> endobj 5341 0 obj<> endobj 5342 0 obj<> endobj 5343 0 obj<> endobj 5344 0 obj<> endobj 5345 0 obj<> endobj 5346 0 obj<> endobj 5347 0 obj<> endobj 5348 0 obj<> endobj 5349 0 obj<> endobj 5350 0 obj<> endobj 5351 0 obj<> endobj 5352 0 obj<> endobj 5353 0 obj<> endobj 5354 0 obj<> endobj 5355 0 obj<> endobj 5356 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5357 0 obj<>stream +TN}X[LZr`w.s~(l LQ@5%c߰ ΁Vm>ubYht$Z! =g?C">@^ENK +F-#6>*\5;=i(?:\ 󹩖VME#sxXEpUQ = CIsqUPTQЅQ#p,L2mb#d\d\BW6+]RƔ½ ]D:g0ʟ,3PeD"m ޽+z^Kfֆ^:.6Ռ=s-/=тip.X܂ PS0lkQWj^(\IJHd Zi#D վ'C@FeIY0RoQ L'J+߸tSl$P >mBR:آkUu2g_ sXi#.{ 0b~4ܛEPyadr}wL{oa* +g0hU.(U21 +({ix :K!l!N[i{ү[EgwsܐwB +Dߢx(Zp6qp'eO'Z/N.,ʢ{jUYAIid"a pPYպ#̮[ 7̳"hU*. SLQ³XR˦'CNnصOP/q}AdW^1hwl:5y_9` ~p&s_Ke9Vm%ڀ1=) Bc crG4L+@w%mPDw ֪ ^;YM`Ru6czSZwSl5`6 \%l_ i>qQȿGȷ='xuFb#䎌AMW^>p?q{K+?WJ +,%Y=8誑Gj2jJAGѶlKcP-5 %N|g)Ij/iه|q(;Fgn4«&i|_3d-%`.TߛCWjGύWE +Jڇq:HiALɥ`yEwkHh=g $߹Q?%wtU(  +R`}?zǗkk,QUݔ夹~1[vjT^A\ɠa|FJ09,XV<E$mPد/7KfF G'FH04+VVEJGͬ,Eda'w`ֽ:$7N?m1:+0 d7f³'߃j%(ۘlYB 0++ˆਔk|vS,:jW&Vf_o'i([טWټ +8xGY.0;Jmpq|sYkwz\n +} 1Ύ)3YG_dfいZJӨREtᓇYW>FFHB[ADi_{Çnт>"줸s1jƇ=5#g4_W 6_O0a:dl.j2NgڴA\kH/[dk)O+9^a5|G (@֩S8hN)Cb/Y+a N +fb+{qr`!ثc3=_ Zabkh:5 Z(4o'aV0_.ѩ$](1;Z1}@J@<Hҍ }o̘֒qCES$tbƩD ~wo /t'68"p'u2+l.{@6`nLyqa䙘q9*~(p{yC dS9)F>*i%:E`MTԬkWG_Ԃ8H.v[cS.˹_ +Ir/Ih9#b'e"HUd[tPo[N + 8X\P${ R[ Llf)H7r;!>5dՁEx=ߪ+/q1gQdгH>7d_jDVX:`;+W9LaRR 6?G._tpp^=E =?$YyZ3+^ԐNszC'I1aL&WHJns%ca+sEnx$moo0?}0> w.r&iRn#vҔuADԇBǚ,kF4YFTw--q%@^ +Yg|[ZwN7 ^%_q߼x25WY.B'=j ZTyiZiuzcENzs" BR:%ش@Jh._5(o#A!eҙ}VrR(ίdzpjeLr#*ӳ{Nִ|$Yp^a#|Y!Nmۑk4' i]BJkhP;ZNYl-dv")P :{/<_XU}a u_|t kZJC) +_B!3wiQ7kS]}*hlTL|)3,~w[B1?p4?q +Nϩ5+ j0M]+#=WeVMTO\`Ax0]XSA dn1]3mk͆ +\-ɋWՇw#>ƊRePIARNMy݉ED ۑ9E##BpIl)?J +M&_5<l],dFJ3aOi?Ê\AR|盩QV^kfX,[ +`][E{[z3g'-O;gIQݍL\;e^a?ncC_Dh^D|',d1m̪;:Yń뵽>Wg-axUosh֪-$ۮOEĎ%Gz K ȆqmPAI;̴ܘe+=vP7266<"u!zszd oI +`F ZT]%nQZ 'K~B +`iY&z#h[ +cuׁ܏wweBf2l|*d +, zbǼ!ٟ7댜.G伟xbCww(Vec4? +endstream endobj 5358 0 obj<> endobj 5359 0 obj<> endobj 5360 0 obj<> endobj 5361 0 obj<> endobj 5362 0 obj<> endobj 5363 0 obj<> endobj 5364 0 obj<> endobj 5365 0 obj<> endobj 5366 0 obj<> endobj 5367 0 obj<> endobj 5368 0 obj<> endobj 5369 0 obj<> endobj 5370 0 obj<> endobj 5371 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5372 0 obj<>stream +lVul'N92܆vHž$ńiz3]uQ?[U+»Rf(Ȅnp$>bNb8qkqp:m)qΫN uڌضopվxac&8?[{Ҁbl"fhn;+ mje>(e+,T\$1;_\Gχ b!xF/ţG +LoW]"ݐ'Dz(;j$e)YS4>w.1}ik#XZڵ-l|$RYV( <6wjUŅ=bot2T\:i( /͞w}Ӥ ӚCYl^8̠V7Cq&Y}rs6~r^Øxa\wabrãی=l~m D6Mu=˂<2>=~-ЇqBnEG?}ʭ{gFVFr yj#N*?x'ǁf8 |hqn*O$'^*~PI +Y:r~R^',e,pa@ѫ5n_1)¼GO"7@:ⱴQ;`@zR}3c >2wI* +ci&cWp~쏕;"es%3洄>7kڜ:R5Gni-6rih୲0Gd%v3EcM5XlAaKdD-ռMn[JYlɵ)t> endobj 5374 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5375 0 obj<>stream +%6_y.]2`sjIiPhs8o:̋y[g@| Ŕ,G|7i,["/ )/OH^u^2x9̌6\dsSʘzZsK"dRCluVB$ oAnx_nz"5c/@ 0)i<. s{ +Sc&:GS4WxJW?H>+c 3w$!VFM   +*^zP=H}Z"Xv54?-PchX$Dzs|?lNH+꟤@jmm0db^fZz9"(U3@&:Fm7A#ҖOP#JEw/lGV5X  y : >S|[JyZ [yn^5 jlBpꝏL + syyN!C'5HHiC9Yٝ'A38cV'?T1Cy"rq C]g?ڱv1EtTP3j{ |ȥY6P۵:6Ex8IOX :֒S=kUM$OBի_$^28A ;PnQ):Eji z +endstream endobj 5376 0 obj<> endobj 5377 0 obj<> endobj 5378 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5379 0 obj<>stream +0\f>6 9 #CëI]620l#ݺ^suz+z%hà=@m])|pϤߪAѲiȝi=u,N.rG+.O^f!@`8I--E*dZ'7$l8`O&< +=M +]REfMoV7r|ሟ}e)o^UrD]: .Lliv<e ׻4$fXևM^~ kd '4֪޸V] b9$~ +Ms7#owJqy +6B] nVHp@TwGO@$x7Xc9MJ *;vМИߐ{EjmuWLh1S"Ѯ6$> endobj 5381 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5382 0 obj<>stream +UC q%6; 鼯cصTQ3>HF3k."R n; /V3(J[ |CYzRO?hD['M-Ե7Fr|6[YWC;t [;pR%[iV9%L=|Tb C% y }{*@ˀ 3OZspVz]KP{3n%$ WbC+OBC)aEJV{21"P +\Qƙ _v^CfWcO))9 4QɛAzw%S3wtA{ۉ]q33&X.9u& e`QiVX+qV+aH] L/J"R\hCŎV~ ">+p-(ArXi4IFp}%7yc8r&/t-zTɭMKSStV~;/Sx*נ- +m1*~Î|W +6'`R~t5 ++ rSqPsB~*#f6/F] kd벱5{KIgFOqBUТa<8F}FaM!jw[](q +xHFR0"hJwFtxDi.Qa$MnЅ6s>TU'!N ~ +<}JSWb~ZgBVEu8'zKiJt +Sg%tBMlPrFf`tw+b&/[zzʎv=^ϫrb ^m4ӣ ?=#V yW<섐C[7/ǀ=QηniŒtl+]DdQw']5v̼ViLY3V>5hD- ]63^,2(wد%4]ne ŧ~o Ή2 +endstream endobj 5383 0 obj<> endobj 5384 0 obj<> endobj 5385 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5386 0 obj<>stream +Xmy.G0s$ɕ\l^Ir ;4g"QVaYAͯ8#r ne>Ms2#ǖ{w&AQ?o-puT9G. |M$FF!W+qܢ;-+!MU]^Lv-łvSESaۼLDRh|8ZMWk?#S)}nQ 0w_QfL8|D}g+Aŀ - |dR48 &!5Ķ$&z/HyOx$ ~ՏK:7Tzv@v0H5R6 ʐ3{T6w/b粂9{w |OR'!zzr3+yL怆tuK!OkŒ@Uh/u\.RҕYs*nRlB;})[<9M7Vjh&> endobj 5388 0 obj<> endobj 5389 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5390 0 obj<>stream +6Lm=d=+Fȝ5 p'^[\Z_ !3]}jw6N+6?QهGJ}9"Pݴ6}ZгaU3 SQYW1/m'ǵTGͻEV-M'=W2Afv}K ޅset[L#-AT+a>{ )ݨ\?.Ǩ?NhC7 4>ɚ/Mަa4#hsDG(sU +0"<@1ywn)\+КyPxj!eړz#[Dx>5KToXnoc>8Ca!?RR_Uϻav|tgڴJeP_ cXJ 3 $eOtAC۸.;Ds +p:dYt[Z-u | +endstream endobj 5391 0 obj<> endobj 5392 0 obj<> endobj 5393 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5394 0 obj<>stream +0 Ju%6JIwdBF[`1nNXnD>dWl2"qxRPbv~wyh\kX]K$5"> iF$ "%q2gc۳C֒.<}fǢ ol'Xu2oM:ߐy$⼳&Z7n pPiJ!K_F8.F bW˕#q}RTTMxǂ  ȍ,4.ݎnkps<")iy.߭J51䶜=ϕ Qtҩ]/γ,V|QFxOcvHPsiN^p~Tk`Ehm? Z؏umElL ( %* iF *[/G&Hhj-><~2:---ǫ{.eKF(ЬfuXlT"TN, P(@YUkL_H58Gjrf + 'g\JRBkQ;)ΆX"m 6&\f13Iu׷I(/GEX^}/ If:C7 X@t5!)P~o.☔?iJ|NK&=qPyz0bi\$;N5@ܖrBd2Bx$=[j.hZib4՛o/ӥQdIѧ xd(Hxlf@14)\LnV=C( J1Nd!5-#ZF!L?7S2h +endstream endobj 5395 0 obj<> endobj 5396 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5397 0 obj<>stream +gkV/Jq]w=k`\-p"T֌ׇ.)Cf$}QC=Wϥ˙~@*MD쯇jE^]C [y9+mrP&ZQS*ӭ*&@" +(ζY7ԏ%nHlنkY($B6X'k)8E2pֈ97^mzv9 zZODky4 )RfuE,~c@UH&>&[Z)R 5z/.` |īQ |ز(XG]mov%I=q#UN0"ۃ.DD`d=A>佗~H%B#oqk4#T}ɇq?^"+ I" {Y84|aB>r _ Zb" mr NIu'>vWHmչե(ӰLAӑ}./Х9 Xqr+bm; ­<\B*2r%ot1!&!I==/) +endstream endobj 5398 0 obj<> endobj 5399 0 obj<> endobj 5400 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5401 0 obj<>stream +PNV +9܊ ]@1s}Qu$72ۅdn,WS>z-ˬXwN5.c[fg6,x55s9$%,@AnXV{ǐ ZNS:9cz>M\ATŐ2>wu;W FQۭFԠ{@\*b53 8۰`@°TL JWi#Y\kqQy$+1%{9KE* ֟GKp@aw'Dȴ7PG|PQ_ٳ߸\ +~"u-/ т_X*-eJ._ ȱ% )dUEik+7:-3 ;#g{ 4XU칳!s:GT9_K.V0d"h^1e@0͂8e\iBV iN.Z?5 /컁Ȉ# +endstream endobj 5402 0 obj<> endobj 5403 0 obj<> endobj 5404 0 obj<> endobj 5405 0 obj<> endobj 5406 0 obj<> endobj 5407 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5408 0 obj<>stream +`Vqbb#]ԺهnKRu?hۓ/ +qJuja+XY*hCNnzEI"wybI^'8AYlB<ًSɺT+E[2TK\TϓԽ\mIK)0mʎF"+plbk`~ S% +[r3Tώƴ.=u?#uK:f<V(y:gaF^H w1ctWEo)}?.6ȥBOTfz) BJ=(^-WܯQG[ !-Eٝ265hpB0Я3Ϝu>t?Q+g8'j> gSWS:@1y/ᡐrDk~<za? Ltu,ߧCd$NƯMLPzRSmBĚzh̚u S9u\Hw9@kpּa.2d`GqRh_c|qBG!8@8Iv͊}V [3\C-58 Dh,&psQkO>yoI?K/;l\y +BT +.dVWVX{kLm:4RC|ւ0ň򐸳ߕ6R7w9Qثm'( ->qSsr/D0P.^Y~E44?e iy&O$PD ~gE9k`c;7FC~6\|v 7 L {B +?j \2Akm_~% rtu>8_mH6N=CH2$tfC7KZlnRQC8%ھš YL[~WFúwIIA~EΕzVrLB"L,k̽@SU.S`e?g`s`*D*G13/Z~xӬڕ !$cu!{ީقxak*sg7ᬞh +endstream endobj 5409 0 obj<> endobj 5410 0 obj<> endobj 5411 0 obj<> endobj 5412 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5413 0 obj<>stream +/z+㼽Xc>Aמ)kv/AMfa6cwr.|h$ߛ)ҀS8IF7c#z Q FKתu;psƸf鷯F4#nX*/&Ʃ2J5Xf_|JL@`N:,[U#ud8t:md!:U5/`f3^Hj r^v~<о Uɯ@5TIv +TK<6{¬_S| u%Sgp>%a;h,Β&q&C3jaOIUѓ .+9Tmjݾ\KAU/[ xF 925Ƒdfܔu8䜳\$x{ى#ǯJ6;n.B$ cf?wKc\Sboܽ4Z`ѭSWe]N${ngd6G؝Y:fbA~nM(16b0l. ) Dy-A/f'ߎlQz^)9uGY= AU@H9iwrѨzbC5# ˖qꎑg0(`RH+:W2; ȈYuםFkmh+wi\sZ_TqG3;6qƪ0meщ]}$ԣ)q syd;M]_ȅCr=/(*N՝N>H`d`IRц^m|v/8r 7|{cwƎ!ӺߣY„xڠdw߽kAn"@  1c;o`xߟ Ί㲵1xKWvIdn(-^IEj~ fL*F*fE- <ߚۙ6M l}1gVe#r'ISR9nf@Wird1wq+S">`EC[¥OL˙z.$ u_[6a6Цz_5WTU 3\WlkI_2_` +endstream endobj 5414 0 obj<> endobj 5415 0 obj<> endobj 5416 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5417 0 obj<>stream +>hs1ARWJ2! r"sr>yXO`.sHFOKCl @YiM8}$ Sr= ?e}WN1"l0Ҩ"#vppڻy,AH +y6b%.C T +oV2Lhrzi#XeIg5~D8a7 _\98St˄ .qԉ,rgA_Z6)4)Ok>tZ  'yᢃ'0]),K7wD+ߨl@fN,le +ЊfP}ƣ)ٳw B_4;I[6UB1%5 Rw}ߘ^H9F$W2'y$DS:(J/p}a#֘,6A}-9S6#-#kAN +Mq3E`Rk^w 2N^R}C gӲkuo0T9y+J)nhN ~ò\JGx{-`F<^m~:;bn+=AzQ:0ɸõ +ecO_R[6),q?ȧVBǔ\CVNw"uyFI@RR$${g8J"_{FEĻ߶엔Df6 E֪!.(ךּ8_2ӷ1Lt"DN{ ڪAn=W5Bd_%9Ok1ALt]K_S +endstream endobj 5418 0 obj<> endobj 5419 0 obj<> endobj 5420 0 obj<> endobj 5421 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5422 0 obj<>stream +ʵU[%;=v#*057)F r1  H0+=7mS0h(caWi&qp?3[EP}K0b 4y$*BkgB|<4'he 󘌛ŷ0Fl֫OjzN#P +Y1**8( W(˝Û:VLIe㥬(a>Q38iN"ؠju;?>G,WLjb;BT}sł v$v1hKjR!'d}ٽY[R4Q 7訃PT2UOTƒKql +KFm|"bNƴIc O\ $s!Ά>Vhj ) <ߙcT.HgUF"9JK+o!gS>/ƜD\a@ZR>P⇼5*-/C=^‰Ko!Tan>j/m8]l>$7s7}4!s-'EINi]hܮ ${B=hEũJF|> E̬ >7z$ b)vF'r1s"K-?Ǻ\9{!H+$HV=/a_Vx߸&`갞Amc2kDLR>d0+N4ϑBn#GUI}gDD;0_^wեz;W0J ĘɓLmzlp6ngc|| lߑbN8F;*k% 2{Ia0rc˷:um[+(';RORs4:L">i 8?.;nIKDfGL`'7f:r/@b gXإ +endstream endobj 5423 0 obj<> endobj 5424 0 obj<> endobj 5425 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5426 0 obj<>stream +2mЦ鷦JYո籸Z){J8y0P])>@Wsa{{wmf\f~T.H`s֝eI.Di1>-ω܎TɌ"p40om1<lN[ m"?ݼC v)/^rٳ {,P{'̱p M1ZR:"1 w%("(RDuiAG`Shb$ӕDv+񝲾VyBjM[]J?fܶ<.cwB.Qca빸 +_8Zè}]d~Tv}%/ #KKhշ_q@O5\`)LyhzI ! Txb4K&Z 0wvVqSCp-_31$c +xYQ]a<.((QYV~&7'T9QhJ[2Bl9>}ۘ|#ּN1ot |{^ 33yb+dV YA@cF23i)I)Y}rZNL 8̓t*J5Gw#e EN +֚ WzCo4b}}#pu`ANz WE)=~#F 3?9OY3gy踁#d 'Wfw͙i9GQ2SC$+=sh6h'p,\{p/"Cڝ r2&Qm!|>{I4}RZW +endstream endobj 5427 0 obj<> endobj 5428 0 obj<> endobj 5429 0 obj<> endobj 5430 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5431 0 obj<>stream +vQJ_@?-rÑͶr+2?ܷ5N39j+,Sh,ӭ$^$4-p>&PL^` 'Qbw:‘nws +aTu5IJ.o'wku!lz%P2k C&d9EB*RS>\K)㻻7aI0b_'۟Ap[e^jp]|zͺ>y`0Kt (/a`2(m/vn!83>pN7~to9-E*V+pU}xplS,ef~ހAcgF6Q=q?#r2$l 3Z_>d3z1/qh"L@>ؗ^"3E#̺Oo~5f\ʩƲ1`A9O'\7Uo9e5 ltcVHREDqwRV'-xP>{Ǖr߸U-r !\l``DC߲8eM1y$)roQB.)媃b&r*V(vZsĹ%1NH*;''-)1 {"&YETIV;ǞuÍ?#? Jן;/NDI)] qw$w W093ֹBXқNFq״WUP_sp͟\ ]8*4cgT8ݣ;T'Pk8_XqҼPМ܍q!Y +endstream endobj 5432 0 obj<> endobj 5433 0 obj<> endobj 5434 0 obj<> endobj 5435 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5436 0 obj<>stream +]-4bʥwL&ȯ뻉gc]\By?Vf^Bq0<ّXП6.Ӂ̓p^YTm9t64ϫRleHH50_5dCHJ99'Av/Y%ӞWb&ڢ#1Kk頍R9r_r8Xemk^b'Q!$ gg(9g?RP'c/Lq1ǯ^6~= ն3)]*=^0ӡH6N{ c;*Qw>:P/n^%)4U}G3mYCj7i%[NI²x׬łk7usxnj8dEh')R(9*T#h P5l`* + bZ Q+TU3hMƨ&<y0]ErHWejMKaM +7:Y?}0ZD'*f_Ed"w3ngE̦ɑ^:gςC`/GݴM5ߌ=2T&%cfC'/Q{BjKV&HD̓#!v0-d8W;QXfzr'eg 25Bl:nf4~,g妟> endobj 5438 0 obj<> endobj 5439 0 obj<> endobj 5440 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5441 0 obj<>stream +.WUlv9x닪0 JsIrZRp*$ISEX9Pobj'dQ:M~ P+ e: o5tNt]jTVJm>ŸyT5%t(T jDŽ٭R*Nes?cn ND5B@>alwQO0 +jFC!gz(:*<COl?y!.Jȡ!G߽Lwff'Sʷ==MQebūcω5<P0r =[ӿ+l`ĩ!`de?a&IDݪEKWC +͵Mb4\T{fڟo&/`Vc527ՑҳA/yw@Zj4EQm `ř)q< 1=TobDQ )T5Yt ,/Jq`ˤwp=27V,~J[s3G1N'h;.>_m/($nhk2~?ǐXF7;?2XI'ua@=&|&/.?wH:PA8.Lhǒ]02B1C.c@RF YR"U_6l[/CX~rt׳3l,? +endstream endobj 5442 0 obj<> endobj 5443 0 obj<> endobj 5444 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5445 0 obj<>stream +Q eEmo9̟G% ;ҍ:D3vGy3,x5pwd x>I^voR3/tT/z vtǕ:3tV%OY4EYuQxKNcSA#cN;A:dxej,散ydʛ-L/~[y"d,IĂR Nh@Ua[ dN2{; {\#eH3/“ȁb۝D8b6qȯ7wU$kr 6j@Pk6-8S8zKs'O_'Wɚz5Ǹ7ЊT;3%ܼvPTFȬȷm+2⭚L gOqܼPIk!LRB"j|آ;:dnK)s^9/Kߏ59F)C~ri}}> endobj 5447 0 obj<> endobj 5448 0 obj<> endobj 5449 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5450 0 obj<>stream +C#e!1E6[gx>"^èW<'"v,_WL{tYi`I<,~1v ʒ;_#Hɦe(>faTx4V _1OdsXрCr:E9,0Bqn~䫵_r̜m` W IN\oK[xi%̴(N15X4D8 "pAvz0{\A7 ,XQ[UӉ\ǒ$䵙ՓHck+rig#cF,IX_p$M%B Io3LSiSxA< +Ey#ai1a7mʄt0CmQ LbòHn~sp:!Ay&sgN2um[ W*jC0FMžkѥT%fS=R6m[% +1g3Fk#hţ=oF4LXdջrWd "ď 62״ؗBIz3˝mV!+z +535ŒlY/t?.jڼK;a`{AO¶hir+UDHE u}9 POtXgVl%5$fkzsP:w yIWbsKiܬM KKV.%T@ +"h4wsl$~ g`Ig~6ǍG(] +endstream endobj 5451 0 obj<> endobj 5452 0 obj<> endobj 5453 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5454 0 obj<>stream +(vzT Q ϹIFzXjxQFAXȯoc<+gU&i`vnWU Ӆ/ߥ3|LAy3|c;)9&pD6"Q@qJő}jI&1 *(]0;.fkJQ6iNΚd*;Q>~ =#Jb[-2ßJ7EX_qFݚ=}v;_Eٌ̡ߏ =oys>,'a1L YI=[b ZJ?U 8`쏕)wZ9f`%;zZ}DspHG=5oՔ"ai +x?akTPV^QzW\nGi `@F$ +ƂatB墀sJkJ]<Rx)=r{,przdd-S'v8Wup}i]LH< ъRtO͙BdZR4JrvHoDo% 7􌁾 +endstream endobj 5455 0 obj<> endobj 5456 0 obj<> endobj 5457 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5458 0 obj<>stream +lgа UDC&AteD(JfcB#lBV)id0mYi`z79[8r4WHzȼ $cx[u0 ~ޮ|1Μb@;"9Mb&:F/t(=0DǺl h4U]|`OĂP鐲AS&Ub= `šESNssژG%,glk6pԞ牀6_FBL·D/bQE3+2ߟ~\A?.ÂmπmS[M-˓Yz{,H̳<\m Ӕ#~y_!i괰I.}pZ.GgB4\7 O{(]md^)STd}ahU!#0yw!ҮKl _uĭ5ES F/bǏ 3k  +aV80Y:Tp[b+"@@@PHBeѹÓW<&6l ˆhW/!?cBٳ~E.񙙝k.fJs0ȁ{^[n#_%U쭙tp"? sxtA[0R6$Q7 ͈jaF`Ե302LQiuoi؅Gg.*mlxvg4NDݸʴ]zv +: c'1P>! *Xo7t wG74+{> endobj 5460 0 obj<> endobj 5461 0 obj<> endobj 5462 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5463 0 obj<>stream +ptbȩq"[FPfNyWbrU` S`~: xyX=)NCD!^UHy@]Z(y߂㣬)u@%D*ѷuv ڪZ-TD1N1n.pt}/Y!gN*Y}P1o1}ЃL0NM$ةj8 UХGq 5\6 Մ6: 82pD9yR<^_|F,6X]L{_uF'P,`gRm tHf4?uPYLBۺ+=*h Cu\יUV߿ˉš ؐ܌vϮiݖOu~._:,ҝz?V h8:LM@yL.x&su+¬e/[ +Zjߖ7 oӘ )KQ"8whpZIDoL./ejxRתwO. !ӍIOXxݚ&Lm>42 UIRwd#VmmUH?[A%M>mX2 )k^_ҫI5NSQxVYE'q2GS<tMZ}c55y!)`ݖH)HCN zoa%S.D@*θ%of8Bd@jh,͡|FZ*cC+O$7f\l?J'闲ݿ%w3AdnlyHҔQ<E%s@΁њ[H%3R~\8d1{,7\P/nS>TH#:b<}"IcN&H,ށ8;2sJ *> endobj 5465 0 obj<> endobj 5466 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5467 0 obj<>stream +MCez ^rfTty_Я xql9C4\C,-YL"q9@z^npfм)9Lj9/2ƦQ吤!d(k~ ++Lf">^K]+*mGk۬1"Ubm?s!eOsz.q6&>Ph{:U"nAݭ5?In#FdV)~bª+-~IPlmSPlIN hiv9d*VkBP|lG[4GDnNC*хx2Z"^щuF:wNjƯ}+J=#C +FLE% !U٭Ż)S:9 ~p2ɿT& XDҋsmZs[K4H1" 1xWQs9@.h.F{itˤ|h)Р Eƍ09)t(V\ +endstream endobj 5468 0 obj<> endobj 5469 0 obj<> endobj 5470 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5471 0 obj<>stream +HX*ZTmn0m;n _R?J§7l"~ c Ǐ➹;Q:Pf҉([&;DN0;4hu'ߵ}a-D+z8&@ PpѮԜGܰdmꬭ [.x>s8k@4߬> #Ͻu q@JdȜ\h$ՙ!3mv=wQЅQy'-B#LES]y2T~App3~N*ܩ0i3㻳q7/H TT)d|1HHWě9o/ܴװc /8r^!:nnkKhǘtiJ$2eE@#ֻ0M&dC~UTG{~'pRՔmq_S1 Isyaeь@]x/J~}gycVDxYM4=*SJ2H‘q LS} G +endstream endobj 5472 0 obj<> endobj 5473 0 obj<> endobj 5474 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5475 0 obj<>stream +9v8 ezTou,2v`Gwc6ĠMˉ$:BvoNT*cpǎuՅ'B壖gmnysDP$RnTXmL`gXf>ҘsӦ Y@ٛG;dh?wp˫6Fy4tdv6tSn=b¬ij?=7mRe9nȇ?[lk~wKnǺQ76в+_N8ak7. cd( +14aS=a3!H}FùyPU،ٚ]MB`(]C~xZV5!68[6[[z|nf̛JLǓƏ;]3΁4ۢ,G\-l =D*c?*Q2!pKEC+W]Տ" ),S06hI/ U|@L[ B4zpygqUg-A@!>5[~DrBt<.&ndU+ J+4Lk@dh:b4s11yPW#KT+Ѡ <{Lt;Rc)uC誟ۣl(4GR臭xoX!0V|ť 8 3Gf +q HK똔g~E,qvlqR*+&bQ1PZ2M_PXF eF8:0~vg]/cH‘ӸfP67V[(;Aѝ 7`-OfVibyxЦY_p:s,H+k~ób}@Jl71~>/La]udUleAo5GP`*@km8K)7!]J]*gqLap>o )k#4 +endstream endobj 5476 0 obj<> endobj 5477 0 obj<> endobj 5478 0 obj<> endobj 5479 0 obj<> endobj 5480 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5481 0 obj<>stream +LzCÓoՒ2~`>=P #zvR+Ȧpvs]2F)-ir{BN=l}&+!XJ[wR7yK;&~zOڄv b¶_$ i؇n[*Ħc95X.X)\nn7>;`"2p^\HV8|oX0E{),c +8qn/EL֬\A%-nOZeQ(k@%4Tɡ O,z}G |OM63el# We홛n岡%tdkwԞ`sdVn:-`Om1.?V%_keZCd|z%E݈.5:P<^WQi?& J^~Db@+m@g:`38~0se]fY'@_AOGǔyv&IiiP~x 5-ɶpL,c,ٕP+Ҷ 9п[y B*#x Kmz! }+Sw.WCh)z?H=1Azm4br\l$t1/KzC񴃧7 2ʢ, }N䦒 0_9g)j58b>Z+aKBKx@8);)c[>0H$ރ%iٖ)6E.U"v]I&`B'8,|Eǯl!C}58?궦rHp=l1Q :k NZohmJ~h9']ݞ;RAdGáS&H[p"T%|ܦ!E=gR#x<@Z;izw`D'M t32ueCPK%i9xRRN;u3cMsBW#JE= /&xJbFvU<НvyAc4P9ҊLC]˟QD{8!z' jxA-w_IL9ŭ8GЏڲى,%NJ1X*z +Xn*;o$(ޗnR#(g3.4u +endstream endobj 5482 0 obj<> endobj 5483 0 obj<> endobj 5484 0 obj<> endobj 5485 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5486 0 obj<>stream +f7GvS ܥf1n8w1r{bv4#iTNhx ֟4t}\%?pf}MxtTb6-k>}k+ + +2w4iruhqɢ<"BH쎹H1+ xFBe0vzT, ljяJYa^Vنv@rk ij*hJYv3o';?sQ[{G疎 +߈76oURJ"J\E1aj“*[VNw&2f;<a"ڰ:s?Ka&h1:u>1ZCbkȱ3|%8BWVC͆uՋ9`F/|P ;&n>?JV 6/<{^4h9-)džm\#[I٪ s%xMKY ;)jS6"0٫+S)@o/;.OQ\f0x=0K+o OÏm4a[^I}4=_807ⳡ.i 3˽5e:)ߍći9j͡UT-nߝ~޽}/<ab쎌> endobj 5488 0 obj<> endobj 5489 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5490 0 obj<>stream +fSjb[x3ѡ_pDZh(%*?΍:{EtyJk+;-Va6L#T'kplwhƊfB :!\fi ˋ7mژ,= )ԹXxSs/#HpIv=s{U{jgmi& % DIv˞c(fFuwmt*ϑw"J3*wB?_Z]:2&YOfpG TszzVT1ָ&_8QSuBYH1 zkx4d8A8 (> `UK +alCܠ[ Cw%U46B0Y`zm0T9rڣS>6ˁ/NOr0?OGxG +q5)"ܻgSTz{vvz@.i$4G8Vh%R^9Ee;# +4=fA eNi,BcSt6Mx2vOT܍Lݑ4GAphkZ!611"8T +IԜDNlE z2fOʨ"ޱ}5)6)ZPkI6"]?IThe|+1k?%|Ki5,K6eɡ'zHaNbImͣ"l=Fܿԉ$|CQ SJG[Rz7ܜFW60󯇮C~Þ,b= +endstream endobj 5491 0 obj<> endobj 5492 0 obj<> endobj 5493 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5494 0 obj<>stream +F@(g9EݚZ'!Ö7)Wd$X/>{v_gQl7宣=i@:so#Gѝ Z~M],jEp;i],$8$zfثGp&P1|J$S?eV`SVX?]س܂U;cL|5~*H!z71')˴Do઀PJ969daLb2 w8%k5Ydߒ&4.`G5N+fHE[RpSgT]Ŭ,J ϭO1} B]qE캍vB`"yWs=G($^1`xգ)M3g%eHOPVy.2ԜL({ I),uH;j8kd|\Pu2M|[&HS5El|wo c x)|ΆpgV>m1qcݚlpvE? ?S4_4E8 5ՐnZ!,Dxx܃i%sHܿT]W9>5 F{^SCi llyd czG[YCxZ=c`RtbkzfJPko]=}NJ"4 fkCC%14͎WH SCw/OލeՙIΞ5lȂk59$ ƒC`x>K |23{^r.{>VB=l"b>3q^ohK {ú=uxivLHetI tfn$f@y8 _a jrtGyxwrIl8Jm@ŠfKڳ ֊JQ 軅+[7ޯ & +w1xӰu6 C {P4X`~7-EhSk xm.H|1OH%?F"u2D +.3DLsJ@+gL@ClÿtRw<; +endstream endobj 5495 0 obj<> endobj 5496 0 obj<> endobj 5497 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5498 0 obj<>stream +ҽMMk+_ c'6yWB|Ng)H_Y->|t2s(,!wImIzV^5Vi0 JM"gLvU] /WʫI|_a@KrW.L 񴕑莇FAj|' Vz `QCx +57#BsWgU.Ry3d$* zAM@0/<@梒ɡ:qʄE닄T +:jD4}zp6\JVsHwmU nlGG$.AaHZ.;*aGak!Jlf.F|Vpm-Kl]4]sFw**~dJ5xфC[eة}#? #y>F2V@qVrXR.}们ZOw",ϩc6>6eY½A,u?b^w![RtV@(3K2FmBҶUݕr(GoٝBΈ׋1?$ɟz3,+>Wr̞2/_ +<]Of3i)`!iDwc;޴\.x* +,g?nHUuS70\ +endstream endobj 5499 0 obj<> endobj 5500 0 obj<> endobj 5501 0 obj<> endobj 5502 0 obj<> endobj 5503 0 obj<> endobj 5504 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5505 0 obj<>stream +QSju8# +0HR'q'?Ҩ0Cqߍʴ(F2ъ{^%l=) tw8=`{Y-L/&m]Oǚ!? &^p|e& 됊\_l6UsݱoXHG8R/&SUݣ76.S6)uN0ϲM$],,|J:A`OFaaN~> ([T?hiω! +gT84W+4߃ d ͂.K,x9xצ;d,lÀFw^@ѐi>D/~ +1_o)~N4q8tkxJ , ËZ(IAOğU? 6OKj5O3%\xcvсᛚ#`co|F-JV%BXoС=~uR>DE,Wwq +WIPv` >ƆWp^FwIpNʙ]D|D j"L/3퇚?T CA >6o`mA[縬L,s#\Of՜er5)+ \k! +o86˗fa;4Xݴ毤3dqu}{Q t^$jBلun9ZbEbAc__轺Rum };10ʞ\ EB)q* ΞB!摤m"nPɄ[fLvVk!csHZvBs7)Ne.5௞p Y!讖B ړ~u?Fyn݁;I9ZztT}*T1h;'0ab!@}Y\:*k/VG?a'[Hi k!o՚- @Զ#͉y +@>rL;_,"[)`F rRkD;֋"TU$Bi +>v%0mFh"$F=I!@g{e^@ E +endstream endobj 5506 0 obj<> endobj 5507 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5508 0 obj<>stream +Ȋ9;G^ܙavg +ŴJDLޔlrbY逬ڨ͙)P*?;kD;k|V +iĤ' KX ŒG)&}uHI0,g xej+(VNFٻ, 1 nbu2N7:RȇOM<_V1h@%Q%ڜ@AMȇ 8e*c#y1 eZǷ4Qf'p@E4f1nd,/x |Њh]fm-s=?(t0éhemT.)%ȺcZ9/x+u5IS޷Ce oX٨'6kCR4͍NX7s'G2MR^7*pN"B;TRMѷ}ds|MlQ`2lЋ{:{c۞8Q!;>vAx,}51q + :~.O&I}\]K!v8;2.((lJʷ6[r $cC`^yfr$ϲ:ϧ/W!PjwS A]. ~qO-&94|]boT- (DJTqߋݔjY2pX)b%gi2o&AmAȽ ^Lr`G <1J'MeT.k.bz]TzPmoI{Gɥugo@|cV $KGqY1X WݡW+0|ïP7K\X%!(o"/5S4 8_޿^ El~+)R'5y~U!7.<8*-p 21`u^0 +n^!ƑT] +0P sMLA<ὲ D)"\!X#q}vP7qywkk҈fQbuu^C +endstream endobj 5509 0 obj<> endobj 5510 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5511 0 obj<>stream +4*!W@7N#0v$r'mX#, ei*C!*Ù Ô jzfz e},4,<<7L'TQ4Qi!JsaIwvl#qN/ s<$zOf-ϸ VAm48-vzXh敶~#_79td{P!2\K@HmOq)Y\UԸXA1CѰ7^Σ9I+ r3`,+' s 1/veT$lZցl͵XrFwqqXb'ˤ50pzU<9W5=; |:ݟp=M +~-4"{𙴽+P60 @n]1<֠դ!y5w+]b*!.*9iK"yQ QԴtJNf+ ,%Z?h+q@z- YY?7Hֿ?bf">M4,H¿>Za"f,(j"4&b0~c(掠ShD:`Ԋ%\+1i6 +fh/H6Ҧ6.26]KM#5 ӵ D)\Uu6p6[礗o :N7= +ZJ @1YvMbFjgD"ٛBFލRF ,D)!Ιy7$y4|B +endstream endobj 5512 0 obj<> endobj 5513 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5514 0 obj<>stream +Y0\W\wF%'%T0|H+ AkUԛe* vT߽-[Ed&`=e>j qZBsJd#}|LSyI+ŸȂdb@+zy,`KI5n; "b{XTtCDhfs 5hJ#6132/ZZjS0'5ÁFF'xYÅkM8X'`#W?kyO@`Ԙ$߽V}@ '[ʰ(CMײ S%TB oji㾭>xxuzk``J`:*ciYr~I's{ ,ӺF`JgXo# E")s8&U]M*$MzCE*[nWRW~ {}\󼨱bv6Oc]rTUEM7\:OfUٝƒhxU3f.q +s4=BUN`!d(0'kfxvF & i)7n^KqF%H(w;_sC!xt6 I#Mr2|6_$rd3TR皍(MjpA O]ݼE[/V@em腒4u/2_(6YiA]m 8 +:;W!/SԳWJȖh=_eݩc԰6m(}NpE0 e j+\GVFH7ΥW!l|˄W)͔j2yGI(xR~&H +endstream endobj 5515 0 obj<> endobj 5516 0 obj<> endobj 5517 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5518 0 obj<>stream +c~Jz />^%ax8>[i8\;$|tFjX(ak<&:\QC3D 9Ġ!>DYPM=*M3[*"n)mtUʣB(,ēqI9[7z DJ>"_NNc +`PqH֋^e*$F?:޼oidTi;A*XUpF yX$)@7 ]aPS1\XstWSl[]Vþ mV ѻ'b{S|RD^Qňzt Y_I+ coSyCT8ۙcXR;AmDyVC+iv$mVxOL5-n;g?UyzP0m!U7ll`gHgɘ?S<Ǝ +endstream endobj 5519 0 obj<> endobj 5520 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5521 0 obj<>stream +5. 9L v?I+t`p>\_؍>jo?FBG1ȟٱTj4?Z6t裁2SDדA:vZ\q*|q4F bP0AoN20Xf. aQ/1N>8aT"Co ͦ1dEUZzaӝ4wJ@۹)[W<x1sFHeQ:/j bse'ЏYC)\d!v[9[bu|a4,;Um^KuAP,^3!h3И;qM#8]Y-A^K\,N+p欥O|ߔ| +9ph|xXF@`F+ yG/mR? .78bG4&y"$Ztp*@HP_쐅Q~v1L,&~Lc@!-cEAc Fq +ἰAjLu0[ Z~:`W ,^^dE݆Si,o$"4 []N@t$+c9в +endstream endobj 5522 0 obj<> endobj 5523 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5524 0 obj<>stream +ƱWcZ-Z~5>A;swH gDQ(Sj&08Ezj N"IH +0_~,L05e#@r[R\] -._պ;{5#qYas@C:2`׉~X,I3ڳ36﷯Gp5]V9|@qpB#BFL`f*z6$}5kYWo*DNa*y_+-%ٴxGaR-MY +0+Kmfd<75-1 AՇ'd=?ŖƯa>x ÙŒOJ'^Ŵ_V$Ii+[T1%BW{#0mD#ʍHKz,au?ܐ{C^#3kA6w"UV@+.cm@X+KR Ml%n{$NpQ1"ʚ;eȊ ;bΙKJWhZ$1O<Gp*/f( 2`P z8s"0}K#ݙdgl"Z:ZsRf%^omrqxur9 /5pmKV%;nڷNd @X5J( 8]I([E dTԘEm^|H&xbqP_AX{{(n iotK ,Fo'Q7 {PfR18h(.y%,욀Pula*8)wtw+^ y:ļ>e4pvb"m%0*!Or0sr=大~ U8BW|7 +endstream endobj 5525 0 obj<> endobj 5526 0 obj<> endobj 5527 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5528 0 obj<>stream +V.Sg1A4+#O)z²%]ω"ǤZ]^u4H|j ۣ-Χ%Oh߿Ȓ~u&\0+`0]#8ڑ5 &>m\;E$}jQB+-zn+1#)#(euH+aL+&Ԧ/8iq9fLΏzcLFo肛UK$} +5{s:劬qT4> ' tZ +\7ԭER;ǰ] ýh4怈<L8l3V%[ -kT 斖 I|4@p CS{CfMzCT> endobj 5530 0 obj<> endobj 5531 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5532 0 obj<>stream +0P*˕9Db^ZM?C{yڶ >p]i*o/Y96WK]Gbj3;͕p_Tud(E{CsE$9@!{koc(z8;rWZ4G3g7ƛ}pZff4 F[xR,xYxz^1l.q0/=(;J$fFKnȖ#s˸Y?(3jr_:8 s;v%">ަ,@NgWphhuQV8#xV_~phN} +*¸xmWO^k!2.|nZwn$ih5'Mx.kvv|uz?ea +%Axڥ'K#IEyw)qg(k<%Lhܴ1"ϟrFD8N9OifOfzn ;ɿ[^!n?`S pDT5KfЀHyԖɤYEYYJ> endobj 5534 0 obj<> endobj 5535 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5536 0 obj<>stream +RY".:^ߋ&&$JI@?*0 .옵Fbga3hoA #YrQy& DS6@Fͣ]KNc0yH&ՈYx&% ELćfYBԒREL[J3MR0$ +nϛ%U4yT`lDI,HuB;q1Y1EJn ` 82T~;]=/cehdZWeƿ4&YD%<77cII|#}BT+0.YZeg/j ۰EK))04QkI!\V̍$f嶎CpZp_Ƌm">qrZHctMp,;OJbvz]>KyoS,ٟcsQbu_s% 6"znh+ٛiEwVv+"߆wŴPpI%3}_$y>4o[]yi]%ȭ7Y7BkYNOS hstIEf6v2.%]zQdxnijZ/6#bQ> endobj 5538 0 obj<> endobj 5539 0 obj<> endobj 5540 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5541 0 obj<>stream +ʧWN[MוlkܺAJ$8wsXSU$nDE6]+VÈ:"WǝMl3[[* +US=UwiK$Jp<+ܸvoGec=ؿMK +rpulqP _-U-TƷr4O;bt[Ivm6{+Hy O=#(%G?àvA] @DŽǑ cg.j 1xU,V;~ރ1AILI]EYX9ʅk\-9u| ]c;̏2n!`Vg^N3JԖtru[%| I5}Xg*RGS{$9PYz']C^1khpOrFF]G@%{z@B״6'FǮ9w)^6uLC('t]^ OyN gKzz|Jeⶄævw0jʊi+D.$_  XmSւ|Egp!nD?|`lȵ*HKXrn$f(u9فoL*ǎdSP4ȼmz+Y VSc6cb׷s?9Kw'7G,k~OBC (ɓu¸υ_7ElPFoxӤ͠kST ݒ%+7!7xY.MZx7!5pTMeH"#%w! ~=[WԺ;ro!fkd]gل<e|ьg$ulL-Ճq ;*2?}r ;YQ&xZ[хfַF$> endobj 5543 0 obj<> endobj 5544 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5545 0 obj<>stream +4"#`BdZR7e.f&aG¼G,fq~T b.-\hڴMYrTD"~QB֗" 9Q(y\fw®;ʜ˞`M"O$Ѫ9 8/t5 +Ћk,q"{xU᠘x. 4 j/^h XSC|ɸmDz j͍oMh~zEASIs4=Nnh#&882u41: |%eZ𪢰P TA=Xs" >^? +{a>^t3ZCiS(߼>gCC%t2pAv!"G;DUw`4VP% à+d,U}S#Ɖd/8A?yE6mDDʀHj{aSUB8nfLe,,c<.">%vxBY " vNϛ$X X\GB$mϖ"ǔ$b]'T;bŎq&R~-&nߦ4N9 +HT\ v]TU R*mj0pmNTaRJ5)"BBnr;?29J?CiRΦ J7ؽ*åW'Y<lN˲-Y2)>#Iz]uZ}/= +endstream endobj 5546 0 obj<> endobj 5547 0 obj<> endobj 5548 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5549 0 obj<>stream +Y{$;MO7/=,T5:]q"b +t /ФJ; ^'nu?ĿS ljw ^ATLeus?XD5nn)[ +\B冖_͆r]3ŃakXiIat7  qv‰569[G.m;S1+jEԊӓTk eA{hRi\J&q-YwmtrCPl`. j +ǟ|l_l 9moQgFFϯo(~¼u[A ʅ,[ꛧF(N*y>zݰ ~+.}Xitu"-$ O-;/ +գdf8_fj]`ސ!Q|OrMUB63PFx#)p]?<чc5åPL@ČEYPp- +Y࿆u#3lz^e:e%H#+| ->CSu TE>M%4fD+b}sDD$7J0`>lajy6$ZOr۠V֟4p~Q^aLSb£"͡N?#|Q #i&``) Kgb-#Im*bE/wR*- [cqlw%y)E4ʩ6Φ7GK#da[y㌃L@r3z +endstream endobj 5550 0 obj<> endobj 5551 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5552 0 obj<>stream +wD xrf)X|*k +ĂpX 10wS6Dp<[$^X1.Y$g`s[GDVm2%Ej!vɌ@7jyOxy&Brp4<kdlp(~Wmb1;J{lqE0rMaoc[iBQ"9PIP7DǴ&hFE ?B +#mPN+.}Nq \)B/cMʝ8疐%{L~ @JIXLaK# ,{4$N: -PߴM ! +EN + +endstream endobj 5553 0 obj<> endobj 5554 0 obj<> endobj 5555 0 obj<> endobj 5556 0 obj<> endobj 5557 0 obj<> endobj 5558 0 obj<> endobj 5559 0 obj<> endobj 5560 0 obj<> endobj 5561 0 obj<> endobj 5562 0 obj<> endobj 5563 0 obj<> endobj 5564 0 obj<> endobj 5565 0 obj<> endobj 5566 0 obj<> endobj 5567 0 obj<> endobj 5568 0 obj<> endobj 5569 0 obj<> endobj 5570 0 obj<> endobj 5571 0 obj<> endobj 5572 0 obj<> endobj 5573 0 obj<> endobj 5574 0 obj<> endobj 5575 0 obj<> endobj 5576 0 obj<> endobj 5577 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5578 0 obj<>stream +ҡtSC,vL s j@{QD"!o~]2LG |B"Xn[:q`a,l+9A (lf#$jf|jŘ%&l1 \-L2gE +k|> O1Sc?򜢙ԗ!v8 +\p9FPA +Wv +.iݵv骄 *Y4FUf&N!eBx%9ð]~Q|~R-.9rVezP,%[N[jGzu|+;?}&lv3C֫+?JzĆN(uwk^3e? o)g{j쌼+&E$4=)mSQZ3y\iANcRlOP$^r3-$y[az|_'PDRT"Kvi7#c0x_ƞlSγ-Iլ-ECt+Ӄ{*cGs%[$oXű/;25)=}(#+}~rYhWPhSDjp r>|MPJD:<֪xyog)wy͌y]IパaW%lTق]X1`ACW^^2@w]8X߁՘IY D,!_gm,#ŒO{.]siejRWuMVx-jQb;~̷=aX ldȯL6EgaeuhdH!}67b߁ٗ$'栛MюEzRB.F{ wkP*<72ţ åd +"sw#ki^ G6j{8Zưb=9Jm\ m(Թ(%g e?a'8D:- fKfT% D\}܇޽')oM$mEJ3}/8㹗BeqVѡ%w_D1@|qe+7ql< sOj9m);= 9SW  4᫠˚.\Xn, +># >aC~U).Llwlᦣt#լ+-lu'bw&`pWDk٠28N7 ģ(#k {s RlC$$!c a],-Fc,sɋIG40kgTwb !33{gYY+`x1xcK*0$xG, yROgد]1p~&T*Hj?e>[&ݳsoI9ۢS,uK@z-G[?K3QW0ɑ_2(MQg @*Vȥ2jGY %۾?GUa>?yōUgSXQ.o +endstream endobj 5579 0 obj<> endobj 5580 0 obj<> endobj 5581 0 obj<> endobj 5582 0 obj<> endobj 5583 0 obj<> endobj 5584 0 obj<> endobj 5585 0 obj<> endobj 5586 0 obj<> endobj 5587 0 obj<> endobj 5588 0 obj<> endobj 5589 0 obj<> endobj 5590 0 obj<> endobj 5591 0 obj<> endobj 5592 0 obj<> endobj 5593 0 obj<> endobj 5594 0 obj<> endobj 5595 0 obj<> endobj 5596 0 obj<> endobj 5597 0 obj<> endobj 5598 0 obj<> endobj 5599 0 obj<> endobj 5600 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5601 0 obj<>stream +A V/L?7hc%z & S<{bӂ"=rDeYYY9~M3LXζWvA20bZk/ /=&{LBϋ V$_[0Q\E+di&(lyqi=3i +Cqi|[M3#"#=HQ.n!.xoCP^x60QEK2~ŔBKyЊ< Vُ%>#, AOx5%)­dAL03 +U/l6yo E1W}ynISA)WPdv~6erm& lH3cdlV +Y&ɘ3 Լ-5z  GEZ)AJ5(g{JB{3lNPMT`W[Vs?Hrՙ7ѩrCfKNZ%_΍64ozNSE%}VIp(~;RT?{#3>-,GlT?sF96 +Q#n7 +~vh =7&Ʀ7 y8;&ו.~3?e#-&"?-ǃY]鵤H3<!iZބTC +RBj9k- ʾ LGr.] "?,P@3nP2UFX+0D84?4h[<ԯ+~ߥHس+uq޴O'J$~.Lq6A/b̍Nmr.m!էԕފ= $Fv-| 9?H?Xuc-cn8L[08d2 +5 @tX y*JG8]#R-ټ-b%çi JŚsFmd9<^VyjЦ/ViHC Famm<_B5"#,-܋rruaC-ȣh OqbX +GCnr޻4UmgwUmoj+ BJyͮZH?|Y~+qҊ}H|J Eq؇Zߪi+vlL_,Ƈ.6"Kt_]ffaSEb@2F>ى{z9T gT2Ts_fb$0|[eneS`UY} 7+sӘD58|Rp/(Ѫ軞$Aΰ2+kC'9E&ҋZ@rL+lݝ_ܟ.R v?DVZ,(#ko]+ZS3b#7#c+2EOXe ]~z+V廻ٮc ^Hl&f4>:4<6Կve EPXRᏇ*; YD$чR= +qζ]fR`ɥ[

z܀1Q{zS~&!p__XR-kG_q^X[=&FWr~im*hZjif '>aomohtw$Sg9*#3021ٌIpT]h[+C8x5饡)g?B k' +endstream endobj 5602 0 obj<> endobj 5603 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5604 0 obj<>stream +hP e ]7'Z /&l?'Sq2.?TsdJoN*f3;4 =D  "eCOa8o3 +n 2PEMa)Dw֗T=5GwN=kW|~#ⷯ❞z9VWA,|phGQP$\(Cnh=KҫC +I +HP!Ah6}CZ~5=f]v4Ew}zP!Tuc_u_. +61.6Ak1f\Zt>&GeAJP%" +'R2Rl8V?lYD0x2d+R"߃-s0G b >y 6+#, 'a;A/KJ $f;c x%LԄY.[\ŷZ F?r W(_*8eְNS&u||){DN/?FC\-~6rq VȶD9`i\\P֓)> endobj 5606 0 obj<> endobj 5607 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5608 0 obj<>stream +PIwq O/ś+U$6RWu 7P'W}lU3nklԈ{ODol _^6On*Sݺ$ګls耲 +y 1鿈Klf/VuPQvEu2y: X $Ai {-7[>+ k ӎ4Ge.Jفhn8`!2FxÄU_S ς0CpUg@x5w_Qӫ \?dGOYgJCi҄& ٥|{8<}mQ08HCQJx;s6 E#کٛ>W1Y향D~|^R+sa( >W?ne'v:RKQ4 FjHھTo69UY%KT`aw,x,,wlC6B`*TkrYѨ*~)! + ?ph''Gl||r\7ǩTWx]7X- t1=Q?}F $Xm ++&Ԏwkq3 o JH1ܶ40@Hg +Nwy݇`Ǒ]NNAGb-:!}h҉3TNHM-roۯTaƶůLBwF?ul\H:Y,@H$kQ0 20+*5H`]L%72k}G-ٍ}/#IV>TVGCpyR?N5d1&X*O1N33*jHɬb !i}K&0Z̪lDAͪo9z)0ZL.6vEk +P60e@aSp 4OP׾"{<4dfukxGOtuIGmYtaM Tu.# +endstream endobj 5609 0 obj<> endobj 5610 0 obj<> endobj 5611 0 obj<> endobj 5612 0 obj<> endobj 5613 0 obj<> endobj 5614 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5615 0 obj<>stream +%=׃8d1¤v(P)l>z+iHJu1Fj= ٕpfEoJ(֔&=3e^ϜR{濣f>#[7"E.qs^1_Q~JoJw'; +$BO)D~|*`&" +c`BVf-ߝh.O'yXYe代]TaX]* "d" LA{!d@WɋVKM82bVdnأ 2d CZ DmjoG.Z+ P\@A?Z[1:E}?jP/CZ@w<{ЭT%M6ػsm5 )H+|hb2R't2 ڮ¶FdxcUy@KF{ qr(haâM4O=6=nE4v[?D<Ƿ&V;3h?~Y^8q9SVR"CБNQ[ iqlX{g`ae^)[{W yZ=Lu#Y .%>&C*-؉9i(ѶZsm|UœBND.+^zfGl*uTHH!hiW&K +tưdNq%t:;8 -;%H#H_wosB]!ØO9=]J|MjV o3zeiJh(3 QOW[؈%׶rS)iE#Ǚ"|5 +%),8*%+,4%aGbY9 M; +r *%*wO9k"떶<{dk6=4Tsc{!”lF:B +jNۚj;zsliCND,撜нT!>w TIL@x; +&(u /'/t8q<7A*S>;=|XtsHӹA22PeT8iuh?8dT2Jy +endstream endobj 5616 0 obj<> endobj 5617 0 obj<> endobj 5618 0 obj<> endobj 5619 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5620 0 obj<>stream + n 5U6)RBno7ؑ1cGnMp$hh>42fs/ S۞̆Ɍ"8 飛|Rs>+ c7*8^Z{5R%Lw_I4!x?d8/0:|G7Tљ(̐H( Za FazT{+S n7D:rkC<&Nox[\]KX3&4u!֯[ fc{drI4c_fR2wD=)rAcs-N SWmQn%ߚMam0p)㜭^i +kɸksi3/nvjK:4("CQ$>j*\TXF/Q"qC)Mnm};" +ɝPh,XR .>[ W .t5%|FA'2 %=䱸MQ0s fx)a@ D;N ;(5JlGs2)HMzj!džlKig",0iɾ> endobj 5622 0 obj<> endobj 5623 0 obj<> endobj 5624 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5625 0 obj<>stream +;m.8q"p +tKuXD`339WofR1l" 0UdGF:8#jثZfS~!z7Z3"RzKnFc.eLUsXt,p,FنǥEOi+aJ_ ǔIB$GGN8W? Hid_6s@ʋlEu\mUc7)9 rnǻ; +BgH]n͵FFfh8KlQVAx>dhVNFOȝ7t_'תv7 .ɧMm -2k*'*қ$ Q߯IS'Wy:V>R;u~d 8VQBo47_g|`bhSu_HѮ!'ϲam-*{+SF KWӠ@u7!A~Ht'wNMmp=Wɉ +h$2X|Ӳ(h8rMAO+ ?8GiL#Sʢ|9RP},zUlRhB/oD6&vG˟앍w[`Dۃ2 רD c*V * +'p&h9"O u0&Zx/Vjyh;60" zH5Zi@0Ww/ vGW8xCw,Y.U?5YuIC:DV0,AD鈸&+fq~1SD%)( ߚGSWBc!Jis"" +6;'&> a!5=XA387 iZtgfz6|n8@(|Yqz +.)9[Q?5{\]ZB6NDFki5~0 339vw-31So\z6'.AV=*( dYgkc+^c +1nan߂A˱#rtcBQ} mH&\֤j wYL$D|nʥ%v +endstream endobj 5626 0 obj<> endobj 5627 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5628 0 obj<>stream +£l= Yy$<$LS  %TdqLJ<$3>8ږWr&uqzNg*6<`E)*4ˮ~#ιC N]kQ U`~L+uU1=p yC!R{'X?jD^݀m+EO;_wVuKqЙ1EP(? +endstream endobj 5629 0 obj<> endobj 5630 0 obj<> endobj 5631 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5632 0 obj<>stream +wMDQԕZf_=Uab9/sjw3 + +֋ CXw{7ߋ0Yeb8ȱe;9 /r_d._z +ʵbI(lE㮞qLvRx>6B!#$ dg#9؊.@)]r8q4ä3+}0APqT\]D8"-= +~{Z6&,TXMTb.ʥAYNq0ٯnC} 7j$&|:h]GEG:8gm`_4웺kr9/:b wMلǃ-adKLs5I,gېG Cf22zҐ&Bd>sSPCk}Jiuo2g~qÂTiffU  +Ybx>Jʆ>EyrF* +ftm#?le>cNox`vj[sWάC3& \y*hRjTx:Sm0{~Q|RZWXQ;ݡ&2w+0/݈2牳]*ƨBoI1EaS/ BáY@kWnwUol[R ŪlŀůɎ-hbv_}:*( @GWQZ8;om-|v`#5Ǹ{A l6H +endstream endobj 5633 0 obj<> endobj 5634 0 obj<> endobj 5635 0 obj<> endobj 5636 0 obj<> endobj 5637 0 obj<> endobj 5638 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5639 0 obj<>stream +3r}Hk9=Jܔ I:Pw$fYQS6\qҙSAf ^vd_/oS=| $HYگmk;OO =m? +e"TțgeƏ~ؽX@lc^MӁCDK]v@O0#~›I<)&{j"rGz4 V-P2^Y.S\E6- zI)萑o`,Xizh,B8MuX]NfJ1&}R8F˨f^'z>5YϲΞuTqƪ_>Y5yZH%6cA.^468N\pG ybN O:]EjMbܜn\|k=E8yxɻn̔?虿q5+]j'#|9n1>s(Y-w$nXvxPZ6Jr=TVвe/p>W=q#ی֟j3oo>5RFTm*FZf݅/` #M:ːwc&`a:~2Vvr4J,Hz qqAEQ:&˫ &Yǡ[1k@Û8AB2Wf{첆R7tUlmN-|/xlCnPrjTCOq_7ܟ b6zhvjzF kQOsպuOHa4+C\8SzMLehX 'iflٌtyzA.!c2<22לQ|%K[p^0) dZ?5?3ơ{23ur6Ӭ1f%ڹЇZJp1m"948悮sk`@p ~΅%w:>x>[Xozo֒9?=W=V.L+J?x`!;= _3z߃TWBlbL#4#=,t1)O Yȩ% +9UA )N|Nl@Кp> endobj 5641 0 obj<> endobj 5642 0 obj<> endobj 5643 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5644 0 obj<>stream +5MxО$%l_!I䆋C+u)I##g@8GƕUӣ譊D@~#xN -1*յTĵZܺhhᵐ׹q0ݖI~^TU4hHqpKdI/e%YoiN VOE"iZ@ъJJi$kUbH68FAu*a]6F}BV_tҸ5deH gjlOD@&!(y6VK(g]ʓ5LqV,78ei0XYoV ՠ` N>OŞyQtAx~IP~)8w뭙O@Ǖ/Wn4iR|^N6NT݌ dBC.9w}ӸwAr 2%G:̸ ,XGƷ~&_q@g?*A %%})b-]? \KrY1?9}# zݝuY〓"O~A2AI5 Of.`N )!-76f*YȕEOZWYd̩o<E5P`%[xm0wf_?bdqa=׹Fr1CjZRƗDusVwhn~>0N 7+f 0R=4Iӭ%ƦNk%XRn) W}|}yQJzn_w@?e:xأU!onR/DeBn1V֡wg1٬H֐ i>j~|]ބ꺏̣ ݤW~wHӿ{ +ҍF.yC'P5NޔBƮcJ ꤑjm7>FS__r]BQhI|H=!DGHDu{uNN2I8yD~&Q:WOOsJ DHLG* pfsHu(r9M[l=v9uw|hT=/ +hYVw}BUzrhWk]ʄ釅l"4Ѓ:?[6S0.@};0Y;F6:fNȹ ˅P]6Mp<_3CA𘞃SAAY~j2ImvT J\F3j)IT8 O/nefFnvEn(e(S}cfƀdD4 +yc'[9 +endstream endobj 5645 0 obj<> endobj 5646 0 obj<> endobj 5647 0 obj<> endobj 5648 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5649 0 obj<>stream +Yɨ1м;ED*=dٙϵN mT, +S^{yt`fӺ3GmG#б~USgT3hOh%ݟ)79(HU6BFSQLp뺫}9*,|I^V[3f OU,[;E#5ktID5Uʑz ʫ$?^*WA⚯R* { Sc=n@VmQ8^^QlzhF\H!Y\pH#bK {,_P9RER~3Zcb:ݠ=u N42JW*/;f~hey? +QGV4ثP!j1d @RX'Mɿuqq5 :Y 7tqvO]*`K"y&>lsǣ.pP,*jPskLb,D]K=4wZ,8~GTLjYpd@*Y?,ؖw?Q2 Ys'r߸.WrݬL4Y="R#шtT4j)[6%[ n~r]AP )jY" {[s<&$}#~߿FĊ.օ-?λDwJƵG*JK"\-d*9{oh4kGCĤ[-Sx\HVpܹMhN;i/vj<yJfO&?Wz7~l<м3lA+8ي>(D&diý%;QB쨍8A +Tzd9OYce2h/'+҂tү)g؄yN;13Yyr `V:\PԘ7 +I jrO> endobj 5651 0 obj<> endobj 5652 0 obj<> endobj 5653 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5654 0 obj<>stream +5lߢ#+AWB +,ܙJEx#5` /4V(sn8Қ`9<@\\ٜ=V_mP\vQ(7n)2 +ay;A:L[Vv/6~CW3@s)Ĺa^>jU$||,:|ygu\e;GC,4`"V>A`~ qhg=F٠DH3QL4N>*`]-Ǥud; LEya#BqE{)8jIzeW +Ewk?O +SO_4%) c+Zu21 <&{1YcL\H 3Rp- ;+)q WOӍؾ52 qt)Z\Fg|B@#.|H^OKK㙛q7hԚZ)@%Qf,KPa( "Fd~ݻSJnfqq[y|X{*QJ!zX-|vp'E1y4;QHJɟ^ [j*H|BG6̻ ?sgM8'r?]i9J16EDzد;vعq?QY}߹p" }[b(b<4Ɗ9 +endstream endobj 5655 0 obj<> endobj 5656 0 obj<> endobj 5657 0 obj<> endobj 5658 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5659 0 obj<>stream +b:{ k]ɦIEjr:# f=/;!4غCʉG>-p.>_E67ye}7}~z#90;ChM@25.SoT&S|yOɄx =yq&Xo\%%)m~-&A- PM6",?BOQp]P-%:6NO(&_xZJ{sHUB͖Szcf1}S:`I[ќNDAk"1pN&|9.AD4 +SVx6Gylo%^vV8p +Yqch-3}"gݱJ\DCL mnu wfDW<0. )V֘o3yYMccCnwxt8h_[};K#lViQ -~1P~ucC#ACQς`7sH|`6*}> endobj 5661 0 obj<> endobj 5662 0 obj<> endobj 5663 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5664 0 obj<>stream +fߜʞT\POSh\¥NH% ƪ{7׈7E:ll?NLɦXk)dZqGhB5 DZ2#Ć%!VjmXl”@64iYj^,>98]t+aO)}{=7eo9O_ocZ@Aj*دҝPcJZL!T#~N3=ʇSx,IM(s8Y|sX›.Zs<;Tg=#Nצ/n%˪QaMD$mfσ3܊F|:QnpЮu]!ƲfD" ~q'^݊Yfnך/D' R|ςZ' Ԣ~Mo`dP>QԳÕDZYD Nj?!lϩ>QP*mf4YϨk即Y^,5nqDsT&17<ܸvnwsJU 2+J9N39hGg3ai|=qȮyC%rA +eXvyz܃S^q Q#4e`k^FMx!{ʣ!c3f;x o/T_ @% +endstream endobj 5665 0 obj<> endobj 5666 0 obj<> endobj 5667 0 obj<> endobj 5668 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5669 0 obj<>stream +.ě @tc0^zEcxip +ɪߗ*/b]>0N豔Ekw,>  S`ǡHBx]a-.B" +1T\0~Kukɔ][31|cŮeyYS bW(VmEV.A|5Y_ɲo ɪ)n|zbTFjB$AS)8T 5ԫce8 VQIS^Z'bjKZq +~Q/t"lGwKe]>w{0?\ڵo\N=nljm!Sܶ=Pcֿ{{eRՠ=`:5P.7<ˀT!R/Y_E/#JEmk}y 7qZWeO#.R2%2JFkysSxw~zWCm,ЍURHrr(\㔃J< HhVw' ‹wVC!*$50`~&s3|cL =X:D?6&GJA6 RDC/%<4iܗq zPXt-(IKZW.eNބ~M6~yERs)rh߁ﴞ!Od4 ű3/TͿOA7M؇JZHUk>-*0Ƹ +Eq*s7Uə4>.IJP!{,>=ܭ5\D?ʖ)E2lnO,m=!nPx۪ ƌ!ag*C.All@cv6F7*OWF?Wڭu$99"#Ng"܌Sd@`e苘TY OOU~pkW.NȲ랯Y"@YWCwI1 +endstream endobj 5670 0 obj<> endobj 5671 0 obj<> endobj 5672 0 obj<> endobj 5673 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5674 0 obj<>stream +]YE%þ!bܔ%B9~l3ѕ,j4S5%Ǧ( t+8'tjz70˶#%זּ`:aFg (iA *C?I4l:Acg(6]뎶VJz +}m/A=,idf|-P AR\ ˾t0V@FմdW(Z(<Ŕd;scp;34X\Xno^lkU2[+DQ]Ґ.AL-N 2韪cG0B桜/p2#JnJAe1?{Yx߳`QIgLV:}# + ]~BբB? KČ,Www qҐ&8I-v_ZKjTl=Ay_wc0Dnt(e; i率c+K'[+" ?qh#$x\.hb; yP4!ܐr ,bfo*lmX:jmzWbך/XZ3x˶ex~: >F&]Εbfn[O,lK>C!6G=v#aN:r;hM]#LeKԃV> endobj 5676 0 obj<> endobj 5677 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5678 0 obj<>stream +{^.lgUToJ?yQ &f>lvԲH{G"Z[eSV' D?F*bCQm Zgi&@i$R*A@s (Þ}LS#E"mo^ M3f ܨ yfe$/+>8r);(t4TϯZ!$Ԯ?dCr׭Ia +G$Y$PR3m-I8[Ƶ!"rcъg8mw\iX /i`ݰIśS׀̖߱MsoflLJ<q% +9CÃ'&phшΤE7I*] gPdfmidP.gqNvF%͆B%N5" [xtb͛V)#}Js1t-Ye_2^lGi.l74'c=0:%(QT5ߺVFhjxSc<.7cmkhoK.]m=QpV6}|PװwA1^i ߻ W0`u_ZiBG[?[E73\ +yLj,c|fS-q}S>פAYf{b:Z=r qսk +endstream endobj 5679 0 obj<> endobj 5680 0 obj<> endobj 5681 0 obj<> endobj 5682 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5683 0 obj<>stream +%[UGT yְ]e- +Z8͍8'*0D dq +vAj ^0 kX3,'%?sC]a ҐջDʀ||a~m~2V$V wt-h޿ =^$F MӸ% ꫷!Nn3ۋdYoqʿqlo~[p ?k?dOsjt{D%r]v57VG BRF*%9Y%c,LF{*KxUԛэ%=0WL6X;[FU6qЊzHHt+}L9BȠ]˗߁o"LR`f.AIOڻoA0_;)՘kɎc_5hzvHxiFJ!v+d3* nT Y+Zrg| F&6À}1Pz#7|=?!ɐY Ӫ0?ZP%b&)!lw uF4i0:-_,y/[V|67!pyE7wI:W躧GÅB~;.2benѮUzVⳐ3ā='IM He=9dCJ,vŃ@xwa|B\CCd"02gf|hYdDr_q2=CUd~|,<)Äf<.w _F:HFi$$NZ/AưsA6u^I^3;} Q\M)3Y6ѻA9z> endobj 5685 0 obj<> endobj 5686 0 obj<> endobj 5687 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5688 0 obj<>stream +Xe !=֕۰Ld[Ͱ6l +.0C Ak3i_)hPC2M.8EwREu,{`B$c㸺mv"׭3knߚxV88$[hxnIg3ȣ}TИ/6=jeb=u٩K;(|! +*E x4ӷ$m9yq͈hS0#c!b]@FH0ZrЖP)%qNơ?T1l]-*M#6Xu6o~.˩5QԴ"/]6v.<( &$꜔IP6pJm/%9 =NcֿXM~jV6]b*h\[s-Dj/b?{$TؓĦNW6fQ F,)A_Ҳ=FuGB\`|ְtOck3hwMik*hgY= wSX_z2tntU@C5x:EQ!zu(uݮ6/`tK׋'F(f,v ҙ~l ۊ-dXnt(ìO_} +<)DL/zL֍ꌭNP?U,1XI*0J.zܐMnoa+1#ai>)Nln)n{Ĭ v'@!ۨqǖMp`TH|OܿI6C*LɌ 4Ppx]bud9P8Mpoų\:0IHM\0Y%j"\(>wV(|ٽ8Y¯'{xAخ^4*Nx4}U&P6Uk77?D H_3bo)hb)ת+â:p8?ZnV7\OWS%Hwc%1%7-vf5{t*z3L {׷}S>ccZ(2R0KIsXLu 4qjt +$ЎKQMc "ɵQ=Zc a19 56oP:@ANC%UO>| 7qe!/#9tZ YSJcID9NJ|*~^ +y:_zxPzgX @Uw&UV)#i +endstream endobj 5689 0 obj<> endobj 5690 0 obj<> endobj 5691 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5692 0 obj<>stream +S}qFJr.qoo3t&:1رY̌Ɇ9k[Kc*ÆIYm;"Jӄ <(~ݕ>>d{Vm SA4b38LtqS|g2夭X24dĵ\]h2#.0ԌPLLkZG +zz_U!"OĖljݥIԓ+]RO4o=te@R%}z!>WI)*VcA65e}tn]oov{V|)DcGr=g\J1>Yk6! +D'}^aʸ9m<iln4,lFeZj]andߋV­pf'џ6#`|h&"FB 5+r!?/K%4xDG`;q%ErO tu{F9uɮ';߰c?R /rn43\Wř}|pdAlu0.&N%CQEm91W+yjA<՝Y۪D)y p[M>ITPv). vJ}-E7pXtyvĉ'x^a5Ѕ>1OA+פĆ @g؁;O_/G$Ds*K+i<=Cb+:o1k3WQޫ"t[c-sxO}@9nqPnHĐa,cRouC]+%nc,pZnIf>Y= +4uu[?Z~/'C9[85eț2zL߾'Ò5 +;rtkoAPbίIU7U[D.p摉#k)ː8QoI!N |okZz09!5xa@oU>C! L~H_) q L3T,]鹩a熝Ԯ V +7)"6e۷ +endstream endobj 5693 0 obj<> endobj 5694 0 obj<> endobj 5695 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5696 0 obj<>stream +}&Eac/D5y%2"d>=/Y3Ć~E Bm"?n^\6ᐬu]|d< 3^ 5,/퇝QͶ~W~ gK5Ƚ΍}i"."?U.pnbNBWoT!v/L^3pTN0YVJnbLI,94ω&@ :eH= `_|o+W%m9tF*x$qgw3{ÜSZdOo_R- S{ISnrPIGmkb\ +q`Fq R}e/CV"K*PxE3sPZUg5p馯UwZ<7D@AXR4]5XjmɧWsBD +hĀ5m7Wl jИC*~1{PTM Ԁޭ* fG\)׈VxgsM_Fd!,ޥfߤڧՅIq*%*Ym} +ϭ]B!GZ+b~Q˹kzƻHZȏc2Rc?)?w>Cw2=ǂ,ʳS ̛cE,4>)HiI՞%HXyc,7K5b(uYj'RkЙjTihms0s<{a@h-C8̴;SReMi|NENׅSX]ڶ+- +endstream endobj 5697 0 obj<> endobj 5698 0 obj<> endobj 5699 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5700 0 obj<>stream +&xJNVq`:Ǡ{^t4pzU L%YmþCO%oYm(` +_ ]~}p@&@X +ź|V%-ťR_B~LFRGPPEbA  +zw4 ;hǻJ9\,6^Ht(  NA¶secvUJ |r[Ԋ,#7|bw\ N9q!ƼQ>FTTcOµ} %ÚokUe'z1 +.1F0Q']w%)p G HSf٦"6j^"7by ;\<(e Hxm{XgBǖ;{'\vo8 i‘j9}kL{$`Ëfre'`OÛ?LWe͋(ia!|ItKz~jmF@sScCUqDs? D)#r +=%v~/)݉T>)&o +b3WIu.ɦ% ATLJt 5IY%pS\B@5❵+AОv ׿ +`I O&{J[dU#7W> endobj 5702 0 obj<> endobj 5703 0 obj<> endobj 5704 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5705 0 obj<>stream +O N[B7U/`#Nz[93S"4x d`ӎe‹ƱCZ=J™X3W h1Ӧ (3Q-~~dP)4gU +IyOyމw*'ivgT̾ןs0Nk;{3@ BZS @dH<*wY;VN,e4G@Bs!*MqgdTzS5M8$.=Ogf_Q6눺1Id+mR(sfFnIxU2t) VRRrtl;.Iw}[}~Jk8 +u\pWj!Lp+?`q40Bٱ?aƾdGr~\UG)xV`"κkw8Ax| }ho-K/@e5Lc +;+ Ь#n ҃W:35!QJJo2W]#v 1AZ +h[fz_7K6D`nY.Z]U1MrdCTDCab78Q11ƶDw9Ѓol.7y"B?tInHQ,#pP/uͰc;fr-hfI;c9§]>/Rls 3EE$[s=k{Sq,9,<1{P1IQ|B](XUz#3i1];BTN Ъx-X@6.ٖ3?0qWގ +MsmI2\?<4?wK|W ]1sB蓚y MK +\Yg-iw3>DŽxUVJ? e2e&MzӡIeKw>"B oAz^0!#cf]߾{l" ?~U1ǧ`g,!{eRk*yoI3҃IOp.2/x^יj_\ea#t^- 7,5=cT탦Rۦ!< W! `pc c= ޼(;Da1 uySlJ[Ip񕩄WR ?+ߑZI%ӕ@4ZPR\ +endstream endobj 5706 0 obj<> endobj 5707 0 obj<> endobj 5708 0 obj<> endobj 5709 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5710 0 obj<>stream +;uNi3:[ici˯QLoz G+jfhiBRTɮ9(Xgqnm"\LMs#Q^.AQS(drH=0<"s32OGᙪN؎y_"9}RZnX0}a)t2Rm\Ms(Zo>,;0<-҅agPgKXTAwRU(rF:@2a6QZd). xűBB-i NE8c.@tR2ހ+_@X@lY{U$8@9.aMbZ Hh@f< +) c^TҔf BPGfr`LQv2Ei /WG.q]0Y-G4IP%aKۚRy$&{Q/,\5ARS8^d{Ln(z֙ƚ] I]'VF Ov gӕa'ǵ6#1+[[+2J~D6p'Wq]!ĠB 儰܊ѭ q]~r+0kdmw{;T8 +9#>n.CD|ˆY*tD^e0԰ugWzd>zԧ.;M4ͅi}»匞)ue#4ßs.cEо\>?=HykYKT]AH[Wu* #N qJed͆~aZ)ٻz؝ns-#hpςki{|+啩< W¤hk? $tBGSeX̱Џ}bZP{k`PЂ1&KlA^bF`>4ĊkIMQǁok?K}QF1bIq&MhW62u=Mq_'SMg]8Xz [mgMYMi;=!LjEUQwP؅Q>+ +ƅIkRW=#ЈlEFT{=&ϩCNU6$A9y6˄Rua!4 + + +j!ݳ\p(ԍ.7oieXgMϗ\ 8bǧõ_8V> endobj 5712 0 obj<> endobj 5713 0 obj<> endobj 5714 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5715 0 obj<>stream +~1 + 厂^oJ$Cc#+~pJ,Pӝ|I ҹag]:2q➓gSg{KƖhUir;;c)wYB䣒柄|I(PK,/.#&!C14,?~L? T_AA8+;RN_LRGL?3_ DN"㑷;j7@⓺ +ol{i; #rN%LD9~3o\z /pEĀSH.K.槼Y?7Neq +xAG8#ǥ9GZ9i.|~ kO~(6Qov10dރ"\8(g ܇Q88A[Fa $~"–W*AZׁQ *Q\WfeA Y +l.Q8 UUo4UءMToIjAmksH{1Ccgn>܂JCsi7 ENz[fYߥxUcw}g|.b ԏm r&TX*?!k ٙY֠]Klh1(]Ʒ|-!W_{ Fu'o(:kסsOR8@})Y&h~.„4D}u09=uTbqd,W7"If*t=06O]Jc_>eǾYO= !J2pcp0eX_D3B,54R-b e$-ނsY|@29 k#T<J.&mYP[eVw"`Ni+ksFifo ]iRC(zD> {#aK$V3| yT҈9ַ Fb?_ST {O&lJ)ʚp{ /~3 =vC!~a;i'yVD  e(x%V/ULjI#LX +D>e۞lIH[e5MC>Ac:;_mѭ2kʚxu/k.Ƕ˷9 w?BsP041 +endstream endobj 5716 0 obj<> endobj 5717 0 obj<> endobj 5718 0 obj<> endobj 5719 0 obj<> endobj 5720 0 obj<> endobj 5721 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5722 0 obj<>stream + eN]Ϸ׬#,RΎ5% +eܓ]ى%ƹ;TlR9`i{3iBT%\-9fn"ftlyHzdbS4&JyӦ*&LS~>ҼvN@y\mCX+]dڜ2-S"-Qf0uq'c)4c_.~Jgi9@>d}V3oU-OˁG`L٨; \4%jᵹ燒WT'_,<,Od酜cP8gMܛ#!+mfPb|yj>ۛ%arǯjv $U-Zf|xqsbq!<Sx}"I2x8{rMa$=s֮"-zd_+D+{D;98fV`i5'Zdzß^=; ̩ ͸[ぺPxxq|-g70a'zWw,[^Do)ᥦټrzh, +5)nQI)4ɜq3D]bk*Wg0V 9fRW-Ks9֤ʁ1t wBg%Y.[R[r#vO* E 4fi3$=?#}6VK a`1_N +rcpf!buqZ/W܁n&Ha[R@?l@8| +wn]}7b<Ak-/x_rNߪ+BY~7Xg1;3zCd)uXkE-R'/0C>w}8"?Gr&V+zp_9wb[߽P +A% $C ,F+ +RK)=]5o(\f˭If \)(,z:0PDM87 q aʥ_>w(3n!L!BsgjϊާQY]ν̎/HG2)bu>?4EH|w1qτ>Yo}3Bs Yq_f䙐L)OԳQU~gfrd̙л^f6w.o.%+y*`^x1) 7ݶҥ.Aʼnu_@ʠD6ܠaiwwYgp> endobj 5724 0 obj<> endobj 5725 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5726 0 obj<>stream +aճvV#:i:x|\(zf~+VN(CG/_~;&|ΎVzIKHB$S\yx3)otP!lWS +r|BY -Au2dƲ3wtNđD9ny&G,0~J?E(ߩ:ˍ9_ p׈*IIj"I߸åywM#YN̈!!?^̩x8p F{XI 顥wjN]TH&4Dޤ9G8t(7:uVR }* W~|chQݕch۾CM w%݇.QWw=aclS1E;Bǝt1e5=g@K\(" f=hyF JLi|Yb9(j7LURrc|UH/untRk[c0flLq; P"ya&.`8 /Eq- %9v:2DbIkK.WQ7kW~ V[}IqZ,1eC)){ؚʅ}7/$jNLn,zS,) o{8+u<>ԄDKTgo~ *)IZ&q tNFu]!#N(xIg<>Iې-#%<~~p/:i.'PZ%֪k9l6@D  +귺idԜ}pmtrv>/\(a% wwLw։Ǫd=9=$^;Z?޹j!1 z2OS0lyc8ŸόkM-S쉶 !C4@P.!//MsfןEA>|r!I yӢQ!(,1K?"KyUjr z5ƅ$cvOTԯz Nn|qS Q@ Z d< +endstream endobj 5727 0 obj<> endobj 5728 0 obj<> endobj 5729 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5730 0 obj<>stream +(F37\] 05* 4Rapdk:P($WB> {#U˽4g|wIp(xe-˥MR8:"Ϻpii_w){t ԣ +ŭ2+h؄14!96jGSV =E]|~Ǝjh'K.,D\12od7 Z9ll/L.>S V@c&?W˸cչqdS)[_$ajV#4Uh5|;FPX`#0Ս JUʉһDXDfU!e,kMȟ'e#DX/O4ŠK_JPV{IH PU4zo6$''`β%~KJR^; Z-sT,a&KYŔ"MP9ۅ ֽaTjScn6f]o9;~Bߘb-D K j݈Մ>0Z~8)$@BV'8 <$QE6R(8r [%L +S%0:|@`-ҲEHK8zk_=}˜{,.^ǖ3eT5Mh^^?v;KYc \I=檀 FFKƲK+g)O?QmksR5ެΈ:؟;o ZmG;džWi{ȥX#Ħj'Ԏ㌛vEt2tOq3,1p_K> +1,}V%GO`^Ie!2Kzj^ +endstream endobj 5731 0 obj<> endobj 5732 0 obj<> endobj 5733 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5734 0 obj<>stream +g&DMǙ +;9~9 1C2xIwxseA '4|ُ:Pw6K +PxOL$>u_E9[ {T @]b!Nht_wu&.mqߤ^,,;\^&I3LQ;[NkyPlV5KH .:x} c(vɡKmqZxxGՖ{k9߸?rwRU>PvPЫ|lnM:[!#l 2`%Xr纎{,ObPv]$=s`>eæ +vR2¥τوt e0jviV:{'yRӇ@c!H~ Ϋ4@ X_>6 ?2r + Q|z9FI t`PZg +; P; )FϚd[(E/l@umC0>I X~Q0o`zäb;˜D:β+?r +$)zllUaD#7H+nʘ |>8Q)FÉ r0 Uh2eeI +P4UMwCQL2R>} txLGEݶ0 zΙᖕ}a-(Ykn?<>b |Op P@d ɯp +F['yo +-s9AJmDCy /ǥ yRx3Dux>* Q9;[Y|GXE2mL +ozCꋮiևٍ/ +Ha}rPY\M]<-ثaWRi:nm u +endstream endobj 5735 0 obj<> endobj 5736 0 obj<> endobj 5737 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5738 0 obj<>stream +7J9&O̶p6Jp^h6QOh}ӓТuщnku'OOiFfhCy/hOk~3eõ"[M oŷf5 TdUF1ߪ݊N~S8 l컊(|-XvlAD-7FKX"2ؿ1‘`|ޗox~}:/bj]+3JTk") C4 + +W1 뇻^^) bA/ILZ[%CZƧuh*ycvf!Ft]u34l1B##pyCEh_ +1Sj #lѠ(., +F2 r+` +ʶ腿9^@~cדnm;'}_1ցDxd3`xɌM 52foSI!>6](; 0Yt.ZQ0 4ZGo p)&ʯ["հ{>p3}}ԩ > йܜEpA۟fA'~vG_0N'B7 ׬Št?axytRgzpiE1D” 7zֆuE.:֣_>gVRS8*XFrdoa>>oZmwmVŌ~YW%64ew >kkq݈R*\E}.'de7g( ('E@ghPc˸4%,k>i.j\΂{E]-@!`^cM2a:\7 z3ψ{nDV\]^}2v C<٣yƅj:Q +endstream endobj 5739 0 obj<> endobj 5740 0 obj<> endobj 5741 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5742 0 obj<>stream +,s NQ [5Sc~HQsPѤ%S(k +(}2l 9Qz>΀!etΦu娩t Yю t!<^#1YIx5&M4<&ҨC,JշRDZ\3fxp{Hc搋c- + 嘨GBSJxwV:EwCTpe!so@;`EoܤJ:=̴bxnx>iSJJs|`X(VКm3kXH\YQ&R.1’W`zMTDmXE!rJ(H[5Cep8?1ZOjtQ:_pS |j +ayjA> b9# +ŞH@ǩ3ybo ):qŢʷ;x|8n]CVeOǃ=/q˛rjgEO3naہd=G YfĞ=-?} XM[9ylC /qN1{Rwu +odWz8i a6C4#;#2D7_%i۽t 41 +endstream endobj 5743 0 obj<> endobj 5744 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5745 0 obj<>stream +M +_+]Ѕ:bc;= k物䶸/D&=2۵1mw 18%.̃{-!'$3Q1 D᮱0 +0n.@f39qiz5p~8RTx\5E +rNH?mm]=ű0J03'UD4HicYZ`sCPt„?覗3D%E&ڌ`FF8[g=F(~o3;El]. Sȓ"Y:=ؘi6RЫMu\+,H`x.F1XgSS0<̘ $*[c)t&!}sL1}l}kn76a7_ Aǐ޴6Bҏ*{IScGw?4 +4:8eN D+s{?wC6hU)HYF!{L@rbЈ`dƌ9 *Fr=1GjQn{f]9M姯ά'U(0AstE2[,HxZ0琳?d߼'"7y,weT 08%T~H~4k-$ +U@d69jO 7g6ajv~O {/d+.~~HP͏?#~F!WfKhx Y4~YT\T4ЁË. +fVfjli=~=V1ХC$4k"]LdMrݗ`Cfffd=1='-klyn8@$d첍CZͦ +^:f讈YːHj;i ^Aؖ'A(T޶8].hBcd:-v0leL wq++yJ^X;3oƸ\zEmT_لH+<vuGY[1y:oIuwOR"ۤ!U>W@bѵDwd0n^bI=|ivL`ljaC +X{ϣ- WKQ +̞ +endstream endobj 5746 0 obj<> endobj 5747 0 obj<> endobj 5748 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5749 0 obj<>stream + aN ӮYfh#Qcl,M/ Q^V +wob+ÓtS=i&{dnX'AIe bقɷ[? +X36p+0Spu|{};,Wdn"ou6J,-ZM^CvPB~3щm4uvZ^AL1iӠ}&/nZ}| /\餣z)! rp}*E{r^[>+6[28FU 'oe=Zk:FD=\Ft +ͣdF47D޾l}`t_T A ˰_z[\Sc d>TL> jcedq>Pp\߼00|x9F4֘B1QqhVԞ0`)}R EWq T;,C=?[n[Apo̬ȋhUDԞJGMg9Y:ƟeűSGN^<2qR (JK}vȵ/Kc\:0IVN]uT z WTl*.d΁9;47|Zʸq=\-wva=mpfR-mޜ% W39 +*b|2XJ{'0\IWEL%*~Ge#&|wtPY-6zq5\OY_?+监Hl7lOM4%3wV$ơ5t:ƥr.O-WF!zߎתzYP5=Lx"#/_% Fi;Inǿ˦gGIE}GR;X`qcI `t;ZL.tQkA";'K2r{~a8a&h/G,52\y/w؅]k +.xnÖmP=w!Q(C}ʾ͉4]=t3V5DԒ l$G{JesI;>|xmnT/Q +endstream endobj 5750 0 obj<> endobj 5751 0 obj<> endobj 5752 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5753 0 obj<>stream +iM_ k;THeTK$֭+O>ĺ:OSJh(-;^+u+yi*v>?TW_0Q>*?wkFJ:aoZz,"߹C6YİGyԉm'~50&ݶBx6׻1{w[qwv4r |ݯMS =SBj*l{$TWfSQEn(c\RA#YO K0 (uo bLϚ=S/a_F# g\**sGiDIw94@+|# >ڷvg նA_UI+-$ KzF5epUcn7j(JH3dotFPOoa1)z=^coCJE>ૐFDzfUWtR<_WeqV4)Pn:Ib?Z^K #6:"d̴TxU;ȯqD1EkKI t?Ꞣ9;g=ͺBڡQ bc8f?+:& /^䝡F5j eKK7RL.aeLytړ^YOrڙ߻v}5m1%Ms HaYGH=}Nd&M +endstream endobj 5754 0 obj<> endobj 5755 0 obj<> endobj 5756 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5757 0 obj<>stream +a{O<|&0kx%-:H!}XP3v(k_!ĂbQ_s5o)1wHO#aFSXOf2Pl)Yo6OlZvxx)auΘhs}T"Stα ,hHQ9aD>/=m/:.Ø}%fXA^P6Gݨ_eы V ŤS m9f?] ;Nb"zja;!\Bϣ8}| zIr[ c;|MtR&Τ=ݽ/%LF8J_IcK}0#/ z 3; qQwӠ/ SIQoy ձ'd Okġ>A79%PECa >{aԱ~p4爼Ptλ̢_Z x*9өi, ]C;&GaS@}u=aZ1 G+#P9s| +9&ܼʛpꭎvD.KDk{) mlA@ĩXY q'^c_OUXtK "a+qϗu ws!8^*!X +Io-kkcJM~uIVxa;L)=8+6'߂[?\0a1ty?R4#by_Rex LR%%j_Z.RJ 7Q]lq| jrvBX7J/4}_[$3HIfHyi/m:@vUZi :8yS:IzԴ;VI-_X&YJK1٣CР}?+Rd?MX3s$<1)9άlYY K><֕& +endstream endobj 5758 0 obj<> endobj 5759 0 obj<> endobj 5760 0 obj<> endobj 5761 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5762 0 obj<>stream +쓪.}wBvy["3%Ր;Së𝣰.iHpZ»OyP8*| +z6ɏ6wzXC>)zu-y-5Q-¢ztzПMb${nX%&w=98r#Sc^xQ#ZE"ȶF5a;ԧe=)W<>

RkNw ^}Ы]b2 +[JHb`&;WPvM퍀ǹpb)oNXU\SQa:[EG w ['EXm'RXʿj(E8H>s{W^I 5U~_k鼼/PI>uw+ȀI" BdB-1?"x 2^jwMx#C{8Š6hc9P 4 LO64XDkƜ LÁkUtvF} O߄5`>>x_ +[_iAva'%85gQ<nӓϠ302bFZCN4SU쬻@aSe;F'V"n|yI/ 1[’/8}b "ۼJnXyiHO|ù@J=.:#4@t"O47 B_,qOl'Z{\ w +endstream endobj 5763 0 obj<> endobj 5764 0 obj<> endobj 5765 0 obj<> endobj 5766 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5767 0 obj<>stream +VUej∗.Ђ鯥9cbԸ ΛKt:60>[ӒmGS4)oe,ER̔a'ohTYd#rӗl5cΆek *jBFQ^($#!Eۣ͜B/@5ɡ4;dhYyY#/K 5)hKREy{stx])# FrけJl<~2 Q.G> _/Ymw˪gLafE6_ŐM]v}2؋-XGCNUwZKicmcv祆9/9/~+i<IA8"[~Ea(*?c* h"Y;9RzJ8xSRe!r(%M1gmu25$-2i(G^;PkK,Dhy>ą׮p|ĈR!Jh?1+̙%jT1 1!1% +endstream endobj 5768 0 obj<> endobj 5769 0 obj<> endobj 5770 0 obj<> endobj 5771 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5772 0 obj<>stream +]F.gN{R<ښ3{P7~k$ Z|B))F|/X|w)FezU3͒E$q? K5:W9-O$P O,QܤV砑0 [9@~')#~Ӵ*6+R/m&akh&pRu鐧ˍ r]X[$fU {ݙgdw?Y&q\(bzŊ +y~\|f A;_HcgOŒV,HH&j ok|{%)4׀RZ(Z4郝bk˂JvlmK\FgЗ|BuoK5\z-B-|rH(t9e@:a$Ƀ;ޗq-P:BMǞ.Xʎ{m3%1wd#hJ6.B&M6fwI8P|Ҵׄ2%3XYX$YW % f&nQKE ӶA+ R(Y(-a +>vRɣ[OTR R\&2v4 yg,hA^ea|uiVT`!LoAmO{Way3 +Mg )]d]bxz)Wk +CN~;3aWV-X (/E03!4?2 b0T\R $dXlk{EgN[d],nhĭߒj`LP NӰ&E u'y!OF\N:y|c̣ ֹm +endstream endobj 5773 0 obj<> endobj 5774 0 obj<> endobj 5775 0 obj<> endobj 5776 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5777 0 obj<>stream +ktXTx+\ Wjҷ +tVG 0qgB2u3DĄuΐ9s DstU(>BlS![!+zF#lV*kR/ۈ:K( /-&D#0qbRb:~g8)SV06IujXl; BM.`q#BՁbDs5&^h!&Rm(ӗ&:wƭ 8߼6v}yu>vr`8/?ozFݱtYu?;zTw%{u8"LB ctW1' + SqPPf8V==(!u`i7gYN96MC_@p*1'KGʡ ᕠ{SB Kd*?x!yh L,(~ٷe{:U=_RīkK_+XW~Ɗ_ֺ5_">L,,\AE$,*0P8 3vn=T*_8#-H YcąGJ(`mzdzϲ(Hz +endstream endobj 5778 0 obj<> endobj 5779 0 obj<> endobj 5780 0 obj<> endobj 5781 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5782 0 obj<>stream +mNԆy wro% {m99L-2]:c g7HgHq:uWK/Y? 8vD„/n1d +%&6N<:ǝszdF2F82yT~kʼn1G;UI?x= ݆ +Iy0D$ 3EF'~݃JI3ᳬc46}('Аm;s]#ݫqI|cv[ ~̰b3CKYJ3Y?!{4NMGsƦ+wwyYOJZ?9zȗZ96h?CgL&8} j#_W|7+Z@5؇fЅosO08:0]/yUjG}}з4Yv~Ȏ{x+W\ADz﨟8!gQco?.'ӻEdJT"Zx$7 1=N&IlWcwȼi_sL\8yNHy}c0Bh<&@΃T}9ŜQ|L/!&`0*հ|oܢ4^!T]a(_:;M{% ؀Ѭ *35jp`G~a'NMm #~$6Dhcϒ(H0`co < abeN7Eqw}3H98,?2"J yoB[V#B\@`跿W^|ԃ:X3[I )RJJɁ '?ynRB^U /HTÐ( F ޫͪК[ntW4LA7&o>ªkhaJٰ$ wf;/^iczrW6>MDpYY?Av" aQE+Rg?v-%UUF~N27 Pkn+W9η7 +]۴S>C̴81ҋ6J4-7 +endstream endobj 5783 0 obj<> endobj 5784 0 obj<> endobj 5785 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5786 0 obj<>stream +}T|*&G=I>~5Q g/i #VU=n!lY:"5aҴq'j]vZK;ɟ)h:ެlZ=xr3[MHO\1&}ɇyfECV@aY9=P|/8p%܃ ~aAלbQw Fh#5-]!Z{ZF`b_)?.۞vxz'jR@=bf6 5;m^%UO"(oP>t^qfא]Sq^ ev%|>U]*Any ϗHgݝt˘ 7 INX$ާ؄1)&`A@^k&rcyCgRq. +S3#, 1. :(mrbIkMC#̖ȃ*)S)qvOz]E̞+:}N1B 'ķM Yv}SR"R_ 2M4F; ;9BA XzYpEg3ila5#A9(Pz%zꨗQ n9-Ns] +JD۔:)Su4g]@"cR6i 1$Į 5.`rxZ娔,HiChϺڿ1O>ʛBR6')V̕M_59t;Yo EE`#o>wVR5Z쩽ߚ;dp$>=Uр#?e{m}N.x]aUyri 7 +endstream endobj 5787 0 obj<> endobj 5788 0 obj<> endobj 5789 0 obj<> endobj 5790 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5791 0 obj<>stream +i߬x\țAC{F0]8c~~^?s<{"]4ؐF %0~:rlavÍ=;.Z冴t{(L8F<A\-%ͫYVMӃ셆Y.6aSla@W15hx 2m_*wozޝ {r>A)2=E730B1u$7\qT*CAp|:7MIjVL̺Tp51[^_1\ܬc:=H#>5hx!MX󳿚]ˋuz2UGS^llr9$u]$Л}HHn(Y8"h[='% <AuN9{xSi`aQ\AGW [rV/N!!.) ǁ_e6x߀[}I;ubϚ^nWq=DV.dew0 HF%i=5' s1B\uXB^g1udЭ)]Vd\lh~'wh+zoOZ #2I&t.VE;&(t!AIQTaHh(Lpї2m6Im!^.AdXlBsaFۥpY~Q w;&2\H׶+e*O6w0`&Nǡ7µ"Ͼ 5m%o'{W9)4v6/bUL +ljB .[.Ͱs(3ẇc7PKV 'y4kL ;)VǸ2 :N$y|#N5!]\4NH MŵC; +=֑9Z25l%D&=BG\yu̦3So܆_{M^W~M\Q%?m\iY+G9u YZ|Y&D) /}F~l ]dN5ddBd n Hxޣ%\ϣ~I+ qܭ|=;?-|ocN}'`ɀeh.QݨlK묧LCxUI>* %`4׳ +s#p@ùAF|q jZac˪+JbQqVqk,+Yf^۾ +endstream endobj 5792 0 obj<> endobj 5793 0 obj<> endobj 5794 0 obj<> endobj 5795 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5796 0 obj<>stream +H`El|xx#FN^!dO;76 I0.l)"ѯ7D}^A܌`%l!#E~>d?X$Y);bGA[*1s,&/x`,-=)%@Ey}؇#) LCRF1<$.6LRfj3=m-3#X:5繳#4ϗ7sXA [*j݆jrh_"o4> endobj 5798 0 obj<> endobj 5799 0 obj<> endobj 5800 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5801 0 obj<>stream +5Tilē*84"O5Fd[L\- +Js`W2:{GwPYmGl˄R֮OO*GAQ2U<h!A v|ӑ t)-dZǦvGĖ(Ҕ~EN“9BZu<@A 2nfwN#Tm^ϢO7]Hˎ SYǎ3L6oK5hw FIk=bmejDcjD{qPD_[5 GbCkcp—.Buꌀ Oճ\t|G G32ĩª`Ք 5p˂\mƜ,Jd'+2 G=Oyƞ1Yq/P&pxiu5߼L ߬2H> n{8i,5=9>9.E*1(=\-l)Vfab Jŕ gVӣ0gI4ne2J?c'pTyX}}x"cFVɉ +TYq.s>,RgXߴ5;$X{ŀXi7L1N Aq%57!7.G4Hqu`zez^3JQO)1ˇE}\! +M6JD s޼)0B5+|p'@wLZVa0w@_GX>W3^- IMn|1 dyq~\1öxY8Va&>CYjOZ,2w!y}f1i)>yt:yJKݨl0@I6]2ƹ#J'rO{>5N쳍P!{qg,#,c𣽝RG3N?_S&SOAwƒ ||mH;!W}A.RM퉻Սޔp2ň\$.)l|UH+ +endstream endobj 5802 0 obj<> endobj 5803 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5804 0 obj<>stream +giH2'/mUl+] +hý|~ĭ`#n CB(jקsLe;[݁?yuC2_ztc,[QϒQ,z# +=` +iHCEbxTa(*I"o`/;BcXU>KjL} h}'HE5I }mG[=WNb" .@Os Xwޭz䴀o2j/$U*˫w1V;2AɔoW!0F?V Α?+z_$<|𕗠GsKmYoq7}[,~>Pn/3>X +endstream endobj 5805 0 obj<> endobj 5806 0 obj<> endobj 5807 0 obj<> endobj 5808 0 obj<> endobj 5809 0 obj<> endobj 5810 0 obj<> endobj 5811 0 obj<> endobj 5812 0 obj<> endobj 5813 0 obj<> endobj 5814 0 obj<> endobj 5815 0 obj<> endobj 5816 0 obj<> endobj 5817 0 obj<> endobj 5818 0 obj<> endobj 5819 0 obj<> endobj 5820 0 obj<> endobj 5821 0 obj<> endobj 5822 0 obj<> endobj 5823 0 obj<> endobj 5824 0 obj<> endobj 5825 0 obj<> endobj 5826 0 obj<> endobj 5827 0 obj<> endobj 5828 0 obj<> endobj 5829 0 obj<> endobj 5830 0 obj<> endobj 5831 0 obj<> endobj 5832 0 obj<> endobj 5833 0 obj<> endobj 5834 0 obj<> endobj 5835 0 obj<> endobj 5836 0 obj<> endobj 5837 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5838 0 obj<>stream +"q{/a|z7[ɕoTDPR/{VKn~T"be_xc +o;We돦S?:hтãUQN5QPlu) bӳY{V/wlnIk'd +U SK` ֭.#Cr?;(`In6~Eܓx1;A6D+g =ْl'܌pX4vB}eZgxmrbY9B|T礦8K7jhuBt㡹;)+$bo!W  $f+ L@ $"hdw),Imͺ8v3>u ( tXȃj2rè ˹L1Ek@!LΩ R^=hTeit9LvY֚P + j3T|C;VA~+:Ԃ_vd<ѭo້t2h&#da@U#_hrf=$<&ZH+=g'o'F|6ǎ <2nkX#$~~pU`}\+t6Jyӥt}rfTFoV"1/16}` Yxܐ#'?+pډVpڣ&:)Ƿi2G*% +'wQ`&)!!J+kO73ܭx3$ 64 vhbW T}'#)/xQp4 d-&AO30}N*KCu}"#Ev4`kD tI*@bHxvh!4ڄBmK3C&b8LQ>U\564}uǁ(wh8BV(C"m߶`TAj 3B/Z; Ɨ{H/8 +=nc:g@A6? DxOSjH:[G1ifҏ2mF7kwVeԙ~eݾ{U^P\]6Kam`O빐sӝhEhxXpf 30%T:5Mff΂ ‚}o7]־LI\jBU7=Lf5QnS-lN.IZf4S暢wkj;쌲* ߬Qe>phWbl'1I0Q@fީP˙9H0\>BlAʆ67(Jbggr+[NW`#]cZ=F2q\u瘵H{ I+ȑ YdK{ꦚh&ߴp/{VVV ZYnhOPﱈٛjLF7.EuC̜8$C&m)\Bv4e f0ciH +µؤX-wCS{%$ ݪNw| l!jSTw&hi^Pq8FI<}꠷뛼 [}71SNq"EtR;UlqFB5“,\#Ÿu%Z(?$Jqr=%Ke%=c +1sJk\J&'1 >/%1"J.8{@xO,h`ʰ'c-F<.g>MOc ++7ѮWRm69nuZ,", -~=+B{5wL-L!gv4O 6?eDR8f;ʼ@6zx2ڱ(mYB;4+%]6dQllS@ٿTcv]z)]%K]<4ϰRƥC:4H:Ph6 tݨnT3̈́.RvMK8bLz(Kf \p<@B&W`[ +W |*Ta~e^$uOI(;&_h-a"L#1_d2ƒ;;5]xjJaZKX +pHT LE2 B/Ti}{^md} qsѸZ+T5YØb}$?~Aކ @~yPUN|z/ V)c4PNEbH*^|5PP}Eo9} ءی_&8q=O̯F,2:$LaqC[΄zow6G1e 5ЭcB+t9]Da&HG_4a(R/@B.[5I^[3apJwOJoAU~ (\ҒS:Fj`S8 + ;K+ya蔓:T- l׬fD?o#mLMtɐ߃`5أcfYI;e.}AeeX 1$=482ab򆝮jbfc +> endobj 5840 0 obj<> endobj 5841 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5842 0 obj<>stream +3pQ+AgV8I v]D0bkEݤT2ybu ۤ) GUUQXq7Te>}yA6nw//3^2Qj63tW@tT}-HQq-,F6{2=<*/~tZ9E$落u{Qf qnonݕ1)a!Q؎荐UTw>겲~g"S >J0_U oa+{.ƌ[*#LToY'F 5Ne $Zh&d)Bh l\j1('UrޔQˀ4Sɀ2u:-G}@t?+..ǎClv fejG0'سpsN׋5c0'͚2mkOO_D6E2뒖Fq#LNĉuK aRiJBM&F/mWC|\zӛ* +endstream endobj 5843 0 obj<> endobj 5844 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5845 0 obj<>stream +[|8 +Az5_Ge9)Lߒ.u#DH +Py-tǽ3͇C>f!MN xc +2>&a;٥=o3s]$r qcaC-wou@UI.^!w(#b W=e]6}׿ +ruy䚑KEJ.jXξXi@Ո,`XpA/߹"V~y^#J{J/|j=\/b/⑃O]yEqTDӓSQ_;*wL=͑u>gSaՇ]e-i!*bZ ԗwxZSB5G1׾;UFU7RHX |鲋ʺ@ixۘf$ǠSg=kJZ4RbZ 8yMB٫W'ddk=O["uI((ZMKHD[+Vò6 +%Դ łzf R j ( +1|Z磗6?5e'C<0 +*W dUADbb*qV3)TȔ} ߙ!^ԋDX؃|6l<Ǜ[@2F 0Ez> endobj 5847 0 obj<> endobj 5848 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5849 0 obj<>stream +p^UT,0TɥDWOUb7:F(Er9IYxg:'׮Eη$ﹺې`1NQeaw9`_I+RF.dq3="jyA +x2Z6I6kD&2af 8[F/=SKJt2UG uA4UZ^=7\nT -kZ2f5B*2A:KO[v34ͷS#!wsK(j^MuYL:Sᔲ17#5 +hSY#j5ВʄdI*0f?02 _ +pq} {xe^ +`aR)nw]᜺jٳ[2 CAKL5,kPjٸeAPmBj +E[./pff}ff1._N yy(pĢ×zj#1 &; (ζ1$5x`Aj{V.7Sp))ʭm'@C)Z.YDy}#Wxs-y╉:Z݅n3 u C.|] DKǬSCA:)Zi~lѐV"%T4tK3Mg`o'$j?(bl?SMöPj+ xHW/^s]E--J{%'Et`! P:0 +HЗDn1[3UFB4OKXMG2s6(k>;ۤzQSךik ӽ,Q7gn:=Z҆BȚ' e)([K/HϸCN +endstream endobj 5850 0 obj<> endobj 5851 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5852 0 obj<>stream +@܊3Il_ߠUY+dRRj7KsqsY026T +υݶI04%jm= ȣ}%Wmc gې@:stn@>Hzw*j:h(ۥBg SFٟ*b +9H;lʛEa䑬AAk /$^ +b^n_Xu{D\bx7<ĉʛPN +B+7{񺩴D1k +Ev+|*IMMvO `qZ6b}o\[iխvW!jnŴX ?o؅C^O&UyڊYUB [ y3YBu %| Ұ")Y;\+DWe%>;IaGe*~~ʦ~FDw_L"he9Bz}â#g=`_BTdwi1=G7I! +/fvz tmZux+cɇ|ԥ4=$ +/fK@m G$q_c+Rg*4JX`mpΝv[ʮ%O-#\myXR=,!^t6CR)ɴsQf?ej*:i7E>Pk:W +::LSiJWgpIޱD5xHV +endstream endobj 5853 0 obj<> endobj 5854 0 obj<> endobj 5855 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5856 0 obj<>stream +[p?(7ᒔI&..mN@,IoV?H~i/KN9u^kYA08$kE/8'ȋcV"0_x*i$&8f57AWnO+'scܟK)I;4-Sf9#84",n$ӏ!8cX|[y 6%S /O-VQMi{8҇~R>a*{({1X+k U[tG 3By +"K dMgVR5?-dV!&xw"Q $Xx7` #5Itvp#I>M}wH;K08}JqoP M e6>Be$릂Y98QH,jc4"yH] +N4fz&"* Savx0n`b,# Ь+o.B'"|h}f `M)~zFt}2_gC#V=@i 9l^Cʁ5z$e./I m,DJDz T`yc:4ISP|7U\|R^ֹ;*3+Zq +z`n9rG! + ~Y*.%.q+*ɳ%1@ݜT6MLX}LIzW_!:X +endstream endobj 5857 0 obj<> endobj 5858 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5859 0 obj<>stream +:`',?J1+{Dߏ3j8* VH]jm mS7[plc mt{Xve3 6vf Y& ֧l5Ջ,zTCˬY/ 3-B/#}4^iN/ZG-݀|z X-lr?Xf{ FdB d1z!OSZSBiZq\I͵yD#Y'|ȷX45-iPS$d3W` +?|v jOʤ(ՖTވQ#WJ>9c~%xPCT¼)go˂82!POLM۱H;ԭOnBj>[S"e b.zk?$R)'%O(?)xa"ic>.l2e ]Zg砕!HA" +koD倩-:@r?A 2hߕܭ ^'l f;񯄀Ec +ޣ5`Kʷ\OEF CG:LȀ^ű65U`nZ)7TUDqS90.6QEH_®=A& *#/탦_L,a^qBr|Fm/-uGZlF1YV9Jg']'(R7=H6v{ɼ!S։'DL#ϴ9=^]JOy?IwU@L+P#z#ž bClp9x4]z| KiN:W:"ҀZh4&]]ޓL:opA1)WrWu,;h;,[NuWYARӐ K f]j8#@h&.ynP.;Ol +endstream endobj 5860 0 obj<> endobj 5861 0 obj<> endobj 5862 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5863 0 obj<>stream +#s +ԙy"/t%6d ) + c#mG z&[Rꎀ6j43xu;r{ju^ݩ7~l %>+: +'[;4uE 0 FyXoN6f^~bEadG>ul˘)OXp GQ7˷6 +'Vc.=f#~VS<r +_=jjAR Yai(c?Z.UuUzP(dkԳe3,CDrX22d$i~<y]-<%`g]CA]ߪG \.>Y`=w}e.1G1ZRy0b4ƋTؖ +vC)j+ȡՑaC||\^̨̽ 4\ho}[Џ f:}D9MOFt)Q0[bPqL د@%r`4#㹢DՇDk Km4qgP>NϿ [ F"/1,4&$+nMY/,NĵDG [a FKM \⚚hNa6լж +m$cJsQ7>4bWG35Jewrl6ѧ;>J 2b3Т`[LC +a4w6Iz +n/)RyI.myco`/ܔvqb;<-‘"W\ a"_ߍ-8ex5i &aTuN{{wxԏ~[9/qzEQm8K&7櫪۪w+> endobj 5865 0 obj<> endobj 5866 0 obj<> endobj 5867 0 obj<> endobj 5868 0 obj<> endobj 5869 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5870 0 obj<>stream +LTHA^"9U3XS3n\0a4nh0sW/Is8:?=%A +tRa`I$n>H^jQguYO\h#ks,C֨E҅<X;fsj2~ػ7Cb +qjñʺ8/QH&sހNY%D@[Ń(35=YU44ˈ^> >0ОyFwAS ܼ4?]`qwNkj &14MQ;+LibzS> / +A!S,!FvfZ-\0N-gyR>dR>y1Ydh: `給mj Wg!ΟopzbfÁ!L#R\tq tG(_&4͍a٦'t( M$)t Vt[ Hux^*/A9#  ϻ26-q5jr$6MCJzA~h|'he|`[perlG&Iٲ}+m7!B`jQ]_)%iPV7A+&! n׏„I+RxF|ұp0/#4 z;O~vDצYwGpYaɇYG+qN8Ȃ^u0ObOj|12:b#A+WrLm !:С4`~5iNvQ?1ECTU>6D>,Q4)E>g&ˣw[/K {j,q +c33::]t.$ܐ_6Llzj ?6 u~qֹ:+u+\W(nJ +{]dX ?]"™(:v&#w C g>/4AySw>Sޖ#ͥwg1YA,2B‹X FnwZlᣟٽ\R˔YDg[<* ={/./bkoHT $>hm6h>h34o? +endstream endobj 5871 0 obj<> endobj 5872 0 obj<> endobj 5873 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5874 0 obj<>stream +-u\}D]/dӯb w5gXzt8/EBKY jߋ +CDo/c|=٣_| [rЃKСljC:O]ZdhTBMଂEQaz+9tV\8vQ@ +V|ы2RaUf,e(Þwj./ 1gXKg6W6݄q1)Cf-RzӤoPq+"C7 v5QIQu?r]'$6 xu9"ćKq:Awz&|?n= x٪bl _)]ZvnA^.y\' U80@>u*L9ش4 +[%:x|F4\$i_][(ֿHD$'dWrJ=qboC$Alm;L/L2f"$ZAA3ؖ"ebQ6T\[|hVS|WZBX ʻm732Rݯ׀wjJl_vHvŌ^ GGᣬanPhgX|lO)q >9ssQ«Q+F8牰h:(؊@ߺ t(4\ NftG]N,D_ĥkzd_rܿdb.p01Tv2PTRlM|!I#sL:RW2r!B4LJi~U)Z28Vu!)Yĺ'l1Kqw :\_BU9:>=PpQU .YoOWX FQ 1|_T{9raWbCUHw +endstream endobj 5875 0 obj<> endobj 5876 0 obj<> endobj 5877 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5878 0 obj<>stream +3-^'4?h +A Ko]ZI;m0SK22NԦӴ\{R1ɀLݤNE,^F{b $(jceUA,ٲ|,uj |_PPÜӎ:ЦIˍ*dX*}ū3-/gqL$6|tMe?,coAwޏqqo"D*ȠXcbu)& +Ḡ(O֮ŨB߄# \IJi㤺BJ Js\J zKgUC?̚/" d~R8D)J]?߫owZhfg{'It8 10rQ6TQPiZC)j%_#> +_a1 6"o'slf9[)4SJ%] +خb|KJUNͮsٸ kC5[cp#oJ r"/.}BAP$s5K[̄E a IgďTA)_ۈ`gaImC(:;k`HqD>l{վg$o^޳bVvS}a o{ttaCMhA 3RRSwmriA +qOƉ;7jUE/Ez* lc6a)?~; j&G9!4 [ ;hb" m +jdТ~E2d~~"f?J YХwP*fu@ ;~(RS;.knԛ1Žr' +d4fqAwZvs,=7i W"V)ç IW/@^ޢͪ#BlŹYU؂..E-]G3&qC!)/P| +endstream endobj 5879 0 obj<> endobj 5880 0 obj<> endobj 5881 0 obj<> endobj 5882 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5883 0 obj<>stream +6X]cY$8$݆ef94d^L=*1J› WF~F ^YsH4B*GU c%?!JlKQ0 +~:W~ NLm^ \nm:S:MLqэsJMrdVo5ȐM{}@n4J-G6;<@|2u?bK7UBJ~@n`d mxa[ FDj1)r]4fj@ wo.\x4)#VIg3oR +Δ.#pj^Qʊas +Ҏ\@ˋ֥Uϻ:=o<`)yI`PCOڈlKұ]'VmzsӨFͤkm 3 ھw>YI JQO2]d"KB*Cȝm$Ȫ?J蘃ĩ6xg]| NJ(Reu%}/OqkWBlI>M ?~e**>j؟"]eT|@5.8bi"dT66V6M{0.hyIt%W).rޛn7Iz&an{sMf%ԛ]-.PL7-y#FOql[o}6͔Ysb{#\5S +endstream endobj 5884 0 obj<> endobj 5885 0 obj<> endobj 5886 0 obj<> endobj 5887 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5888 0 obj<>stream +t^7P`TJ(;V7TrC? ͖\rHZbϭ}ƪ!!1:Ӑ|>ʀ>.iľ O\o#7i5ޅFóhr2Ug DNPOOQdi.Z3(AM܃s7ftZ}<#z=s3~!*VJ_pU[ׯGA<+FuFN)oH ?q(9w,f4cwhr2T{81TX-p@74Xaof=漨sL8D3Ph:ኊs֯QS~ANd0$cb8qU4U+46W;91?>ۑ.waU>68HLGH*jfd%SzH" [Ҡ:\ld&f)i 7?'^L:ĝUЩfgOe:1[m`1Mx\Uz#@F^$a$9xkaK 9%nBk6%v&:zA%fh %W{"⌒۾S}x2ȋ=fש?Я~Vd;j> e; s(cvMRڳ ؛Y4l׹^<UiaZ0ίKL|[lq-zF*,0j7 Q߼GTk zۋ)νq~`>ݸ:{1RD,tˡf1FV2dHj'瘖shgpi-1=~9'HT?ãah-L'0~&IœVU#лPCg "ih =QG@9ehj;B,'/9xy!?ʕĹ& +endstream endobj 5889 0 obj<> endobj 5890 0 obj<> endobj 5891 0 obj<> endobj 5892 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5893 0 obj<>stream +ګBHŖse{EC{]9I;#6:%qp/Ԫ0sg<ضSUMMAr +wَw#v޽y돪AXsN aٲ=@1ˮ6"a]kPA㙵.G,EgkûBHS8WwOt_m w vQZ=X!h-U,XoY}dTiffF`ADx &|6QO̵X&| +tmdִϞ/I2/z sl'5 BȢNپ<ZZ%:2dשּׂtfF R-7pY܁#sUWM*Xes +vA!+!@9kF1 +#"%_yE6G40q~Mۧ;z}zOgXg˓ LBv^&T4.2(HEt&ƛ?;f9QA^+ ΝXKe=-`O+Cdpx};- %t8 jE;YƦ!;Abz?Ç.C1̸Vߋ :C~ď8\F?]Fer_/ Kg~HקǾcу@2-bj&WkByyy)ەmΡ,N&ɛ7Lv7 €}h)QW\0 ,7m4B> endobj 5895 0 obj<> endobj 5896 0 obj<> endobj 5897 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5898 0 obj<>stream +T+*",9ϕO~$m]6`Zк{~3;;< ph٘r 5gop͚BՄL?kH&m3,Kt ``7u0@ q}( FNQ[J.25@/Qg$ex>M4[,kzqGLUݸF40/|-zw/g8\G+bhlu|-ɗȅo&#kΨz,{CB_Hs^#-u)cEWXE7h(ZctE!dӱRkP?%riJfI:ﰚQ-mv鮧`7_.a#B)>ø}}@Fv,&aiC>=^`m})L[^`#va cE-7E_}r6I;ߎ\R*RV#Of26qaZxE Vկ,kT _[\rr$cfFV]o22d7>( +An:Dz|^3.s{< x,՜ xT6@}#ɞwLysxFzUH*QPekH3o9ylwpR(*C<| p>RlHAR<IWGDfv̇@Ebk%i]CYw2B>cq4j2ܡ\aiYO29:-?e5rNu!Tyyi1L\NJѽ{Gΰmg&es? 7z2qkxL5I4saD%%H-CHFP! )RV|ׇQ8mm8?1hzoC+\>N.ox 2 3"F +w"A(WSgлFUõH eB/c?en[e5YEk"Sq%PܾOD3b>%SQ> endobj 5900 0 obj<> endobj 5901 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5902 0 obj<>stream +MN!ĝȣU%#w o={ۏHԠW2GP  ]?; -|Ȉʇ1ug}BG +uujnI]NDz%KV:JW;J!V$ߔU"dK5Hϖ@ZxXZ8U-lJԄ,Ua9dLaf zׁ9CS2N,#b .o]3R6m{U%}μf1XШ?hr24O@hZYCDɗ0Xv+6$VHlCen.\;n5bC DS'V,L M\SCeH"]s~UXerZxc=6H+ZWX&v0 B+Wq>EE,YfKR=ǟZjWeCslmr,s^0M)" ,&g2\64$⿑ ]ǛzZkI6X!thzOY,ybpE( As;%TQqUk+wAqm!+-s-O ~˿т~@+Q;; +RFj Ff=6jFe9v + `LO )9n.QRIL[>e::)g_j +Q-Pm<1?uTG<61sm|4elyQ6y1Vkd(wWjA6IY.JJw> endobj 5904 0 obj<> endobj 5905 0 obj<> endobj 5906 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5907 0 obj<>stream +).e۱>m+nf aR$C246UZO&*xXɶ.' "hYjbfp"ug6WVC-Ιz` 1rOH[%w=YLFE;F+y1cPђü%3ev2o%q/N[OF%ǝ6gVB~W6 0{@A4+ruC2$KxeIjٔԍ;J`X5X{H]BļRer@LSd*XNKs"cPߋ|&ц\rf +e7lBj>4Lc33_)rb2j}_r"S'^76WUe:yظ]<rz3|/*] +mk ļb,:ć6sJ $i4> endobj 5909 0 obj<> endobj 5910 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5911 0 obj<>stream +M`sMfvNY:l"Po@^1"ÿ!=VA +7ɸv<:£gp*q, b+#ol_'s.y +hR3 ŻxSxn[h2iCk4O= S7(>zٯ-Ff<`Bdea( myzg*q=Hz}v>;g *vЮHi}Ysg'GɁ6H5 ~*H3w vfQ>:21JVwޯgt t62cMUdZ9}Kiv|3‰r5R[y6uSR|;67lSF?745Ԋ4K4u_{T +z +4[}z`GYlG2Nw1KH;xGS,G0ALfX$vWʳxYrꖿo2cH\Of?U>y9 ټ'~x +zwqw,[f(h;RXU}fzK|悆9/P+c5}8(,zGi8A +(b^7Y%[&UtY3yqěϵѥu;d_f1Ĩs֊20٫cn+١+3buLq-[Y(|Mȩ 0zݠPDS㼳Ւ&PsL&까lIv?aΜ0cLJqUz"~ +ϦHjdoڎ4]u(S#em˃[}N֪꼔NIE'w;wfGW9v\q*c̄ع$^7.MJfz $ +endstream endobj 5912 0 obj<> endobj 5913 0 obj<> endobj 5914 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5915 0 obj<>stream + K1:Hݿ`G(blDJkITT)0*Xsq莈DM riJ>/OZ7 GCC-!Nʃ^ZcxLC[,nNs܊97KX:Tu. J:3,fځT}kGK(}MflHfjop9 4P>QbV/N %HCx?= +P֯Toݍeb?ƒN]12=>c) +;WaC[ϖ/^0A"JF}M:`93|1^f/$!Tu +Zb]oiCۮ"1jQ3/3Z5R `Ag-P!L5)5z>a6ߠ9+^ɞ b8@Jqဝ#GC,b}3Au5Ж~KQu,SKA/ʷtnF1 Ff2&E U. M@7 R)!np. Nd(8R}L4g$ +EξicjxMtA%/E٧=XpdӴXZ1$"P&74EkȬQRҟY<5 +3z)RN.q|V7C>3J1A%~rvy|'/!lp1_R[bci#ߙK\r2&F,tz>ٿST$0tst$;71.݁ +6xJTvѩaR#Sڤ](e?㯣**gdOj!`80G2AvNAD*:8QCez8y7 +r5ic=b)}(gvtgb xp'؛bM?8LN*LJZ{LlTJwnɡKtdX4 u4> endobj 5917 0 obj<> endobj 5918 0 obj<> endobj 5919 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5920 0 obj<>stream +4 sՁkkip;}6%(u|uőܛ&Eqh? +!Ic|I87U7jyZ:ruZ|2##S8Q{}eiy&t +x ϴVj {6G; lxD y2!8SAv`_ATI쥋CҲW׆ v#͒bQ),6kbSy;=-i a YX:T2)2ZitPb}Pee.WPx~GdfX6F0u7-YҰϪY/M O*WTf8J*-dgض4ݿ?PvsD8ŵlU2!;(]sA@&%iO|7dqEp?)S5QOey5>[Oyw*lRkA:$e]6b.~zc ` `[_pޜ m%E +`Mg|u젌k3UG0J`zٱ?{r(d|}Y VD.nrRKyުB0X^m +_ݠ~[#4s Zq-GH+d~Vdhk?#F4ϧ>4-2esQ*MbD`]2#646HǗX}z\<pD1w^c9>\:=pkIPr1|:UXZ*87ہ +0|AG(Ǟ*0_m%od$!\Q|\6GP&]v0 +endstream endobj 5921 0 obj<> endobj 5922 0 obj<> endobj 5923 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5924 0 obj<>stream +K Q4DO$4XT҆A+".Uw'a%W zUλ~r PKd]V*#u%dIjrl ChtHhEI 꼾Nzې-*!Wfl\. +xt{26*- &Hkh0V (45YNhȆ+<%a䡌i=\a2xh:"_X]Vj2؂Cyqh_D8vR$2[mSd) ucgLM{H =m8 5m2%f@?LrI[nUSP}OAUX Q[Qx +3j[6W?):,j|D-zMQ]H{C򧺮fw}e6 Z+NƝu։LOXj Hn+r*ƃk 0~ +`N0`<ǒ@׀JnfkICڛbe0:fx[E\{\ ~8(e;B,~m?4ئ.5~x1hgF AK,fA_b0r{ZrF C+k)E$]$Mݤǹs=Ekog1r'T/A{4S\(>R7ɱz.#Ej4qI"،9Rp /`WU/SƸ-޺1<}Շg2S{\ӱuQgsZzi9Acc9m4,ѫ[saNNEQ@x] +sl&[:+^C#dB*6 [eMF{;:$Ƕq>#p{@ Wap[?Jƶ:ĺsnH.˜oo4cрǣa +endstream endobj 5925 0 obj<> endobj 5926 0 obj<> endobj 5927 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5928 0 obj<>stream +QFkOzz[SE@q#$Db`7Vd[CnZcxxZ=7PAp)wUA9Uޯ1;:U $0iʑ +ͷiHw@r$jŠ 9E< 3[dzl~󫨆-▓\ WY`([Ydxee~7dp7— bΝ^?of+|cuم֝fT4":Y:;UipØOO1IvNQj+{Mvcѳ+%dJ.mMH5 eo|XJ78Y93 i]ٵUBRRq lzSdplA _}/"CvP(/@SM˃^4eKJ'θBUA}s d + +JE7{g`΢&Zqy$LAa}f1B$Yڊx=Hv>FLg z$MUߏLw]3W7!/l4>M$^>_n[;DE9f{Vȳff?1h ޡSX/'dz 3鿊;j :A]8IAW!g1>[\~8gdp$E; &E~L> endobj 5930 0 obj<> endobj 5931 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5932 0 obj<>stream +z]` ȜR Ug lŘh݅ZIi$ k[#9hK;[WkDR=}UH%b<? +ET)Ȉn;V +<5)Xw]Q+ۖv<~.)Vaǹq,8/=dY¯ O.;ikH=gi4:\a-/mll=y/_!bsoOO) [n:";l[[uƼ vqx'6+'i\ôtn +\]1o0c`y\}aAAճ}f9iqL h/Jz,YOզ?੓Y]mc~/CƘ j4#V7^: QTuEQ̐coq@aɞq%+ W=J]!Ă]<Ȟ*S.ٺE/a $L}u0NZla"I!p: +endstream endobj 5933 0 obj<> endobj 5934 0 obj<> endobj 5935 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5936 0 obj<>stream +%mo'f~!Y=YP@v1{{bxlbkՏGK`Y`ϔ=FʉڄѷM0py;K=b>1۶.O &|4dA9ѥ׷`Nn$Fhdr0[7䞉TҊ؁Oײ`G&Ԋ۔0%l8֫у=F4(s˜0*2xvy,Πjzʝ*.AR@ +M&#gY.y˝&+xfѵ-w'=n$ҷ z0RcIxii8x8&##\U%Z'R$\p5"N0)e &Qj5)bH |C@aP&Bw5nš)a ~brfdW9 ?Lb>mH;?>e#{ɳU9L)}^2z.v1-.+z\|y3s Tsw;^;)٦<!7{2xp @ˆԲ&oW1w=kw1S+1wp_I]9Z/@]t\x>O ޺DOoN^||Q?A%Т*M1> endobj 5938 0 obj<> endobj 5939 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5940 0 obj<>stream +.A8qVarpRr+Bߖ\C0[0ݫm)-kf"PATY暑^J`:ĥ6T9-*B_9{J0=VwR V1@R=ph r+^/Qq\v[evgl,>EZ}F,YDC\0y 8vW5Q[6+eUb3 $*!zt6̐XuM8{Ny Eb70R&Edl) W >'*qZlY[8IK7@"N+=a@c'x\2WA~=hF: @p"m"]χ6V-'db*)%Auov +~4} 's(}yv9B+AzP'=]RkB/ #C> +fZ=857W4u#F0:]j +B$eya-(3 +c8 * 0 +:z-OT'et.zvs|;7xbpg͖HL>hȡOaq.r.‚]Q`F0rRhEO_kgc 3D84(i?B_#S \ĒȑB°}/ TO,8t◻^ȗ`e㿙$}p`ð^ujy.ILak' +#7؈zmjN ?;IJ6#qp7ѵ݅!6*Wj[d;%bU0{#D5W`q,Vruú +endstream endobj 5941 0 obj<> endobj 5942 0 obj<> endobj 5943 0 obj<> endobj 5944 0 obj<> endobj 5945 0 obj<> endobj 5946 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5947 0 obj<>stream +kXCAw^Ix~::ftBY䱰<7@4F{{Za rH_t!ʔZp8 +3l坋Wn|DP;̇9w9)bp-u|lh|ū[&XJ#YUȥ6AdF *vdVVtIEǞͭLwc@Is *//^?³,0Mͽ=-#: aa址A,ăMA8\C+(+pJ WYPɮ#(Nr#;H*58G֎JrSxKA<[?س#qE-NSo-}msEQǑNmyUͿK-e)>GmL3eWMmieXOY+?`N|kTs>oM^M2ZMМKQGSR9j_=UZ2ګ4âR=ow_:z]M0eܥPWoMeCԉ|ǣ3XN!MY|RUݰf:d>3 <X 2~YtAШ[]Zua0%`@%IJz$FPz"#Z<3`(Kba7\~2y~ꬸHHPu,\GS?5mN${N-s'eh<(Q/w>R9PNSehSItfU3ybE8NZK#pqPV}G`bȺ5Pێ1 ʠ &cCJdJa PCO!7Z;ƇiqiXJ Iz'8Il$ +w}S G,;VG9_vy(zX]`y3f"b< pb[PdtD:,9A2pw@벱- ~@Uoï,H:';B@.*xWḏ -2,h oKf]lvE.^Ti_| +.H[ ?@A's7GM|DJiZMRo%{kĎrZ- ZgtOBLMS̡q,8sC +'Q\(gYjC{ 5Y +endstream endobj 5948 0 obj<> endobj 5949 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5950 0 obj<>stream +UuhGK4J;@URU옟xN6[D~" M@jeL7pfIh  T.(֧zFXm [Wdn &J :[ۊ (kn-,ѻ}K,*;MEX9HeiRR6l`NR&X1k>]ɨc9_Q(5+'}UJ&cVz'@-E ;,1t'{g"PpQ^<t&SSUe=4yBi םbƦ@6%7x+Il$QL'iuv7zt< ĢF.07YL2Ryeh4 *%}$yaLv HiV o!R`3qeyat&8eRFB-|Xh@i W#R/bglIÓ0mukp^צ~_3Tlaa- VeayҤX?qM6Bso"B~Eas]:*._ޡʳ4*3SgDyN&e>X<8/RvCWE5ߵOѠ:Q@,|V\\P~Pޞ^,%ouFLc2A:#v([N+^un/Pp&G"lGW|py&Z H{#Ϩk@1f!_*ȶ3E7mQ +TR +endstream endobj 5951 0 obj<> endobj 5952 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5953 0 obj<>stream +$ /nT)Zy: Nmk#lƧ$s_LCֶ&ZBɠ>a@h@\R ja߫%"lszFW?՚<`D<*ߦc@8G(p" mwk㭨x-mc_$2$]aL%XHOnK>gJ6x/膌KSг+o68J0u~fX:)knG1s4 =-,j-= +ã(*~b-S1)Mu,#ʮ~&9=ǝ5fÿDݔ4ѳ!@mʼ 4eO|@;~9ley?}iG6DlW WvZVB yNﭮp:])rʧLQNWg'<%T })H*[B]9^jj<~;5z(MjRJ[@ Be0{].B06[ouzxeC< 'b/&KR,:}8skG"{QF\42CF?)*\b +LA: yF.=u.!S^LkTV@mJa|"קJd6"l'v鋇A]ph0&%z~W6I7N͖LRH3W])4Ϛ '߀^'1"cc0kѼsBT$Ce<L{!Hױ0Z;4>jKLaaˤ%k[;-b2D5p)4 {cY+ 7\v2˥"5<> endobj 5955 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5956 0 obj<>stream +#pa i$(5H*Ƿ"+.J +?>cKK'`ٶ'` @§.9:;9gOA=L Wį:Rp4-Oe' PIN*q++<nqhB 3xw3eyIJt[&S$dW 9>aZA$&M$:ЋlLc7S!|Uu2!:JW R:ha-޻B}Ck1@7KCmj[ +kqʸmꡖId˳anLԪcN!R+"@b#i吀XzDmE{JZMJ.K`Z[ j}}BEL$e .reࡻ\@1qڧ}EC{9wbECPoY=H /̷q&3fH]8yI( U|ho"(]zÑ {aW@ O_aL! v:,a.{~@'vu0,Tt1 +!VVs`m@^CC_Vtq"v !UQClb8ł&xb;trŲ;i&h>>Rpϵ$swIPv_շ]S#u:;ܰ1d8?lӷ(++w&0U&W4 ٔFG$c75g2xnDnTP&|6 +endstream endobj 5957 0 obj<> endobj 5958 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5959 0 obj<>stream +.{pIaC$8:Rmdk81;+^GTO[DP ^V1C W٨ U?/XCZ6qmp&CrʑXUEg㶌royBK͖+Vwc]f-40H[σ-ό +̢[T6dٵJ%bxw(yPd4i `YvKEKA2ME韀+ddڣyv}S#th-^uGNc1ճ}OwyAH8\PVxNJg#*7Md`w#f6{C}4P%);9; +֮"5) VDZGiIiuL߰Ίd]fUAq|>2/p``cd}'?P{Hp6%õʎs{/I#Z@*I~N|pXzLL87ϝҏ0IEBZ7C5 giDb 0~ztyeOfaa԰L.p~X}u{Jb.pŜ@,EƏ$F_y"ɘ+o55tf[a3T +|(óHcY>Q`rn=k$QMv~L6EZRoWkd#-kڽhUc[sʽ8FZfTzGZkq]bz<Ys㞐04}gG)2ߛB] +BvE | h4ɑfN"ShF::MV `k3 +endstream endobj 5960 0 obj<> endobj 5961 0 obj<> endobj 5962 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5963 0 obj<>stream +B,Y0G@0&p9)5#Ft Q55ͻqѩ*۵@R^0af -ݎ3~zK;@Œ7Cd)6vgdЍeP/"]х0V<3DϜ X4l_3KDwV TpANY,08 +@\֛cz/t=/)SOr& {^CLXЇt?qyj e&wUggX͌׈mIEyw.!ia'g|:@vcp$rn|YCo=py˓+a;*~Ts 8T6g܎;?t{!Ps1`܎a gfWzj\'>)@ DM*8$_J_ҫޑ|畚 ՛8(٤!5<=Jo0HU@RE[ 7rz62CB C۫UF=Y]3L 1Ubj1\4S`3DWҒ5ARlDeZ3/R7 RBG$RP2 ;F>~6pT/<wpV 8mtq +B-_(Ye</oBv ݨffp)?һN|+-\E=:ZJ]kÿC3VӱZ }-aL/ +W8OXր8܅vхf ~N&vt*)|KjhFUX^gWYx,:Q6=sqMіnxYTv }xu +i}hs! +} C玩 TxhF[l8'->w0~>?  +V +R&0 goѱ1 +endstream endobj 5964 0 obj<> endobj 5965 0 obj<> endobj 5966 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5967 0 obj<>stream +?^giR`3H!Z44$v}B[o#qz˯G ^B$_cĴ~dZsu-tӗ|P7rƆGq"%q~w-5ד˔'1!4F{W==`33 =գ2 K캦~¤%*٩Q>dEhܵQk>7UMp .]PͽQs%Dړ+0%$Ceԫ^KYp۴='N(r/"W{+._1IFrD7kF+ ʘGJxh"'5}-'E ʨ7ۀvzLAl}AX 9 +(&R-) ~?z.?a[ И"VqBt 0N ms3pvg:_,Y%݄H2#|eW.7F~R[*5֏k*>ϼ-}l°t}J8-Faf>fZJ_L5玉ȳ{-X`fz$ +3HM]i=~4 +DQ,EȵuŘv7SnGUy +,Ӱ~i.[2P9$ b' Zk"?D2ӟ%01{gTA!B~t,Հ7>:@vs&$W"'mTw_4|r?G),Cd2:5{D ~0⩎q'r(YսwZQO_o?tA7j+bU983 +2TxK蔉~u-Z`Pk~,2ܟlZss*O]ym``k}%,>|>ޔ'AD>;7\EԀZ= abCJ +pkmˣμpҔ[Nykm_E:ߔxdd8@5A +endstream endobj 5968 0 obj<> endobj 5969 0 obj<> endobj 5970 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5971 0 obj<>stream +]Y| ȉ%$]^1 +^\qpԿGKN +7nr*kApYݱRZ5ԬN4tbeZ6J.R & "P͆r|=Z.Pj9g7 l">Vh 8l>:J}&Nk{ nuΒ*]d z:cP8r~㡢[_I&N}yѴE4sF U:4Yojy[fʲd?`Ú. (1T25qJaO![V +ض  _vGɏz'X!ղC=I^,vGBNx%fg~5C$UD 3J;_6 cCSnM+sE26~Uœ]lw0LKhj79rs8G2UxxG$X:2vrW[Q?>/wxms볎)LĶ#ihպWDY{"AǬw]$C#qT`ڠD̠bVk:N4!EzZIzࢠgd9“ݻ!J{.4;b_f3 W##\KU:i\E.V~2#3x[)p"-K~2`n3m V1b% %jvon m漿@*6)䢟qW l;eݥ«&E!~w-xt7K]sw7#Z;N7ZaZ3:,~KoC+UHMY$@ڦ#<9sT +endstream endobj 5972 0 obj<> endobj 5973 0 obj<> endobj 5974 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5975 0 obj<>stream +[u80|09E1\CCk;wŢ"[U3*.nۆ#(Ɓ0}UM.qkv]EsDSu0'qu`~+Jz*ۛ jIt;6eR(XK>9$a.^ðR?V] + ܕ:nn5{(J9u"V:dy+YHgh̢GM򫒝Q_1:_5ji` d},]vNfFG9vmKۆjU[xxu +`w8Om_P& !##xp"^AUc F%I:ck|q܈7v=6w:BsNٛq7Bzԕ>oO$"4pO5ݡ0UЅ OOr]~m[QKiNVU^!wj@ +ߢɀ?5"U]]"@ENZtn?!w4.܅) aE ۘ KOmJ*sˢ^+2-iaW#i>_u,+uqJeRcO;""K"mr(%! ngJYCwR2ʦY'1" #X[ZIp2UEXn fZ> endobj 5977 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5978 0 obj<>stream +phKs v2|#QIm7Ix  +uꮺ#gvex `ndc{oXo90&D\[P-5WKKkCY/ʯ?oy I#gMB_0kvA?m{#N/yT$ܪv,{wbkת9cXbf^樣&;[eΐz35D!P-jZWkw R؍1 4C_W:q> endobj 5980 0 obj<> endobj 5981 0 obj<> endobj 5982 0 obj<> endobj 5983 0 obj<> endobj 5984 0 obj<> endobj 5985 0 obj<> endobj 5986 0 obj<> endobj 5987 0 obj<> endobj 5988 0 obj<> endobj 5989 0 obj<> endobj 5990 0 obj<> endobj 5991 0 obj<> endobj 5992 0 obj<> endobj 5993 0 obj<> endobj 5994 0 obj<> endobj 5995 0 obj<> endobj 5996 0 obj<> endobj 5997 0 obj<> endobj 5998 0 obj<> endobj 5999 0 obj<> endobj 6000 0 obj<> endobj 6001 0 obj<> endobj 6002 0 obj<> endobj 6003 0 obj<> endobj 6004 0 obj<> endobj 6005 0 obj<> endobj 6006 0 obj<> endobj 6007 0 obj<> endobj 6008 0 obj<> endobj 6009 0 obj<> endobj 6010 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6011 0 obj<>stream +`DԷA? pM0n&/tS( XRF<]tZ4"5韽Nbx_65vɦ0<(o?Md*fLM<GF,(M0BHZgqGctXWNM}DYy2 妸5Tr7p>[=ؖatDM'r\K&Ts Zu%-Hb8yI4rD&vGaߺe_j-_8 OBk0f XEvߏ3]{ NqDF]_=0Af:@17\#nJ"Y- X?B2o}WęRz)WFz:fhꢌvn9fScJ N:$;U`1J"pU-5}ZHk(kQ>"s#K)<7 /! *<*^ZlIVK-??X>-I9KmӏBۈ)o\'!mXG:^G- +aWAK[to^i<͋b7m"#q~P YK֎?JAP۳u -)! k[5ctn1L>Uwş :ZI$V׼&8 " 1˄pQCt]zWڅ3Gi.aܦuX$k5GsAU4w9d S ֐aŃ\„}ҝ/B&| ݼ'ZQ]!1IW kh/16-B Ivm}|o֤Х)bUmn!WeHbh@y*Ve#d4@Y +r:+u +< +\)l6|qa$7ᄻVw1j9V.Vp%Ez /pw|u`d%L\H(sE\BMg+ZZ&}R\a N-U@Dݡ9duAeGs_UKrvr9&lKU ~3j3NJgAVGnC3[Jbb][9G]DDJN?ԘyEPr!cԉ=QK7{2udHmI_)9,14OLw{eo2eW0Kvm_FqC8Av,(NE:`(cc WRo//0(!P-.霰O~<|q|N+<1Eέrxlms"/y䐨2"^9ڮAIZ=Q8ΓEl$mP.Rkڡ;t}rm +HُL˾2gK<,1?wc>{v5D _O(!i.kEd  =[0 ;96䮃LyU(񐠈i/2"Gt ,ApkZn{9Y( [;!biwOR}N+"2/ OƏ|1T1- Mg%|5Ux_;s08x"/;Jm_Px-!~fIWR(tޮԙ6+;,Ōo*g ('^j͒VgRNl,a6xWo^uT5RSXT(9 B7>ѕQń KС|*YJLy.«e{tehN +6y8mZNUǫx|޸S.K#ES7 ZWUKS%(TyQMy^odǯBr% O-&IJTp vGFZ|RH!ׇ;!p.U2kM_{JQrT(ΟajԠJteïK!>-x>T P '"Qڔ%oې8$cWpU-DDi*ւCr9{h%2ƆXzn_fY34~;zIҿEE PBhR4IM ySFcb$J=@K2NEqG@tKc:!>(aN+xz-PXyxwyi:Ʈ휣x$V?5# l\$ tXw8I(B $qxTǴvZ0%zڷDNva;P!k: iI졺= Cm3'35w4؂7Ü3n\*2yfx]vHI7 npuI2&BTo]r&[ P FZphY'\ g(F㱰hHA4p]/Pb]̅:WLx`Z ' %j3cǏj'`K4^( +L [->'+1`d_bSHL+ak9*qMhsi-C+LK^{ăC%AjUmB.:DzԳr06Iܖji;lJeR?rK w cQ:Qf?JEoS(fMeo$ +endstream endobj 6012 0 obj<> endobj 6013 0 obj<> endobj 6014 0 obj<> endobj 6015 0 obj<> endobj 6016 0 obj<> endobj 6017 0 obj<> endobj 6018 0 obj<> endobj 6019 0 obj<> endobj 6020 0 obj<> endobj 6021 0 obj<> endobj 6022 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6023 0 obj<>stream +N{.Ox٤}.HEΓ0>sCp8}+Z\cd˪XR YQBϕͨIk +6}lVX5nj'G`2a dжI7fcnI{ X)/efBcP:[-ϵ,+26D/卷 +=NR$/FPc'6WdFԞmDo3x7Vi ]_]T;ʼnLFs҅^5}DmPkP~4\B4#H %ƽw'R "tnҟ>UL;~:D˝6! yxbeX㨊ʹ';'T!AjL;65 ZBb%{n EpXݽ٣L[ =bkb +Sv@NeLdiɱ|%#ZR{-jgAd]f݌|[VBmu㋼h{O `Jtn!g-E\p|O7Nn/}NaS}9Zb^or@+O1tqJVŕc/Bfudfm# (ga9A$:`C+ۜk`oqiF + %65iq)!Z]qUQW'f't|B57}ȴ4>ePV(zP % ܖz8EM8(o0WEs-uA;o6n*×iY2syFe-Cx̙y#ZtXX `Xi,NlX6tHho#P+8?j>7c"h*^~2$K՘{3[M_GцL)LNZ˳=Ok'%2>5Mag%e)&v~ZUkOlG KB2|+qg'ѩ6TKZ= ' JvG3ɡIG9L~ f/̖Ȝ8J{t&+q34g}w>vȴmMD#Ѥnc5mU.S/}mZvbH[I`z!Zohn09xQSoqAm*Hf7,a_wE[H6fn{*\d޿_UCUoߣ"iEJm$Gg1 r83d}^aEd9q+n=lF.tfzNCQ I5!o0:;f{2M/Ya<^@tS!il;@N\E{~CZ*e{ +endstream endobj 6024 0 obj<> endobj 6025 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6026 0 obj<>stream +,w|tg6\l$N/rL}:?u] J8Hrm]WHq)q|6sd-s;Pt&jyzOcA3>==Xh@* iEO9Y_::8:AUS(+t3B,pWk>=(=U/fϳS0O*L$~6[Bl2,3$D(ڱicΓ8K@SưrګkqFH]cn\Y6-24OKt|\{\B]Yf*@=,+FTDG/)\OcOa+ڀ0\ς U(~}ctXxJ1xF}_GDOMCٱ(.s`ppaO}h_e1+ [/?*ԕrGԓ"5-Nէ¥ol[^5`M6bxkOU64 f:Z[7@9ҔUwFH-8I^ =gbjW{J_R0$4uK#!II>؟##z.PgXʊ Wܠ=.m{F穼]t( W +)"e4< k]L.ne"\7Kz4bgK䬿 +(´[ +@jȅ<AreRX;PJV|ؠz`P?D1~]._[US}]ccg6̠=C']%D`]A#x jHu@sg8|(t +%\j3gKBH(pDPpeF`M`g2O>i6w#EE} +endstream endobj 6027 0 obj<> endobj 6028 0 obj<> endobj 6029 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6030 0 obj<>stream +YSuEC/MLh.ꧥd((1CݓtmYRu%|A~ң [rz@]~͕BH ,Q R.SaaN]yl9)Zʇ5x+jFtGdu'l yq)">6)(m6݅#xKpzȅ&d.Aθ?Y-bP(BV05۝EѸ!F9CPwip73c␴rg˯6W+1_.pS +m]B ~/Q -7L V2AR]bcYb2_) tJ5~;!^4A/~[xtJ^!bR#?7JX~,,C*{5ء/at@.p)5Og/SL k u: XSn`v3\(b1|XY!W`k9=<ekZwhy,A ;)j]:'''ëN1"0Rpyq*Wo,O͍ ߕV>ZJC _5jG=PARl3دu{{5B#@B1ج%jؐj 4u4 ?61t`͗s .dWJH! 9])[x0?} G ˴VCA6굶1IP 0Y[{9iv9&iSф]ozl8}Y??"@DD>/B6 tjf +Ŋr +m~*.>K/T5i6*E~=U+־ h?ҟ2B +#Jk# +endstream endobj 6031 0 obj<> endobj 6032 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6033 0 obj<>stream +D CZڄk`eD7Hquڛs;#BnndP܉6M7VJ؁p?y-s:@k ELG$%64 F8b)+s i̟>Ef$jmf\Guԝ&|U1bA>QdF1}45j>cp/n$ UCpan8q|UwZ$Iԉ)ƌhzDF_*!&Dy$R3{^o׼_K0~~y;[ǧ{`Q&<7H)i+OYnA鮭#TH'n~318iajQcνXj!18F0jO;a;.>+y8f3lܪ} Nf{a ){/י;>#i"=Meт#WR* *T@!xX*^L,GHY4,) pF\.+V~ޒ15JiZB4k6"q45FilCڞ=e0r^ֱs8~(*-L.*-dS?MC ԫpm$~oGe1BUQt<vI- z#J^.E-7aqsTN}BlW @"?\r3ulj'O䋹B/ZWі:1dO&eǼ=jIe;@ ES$>ﺁ2qdCMOFpAhJ-Aԙ E}s H4"B:#)7mbHIIV_[XU9m> irbVRS):ݹf%:A-ز S0jX'.C".5ppcA8Cdȳ l3nJ8Nd|Pp$C76ϴ5:iaqV\Mm!(DR&;zF'p8D $; +endstream endobj 6034 0 obj<> endobj 6035 0 obj<> endobj 6036 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6037 0 obj<>stream +//gy?6IDbvo𽡏ry + 74,Ju:*r=HK` A*y oՠQ Sſ%"Yj vK%eHJKpB} b2ayne)2Z,>Ljب%kBmel+;ə1sC!.Z7>IyyW߰OFe#3u̳c*KYh6}a |WS&=9PgفIwd6M#Wc*-C̒@jwsFr+D %2Rc (7T+rha+rX/P\zlyì{JL2AЃ"]4|5oZ.<,H n-\Ǽ[dhyWt'"sG`GVm(`ɓ5%+"(ALF1jMx,`w2hLgΓOy>Z:n`nV1}Y/ %F/XHAΡ!O~_lHxsg lam7;~Yf +endstream endobj 6038 0 obj<> endobj 6039 0 obj<> endobj 6040 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6041 0 obj<>stream +s#5,ҍ]Bjt>¯63l'Mg'A}F:ˌ ==%.K]iKeZ!☏|Xw>lZt3*!#S9/۴ @4C(H1Ržw !4+ WԢMPlR"6x•r".y2(z,֓G]FE;&7ռV\Y? w9CX80 *lc^Js  FXX)`b?o/zرYBTQ1Ʊ$ ]TS@n\PaWL捗x k"_dR )()LB,V:FguY \yw1vR>$T.I$:In\(M*hCHR0)ZŔlσc],E{%m^}{ IXRCQAU^TZ`vܜU-^7e 4,UFT")޽I]/^nvkr)Xp*ͣ#5AMyD0שcNQ5.끦mBnI,!mf2YbQ"hdg<+络KJӹ{" *`Tʁe(UGv4vb\(ș7Dlş>K"&a!JtPU6$@NM̰Ah3ǵf(y!):HBP?'[ 7V}]dWDp\sľ7\JǴrQ:ѹ\x=OD{Pர[00&-I5g-35E3%׳Eq!zЬmd&7>H'(ah-ۯ^ߵ=]'^&Gl48jM\lR*'ߧYPX!ie +i~R0ݳ +endstream endobj 6042 0 obj<> endobj 6043 0 obj<> endobj 6044 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6045 0 obj<>stream +ebAo(SK+P#3n[brSxݜ}K{ ml5ɑLRnXpRrZA\ӹ0B^m +Wc7yE?[t\!b`y{͝%+Z{dJ߂K~BF"<aUŭSU5vۅ|03瞦pەB/ym>E4 1}ٸpjK2&j>G&ss-q:`+؈&@,k?tB[ Jʡ ^ȫ|!Qq?Xt9p&ѽ^ qpJ5+<}дHpf 6Ibnzy'G 7#zS5|ܫI'uP'K";_v9*ON[7;E"Sd6Az1>vKN\YJ6* RlA;ܬmZ;b+Uē5+0'-V@/- mWȓm$tSnWqbev.L7!Q)V(̇'w աF]]~G'J̻IzK*&RdW1滶ݦJ*nQU 6Yw +YJw%:ɆweoG1#eVu/]^JN$dE-I z/>C/Nj /Cp3%UՒ"<>ܒ5SX%&m 4{eOE'_!=PL wMWc&MKaOgd4C K~5N[?71c&v6=_fz+J}WR1*uA`ѻ7ȶϠ&$(sm׆-a +endstream endobj 6046 0 obj<> endobj 6047 0 obj<> endobj 6048 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6049 0 obj<>stream +="E:,>~Lčj/I iO|?tjeZ^{TER|*Z9nHo)à1KrYg Iv˨7?vuv +T6 lG A򄃕3Bi> o[<˔vifN`-E&ZLJN۰oL?-mxS3+[ӵÄzy2s"46 t +NdZt4*|]'KaXhzxkT X̱K!T-aeIjoT|)qM/]_Pȧ^X|! ?{Bū^%ujr֣`x,n&1V 8y NߟD3#g aNqpWL*es}k _Uz4mRJXog}Lp3O Jf*J1:X m-Uk[ܺekEiçRģxK)9ʕSֽ)(*D9 {ް*u#["8+q-klݗ1EI#kCgowoƌ^$!Fh'D55G-U}[k"x-^e' +endstream endobj 6050 0 obj<> endobj 6051 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6052 0 obj<>stream +vl"bg#12Ε-C+{޸o>"鱾׾4ځ! ظ3Qj%*ZMl`TBf"-g7V`*aYp v NѦSBOj65>$X'Fn?ũ:@-(x{>NK(i㛋z,˟e^bit*bUnMk{6JEu(J]k1H=s_ȟƥF&cb7YULWs8 +N3/`n3O-~ˉ06ϗN\[+%2 %{&]q`T9m򖰓HrW%2jV"m4"q뮑;CC~^wJdZUBvRv0i;(T!ye f.ଔ^IZpX%h KD|Fde'TûK9"D"IoxpTY7B!vklI<׼{~, (b?g')w%_EeO]<+}t6—a[Ik]B̴]L1|axZS6N4Z" rc5r(1e">R`w&ЦU<'=sEv~ +7 17bhMw*LDI=u&[$RsbI+q=?FքdFzΑO{LtS6_{ಘ{lGuzJR캂J'w@\nx$z-. +vfxEÁ_5YDgc1>ݬYUҖ0cNaJ1vdGZ +8@syۏw/~&XP^V3]Od'*"v h0*w4㐒k*nc~GU5A6SHtw-f9o2j?RU +endstream endobj 6053 0 obj<> endobj 6054 0 obj<> endobj 6055 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6056 0 obj<>stream +YEj=H Ing(w{} ;޼&ui-sei," 斛?w3 Gw&G7ZV2=(j$j˥iYqݬҴE%LbU:FTmι0GP=yd@bKFǃ62t/0=s6b\_Ԍ8)uo~}hȚ uUp;9ݕa̻봵uJ+`Br"h V0,PuD$wB7FDO@@|U#('.L~ͩOs-d'RȘ*{o'U\^k0ku٤N9!?-} &HaE7 +y͌ЕGJ]|Uo%:[ Ł=MY=`BA S +=p: عTb>~4#: +endstream endobj 6057 0 obj<> endobj 6058 0 obj<> endobj 6059 0 obj<> endobj 6060 0 obj<> endobj 6061 0 obj<> endobj 6062 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6063 0 obj<>stream +S0մQ2w >֘s*[4HߛF4V8Nv!ky1cϙv쪧4KJv<>;HBfZD6Nۜ#>^)!zjJ Y +;`(+9ڹ#&Ɖ'{u$7UV@7޴sA7g% luԄXdL%\v+$ӗ~灅;PV{:'!M|}Q.K!.k.!bDO\Oύ҈HQ?z0{F^E^CY,^ݘss24xa5!„;h׵Etg ?5ځCʰ~Y2F#uv#d *Z]`I"uq6h3NKy tsw B~9P$[wG,e6|%=7iJ):WŪqwv_r 5> endobj 6065 0 obj<> endobj 6066 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6067 0 obj<>stream +PA<~Ӳrt~X"|lLD)]{UwvEOK;uI/#&M#Y t5wW +hI33Yz=mpq} /{B1iELi3 8SAJ| wܠov-sRs,hv2)$xm֍w܌S5nbW:|ga1^Ϣ$+œ91]v5͉ں*kZQ7*F]fnKkF6ǜzR@ *Ŭn`dpBx爽ZnP%1L鿧Kk f pՃ<ďOi4nƢ4*=Q؉ Ga<yOܯ]tE%& xe7rJPM`Sz0A1Sfa3t@x(Lû'{=`[^RJͳui*}ܵC(w+4U1x`Wd9SOXݣx1yX}"J>@H~:Tʰ`:f҄eqKyw5x:mFSAREX/١1PSYv<?-p}kz,ׂ_' 3Ҽ#=8ʿƑXݎGϸj\]&[ 80:K_Qv-lC<-$GC∼e ߣJ<0Sګ4~ b +xkv yPO'1bM'''i8(U͈oKF&Qz00Ɣ]gCq;_hp5kPs9%48s ր> endobj 6069 0 obj<> endobj 6070 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6071 0 obj<>stream + $f{Le x + ^]EҔ:1_h:QnU%ٶVJJ[\kR-MH +f#yN$Ȗ.ͥ|4zO+fOqp"+7/:uGHe-&CQ%v\mAo4PF^ǛS<8ŤsVMho3i,iE^H? +04cs)7dA_׸mVKo/$ZR~̂ض\5/sQƘ{"2@8L < 6(;'E[w۱$m[NVGխgmrL1{p``c!8q^ҽqJ3]8 Fx+;@+*8õd=C8[TT{o!P},V jqwyޥy) O1Y'h6Q*|Qۏ==ҧK붫sQT5AVܕg,h=Rܫ~[X!xKOOU. }D;H;&Q7:7~o:li?5 Big!QY \b5bNee,蒢. 3/볕atUlZP|;(xN +endstream endobj 6072 0 obj<> endobj 6073 0 obj<> endobj 6074 0 obj<> endobj 6075 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6076 0 obj<>stream ++Jrw10&-%mʹnYZ +hk 9<{A3Z;3SՊ8͘2T#onCzj%kCSm*:'(P+ysq(=F,a7ə rMD$yH׹R6SԫKS^"4"w, =@ g@~<ɳVưDIAT3d຅t! JZn(s3oWv*Zzm@*Xr,axe՜Ll̺HUKL)Fkua=mS |#Xo/DWc Q7. ƭ0 __vDimqt盟A7փ +C5 e^OCl@Eϯ&5)Q&bGgwyXl'M,wSg ~< Wrd$So\2ѭ~}\[,tw7 HBf}k=FecqDv$JYxdh,Nmo|u)2z5sJC-DXyV%Fc7@/9մPŰ{D0u@7oVZKRAE:ԾwI%]P J5K*>vKeJ/IRqS\jҹ-Dj/Q\\Qa$F"۝'MC >ê$՚,KR" ~Mf*FyA&pVz'g]('|~pZ@y +endstream endobj 6077 0 obj<> endobj 6078 0 obj<> endobj 6079 0 obj<> endobj 6080 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6081 0 obj<>stream +W¸5%@دlJ5S83ȰyVwB}#dFQaἤQ-Lv?*s"?WIaeCtP͂y)31Vy`=f;‡LsûAHfmVSy1Su\#@ WHm'-.֠3+dL+ j +(̖7yybf?NlB%&STk6蒒߯"K ` +_a< l+bϘUFȮ8iS#Wy9|(uC7L-:z8xGCD3ٯ]ZHd_C<1 :!J?ڂgT${F/#m z[<5ú'9d`O>SnL;1BͶ+l%~hP8 \i %يM)_G RRaUȁOb3ߞu et=7ޓvL ) :;;ŴPzB!D шW8{ہkpljk0ԭڱo ZQ6{G[$Ɛ=؟0pPFXaָnBy'}H utNjB ~*EH}YtY7kj^Byn9Ӈ`&ë#G&rdPT YKu.c}[5ȅlBrN@"!yǃq0Xdoo>@#[?|0Z[{qnرNbѨl`> }gl37?{Bl/s8:|ĊM% 7Џd4?4~|%ZP|e\]ݮHfw<))9*?Vnubq~xen.(*e|FiԤNaO H8Ý:)JamlSCťC4PR'/0@C!DbY h?m]r<)ޛ8]s,<@|O!džToHPXM 0rSĦR +endstream endobj 6082 0 obj<> endobj 6083 0 obj<> endobj 6084 0 obj<> endobj 6085 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6086 0 obj<>stream ++&.z^ v!VY.\?NjL7)K(G)F3⫔_"링Z{{ t❚f=;Џ}L~xf)a 72U';͑(nG߃)\yj?g5ɪ$ /w +lU\q8, ҃?/2K JmUf) eɓHSմdRA]}fd,ͥt.NY8.Iۣ6x-YN}o;EנHFw=Bத SA76Gg +E%A{PIg?Oy~F"A<6?M]%U#e WΔD,wh^|Yltt|dzH{]tMN!c\و(y@"IB @xBnf^'eUaW<ּd*W Iyg.nNXnR_K&I,A~kI[XHy*w?ӎX>PQQ2 \E\IxFr^pQsP|cX70:Ck<2/p̗$}gߍa~̎7ʼn\DZ<+IªGѳؓJYHQ]6@ȢȾYc +o7NT4 -{pt֘b ZT q>3eGBQa!r$lxx7"RsZKG_u[`nJj\85Z'1O+cgՃ㺣y}D)YdH0lvB. =_fOYwܯ>>0RL}\yj[ug_# hrSҿ?IJ Xi^^,ÜbmU<" (h^J+'ϊuaN݋Jw=> endobj 6088 0 obj<> endobj 6089 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6090 0 obj<>stream +޿Ԟ]O9BνozO FIsz{j,Ȥc,I$o2D|">G2tXϣ ,JY>.ʋ~Y}x֝4T=N.F,Whj\"tyEl%~H+ 3g8f>kev8fKwwzq%H5is")1Oݕ4>>u{1"|+ 5x@bn_/T]Nz'!הyȃqpkuFi42OB*=*7Lazǽop+El ԥTFaO9Ivay ka=@#Q[SN"KD?!(jY#mAcRbͪE0,P! 53;:iu;0xU>du*L:EՓq@o$5'ε(ͯ`ZXa|#StLJ2;T)8OxWƬ\1 wfEGP@>n@S@ٷ\Pp)R59:r[Ɍg؁н +r\l #AV[_Sp8ÎAf U)K)\uK`3ѳC.{|"//OKHGQ);!*\GVu@$)GŒ퓨$#RALXi V^a8{묾h iWA%f̶q5P\w;{\YMcoLV"Cp5'AEͭTY^@hx$I)2HTywc&G@"J܃1 +&>Q4=Xc$C FX;m!˕8, M7nx5 +endstream endobj 6091 0 obj<> endobj 6092 0 obj<> endobj 6093 0 obj<> endobj 6094 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6095 0 obj<>stream ++VpP3Ro=8iȔ;ܒBW[N9ƯCq.cBͱvUsTq4!\$TJVՌn8o?LI;>fd-Y _.bB6o<@liiE,GB1ڇOztn!4K$ria7Wc^sZ|`_@gN#f&]sO+_k<]p<%S WZf^41X"/86ioxvt\cLl8a"t zoPt4:B.e +fҍwtH%Jk `VͷZ$l)[>xp0rk Vxr9:4 +endstream endobj 6096 0 obj<> endobj 6097 0 obj<> endobj 6098 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6099 0 obj<>stream +R䌎P<6ɭ79ݔ_ Gv$U x.icSbMcż1}n~>n˴Xsa ~R*\ ~0l^Bkx-cmJ/? =!H# +r(BBea"e (yM`^Ŭi"?QIԼeh|4eDIs1&/3:lÌ[)B*Hy !B͈7\ +tg(yЃ3SGXtk!0S%3ߥ)ؿ2qOǀ3y٩<47s3ʱ%=l 0-Dbܘ^Z3F:>4gqDt(h/s>(H2 Y+Hs8(Xc4Ʈw4,Q>Qn7eX>Z]pӉ,GS&_ϒ6BSk(-1w9}`:0UwsF.\:k֡W@ +v`x\b+Ӕ:es:g<1 +gĿ ,EreQfb|:#}-%k*+I RS#d}ar.!EUG{G4 ~6K"8>&Ipjx abXJ#͇A=J[5V5(k{m% +"YGd]T<ȡRҨ+DkBe-Wx([]@ $Cfed =V/GliXmVId5}*4 +yvtPKn( +'<8aO= f +mF;-f¦ᙁ^r͝=0.d6@r^U +"WQi"< M)xd;)JZ~Y!W&U8gRnzFo +endstream endobj 6100 0 obj<> endobj 6101 0 obj<> endobj 6102 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6103 0 obj<>stream +ն$Xy}âiBF  02Glھ6&=İ'Lk q^gW|?Og3/ל%7%j[@@q58o ח{1 V.)UN;P^ PHk D c)?K +}`ܺt1L|3Xh_XUe-&#{Ac!`M +'_ۦtz@ /M:eRPqf猌Q8gA6-tRJ-/TمjmߟָcgeWZM`ebSar똱*R.|MLrNVTQuTGyr].( + /=Yvw;]Yk`wy28L_k;*U"h8|rgFv ԊnjVFQF',1.Cm{瞘:קE4>u/ZF\iI-vpu@9;$eeՑep@jp,B|2p B[ZeR +%?lv)hx/BP%?5 +wjbFrѪt-~]ְ~2n60%XѝV$.(oep`@jN7 +UGaM \$bO7,B^%(cf4ZN'8U}ng +r0.5k]P7B6|6R>n{{dj' +PMgXҩ5:r0{B> endobj 6105 0 obj<> endobj 6106 0 obj<> endobj 6107 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6108 0 obj<>stream +;.x +Ӊ +^{,}MH/JelG_M2å:M4UI!~ :=b #XaHíȒ&~=k23)gӔiI<4(d P|(.E S ng'Lz2nnH?."ph/pܵ8$u[~ 48=賯_+|)/Yq3r F. }is'FPj;' +&cyf~d[SAgC]\oS|F9jjf8nӦ^2{\ +Y)_ZmߝZGNzh +詉~qӨ#Wgi.Ñ`-V(VxY3s ?[W2YE&Sܭ3r|;5MR1< >6-4a$:Qvz?03Me[Q>oXjiD䥪-JwMe} 5p=q2l|@8iDhm+'O]bxgHlX6T[1bZΐ1y |šmFǐ)Z83Hu> -i/:؉aΫl:S]w//yn'hXMlԄk#c!+t&ݨ#) 6j~{0b0d2t. `ËFs:Qo%4b Lb K%; yko +nYy𾐘z*0pQ,,Ǧ9w *]*;d7̗6tAҒ@]e L~_7KljYyc?m%Ld,^#AR7V}x}91َaxr^&ux1ڟƚ #+&sg]"wZW~&ׁ9 N^s71 +endstream endobj 6109 0 obj<> endobj 6110 0 obj<> endobj 6111 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6112 0 obj<>stream +Lկq 0,yHZoʌK,qFcPV{st} j/C¯>U Xk[SU0h1hWxa*LĆ\ԍniI"+D? k!_ffHD`{kVP*8ԽIyEx^$gݝn=Tb:Kf B<ۻɌ'aL))3mBqSMW+R!tƗw,hZˌp] U>4SQ=RBzRTJK`Vpq^ +1א\Jgy%dţmPV6 aRV8 )_2CT)yN-dal b;8۸m--]p/G˩"N{t6;Rʄ]1Q=Jgx+M?EWig/JU Rţ/_pٰBp|S{aCW @ʾӂVݛ ˆTX%i6ᄿ/Y=yA2"p 㹤AE Gz7#U̶jgN&>?2 |}L]i+6`Z-;B1p`uRtf0{ͭÆNtx zIg j'ՒC"j4phv$dᇱp,kJ^6^ߦLpx5) \p|'Jد.Nת+3Ͷk;"sXYVxk#bxfjnߦ oQw40 +Nma# }ov^0-WH!/7. '̉L\a~ֻ^2wV:wĂO@.ve"Ue0+^ڡ&2UAmb#Z򇆽FG韲/A1]ѣOwV!](|,t3d!qP(צ3a( $B|:?yM! +g; \>\_D[Z:},,ȷY*A5J$ +endstream endobj 6113 0 obj<> endobj 6114 0 obj<> endobj 6115 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6116 0 obj<>stream +K5zQ/NprIX^]^S-lLfRS)uE saIWhY\n'YՔe`gpkJ$г!HN!iƽ$i@D<"f%H_vv]ʾ3 __t۷ +TW:`*E|1Q-M7Vu,3  j'ixC/ *6ɚjoӻ#-J&e0m(p܅XyF!DrFcBT:[T.PQ'^U2( &&(͊|J[,U8z&} ZpD Zq2)c =T9P>c*=^Tjp;BD_T5h,PʔaWϥV GEob B2uYS.)7nC纽vDki"w#M"=k +%niyg"{k{ <5sÐi<>lT;1~2|m*AL٭ *P #aR/2z3urEp+dcZ 5 +endstream endobj 6117 0 obj<> endobj 6118 0 obj<> endobj 6119 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6120 0 obj<>stream +" +^nW)AGƆuL]`$7dxt† Qғ[ӎ]bb ?ԑv&(D77͉ͽ#8סrk0J:~/k($BqSāܳtf&?m;F7uHhZIVrLO(Tonc/>d:pܔ°ۊj]9q_G$lca47=,D_6(!i5A?go,[G!=>Uf?["f i=)X=,v p{`wiZV_PA= x cN{QBvF죟~wu,Q\Ԑ'װԇ`9Ђkhȼ4UI֮b'gFsusôF(Q&9ִl\'iY)~ yO;CEۼGZa|ՂSex}|7#W6x^ + ڱ(tĚh\&/P/܉6[p@ >fCdMe-?z pYۥ".8}eDd!oV0%ϒKΩ=e~I*?4ZA6j|;kAJ ǔU}1zP!FgJ }25R@xDR]7Qy/hvCw/QCƦڀȹTNvoz9MTMdܵ7ѐ%+u2bst{3uA|Ji]슃n[Y|Uu)5 +*jg#Cql\kG~כ_h'q_̖l\>*_fc?}l@+I&hESq@@ZM-Q ~:pjCh!#f[󿅲YYIVۜ +endstream endobj 6121 0 obj<> endobj 6122 0 obj<> endobj 6123 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6124 0 obj<>stream +CqI33X* :TdVϜ{B'PFa~v>3*hr$l;藟@7"T#}߈e(طL $"h`6t 0Aѱf?3 ۺǟ̾UVYau8B +n3F TD>cBc+7N1EE0W)P鈙RD +dFk +ب^XT`,xKG.E/7 vn57D] 7:Gi"m/{_| i*²pxI'5 _M(\|bL/_3jo!2K/gt^73ِ, + ((va>퀻[$^,~ +њpWʆ ^I&s^|hC9a^ OhMy-^hx`/a`]l|~IYqNs+PB?\'[4Υi^bDU{R㸭^r^R2Rٌ')Nr^UML1֦0r+'XO}L&`6MvY)&;yBem5o|4¯L<5>iZnڧ,m*|m,5O+ȥe8S@A- wYE"S֡3. RM瑵)}6W|\ 2s$un (&WC7-4d%5e2`u?E +:z37FŻG`JP;U}j,ܑi~0lA?vs`riXxOa,bab +endstream endobj 6125 0 obj<> endobj 6126 0 obj<> endobj 6127 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6128 0 obj<>stream +w&ȏ@Y\AT^4_N?6J^KTzCVQ?⤴܁,>~'*޲ܗ|$XدjQȎ](& 6F#_(23lћݽraIe1 c?n:A=?*T ̍m\/){3|\"g=Zu2?f9/'e8]n6%#K= Nk" ;ԃ(\.|zȺm3/e~Z3 U:[Sc-@C `16g)ֻhj)+5ZkߝEn|!ȧP7fÇfC0J_N-޷B>8ݯw5OfP9R7)5x #OJ Jy/3^..=ގU:0+ Bv&y&S(zbTomG4|'SD-'r@\>-$XAGg)lbZcZNn;#!+}ŭJeMphQzU3 4JEAN) +endstream endobj 6129 0 obj<> endobj 6130 0 obj<> endobj 6131 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6132 0 obj<>stream +'itI}tcQȼC^p=dm@ ;Q! K)lZ6b(I6ewZ>D(='Ոgiؘ0`mN*8Hm:\B\LY4 a1:Qmhp>}| gY_{%Gu@>¿ +4ޓ{K?՜>,PM!N#.e뛇\yDŽ܍DT/Zva=A3~@3,־bs9U$6?`r\ά(b7᝹Z`a "y$-ʮ +?jˬH}Ǿ1c.Y~|dWn0m]VZz#o sy\MFD'|c7mltkRZRjoZ^<oK*F''j"̬+O3yW H2]][1m=kR s9%G/10A;Ꚋ-u{` 4&">c-@\{h~h9;wvV:7{ lKqC#&Mavf&jb0 8'yBO9TU-,+ox*Ng&ɟU1kMBp>MFhVs + +KHʆar mfB,Ǚƕ@LS_=\3!,$O1#ٷMYESR!>,"ʚ Xz> endobj 6134 0 obj<> endobj 6135 0 obj<> endobj 6136 0 obj<> endobj 6137 0 obj<> endobj 6138 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6139 0 obj<>stream + wmd4_Пp0* )AscfV9231&豾~2;P=!7=>=Lv,-:J=m_'|ٱV/&ot,&qt͘f?iDTBp&ɫ. +!وlnK x2fU5D@&v?E0 I2hI72o f1ĽoH8G(G ʤrjvY6j4$d7P@h ܳR\n^= ^v7 +yﺨnf&[݅yY>0>WY0׃^[^G̹mફ55Ћ24U6w}ADqFB&W"1g&oƉcK).e>i+lS)ۿōLZgr312adĚi}Q*Uonpr[A⡮""=Nv;cDmh^}!ylFɆx|};p-3Gx2/s(6M~H̜} ; +a:C 8];t'5;m<,ѴMw~(I nR";:Ts*δ +\2]%J j7_]!MJ5ަ 3Z$35gř!aKU=zwO+VsEH97[۟ ͣYJ֨,o x) 1`VˑWU0e'jF | 75 qQ+<He*\CB & J)EKvx)AG%UU';M dN_ `˜{O}0o*g0Ӏw:i:9 +t[go6}KHq=)6w28&+2^FVWO\;GN jCyOc [Coj3c7_`Цb7A[9?ͽmbj18)`'J7[a> endobj 6141 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6142 0 obj<>stream +3ܪ똂˗.9+.ؠǔ'o<1'ӓSqfG[qLK"L5š~vߘZ?zMS)R(MDإWǩŖѩ iv@7<$8eV$sT;~ESC:h5Up*iik6$v+*$i8%e^ @`MaH~pWŬ\aے%o" 0@-w#<37E,WR?Vx';F0eX*|* KBUhw\ gq9a8 -510p0Qs^~JWd VYqxz~C~D^UDw@Wݹ] q2 +A!xQۇRk>3qt;gGHkݼ¹#(w!@*{a0S+ a^> a~ H$k0{}j ͑v.wR_(\:XE~0.M"!b&SY|sRٻj!@/*9O G}_ǁ{9ܚ.h̆f#/ja&Bk84GԔ@~xF8#*DoahfOiT@ +9onXm_1ncPBng2&MHK}_jQ c-H(~8}o|P ·s}>QO ԭQc+f08ZHvb$GOgZt+8YpU"iS}kcPŅ,kV+KZ!y[ٕ~^vlxA$Z6kQ4^4{Ra.xS!򮫂3YAj7d7Jd,o[Sů¡O8BH`g`-7UfN ~A|CtϹ +7a^~v{k/R#ވF-Y'm$  +-x_S:Y0LcMyޅBI> endobj 6144 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6145 0 obj<>stream +#]$}G\.Tq*gU%g +'- _UJ=AQ>H# @(HtE1+h-7a+x/[֑h.FgwPkŸE/2F+90L.yE:6k׼}J֗c+˗VuJ&wU2a`$3h@4.'-~XOfi\ B ZR 'ʊퟱPˍ*PۑYOϏ+:\ +>uqNǠ4+JΕE.=};%"p"VUr0^k1;ΐB)D/#cP{P8M.@)p*'_Qv [c\VaSYxRn޹ Ww`U jxYDFߖ84)\DiC7cCǮl}DFS'Ɖ&1DT5^;j_D `j$`k%s!U^PG[< +DyHR';TgIFFi +endstream endobj 6146 0 obj<> endobj 6147 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6148 0 obj<>stream +=*)ӀӟݚsK0+fݼJ*'&Yӱ3Z^r+t41(1? ֲ'7 ;3vv؆s:g$`mٳByC)]Vb#$z"zo{;ױɺjvTL1­10ts;@g)Px1#Ft] ՀɌ3=;jޥ6 Jb)jHcTa- EzfQ@ 1xjj ([nf8A$Po^z iɴxR#C_hJK0^^8K2s$rRb}Ro>ogɲwK#(c(gy 9eKya?WH +endstream endobj 6149 0 obj<> endobj 6150 0 obj<> endobj 6151 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6152 0 obj<>stream +/T+3IlxPn =ĉ%b*P vۓpz +>&ڒl6‚PϑH0,{Fm^ R;R5IVQ{PF/a s|b=:Q +W'4Ɠ4Nqں_yyJH~pKF@mC +M[9C;}ȇ{Db[*Lzy *iטAX/Z݁)}cJ΋HO$4yC(~^nTD8ְ^rȑrmx|Wf0Ϊ.X*reP'.VEݥ.C4,a79e0x[iBۃ5:ԑP ©&{x0~\'Ӂ/>G/ĺQy@;Tķ|e*7:'bMP.3˰mPF[ΑO)ߓ|')ӗ{ٜ%+_/3+o.̩"|KĭݛW$yoٴ?Y^LF &P\f©ivA5ΐ<|F|wxVlnIC<'3X݁A_{le¶NڳTpC.:>ΖjQqUuqnab +P__M8}xJzbQAV_#:բlK,׬=;<Ŧ2q@5\8z+mcBL}NϵDǴDưUB9ܗ-*Cs@Z |8UOzHh i9^-`.﵄PAJ(.KK2j2 zV0RDUΖtOڠ"Dg̈[ +pwKxb0 ]`ޗ,2Gg&p]BYz\ԙ +endstream endobj 6153 0 obj<> endobj 6154 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6155 0 obj<>stream +Z3͕1[gb$>h끐 fy5BDFXƺ5x@ռ}mPlu%S3nh -YAN/ +Ir۪Rq1o9IƵkmb(Nl«D~23 2IT }t.@^]1rx09:73 W2oo@~Hm3!D!O2?Z:VLS5&*n|0Dp#Y Vm޾(8qDmW2 L"AHŞU Tze?˓ (A=kS C}*ec%ﰁ]꤫tԦp h^pwl?s塞AynC~ќƣXvw2縓3*nVh$3D2,N3ȿ +~t1`1`Z~ gur> endobj 6157 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6158 0 obj<>stream +ũ>NjȓrkW}=Ǒ{C[SbA/,%;QySG5m36TX_5w{E<~_Ţ'i%n/ߝzl ݬ=#Z c%~L/.aC ChX+ \ތj?v<8%O^zD<#ؘ54sz"Dm{@Y׫ v&{s}܌F٢D+(ZWfV^)tIC+O.}BEd8 %KDQYQ;}v㹿`^48|> -Y9XmttցQ%S|bV;_äY?z tƵIiy> endobj 6160 0 obj<> endobj 6161 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6162 0 obj<>stream +H̃h mV\m܀_CxQ /GORR=zH 38j(k3/lŹPf-OP53h8@> "JhrPЏcL`N\qr (FTjM~uTY6gc}tsՋ3Bcӓ-#R^,^hBoK=[]udL[AAnA{7g;Trvg1$dSXF5/-6Ki-TV+YfX X C?5DK5N5xI u߂*d`]w|$m.1_xT:Dו8R +w,|6GpgD2V +X.O@4_+B|g>8Avd,%8uℂzC '騥?vpwr +<0G΁tVPBnWsiwc"MŜ['f <`&;#d<47I8q&7èmA/3W} =89!MSScXs"ȩ.9AWH‡wkaײe|~ V?I}PNECaS]qƿ9Az$W0A.p~/|g$+v5\!p5MN@%R_ҭR~IƩ)_L tx4lsoS+~@8[ӢC)_˯0Qk#ov[}EG.4B@FFI%Iգ1p.Al̙̉ld49U#Ebd4/nڳU 53m92qpM' 1rT9F5Tuҽ<; d0;oΤHz:RD]t5u a;֖yιu2/xsrHA!R$:V2u6'#({ePa@5@v}2 N`QEel'щѲASc&Ȍ<VYyAqh#vucHܭ:9u_f4n7 t7t5|h/'W<j5H0V^U4@Ja#×{Jg7gm2r1 >hxHan,. +endstream endobj 6163 0 obj<> endobj 6164 0 obj<> endobj 6165 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6166 0 obj<>stream +L+jd'"sx Wu<s#AƊ?n+3.3-S`ٓ<.sp.Cȶ:^1OT_)yi3P>-=o!f $4 Y'^-u>Xù$kthH݊v apeePнʄlKZ ^pum0DX߼x' G `Ϲx d'!` 4chy~.pVWiG ֓U/"_K y>WS[윅/ z3m@ #5?JCk5}e(EZy_%[nDG/TCl iuCWQf6[r:ZdpWNW"!J.c&}`bKLKKDq儎 ?Nzct:bևߋQSt[VG6j'ctj+C`WDN@[q:AaA/+{Ka*4׻um|U99&ԋ <15W:S{l)bXDJS:$/;,/pGRd] Ax0UZ9]۪O^0KRIVG^]k;s@U- S /D +?oej0E&n\*!FJ|TIgvqs Gx=|"3:Xq8Vd/ބ +~]nB pXv8_½h^-yRTuŅ2r3͵JʠcnupBZSSEOb4zJ"Եw,9Ayz -a(1RF6Ce?Ga)~eL4ءsskQe^"q!N֦/I4ٽ }T_oĬB9Պ6ѴڒT5F=ġ +endstream endobj 6167 0 obj<> endobj 6168 0 obj<> endobj 6169 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6170 0 obj<>stream +]I o6O(}Jcʒ ۖv6"n1Zs׌b%'p|P!/|ݠ)`p)EVm(]x12 V?Yj(Z/sKP2ǽ=^j1fos\e]Gi6U3'FǺeEzO`{IZ]?:$:S7[oqb)ޤ(M@<,'`CBcLN!7E/Rn9[_FCz-]X7m Ӵn֞H #cLfs=RrK"WR>)\OoYFH.кԞn%LLⷉ[ƏZd +Gm" 2j";#j}+ظ~ l;牳\V4aS bGOJֿ9p"y(?H%nPK9&:4{&viF%@0LrDO50ICYG jg^lq}1?+j%>BwۤǮwp,dz"2 gQa?zUx= S0Sԑ};tnEvs$T.}]M$nN嘲D[XlPY/<ͻ ,%>;k:p6Um,w #rW'udz{"D#`yQ/TS׭(SXeгFދ\ࡕ"lfTa*U*;OT"ID] +'mF?־Pbq7!F`]Tm=wsBUҒ#~9I7`],^u(||խy }ҨWr_klJZE0EjM:C0E5IPh7ȫ +endstream endobj 6171 0 obj<> endobj 6172 0 obj<> endobj 6173 0 obj<> endobj 6174 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6175 0 obj<>stream +R;0 4ES[Dߠ;zܭ؁[7?pʂbA=K$ -/1Q8t$_4UM;KB;o;4,:ֶ0?co#@ۍ?zэ~  |tSQǹp&w7mV؁pfQ}HÝ) _72+p?g^Jf3KrUj25(@Mc˸\`϶p[}EnhP;t_.s9bStE\!&WB+)O>*uy[x> וPZAq0r_8di1l"Jqf;d?{A8Cc%$3d9:um@jaß39{b[*YMogYu?Or/&wP|`:_<~mZv= Ֆ6'3lbpdlrɜ_4 ⤞)v0+/cO=g'ԅ.\hn9nh(r?)HAj0t@u,0mXM'A14] ь[;[3U#ɥ[Qj[y)z4b;W[tq7C#t,sYY5]D (x$] /3Ӌc(܌?4%k:F=qV5Y +p ͣX9 +˻MT]bKW3Y]ԧtq谐Zh"~Cϭثki$m/;ų?Lx+LO򒝂20lOn +$k^G_%HFFsα2,,^*;)iIUiR* ђ= v:1 F.֔z҇Hv#L* dNjuC#"7$CV^\u6 +endstream endobj 6176 0 obj<> endobj 6177 0 obj<> endobj 6178 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6179 0 obj<>stream +)1H +:vO3㑸giԝo11AnZek1퇐:q'ME:4Yk,Tg}6JD@ a +!8cn,p쀝B+X$|@oǠbWU ⪢cm!H X7̟8Wxff`Ւ̥`887SmhHMȯP.:fVñpi2ʔt<}րCl]C-*Bhpf paCA{d ~y+<ž|L 5-g֛~ +W8t] oh/^BV]L&ao}GB7 Nt-*c> aOcFcsn)4Bg`+N#jsd6e~8' ¥Yn;BRF!~L +Z{ؽ?7y=cȐ!8w]tOE1"+CChLO>HjTLĩz}67Ix.Fv%`=Ԁ}{mDE!MӢ> endobj 6181 0 obj<> endobj 6182 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 6183 0 obj<>stream +^]HNg&( nu VܵD2me*r F#Ȗ^|&HZx +lH2B|BznOvć^{Űg`P-d߲,n~- ST*#9U0PZ*S2։}D@`T@Vet=苙3N/q{5uSGu+- +a-(Ʃ;D"ЙyԤz4.` yZpQF;&} [bfB'H.X'a saX`@ *Q [/t4錦FVD;4} +BN=5d|՗.M}- Ƃb7pJq!g.y~orbe E&0u4sB,aW8aLGP:V^4JWEnDonwRۥqpPMX$!}65D[r3JR>GFji/7p&u>YbR#czo LܥdoănUw`-x(vfY_=̟Moo9vunX14669KX + 0*F'4 e46)sʲe<(+&P87Df$/PYw$_4@Kxy\IL'QP#pFW¾}mˇ SUǂ85k|!8m -ŵM鰁¶΢j>]u +R!WgG@R#gsP'.CCVP(XrSqȴu֘M_\.ϵ :جmzo(X5Mdc7U +endstream endobj 6184 0 obj<>stream +U,GHF&1;x_6b}LХ[NULf2\s" +eo/a{b,C-7wVPlS޽y$' +7yf.q#7ﺵaj|勜K@KJdY!4[ c-JTifPq;@98l%WBɢem*$bNXTⓏ\63AfB> +VLsigȦ)Ic]{Ӝ!Yhݴ} (6ϦS-sV<uQ̦,dlraxgb~ϯ¤6ZtYnL:.}0/h6TcFՑ"5 twTJ[Vv .{Ѧ.hA0!Ўa)bv">|x2݋oxت ?ּ~Ɂg6d9X[U>yR6f1J:][JL؇x1B-!Ӣ_4/`YDq#mf)xL()N^wSX7eyN`cMVT!;x#{Gyʖ^F=~mpy lkAidմ@>5|Pm7 OUwhij`[:.a6ՙ.G%$өZ*pG@$bp#@;ۚLmW¯)_?bO,ި];9,Rd'nD lvUWXmS0 Gv~bFTLovvZ Y7EMzXp> +KoIgn[0E|kD3dI\p#e,'GtA9УT!CjqK-6/an=mS@8e6iܲhH-iMݟ p&eO@R]ܛ )kG\hA>IP F.z!>}8~^hepխ-S=ȻV0,0Ei:Ǽ +.yAqG=Q VGNdk1wд)=&Qx-(3BY(K4`/ӧV}G*[~'F)Y]ǐ*!0D(5=!#E*q) #mtLec;ZݗG2̇᎘Fv䡧$a~{Dž IkZB'Q > endobj 6186 0 obj<>stream +6|fX%L[sT0ɑJB5r#@ +w΅&ۺ=Z;|.YԖR A.}z!_ўLC f'9L}F0bhDJ"qgR#1&f`)sLm5[\ mg {w!3UR# +SRwvAa0-ZzqYH ]h:h2nnf\KI 5 LR-N>SosD2ơPˇljx:["rVƥ|6st85_6N:Sâ Jؿ#Wc06+G8PMszPCmq҆@*`X "pF( +rl'_7$FbQSEjP|,j#ϖ!z`7ٍ;o1 I~Ljolpog)=\db +Zg.r_{}w&[EVԭѐ)ȯQ9: N(q&f̭E}{@r8Z$HgN8[Gr*F_K/zx7|f?\ɬ_ $aHhnNs=6/ē rs|U׌+Y3ׇŻ'bƩ- (1yꋤRN 1I?$# L=/܁@ރ)mZ#%z8lXoW0ks,IOx0.X ? x?KFY>g2`|#iRμnzd՜d5ܩЌFWЭc@Mivb}6IIGasCd1&^2b;TM_DBvYֽ ,c?Al )&76O1NZ N2^gՐT NDUo9.;ž֫@5! +)yA1&~)3Tǂ  +eЧDT6/k4Ԍr3 Y_,G6,-;sknG5/]ҧn/"z[ JƆsk ʆJ5az|X|H659$.1&=Вbinb'%KG*Stϣ^ovZ4̔e /MBinm᭠< Nfqy_RVɃ,dޔ&7)hү[ Pw8Zz,@+i_*dC+A'앞j`]y ]l a}6T( /4Nr7R|ޥpN +QJuUj GW[/hQ-K D- up;!ۦ.?%ESz~͒G 6̢~ˀC@U Z>:Ntx1m킃B@tk H=F͙&IS@ʌ)LR=IZlV)Ezu6CAgnFCv9s6"bf—IZIG VZZ\򋼣ٻOmHXvj*"-ݹIG"ongT*%vwo:**Q @ nka4 +oJ`}k0cCSjӴ;Kqh\rVnla%P[6ACI"}tɈxABIFr\jĖh_UPވr IIiA,(,Pzdp^ ^gT& Ta:@/1~G̘}!7ϔihjtq?QI {¥`]'G; -iaKiԕ9}>S+e:)9΢}NJ3e#L z~ d=eq:SER!5pga K1S_o@ z[~Q(}U==B)ZZ]^?D:]'o<3^^/^U,L `Hqyݐ { +o)K+RpZG:M֧F䥶X)듢%+g.\ D2Jxof-ST[R va;$1s_fyQ~R+R3L fKN -dg h׹J:UE)y.qC`4!@+"ZSmFb&L I߮'XU2܂f{xj m"ɬxJAI2^Ud(O8FωqkvG^!^^{~E#_o@! +\":ցLx.Rp :{;3`N.)lMՙ::e7`d"@?a´v?a^9`?zhFlN,.`XK hϼ@]2o7a׎.)zJLsr֣8#Yw]H,6?"03-fv7SUv X YgDR\xS&ׄ]vbrުM[H8Oa9-aN_=|F{:. ^#NI͠P+ۜf%͖A.kq=(NԻ\p u%|}9==q;RhSG#-'K\#ʽ'}B`&/RtIowB+KuZ/›`bYSP gqW2M#6 eMݍ3"FW| t1+qqa-P`nU`*"Td$n/6+ᡪ`i_Rcxԇ ied8Htߝ3l:pN I#$h;>F{̲(HO9u}0Y)`jdP',ܻɆ1 svQ:wD.90^D(f6[.جE-9 CtU˯, 칒޷gϽBE?;kɨcjPJɸhswr-yـ]2A('g-)TV% bt(bpOnWf^m-Ɯg!,߸y(LW dQEOz@wp=pq`UomHg#賃l+tp~/N9kA((#sfb\hu::gY`Oʯ" @] ƌ &KWg"zDP"GSJurNY9yH9 o62!?ΔGcK7? +)Wdۄ +œB60sv.]]mHyryctPO.{B!]9s +dE/k8)@s,s t5}^$|(3oHHJ)bިwS:St'?='7Mknp`Gc{ڦ#\AxLcђB;ф}^_uz60sb=aV܈T)fdQ*!vUϮdw*Jd洔Ų,@[\-ȉLYCVT1R%!S%Ψmzv N+a˯h?l\ĉ֑bd$E7bTbtc !d( ꅲm}q$6dK'礶Z\_fF%8@4PT7`e3Q`9aL2FQoP_ͧ8XuY>)@܅n( eT9ۼctR{+l]@2CEjۈrLUtMho:z_8'ܵCQƮ,fA:mR,"B~r S3\WFIaf_nxd?;":U'eׅMʢs`rv8rF !E/@pE͢/8nф6WRRZwQܧAH64@eiXl\,"!'eNolĀF!V.zP3cX<7;ODV؇VǛ+ |50:_me['%ˇg]Ei˙9&lpJ[f6yD~رFgՔd:)Llju({_y89<(=mw09ӹH'cHU)f Y^bfm;XA5Ee 22O\?8#Z"v|.ͬ[-5y?G2وҬtbD6q ˆqaE!c9-WWu{cNICwER^ղqN$/h-'Q#"&؏/?4^:bۜ5d*iN`ȃ-W?Hrɩle"-bMA 7s..)Ap=xH׺+EP}B#5eTrb'*%Q dOQY XG }lPgG杮Q6J8o +;D5C4q/ۼ%|zZhD| +>L'(,0̝ `Af%7rCķ ؊h-2N5$TJtIągAlnΤcedĀP-H&"/}*wfI}3W|S1ө=YqKց U!4OفEvVqPTĮ-bEr RvDlݣ!Y(^d9MldB'eldwyl![1P"\JC%h*ķ2Rg5tЛp.g?E6ܬ>,S4eFVn$/)lw!mqulKyl .aLtu|zOփ DG7<^kv ԁYZ†ȶm&pG(zdžkg"A-K-3=;QV+d)%*z`@;9E $}/]6hWw + Y`ld؄|v5_M @ibn/-yE2qL,H> \a.@ xd&%RQ Y 9p"kg=fR֫&AD(%k.sK4;ys!z%+~uʕ/i!=Ve!aUh4!SW6Kʽn87[9?6]pL$FLS 2I.D-1@,[tjB$)GS\že= f.Hp?%R?>hDe'ao*y5Nl62"uܴxޞyvMe3(C55T2pMul{h x>$1{穫CmoY ũe^C;eI :C&-k]'cx$4ݰܖ6 $>Vq9PQq˼r5G6pL4Z)?TP|vb|qv 3}LHN懾&Ko1aKInNӴ>.ƃ`,[:*' qQkoo9W^@~jvT=LT_|\-TأVv)EENq)1R 2[$+ya6ew[' V)<$``nhG}"`;:c.&ckk|Oe!4 +@57'a$!0uOk}NͼcA\~97 >犫Le z n‖)..g1a +KwTkIuJE .&-XwQ(ľc-{)*ORp¶˓|Q%㐴 _%#7/HS2>XgLj^i)"vsO'Rlj9"8WA@ͤ`Qm{@ >@n+"due T/RF41-Q&ﲉl\JM,f$7&-^;EKI + + r+V}X9)ߪ1璧erDҝ h>^i ƍ 77Nym!Pe+ndm_Þ'qm.8Yz%ApW8=_e=mA@LL}I/كnYirk] 9Cf^{ aXat092P'clZ9:(,6CmJ7"ӏC:m,kMHF;(AR2Ujiz;@]群+BbYRcR" }Y0*_=Qذtm^M3Cz&\NR+W-=\^e;}@f'ćϫ ʚBc]{Oz.S_*;m2̲bimb#/)VRǑY8dEv}pZ9Hh(+z[3C,oA&hF PCQ' {f" T&TEUVK䖓|)s~}h<9s@O7|BDri37Qҡ6Vɢp/&S@?FE&gz&)G:ԮWVU0I؀V%Z8e+uB׏H"{Z8 +!?_{'-*y3Hy[“\D&D_I6oaKfrħ;Cb+Xn%ƻH*83FxCotniCR!}d|߀Hpҽ!cs [ǮhamL̟d7@ f#<7#!6V1|y(psOTհC?Unę M8:p*xP0lhHbDņ@{PPa.]]aI^h0qN)2gDs~}9~I҃-?K6T_i +90)[.ZDu(w3oF(]ȺnΏC"}?c2(nFf=g:׺"4]΅(&H^ + BCLLCU,?-=8RؗkV쀎ĴUQVt-.WV=*YtSJ[!3L*9yͷNk^JgL("|Kv&}6'H{ŋڣ~,jPb?VƻR$jDxƋ̉ɒi %61#CFH@l޸R0KV"%WA_"'FEIm?.RӪ`'9+ g={ ?k}DBkSax&'5/2q7*UT(/D x2? tv,3`YDzxWمhUdxv dx,҄s %<PFt*TniAA_]/wBw޿zvfR )&Jn6B+tm +qQ^[Kŭ(1w ã5Cm)UV)({$9I<|ؒJPG꟠S{H3^A@ Uc FGDhAe:#~&VL(Z8"&5/zz"g[J'yD - X}Zj;4= κkԋZn=m[eB;![TYu`w^`K-y0ٙW 4WSkd$o3ڦ%퍀Ed#)g1A:fgV/^Lad|CSAB:N="Q+P.alY'o6"d +Kb>Up3K<Ë%n4@ψo1:U4pRݤ coC3x= ̾?wCyIۀ'k51_RBNhx5 %l0y?+v`&A#ֵrJt?*\ 6n? .:rkH $e-tJ4T)JN=dҶ7ÁFRCtn,eLJPXB4v|h|BE(gD6tmб*1@_9Ԡ>jĥ/f6Iiݱz6",H4ŒW,S@jg>"-Wd +ѮջAW[Sbؖ+Otߵ;o0w_Y*#$łN6{yۍ<[+~ж皾 3C]mL +$ 26UAd<4E`鵌p~oǘ~cVID\cxж>B_W~'n+uВA>n)hIqb%]hDyF쯅IZO.gӀXܞ`Rhi?rG wJsqCoIn~FQ7Pdsjh[=$3Y'7%< [2bȬ_yiLFˉ| sʇ) 7,jLR%"yvJuFŨ&GQ1۲{кn#T)ZN;t/Gd |< +endstream endobj 6187 0 obj[/ICCBased 6184 0 R] endobj 6188 0 obj<> endobj 6189 0 obj<> endobj 6190 0 obj<>stream +n+!.w94ʶ#}ne`&:Z=f-RgHIl +WLq{og(XӾ.*?y#:u-Z>{e"rcax,!H#қ%+ .=;sLv1+ح=@TUÌ'чD!|Aޫ}:b]L9:K8&ިR:n~wp"1\ܕl%`La¦( ,LV'c<>̃b7gt:k"#'1؝L궲пߦLkd^klͬvXΨ UhE?8uE/%\ző( fàYۈ2{ڏY2b1iFO qQyt͘: =s,9gѡbܿm`{U%Qᶧ~Gg6q8UL~ܕ[&v< TKW*xݕ ys}B^tKX]+L4E,Q#T|7  m7y"Ѩ4p!IL&9kZfiTW,-n 86̶ϐY,'coGS4c҂ol}.&8Z0dDOM-&լu(N!q<;}iTv,>6Y1-mۛbXrb;׶n@ ,{ ?Յ}{u^H %%a^IyBjcSD˯@VHiQ]|u$-2߃wP϶gX VWy_tHX0r㱣,F9G8C5>Eaԥ\M(~".k1 +;ZszBIX4#ʃĥ`a^^k5= =!sdN8JQY]1'h&?)dRj8sj9_wKs=doZaFeAmB۶ﴐ<΄Tw3Y\dG s]򙤌?WΧħYP6BFGI"xWC ySHᄍ>1U֭aPD9B`6D8C_6tKK 4M4 2putٛšzd%Yuv4Frggpd}VKtF +Ønw=XtMZl{M9Y Mo7c^ + +7(v;M deUZg%6!+ V64*/k]T o{xC/T(NNc ߭YAzg*Ku09+F&Eбw` !L>Ğ?68|rZS@~`HCj)FPcd%,$ϙ`)D}Lׇ5VeitZk&wbڵX<+a䅣ѳf +zfwf'ۗmbJTX@9 +3h:.kJ6 h \t%ʍ<]8s9 v{ +=7;2%CF)VVM.5BDt6* -.=z=/0EbT%鶟P4?["ϢLl<р u$ч'ȩe0-S8"Re6Z2jN 3<)OaVs_i:\GvƬH72!aJ,+SF6gs2;`[*&M')Z{5m0 5#l Xȑ²MBчd[:&*+c(F_nM&$a< ֤'N7iaKKG e +Yz-S3 s74wūhɝ}Zlvv +FiAޕyVb6&`&va[!A$!)?Ɲ=wp@SEpZW۵L\V|-<N8@<  &? *Qd)tc;J?Hsɴ ^'JA6A3D~4 s"£eM,*ס;^t"#rzꅷU&:# o*gDXœSO"jX(#O*9mQlрPq*l[i +R{j/ /;:j7""e0Sqr%DGɓ黀LgåBE=,XBc۳? Rϳm;g3[2d_*B[~@mdz.d.dYO*S,s>skcBxſ9y6ZRĚeubRص9fH$8,Ipf|fj  V=3sW:ͦ-LG5Ffqѩ-h%Z=AXLA3dJݢ/d^"7~?:c0@ 88ǰL enwIB+/J֡6w54J9 3.G;dU[T,7+H:_">:2욶.鼄D߀;_c1 3=%Dr;̎e=V1>hJ{C͔CZCz[z,9_.vXI, )1("(j.m\赓e Sx_x8>ia\8VC?1Ր!rc'Ѥ}_#*ao - Bd ;~ч9G/wUӄl!JJ7lك벢Z>߽ZݖL9qw>.]^SC\(#j EmIw3F~;J,y# rr/}U%V>?[L Lrpu1NuP>#} 3kjfxaxJ[: i Lݮ-L+ k>tktg;v+i"cTnNc<:aX鉧:̤;P~;3y}ENAkfkw{,u0˳>HƇH -(yT OHٺoR2{Dc~d[M9/ UHz%ma'eyLbR<c;xeYYٍ+m/;{ IƤ8IP~O}#-a^:Jڔ6̱GgAh0/Xhx"m F2Z†]a:x66܊@fbŖI>fؾs0K>]QViDƥZ%Ȫ~~ 7 RނX6:9Yvy{7T_ȸRQJsrm+Y%{z.EV( +]R14O;!Er)28Xn_U6yß9g 8?gʉ,1Q9n;[NrB3*O n%MgL5Rj.E|6U9ţI@FyYW +<r4U?'E)_Mi00,A;1DLO6wۊa\,NFsu]}hUԶB@|O;qC MSZ1"unZ[E}>Y/ B&=]+ЌߊmYЊ<u_e8o~>WQ׍3[kkB\^(xJqj$ H)?#M6_(g6!EKNEɖoU>oG#lcC%9d) :/'-tSǷT܉w1E7v^36/@@(2N;֏7;[ }x  +e/1)(DdSsZ@8Tѝ0ؗEE 0 حDh$S﵏ZM}mzv@/`9ʾn׽jsHH fw=5Řwc+\8̡ +@+`xA;ay5I.o`g"5%hZ4D{<7LUr[ۚci]U~yV u,Gp OɋK7Sn1F0*˧Qwj@,TԎmQM'.~xPa@ATܟ|+fI$e7@03,G\h,k}|B 4<ag mҨ=a`4$IS93R|x)a!wbtM|C؋\,|<ڙO{(v4`4~G ǟ\Ub8YE V')C($~X,(OBV" }4)c$8wߴ,I V}me,yA^B||fϞ VS7;43|>5:ڒղ=мd/a{a|h=nW1rLs)c)2s{G8'݇a/x@Џ[D!s*ٖ#=>5ۍ*QV aq8205`NJM|4M"I%*h>egz02zueޥɢleeLKü-VÈ|[wNB1 3BZj)P(7mKur@P67\ +r9/"3el sagG|C/+D/.l $' }o=<@Ţ)< ]A/"(tqeE:[ /q,xV-[2s/¬+I.jϺ+gGVT&F@|oa# WPMRSP 3kߒXE5=6)&PT:$dUP ֻe0VfiqZ7PO}ueyx$Ut9 "+ Ga"ԥNKki% ~1?Yӭ%U"}1 ڏ.7LI(Z| ֥qO хG_t2‰~GKZ2|r3O5\t iTE&Se47CL5H-&}4=VZ7qUV'&[W%5XANG<*7I[{ mQh)QʇjFqF%PwQDe b7at)Bo~p _BruI񃓘H5yK$9*r&n4n4yK]>V"([Y5 +Ed3/|K@ی̌:3PtV6ɼ4]b&B̃HŜkrA>,R>S- +H>#Ո~[VƕE\ps_ +7G˩<ɪv6WJ /: 1MC2_4afOޕ-[N6i&[Ymx11&"BpI >"F3ճ>9@v LN8πrNu}Ng} {g<>#?H2&pbVDgDo+qmި<]3b5Sv +B2̴QiǙd DzJxzj1.v%g [GcGI,i浮(}M7Λh%risR54vØ{2t>tDЯT2B pI;@a$,'@& B0#/i`~i%W[ƭeLJ WUzۗ2e`zP*Eؿi"Hz]ZAiA8E^hp'Iք.b).%>N:I>G" +#WoypP'=; K z^U I|4ОPұU&שk*yƢXi,RTxCl0\Mi&:S\گ}nmx|Ld,#!Wt!y Ja/X;壃 +*Y5њ? rK9!˩PuW!U"y|K EKkfX^VUHt<s~D`Ƶ:)82K84KZ +8+ˢ8}Ak}Giq6E*S×u#?eM:4 `;SGޙQeLamsJD$KٸDy0GyĨW0ف ibZ/xN(Ҙ񚧻qF3$GmwsޥIGGV;%5 G.| c5!}ገfh$M4%Vt0-W{w^sSGg|!CK@lΎ%S4(ᔀN$D>ZأAx3M^3iC5 YHZg +CTwvGS: LN!AF$`}^D\yWfZ%VMRs`"%GW|\}` }Gܬ.UO'<50" ugIfX +U8yIH)W&v4Nlb'xsiz\DD6ܔ7+LFF0 os [39oAN9|_}QFEF6cGgT3~h4or- ==48zNAU'>0|mѨa_r ZHZ*lFM 5ɱ$Hf'ͭ![j\z(]c&9)beGu 2}^a˼iW5B5׫Pdk"Edt-Vc,!tȐcR&pyX T ,]#B?pyM#:ŷ9XCa4%)q'X4``L<~5${p\uֿ6AB%w}A`D[,\W)]gz^pGs$Tu݂DV$0mV\mJ qkuoaJ<[9֬;xQ&L4=kQ[R)z:c)]f5>l5\(t肯jGt\FԬd"p${#2a_yx {_EEۻ&-Y;ZjANkH{L>,2_DS.]*A21M#)0Ϯyo0 #!uou}x; |0xsKeWt1~Ծ'_a 5~[}gӖmFU\hn QcH89׫YM+ /n#z(ϯF8ց2C):[!{k7qT\HdOJj$@̢-"6 +" +^ k@ENh$E=KT D=X-.}R[gz2?ڕK,HPdaKC JQc{E0fIӌPLD|LY;fNWu2GP`Sv,}0)"_)\slZr+I|-&ScXQcW gHʲW4Pߜ1%K5A_&Y$Ӱ3.5f wEDay@ w&6KmH3#x}Vf^ė %4)먻S&`:ΏJNq-\:{ TTI| @t-xkhq7+_*p[2=/yKKu`9{wʢ*A~-ДQshӇڸ2U6M+oՒZV.GX qW{^Ї:e#;p |3) gٽoPM: +#I1f''?ic rnm:s/ՍVa +;"N xˠq%k 8SV&6(ӣSWE.H"i`f^ZpAe'`Q9,.T1 +z3ڃ6mt}S(+蹔eؖG,o|Į:Z[:hjw[4CJ2*@ "L y28dO.)~VQ1nP7o&[='2dXluln5jYY[j]T_A:Oh{"nQyѿV;QR\AMd͓<=Jk%|A]V"&8dږ7H[w2\ 6-ibB 7e^HGJ{2RĐf_4@0,is^RU[ έEn9c+bmաw&3sI /G? Ÿ\ȅQ7UF6(YxILJ.0~MCrq]NַJ +"DY=tD.QV8ф_0Gb5NJ1yV >)] )B-I؅̭QJ@iޑt\|Seױg-evZNY(ڝqSkw)JcrKuk'eOqy.&NB4 z"/NI+W3j2?lՠЂeq|~N`_f恓wmhb3F%>JR|t?؛͂j]"/~Ͻa( #?3[jW5@;0Xj A +bCr* "bԞ)&/Q)OM!螥M5% $Y?BnQ<y;.CE3xɫ/nK GY<(5.BaԀ){_&V$⹲\pxjgH8Ϯf;t`"jUR)+~'2@\1"u(Bc 9>C"OMP>~9*;(x_Ǟ 4R(`e\G<ڂUz*Z迿X԰v'?4jO[nWa)|`A.7V^JդGK%k "L}0^dgBctϝf2uwM_W׽E +̮G2d7սx jc8, +P0 G +jH;iܐQ} + +(k%DU;(A?SwF-evl)7m/Sepu 8N/ae!U9cG/bAFеxI56^J^n9_ +Q֊X#8S|RF,Z#U{OVJ ikݩqbo1AOUexB`$)|KI՝AѣѫpU0Bv!b1C}p@nkN3L>C&*{}6ypQ؆%> endobj 6192 0 obj<>stream +ܩj y.FBLu_n\պe3o4trb< < + ( "wk?աڏ01e.#UዬihD֟ui٧ESHx fdEd7X]u:q.r X蓖Q]}郊X遉r.Ă񒿓9rslCMY zc08 6JGvwSӲDB1]@{ph>Ym6]Ruj]vD>4+QvF]~ͲzR.{Z5?] {־;ZW9$]WX1 +5ڼj9z@z=eĭOtXP[kxMrs껝q{B 8 ~oQ STf8-}8Q\)%*) shGIį~`k#CC*GhIs&F Q#Jx2+ʓ%jJm> 1u.44^LVx`Wm +*;?yT/Sz>UµJ$M+k8Pm}S1KdlfRPFzN1 c+aC=ym(K;丞fJI)y8a 1A<}|b@oBP*7iVA!崼MI\Te"@xSmQ%DLA&q.eCe`)k@ |P5NB +Gc aA_ԩffԞQ5쑆ƢWo#G$O}>iR4COANHc()㻠:y{2lQ\?G#w]Gnq '^ΪeEYs?$zuπvO۔U^GԱT/1[G՟tr?Dw~2Bv$,.w)*0c<MC4/u-".௙Ҍ$9v%ŏz'܂׍%[,9t*YhazY?+4<:l\o1aԽPs8o+ -bFSxYZ}6q1HliǕWV#UclJLY|h7HFgpZsx.X8LJ4/^]^Kcjs3Q}Oz5R`[Xwp  fp*TFU(-dO}'uV, SRfкf@w}Cm9$o6́3W"8t1 H̪SNޑVWSq# +6L]CjWYv`dTgFd +?Jl6j|UWg @8Z`m YH#/%jigdKG0!eȘPUFj}Oq Պp¥3X)mWz7 Bڭ+-`)RTHW#6T7:t+j-RZ@;ؕ[ȱ!^nEZIIÐ9[oUD4\E4#ӈ9'P#kiԉaeTVoܥ)Ra="6* ~tPM +{f30?8ҺN1,=i"YŹ3D EdD&eyAߧRVs(R*iL,"e/Cb91-5$NxzcQ`+t ^/oډCy +FS]=ٔQ#[M;.{ hRSZw?.N)5ݫ-V罹Z$Nd'$s( .:tèclHKv7q? Kkƕ6g=g:[AG"G k($c4<#[9@4H{5߀yd߳KTFf;h#&a~OIUCngi0D[`twU0ʪWcjJ{iұ,rn/'ap?j"{6қ249nTOaϱ^f%Tf渤`_OF/]̐70ʴ +֊挾J|rZY~EM`7{ w1-4\+^ˆ}M&}n(4TM\.ӻ6$EK둧F YRoP;1jN$:uj2e>zm +-D(!$!L0l=Bg-˼M*'@`$+{6EUf[1i g}CN:D-\WsZFɢ9!q0/6e љ>bCspHaO]^yQoQK=A6ϣ5/9L_MzAYt'dy n،."~ kb%, !LMb-Y%0"n隵h*<>ǻkUaqߘCE|QQR'^ٍE7^>g0~) #[5I+^4*-tcL U4O\9kI10OWםI/eR/Z' +İىv( Lǔ=50 Zt,mkk´aJN)KxO\|ڙ)HNhI5>fWjoZgcimdWZPb}\ '34vN'馿<}gO 6ʝg"do=\yvVBRz.`짋Sz_`gAZRyx<-5#s2R%\̂x=w>d+utLZO[?J? +w{ɖIs(0Nj|/t`oiXAl}Bmg0sCkB;-?si +V<ΗO^Pe_R*Fa$ҵ&:/Q"2 i}7xM䢉ZR|o&u;zeM?'7\0SPDEa }\BXb%uZHs=oJ{כIHa%=#F `ǝ?50Ymy{NQol&iGPЂ/{B[65s4kCIh:VnŶL +_,mWe`'=WCŦL0+n& P9$qAx#^NwhA%zigM-ݴi8֞v."]ʎs:qFU6`v3gZn% "]ғ¼-(c Ee<`˂=xdÔ eY3[kn֯ +]5ٰ3b+;b?5qP}<lڬ&d'*?Qlݑ bJ@Op$]l c;e`Ϫɜ-p=B0A^?:Bxr1 BO[55 mz 01oB|LIm`:qFNEw5,uS%$v.4DR]%XBTgp *!ڴiŧ-Py\EX4tvZ*J|⠏bCASo;*Ћ)38Μ{Rb? GRK E}߮.lDs(GY*W KXf&QZ Wm߷3yR(/ľA]ufAuqA@#PQĬ\b49jJ}O;Jقvd=c'mQ՝/.} 3IR<:.1QLvRI6W?ܲb,G 0}".\dsmJLEAlK%x( rǬuP0 +?%&%ßx0-QaRꢌR\On&>rXc1٥Fk`sb* ?@"3Ӛ*<33J54ŗx#$a).%Èyf~|x{k9dX9%'>pCS,##ԽK#b~r[Aq;;דaߚ8-"A}uZ_+Ps;b A* +9l FA=`فDNh +;mJ@V 0BA۠ +r[I xcZb~,ΟO"ӈU?B7>enTL֛ޝBwâ/| )=s&Ȉ&{[ "¶c)OaD,xjHs{;>$gس Ś +F=MM1z\~܄H(\.<83g̭!V.$By+/BI* +?ܷ#Uŕ 7$ -Dq&=g<3JY?a 4E`嚖) +iH[oœóE /e^GgF +wwKa +ȏvqOlpѴㄸ6_-C\8A!ƚɃU`Cs)QAՆݜu'E f0ښ6dhB,`(' iT%hؙlH3+(^ejw<ܢ]p c۝qGB]T,>}+x/ߐ א03 $]RrBmϜ~IJ袉ΆYxX.쾦Q2o +F6c@lbpb#"Bևxfet7c;*ʧTE;OkeH&떌Ga.biN8rc1p Jxk Bl!=8<ʭ\\@72O3$\tcukƐ*t3՞M&>A8koH#瑇K4x9ZV EVP!v?0q* + /)^L {[cd4e~qJ۳:@N-Ue3e05n]>]/{^f>+\̻7Wæ>%9ޏ|jj +Cuq'Č|(t\0(Yy9ok|OE_zx?!ueG1}3޷h jMqIv\̹k=WgU՞4~BC[B~)U4 Gs*]a"I 6\PLU[+oƷ*!h2H, ҩ\s%!i2?00$)O?X XI<MӲ# .LZ&7 +1̚+Vu +T-V7+^~Eޖh^n#V C,i5άv"W(Eb mԞ/]u" 5 񈀔{)DcGb,y`+2 3>btcrK ܵZ +yr!*i[{?cRa@\_bSDޭ:!RNJ00J·zE"W Q;,晳>ϡ O2L=+*MU"$8IS@ە!~A"CWk3<`ȵQIJ*.GCRz7L/RO Ts6bvō࿞ta^&(wljT#pʡM u(\a*?;ѿ'B}έ2r} GX1b2Zc eo֧pI^|tB$( Ul mT6Rnxz/" + .1V0R+ߛ7 #[A w}=gӚ(|/7OEO-jXJR_E$ zQX%qvuc:-=xnX5߽~Ч/Ki\OjswrZ= Ȅq2MB, +8Zh_c޷\=z(~QRpS^¸ i#'-" +ܣ/pVa%vZ,^ͬ1~c P÷j7D%GPdI]*LjAH|mVE~=s ]y%tsPܡf=T?mIQm}Nx ѿ l+2*+k&gMwL˩k$b ++1ШU,\LK_H6fVJhavx;_rq<-Z` +9RBC\^E=( +S0@.%0,+8ſGA)k^ke%p(*Bݘ_<,U=EKdc~Y_O\L-fo>_I_ۚq[g !U./Z'wg.yjkȈIGKs0d4Nd{kר؀#tEu?el[\ ӘB{ /DT9ѓ|ۤDalPI} }h.LP4UOJ?@X dFq9hr5slpj KƵЯ=)/YMjujs +Izq=8G%lB2Z^ +뛣=l'qCPr}ذ(GtĽ]i$q=BR=%je-A!E䧑߀7fIM-')Iz"oGt 5c%[= 0PV>P?Tz^m+b:"Vi}JF%` +:1[Nr"8n\d#+͓9A]v>kb$ҡ} X+2z|4# +lyeG<-U~{& hd\N- ៓r2a3丧ZG[sV9\3^ſ5OyyLH<5z¶4= n=֖8umҤuxre7(g3 tAB˳pƫN,]Έ`2k0ٕAuZЩq~nwfX4e&BbVG>.?q*ÐWZ(" +RRFYwUd<TXU(ގBH5Q wu@& +acKg7~+%o36}^3E.{3)2P<;|2:_G"WrC%-w5I5% fBInL{ޣ:G]4!$ vg0PtA]U-G- +QSdTRွ?#@,8%R"M?Y}тYt|R㨰/5Mq23ߓ+3@OHCh s K]n`ch|Whx=/,P^z 4* +.zXdun||л8h +e#rt6=ta4R~w(?VEHK\g -f1iw%yfUH06h*:m,yvOh;8A/&Z>Z]xs,\8yKOxe(9-j,? ++I铩qIEz&\+!ItD[5]biRL( Z$2C= 6=Ě[92zMc 5 =N\.xlGsp$h{ȍRGצV S+ Z|-zai 5*4>})j1=4ݔL rfK*Mwՠ~vr=ll4{LbG `-4҉Wj]軂~vn)leq`e 6tRt/n\KƿQ4UexdWԷ3">dd7%aNt wa^;U%~0* ̨:oW=$JiN!m.xW. ?kF=#gY篲ϊI&-bY"Em7aA<[hai:jޣOnrscX%KaOͫ٤g&2/gc?r`<ɏV@c!V Y.@qY/c~q!0qzu\KN[^ 腌a;0*tbR<&Cnp' ՘c)1YkӉ0TkTA>l,0n44X#1 +/7;+۲Sf~ZWl92 +I_&LhcmO;y@BOuckKkM/ħU0G)ƌ~z( =zo.ImJ k ngEE="63W}D{|#g5:Aj =99 J?9ji!Yx@G:s;4t&zK7]j%E~\-xv.T_~~UphC.D+"*3ًh{\u9;a裖`Y) @v|4fYZY /ʰ걸Ŵֽ9'ѫe3+#M7k2m xϽťܘX3ph|.C剓uLߓRMio|"ZtaNB$?=N&ȕY;ߖaR6ef|0e%Jfo#"WH=@Pcdc @ +VMW=C5}ɒ=c Ib}NB@|5C9B15UZ1X9mM1UR2虀2ăsnWIFαI0vעQK|{|!8}w3~B>(rNLJ kK΄Ɵ"uv5A[]%~(Sd9Tp[73JgwaSˌ/F ޭ`pjm|9yB|Cw 1w8" Ht񅤸'r*?0$Z +/F۳@wxx>2jJ}"um(f-$^`yawPf +'>9\L \RnZ$)X?8(`E?͠M붫BnLѯFv`5mKHqzrH5 <3@IџO';1slJ%\ܒ\|PGո@9a] +JS9{;,u_)Nqr}D(IsXb3i҃q5tvƊyx=* +'pDz8&M@K3nA։i^GDƷ`br^V>% 7> \!N>(E(O>ޓ{@`\y;mS1VC,=*!$ +c?R3)>r']5I eK[Gp?UpȆں=t*1ϝ82OH8tRk15eթ,[MCgi9f%%&W 9(|"lq[q( ۝w?S|2L +2ìSUrgМ<ǮmPm@F3UG_qmBf jpgI˥t$P X+S:`/uFVWK4O80*k +/8X7\s+M6-KQɓO#gwRHru$R3oۖ'],ZIھKzNݾrdºD9?| +lWґg2 +nMIꈮ(Ab%yEL×\0G4 ԟEk̢9Fgڅ;;*RLN/;%Е1S{SzkR'M& NiClnL; ii(@&p #QrW mUFꮵSJg8og +_2[D +vZ.EBG\̟%Z +wnb|9s7Ñf|Ϛͣ%]Tn?.]vl-_e윅0Tv8o"9')]T  4WcE7 n bfB;vߦ]6]zAn[1F`d1V9ZPjb{Q?{hpl|:f/16 7 Ek@<uܾD=ܝihV*죓vȨD]@sW=?'5yL3u}BHޛDs\h]U҆}w֢W w 1A>]M#VWKT6m?aH'}?\Rz꘴i'^VPErh#SrS򹷛jw`U?T*=݁}/ذޡRdIAظ:2YfYޅ1Y^̵(R m־!v$x)+b)nc@LJ3f~B^@#2M0.J=VرD|l_=p.P{l4e'O9T ytoU[JP_)]"SZ_5:ɉs>; @ኒ)}oVAkҩ쵂,/ DXڊ͍,[Xg)xƙr?@zq=3r׭@?RP @/0}^-φwލ03dΨ\ȗl.IȮ2OqUnr{#miA} A ˇ T-~j#dxg)CCs&MҢ <~?y~_JӋ&tl՟P3oWhϿnv:9ߟN%FCNK\ϱls2ɍx08bҬH>=0*+n5M1/1K 6ael-i8PB=* (.g3݂Gȍ@?u=3S95lMK+~*iy'ԢTU.PɰsEegN'f; d 07;F 㭛zkCдiAbqȐg au76`e4HT-ؙыZz_\px"hlOPEo-29SbW&H`;0ce8!eDH!xe=i`W<1i.=#ػk03pzTblǠ#hzhQr Y@f@e5(K8!('-. jd"NVX@},2\?TٰHS,mWeQ3͐+ +CDNU1'o0E#vQ)o˓n"Y-?u"Yt!1dnqbD@s;O!O&Z=v< !so0--4'94ʺZK'bQK= sY INAGEo_IT[͈jk~ITWM*:>ˡ[&?ߪ941Ru[40Rniȩ?D̉\xOeKh1` Iw2 ."rvn@Drc{꨺{/Faj}Yx rt- 4t4`}s0+ᇳ +!& 8TSFU~,Ecmɸ.B[)t6)^P~0"hwV#jnMБ}J\n#zhh.%Z&#ۄ|<)'+w}o C(cΖri*JuiyHI}Okss[!I;8Z\F; nA&rޭ]Z~vzI +y3-y4U7$</UWf}6a%Qg;{4~ޕvօxwr{T̰Ԧz6Xr,M~`jۅ}w{pk;zfm iYT| ][;?qckwֻ;|(sdC2CigBh_%#oYC yirO4,h-"}DZ{L,~B} +`c@5e +74}O zIFsd z$*m&i%\cGG6I9nm<5]ʱ'?Wd7U}Y4 /s9:5>ٿgRr0ꙙ;&8ѕd_Z݈,bIE; ;chIVKظF`"ZHyr!f u`_J{X]LddeV;!sp*&7w)ro7EJSSY4_1Bgdjfr>j:@i d^t7`pIZ&atmɛ^I.fcDN]Hm$ xdc҃Eq|"HToq(Wzr5Tu~, H"/MZ!&2NGg`Vm{#bl)-օ?kX0TzW馔w8mfޏ-X`[ǔm w?y*Ckjy ƫsh3,[ص6U?,!7z~uh:f_Q?Q2L9s3hbw/E$}XŞ$wrEfVE,Cp^R+ִNp:zNøH"RJ~g]O}n2^rQ0'-uD1Mo̱ŌpqbL6 &9;Oe8L9TTy$` BËU 㵁fe-F$̧9RɧA +ʵ9u4Da߃cMf.EAV7^F8t5Z/Bxihr@},HlaAq=LcBc)/"yrWN@hxO=QT2'y|ڀ1ҰCѻNuc|E0иoXvGc½_Vg[k#03à:PO&q,0{Xk~nIT]xYʝlB܏ 7+#L;NVo%hzO%oLdw+4H\KaCڌ=w;@ݰJ.d[ ]0K&Uo rdޭb9,nX*ʇ!&1J.,b@|y +5tS@0(ؼL`:{pėUt՝̈T9RJՁ%nRʨpYp=C"k +O\X:*ӵN`7gb4EHD2jIJ+qEԝo(X ,,V|"b0$wT *%iC/,IIFE:fYUW[*!#wؼ8Y|И7UԲ8P]p沰p?[q_*d,;iqCҬKV0v^HJ@kxMT5LrqJxM"茇T} 6K~YΘ~$NPz8^"}fQ6YrJ]'I:T~AUEB`|3|#,Ua;S%0wfCfz;Z3b˲mG $=S98;oi+Fz7N7LJ!)^"Yٸl}$ʽwօ5A[@K0gV ICbgWj]`+|Rr6frÀ)|+q8D2Y(r +9IC~E;#KC=t$<8Zh7N1\L:[pO/sȲGّF> '̨2DvuT`ЩфŬ/'k@$7l(nE BB#\C ;MTڱ:Z)J;23coR@qld=Ж>& 񙳹ƴ&ˀro 2+p6V4 /n!w)0RY7;^]IjR\g2j8=eO2_ s"!_M˲%5kUĚE cWb=M='R+V3JMb!^QTp1T%eÿ +au:+|MH1E_;igh/G.;#0ɒ|*v[og;v3t2OUl +YUraVcW/zjF[Rp(7D2vUpq'9eR+.2k QF p:PMC1i6 2~*l-{ n[|Q-UxF|hJEM2:c|^Up5 \g2j񒻳)uՏZsv¾yN凮ubfV*?Hfol4t8>Uj Ņ +)Ix+{bq:3L)4{t})˼>/cUS$mYE]JסlXQ.%zAiP$2D❋ǟS&$2Q^_L&@-bY6o,ȥAfGUw S3Ɏ3-Oߜ֯bmg5eN2V0T%tX4>"(mqiWc(jָN}; RoϮb(IU(Eo9<&nDZ9+H^2ӻݖ + hgK]_!fdSsL 2骤dn`mœ#*grC֪+_I5~_0ЃRFD0b|vdN N ^ +{nhW9oߔ]3SjgG)+WP[]Ǣ#$?q.7EVO2C0I:B0_[+Ćm>4찤fyᓨE\ڷ3YƗu alıwr:dZ 0qv8RjugѾa9ξ'|#[j=E+~ej3=&6-&C& cQ2*Oh]o|mrfuQЄv7Ѹ:FnɸM|v9CR /0_rZ OS WjXSxN6p$%ezOpw +S=d1۞ag/^ǞP'݀Re^ -TDOzlE'^.1uYjj 8]%KQfFOwmjr/mha+ =HԼdڕ=t}( VqYT/oAh;tUB-cȌ-%9'P~⹣AAsjH"͍B ̏ȺufKDNz)#uI,O7c@g2'FyZ? +<|OlHBBtc{B-k4wDxQ_p%ъ3:ʺ= NHl"`I,Sh)ވcmB'ow:2 ea܌Tn  7pn]p[?!B*ɃjV{Ӆ֐Wj_{2/uMpvT#g< r` +*,R֩5 +ǔ/[C2F!4?Rhd8M鳱 ,^8暵Fupu5 z*L85_R&^_at毕|J;@<[=W#5"DbwxYr3;I]2Ԓ3[YȷT6{ZԗMmAV|#)EQaF0,h:w{v&ݏw9lc#pؖh&?rŋkr axIyN>+ǯq$O?!L!5P\kܵYqۺQòv%^(a\tKٹ4گx3jM@5}nFDh$^-ڱ}yˉLKI^WDt+E>p,!c~=(z\S.@RPr/ QRyc؊y{X EzEQ HAX$/D8ihVCHSI+'$>C:"5LypҴzi>G@2Xmd+vHC#E4{{Jk/J`Nyv& 򪭣Ӫ;ʬ7;8}N{995NÎ^W%ѭ i;`qħl$~8 kM*]cq?kx$?&mnS-#Nʿ#v{Z{nrE- pdpq4eZa_w_UϰG˒^ԂGboEMm(QΣQi> (Ks6^g†/~/0_%PM [jSQz3 +% +4SfGjK, ӧ/~jy{ɺ ;wϱD) !V`&+ /EplnxFC>=ԧz~9M<0۟uN^.c Dr?Q"xhID!y>9b^3O(I_>X[A0; p~>a"$ Q,bYA cuAE?3>m+ϥ@ՙ:Hn+ȻYJ}`",zS{l5Nl2ϗvcZDtPu{-YP֠x J:G댬:Do sg\PI4τK I*( $VOj<#8Ip0AJ)Up +4 { })&faloņ\Z/ PMi>xҍӏYňh/5Ʒ١Ը,͎}f^~v3Aq-F|B܍;0e"KQQg @K_ ]_Y'7>{lVFPT۾3}cX>"yNw&:shGmŅO +_UM*cr v"o1 +&exǚ2 ȥqC }:|Ɇ"ag4'b63>F33|PCy!'qV/k6P6UÐ^,R4c5B2oik@ 1$G5͌+J0Ь35I1Zyy"h])\݉{QTT*Уs}<+2w5UD=BfI4!gG 5 ,p==xK–#nyS޽*%@.k`` r?vsus.6|N>.Zl@Z$\Շiq'BSIԒsDmu(Rl.{ɣ_gBDO剛WW ]#*?hF]Vw#za)?&Z.S]G~ASJ];>gƂА>< \B;;v FQ9s PvImHwrd&RQD̋<-\9 Ʀ'鰦^NJ[K/EO:2O)Ċ%P')-ewFu +77}tRmJ[HFON jO6 EZ MJm{/:VoUÌC98+$dA_',];o0(SZE\|}}թmSVHҥ]ʆY>ԙ`_9AE*pC:0LѮ$MṕmTڎ.lԛ|#a7N'2ûV [=ce O#ť7RG{{ŲWRJe/)`?734w#<Kq"6%#[w[ɝz{EهKgf^W4CW1Kx.nVn3\bJkWH>?i +&,Lu96PQW*(BPuɲ%䃼&tSSGjWm` +vr;"m L:ŭ~~Eu;YdsX:$ ]$bnҞkrHOI 85&}͗c ONmzM&3K*,BAZ>4Fq:XrHQu *Kg|fٸ}5ʼnV}xN]H=0o]1Z!=LY-h;uG0ެĬAhDUھq )ag)Wm-׃fbe_=%l7[ @޺L PF .E]]9jF [ʖT/b0B%T-]+%8ްŎI+ 28A_O}3= +\⯼Yb3^fJao64(1^S9/K2ʹ4h66$7[#!`= [5'n'kAگ7~5iG|[ sF DDOv,5 PPR wo2 JU/! n:?No[* +c=I#+؆|{QzՋl?T &Sڵ8|+ MsG%2hfww|u&g,]wB\ _p1WqE6Rqr Ic-$NIlXyW𱴍3z6b@0MgvY| ڑ:S .GT7$TYXXQ&c锍om +%$5>M~`wGGڗ܁s vQ8c9v܁ eG_UUJO# c=? czPWW65j5| cTyB $TG^:ǑRUع{yGĜ_EZ>`SA 4W<=¹&rOhUZCdE$,GZ|$%CC+J[edᔴx+"yTcmK[wuQq̳L$(cE˩-,Gl.*=l) ˳~ʈybY{J5^WYsʵÂ%}7^FJ[)잨n$V߷~^bF1W\HiǶ0u@ y[yOtO}\g@ݲ%Gc6m^M[$SzI}<R|K}Q82Jl-E7`>*ֵVgŲI}q: ~.F@SyfC' Rlpxu?E|mlEnk\Gi՘֧) epWs,[For"fkdi^4.{A +dt[5yp.o 5"ފa^dy +,R,9Iss)5ڡUE4762S¾t¯&ٿC]׉:`Y>K2ig ADCd:*x5vg_ Ð4mNwx̭I/&* +f#z:aHv^Pa +rT^UK$y3ag=ygxP"7/1/2Y9иA>DUxv~A7 D`u+&rf'?M׼:&L t |f:0vA#dӠI{x @[vfրZV}Faޱߙ.z˓;*6fā1yt<,,!V5ڣ6}`V`y+avPKʷ!QHE!WᥠﵥZtk ?l9Ig2"g@`/"0,J&^2f.XrxŠ^/b iጋhU +JL2\G1{͔I*ՊJ^WQ +~g"(QPpֺ]NF-EVPZ!>b{P;I*9j2(Aʬ:ι_9ӗPgXxq#MTR~fّsB Z_2TTt+s>ӥ%ZQdlf<[FiIPLxQw`&'<)c &`j +'7RwbrހX4FGz1nyA=cq*]nc2Hѵ g>#zG .@W-2Ryy\ZK5qw)q@X-,W 膨8"e[(Y6jڬ!F9L7;*rz@z]h=t9U__ҞU*2`=='GH&_cUAPio09"@&a?2 nZR_\v-/TNb6flԁ;D6z }"*$4Fe] O%5ڂFesb}FR ?OXmMS8 #VR b(QrMI)!-*%+qg1j;D+MԈ0|uv,NA 0u8ьh¡W_f}|PG + +Rfk*e}ڢ$Ge}y 9;DYQLɃXi1&n݄ \J{&G6'E̞f*s+e` TDZǗLV#b2xR g%ohÌBݹmZ C*PjԐsA{XwoyS;{Ӟ*P%rc;m k9^&rv# 3,_( +}<4^]iw1|2T*uj. +sLtbcـy4X ^-'p'HN렒i/ÏCtd Yfv,l[]-_xc6G [ +3< lDRB?CgʓNi$K"o^jiɄ͖Y54P,_n"k,kyHQEdh52LR!~ԻwQ 65"5mVOHnZ=2Gu؀@w?|Iݼ?%xzHa`w[pۮT6C߄idg0W{jMUFא C ά IF%hP/L]E.m Wc6 #JͯLr#ż~5q?>D& -tȱ{3n7һCPl$}J|W:՝A:r(}r3>;XPK:kQڇJ^/1'% pi!aFYEb2Cwp8z+r>bZ|AU]_T9gt\#qփ`H\Do6^~J]pO-BRƪF}TXʔ%Lj<FНH0[@B$BeյNp^D!o,Wu\@) CM"9C.F} "b"9༤7cTkgƐAa9)X}ⷩ0-w}<e L/sDcbg[vgEӘ)kTĶ|Ha 1#)܃ㅌ:wD\bkt6b`]JwY~ ˥ ^,2  wVmAa%Txbozjfp}V؟/gW)zQ33'D~ +endstream endobj 6193 0 obj<>stream +Kwo2%X bKzt>\V[1豩_Z< eO 26 +#yę~Bv* |:~FyWG>Ѷp[J,ev]Dt6.L+M3^W2sYÄv A`Mob.;|ؽ Ɓs&~Zytt ,Vmp

+X] ^>7!` AN,D` + ΙG2ˎ -?/i +ET+%T*z9)oyfhO&?UןpjGT;5kao?k&u^JQyM*{䟷df&87 + +I+@URY>6MԪxإJo8$PY ͕ lC/ `~WpLz8+pSvC&;>!2|օ4m2YSb5jK}a*/ \m{1C.pwjDt\}4 @g+rE! uyO}~i3!Ss˗@?#UΗj)1 {AqSp/0r6zOp& +A8ݿڠ9+ǗNKAT~E&H%7dReh+ݵ]ĘWO,H 8^ɻ}7][zg$SlA[fʣ\>;(C 8Pg`~v!oF湵 @vv#Oή?q v̙S?(5q]/ݏzCsFq +0`aR gu?m5JPQ#ډkp= o3B8>CwnPzL9T',8Xtw!Gg3z + $Xطp6t;FFXlWSҾZ_bpfֽ\ УQڎ, +LF:2.jy4?Z v " ǜْ>VKhDVZ3HA4=hsnc\ p:[xx~ K>2LO7Rrլomhˡ]@ 󸍑'ʚNT&nnK+qj+CNPv%nEkr&AzR~ov?pO4p-,}qq+[aFQ a^]oLg'r{·S~0]N0۞Fɣ4(/ T BEe"usv@/')5RUKQkV_V&%$8@/r&z=1\gꖢbOe_+B+İLنp-s +ݶ,0ye*) k"#+ k32qWDŽ +~ԍa^#GԿEcAn4 +x;SG&&[e6̅rdtq>m2T%`Y:7>'#._n qIN23EdTM:1gIݛ!VafK42wIa^(30ԩ3@s4".v67\(b'#s}ŤA^9iv)ؤfuBY;v]X*abG~,/Pv;:j=#\`!9-q& a"JWx4_ĖH~16(|g"KQ1<9\\2BEL1\3,!ObN]؏ĘĆ`%1k-C8]&?cC&Xԅ%e|z+DJl =9 + \P(2.I4(/꬈Z 8/uDݔv{I}x9,_KL\[Df:2ZˣǴ#E٧||)ܪZM+.NƞS61X~S5ͨ>-a CmDoIp_"C©!$&3!Gts5rU:2hqL0y*7p9Xnke,D"wF)kEp!7AB:dي51+ڊ^-ed\f9VobH,4_.4t N nm1(7qk(jWw'Yz 0[o@/KQ8}"!q8MF&y-k>.N)ii!?Ա8L(&=p׮[\XQ2J6 yfM(QJZǝ.Mh֫FZ?͢⣵KQ'ЍlM~ ԙ$1p(yu,,gL+PnpzQ3`Z42xn :'fk.(g-ց#+Ajʭ#.4ת`^k^rcYJcPK1(}ס⺰`̞I+3a#LإoDR6ŗz)d"p>ټF " #,55][.MLw&N>]3X@|ܻ)nX(s_UqhTRGMR_zUpڳke cH5t٪9l}*y~+WuԢ\aU52 +(yu,z .ı#kԉc00Ѥy'U=3kzo"+NePuC4zrRYHYRRx,֑Г6n5%$؀0]mg'׭"{ӭr\mH7j|.ע]@LCYXG6jG`Xz3TH߼"r+ƺ.3lBӓn/Kved{ ,ZֶǞ/I% z͠}V9_eD ]OkZ~fmԟeeQkW CpHQL (FU׍8A" $/iUJmՠGYlK$ݨ.혖d-יaXV~ (~gy ҆ Fv.݊[ÄGXm`K;ny7 FKpC[cp@8Of)34QA }[r87l⾌]CA2  9<|B[H (PU/RX1#5V*45@- rTpTsrrIБh;e|qV+vN}Ca~xi) !ǑP \#)vkgkN]N=KV ` IpGӽM&噘Dq^$EeQo&qm`F. ?|v?*Tv2+H*: +[R323  +92Ez%~'G:%<ȓxsW 3L)-7֞ t!L:uݜ.*?0sxQi{j0,|(Tӆ+n=)@7*(|K -+ +za>Ү(ܱszCxARfk$֊ffobfPdW`+ތ,Zlp! = v}A[jf*W ^\PzO]12ߠ cV)iXLݨjL7(Nk4ƳkO3EXZ#b=\4!E{c@| J#sgk a:OBgJQr#}Z{25 }q~Iu5j'֔}ʨ$"N^ +%11F"Q pԦsAMOc4'tg߻; pC(l_G>'JV |θ~ۮ75=2:i"HcMbm)4% :OԧKY}HǠ3jۈu@x+ɸHW&BΧl+4VC#- h#ELQ<͓!X%j=`P ݪ72w2Pf¸z&5ehpy:mC&$9K:fQN +xHB qQJau5w; !V5ݽ'Q`>wN_. Ue}"]U:aej"` FO?=EO?Qmfmr$!ñkNN H\ bN%N~lG ^ J5:424Nagjw~ڟLg9oX=gUws++8CL~$aT^i3W(eu=dm+SS4fEk)c*g?mņS1=d_RMkbaoXLR/Sb]V*rЯ얐ć #2KQOq`2F,bZ>|!J}۴z]r-=o!<[&^ Q:v ^@l0{:1&-U9h7}HcSB}姑@Wx/5bS#ĈpSlCxQ: +)ϭF`$f(a]8=V$ 뱯\,:PA1u)i{y?`\i74kk@ 4>Q1sݖLHi͎^^ʱ-~G $P[:V2;t;neA3w;lFWiuOuTAlDN1Tx%jka\c"iS7bNPN@0]߈`"3PAb S -6/{*m[:{(A"-/twZóX @c:wlqڙ2.X=~獧.JDz) iS&O +تP&B5K C%8;zW/9k +g>oT(Z\wXފރ1$˗ HȬ7/ 5 +p4دUO1"{gIZc8@3D"nX.,t]+dXJv2Vlb}۟OȁA +K6O;`7]xkFQ:ٔSOIAT}J+ n+ ٔ&4ޘqDkVybb8+@%n5cJfFTۮKA'T3ݸad m*fir0SqdȲhĵUZ \k+X4vCsbX|bSinݽ޼~\/ԋʱWKFjiX$ jI.M+#r{R;&渢gO%-]uBmɟ+^֓[Vf'),.e<5Mmm\?S{=.4}MHG!$tTkNgM1BG[gخ&0AFyU-W9Aɳ)?.3hw]"g1d0UnE{ +QоGeajZa׳Ͻ8l05 +³Ӟ{47y&F晀Qr y +Dp،o7~bQSZ@sw)@tIJ 7͗^_ QO:^rOJ{vcYs 9mq wZd\pU!Ϻnq'.:m@JKܙ_Ʀ A 9,wWb4&f8^/fq [ d,!zQɫ^@2PnLNmAyĩIE[D:luOhx d:&=LAb{e{#*8=3+(Xgq-0[;}iuKäzf0^ ȴVX 㮊42vq7E>*k# tK//؋y}2" ǝD.UV'˝'F×u!<<&BrWXeюejh9Ur!$;S|1"W_FGN}V'f.ZPDLd\c;?sjOZ `>gEm쬦$P|:;q3_Z 22V/k| p[Eu \s,`#Q `5R_0uFWudjتdѰB"Fd:ۑa49lq6/+'ͧ] [0jB]L)EeM7al|arŪ!1@)L3e 1ww2 +~{N4dOXt!a]CAov!1",o*=}`x?{G'^wfUx#T=Of۩SUxYCge-QC=,뎡9kDYiV}jZ829j)aƀF-㴚lr*g[ :lSbygf_El &:p96PSb0FmкN Q-$DX' u^0+Ԑ[3OQI:X ke^\XnwDI,#?\qT~nx9_<1)k+~fBä#*08cD{o:'ŵyt}%Y1tt4&P->,N$v[/Bf0TUj25D.o|zg&,Gen>HrBjcPhނ~h_ܶ2uz7Lݷ"m;+27 \o=|Qg4E]jXk-@62,\ʔc3Gfqfv-4[-ә'=f״aJNR{6/:z[^]\ ^ՊAF؍)qd*!W.4v#Y)B_UqS!7g&|ӚY3JB$k4H_1/i- +w"7!U_u(u bE#c0|t`8,)AX?E9Y,0 tR7t3d[άpNbZւ'@k-fY{n+͓>s NN7WpN'^W ƉL*+Ȫ`{sic| _]ڧ"p}#mgZ}SfɽM$\o4ȹs~1\C84SCܩ=UTVxd NbʸQ:fNE7kCw)R@啛}*$4ͮAVӠu\ƋUd~RƣxY>L.#9N"e)ƫiЉx3~!vmr6j:hgyx҈d)HX +hUY2G-8OMbqK<6>^-?ը Ax!g/e(;\*R7 P,<>7U7QQ\C3 4'Z1QaޱECVۘTdHߔu:[]^V#ьRkF9[<)_ߪQ"ŇT^[idPꫭ訌>ya1VӘj6ѽM{cjdQcg֪6jߨE r>yZ'P_#`.zImpvd;VB`1'2jsWaWhH{#dH>wb Ti"CS8`UDAphZH!i*EeX2=L#hCF5ːYW +em2De1YgMgz4 -E3wJxS;ˠDǖ.ā͏g{WPUcE!&B9ZR\c0|Ϭae6^.KR{w)y/$-ɟyb ! ^v>S0MT,GF8u>['qSL]PŗH}"LV>WJ%D?Oct1n&,5/]{Q!lu%~>Թ}"k܂= ?Wa RNBk2,W#nOk_Mul(VsthC"O8.GflTĒO%%s(awopr{@NHw?6b]Ck0h E _tbɥ`,N ]gC ]Qfx'Q{\CV%R"9iA8PL}n>{KD.'5@CL:g%3꣪=YٹRZ]^R*;)N.A0!S8 ٤ DRtArP`Z;"`˲NnzYOU%~3Q=@B/@Oђ- ;9G+hl_Fi4 gjş`s*12r21Eo%I]mm7頋QWդ\&ġ*8M]nZis"oV/26fcὕ{{7i'PqBy̾SĐՇ‏>^cw9/Pc$P_7'!+{[M) ,1>2(p ɺ#.?bkWn Gqd x/4Ia|%6Up>Sv|4LŅjEʧgGϴr΀׷(9c +G/GUŞV᳸9v=(ի3ܖ?@)XvҌylNE dĂ +T/N xcX= uX Jy`G-(.'?u %-tWXDQH~@.Pyf.P*Oo0m9ORǓo C?UKVGISbyH]*U' +< c|<}”6Mȼn@unĭi>1j!>a+~;gHH1$eq_NO(K|X <>_$Ҵ0Kc+&㪆P o*!$}"݈gy8h N} 0@p4&GUڝYhTM9~<9lC8(:5I3qN՝ j-j-j"7P_9[M"0'k%K.2[V4ՀA:=iC%{' Q2A3.^LWeL1S=ƗtW0t&3nV`fd*^D˾Fx)ə>"0NRA;zA YG\xPOٕ,\%b`COfBYZAӛd>QGӯC +:K3dCw 㓃ZLF<R7.Iavw}~m|ٟjۄpzBr`JnF>`;?X XqzB7'~aBC.8j~BY*(؜MULsYV "ZW~T9_7/~h4m* ŕ\cբ?LG]#?~}Wln!4>*%9qF$'4 h;$۞+C̺{s$fmXiUh7y/U>:_ψoj m4jN +.7~h*E-*>v9IjNY"on4)~A؊øsភx*oeȒf8^&S U3Ze&Qb%hFzOü ekf w&otkI|>6Jl+cz@ؕG0#>LKEVɏPU I[4kY[bT{Lg:f 򥃴~}/RYˑ5~*H<;v$Nz+dB jk&-v`T=I|$uw;iwzĊ +9`$S5gEK+QUBřG0˥(c5Ñx/fE<=[\Zf$&Syhi#uk~ m*@ݪ$mg_ShbS0U =UTKFq(S:Y6DJ@Myގ:6ɉ/eX`>kkT|`vp Cׁ[AIϠGƠ<l3y–*n<97Y$ 5Vf 0fa&/ +X٫1k[H\M ՟ЕKo +? i> |n_2EYqPa-\\tqFeןh 6;D)y s&PX8 ph*,HTkͫvЪ OF\qk4%Ft;9+p}}|5הY b֕Z b.*TEskb+0zYҋ*wEoGR&C4yD$EaEg ' ^smƈR-@SC4ϟ~ ř헏yQ@9d29BYp:TAm^e6c;Y#wP d'M ,_Ĉi4=FvQ G5O:U/!Q>;$GF_b&ĎysxA2y>[J^\@}M5_,n--3c>xJ ǿh^SO.!SBjY3JU\GEDqRÉ^  b+ 80wGh K8atյVhYaS9ˡ "ϖLGշImV"8ԋ #$]^ؼǰ?w6A=rn߅bq@H?V9h/aFaP>+W==ua'JJ?s^W9Ǒl"[x!Q*.mS$c,z!>(c`b|j:+(8R.0xa)ʵ +DcG3 ?D Q8F<F;Z'Y~ +]\¾o<'/Mlk$6\ZPcʯL)5YI Vլ猌Hp޴T ʶiٖ-D/~L\k(s_a*ZooY͌qsW;^9B%J&ks[H[`}Gf  +BݛǮ½c~̤m` !Ň,)6{#'M|*l;U> endobj 6195 0 obj<> endobj 6196 0 obj<> endobj 6197 0 obj<> endobj 6198 0 obj<>stream +i42XiӶ(u7g`Glb|;h:vYx30ޯq6uFw\†&SUĘ-*sP,J ”`YF2{̏fߜ#͡9D}᥍T# 76h +b܍pe3\&1ce>O:}ecH0+L27P֌xjZBUo{ۂf _A}|YZ?9[OdshȻ-άiq1Rmp@ʒ +9u)JJc^-E&ڻ}>9V/hU +h`MqώSŽ.5 +Bl,bJ9,dK f,UΏ%6 zjRv*st)muy7rYAYq9wC-CW5e`|5wU)=ELP(ۤ`P((CYjHgXΏ[Sxu[&eS54&A0Fc"=&t=_{M͡e1JDϸ>`o5êp @c*~L/HfN?!dmBR5P%zWu{~ x& *x =K:#hu!ݠׄuWBh5YJ냢 .''g6Bk7zl[O'1D"3] cUf|Z8܂Kw"C3󘰀GJydUi؜Fݟ= 3R\T2l-\00q"$JOj|ҩ} aEt# feygWޏ):+:?#a`e"rY'-IunK&~5U*q [}0".yTvtvi؜V,7Ŷv_<6DQD(MzlYXMjI}dH}f":d]9V?¡ޕ Zw +zGxe5nAyC/ٲ\&ůl|z=tX0o-3Nx)caRuw#?@C-jbHۡ n'E%nT*'Ն-Wd979gJ¢""3Fu@] 36V+F~n=p__fSeTf洞.?@\+kuaPJІA_IcÞet.3w؞ޛ;& {)B8mACKmѪu + ?oP)9U*3:EL,HZni#6 `B)A/yMkoA!VV[5{֢e5eH( . ܪDj@t<[膸b" uAT7Dg:H bT$zTYw#6SӬE=YO_ X"4NbFVwzW!LS1J[O A|*hkazWjKVlRO?@@ n`7GϳI+Eg ٳ(ӡzt,`?{XOg syJ%th/QRiyrYxWD<8Xu#@URdJ(g_m-G,Dfk!Bn +Π Plzv>f~vd,z۶*'pu(^`3:1 ^Cä*8yJ/i3+q.y`2ajBf$F]R≮ B\8B^<%0Z^49m@MG@f`zߜeq@`AUN8K ,ʮzI6w%2peY,9 +cya@*||>Qh4gsVR^ nɾ|ltWDUr4ɪ{5>bztmb><|;)\hsz~ϰ.n'aeGos.ӳV$ߛ.=\ =5wۊ/}֨B \I}Hr~<p&Jxz ǭJֻuR N =!?r3z AqZ.^x`ѧ@4~` 9S]"[ Bԩ˗WV\YQJhGH?%xJkh.v[.n4 6B=hy\9c&͓UK/7^B:غo5'\kA6=ԦrnQczf# +o]}_XWzĖvn5(TGD]\Fʹpet`MqFD\z@ LU@.n@n HTO&fav*~xd޾c *@@M߉3 uxдM$: +a084gUW=HA!K sN#Χ?xwtCx$k١?p\%JPD~haH]Hd.ᐘ'!=IEf )cV(B=3k&,GS{p,UaX:U Z';1 e߳n@g*r|M`Msm~wrQIu0#:NΡof!CUss#+ΫrYRi/ùT\KP,]./ +b{-z ) +kҙkzMW[W|in5FY0 +mZfgEHh%_&J3R`Eװ\NsL:eo)J%`[hde. 8I N9a#֟*edCJ iK!IUf'f,qg{_#*w`(23j!1 O-V,rlyXVѴt'ʡIh3uy59P+ݻN_ĭrnQc ]rnw?L5kY1o?]įm*ܱSc>G/){;\ ?`z +n}UgCivE竞A6@ =\rgJ8/oglmn[l}S7ߏ@5}2Ck!q8'ת +jr6[ I~I۴+ 72*EhzQ,BJB8۸i8)Yv3ML}8gǣd徎6x.IlF%NZX|2] +lj+O^뇃cqlܕ4Q~n{ +$n@!jf +7CE7PT{ [עAފr[ZlzOZvSRДAM쵷N23eҮIkc3BG}<ɖz4ݦQoo^Ӿ]Ǜi`iɆ(Nz h!ց zmM@z\egZ2;MY`.@PF~Z){QZ%z()yiJe U;az="+*O96؜٬n:)KF`2c˪6e(r#D.U ~ρxC놭gف.b)Nz/ld{ ѓX4*b)"Y@咐 "E\oW.)g/47Xk^ CMuՙGY4H8 +UxZJԫ)MJ}ĺv86A)IMd `i/S1fHSp7QR'{ 8f?t8HR"8F[@% 4 z}D"A +cĄMcvV҅:+?gut[) +e] h/,E GҊc2t.Aϸ7ɳ/~VMP?1?ֿVUw?s8'߉j$d gn8GZk&GX=O[_.07FbQQ JUX*#2kHGq::(y`;-Vދ:VhJ`!W(Gԛg{Ac/ ażi0j+Qo󌽟+4 /?Pn2ê`I=7IWKrnb1cp>dzU} 0W/P$yFƯC-ȯh8zJʩ[_h ~O’l}-(NelVs:/w ( , 4_%+w 6ɢځKI\(mTb}3WStʥ씟[Nd|1!lKVsuUP">o >`zşicc\դ@z覐3xm۽8.@VN\G 'ލxesj0M5x*wRwˊ\Fԓ-@3WtQy&CiEa@yXVrqjUv 5H9J +&_~jm5ɸٮ]ɐ"$J $YQ +0kDXm%D@۬+ Sc\e-tr<o,׆P֪C64j4(eBoj7$N؆ i?G'P5|b0h2**DBh,:3tnf5hod%̷w. bsHa(ebvegξZ?@}Z-|>OkQ0Jr_^mE pנzh6Z"LxHgozBcqH2ֿSڥw;G`=l[)lcjLܕ44PT 6"&= P?%  QaPsI"ҦKܠ*S.ݨ}g3{}q΁|%g0; 5:On;W鮿:^ ޼}dQ^ց4Qs +NV[|N>R#de^<[#-ѐSRyx/sfa^Td q3J[&ul/7Ushp2vlBi03C9M@1|xrc#^Ws| # 5okؠ*`3]vҗ6c ' `"2g~J4L]x@4)id6D{ ݐe I,Wkr=Q?e}nE=n:d,!f%\ZD1mQo$&pw[x +E5Ǵ%'_40tjΡT״ѓ >BqFǰk9rEC;˹h[Eť=# ߛdVW^YcO[۴і %N' +GS)loz\^uKrEаnڎ9QoiÑZO˪sF 5Q¡*$hǨo1pf--$@6fc\wPC2`!o +`ѧέĨ;CzsML#+3VZXI,;"J"Q;OFöܬuKk5YJ HhGB|Ίe=YWZhyk"M;-J0Iߣg~r'5xc"im*q?!r0ԝ({,QhƧ?f$̴TDJk]"s;Jf_zڔT9 cJXpEлD@+9IN~L!t-0{k12.O +ckЖ3180EDް ٺW Q(A+}]%lNLǡxnx&w 5*h8ƲQQ!=.¼lҚC,7MgZ><*>LG_l뿩%Y,-hN~O.]벼e7g=0ލBs( OW,{'%fSIP (QMw'/.¸e^0鍓Y5|l+sFJy\c5>Qυ6TfiLwv1 <5JnlM̿}c/еif,8YKq0%91RT/|2Eb޽{URj#7&p|cYEib/Ѹ&-d *+^}Dk*Fl$۫Xar:mQج6)Ay`qorj$=uCL}`;!U5rL%/ϳxeyCGG=n7?"Aá7ZM ,fD]Kc|Jށj)4"_Pe[7;ZHEg {b?Cv2!F& /[1#clOQۦ7'Lٞ; Uq#>%Lqw` @ϫuH"v:_ަwTR:TxRY# +LmȊ3p^֦wliX_sb?+}h#̵YRiL vu9󛹜kأ[ՔL5Lѣx- C[s Jfz;% RԗE_n\U>gwu kxV,w륦]dKhX+2g4řHe|E 1^iwτ^%<ɻe9/J;ټmh],yna! [ ? +7!f/{vdGdh̲jo^j/v G &ECVϋIlyUǁng삸Ð +>,=(ԩȽ=Z=-l!6M|x$emL *g̟r8%#ZZXD)JKgḥ0\Cۃ<'pP*|p0I&>f*od$f\WK@h7G;JFmx@DyDsR0VV˜G6c-k]W4-c]I48}{gB@3K2J)msț0I7GQ+SVUuψȆ",Ċ9g;A~{ǝr#@>x7i* nf pw+,k,ZR;s󜙫.Cb@'-U P+(@gpM'# +̋OA)J + W~@#1&Gs{9*/;;4!]̽Z:X>u{HLJ2?8~ZQpd#Zmߋ?w!v,ES %=m)31R^֫Bze4xO+Or +Y4`emtW#|FhĵQ՞mz=HGǰ)nixB1,mQGF߮ z=%fnhe[Bysvr u)_rxu'q^$ D#'6T4Y%F}N$V4[ܩ&]H$g}!TLyUT&j.$K +P64C > s#7+пK8?loT!`$#'-$4K۝g4S&Qqn>XX`!McG 0 Iֵ3a^MY>~{B4 A!%V;NEz>Q &*z1on[Q->ѱB/R$K텊- S{g|;{/~\b)(<[XpCWݚQ8WD ^]v)ernnXhDhW%TCE"i[IIsչXDE'XZ.͉;2bn?jFFr\&G&<\% 87 \??n9*k3xyBL9eW+_1n~"#l[W'%hs:Y/QOoɞdwi$xBm@"w5sͬ)aa ˛5?Ug_;?]$ce,{(BjogY(S_5jq*ųGp K1 /e+÷ZhK*vЁl"b!XVEue1-Ce4$)H\Y,I2Z=|6GR~n)[22;)yHZL,%6/"e'.Z{\B +V]9[Bc~0#a[<>S5:GHF(Xy;K7؊*p#gn? >-Px!ނ48&m[f`^bv[%jʏ;  u_]TTfTQPl>O_106q\Xa]?M$Yчt3ltwxY +w2T_pYC[۵ͯ<2CC\DPh7C]0BV,ߖ* +Kؔ-t7tj.vQ@"eVmD0Y腚oeP 8.-՜ ]ۡ' A0˕3"AVB=Eɴ|ZOI?%Xx+HtwNVal\؊;2m1]#$e-:Ɇ?tu7g( +>t{+ʏTyS;P2 i8H`oGZ`|L1)*dÝ/|uW4AVK9C#gL[9J>`~En2i7& Cpď1[ie wHi1ߔ\D5U.* |Vh @7sLQh%ayH&5OWvZnLH)DᚅY8*#4 AǪYQƳ<馬sFVͿQXJ$S9<猎߉ F,RD+E eڌ$%B⎹Gޗ3u + u +0m򹊔XH8Tf2tDNoQ!9$vNv- d)C~4Uvճr2 de y:F)=bĈ8?ß*չ]!aOtl7ҙKl?@):"ui.L k؈τ8; +rkGűfb(kp\?\{j=Rc+@M)M4MDѩxVzڙ?o_/wkɹFf .lO-M@NF%Y[w})ǵZ!o S NuΞB(3E~3Qn -?_=}(Ԓ/ +( +K0v9{m(yxR_[qu_i4}w$(b~S6 %\/f*Jt~m32AK߫ER/2\f6"S + +hD1A(#.79 .e`*[@zNz:|gG5WsY | /9{ml$4vb+UuM$W-G;tDC'.ntu-}]O/;<pZ\kDX4:BM_[qf8 Lh N/k]3kϖoL.!uO"zdxKg\SoKKPᦘّ H|F/A%^"\5/2)iÂ8ֳ?j=,%D>#*v+Tp4LtEaB2qo즴6!72Tl h-[/dL;G*t}FnT딗!]@[\icj,^h*BS]x͡Z'F;J{R# 5 {j$Ӻ?._!,$jĘb"qca}^R4`#-_fhW +e""XKڒ>-,Y% 0utsxW0OE wX$P%;AiW8x HY\FOAQA}!8fi/ꙪxO#w6Ɇ Wu_@> +'aY7Dʬpe+}'>ƖpJ_!X@gwW *'#ݐxV;2 zE+|.[U)UQR)''7mѴ p'eAwQ~.SwΆ #¾< 6|%KD ur#,N?x5ᙥYC!6c84k_"qShIH !8_M_.j@Efb;`\% +F>}P}(@={*\"V 4qaESn㴞)%u ښ *Lj23uT%Όш +r>mm3X0)1os: $h饤??Ox3`E)QΔlMH.gB#bftUû{֔= $ +@l}R3 9a+Yn::Qo2!g~rμ7'8b,hl[]Iqd8ft#{|u_IVr`RB[t'gFhW֘j73 8;ܭa6d΁sf vzvn~v9;]_'{B3?l6~>^1Vz_!fw87)֭a﹢ -/ S#hWI,3"/ρU>} OK8#_N$]"!#{'[גM\T-yDz.ӛ~-8m6f1T~~=_6{u3@pC1Z\2Ar1+.OCBUho}8 +3 }h&%, x |W,Q +@页[gBj"#03;!?9kjSfV5} |Nexdgsqj kDmւy:`^Ǥ-gb@_NMj@nF=8G-Jajeʱ3rqW6^f49sg,xB~ߺZ:eadoL!/.KL׬D%RqlN3u) bi{XP~lg8Q;`:y"!O|!{Kl)ުItY!a845U *;pd)~\ Ym3ΕVBsSaz+$tm0)ۭEAf&KÒX VT)b/ U@꣫R,7 + +ќ {*!,+>Uc*NO +ȤYRνv0*Hta <(cش+qbgaJ٬Rz +WEO|V [!"a~`4稅*Ga[KEF'=Ӎ'}I,eD[԰cX?h1vDX93CWP~ z\k-u%Ti띍(v`!] +cLAdB.h;LDs8~ֲ~@ kj8W#~:{nb\VGuG>!{^!5ՑBq|qve:~B\s s٢o3^X0ؐqah)˧O}wc`brY[yξAfhSȿb:H#78JDD#71nOO_a/|G MQX͎趐Gc#f fw(Y"{}(;r҅Vy +K)2Wfab_{ٿR\śi`̠<1Q\@߳9d" g@ NP])s-=t fJ./ K6bS/=j/"oVQr֝)GTfC)ʇqɾtP3Ô7j|Sl"7o~FH eK 3=Т _7ݡY"a7aQ!ZzH7$p Džcb_))iԑҪ)N[ ug\Sg.1=_YLyUF *qU9:pAϓJ/2ے+$ \ͪp);¤*Ms'A$$6cu7F0uy8!cg~k:j+Gq>Y;!sJ~x/H]D9W5$xDef0Bǡz=h5:VKF|o:[N+k0ѩxxjqcQv_튃 lrꢔ~>yzۂ@zɈT^c |tU:H?6Wwߑ ɯ. #Ql-d{q埥 <@o5 Bܛ6{I)# <.woZ%uKiRw^o>t/>m 2AC ;.r8[`;Ǫ,tJySkܧ)+CՀDD{.70 +IHjE&J_6_Ql=I#"+Z Bq/M8}Ix`oТtEڏzs$ZyMbĊaᎣtZ@oRaz6x~r B +,MٝGx=?tM;JNOI!}c_H1_/L:=ڎC UיGǗuO owybg60 %S^ b-0_ vCXj1zRn=TdHӾ>=іb<U-}"&nos|ݞB$_4#kiNN`KKmݠ.u/n;-;8pM:IgbSؐcub4ן}F.? Xr06lW{8”EN~}bD'Yoxp`B2!yn^K;T>9*rvg5(HP W]pqS c>p*[e t'j^(:Ѭީ0i9F8;psbzqH& 4pV W<>aJ[/S&υiTؚۗĄȌ7_qM1 l +[@7!Ad=4nH +qf(LTp՗w^d'[ɽ`8`9Gm:UD*>NQ$}'rZSa[.0Kv u'g.:\+Vz;>&1>oE=0\Af?ɛ u +tB_{5ԸG[=7a\&c\]3fó)AoCcK8U* ewzEw_3>2i wWyRzn>A0=gDDE6bVes+?e I kj,}\⌼*P*$+w9A'<6?Sz5,6>.spkL1[YNCĭs u{H]Nqݬr1_ɀo_)@p| +. GrrOu96GI('w1WЋhkG~t@h l)jC,h$,O̸[]+N%CSJbFm`U&.B]0MknN쓔wʱXlmfe0z2MR vuQ'uy7]axB˯ofʒxc4Bŗ]hL5 !hL4GM;wy?`OaC0F(jJlX䨀vAOpE/:k~5\4a(u59{6(7'aiZ&+qg&'bl:G"i?L_.b`^55;La=(dr<=DrN=^4(\exs]ENc]=GH]=FE܀i+*11q`XG j(>@Af r +T;7|$:|6aFj'b=Fq㋢SB6K  ,=5)ϼXxú>Ѳf Lt/~"ޱ#L7RI>6$Nma\JL}C87Yt n*#*9pM0 S汱̈́Qh\ຬrbh5&lLҚeQȒ4TXTf"(]{s>h wg.ՒHxʲ0?s6LJ!%AmVjRui}BQ _@&I"jFXs9Ude3u, 4m?:.i Iu Ii)j/9N"@'ye'ʼo܇_z~4Vs_帗ɫΕoEkC`jU(Y; ǩr""{3սneXb@Όt2{kQV^5`T^ wG;pVulȀ5w.4 ,Gv9J;dǮjFۉHTXǍD3ݟPaulX5.6]P`@ya4tb"]pN]jf(y \1W;*5So3.NYdUwOu87sBEjb_G9o+xu)؜m(mbMrQjʵżQG 9wJgYωxWA'/]wLp BG$Ni!ő{_ɔCO Յ0)փU0"ݏqͱa2qيλʓ qs{:8犋qJV8FUOU|l}Tno1baBAE|cКw3ͳ0Fw+1@ HcXyU}=Oba:QRTG_JY /mF@"gO&gרx~U亶}Eug_lBSl`l嬅;4+˅VtOTM)b; ug`מ -\dmC'd MIrk2)i[Tp>CY`k,: 1}Z:⨊9uZ8\(}†LcO׳vo,J.>UgG&X:D%;":I뼥-_VUh} N?926r6)./뉐ƙ-C_Kn܇c8l/ܞ<93bԷn$B j0δ UFj6[·Я,=>ۇ-]r1YRRt@P$ג*4qV@d:9ɓ:_}e{ +fw-N}Whw.4XIN'5ܯO%뙮M٩s]+FEйڄQԮBpW9q- a<paIq{6h2FBbD/Ew:6)Yr plU?C00؎PHmbjǿW)t.l4EbOK%Feۨq"]竉{6bŒQMd{FHӔJψ)I3IbwV7 +9zh~" S_.9b e\h(({) \o"΄Թ䁗I9 ZR^К/7(:}TH5 [c/K Ny0c? Ď# +7Ͻݷ:oe<(]blr4{y}5л}pw12r"sf܃T.hS|l.I=ɖ~^Ź1h2 @3+7,K^+ l/𲀽<GDZJ8zZ%lw,+ n Ϟ8b4> ++8SS(ްGL$gobP&`BC|"kq쒃+'Ұ(}vBwi2YgD¢\ #dJsljstTSےVx4&03t- 0Λ\FY@#$"I!t /dԻOayPˁ/ _n Xr~qW!3๦" 5gٽ3 +#GkF3p(쒭cXHNQPe [nsM}xEuŋS& &mn¯v$~єLv穻E!31'qX^{K5ȾZ`h{VyąpEhM mbg +h>"(25OWE+I_~^7#OF +YMc$$)bޓ {ҲvA\䰾Le)d bML,,<uN6eN {%Y⑂Mw"K|/eT9egw2,W +z+EuI!G$1Y\K(wD'`ģͯpC>7c=H`0jL>%1T߀.ꂄT3lnIJTSހyz }XUm\<,&:Sk-W#0?$P6 Tصlރɲ8fOmjz( ;p,._A0qh{\.Z0:q~|6˼ pL`}sq7(eg+RPuQzfc0XyM +T"d0Ks J\ơߺ!?/-L,sp xj`c?LgEO*; +.YDs :x#DU"x7)oFΦBe` xvV_?[[)xV|˾ě +-aQvMI?&Ehh bngv_vT*9Z~mZ~KG8-k@ %"J7?H{= +11OQٚ[V$|3~N묩aVĞh RJpI…Oyl) ޶zn&ǁ~Qvԕqs.V ++1`^mk4+-_< )$MM*20V@'hba8|kF#gf%|xI`+~|,K-5P +„y Rd ;(;^L3w,OrR՚Sl)F +Z̩1P~OhU[̽AҾ@Qy*:r=ɍv"_5_;?eY--^Ďːb-oA^GOL`ei\0B|կN;oN(~`X3:[]TeW. +thm D ~.s.Q̣7m-dd,#&H3[y ߟ1k)duFqƷge4ׁ1#mToZR sAF͸x$ԯ ;PSE}=y7ɁGI` `J X# ЊOֶT6gQܣ +Q`su QZIB܏(liqSjH!UVYl4^q8My;E#VL +!:5 )!&PTBΏp}^r=(x)9.7/oͅ]9W9 7@g{P6㤂ۈ@8 oϣ.LIzGSuc}WZr*9T$Erxi`Uz +tr9EKғ "Vc!acC0>~󼗴 +2$ 4#i:*YGd/"~W̹"C_J[:t溬K>yq{DLL.@믶 +&6=yN@d鄹\pr7gѓA-RHX4K}gv;J231|}ctZ,!w$a x}#Gl+uc%!zBNCH%L{/ z>.rnsMl4eۅZQrSKs7W$\w)1M = J%< = +/]zw3:f3n|<&%7RubIX_Z 䡤TȻ'%ͤq$( o+nЫݚuCb~ۗkUY?e'@1yպh~K2aTZb"4YoLEP冲1=dy7 )ެP+`E@#C :yjfq@Ru +?FKH5\;R2Ӫdb641~z#-8`׎ϺPW e5y,W)Q?ޛ⳱j63pd |c$B@>Dmd@esV g^ST<&iywny vz$퉓Q̢fQc]~ŞbHⴹE `Eog%P]TO][ }*{۝Sq ]pO.J6?aN$1qUȠ&Vl8ʡ)Po-dzL۸PF٥$Hz\Gk1"fh ҩUUe;VPJ![ *L݆~U =aʜE%`V -YbU>VtjKcUF'\vawTx!g%Qr8QqfB_zZsY䒫5φ) 2[8!"d?lTkWJ8ou +X xnmP+ q +т6HOȚ~saL^/d%l᧲lڊ!ѸF48aMd;_rOD~b%pŮx"8}45pœ-q!nbf,s(j|f^+7Q!fngNqmrAqr +qS/* (qmO_+ b&*x.1qfL7|Y)!r٩OKs"cK&Kk8Xai>Rr-ł}(lW.<G˶c>VKr e>pm1f05NRY]Ffiq|c܁)x-ཷHH"1({}d|n_n*&N|OdC(z"zțQF}cPp{"IT.JT+ J~c’t#޿"w!p1y-`<4aKQ/ 9VMmI#jߞ7{N\/{I]z +7fnt() +FnB1Ęjkl=Sh 90' ؚ$L6zE;kW2//Cafy2COSE~3N6{M+qDT4W‡ ua*[[\~ oTOYw F"39#i›Pw& ڎ%٣ʛj+2Nɒ|py4y#U!;?{?\!GEMj:S `d|ZYـ KЦ X?knjK.7l[=bMeJH;qHabu%W\Jd?2'} ^Vv=]7eDN=[Uh:O9jTo@mcVh#*-Q޷ a+{?m@.T_k"+3) QzMP5@u +| +:Α30U]_IXMij>!?=?ctJzEAhA|ob뼐}dR0Eop?8تIf'7]BjDrXKh3ӱ372"9f˜J{>;xQ7OIAL޻]?c0)juϙ:Fon"f(Tm;q\u+8˯ b|s/AG>^kD5V@]3F4˞$Mng`q%6gZ0KSʓͱl":]q莤,3y>]W3}ܪT+VdeaMT|0ac#? Pθks *W؝ C?e7 S"O'@eG`՛aAmtҧ+.{rոEӘy*ܱ*TK+hO몜4dJNkH(4̯Sn^N6N߶!SeEث˒C26EM(kFu6<uz'$zw ?n lQwcZ80Ic;{Jj4*5)Ʒfo-bbp3+<' ?Y$Goyr2 5Hw|Ego`LoJlTwa:p\WxC-%c0! D: ߪ8 ,EXDG1.á^S<(JH$WKV%bҥ-ۢlalyd:ٝ(%avrٓ%R'YOSQ]X -,T%wF*ѷI5I:{(e9 + A6|,82<]?=8MbB4os0` Hɼ(O<u&AuA& k`w""\F|'E %Huu oyim3 P9Ev\$ÂāDsxn4宱GiVP2pvT>NT0/ K[A_ +xLpH"*@b1JߝЋ*SoR >(+Ӣ=7tɦ47U.M I?/hfx&,B_Z p2쿉Mk9`_tIxky=5ӺZmq +7ϝ|͊ϐ^=3 D#k^"}?AO  +(•'Ǹd2Fp„NgU}(q60PLAESY/AZr|Rٌ\J|Pրep73I7o/ {qV ѕnBk%v0YTSyRtvEm+~oN7ѿd\c+[Y:<1{'ţ7$u#_,)r#3'XӪ0l ێjdOc;MhJD[4vN {ׅckWuS6 +endstream endobj 6199 0 obj<> endobj 6200 0 obj<> endobj 6201 0 obj<> endobj 6202 0 obj<> endobj 6203 0 obj<> endobj 6204 0 obj<> endobj 6205 0 obj<> endobj 6206 0 obj<> endobj 6207 0 obj<> endobj 6208 0 obj<> endobj 6209 0 obj<> endobj 6210 0 obj<> endobj 6211 0 obj<> endobj 6212 0 obj<> endobj 6213 0 obj<> endobj 6214 0 obj<> endobj 6215 0 obj<> endobj 6216 0 obj<> endobj 6217 0 obj<> endobj 6218 0 obj<> endobj 6219 0 obj<> endobj 6220 0 obj<> endobj 6221 0 obj<> endobj 6222 0 obj<> endobj 6223 0 obj<> endobj 6224 0 obj<> endobj 6225 0 obj<> endobj 6226 0 obj<> endobj 6227 0 obj<> endobj 6228 0 obj<> endobj 6229 0 obj<> endobj 6230 0 obj<> endobj 6231 0 obj<> endobj 6232 0 obj<> endobj 6233 0 obj<> endobj 6234 0 obj<> endobj 6235 0 obj<> endobj 6236 0 obj<> endobj 6237 0 obj<> endobj 6238 0 obj<> endobj 6239 0 obj<> endobj 6240 0 obj<> endobj 6241 0 obj<> endobj 6242 0 obj<> endobj 6243 0 obj<> endobj 6244 0 obj<> endobj 6245 0 obj<> endobj 6246 0 obj<> endobj 6247 0 obj<> endobj 6248 0 obj<> endobj 6249 0 obj<> endobj 6250 0 obj<> endobj 6251 0 obj<> endobj 6252 0 obj<> endobj 6253 0 obj<> endobj 6254 0 obj<> endobj 6255 0 obj<> endobj 6256 0 obj<> endobj 6257 0 obj<> endobj 6258 0 obj<> endobj 6259 0 obj<> endobj 6260 0 obj<> endobj 6261 0 obj<> endobj 6262 0 obj<> endobj 6263 0 obj<> endobj 6264 0 obj<> endobj 6265 0 obj<> endobj 6266 0 obj<> endobj 6267 0 obj<> endobj 6268 0 obj<> endobj 6269 0 obj<> endobj 6270 0 obj<> endobj 6271 0 obj<> endobj 6272 0 obj<> endobj 6273 0 obj<> endobj 6274 0 obj<> endobj 6275 0 obj<> endobj 6276 0 obj<> endobj 6277 0 obj<> endobj 6278 0 obj<> endobj 6279 0 obj<> endobj 6280 0 obj<> endobj 6281 0 obj<> endobj 6282 0 obj<> endobj 6283 0 obj<> endobj 6284 0 obj<> endobj 6285 0 obj<> endobj 6286 0 obj<> endobj 6287 0 obj<> endobj 6288 0 obj<> endobj 6289 0 obj<> endobj 6290 0 obj<> endobj 6291 0 obj<> endobj 6292 0 obj<> endobj 6293 0 obj<> endobj 6294 0 obj<> endobj 6295 0 obj<> endobj 6296 0 obj<> endobj 6297 0 obj<> endobj 6298 0 obj<> endobj 6299 0 obj<> endobj 6300 0 obj<> endobj 6301 0 obj<> endobj 6302 0 obj<> endobj 6303 0 obj<> endobj 6304 0 obj<> endobj 6305 0 obj<> endobj 6306 0 obj<> endobj 6307 0 obj<> endobj 6308 0 obj<> endobj 6309 0 obj<> endobj 6310 0 obj<>stream +5Ug`^}t@n7Gq20*GGw:)[JD!6O1EijD,,ro]0Í/Ӛ(1Ņ{BU{>.묷c\y- ",r?,Huȿ"z^axK@QcM(4gt ?9e"f%`(SK0&U!1el`dܭsS"Yfe5Du5QK!?5}UUu/y9n7MB趭 +xL]FgXWƂJس+8-0O&Gb[WVL,P43fuU&=PF3L눳&TIw3ܳ э`|pg8j{bUƲzrbM {0dEBۆdR1.p,%My⩚^݈Kgթ6֜t@͸I~ +QU'኏[(RܴI'uo/~gǾbHӂa +A~1I;? =afMn: a#wmCJ=m8Ć0gƌs CG̲:X;t`,; {5_sliZQnX#2W@8fv3fp)W61I)#jiG]ͺK, z h/ѫmG:< E*lͺ`sZ|;p}/\*=(`̵BJQεpȲ"zBE]$$'W%Hbt2Rt"oAZM#)kSҤ$ac7qah(XbOn;T/bE'ַ<ܙ8@z\|Tj L﹚_c[AyCds.8_cQ8ˏE}m_*C6 $&_nPOcɹ˪msaS!x@wE?5m z+_|r^?a1|Iͧ*C+<3~A+@1wgw5HT_(Ӱy] abg8+#kZZ;dD~^ CV+ =R8c °sKAt)}g1R~8qm$ϒ烚cA4 >K)d|Kb0UԹT EY:O THW5,hsFR#7(Y=·/7xp:Јs;Ev4(|^+5*bT)ӜAꉡ Plh -dOL8wtmH?9[ۆ|,Eg_ 6>~|.@9;:BsGy̵$ CHr9ʙgE\j`j[*Oʚ2̇m~y"l~5vڴP,g|吋STPd R=6q<4YrI_z|i9Ɣ۷/ +v֟Տ̡F;twq S{}˛ڂD@Ky"9#x<5-ulrWDI?yhGN#}? s4Ű-KR -(v*3!yw+nY +LڎK!"ZTRHI(k5GJ%G5!8ӬD>r,:j!R!t'E\TWD_ +LVҭ|'gNr|L\$iʬ?Xw՘gnTVX,{_9ԯX#:Wm9wx^-QtOs*x@@? -pxEo]t:ѕxT  DR ?wAD ƌj4jfUh]ÇYLn2y_oT4: Swlgd[{oV +O<^da}K ~bEYmr^)B ;5Su,2@\0)(ٝg`aw0$ct ކIIɯ2YLOE聁%L s k +:;M|;zFcR +C+ȍ2}94s#+o+o'M` RDa"me*[! KZFvCa>_/O29BW h3xW5evQ-ahse!)#iw!Ɓ@NW&Lw뼞 j`H.9.q\(}"l*l;Ʌq +Z7Yr! 7|Fj"' 6:6LǜzVI98 Ʃ(,fpQ<":Dǜ.;w \ygW +Y%eN͂dm``Pqo yҜOoSu_GGb3TʵU!:|߇;qƱCeWl)  4OZRji*ĿPNcSJ (^9{Zr@%'}ڕz9{xuVhl%R Ab }GY: +endstream endobj 6311 0 obj<0nep)/Title(R LvC!fnQ|,0%{*e/\n!)/Creator(T_rt;iQ=hr&"<$)/Author(t*> endobj xref +0 6312 +0000000000 65535 f +0000245799 00000 n +0000246237 00000 n +0000246360 00000 n +0000246483 00000 n +0000246606 00000 n +0000246729 00000 n +0000246852 00000 n +0000246975 00000 n +0000247098 00000 n +0000247221 00000 n +0000247345 00000 n +0000247469 00000 n +0000247593 00000 n +0000247717 00000 n +0000247841 00000 n +0000247965 00000 n +0000248089 00000 n +0000248213 00000 n +0000248337 00000 n +0000248461 00000 n +0000248585 00000 n +0000248709 00000 n +0000248833 00000 n +0000248957 00000 n +0000249081 00000 n +0000249205 00000 n +0000249329 00000 n +0000249453 00000 n +0000249577 00000 n +0000249701 00000 n +0000249825 00000 n +0000249949 00000 n +0000250073 00000 n +0000250197 00000 n +0000250321 00000 n +0000250445 00000 n +0000250569 00000 n +0000250693 00000 n +0000250817 00000 n +0000250941 00000 n +0000251065 00000 n +0000251189 00000 n +0000251313 00000 n +0000251437 00000 n +0000251561 00000 n +0000251684 00000 n +0000251826 00000 n +0000253855 00000 n +0000254330 00000 n +0000254454 00000 n +0000254578 00000 n +0000254702 00000 n +0000254826 00000 n +0000254950 00000 n +0000255074 00000 n +0000255198 00000 n +0000255322 00000 n +0000255446 00000 n +0000255570 00000 n +0000255694 00000 n +0000255818 00000 n +0000255942 00000 n +0000256066 00000 n +0000256190 00000 n +0000256314 00000 n +0000256438 00000 n +0000256562 00000 n +0000256686 00000 n +0000256810 00000 n +0000256934 00000 n +0000257058 00000 n +0000257182 00000 n +0000257306 00000 n +0000257430 00000 n +0000257554 00000 n +0000257678 00000 n +0000257802 00000 n +0000257926 00000 n +0000258050 00000 n +0000258174 00000 n +0000258298 00000 n +0000258422 00000 n +0000258546 00000 n +0000258670 00000 n +0000258794 00000 n +0000258918 00000 n +0000259042 00000 n +0000259166 00000 n +0000259290 00000 n +0000259414 00000 n +0000259538 00000 n +0000259662 00000 n +0000259786 00000 n +0000259910 00000 n +0000260034 00000 n +0000260158 00000 n +0000260280 00000 n +0000260422 00000 n +0000262451 00000 n +0000262976 00000 n +0000263101 00000 n +0000263226 00000 n +0000263351 00000 n +0000263476 00000 n +0000263601 00000 n +0000263726 00000 n +0000263851 00000 n +0000263976 00000 n +0000264101 00000 n +0000264226 00000 n +0000264351 00000 n +0000264476 00000 n +0000264601 00000 n +0000264726 00000 n +0000264851 00000 n +0000264976 00000 n +0000265101 00000 n +0000265226 00000 n +0000265351 00000 n +0000265476 00000 n +0000265601 00000 n +0000265726 00000 n +0000265851 00000 n +0000265976 00000 n +0000266101 00000 n +0000266226 00000 n +0000266351 00000 n +0000266476 00000 n +0000266601 00000 n +0000266726 00000 n +0000266851 00000 n +0000266976 00000 n +0000267101 00000 n +0000267226 00000 n +0000267351 00000 n +0000267476 00000 n +0000267601 00000 n +0000267726 00000 n +0000267851 00000 n +0000267976 00000 n +0000268101 00000 n +0000268226 00000 n +0000268351 00000 n +0000268476 00000 n +0000268601 00000 n +0000268726 00000 n +0000268851 00000 n +0000268974 00000 n +0000269117 00000 n +0000271165 00000 n +0000271691 00000 n +0000271816 00000 n +0000271941 00000 n +0000272066 00000 n +0000272191 00000 n +0000272316 00000 n +0000272441 00000 n +0000272566 00000 n +0000272691 00000 n +0000272816 00000 n +0000272941 00000 n +0000273066 00000 n +0000273191 00000 n +0000273316 00000 n +0000273441 00000 n +0000273566 00000 n +0000273691 00000 n +0000273816 00000 n +0000273941 00000 n +0000274066 00000 n +0000274191 00000 n +0000274316 00000 n +0000274441 00000 n +0000274566 00000 n +0000274691 00000 n +0000274816 00000 n +0000274941 00000 n +0000275066 00000 n +0000275191 00000 n +0000275316 00000 n +0000275441 00000 n +0000275566 00000 n +0000275691 00000 n +0000275816 00000 n +0000275941 00000 n +0000276066 00000 n +0000276191 00000 n +0000276316 00000 n +0000276441 00000 n +0000276566 00000 n +0000276691 00000 n +0000276816 00000 n +0000276941 00000 n +0000277066 00000 n +0000277191 00000 n +0000277316 00000 n +0000277441 00000 n +0000277565 00000 n +0000277688 00000 n +0000277831 00000 n +0000279787 00000 n +0000280313 00000 n +0000280438 00000 n +0000280563 00000 n +0000280688 00000 n +0000280813 00000 n +0000280938 00000 n +0000281063 00000 n +0000281188 00000 n +0000281313 00000 n +0000281438 00000 n +0000281563 00000 n +0000281688 00000 n +0000281813 00000 n +0000281938 00000 n +0000282063 00000 n +0000282188 00000 n +0000282313 00000 n +0000282438 00000 n +0000282563 00000 n +0000282688 00000 n +0000282813 00000 n +0000282938 00000 n +0000283063 00000 n +0000283188 00000 n +0000283313 00000 n +0000283438 00000 n +0000283563 00000 n +0000283688 00000 n +0000283813 00000 n +0000283938 00000 n +0000284063 00000 n +0000284188 00000 n +0000284313 00000 n +0000284438 00000 n +0000284563 00000 n +0000284688 00000 n +0000284813 00000 n +0000284938 00000 n +0000285063 00000 n +0000285188 00000 n +0000285313 00000 n +0000285438 00000 n +0000285563 00000 n +0000285688 00000 n +0000285813 00000 n +0000285938 00000 n +0000286063 00000 n +0000286187 00000 n +0000286310 00000 n +0000286453 00000 n +0000288285 00000 n +0000288811 00000 n +0000288936 00000 n +0000289061 00000 n +0000289186 00000 n +0000289311 00000 n +0000289436 00000 n +0000289561 00000 n +0000289686 00000 n +0000289811 00000 n +0000289936 00000 n +0000290061 00000 n +0000290186 00000 n +0000290311 00000 n +0000290436 00000 n +0000290561 00000 n +0000290686 00000 n +0000290811 00000 n +0000290936 00000 n +0000291061 00000 n +0000291186 00000 n +0000291311 00000 n +0000291436 00000 n +0000291561 00000 n +0000291686 00000 n +0000291811 00000 n +0000291936 00000 n +0000292061 00000 n +0000292186 00000 n +0000292311 00000 n +0000292436 00000 n +0000292561 00000 n +0000292686 00000 n +0000292811 00000 n +0000292936 00000 n +0000293061 00000 n +0000293186 00000 n +0000293311 00000 n +0000293436 00000 n +0000293561 00000 n +0000293686 00000 n +0000293811 00000 n +0000293936 00000 n +0000294061 00000 n +0000294186 00000 n +0000294311 00000 n +0000294436 00000 n +0000294561 00000 n +0000294686 00000 n +0000294809 00000 n +0000294952 00000 n +0000296729 00000 n +0000297255 00000 n +0000297380 00000 n +0000297505 00000 n +0000297630 00000 n +0000297755 00000 n +0000297880 00000 n +0000298005 00000 n +0000298130 00000 n +0000298255 00000 n +0000298380 00000 n +0000298505 00000 n +0000298630 00000 n +0000298755 00000 n +0000298880 00000 n +0000299005 00000 n +0000299130 00000 n +0000299255 00000 n +0000299380 00000 n +0000299505 00000 n +0000299630 00000 n +0000299755 00000 n +0000299880 00000 n +0000300005 00000 n +0000300130 00000 n +0000300255 00000 n +0000300380 00000 n +0000300505 00000 n +0000300630 00000 n +0000300755 00000 n +0000300880 00000 n +0000301005 00000 n +0000301130 00000 n +0000301255 00000 n +0000301380 00000 n +0000301505 00000 n +0000301630 00000 n +0000301755 00000 n +0000301880 00000 n +0000302005 00000 n +0000302130 00000 n +0000302255 00000 n +0000302380 00000 n +0000302505 00000 n +0000302630 00000 n +0000302755 00000 n +0000302880 00000 n +0000303005 00000 n +0000303129 00000 n +0000303252 00000 n +0000303395 00000 n +0000305376 00000 n +0000305902 00000 n +0000306027 00000 n +0000306152 00000 n +0000306277 00000 n +0000306402 00000 n +0000306527 00000 n +0000306652 00000 n +0000306777 00000 n +0000306902 00000 n +0000307027 00000 n +0000307152 00000 n +0000307277 00000 n +0000307402 00000 n +0000307527 00000 n +0000307652 00000 n +0000307777 00000 n +0000307902 00000 n +0000308027 00000 n +0000308152 00000 n +0000308277 00000 n +0000308402 00000 n +0000308527 00000 n +0000308652 00000 n +0000308777 00000 n +0000308902 00000 n +0000309027 00000 n +0000309152 00000 n +0000309277 00000 n +0000309402 00000 n +0000309527 00000 n +0000309652 00000 n +0000309777 00000 n +0000309902 00000 n +0000310027 00000 n +0000310152 00000 n +0000310277 00000 n +0000310402 00000 n +0000310527 00000 n +0000310652 00000 n +0000310777 00000 n +0000310902 00000 n +0000311027 00000 n +0000311152 00000 n +0000311277 00000 n +0000311402 00000 n +0000311527 00000 n +0000311652 00000 n +0000311777 00000 n +0000311900 00000 n +0000312043 00000 n +0000313695 00000 n +0000314221 00000 n +0000314346 00000 n +0000314471 00000 n +0000314596 00000 n +0000314721 00000 n +0000314846 00000 n +0000314971 00000 n +0000315096 00000 n +0000315221 00000 n +0000315346 00000 n +0000315471 00000 n +0000315596 00000 n +0000315721 00000 n +0000315846 00000 n +0000315971 00000 n +0000316096 00000 n +0000316221 00000 n +0000316346 00000 n +0000316471 00000 n +0000316596 00000 n +0000316721 00000 n +0000316846 00000 n +0000316971 00000 n +0000317096 00000 n +0000317221 00000 n +0000317346 00000 n +0000317471 00000 n +0000317596 00000 n +0000317721 00000 n +0000317846 00000 n +0000317971 00000 n +0000318096 00000 n +0000318221 00000 n +0000318346 00000 n +0000318471 00000 n +0000318596 00000 n +0000318721 00000 n +0000318846 00000 n +0000318971 00000 n +0000319096 00000 n +0000319221 00000 n +0000319346 00000 n +0000319471 00000 n +0000319596 00000 n +0000319721 00000 n +0000319846 00000 n +0000319971 00000 n +0000320095 00000 n +0000320218 00000 n +0000320361 00000 n +0000322323 00000 n +0000322849 00000 n +0000322974 00000 n +0000323099 00000 n +0000323224 00000 n +0000323349 00000 n +0000323474 00000 n +0000323599 00000 n +0000323724 00000 n +0000323849 00000 n +0000323974 00000 n +0000324099 00000 n +0000324224 00000 n +0000324349 00000 n +0000324474 00000 n +0000324599 00000 n +0000324724 00000 n +0000324849 00000 n +0000324974 00000 n +0000325099 00000 n +0000325224 00000 n +0000325349 00000 n +0000325474 00000 n +0000325599 00000 n +0000325724 00000 n +0000325849 00000 n +0000325974 00000 n +0000326099 00000 n +0000326224 00000 n +0000326349 00000 n +0000326474 00000 n +0000326599 00000 n +0000326724 00000 n +0000326849 00000 n +0000326974 00000 n +0000327099 00000 n +0000327224 00000 n +0000327349 00000 n +0000327474 00000 n +0000327599 00000 n +0000327724 00000 n +0000327849 00000 n +0000327974 00000 n +0000328099 00000 n +0000328224 00000 n +0000328349 00000 n +0000328474 00000 n +0000328599 00000 n +0000328723 00000 n +0000328846 00000 n +0000328989 00000 n +0000330898 00000 n +0000331424 00000 n +0000331549 00000 n +0000331674 00000 n +0000331799 00000 n +0000331924 00000 n +0000332049 00000 n +0000332174 00000 n +0000332299 00000 n +0000332424 00000 n +0000332549 00000 n +0000332674 00000 n +0000332799 00000 n +0000332924 00000 n +0000333049 00000 n +0000333174 00000 n +0000333299 00000 n +0000333424 00000 n +0000333549 00000 n +0000333674 00000 n +0000333799 00000 n +0000333924 00000 n +0000334049 00000 n +0000334174 00000 n +0000334299 00000 n +0000334424 00000 n +0000334549 00000 n +0000334674 00000 n +0000334799 00000 n +0000334924 00000 n +0000335049 00000 n +0000335174 00000 n +0000335299 00000 n +0000335424 00000 n +0000335549 00000 n +0000335674 00000 n +0000335799 00000 n +0000335924 00000 n +0000336049 00000 n +0000336174 00000 n +0000336299 00000 n +0000336424 00000 n +0000336549 00000 n +0000336674 00000 n +0000336799 00000 n +0000336924 00000 n +0000337049 00000 n +0000337174 00000 n +0000337298 00000 n +0000337421 00000 n +0000337564 00000 n +0000339431 00000 n +0000339957 00000 n +0000340082 00000 n +0000340207 00000 n +0000340332 00000 n +0000340457 00000 n +0000340582 00000 n +0000340707 00000 n +0000340832 00000 n +0000340957 00000 n +0000341082 00000 n +0000341207 00000 n +0000341332 00000 n +0000341457 00000 n +0000341582 00000 n +0000341707 00000 n +0000341832 00000 n +0000341957 00000 n +0000342082 00000 n +0000342207 00000 n +0000342332 00000 n +0000342457 00000 n +0000342582 00000 n +0000342707 00000 n +0000342832 00000 n +0000342957 00000 n +0000343082 00000 n +0000343207 00000 n +0000343332 00000 n +0000343457 00000 n +0000343582 00000 n +0000343707 00000 n +0000343832 00000 n +0000343957 00000 n +0000344082 00000 n +0000344207 00000 n +0000344332 00000 n +0000344457 00000 n +0000344582 00000 n +0000344707 00000 n +0000344832 00000 n +0000344957 00000 n +0000345082 00000 n +0000345207 00000 n +0000345332 00000 n +0000345457 00000 n +0000345582 00000 n +0000345707 00000 n +0000345831 00000 n +0000345954 00000 n +0000346097 00000 n +0000348075 00000 n +0000348601 00000 n +0000348726 00000 n +0000348851 00000 n +0000348976 00000 n +0000349101 00000 n +0000349226 00000 n +0000349351 00000 n +0000349476 00000 n +0000349601 00000 n +0000349726 00000 n +0000349851 00000 n +0000349976 00000 n +0000350101 00000 n +0000350226 00000 n +0000350351 00000 n +0000350476 00000 n +0000350601 00000 n +0000350726 00000 n +0000350851 00000 n +0000350976 00000 n +0000351101 00000 n +0000351226 00000 n +0000351351 00000 n +0000351476 00000 n +0000351601 00000 n +0000351726 00000 n +0000351851 00000 n +0000351976 00000 n +0000352101 00000 n +0000352226 00000 n +0000352351 00000 n +0000352476 00000 n +0000352601 00000 n +0000352726 00000 n +0000352851 00000 n +0000352976 00000 n +0000353101 00000 n +0000353226 00000 n +0000353351 00000 n +0000353476 00000 n +0000353601 00000 n +0000353726 00000 n +0000353851 00000 n +0000353976 00000 n +0000354101 00000 n +0000354226 00000 n +0000354351 00000 n +0000354476 00000 n +0000354599 00000 n +0000354742 00000 n +0000356919 00000 n +0000357445 00000 n +0000357570 00000 n +0000357695 00000 n +0000357820 00000 n +0000357945 00000 n +0000358070 00000 n +0000358195 00000 n +0000358320 00000 n +0000358445 00000 n +0000358570 00000 n +0000358695 00000 n +0000358820 00000 n +0000358945 00000 n +0000359070 00000 n +0000359195 00000 n +0000359320 00000 n +0000359445 00000 n +0000359570 00000 n +0000359695 00000 n +0000359820 00000 n +0000359945 00000 n +0000360070 00000 n +0000360195 00000 n +0000360320 00000 n +0000360445 00000 n +0000360570 00000 n +0000360695 00000 n +0000360820 00000 n +0000360945 00000 n +0000361070 00000 n +0000361195 00000 n +0000361320 00000 n +0000361445 00000 n +0000361570 00000 n +0000361695 00000 n +0000361820 00000 n +0000361945 00000 n +0000362070 00000 n +0000362195 00000 n +0000362320 00000 n +0000362445 00000 n +0000362570 00000 n +0000362695 00000 n +0000362820 00000 n +0000362945 00000 n +0000363070 00000 n +0000363195 00000 n +0000363320 00000 n +0000363443 00000 n +0000363586 00000 n +0000365819 00000 n +0000366345 00000 n +0000366470 00000 n +0000366595 00000 n +0000366720 00000 n +0000366845 00000 n +0000366970 00000 n +0000367095 00000 n +0000367220 00000 n +0000367345 00000 n +0000367470 00000 n +0000367595 00000 n +0000367720 00000 n +0000367845 00000 n +0000367970 00000 n +0000368095 00000 n +0000368220 00000 n +0000368345 00000 n +0000368470 00000 n +0000368595 00000 n +0000368720 00000 n +0000368845 00000 n +0000368970 00000 n +0000369095 00000 n +0000369220 00000 n +0000369345 00000 n +0000369470 00000 n +0000369595 00000 n +0000369720 00000 n +0000369845 00000 n +0000369970 00000 n +0000370095 00000 n +0000370220 00000 n +0000370345 00000 n +0000370470 00000 n +0000370595 00000 n +0000370720 00000 n +0000370845 00000 n +0000370970 00000 n +0000371095 00000 n +0000371220 00000 n +0000371345 00000 n +0000371470 00000 n +0000371595 00000 n +0000371720 00000 n +0000371845 00000 n +0000371970 00000 n +0000372095 00000 n +0000372219 00000 n +0000372342 00000 n +0000372485 00000 n +0000374529 00000 n +0000375055 00000 n +0000375180 00000 n +0000375305 00000 n +0000375430 00000 n +0000375555 00000 n +0000375680 00000 n +0000375805 00000 n +0000375930 00000 n +0000376055 00000 n +0000376180 00000 n +0000376305 00000 n +0000376430 00000 n +0000376555 00000 n +0000376680 00000 n +0000376805 00000 n +0000376930 00000 n +0000377055 00000 n +0000377180 00000 n +0000377305 00000 n +0000377430 00000 n +0000377555 00000 n +0000377680 00000 n +0000377805 00000 n +0000377930 00000 n +0000378055 00000 n +0000378180 00000 n +0000378305 00000 n +0000378430 00000 n +0000378555 00000 n +0000378680 00000 n +0000378805 00000 n +0000378930 00000 n +0000379055 00000 n +0000379180 00000 n +0000379305 00000 n +0000379430 00000 n +0000379555 00000 n +0000379680 00000 n +0000379805 00000 n +0000379930 00000 n +0000380055 00000 n +0000380180 00000 n +0000380305 00000 n +0000380430 00000 n +0000380555 00000 n +0000380680 00000 n +0000380805 00000 n +0000380929 00000 n +0000381052 00000 n +0000381195 00000 n +0000383080 00000 n +0000383606 00000 n +0000383731 00000 n +0000383856 00000 n +0000383981 00000 n +0000384106 00000 n +0000384231 00000 n +0000384356 00000 n +0000384481 00000 n +0000384606 00000 n +0000384731 00000 n +0000384856 00000 n +0000384981 00000 n +0000385106 00000 n +0000385231 00000 n +0000385356 00000 n +0000385481 00000 n +0000385606 00000 n +0000385731 00000 n +0000385856 00000 n +0000385981 00000 n +0000386106 00000 n +0000386231 00000 n +0000386356 00000 n +0000386481 00000 n +0000386606 00000 n +0000386731 00000 n +0000386856 00000 n +0000386981 00000 n +0000387106 00000 n +0000387231 00000 n +0000387356 00000 n +0000387481 00000 n +0000387606 00000 n +0000387731 00000 n +0000387856 00000 n +0000387981 00000 n +0000388106 00000 n +0000388231 00000 n +0000388356 00000 n +0000388481 00000 n +0000388606 00000 n +0000388731 00000 n +0000388856 00000 n +0000388981 00000 n +0000389106 00000 n +0000389231 00000 n +0000389356 00000 n +0000389480 00000 n +0000389603 00000 n +0000389746 00000 n +0000391756 00000 n +0000392282 00000 n +0000392407 00000 n +0000392532 00000 n +0000392657 00000 n +0000392782 00000 n +0000392907 00000 n +0000393032 00000 n +0000393157 00000 n +0000393282 00000 n +0000393407 00000 n +0000393532 00000 n +0000393657 00000 n +0000393782 00000 n +0000393907 00000 n +0000394032 00000 n +0000394157 00000 n +0000394282 00000 n +0000394407 00000 n +0000394532 00000 n +0000394657 00000 n +0000394782 00000 n +0000394907 00000 n +0000395032 00000 n +0000395157 00000 n +0000395282 00000 n +0000395407 00000 n +0000395532 00000 n +0000395657 00000 n +0000395782 00000 n +0000395907 00000 n +0000396032 00000 n +0000396157 00000 n +0000396282 00000 n +0000396407 00000 n +0000396532 00000 n +0000396657 00000 n +0000396782 00000 n +0000396907 00000 n +0000397032 00000 n +0000397157 00000 n +0000397282 00000 n +0000397407 00000 n +0000397532 00000 n +0000397657 00000 n +0000397782 00000 n +0000397907 00000 n +0000398032 00000 n +0000398156 00000 n +0000398279 00000 n +0000398422 00000 n +0000400337 00000 n +0000400863 00000 n +0000400988 00000 n +0000401113 00000 n +0000401238 00000 n +0000401363 00000 n +0000401488 00000 n +0000401613 00000 n +0000401738 00000 n +0000401863 00000 n +0000401988 00000 n +0000402113 00000 n +0000402238 00000 n +0000402363 00000 n +0000402488 00000 n +0000402613 00000 n +0000402738 00000 n +0000402863 00000 n +0000402988 00000 n +0000403113 00000 n +0000403238 00000 n +0000403363 00000 n +0000403488 00000 n +0000403613 00000 n +0000403738 00000 n +0000403863 00000 n +0000403988 00000 n +0000404113 00000 n +0000404238 00000 n +0000404363 00000 n +0000404488 00000 n +0000404613 00000 n +0000404738 00000 n +0000404863 00000 n +0000404988 00000 n +0000405113 00000 n +0000405238 00000 n +0000405363 00000 n +0000405488 00000 n +0000405613 00000 n +0000405738 00000 n +0000405863 00000 n +0000405988 00000 n +0000406113 00000 n +0000406238 00000 n +0000406363 00000 n +0000406488 00000 n +0000406613 00000 n +0000406737 00000 n +0000406860 00000 n +0000407003 00000 n +0000408973 00000 n +0000409516 00000 n +0000409641 00000 n +0000409766 00000 n +0000409891 00000 n +0000410016 00000 n +0000410141 00000 n +0000410266 00000 n +0000410391 00000 n +0000410516 00000 n +0000410641 00000 n +0000410766 00000 n +0000410891 00000 n +0000411016 00000 n +0000411141 00000 n +0000411266 00000 n +0000411391 00000 n +0000411516 00000 n +0000411641 00000 n +0000411766 00000 n +0000411891 00000 n +0000412016 00000 n +0000412141 00000 n +0000412266 00000 n +0000412391 00000 n +0000412516 00000 n +0000412641 00000 n +0000412766 00000 n +0000412891 00000 n +0000413016 00000 n +0000413141 00000 n +0000413266 00000 n +0000413391 00000 n +0000413516 00000 n +0000413641 00000 n +0000413767 00000 n +0000413893 00000 n +0000414019 00000 n +0000414145 00000 n +0000414271 00000 n +0000414397 00000 n +0000414523 00000 n +0000414649 00000 n +0000414775 00000 n +0000414901 00000 n +0000415027 00000 n +0000415153 00000 n +0000415279 00000 n +0000415404 00000 n +0000415528 00000 n +0000415672 00000 n +0000417639 00000 n +0000418207 00000 n +0000418333 00000 n +0000418459 00000 n +0000418585 00000 n +0000418711 00000 n +0000418837 00000 n +0000418963 00000 n +0000419089 00000 n +0000419215 00000 n +0000419341 00000 n +0000419467 00000 n +0000419593 00000 n +0000419719 00000 n +0000419845 00000 n +0000419971 00000 n +0000420097 00000 n +0000420223 00000 n +0000420349 00000 n +0000420475 00000 n +0000420601 00000 n +0000420727 00000 n +0000420853 00000 n +0000420979 00000 n +0000421105 00000 n +0000421231 00000 n +0000421357 00000 n +0000421483 00000 n +0000421609 00000 n +0000421735 00000 n +0000421861 00000 n +0000421987 00000 n +0000422113 00000 n +0000422239 00000 n +0000422365 00000 n +0000422491 00000 n +0000422617 00000 n +0000422743 00000 n +0000422869 00000 n +0000422995 00000 n +0000423121 00000 n +0000423247 00000 n +0000423373 00000 n +0000423499 00000 n +0000423625 00000 n +0000423751 00000 n +0000423877 00000 n +0000424003 00000 n +0000424128 00000 n +0000424272 00000 n +0000426152 00000 n +0000426289 00000 n +0000426420 00000 n +0000426846 00000 n +0000427144 00000 n +0000427269 00000 n +0000427394 00000 n +0000427519 00000 n +0000427644 00000 n +0000427769 00000 n +0000427894 00000 n +0000428019 00000 n +0000428144 00000 n +0000428269 00000 n +0000428394 00000 n +0000428519 00000 n +0000428644 00000 n +0000428769 00000 n +0000428894 00000 n +0000429019 00000 n +0000429144 00000 n +0000429269 00000 n +0000429427 00000 n +0000432127 00000 n +0000432264 00000 n +0000432395 00000 n +0000432820 00000 n +0000432983 00000 n +0000433108 00000 n +0000433233 00000 n +0000433419 00000 n +0000434783 00000 n +0000434920 00000 n +0000435051 00000 n +0000435483 00000 n +0000435880 00000 n +0000436005 00000 n +0000436130 00000 n +0000436255 00000 n +0000436380 00000 n +0000436505 00000 n +0000436630 00000 n +0000436755 00000 n +0000436880 00000 n +0000437005 00000 n +0000437130 00000 n +0000437255 00000 n +0000437380 00000 n +0000437505 00000 n +0000437630 00000 n +0000437755 00000 n +0000437880 00000 n +0000438005 00000 n +0000438130 00000 n +0000438255 00000 n +0000438380 00000 n +0000438505 00000 n +0000438630 00000 n +0000438755 00000 n +0000438880 00000 n +0000439005 00000 n +0000439130 00000 n +0000439255 00000 n +0000439379 00000 n +0000439565 00000 n +0000443336 00000 n +0000443895 00000 n +0000444020 00000 n +0000444145 00000 n +0000444270 00000 n +0000444395 00000 n +0000444520 00000 n +0000444645 00000 n +0000444770 00000 n +0000444895 00000 n +0000445020 00000 n +0000445145 00000 n +0000445270 00000 n +0000445395 00000 n +0000445520 00000 n +0000445645 00000 n +0000445770 00000 n +0000445895 00000 n +0000446020 00000 n +0000446145 00000 n +0000446270 00000 n +0000446395 00000 n +0000446520 00000 n +0000446645 00000 n +0000446770 00000 n +0000446895 00000 n +0000447020 00000 n +0000447145 00000 n +0000447270 00000 n +0000447395 00000 n +0000447520 00000 n +0000447645 00000 n +0000447770 00000 n +0000447895 00000 n +0000448020 00000 n +0000448145 00000 n +0000448270 00000 n +0000448395 00000 n +0000448520 00000 n +0000448645 00000 n +0000448770 00000 n +0000448895 00000 n +0000449020 00000 n +0000449145 00000 n +0000449270 00000 n +0000449395 00000 n +0000449520 00000 n +0000449643 00000 n +0000449801 00000 n +0000454102 00000 n +0000454598 00000 n +0000454723 00000 n +0000454848 00000 n +0000454973 00000 n +0000455098 00000 n +0000455223 00000 n +0000455348 00000 n +0000455473 00000 n +0000455598 00000 n +0000455723 00000 n +0000455848 00000 n +0000455973 00000 n +0000456098 00000 n +0000456223 00000 n +0000456348 00000 n +0000456473 00000 n +0000456598 00000 n +0000456723 00000 n +0000456848 00000 n +0000456973 00000 n +0000457098 00000 n +0000457223 00000 n +0000457348 00000 n +0000457473 00000 n +0000457598 00000 n +0000457723 00000 n +0000457848 00000 n +0000457973 00000 n +0000458098 00000 n +0000458223 00000 n +0000458348 00000 n +0000458473 00000 n +0000458598 00000 n +0000458723 00000 n +0000458848 00000 n +0000458973 00000 n +0000459098 00000 n +0000459223 00000 n +0000459348 00000 n +0000459472 00000 n +0000459630 00000 n +0000464090 00000 n +0000464559 00000 n +0000464684 00000 n +0000464809 00000 n +0000464934 00000 n +0000465059 00000 n +0000465184 00000 n +0000465309 00000 n +0000465434 00000 n +0000465559 00000 n +0000465684 00000 n +0000465809 00000 n +0000465934 00000 n +0000466059 00000 n +0000466184 00000 n +0000466309 00000 n +0000466434 00000 n +0000466559 00000 n +0000466684 00000 n +0000466809 00000 n +0000466934 00000 n +0000467059 00000 n +0000467184 00000 n +0000467309 00000 n +0000467434 00000 n +0000467559 00000 n +0000467684 00000 n +0000467809 00000 n +0000467934 00000 n +0000468059 00000 n +0000468184 00000 n +0000468309 00000 n +0000468434 00000 n +0000468559 00000 n +0000468684 00000 n +0000468809 00000 n +0000468934 00000 n +0000469059 00000 n +0000469217 00000 n +0000473176 00000 n +0000473384 00000 n +0000473509 00000 n +0000473634 00000 n +0000473759 00000 n +0000473884 00000 n +0000474009 00000 n +0000474134 00000 n +0000474259 00000 n +0000474417 00000 n +0000475967 00000 n +0000476130 00000 n +0000476256 00000 n +0000476382 00000 n +0000476568 00000 n +0000477895 00000 n +0000478067 00000 n +0000478193 00000 n +0000478319 00000 n +0000478445 00000 n +0000478631 00000 n +0000480085 00000 n +0000480257 00000 n +0000480383 00000 n +0000480509 00000 n +0000480635 00000 n +0000480821 00000 n +0000481918 00000 n +0000482081 00000 n +0000482207 00000 n +0000482333 00000 n +0000482519 00000 n +0000483727 00000 n +0000483899 00000 n +0000484025 00000 n +0000484151 00000 n +0000484277 00000 n +0000484463 00000 n +0000485855 00000 n +0000486027 00000 n +0000486153 00000 n +0000486279 00000 n +0000486405 00000 n +0000486591 00000 n +0000487967 00000 n +0000488130 00000 n +0000488256 00000 n +0000488382 00000 n +0000488568 00000 n +0000489667 00000 n +0000489821 00000 n +0000489947 00000 n +0000490133 00000 n +0000491132 00000 n +0000491286 00000 n +0000491412 00000 n +0000491598 00000 n +0000492644 00000 n +0000492816 00000 n +0000492942 00000 n +0000493068 00000 n +0000493194 00000 n +0000493380 00000 n +0000494677 00000 n +0000494849 00000 n +0000494975 00000 n +0000495101 00000 n +0000495227 00000 n +0000495413 00000 n +0000496758 00000 n +0000496939 00000 n +0000497065 00000 n +0000497191 00000 n +0000497317 00000 n +0000497443 00000 n +0000497629 00000 n +0000499111 00000 n +0000499265 00000 n +0000499391 00000 n +0000499577 00000 n +0000500706 00000 n +0000500878 00000 n +0000501004 00000 n +0000501130 00000 n +0000501256 00000 n +0000501442 00000 n +0000502772 00000 n +0000502926 00000 n +0000503052 00000 n +0000503238 00000 n +0000504329 00000 n +0000504501 00000 n +0000504627 00000 n +0000504753 00000 n +0000504879 00000 n +0000505065 00000 n +0000506390 00000 n +0000506562 00000 n +0000506688 00000 n +0000506814 00000 n +0000506940 00000 n +0000507126 00000 n +0000508356 00000 n +0000508519 00000 n +0000508645 00000 n +0000508771 00000 n +0000508957 00000 n +0000510155 00000 n +0000510318 00000 n +0000510444 00000 n +0000510570 00000 n +0000510756 00000 n +0000511944 00000 n +0000512107 00000 n +0000512233 00000 n +0000512359 00000 n +0000512545 00000 n +0000513794 00000 n +0000513966 00000 n +0000514092 00000 n +0000514218 00000 n +0000514344 00000 n +0000514530 00000 n +0000515765 00000 n +0000515919 00000 n +0000516045 00000 n +0000516231 00000 n +0000517425 00000 n +0000517579 00000 n +0000517705 00000 n +0000517891 00000 n +0000519287 00000 n +0000519450 00000 n +0000519576 00000 n +0000519702 00000 n +0000519888 00000 n +0000521320 00000 n +0000521492 00000 n +0000521618 00000 n +0000521744 00000 n +0000521870 00000 n +0000522056 00000 n +0000523397 00000 n +0000523560 00000 n +0000523686 00000 n +0000523812 00000 n +0000523998 00000 n +0000525459 00000 n +0000525631 00000 n +0000525757 00000 n +0000525883 00000 n +0000526009 00000 n +0000526195 00000 n +0000527947 00000 n +0000528119 00000 n +0000528245 00000 n +0000528371 00000 n +0000528497 00000 n +0000528683 00000 n +0000530271 00000 n +0000530443 00000 n +0000530569 00000 n +0000530695 00000 n +0000530821 00000 n +0000531007 00000 n +0000532504 00000 n +0000532676 00000 n +0000532802 00000 n +0000532928 00000 n +0000533054 00000 n +0000533240 00000 n +0000534789 00000 n +0000534952 00000 n +0000535078 00000 n +0000535204 00000 n +0000535390 00000 n +0000536812 00000 n +0000537029 00000 n +0000537155 00000 n +0000537281 00000 n +0000537407 00000 n +0000537533 00000 n +0000537659 00000 n +0000537785 00000 n +0000537911 00000 n +0000538037 00000 n +0000538223 00000 n +0000539817 00000 n +0000539971 00000 n +0000540097 00000 n +0000540283 00000 n +0000541673 00000 n +0000541854 00000 n +0000541980 00000 n +0000542106 00000 n +0000542232 00000 n +0000542358 00000 n +0000542544 00000 n +0000543938 00000 n +0000544092 00000 n +0000544218 00000 n +0000544404 00000 n +0000545472 00000 n +0000545635 00000 n +0000545761 00000 n +0000545887 00000 n +0000546073 00000 n +0000547378 00000 n +0000547550 00000 n +0000547676 00000 n +0000547802 00000 n +0000547928 00000 n +0000548114 00000 n +0000549568 00000 n +0000549740 00000 n +0000549866 00000 n +0000549992 00000 n +0000550118 00000 n +0000550304 00000 n +0000551681 00000 n +0000551844 00000 n +0000551970 00000 n +0000552096 00000 n +0000552282 00000 n +0000553382 00000 n +0000553536 00000 n +0000553662 00000 n +0000553848 00000 n +0000554848 00000 n +0000555002 00000 n +0000555128 00000 n +0000555314 00000 n +0000556360 00000 n +0000556532 00000 n +0000556658 00000 n +0000556784 00000 n +0000556910 00000 n +0000557096 00000 n +0000558401 00000 n +0000558573 00000 n +0000558699 00000 n +0000558825 00000 n +0000558951 00000 n +0000559137 00000 n +0000560483 00000 n +0000560637 00000 n +0000560763 00000 n +0000560949 00000 n +0000562079 00000 n +0000562251 00000 n +0000562377 00000 n +0000562503 00000 n +0000562629 00000 n +0000562815 00000 n +0000564145 00000 n +0000564299 00000 n +0000564425 00000 n +0000564611 00000 n +0000565702 00000 n +0000565874 00000 n +0000566000 00000 n +0000566126 00000 n +0000566252 00000 n +0000566438 00000 n +0000567763 00000 n +0000567935 00000 n +0000568061 00000 n +0000568187 00000 n +0000568313 00000 n +0000568499 00000 n +0000569732 00000 n +0000569895 00000 n +0000570021 00000 n +0000570147 00000 n +0000570333 00000 n +0000571531 00000 n +0000571694 00000 n +0000571820 00000 n +0000571946 00000 n +0000572132 00000 n +0000573320 00000 n +0000573483 00000 n +0000573609 00000 n +0000573735 00000 n +0000573921 00000 n +0000575170 00000 n +0000575342 00000 n +0000575468 00000 n +0000575594 00000 n +0000575720 00000 n +0000575906 00000 n +0000577143 00000 n +0000577297 00000 n +0000577423 00000 n +0000577609 00000 n +0000578805 00000 n +0000578959 00000 n +0000579085 00000 n +0000579271 00000 n +0000580667 00000 n +0000580830 00000 n +0000580956 00000 n +0000581082 00000 n +0000581268 00000 n +0000582701 00000 n +0000582864 00000 n +0000582990 00000 n +0000583116 00000 n +0000583302 00000 n +0000584763 00000 n +0000584935 00000 n +0000585061 00000 n +0000585187 00000 n +0000585313 00000 n +0000585499 00000 n +0000587255 00000 n +0000587427 00000 n +0000587553 00000 n +0000587679 00000 n +0000587805 00000 n +0000587991 00000 n +0000589578 00000 n +0000589750 00000 n +0000589876 00000 n +0000590002 00000 n +0000590128 00000 n +0000590314 00000 n +0000591811 00000 n +0000591983 00000 n +0000592109 00000 n +0000592235 00000 n +0000592361 00000 n +0000592547 00000 n +0000594096 00000 n +0000594259 00000 n +0000594385 00000 n +0000594511 00000 n +0000594697 00000 n +0000596119 00000 n +0000596300 00000 n +0000596426 00000 n +0000596552 00000 n +0000596678 00000 n +0000596804 00000 n +0000596990 00000 n +0000598453 00000 n +0000598607 00000 n +0000598733 00000 n +0000598919 00000 n +0000599988 00000 n +0000600151 00000 n +0000600277 00000 n +0000600403 00000 n +0000600589 00000 n +0000601893 00000 n +0000602065 00000 n +0000602191 00000 n +0000602317 00000 n +0000602443 00000 n +0000602629 00000 n +0000604040 00000 n +0000604203 00000 n +0000604329 00000 n +0000604455 00000 n +0000604641 00000 n +0000605739 00000 n +0000605893 00000 n +0000606019 00000 n +0000606205 00000 n +0000607378 00000 n +0000607541 00000 n +0000607667 00000 n +0000607793 00000 n +0000607979 00000 n +0000609119 00000 n +0000609273 00000 n +0000609399 00000 n +0000609585 00000 n +0000610735 00000 n +0000610907 00000 n +0000611033 00000 n +0000611159 00000 n +0000611285 00000 n +0000611471 00000 n +0000612864 00000 n +0000613036 00000 n +0000613162 00000 n +0000613288 00000 n +0000613414 00000 n +0000613600 00000 n +0000614929 00000 n +0000615101 00000 n +0000615227 00000 n +0000615353 00000 n +0000615479 00000 n +0000615665 00000 n +0000617038 00000 n +0000617219 00000 n +0000617345 00000 n +0000617471 00000 n +0000617597 00000 n +0000617723 00000 n +0000617909 00000 n +0000619408 00000 n +0000619562 00000 n +0000619688 00000 n +0000619874 00000 n +0000621017 00000 n +0000621189 00000 n +0000621315 00000 n +0000621441 00000 n +0000621567 00000 n +0000621753 00000 n +0000623081 00000 n +0000623235 00000 n +0000623361 00000 n +0000623547 00000 n +0000624645 00000 n +0000624817 00000 n +0000624943 00000 n +0000625069 00000 n +0000625195 00000 n +0000625381 00000 n +0000626720 00000 n +0000626892 00000 n +0000627018 00000 n +0000627144 00000 n +0000627270 00000 n +0000627456 00000 n +0000628694 00000 n +0000628848 00000 n +0000628974 00000 n +0000629160 00000 n +0000630347 00000 n +0000630501 00000 n +0000630627 00000 n +0000630813 00000 n +0000632226 00000 n +0000632389 00000 n +0000632515 00000 n +0000632641 00000 n +0000632827 00000 n +0000634037 00000 n +0000634200 00000 n +0000634326 00000 n +0000634452 00000 n +0000634638 00000 n +0000636126 00000 n +0000636289 00000 n +0000636415 00000 n +0000636541 00000 n +0000636727 00000 n +0000638219 00000 n +0000638382 00000 n +0000638508 00000 n +0000638634 00000 n +0000638820 00000 n +0000640022 00000 n +0000640185 00000 n +0000640311 00000 n +0000640437 00000 n +0000640623 00000 n +0000641898 00000 n +0000642070 00000 n +0000642196 00000 n +0000642322 00000 n +0000642448 00000 n +0000642634 00000 n +0000643917 00000 n +0000644089 00000 n +0000644215 00000 n +0000644341 00000 n +0000644467 00000 n +0000644653 00000 n +0000646411 00000 n +0000646583 00000 n +0000646709 00000 n +0000646835 00000 n +0000646961 00000 n +0000647147 00000 n +0000648731 00000 n +0000648894 00000 n +0000649020 00000 n +0000649146 00000 n +0000649332 00000 n +0000650774 00000 n +0000650991 00000 n +0000651117 00000 n +0000651243 00000 n +0000651369 00000 n +0000651495 00000 n +0000651621 00000 n +0000651747 00000 n +0000651873 00000 n +0000651999 00000 n +0000652185 00000 n +0000653771 00000 n +0000653925 00000 n +0000654051 00000 n +0000654237 00000 n +0000655663 00000 n +0000655844 00000 n +0000655970 00000 n +0000656096 00000 n +0000656222 00000 n +0000656348 00000 n +0000656534 00000 n +0000657943 00000 n +0000658097 00000 n +0000658223 00000 n +0000658409 00000 n +0000659485 00000 n +0000659648 00000 n +0000659774 00000 n +0000659900 00000 n +0000660086 00000 n +0000661235 00000 n +0000661398 00000 n +0000661524 00000 n +0000661650 00000 n +0000661836 00000 n +0000662952 00000 n +0000663106 00000 n +0000663232 00000 n +0000663418 00000 n +0000664410 00000 n +0000664582 00000 n +0000664708 00000 n +0000664834 00000 n +0000664960 00000 n +0000665146 00000 n +0000666431 00000 n +0000666603 00000 n +0000666729 00000 n +0000666855 00000 n +0000666981 00000 n +0000667167 00000 n +0000668488 00000 n +0000668642 00000 n +0000668768 00000 n +0000668954 00000 n +0000670006 00000 n +0000670169 00000 n +0000670295 00000 n +0000670421 00000 n +0000670607 00000 n +0000671826 00000 n +0000671989 00000 n +0000672115 00000 n +0000672241 00000 n +0000672427 00000 n +0000673620 00000 n +0000673783 00000 n +0000673909 00000 n +0000674035 00000 n +0000674221 00000 n +0000675483 00000 n +0000675637 00000 n +0000675763 00000 n +0000675949 00000 n +0000677023 00000 n +0000677177 00000 n +0000677303 00000 n +0000677489 00000 n +0000678770 00000 n +0000678942 00000 n +0000679068 00000 n +0000679194 00000 n +0000679320 00000 n +0000679506 00000 n +0000680836 00000 n +0000681008 00000 n +0000681134 00000 n +0000681260 00000 n +0000681386 00000 n +0000681572 00000 n +0000683372 00000 n +0000683544 00000 n +0000683670 00000 n +0000683796 00000 n +0000683922 00000 n +0000684108 00000 n +0000685738 00000 n +0000685910 00000 n +0000686036 00000 n +0000686162 00000 n +0000686288 00000 n +0000686474 00000 n +0000687893 00000 n +0000688065 00000 n +0000688191 00000 n +0000688317 00000 n +0000688443 00000 n +0000688629 00000 n +0000690109 00000 n +0000690299 00000 n +0000690425 00000 n +0000690551 00000 n +0000690677 00000 n +0000690803 00000 n +0000690929 00000 n +0000691115 00000 n +0000692443 00000 n +0000692633 00000 n +0000692759 00000 n +0000692885 00000 n +0000693011 00000 n +0000693137 00000 n +0000693263 00000 n +0000693449 00000 n +0000694813 00000 n +0000694976 00000 n +0000695102 00000 n +0000695228 00000 n +0000695414 00000 n +0000696715 00000 n +0000696887 00000 n +0000697013 00000 n +0000697139 00000 n +0000697265 00000 n +0000697451 00000 n +0000699060 00000 n +0000699214 00000 n +0000699340 00000 n +0000699526 00000 n +0000700591 00000 n +0000700754 00000 n +0000700880 00000 n +0000701006 00000 n +0000701192 00000 n +0000702406 00000 n +0000702578 00000 n +0000702704 00000 n +0000702830 00000 n +0000702956 00000 n +0000703142 00000 n +0000704382 00000 n +0000704545 00000 n +0000704671 00000 n +0000704797 00000 n +0000704983 00000 n +0000706205 00000 n +0000706368 00000 n +0000706494 00000 n +0000706620 00000 n +0000706806 00000 n +0000708083 00000 n +0000708255 00000 n +0000708381 00000 n +0000708507 00000 n +0000708633 00000 n +0000708819 00000 n +0000710392 00000 n +0000710546 00000 n +0000710672 00000 n +0000710858 00000 n +0000712091 00000 n +0000712245 00000 n +0000712371 00000 n +0000712557 00000 n +0000714033 00000 n +0000714205 00000 n +0000714331 00000 n +0000714457 00000 n +0000714583 00000 n +0000714769 00000 n +0000716520 00000 n +0000716692 00000 n +0000716818 00000 n +0000716944 00000 n +0000717070 00000 n +0000717256 00000 n +0000718861 00000 n +0000719024 00000 n +0000719150 00000 n +0000719276 00000 n +0000719462 00000 n +0000720546 00000 n +0000720709 00000 n +0000720835 00000 n +0000720961 00000 n +0000721147 00000 n +0000722449 00000 n +0000722612 00000 n +0000722738 00000 n +0000722864 00000 n +0000723050 00000 n +0000724825 00000 n +0000724997 00000 n +0000725123 00000 n +0000725249 00000 n +0000725375 00000 n +0000725561 00000 n +0000727172 00000 n +0000727326 00000 n +0000727452 00000 n +0000727638 00000 n +0000728705 00000 n +0000728868 00000 n +0000728994 00000 n +0000729120 00000 n +0000729306 00000 n +0000730520 00000 n +0000730692 00000 n +0000730818 00000 n +0000730944 00000 n +0000731070 00000 n +0000731256 00000 n +0000732496 00000 n +0000732659 00000 n +0000732785 00000 n +0000732911 00000 n +0000733097 00000 n +0000734320 00000 n +0000734483 00000 n +0000734609 00000 n +0000734735 00000 n +0000734921 00000 n +0000736199 00000 n +0000736362 00000 n +0000736488 00000 n +0000736614 00000 n +0000736800 00000 n +0000738502 00000 n +0000738674 00000 n +0000738800 00000 n +0000738926 00000 n +0000739052 00000 n +0000739238 00000 n +0000740811 00000 n +0000740965 00000 n +0000741091 00000 n +0000741277 00000 n +0000742510 00000 n +0000742664 00000 n +0000742790 00000 n +0000742976 00000 n +0000744452 00000 n +0000744624 00000 n +0000744750 00000 n +0000744876 00000 n +0000745002 00000 n +0000745188 00000 n +0000746939 00000 n +0000747111 00000 n +0000747237 00000 n +0000747363 00000 n +0000747489 00000 n +0000747675 00000 n +0000749278 00000 n +0000749441 00000 n +0000749567 00000 n +0000749693 00000 n +0000749879 00000 n +0000750963 00000 n +0000751126 00000 n +0000751252 00000 n +0000751378 00000 n +0000751564 00000 n +0000753011 00000 n +0000753183 00000 n +0000753309 00000 n +0000753435 00000 n +0000753561 00000 n +0000753747 00000 n +0000755374 00000 n +0000755537 00000 n +0000755663 00000 n +0000755789 00000 n +0000755975 00000 n +0000757289 00000 n +0000757461 00000 n +0000757587 00000 n +0000757713 00000 n +0000757839 00000 n +0000758025 00000 n +0000759366 00000 n +0000759529 00000 n +0000759655 00000 n +0000759781 00000 n +0000759967 00000 n +0000761607 00000 n +0000761779 00000 n +0000761905 00000 n +0000762031 00000 n +0000762157 00000 n +0000762343 00000 n +0000763961 00000 n +0000764115 00000 n +0000764241 00000 n +0000764427 00000 n +0000765772 00000 n +0000765926 00000 n +0000766052 00000 n +0000766238 00000 n +0000767806 00000 n +0000767978 00000 n +0000768104 00000 n +0000768230 00000 n +0000768356 00000 n +0000768542 00000 n +0000770380 00000 n +0000770552 00000 n +0000770678 00000 n +0000770804 00000 n +0000770930 00000 n +0000771116 00000 n +0000772795 00000 n +0000772932 00000 n +0000773063 00000 n +0000773504 00000 n +0000773865 00000 n +0000773990 00000 n +0000774115 00000 n +0000774240 00000 n +0000774365 00000 n +0000774490 00000 n +0000774615 00000 n +0000774740 00000 n +0000774865 00000 n +0000774990 00000 n +0000775115 00000 n +0000775240 00000 n +0000775365 00000 n +0000775490 00000 n +0000775615 00000 n +0000775740 00000 n +0000775865 00000 n +0000775990 00000 n +0000776115 00000 n +0000776240 00000 n +0000776365 00000 n +0000776490 00000 n +0000776615 00000 n +0000776740 00000 n +0000776864 00000 n +0000777050 00000 n +0000780948 00000 n +0000781291 00000 n +0000781416 00000 n +0000781541 00000 n +0000781666 00000 n +0000781791 00000 n +0000781916 00000 n +0000782041 00000 n +0000782166 00000 n +0000782291 00000 n +0000782416 00000 n +0000782541 00000 n +0000782666 00000 n +0000782791 00000 n +0000782916 00000 n +0000783041 00000 n +0000783166 00000 n +0000783291 00000 n +0000783416 00000 n +0000783541 00000 n +0000783666 00000 n +0000783791 00000 n +0000783916 00000 n +0000784041 00000 n +0000784199 00000 n +0000787222 00000 n +0000787359 00000 n +0000787531 00000 n +0000788542 00000 n +0000788696 00000 n +0000788822 00000 n +0000789008 00000 n +0000790056 00000 n +0000790228 00000 n +0000790354 00000 n +0000790480 00000 n +0000790606 00000 n +0000790792 00000 n +0000791955 00000 n +0000792109 00000 n +0000792235 00000 n +0000792421 00000 n +0000793578 00000 n +0000793715 00000 n +0000793901 00000 n +0000794958 00000 n +0000795095 00000 n +0000795281 00000 n +0000796411 00000 n +0000796565 00000 n +0000796691 00000 n +0000796877 00000 n +0000798147 00000 n +0000798301 00000 n +0000798427 00000 n +0000798613 00000 n +0000799829 00000 n +0000799992 00000 n +0000800118 00000 n +0000800244 00000 n +0000800430 00000 n +0000801588 00000 n +0000801751 00000 n +0000801877 00000 n +0000802003 00000 n +0000802189 00000 n +0000803303 00000 n +0000803457 00000 n +0000803583 00000 n +0000803769 00000 n +0000804942 00000 n +0000805096 00000 n +0000805222 00000 n +0000805408 00000 n +0000806666 00000 n +0000806829 00000 n +0000806955 00000 n +0000807081 00000 n +0000807267 00000 n +0000808492 00000 n +0000808655 00000 n +0000808781 00000 n +0000808907 00000 n +0000809093 00000 n +0000810215 00000 n +0000810378 00000 n +0000810504 00000 n +0000810630 00000 n +0000810816 00000 n +0000812019 00000 n +0000812182 00000 n +0000812308 00000 n +0000812434 00000 n +0000812620 00000 n +0000813774 00000 n +0000813928 00000 n +0000814054 00000 n +0000814226 00000 n +0000815283 00000 n +0000815446 00000 n +0000815572 00000 n +0000815698 00000 n +0000815884 00000 n +0000817072 00000 n +0000817235 00000 n +0000817361 00000 n +0000817487 00000 n +0000817673 00000 n +0000818788 00000 n +0000818951 00000 n +0000819077 00000 n +0000819203 00000 n +0000819389 00000 n +0000820595 00000 n +0000820758 00000 n +0000820884 00000 n +0000821010 00000 n +0000821196 00000 n +0000822363 00000 n +0000822517 00000 n +0000822643 00000 n +0000822815 00000 n +0000824034 00000 n +0000824197 00000 n +0000824323 00000 n +0000824449 00000 n +0000824635 00000 n +0000825966 00000 n +0000826129 00000 n +0000826255 00000 n +0000826381 00000 n +0000826567 00000 n +0000827978 00000 n +0000828141 00000 n +0000828267 00000 n +0000828393 00000 n +0000828579 00000 n +0000829802 00000 n +0000829956 00000 n +0000830082 00000 n +0000830268 00000 n +0000831454 00000 n +0000831608 00000 n +0000831734 00000 n +0000831920 00000 n +0000833187 00000 n +0000833341 00000 n +0000833467 00000 n +0000833653 00000 n +0000834820 00000 n +0000834974 00000 n +0000835100 00000 n +0000835286 00000 n +0000836530 00000 n +0000836684 00000 n +0000836810 00000 n +0000836996 00000 n +0000838192 00000 n +0000838346 00000 n +0000838472 00000 n +0000838658 00000 n +0000839932 00000 n +0000840095 00000 n +0000840221 00000 n +0000840347 00000 n +0000840533 00000 n +0000841904 00000 n +0000842067 00000 n +0000842193 00000 n +0000842319 00000 n +0000842505 00000 n +0000843807 00000 n +0000843961 00000 n +0000844087 00000 n +0000844273 00000 n +0000845565 00000 n +0000845719 00000 n +0000845845 00000 n +0000846017 00000 n +0000846988 00000 n +0000847142 00000 n +0000847268 00000 n +0000847440 00000 n +0000848411 00000 n +0000848565 00000 n +0000848691 00000 n +0000848863 00000 n +0000849834 00000 n +0000849971 00000 n +0000850157 00000 n +0000851357 00000 n +0000851511 00000 n +0000851637 00000 n +0000851823 00000 n +0000853005 00000 n +0000853168 00000 n +0000853294 00000 n +0000853420 00000 n +0000853606 00000 n +0000854868 00000 n +0000855031 00000 n +0000855157 00000 n +0000855283 00000 n +0000855469 00000 n +0000856599 00000 n +0000856762 00000 n +0000856888 00000 n +0000857014 00000 n +0000857200 00000 n +0000858330 00000 n +0000858493 00000 n +0000858619 00000 n +0000858745 00000 n +0000858931 00000 n +0000860061 00000 n +0000860215 00000 n +0000860341 00000 n +0000860527 00000 n +0000861784 00000 n +0000861938 00000 n +0000862064 00000 n +0000862250 00000 n +0000863614 00000 n +0000863777 00000 n +0000863903 00000 n +0000864029 00000 n +0000864215 00000 n +0000865470 00000 n +0000865607 00000 n +0000865738 00000 n +0000866178 00000 n +0000866566 00000 n +0000866691 00000 n +0000866816 00000 n +0000866941 00000 n +0000867066 00000 n +0000867191 00000 n +0000867316 00000 n +0000867441 00000 n +0000867566 00000 n +0000867691 00000 n +0000867816 00000 n +0000867941 00000 n +0000868066 00000 n +0000868191 00000 n +0000868316 00000 n +0000868441 00000 n +0000868566 00000 n +0000868691 00000 n +0000868816 00000 n +0000868941 00000 n +0000869066 00000 n +0000869191 00000 n +0000869316 00000 n +0000869441 00000 n +0000869566 00000 n +0000869691 00000 n +0000869816 00000 n +0000869940 00000 n +0000870126 00000 n +0000874289 00000 n +0000874758 00000 n +0000874883 00000 n +0000875008 00000 n +0000875133 00000 n +0000875258 00000 n +0000875383 00000 n +0000875508 00000 n +0000875633 00000 n +0000875758 00000 n +0000875883 00000 n +0000876008 00000 n +0000876133 00000 n +0000876258 00000 n +0000876383 00000 n +0000876508 00000 n +0000876633 00000 n +0000876758 00000 n +0000876883 00000 n +0000877008 00000 n +0000877133 00000 n +0000877258 00000 n +0000877383 00000 n +0000877508 00000 n +0000877633 00000 n +0000877758 00000 n +0000877883 00000 n +0000878008 00000 n +0000878133 00000 n +0000878258 00000 n +0000878383 00000 n +0000878508 00000 n +0000878633 00000 n +0000878758 00000 n +0000878883 00000 n +0000879008 00000 n +0000879133 00000 n +0000879258 00000 n +0000879416 00000 n +0000883854 00000 n +0000883991 00000 n +0000884163 00000 n +0000885174 00000 n +0000885328 00000 n +0000885454 00000 n +0000885640 00000 n +0000886688 00000 n +0000886869 00000 n +0000886995 00000 n +0000887121 00000 n +0000887247 00000 n +0000887373 00000 n +0000887559 00000 n +0000888751 00000 n +0000888905 00000 n +0000889031 00000 n +0000889217 00000 n +0000890516 00000 n +0000890679 00000 n +0000890805 00000 n +0000890931 00000 n +0000891117 00000 n +0000892549 00000 n +0000892712 00000 n +0000892838 00000 n +0000892964 00000 n +0000893150 00000 n +0000894611 00000 n +0000894748 00000 n +0000894934 00000 n +0000895991 00000 n +0000896128 00000 n +0000896314 00000 n +0000897444 00000 n +0000897598 00000 n +0000897724 00000 n +0000897910 00000 n +0000899181 00000 n +0000899335 00000 n +0000899461 00000 n +0000899647 00000 n +0000900862 00000 n +0000901025 00000 n +0000901151 00000 n +0000901277 00000 n +0000901463 00000 n +0000902621 00000 n +0000902784 00000 n +0000902910 00000 n +0000903036 00000 n +0000903222 00000 n +0000904479 00000 n +0000904642 00000 n +0000904768 00000 n +0000904894 00000 n +0000905080 00000 n +0000906340 00000 n +0000906503 00000 n +0000906629 00000 n +0000906755 00000 n +0000906941 00000 n +0000908056 00000 n +0000908219 00000 n +0000908345 00000 n +0000908471 00000 n +0000908657 00000 n +0000909989 00000 n +0000910143 00000 n +0000910269 00000 n +0000910455 00000 n +0000911628 00000 n +0000911782 00000 n +0000911908 00000 n +0000912094 00000 n +0000913352 00000 n +0000913515 00000 n +0000913641 00000 n +0000913767 00000 n +0000913953 00000 n +0000915177 00000 n +0000915340 00000 n +0000915466 00000 n +0000915592 00000 n +0000915778 00000 n +0000917045 00000 n +0000917208 00000 n +0000917334 00000 n +0000917460 00000 n +0000917646 00000 n +0000918767 00000 n +0000918930 00000 n +0000919056 00000 n +0000919182 00000 n +0000919368 00000 n +0000920571 00000 n +0000920734 00000 n +0000920860 00000 n +0000920986 00000 n +0000921172 00000 n +0000922326 00000 n +0000922480 00000 n +0000922606 00000 n +0000922778 00000 n +0000923834 00000 n +0000923997 00000 n +0000924123 00000 n +0000924249 00000 n +0000924435 00000 n +0000925625 00000 n +0000925788 00000 n +0000925914 00000 n +0000926040 00000 n +0000926226 00000 n +0000927340 00000 n +0000927503 00000 n +0000927629 00000 n +0000927755 00000 n +0000927941 00000 n +0000929147 00000 n +0000929310 00000 n +0000929436 00000 n +0000929562 00000 n +0000929748 00000 n +0000930915 00000 n +0000931069 00000 n +0000931195 00000 n +0000931381 00000 n +0000933012 00000 n +0000933166 00000 n +0000933292 00000 n +0000933464 00000 n +0000934556 00000 n +0000934737 00000 n +0000934863 00000 n +0000934989 00000 n +0000935115 00000 n +0000935241 00000 n +0000935427 00000 n +0000936939 00000 n +0000937093 00000 n +0000937219 00000 n +0000937405 00000 n +0000938895 00000 n +0000939049 00000 n +0000939175 00000 n +0000939361 00000 n +0000940780 00000 n +0000940943 00000 n +0000941069 00000 n +0000941195 00000 n +0000941381 00000 n +0000942712 00000 n +0000942875 00000 n +0000943001 00000 n +0000943127 00000 n +0000943313 00000 n +0000944724 00000 n +0000944887 00000 n +0000945013 00000 n +0000945139 00000 n +0000945325 00000 n +0000946548 00000 n +0000946702 00000 n +0000946828 00000 n +0000947014 00000 n +0000948200 00000 n +0000948354 00000 n +0000948480 00000 n +0000948666 00000 n +0000949929 00000 n +0000950083 00000 n +0000950209 00000 n +0000950395 00000 n +0000951562 00000 n +0000951716 00000 n +0000951842 00000 n +0000952028 00000 n +0000953271 00000 n +0000953425 00000 n +0000953551 00000 n +0000953737 00000 n +0000954933 00000 n +0000955087 00000 n +0000955213 00000 n +0000955399 00000 n +0000956673 00000 n +0000956836 00000 n +0000956962 00000 n +0000957088 00000 n +0000957274 00000 n +0000958646 00000 n +0000958809 00000 n +0000958935 00000 n +0000959061 00000 n +0000959247 00000 n +0000960549 00000 n +0000960712 00000 n +0000960838 00000 n +0000960964 00000 n +0000961150 00000 n +0000962507 00000 n +0000962661 00000 n +0000962787 00000 n +0000962973 00000 n +0000964267 00000 n +0000964421 00000 n +0000964547 00000 n +0000964719 00000 n +0000965691 00000 n +0000965845 00000 n +0000965971 00000 n +0000966143 00000 n +0000967114 00000 n +0000967268 00000 n +0000967394 00000 n +0000967566 00000 n +0000968537 00000 n +0000968691 00000 n +0000968817 00000 n +0000968989 00000 n +0000969960 00000 n +0000970097 00000 n +0000970283 00000 n +0000971483 00000 n +0000971637 00000 n +0000971763 00000 n +0000971949 00000 n +0000973132 00000 n +0000973286 00000 n +0000973412 00000 n +0000973584 00000 n +0000974608 00000 n +0000974762 00000 n +0000974888 00000 n +0000975060 00000 n +0000976136 00000 n +0000976299 00000 n +0000976425 00000 n +0000976551 00000 n +0000976737 00000 n +0000977999 00000 n +0000978162 00000 n +0000978288 00000 n +0000978414 00000 n +0000978600 00000 n +0000979729 00000 n +0000979892 00000 n +0000980018 00000 n +0000980144 00000 n +0000980330 00000 n +0000981459 00000 n +0000981622 00000 n +0000981748 00000 n +0000981874 00000 n +0000982060 00000 n +0000983189 00000 n +0000983352 00000 n +0000983478 00000 n +0000983604 00000 n +0000983790 00000 n +0000984919 00000 n +0000985073 00000 n +0000985199 00000 n +0000985385 00000 n +0000986642 00000 n +0000986796 00000 n +0000986922 00000 n +0000987108 00000 n +0000988457 00000 n +0000988620 00000 n +0000988746 00000 n +0000988872 00000 n +0000989058 00000 n +0000990313 00000 n +0000990476 00000 n +0000990602 00000 n +0000990728 00000 n +0000990914 00000 n +0000992177 00000 n +0000992340 00000 n +0000992466 00000 n +0000992592 00000 n +0000992778 00000 n +0000994095 00000 n +0000994232 00000 n +0000994363 00000 n +0000994802 00000 n +0000995190 00000 n +0000995315 00000 n +0000995440 00000 n +0000995565 00000 n +0000995690 00000 n +0000995815 00000 n +0000995940 00000 n +0000996065 00000 n +0000996190 00000 n +0000996315 00000 n +0000996440 00000 n +0000996565 00000 n +0000996690 00000 n +0000996815 00000 n +0000996940 00000 n +0000997065 00000 n +0000997190 00000 n +0000997315 00000 n +0000997440 00000 n +0000997565 00000 n +0000997690 00000 n +0000997815 00000 n +0000997940 00000 n +0000998065 00000 n +0000998190 00000 n +0000998315 00000 n +0000998440 00000 n +0000998564 00000 n +0000998750 00000 n +0001002800 00000 n +0001002954 00000 n +0001003079 00000 n +0001003237 00000 n +0001004074 00000 n +0001004211 00000 n +0001004383 00000 n +0001005396 00000 n +0001005533 00000 n +0001005719 00000 n +0001006801 00000 n +0001006938 00000 n +0001007124 00000 n +0001008282 00000 n +0001008436 00000 n +0001008562 00000 n +0001008748 00000 n +0001009869 00000 n +0001010006 00000 n +0001010192 00000 n +0001011253 00000 n +0001011390 00000 n +0001011576 00000 n +0001012704 00000 n +0001012841 00000 n +0001013027 00000 n +0001014091 00000 n +0001014254 00000 n +0001014380 00000 n +0001014506 00000 n +0001014692 00000 n +0001015938 00000 n +0001016101 00000 n +0001016227 00000 n +0001016353 00000 n +0001016539 00000 n +0001017727 00000 n +0001017890 00000 n +0001018016 00000 n +0001018142 00000 n +0001018328 00000 n +0001019467 00000 n +0001019630 00000 n +0001019756 00000 n +0001019882 00000 n +0001020068 00000 n +0001021217 00000 n +0001021380 00000 n +0001021506 00000 n +0001021632 00000 n +0001021818 00000 n +0001022984 00000 n +0001023147 00000 n +0001023273 00000 n +0001023399 00000 n +0001023585 00000 n +0001024672 00000 n +0001024826 00000 n +0001024952 00000 n +0001025138 00000 n +0001026327 00000 n +0001026481 00000 n +0001026607 00000 n +0001026793 00000 n +0001027937 00000 n +0001028074 00000 n +0001028246 00000 n +0001029319 00000 n +0001029456 00000 n +0001029642 00000 n +0001030786 00000 n +0001030923 00000 n +0001031095 00000 n +0001032018 00000 n +0001032155 00000 n +0001032327 00000 n +0001033233 00000 n +0001033370 00000 n +0001033542 00000 n +0001034479 00000 n +0001034633 00000 n +0001034759 00000 n +0001034945 00000 n +0001036242 00000 n +0001036396 00000 n +0001036522 00000 n +0001036708 00000 n +0001038074 00000 n +0001038228 00000 n +0001038354 00000 n +0001038540 00000 n +0001039624 00000 n +0001039778 00000 n +0001039904 00000 n +0001040090 00000 n +0001041246 00000 n +0001041400 00000 n +0001041526 00000 n +0001041712 00000 n +0001042818 00000 n +0001042972 00000 n +0001043098 00000 n +0001043284 00000 n +0001044461 00000 n +0001044615 00000 n +0001044741 00000 n +0001044927 00000 n +0001046013 00000 n +0001046167 00000 n +0001046293 00000 n +0001046479 00000 n +0001047631 00000 n +0001047768 00000 n +0001047899 00000 n +0001048339 00000 n +0001048727 00000 n +0001048852 00000 n +0001048977 00000 n +0001049102 00000 n +0001049227 00000 n +0001049352 00000 n +0001049477 00000 n +0001049602 00000 n +0001049727 00000 n +0001049852 00000 n +0001049977 00000 n +0001050102 00000 n +0001050227 00000 n +0001050352 00000 n +0001050477 00000 n +0001050602 00000 n +0001050727 00000 n +0001050852 00000 n +0001050977 00000 n +0001051102 00000 n +0001051227 00000 n +0001051352 00000 n +0001051477 00000 n +0001051602 00000 n +0001051727 00000 n +0001051852 00000 n +0001051976 00000 n +0001052099 00000 n +0001052285 00000 n +0001056330 00000 n +0001056736 00000 n +0001056861 00000 n +0001056986 00000 n +0001057111 00000 n +0001057236 00000 n +0001057361 00000 n +0001057486 00000 n +0001057611 00000 n +0001057736 00000 n +0001057861 00000 n +0001057986 00000 n +0001058111 00000 n +0001058236 00000 n +0001058361 00000 n +0001058486 00000 n +0001058611 00000 n +0001058736 00000 n +0001058861 00000 n +0001058986 00000 n +0001059111 00000 n +0001059236 00000 n +0001059361 00000 n +0001059486 00000 n +0001059611 00000 n +0001059736 00000 n +0001059861 00000 n +0001059986 00000 n +0001060111 00000 n +0001060236 00000 n +0001060361 00000 n +0001060519 00000 n +0001064179 00000 n +0001064316 00000 n +0001064488 00000 n +0001065500 00000 n +0001065637 00000 n +0001065823 00000 n +0001066992 00000 n +0001067129 00000 n +0001067315 00000 n +0001068581 00000 n +0001068735 00000 n +0001068861 00000 n +0001069047 00000 n +0001070311 00000 n +0001070465 00000 n +0001070591 00000 n +0001070777 00000 n +0001072103 00000 n +0001072257 00000 n +0001072383 00000 n +0001072569 00000 n +0001073745 00000 n +0001073899 00000 n +0001074025 00000 n +0001074211 00000 n +0001075375 00000 n +0001075512 00000 n +0001075698 00000 n +0001076768 00000 n +0001076905 00000 n +0001077091 00000 n +0001078230 00000 n +0001078367 00000 n +0001078553 00000 n +0001079644 00000 n +0001079807 00000 n +0001079933 00000 n +0001080059 00000 n +0001080245 00000 n +0001081436 00000 n +0001081590 00000 n +0001081716 00000 n +0001081902 00000 n +0001083013 00000 n +0001083167 00000 n +0001083293 00000 n +0001083479 00000 n +0001084662 00000 n +0001084825 00000 n +0001084951 00000 n +0001085077 00000 n +0001085263 00000 n +0001086459 00000 n +0001086613 00000 n +0001086739 00000 n +0001086925 00000 n +0001088089 00000 n +0001088243 00000 n +0001088369 00000 n +0001088555 00000 n +0001089806 00000 n +0001089969 00000 n +0001090095 00000 n +0001090221 00000 n +0001090407 00000 n +0001091458 00000 n +0001091621 00000 n +0001091747 00000 n +0001091873 00000 n +0001092059 00000 n +0001093227 00000 n +0001093390 00000 n +0001093516 00000 n +0001093642 00000 n +0001093828 00000 n +0001094949 00000 n +0001095103 00000 n +0001095229 00000 n +0001095401 00000 n +0001096429 00000 n +0001096592 00000 n +0001096718 00000 n +0001096844 00000 n +0001097030 00000 n +0001098200 00000 n +0001098354 00000 n +0001098480 00000 n +0001098666 00000 n +0001099815 00000 n +0001099969 00000 n +0001100095 00000 n +0001100281 00000 n +0001101490 00000 n +0001101644 00000 n +0001101770 00000 n +0001101956 00000 n +0001103114 00000 n +0001103268 00000 n +0001103394 00000 n +0001103580 00000 n +0001104822 00000 n +0001104985 00000 n +0001105111 00000 n +0001105237 00000 n +0001105423 00000 n +0001106497 00000 n +0001106651 00000 n +0001106777 00000 n +0001106963 00000 n +0001108144 00000 n +0001108298 00000 n +0001108424 00000 n +0001108610 00000 n +0001109750 00000 n +0001109904 00000 n +0001110030 00000 n +0001110202 00000 n +0001111332 00000 n +0001111504 00000 n +0001111630 00000 n +0001111756 00000 n +0001111882 00000 n +0001112068 00000 n +0001113433 00000 n +0001113596 00000 n +0001113722 00000 n +0001113848 00000 n +0001114034 00000 n +0001115368 00000 n +0001115531 00000 n +0001115657 00000 n +0001115783 00000 n +0001115969 00000 n +0001117390 00000 n +0001117544 00000 n +0001117670 00000 n +0001117856 00000 n +0001119001 00000 n +0001119155 00000 n +0001119281 00000 n +0001119467 00000 n +0001120699 00000 n +0001120853 00000 n +0001120979 00000 n +0001121165 00000 n +0001122343 00000 n +0001122497 00000 n +0001122623 00000 n +0001122809 00000 n +0001124063 00000 n +0001124217 00000 n +0001124343 00000 n +0001124529 00000 n +0001125713 00000 n +0001125867 00000 n +0001125993 00000 n +0001126179 00000 n +0001127442 00000 n +0001127579 00000 n +0001127751 00000 n +0001128850 00000 n +0001128987 00000 n +0001129173 00000 n +0001130359 00000 n +0001130496 00000 n +0001130668 00000 n +0001131577 00000 n +0001131714 00000 n +0001131886 00000 n +0001132798 00000 n +0001132952 00000 n +0001133078 00000 n +0001133250 00000 n +0001134316 00000 n +0001134453 00000 n +0001134625 00000 n +0001135538 00000 n +0001135675 00000 n +0001135847 00000 n +0001136780 00000 n +0001136934 00000 n +0001137060 00000 n +0001137246 00000 n +0001138543 00000 n +0001138697 00000 n +0001138823 00000 n +0001139009 00000 n +0001140392 00000 n +0001140546 00000 n +0001140672 00000 n +0001140858 00000 n +0001141957 00000 n +0001142111 00000 n +0001142237 00000 n +0001142423 00000 n +0001143613 00000 n +0001143767 00000 n +0001143893 00000 n +0001144079 00000 n +0001145190 00000 n +0001145344 00000 n +0001145470 00000 n +0001145656 00000 n +0001146842 00000 n +0001147005 00000 n +0001147131 00000 n +0001147257 00000 n +0001147443 00000 n +0001148656 00000 n +0001148810 00000 n +0001148936 00000 n +0001149122 00000 n +0001150218 00000 n +0001150372 00000 n +0001150498 00000 n +0001150684 00000 n +0001151870 00000 n +0001152024 00000 n +0001152150 00000 n +0001152336 00000 n +0001153428 00000 n +0001153582 00000 n +0001153708 00000 n +0001153894 00000 n +0001155075 00000 n +0001155212 00000 n +0001155343 00000 n +0001155792 00000 n +0001156144 00000 n +0001156269 00000 n +0001156394 00000 n +0001156519 00000 n +0001156644 00000 n +0001156769 00000 n +0001156894 00000 n +0001157019 00000 n +0001157144 00000 n +0001157269 00000 n +0001157394 00000 n +0001157519 00000 n +0001157644 00000 n +0001157769 00000 n +0001157894 00000 n +0001158019 00000 n +0001158144 00000 n +0001158269 00000 n +0001158394 00000 n +0001158519 00000 n +0001158644 00000 n +0001158769 00000 n +0001158894 00000 n +0001159018 00000 n +0001159204 00000 n +0001163277 00000 n +0001163629 00000 n +0001163754 00000 n +0001163879 00000 n +0001164004 00000 n +0001164129 00000 n +0001164254 00000 n +0001164379 00000 n +0001164504 00000 n +0001164629 00000 n +0001164754 00000 n +0001164879 00000 n +0001165004 00000 n +0001165129 00000 n +0001165254 00000 n +0001165379 00000 n +0001165504 00000 n +0001165629 00000 n +0001165754 00000 n +0001165879 00000 n +0001166004 00000 n +0001166129 00000 n +0001166254 00000 n +0001166379 00000 n +0001166504 00000 n +0001166662 00000 n +0001170085 00000 n +0001170222 00000 n +0001170394 00000 n +0001171412 00000 n +0001171566 00000 n +0001171692 00000 n +0001171878 00000 n +0001172996 00000 n +0001173177 00000 n +0001173303 00000 n +0001173429 00000 n +0001173555 00000 n +0001173681 00000 n +0001173867 00000 n +0001175080 00000 n +0001175243 00000 n +0001175369 00000 n +0001175495 00000 n +0001175681 00000 n +0001177063 00000 n +0001177226 00000 n +0001177352 00000 n +0001177478 00000 n +0001177664 00000 n +0001179140 00000 n +0001179277 00000 n +0001179463 00000 n +0001180581 00000 n +0001180718 00000 n +0001180904 00000 n +0001182109 00000 n +0001182272 00000 n +0001182398 00000 n +0001182524 00000 n +0001182710 00000 n +0001184132 00000 n +0001184295 00000 n +0001184421 00000 n +0001184547 00000 n +0001184733 00000 n +0001186044 00000 n +0001186207 00000 n +0001186333 00000 n +0001186459 00000 n +0001186645 00000 n +0001187843 00000 n +0001188006 00000 n +0001188132 00000 n +0001188258 00000 n +0001188444 00000 n +0001189729 00000 n +0001189892 00000 n +0001190018 00000 n +0001190144 00000 n +0001190330 00000 n +0001191524 00000 n +0001191687 00000 n +0001191813 00000 n +0001191939 00000 n +0001192125 00000 n +0001193317 00000 n +0001193480 00000 n +0001193606 00000 n +0001193732 00000 n +0001193918 00000 n +0001195088 00000 n +0001195242 00000 n +0001195368 00000 n +0001195540 00000 n +0001196820 00000 n +0001196983 00000 n +0001197109 00000 n +0001197235 00000 n +0001197421 00000 n +0001198792 00000 n +0001198955 00000 n +0001199081 00000 n +0001199207 00000 n +0001199393 00000 n +0001200854 00000 n +0001201017 00000 n +0001201143 00000 n +0001201269 00000 n +0001201455 00000 n +0001202713 00000 n +0001202867 00000 n +0001202993 00000 n +0001203179 00000 n +0001204385 00000 n +0001204539 00000 n +0001204665 00000 n +0001204851 00000 n +0001206130 00000 n +0001206284 00000 n +0001206410 00000 n +0001206596 00000 n +0001207801 00000 n +0001207955 00000 n +0001208081 00000 n +0001208267 00000 n +0001209552 00000 n +0001209706 00000 n +0001209832 00000 n +0001210018 00000 n +0001211222 00000 n +0001211376 00000 n +0001211502 00000 n +0001211688 00000 n +0001212973 00000 n +0001213136 00000 n +0001213262 00000 n +0001213388 00000 n +0001213574 00000 n +0001215000 00000 n +0001215163 00000 n +0001215289 00000 n +0001215415 00000 n +0001215601 00000 n +0001216968 00000 n +0001217131 00000 n +0001217257 00000 n +0001217383 00000 n +0001217569 00000 n +0001218949 00000 n +0001219103 00000 n +0001219229 00000 n +0001219415 00000 n +0001220719 00000 n +0001220873 00000 n +0001220999 00000 n +0001221171 00000 n +0001222184 00000 n +0001222338 00000 n +0001222464 00000 n +0001222636 00000 n +0001223649 00000 n +0001223803 00000 n +0001223929 00000 n +0001224101 00000 n +0001225114 00000 n +0001225268 00000 n +0001225394 00000 n +0001225566 00000 n +0001226579 00000 n +0001226716 00000 n +0001226902 00000 n +0001228153 00000 n +0001228307 00000 n +0001228433 00000 n +0001228619 00000 n +0001229825 00000 n +0001229979 00000 n +0001230105 00000 n +0001230277 00000 n +0001231315 00000 n +0001231469 00000 n +0001231595 00000 n +0001231767 00000 n +0001232847 00000 n +0001233010 00000 n +0001233136 00000 n +0001233262 00000 n +0001233448 00000 n +0001234790 00000 n +0001234953 00000 n +0001235079 00000 n +0001235205 00000 n +0001235391 00000 n +0001236595 00000 n +0001236758 00000 n +0001236884 00000 n +0001237010 00000 n +0001237196 00000 n +0001238400 00000 n +0001238563 00000 n +0001238689 00000 n +0001238815 00000 n +0001239001 00000 n +0001240205 00000 n +0001240368 00000 n +0001240494 00000 n +0001240620 00000 n +0001240806 00000 n +0001242010 00000 n +0001242164 00000 n +0001242290 00000 n +0001242476 00000 n +0001243795 00000 n +0001243949 00000 n +0001244075 00000 n +0001244261 00000 n +0001245655 00000 n +0001245818 00000 n +0001245944 00000 n +0001246070 00000 n +0001246256 00000 n +0001247574 00000 n +0001247737 00000 n +0001247863 00000 n +0001247989 00000 n +0001248175 00000 n +0001249358 00000 n +0001249521 00000 n +0001249647 00000 n +0001249773 00000 n +0001249959 00000 n +0001251253 00000 n +0001251390 00000 n +0001251521 00000 n +0001251959 00000 n +0001252338 00000 n +0001252463 00000 n +0001252588 00000 n +0001252713 00000 n +0001252838 00000 n +0001252963 00000 n +0001253088 00000 n +0001253213 00000 n +0001253338 00000 n +0001253463 00000 n +0001253588 00000 n +0001253713 00000 n +0001253838 00000 n +0001253963 00000 n +0001254088 00000 n +0001254213 00000 n +0001254338 00000 n +0001254463 00000 n +0001254588 00000 n +0001254713 00000 n +0001254838 00000 n +0001254963 00000 n +0001255088 00000 n +0001255213 00000 n +0001255338 00000 n +0001255463 00000 n +0001255587 00000 n +0001255773 00000 n +0001259746 00000 n +0001260017 00000 n +0001260142 00000 n +0001260267 00000 n +0001260392 00000 n +0001260517 00000 n +0001260642 00000 n +0001260767 00000 n +0001260892 00000 n +0001261017 00000 n +0001261142 00000 n +0001261267 00000 n +0001261392 00000 n +0001261517 00000 n +0001261642 00000 n +0001261767 00000 n +0001261925 00000 n +0001263957 00000 n +0001264094 00000 n +0001264266 00000 n +0001265275 00000 n +0001265412 00000 n +0001265598 00000 n +0001266676 00000 n +0001266813 00000 n +0001266999 00000 n +0001268153 00000 n +0001268307 00000 n +0001268433 00000 n +0001268619 00000 n +0001269742 00000 n +0001269879 00000 n +0001270065 00000 n +0001271117 00000 n +0001271254 00000 n +0001271440 00000 n +0001272576 00000 n +0001272713 00000 n +0001272899 00000 n +0001273973 00000 n +0001274127 00000 n +0001274253 00000 n +0001274439 00000 n +0001275676 00000 n +0001275830 00000 n +0001275956 00000 n +0001276142 00000 n +0001277336 00000 n +0001277490 00000 n +0001277616 00000 n +0001277802 00000 n +0001278960 00000 n +0001279114 00000 n +0001279240 00000 n +0001279426 00000 n +0001280667 00000 n +0001280830 00000 n +0001280956 00000 n +0001281082 00000 n +0001281268 00000 n +0001282333 00000 n +0001282496 00000 n +0001282622 00000 n +0001282748 00000 n +0001282934 00000 n +0001284064 00000 n +0001284227 00000 n +0001284353 00000 n +0001284479 00000 n +0001284665 00000 n +0001285838 00000 n +0001286001 00000 n +0001286127 00000 n +0001286253 00000 n +0001286439 00000 n +0001287557 00000 n +0001287711 00000 n +0001287837 00000 n +0001288009 00000 n +0001289017 00000 n +0001289180 00000 n +0001289306 00000 n +0001289432 00000 n +0001289618 00000 n +0001290762 00000 n +0001290916 00000 n +0001291042 00000 n +0001291228 00000 n +0001292307 00000 n +0001292461 00000 n +0001292587 00000 n +0001292773 00000 n +0001293917 00000 n +0001294071 00000 n +0001294197 00000 n +0001294383 00000 n +0001295532 00000 n +0001295686 00000 n +0001295812 00000 n +0001295998 00000 n +0001297229 00000 n +0001297392 00000 n +0001297518 00000 n +0001297644 00000 n +0001297830 00000 n +0001298883 00000 n +0001299037 00000 n +0001299163 00000 n +0001299349 00000 n +0001300536 00000 n +0001300690 00000 n +0001300816 00000 n +0001301002 00000 n +0001302151 00000 n +0001302305 00000 n +0001302431 00000 n +0001302603 00000 n +0001303679 00000 n +0001303833 00000 n +0001303959 00000 n +0001304131 00000 n +0001305078 00000 n +0001305232 00000 n +0001305358 00000 n +0001305530 00000 n +0001306480 00000 n +0001306617 00000 n +0001306789 00000 n +0001307854 00000 n +0001307991 00000 n +0001308177 00000 n +0001309319 00000 n +0001309456 00000 n +0001309628 00000 n +0001310535 00000 n +0001310672 00000 n +0001310844 00000 n +0001311746 00000 n +0001311883 00000 n +0001312055 00000 n +0001313000 00000 n +0001313154 00000 n +0001313280 00000 n +0001313466 00000 n +0001314717 00000 n +0001314871 00000 n +0001314997 00000 n +0001315183 00000 n +0001316515 00000 n +0001316669 00000 n +0001316795 00000 n +0001316981 00000 n +0001318070 00000 n +0001318224 00000 n +0001318350 00000 n +0001318536 00000 n +0001319695 00000 n +0001319849 00000 n +0001319975 00000 n +0001320161 00000 n +0001321260 00000 n +0001321414 00000 n +0001321540 00000 n +0001321726 00000 n +0001322894 00000 n +0001323048 00000 n +0001323174 00000 n +0001323360 00000 n +0001324447 00000 n +0001324601 00000 n +0001324727 00000 n +0001324913 00000 n +0001326067 00000 n +0001326204 00000 n +0001326335 00000 n +0001326774 00000 n +0001327153 00000 n +0001327278 00000 n +0001327403 00000 n +0001327528 00000 n +0001327653 00000 n +0001327778 00000 n +0001327903 00000 n +0001328028 00000 n +0001328153 00000 n +0001328278 00000 n +0001328403 00000 n +0001328528 00000 n +0001328653 00000 n +0001328778 00000 n +0001328903 00000 n +0001329028 00000 n +0001329153 00000 n +0001329278 00000 n +0001329403 00000 n +0001329528 00000 n +0001329653 00000 n +0001329778 00000 n +0001329903 00000 n +0001330028 00000 n +0001330153 00000 n +0001330278 00000 n +0001330402 00000 n +0001330588 00000 n +0001334506 00000 n +0001334858 00000 n +0001334983 00000 n +0001335108 00000 n +0001335233 00000 n +0001335358 00000 n +0001335483 00000 n +0001335608 00000 n +0001335733 00000 n +0001335858 00000 n +0001335983 00000 n +0001336108 00000 n +0001336233 00000 n +0001336358 00000 n +0001336483 00000 n +0001336608 00000 n +0001336733 00000 n +0001336858 00000 n +0001336983 00000 n +0001337108 00000 n +0001337233 00000 n +0001337358 00000 n +0001337483 00000 n +0001337608 00000 n +0001337733 00000 n +0001337891 00000 n +0001340827 00000 n +0001340964 00000 n +0001341136 00000 n +0001342142 00000 n +0001342279 00000 n +0001342465 00000 n +0001343608 00000 n +0001343745 00000 n +0001343931 00000 n +0001345152 00000 n +0001345306 00000 n +0001345432 00000 n +0001345618 00000 n +0001346850 00000 n +0001347004 00000 n +0001347130 00000 n +0001347316 00000 n +0001348624 00000 n +0001348778 00000 n +0001348904 00000 n +0001349090 00000 n +0001350249 00000 n +0001350403 00000 n +0001350529 00000 n +0001350715 00000 n +0001351869 00000 n +0001352023 00000 n +0001352149 00000 n +0001352335 00000 n +0001353464 00000 n +0001353601 00000 n +0001353787 00000 n +0001354839 00000 n +0001354976 00000 n +0001355162 00000 n +0001356291 00000 n +0001356428 00000 n +0001356614 00000 n +0001357688 00000 n +0001357842 00000 n +0001357968 00000 n +0001358154 00000 n +0001359391 00000 n +0001359545 00000 n +0001359671 00000 n +0001359857 00000 n +0001361052 00000 n +0001361206 00000 n +0001361332 00000 n +0001361518 00000 n +0001362676 00000 n +0001362830 00000 n +0001362956 00000 n +0001363142 00000 n +0001364383 00000 n +0001364546 00000 n +0001364672 00000 n +0001364798 00000 n +0001364984 00000 n +0001366050 00000 n +0001366213 00000 n +0001366339 00000 n +0001366465 00000 n +0001366651 00000 n +0001367824 00000 n +0001367987 00000 n +0001368113 00000 n +0001368239 00000 n +0001368425 00000 n +0001369542 00000 n +0001369696 00000 n +0001369822 00000 n +0001369994 00000 n +0001371002 00000 n +0001371165 00000 n +0001371291 00000 n +0001371417 00000 n +0001371603 00000 n +0001372747 00000 n +0001372901 00000 n +0001373027 00000 n +0001373213 00000 n +0001374292 00000 n +0001374446 00000 n +0001374572 00000 n +0001374758 00000 n +0001375901 00000 n +0001376055 00000 n +0001376181 00000 n +0001376367 00000 n +0001377516 00000 n +0001377670 00000 n +0001377796 00000 n +0001377982 00000 n +0001379214 00000 n +0001379377 00000 n +0001379503 00000 n +0001379629 00000 n +0001379815 00000 n +0001380868 00000 n +0001381022 00000 n +0001381148 00000 n +0001381334 00000 n +0001382522 00000 n +0001382676 00000 n +0001382802 00000 n +0001382988 00000 n +0001384137 00000 n +0001384291 00000 n +0001384417 00000 n +0001384589 00000 n +0001385669 00000 n +0001385823 00000 n +0001385949 00000 n +0001386121 00000 n +0001387069 00000 n +0001387223 00000 n +0001387349 00000 n +0001387521 00000 n +0001388475 00000 n +0001388629 00000 n +0001388755 00000 n +0001388927 00000 n +0001389879 00000 n +0001390016 00000 n +0001390188 00000 n +0001391255 00000 n +0001391392 00000 n +0001391578 00000 n +0001392771 00000 n +0001392908 00000 n +0001393080 00000 n +0001393966 00000 n +0001394103 00000 n +0001394275 00000 n +0001395184 00000 n +0001395338 00000 n +0001395464 00000 n +0001395636 00000 n +0001396714 00000 n +0001396851 00000 n +0001397023 00000 n +0001397926 00000 n +0001398063 00000 n +0001398235 00000 n +0001399182 00000 n +0001399336 00000 n +0001399462 00000 n +0001399648 00000 n +0001400949 00000 n +0001401103 00000 n +0001401229 00000 n +0001401415 00000 n +0001402792 00000 n +0001402946 00000 n +0001403072 00000 n +0001403258 00000 n +0001404344 00000 n +0001404498 00000 n +0001404624 00000 n +0001404810 00000 n +0001405978 00000 n +0001406132 00000 n +0001406258 00000 n +0001406444 00000 n +0001407533 00000 n +0001407687 00000 n +0001407813 00000 n +0001407999 00000 n +0001409158 00000 n +0001409321 00000 n +0001409447 00000 n +0001409573 00000 n +0001409759 00000 n +0001410947 00000 n +0001411101 00000 n +0001411227 00000 n +0001411413 00000 n +0001412512 00000 n +0001412666 00000 n +0001412792 00000 n +0001412978 00000 n +0001414146 00000 n +0001414300 00000 n +0001414426 00000 n +0001414612 00000 n +0001415699 00000 n +0001415853 00000 n +0001415979 00000 n +0001416165 00000 n +0001417319 00000 n +0001417456 00000 n +0001417587 00000 n +0001418019 00000 n +0001418416 00000 n +0001418541 00000 n +0001418666 00000 n +0001418791 00000 n +0001418916 00000 n +0001419041 00000 n +0001419166 00000 n +0001419291 00000 n +0001419416 00000 n +0001419541 00000 n +0001419666 00000 n +0001419791 00000 n +0001419916 00000 n +0001420041 00000 n +0001420166 00000 n +0001420291 00000 n +0001420416 00000 n +0001420541 00000 n +0001420666 00000 n +0001420791 00000 n +0001420916 00000 n +0001421041 00000 n +0001421166 00000 n +0001421291 00000 n +0001421416 00000 n +0001421541 00000 n +0001421666 00000 n +0001421791 00000 n +0001421915 00000 n +0001422101 00000 n +0001425905 00000 n +0001426473 00000 n +0001426598 00000 n +0001426723 00000 n +0001426848 00000 n +0001426973 00000 n +0001427098 00000 n +0001427223 00000 n +0001427348 00000 n +0001427473 00000 n +0001427598 00000 n +0001427723 00000 n +0001427848 00000 n +0001427973 00000 n +0001428098 00000 n +0001428223 00000 n +0001428348 00000 n +0001428473 00000 n +0001428598 00000 n +0001428723 00000 n +0001428848 00000 n +0001428973 00000 n +0001429098 00000 n +0001429223 00000 n +0001429348 00000 n +0001429473 00000 n +0001429598 00000 n +0001429723 00000 n +0001429848 00000 n +0001429973 00000 n +0001430098 00000 n +0001430223 00000 n +0001430348 00000 n +0001430473 00000 n +0001430598 00000 n +0001430723 00000 n +0001430848 00000 n +0001430973 00000 n +0001431098 00000 n +0001431223 00000 n +0001431348 00000 n +0001431473 00000 n +0001431598 00000 n +0001431723 00000 n +0001431848 00000 n +0001431973 00000 n +0001432098 00000 n +0001432223 00000 n +0001432348 00000 n +0001432506 00000 n +0001437129 00000 n +0001437688 00000 n +0001437813 00000 n +0001437938 00000 n +0001438063 00000 n +0001438188 00000 n +0001438313 00000 n +0001438438 00000 n +0001438563 00000 n +0001438688 00000 n +0001438813 00000 n +0001438938 00000 n +0001439063 00000 n +0001439188 00000 n +0001439313 00000 n +0001439438 00000 n +0001439563 00000 n +0001439688 00000 n +0001439813 00000 n +0001439938 00000 n +0001440063 00000 n +0001440188 00000 n +0001440313 00000 n +0001440438 00000 n +0001440563 00000 n +0001440688 00000 n +0001440813 00000 n +0001440938 00000 n +0001441063 00000 n +0001441188 00000 n +0001441313 00000 n +0001441438 00000 n +0001441563 00000 n +0001441688 00000 n +0001441813 00000 n +0001441938 00000 n +0001442063 00000 n +0001442188 00000 n +0001442313 00000 n +0001442438 00000 n +0001442563 00000 n +0001442688 00000 n +0001442813 00000 n +0001442938 00000 n +0001443063 00000 n +0001443188 00000 n +0001443312 00000 n +0001443435 00000 n +0001443593 00000 n +0001448361 00000 n +0001448614 00000 n +0001448739 00000 n +0001448864 00000 n +0001448989 00000 n +0001449114 00000 n +0001449239 00000 n +0001449364 00000 n +0001449489 00000 n +0001449614 00000 n +0001449739 00000 n +0001449864 00000 n +0001449989 00000 n +0001450114 00000 n +0001450272 00000 n +0001452314 00000 n +0001452477 00000 n +0001452603 00000 n +0001452729 00000 n +0001452915 00000 n +0001454243 00000 n +0001454415 00000 n +0001454541 00000 n +0001454667 00000 n +0001454793 00000 n +0001454979 00000 n +0001456436 00000 n +0001456608 00000 n +0001456734 00000 n +0001456860 00000 n +0001456986 00000 n +0001457172 00000 n +0001458274 00000 n +0001458437 00000 n +0001458563 00000 n +0001458689 00000 n +0001458875 00000 n +0001460089 00000 n +0001460261 00000 n +0001460387 00000 n +0001460513 00000 n +0001460639 00000 n +0001460825 00000 n +0001462199 00000 n +0001462371 00000 n +0001462497 00000 n +0001462623 00000 n +0001462749 00000 n +0001462935 00000 n +0001464316 00000 n +0001464479 00000 n +0001464605 00000 n +0001464731 00000 n +0001464917 00000 n +0001466012 00000 n +0001466166 00000 n +0001466292 00000 n +0001466478 00000 n +0001467476 00000 n +0001467630 00000 n +0001467756 00000 n +0001467942 00000 n +0001468990 00000 n +0001469162 00000 n +0001469288 00000 n +0001469414 00000 n +0001469540 00000 n +0001469726 00000 n +0001471037 00000 n +0001471191 00000 n +0001471317 00000 n +0001471503 00000 n +0001472884 00000 n +0001473038 00000 n +0001473164 00000 n +0001473350 00000 n +0001474476 00000 n +0001474648 00000 n +0001474774 00000 n +0001474900 00000 n +0001475026 00000 n +0001475212 00000 n +0001476547 00000 n +0001476701 00000 n +0001476827 00000 n +0001477013 00000 n +0001478101 00000 n +0001478273 00000 n +0001478399 00000 n +0001478525 00000 n +0001478651 00000 n +0001478837 00000 n +0001480166 00000 n +0001480338 00000 n +0001480464 00000 n +0001480590 00000 n +0001480716 00000 n +0001480902 00000 n +0001482134 00000 n +0001482297 00000 n +0001482423 00000 n +0001482549 00000 n +0001482735 00000 n +0001483936 00000 n +0001484099 00000 n +0001484225 00000 n +0001484351 00000 n +0001484537 00000 n +0001485728 00000 n +0001485900 00000 n +0001486026 00000 n +0001486152 00000 n +0001486278 00000 n +0001486464 00000 n +0001487704 00000 n +0001487858 00000 n +0001487984 00000 n +0001488170 00000 n +0001489373 00000 n +0001489527 00000 n +0001489653 00000 n +0001489839 00000 n +0001491240 00000 n +0001491403 00000 n +0001491529 00000 n +0001491655 00000 n +0001491841 00000 n +0001493277 00000 n +0001493449 00000 n +0001493575 00000 n +0001493701 00000 n +0001493827 00000 n +0001494013 00000 n +0001495259 00000 n +0001495422 00000 n +0001495548 00000 n +0001495674 00000 n +0001495860 00000 n +0001497325 00000 n +0001497497 00000 n +0001497623 00000 n +0001497749 00000 n +0001497875 00000 n +0001498061 00000 n +0001500131 00000 n +0001500303 00000 n +0001500429 00000 n +0001500555 00000 n +0001500681 00000 n +0001500867 00000 n +0001502368 00000 n +0001502531 00000 n +0001502657 00000 n +0001502783 00000 n +0001502969 00000 n +0001504393 00000 n +0001504556 00000 n +0001504682 00000 n +0001504808 00000 n +0001504994 00000 n +0001506555 00000 n +0001506709 00000 n +0001506835 00000 n +0001507021 00000 n +0001508328 00000 n +0001508482 00000 n +0001508608 00000 n +0001508794 00000 n +0001509862 00000 n +0001510025 00000 n +0001510151 00000 n +0001510277 00000 n +0001510463 00000 n +0001511791 00000 n +0001511963 00000 n +0001512089 00000 n +0001512215 00000 n +0001512341 00000 n +0001512527 00000 n +0001513986 00000 n +0001514158 00000 n +0001514284 00000 n +0001514410 00000 n +0001514536 00000 n +0001514722 00000 n +0001516104 00000 n +0001516267 00000 n +0001516393 00000 n +0001516519 00000 n +0001516705 00000 n +0001517801 00000 n +0001517955 00000 n +0001518081 00000 n +0001518267 00000 n +0001519266 00000 n +0001519420 00000 n +0001519546 00000 n +0001519732 00000 n +0001520781 00000 n +0001520953 00000 n +0001521079 00000 n +0001521205 00000 n +0001521331 00000 n +0001521517 00000 n +0001522818 00000 n +0001522972 00000 n +0001523098 00000 n +0001523284 00000 n +0001524410 00000 n +0001524582 00000 n +0001524708 00000 n +0001524834 00000 n +0001524960 00000 n +0001525146 00000 n +0001526480 00000 n +0001526634 00000 n +0001526760 00000 n +0001526946 00000 n +0001528034 00000 n +0001528206 00000 n +0001528332 00000 n +0001528458 00000 n +0001528584 00000 n +0001528770 00000 n +0001530099 00000 n +0001530271 00000 n +0001530397 00000 n +0001530523 00000 n +0001530649 00000 n +0001530835 00000 n +0001532067 00000 n +0001532230 00000 n +0001532356 00000 n +0001532482 00000 n +0001532668 00000 n +0001533871 00000 n +0001534034 00000 n +0001534160 00000 n +0001534286 00000 n +0001534472 00000 n +0001535664 00000 n +0001535836 00000 n +0001535962 00000 n +0001536088 00000 n +0001536214 00000 n +0001536400 00000 n +0001537641 00000 n +0001537795 00000 n +0001537921 00000 n +0001538107 00000 n +0001539310 00000 n +0001539464 00000 n +0001539590 00000 n +0001539776 00000 n +0001541177 00000 n +0001541340 00000 n +0001541466 00000 n +0001541592 00000 n +0001541778 00000 n +0001543214 00000 n +0001543377 00000 n +0001543503 00000 n +0001543629 00000 n +0001543815 00000 n +0001545282 00000 n +0001545454 00000 n +0001545580 00000 n +0001545706 00000 n +0001545832 00000 n +0001546018 00000 n +0001548088 00000 n +0001548260 00000 n +0001548386 00000 n +0001548512 00000 n +0001548638 00000 n +0001548824 00000 n +0001550324 00000 n +0001550487 00000 n +0001550613 00000 n +0001550739 00000 n +0001550925 00000 n +0001552349 00000 n +0001552503 00000 n +0001552629 00000 n +0001552815 00000 n +0001554283 00000 n +0001554437 00000 n +0001554563 00000 n +0001554749 00000 n +0001555818 00000 n +0001555981 00000 n +0001556107 00000 n +0001556233 00000 n +0001556419 00000 n +0001557730 00000 n +0001557902 00000 n +0001558028 00000 n +0001558154 00000 n +0001558280 00000 n +0001558466 00000 n +0001559878 00000 n +0001560041 00000 n +0001560167 00000 n +0001560293 00000 n +0001560479 00000 n +0001561576 00000 n +0001561730 00000 n +0001561856 00000 n +0001562042 00000 n +0001563215 00000 n +0001563378 00000 n +0001563504 00000 n +0001563630 00000 n +0001563816 00000 n +0001564950 00000 n +0001565104 00000 n +0001565230 00000 n +0001565416 00000 n +0001566566 00000 n +0001566738 00000 n +0001566864 00000 n +0001566990 00000 n +0001567116 00000 n +0001567302 00000 n +0001568696 00000 n +0001568868 00000 n +0001568994 00000 n +0001569120 00000 n +0001569246 00000 n +0001569432 00000 n +0001570764 00000 n +0001570918 00000 n +0001571044 00000 n +0001571230 00000 n +0001572666 00000 n +0001572820 00000 n +0001572946 00000 n +0001573132 00000 n +0001574274 00000 n +0001574446 00000 n +0001574572 00000 n +0001574698 00000 n +0001574824 00000 n +0001575010 00000 n +0001576340 00000 n +0001576494 00000 n +0001576620 00000 n +0001576806 00000 n +0001577900 00000 n +0001578072 00000 n +0001578198 00000 n +0001578324 00000 n +0001578450 00000 n +0001578636 00000 n +0001579977 00000 n +0001580149 00000 n +0001580275 00000 n +0001580401 00000 n +0001580527 00000 n +0001580713 00000 n +0001581945 00000 n +0001582099 00000 n +0001582225 00000 n +0001582411 00000 n +0001583605 00000 n +0001583759 00000 n +0001583885 00000 n +0001584071 00000 n +0001585481 00000 n +0001585644 00000 n +0001585770 00000 n +0001585896 00000 n +0001586082 00000 n +0001587282 00000 n +0001587445 00000 n +0001587571 00000 n +0001587697 00000 n +0001587883 00000 n +0001589366 00000 n +0001589529 00000 n +0001589655 00000 n +0001589781 00000 n +0001589967 00000 n +0001591452 00000 n +0001591615 00000 n +0001591741 00000 n +0001591867 00000 n +0001592053 00000 n +0001593251 00000 n +0001593423 00000 n +0001593549 00000 n +0001593675 00000 n +0001593801 00000 n +0001593987 00000 n +0001595266 00000 n +0001595438 00000 n +0001595564 00000 n +0001595690 00000 n +0001595816 00000 n +0001596002 00000 n +0001598108 00000 n +0001598271 00000 n +0001598397 00000 n +0001598523 00000 n +0001598709 00000 n +0001600154 00000 n +0001600317 00000 n +0001600443 00000 n +0001600569 00000 n +0001600755 00000 n +0001602329 00000 n +0001602483 00000 n +0001602609 00000 n +0001602795 00000 n +0001604112 00000 n +0001604266 00000 n +0001604392 00000 n +0001604578 00000 n +0001605652 00000 n +0001605815 00000 n +0001605941 00000 n +0001606067 00000 n +0001606253 00000 n +0001607406 00000 n +0001607569 00000 n +0001607695 00000 n +0001607821 00000 n +0001608007 00000 n +0001609120 00000 n +0001609274 00000 n +0001609400 00000 n +0001609586 00000 n +0001610574 00000 n +0001610746 00000 n +0001610872 00000 n +0001610998 00000 n +0001611124 00000 n +0001611310 00000 n +0001612598 00000 n +0001612752 00000 n +0001612878 00000 n +0001613064 00000 n +0001614114 00000 n +0001614277 00000 n +0001614403 00000 n +0001614529 00000 n +0001614715 00000 n +0001615939 00000 n +0001616102 00000 n +0001616228 00000 n +0001616354 00000 n +0001616540 00000 n +0001617735 00000 n +0001617889 00000 n +0001618015 00000 n +0001618201 00000 n +0001619279 00000 n +0001619433 00000 n +0001619559 00000 n +0001619745 00000 n +0001621023 00000 n +0001621195 00000 n +0001621321 00000 n +0001621447 00000 n +0001621573 00000 n +0001621759 00000 n +0001623090 00000 n +0001623262 00000 n +0001623388 00000 n +0001623514 00000 n +0001623640 00000 n +0001623826 00000 n +0001625839 00000 n +0001626011 00000 n +0001626137 00000 n +0001626263 00000 n +0001626389 00000 n +0001626575 00000 n +0001627999 00000 n +0001628189 00000 n +0001628315 00000 n +0001628441 00000 n +0001628567 00000 n +0001628693 00000 n +0001628819 00000 n +0001629005 00000 n +0001630337 00000 n +0001630500 00000 n +0001630626 00000 n +0001630752 00000 n +0001630938 00000 n +0001632238 00000 n +0001632410 00000 n +0001632536 00000 n +0001632662 00000 n +0001632788 00000 n +0001632974 00000 n +0001634564 00000 n +0001634718 00000 n +0001634844 00000 n +0001635030 00000 n +0001636093 00000 n +0001636256 00000 n +0001636382 00000 n +0001636508 00000 n +0001636694 00000 n +0001637907 00000 n +0001638079 00000 n +0001638205 00000 n +0001638331 00000 n +0001638457 00000 n +0001638643 00000 n +0001639883 00000 n +0001640046 00000 n +0001640172 00000 n +0001640298 00000 n +0001640484 00000 n +0001641709 00000 n +0001641881 00000 n +0001642007 00000 n +0001642133 00000 n +0001642259 00000 n +0001642445 00000 n +0001644000 00000 n +0001644154 00000 n +0001644280 00000 n +0001644466 00000 n +0001645699 00000 n +0001645853 00000 n +0001645979 00000 n +0001646165 00000 n +0001647642 00000 n +0001647814 00000 n +0001647940 00000 n +0001648066 00000 n +0001648192 00000 n +0001648378 00000 n +0001650464 00000 n +0001650627 00000 n +0001650753 00000 n +0001650879 00000 n +0001651065 00000 n +0001652149 00000 n +0001652312 00000 n +0001652438 00000 n +0001652564 00000 n +0001652750 00000 n +0001654052 00000 n +0001654215 00000 n +0001654341 00000 n +0001654467 00000 n +0001654653 00000 n +0001656428 00000 n +0001656600 00000 n +0001656726 00000 n +0001656852 00000 n +0001656978 00000 n +0001657164 00000 n +0001658757 00000 n +0001658911 00000 n +0001659037 00000 n +0001659223 00000 n +0001660286 00000 n +0001660449 00000 n +0001660575 00000 n +0001660701 00000 n +0001660887 00000 n +0001662100 00000 n +0001662272 00000 n +0001662398 00000 n +0001662524 00000 n +0001662650 00000 n +0001662836 00000 n +0001664077 00000 n +0001664240 00000 n +0001664366 00000 n +0001664492 00000 n +0001664678 00000 n +0001665904 00000 n +0001666067 00000 n +0001666193 00000 n +0001666319 00000 n +0001666505 00000 n +0001668207 00000 n +0001668379 00000 n +0001668505 00000 n +0001668631 00000 n +0001668757 00000 n +0001668943 00000 n +0001670497 00000 n +0001670651 00000 n +0001670777 00000 n +0001670963 00000 n +0001672197 00000 n +0001672351 00000 n +0001672477 00000 n +0001672663 00000 n +0001674138 00000 n +0001674310 00000 n +0001674436 00000 n +0001674562 00000 n +0001674688 00000 n +0001674874 00000 n +0001676960 00000 n +0001677123 00000 n +0001677249 00000 n +0001677375 00000 n +0001677561 00000 n +0001678645 00000 n +0001678808 00000 n +0001678934 00000 n +0001679060 00000 n +0001679246 00000 n +0001680692 00000 n +0001680864 00000 n +0001680990 00000 n +0001681116 00000 n +0001681242 00000 n +0001681428 00000 n +0001683037 00000 n +0001683200 00000 n +0001683326 00000 n +0001683452 00000 n +0001683638 00000 n +0001684951 00000 n +0001685123 00000 n +0001685249 00000 n +0001685375 00000 n +0001685501 00000 n +0001685687 00000 n +0001687027 00000 n +0001687190 00000 n +0001687316 00000 n +0001687442 00000 n +0001687628 00000 n +0001689270 00000 n +0001689442 00000 n +0001689568 00000 n +0001689694 00000 n +0001689820 00000 n +0001690006 00000 n +0001691608 00000 n +0001691762 00000 n +0001691888 00000 n +0001692074 00000 n +0001693419 00000 n +0001693573 00000 n +0001693699 00000 n +0001693885 00000 n +0001695454 00000 n +0001695626 00000 n +0001695752 00000 n +0001695878 00000 n +0001696004 00000 n +0001696190 00000 n +0001698403 00000 n +0001698540 00000 n +0001698671 00000 n +0001699110 00000 n +0001699498 00000 n +0001699623 00000 n +0001699748 00000 n +0001699873 00000 n +0001699998 00000 n +0001700123 00000 n +0001700248 00000 n +0001700373 00000 n +0001700498 00000 n +0001700623 00000 n +0001700748 00000 n +0001700873 00000 n +0001700998 00000 n +0001701123 00000 n +0001701248 00000 n +0001701373 00000 n +0001701498 00000 n +0001701623 00000 n +0001701748 00000 n +0001701873 00000 n +0001701998 00000 n +0001702123 00000 n +0001702248 00000 n +0001702373 00000 n +0001702498 00000 n +0001702623 00000 n +0001702747 00000 n +0001702870 00000 n +0001703056 00000 n +0001707116 00000 n +0001707387 00000 n +0001707512 00000 n +0001707637 00000 n +0001707762 00000 n +0001707887 00000 n +0001708012 00000 n +0001708137 00000 n +0001708262 00000 n +0001708387 00000 n +0001708512 00000 n +0001708637 00000 n +0001708762 00000 n +0001708887 00000 n +0001709012 00000 n +0001709137 00000 n +0001709295 00000 n +0001711395 00000 n +0001711532 00000 n +0001711704 00000 n +0001712714 00000 n +0001712868 00000 n +0001712994 00000 n +0001713180 00000 n +0001714228 00000 n +0001714400 00000 n +0001714526 00000 n +0001714652 00000 n +0001714778 00000 n +0001714964 00000 n +0001716141 00000 n +0001716295 00000 n +0001716421 00000 n +0001716607 00000 n +0001717775 00000 n +0001717912 00000 n +0001718098 00000 n +0001719159 00000 n +0001719313 00000 n +0001719439 00000 n +0001719625 00000 n +0001720717 00000 n +0001720898 00000 n +0001721024 00000 n +0001721150 00000 n +0001721276 00000 n +0001721402 00000 n +0001721588 00000 n +0001722818 00000 n +0001722972 00000 n +0001723098 00000 n +0001723284 00000 n +0001724557 00000 n +0001724720 00000 n +0001724846 00000 n +0001724972 00000 n +0001725158 00000 n +0001726326 00000 n +0001726489 00000 n +0001726615 00000 n +0001726741 00000 n +0001726927 00000 n +0001728041 00000 n +0001728195 00000 n +0001728321 00000 n +0001728507 00000 n +0001729683 00000 n +0001729846 00000 n +0001729972 00000 n +0001730098 00000 n +0001730284 00000 n +0001731508 00000 n +0001731671 00000 n +0001731797 00000 n +0001731923 00000 n +0001732109 00000 n +0001733231 00000 n +0001733394 00000 n +0001733520 00000 n +0001733646 00000 n +0001733832 00000 n +0001735035 00000 n +0001735198 00000 n +0001735324 00000 n +0001735450 00000 n +0001735636 00000 n +0001736790 00000 n +0001736944 00000 n +0001737070 00000 n +0001737242 00000 n +0001738298 00000 n +0001738461 00000 n +0001738587 00000 n +0001738713 00000 n +0001738899 00000 n +0001740087 00000 n +0001740250 00000 n +0001740376 00000 n +0001740502 00000 n +0001740688 00000 n +0001741803 00000 n +0001741966 00000 n +0001742092 00000 n +0001742218 00000 n +0001742404 00000 n +0001743610 00000 n +0001743773 00000 n +0001743899 00000 n +0001744025 00000 n +0001744211 00000 n +0001745378 00000 n +0001745532 00000 n +0001745658 00000 n +0001745830 00000 n +0001747049 00000 n +0001747212 00000 n +0001747338 00000 n +0001747464 00000 n +0001747650 00000 n +0001748992 00000 n +0001749155 00000 n +0001749281 00000 n +0001749407 00000 n +0001749593 00000 n +0001750834 00000 n +0001750988 00000 n +0001751114 00000 n +0001751300 00000 n +0001752489 00000 n +0001752643 00000 n +0001752769 00000 n +0001752955 00000 n +0001754125 00000 n +0001754279 00000 n +0001754405 00000 n +0001754591 00000 n +0001755792 00000 n +0001755955 00000 n +0001756081 00000 n +0001756207 00000 n +0001756393 00000 n +0001757786 00000 n +0001757949 00000 n +0001758075 00000 n +0001758201 00000 n +0001758387 00000 n +0001759705 00000 n +0001759886 00000 n +0001760012 00000 n +0001760138 00000 n +0001760264 00000 n +0001760390 00000 n +0001760576 00000 n +0001761962 00000 n +0001762116 00000 n +0001762242 00000 n +0001762428 00000 n +0001763596 00000 n +0001763750 00000 n +0001763876 00000 n +0001764048 00000 n +0001765019 00000 n +0001765173 00000 n +0001765299 00000 n +0001765471 00000 n +0001766442 00000 n +0001766596 00000 n +0001766722 00000 n +0001766894 00000 n +0001767865 00000 n +0001768002 00000 n +0001768188 00000 n +0001769381 00000 n +0001769535 00000 n +0001769661 00000 n +0001769847 00000 n +0001771029 00000 n +0001771192 00000 n +0001771318 00000 n +0001771444 00000 n +0001771630 00000 n +0001772890 00000 n +0001773053 00000 n +0001773179 00000 n +0001773305 00000 n +0001773491 00000 n +0001774627 00000 n +0001774790 00000 n +0001774916 00000 n +0001775042 00000 n +0001775228 00000 n +0001776364 00000 n +0001776527 00000 n +0001776653 00000 n +0001776779 00000 n +0001776965 00000 n +0001778102 00000 n +0001778256 00000 n +0001778382 00000 n +0001778568 00000 n +0001779829 00000 n +0001779992 00000 n +0001780118 00000 n +0001780244 00000 n +0001780430 00000 n +0001781685 00000 n +0001781822 00000 n +0001781953 00000 n +0001782392 00000 n +0001782798 00000 n +0001782923 00000 n +0001783048 00000 n +0001783173 00000 n +0001783298 00000 n +0001783423 00000 n +0001783548 00000 n +0001783673 00000 n +0001783798 00000 n +0001783923 00000 n +0001784048 00000 n +0001784173 00000 n +0001784298 00000 n +0001784423 00000 n +0001784548 00000 n +0001784673 00000 n +0001784798 00000 n +0001784923 00000 n +0001785048 00000 n +0001785173 00000 n +0001785298 00000 n +0001785423 00000 n +0001785548 00000 n +0001785673 00000 n +0001785798 00000 n +0001785923 00000 n +0001786048 00000 n +0001786173 00000 n +0001786298 00000 n +0001786422 00000 n +0001786608 00000 n +0001790871 00000 n +0001791277 00000 n +0001791402 00000 n +0001791527 00000 n +0001791652 00000 n +0001791777 00000 n +0001791902 00000 n +0001792027 00000 n +0001792152 00000 n +0001792277 00000 n +0001792402 00000 n +0001792527 00000 n +0001792652 00000 n +0001792777 00000 n +0001792902 00000 n +0001793027 00000 n +0001793152 00000 n +0001793277 00000 n +0001793402 00000 n +0001793527 00000 n +0001793652 00000 n +0001793777 00000 n +0001793902 00000 n +0001794027 00000 n +0001794152 00000 n +0001794277 00000 n +0001794402 00000 n +0001794527 00000 n +0001794652 00000 n +0001794777 00000 n +0001794902 00000 n +0001795060 00000 n +0001798716 00000 n +0001798853 00000 n +0001799025 00000 n +0001800037 00000 n +0001800191 00000 n +0001800317 00000 n +0001800503 00000 n +0001801551 00000 n +0001801732 00000 n +0001801858 00000 n +0001801984 00000 n +0001802110 00000 n +0001802236 00000 n +0001802422 00000 n +0001803629 00000 n +0001803783 00000 n +0001803909 00000 n +0001804095 00000 n +0001805394 00000 n +0001805557 00000 n +0001805683 00000 n +0001805809 00000 n +0001805995 00000 n +0001807402 00000 n +0001807565 00000 n +0001807691 00000 n +0001807817 00000 n +0001808003 00000 n +0001809474 00000 n +0001809611 00000 n +0001809797 00000 n +0001810858 00000 n +0001811012 00000 n +0001811138 00000 n +0001811324 00000 n +0001812416 00000 n +0001812597 00000 n +0001812723 00000 n +0001812849 00000 n +0001812975 00000 n +0001813101 00000 n +0001813287 00000 n +0001814516 00000 n +0001814670 00000 n +0001814796 00000 n +0001814982 00000 n +0001816256 00000 n +0001816419 00000 n +0001816545 00000 n +0001816671 00000 n +0001816857 00000 n +0001818025 00000 n +0001818188 00000 n +0001818314 00000 n +0001818440 00000 n +0001818626 00000 n +0001819893 00000 n +0001820056 00000 n +0001820182 00000 n +0001820308 00000 n +0001820494 00000 n +0001821769 00000 n +0001821932 00000 n +0001822058 00000 n +0001822184 00000 n +0001822370 00000 n +0001823484 00000 n +0001823647 00000 n +0001823773 00000 n +0001823899 00000 n +0001824085 00000 n +0001825417 00000 n +0001825571 00000 n +0001825697 00000 n +0001825883 00000 n +0001827059 00000 n +0001827222 00000 n +0001827348 00000 n +0001827474 00000 n +0001827660 00000 n +0001828884 00000 n +0001829047 00000 n +0001829173 00000 n +0001829299 00000 n +0001829485 00000 n +0001830751 00000 n +0001830914 00000 n +0001831040 00000 n +0001831166 00000 n +0001831352 00000 n +0001832474 00000 n +0001832637 00000 n +0001832763 00000 n +0001832889 00000 n +0001833075 00000 n +0001834278 00000 n +0001834441 00000 n +0001834567 00000 n +0001834693 00000 n +0001834879 00000 n +0001836033 00000 n +0001836187 00000 n +0001836313 00000 n +0001836485 00000 n +0001837541 00000 n +0001837704 00000 n +0001837830 00000 n +0001837956 00000 n +0001838142 00000 n +0001839329 00000 n +0001839492 00000 n +0001839618 00000 n +0001839744 00000 n +0001839930 00000 n +0001841044 00000 n +0001841207 00000 n +0001841333 00000 n +0001841459 00000 n +0001841645 00000 n +0001842851 00000 n +0001843014 00000 n +0001843140 00000 n +0001843266 00000 n +0001843452 00000 n +0001844619 00000 n +0001844773 00000 n +0001844899 00000 n +0001845085 00000 n +0001846720 00000 n +0001846874 00000 n +0001847000 00000 n +0001847172 00000 n +0001848263 00000 n +0001848444 00000 n +0001848570 00000 n +0001848696 00000 n +0001848822 00000 n +0001848948 00000 n +0001849134 00000 n +0001850665 00000 n +0001850819 00000 n +0001850945 00000 n +0001851131 00000 n +0001852629 00000 n +0001852783 00000 n +0001852909 00000 n +0001853095 00000 n +0001854517 00000 n +0001854680 00000 n +0001854806 00000 n +0001854932 00000 n +0001855118 00000 n +0001856460 00000 n +0001856623 00000 n +0001856749 00000 n +0001856875 00000 n +0001857061 00000 n +0001858302 00000 n +0001858456 00000 n +0001858582 00000 n +0001858768 00000 n +0001859959 00000 n +0001860113 00000 n +0001860239 00000 n +0001860425 00000 n +0001861595 00000 n +0001861749 00000 n +0001861875 00000 n +0001862061 00000 n +0001863261 00000 n +0001863424 00000 n +0001863550 00000 n +0001863676 00000 n +0001863862 00000 n +0001865256 00000 n +0001865419 00000 n +0001865545 00000 n +0001865671 00000 n +0001865857 00000 n +0001867176 00000 n +0001867339 00000 n +0001867465 00000 n +0001867591 00000 n +0001867777 00000 n +0001869150 00000 n +0001869331 00000 n +0001869457 00000 n +0001869583 00000 n +0001869709 00000 n +0001869835 00000 n +0001870021 00000 n +0001871407 00000 n +0001871561 00000 n +0001871687 00000 n +0001871873 00000 n +0001873041 00000 n +0001873195 00000 n +0001873321 00000 n +0001873493 00000 n +0001874464 00000 n +0001874618 00000 n +0001874744 00000 n +0001874916 00000 n +0001875887 00000 n +0001876041 00000 n +0001876167 00000 n +0001876339 00000 n +0001877310 00000 n +0001877464 00000 n +0001877590 00000 n +0001877762 00000 n +0001878732 00000 n +0001878869 00000 n +0001879055 00000 n +0001880248 00000 n +0001880402 00000 n +0001880528 00000 n +0001880714 00000 n +0001881895 00000 n +0001882049 00000 n +0001882175 00000 n +0001882347 00000 n +0001883371 00000 n +0001883525 00000 n +0001883651 00000 n +0001883823 00000 n +0001884899 00000 n +0001885062 00000 n +0001885188 00000 n +0001885314 00000 n +0001885500 00000 n +0001886760 00000 n +0001886923 00000 n +0001887049 00000 n +0001887175 00000 n +0001887361 00000 n +0001888497 00000 n +0001888660 00000 n +0001888786 00000 n +0001888912 00000 n +0001889098 00000 n +0001890234 00000 n +0001890397 00000 n +0001890523 00000 n +0001890649 00000 n +0001890835 00000 n +0001891971 00000 n +0001892134 00000 n +0001892260 00000 n +0001892386 00000 n +0001892572 00000 n +0001893708 00000 n +0001893862 00000 n +0001893988 00000 n +0001894174 00000 n +0001895435 00000 n +0001895598 00000 n +0001895724 00000 n +0001895850 00000 n +0001896036 00000 n +0001897291 00000 n +0001897454 00000 n +0001897580 00000 n +0001897706 00000 n +0001897892 00000 n +0001899161 00000 n +0001899324 00000 n +0001899450 00000 n +0001899576 00000 n +0001899762 00000 n +0001901079 00000 n +0001901216 00000 n +0001901347 00000 n +0001901785 00000 n +0001902146 00000 n +0001902271 00000 n +0001902396 00000 n +0001902521 00000 n +0001902646 00000 n +0001902771 00000 n +0001902896 00000 n +0001903021 00000 n +0001903146 00000 n +0001903271 00000 n +0001903396 00000 n +0001903521 00000 n +0001903646 00000 n +0001903771 00000 n +0001903896 00000 n +0001904021 00000 n +0001904146 00000 n +0001904271 00000 n +0001904396 00000 n +0001904521 00000 n +0001904646 00000 n +0001904771 00000 n +0001904896 00000 n +0001905021 00000 n +0001905146 00000 n +0001905332 00000 n +0001908905 00000 n +0001909042 00000 n +0001909214 00000 n +0001910227 00000 n +0001910381 00000 n +0001910507 00000 n +0001910693 00000 n +0001911727 00000 n +0001911864 00000 n +0001912050 00000 n +0001913138 00000 n +0001913292 00000 n +0001913418 00000 n +0001913604 00000 n +0001914735 00000 n +0001914872 00000 n +0001915058 00000 n +0001916123 00000 n +0001916277 00000 n +0001916403 00000 n +0001916589 00000 n +0001917668 00000 n +0001917849 00000 n +0001917975 00000 n +0001918101 00000 n +0001918227 00000 n +0001918353 00000 n +0001918539 00000 n +0001919743 00000 n +0001919906 00000 n +0001920032 00000 n +0001920158 00000 n +0001920344 00000 n +0001921604 00000 n +0001921767 00000 n +0001921893 00000 n +0001922019 00000 n +0001922205 00000 n +0001923399 00000 n +0001923562 00000 n +0001923688 00000 n +0001923814 00000 n +0001924000 00000 n +0001925152 00000 n +0001925315 00000 n +0001925441 00000 n +0001925567 00000 n +0001925753 00000 n +0001926916 00000 n +0001927079 00000 n +0001927205 00000 n +0001927331 00000 n +0001927517 00000 n +0001928685 00000 n +0001928848 00000 n +0001928974 00000 n +0001929100 00000 n +0001929286 00000 n +0001930380 00000 n +0001930534 00000 n +0001930660 00000 n +0001930846 00000 n +0001932047 00000 n +0001932201 00000 n +0001932327 00000 n +0001932513 00000 n +0001933651 00000 n +0001933832 00000 n +0001933958 00000 n +0001934084 00000 n +0001934210 00000 n +0001934336 00000 n +0001934522 00000 n +0001935907 00000 n +0001936044 00000 n +0001936230 00000 n +0001937367 00000 n +0001937504 00000 n +0001937676 00000 n +0001938596 00000 n +0001938733 00000 n +0001938905 00000 n +0001939811 00000 n +0001939948 00000 n +0001940120 00000 n +0001941057 00000 n +0001941211 00000 n +0001941337 00000 n +0001941523 00000 n +0001942825 00000 n +0001942979 00000 n +0001943105 00000 n +0001943291 00000 n +0001944378 00000 n +0001944532 00000 n +0001944658 00000 n +0001944844 00000 n +0001945952 00000 n +0001946106 00000 n +0001946232 00000 n +0001946418 00000 n +0001947506 00000 n +0001947643 00000 n +0001947774 00000 n +0001948213 00000 n +0001948628 00000 n +0001948753 00000 n +0001948878 00000 n +0001949003 00000 n +0001949128 00000 n +0001949253 00000 n +0001949378 00000 n +0001949503 00000 n +0001949628 00000 n +0001949753 00000 n +0001949878 00000 n +0001950003 00000 n +0001950128 00000 n +0001950253 00000 n +0001950378 00000 n +0001950503 00000 n +0001950628 00000 n +0001950753 00000 n +0001950878 00000 n +0001951003 00000 n +0001951128 00000 n +0001951253 00000 n +0001951378 00000 n +0001951503 00000 n +0001951628 00000 n +0001951753 00000 n +0001951878 00000 n +0001952003 00000 n +0001952128 00000 n +0001952253 00000 n +0001952377 00000 n +0001952563 00000 n +0001956742 00000 n +0001956995 00000 n +0001957120 00000 n +0001957245 00000 n +0001957370 00000 n +0001957495 00000 n +0001957620 00000 n +0001957745 00000 n +0001957870 00000 n +0001957995 00000 n +0001958120 00000 n +0001958245 00000 n +0001958370 00000 n +0001958495 00000 n +0001958653 00000 n +0001960517 00000 n +0001960654 00000 n +0001960826 00000 n +0001961839 00000 n +0001961993 00000 n +0001962119 00000 n +0001962305 00000 n +0001963317 00000 n +0001963454 00000 n +0001963640 00000 n +0001964813 00000 n +0001964967 00000 n +0001965093 00000 n +0001965279 00000 n +0001966553 00000 n +0001966707 00000 n +0001966833 00000 n +0001967019 00000 n +0001968208 00000 n +0001968362 00000 n +0001968488 00000 n +0001968674 00000 n +0001969838 00000 n +0001969975 00000 n +0001970161 00000 n +0001971235 00000 n +0001971389 00000 n +0001971515 00000 n +0001971701 00000 n +0001972769 00000 n +0001972950 00000 n +0001973076 00000 n +0001973202 00000 n +0001973328 00000 n +0001973454 00000 n +0001973640 00000 n +0001974850 00000 n +0001975013 00000 n +0001975139 00000 n +0001975265 00000 n +0001975451 00000 n +0001976653 00000 n +0001976807 00000 n +0001976933 00000 n +0001977119 00000 n +0001978235 00000 n +0001978398 00000 n +0001978524 00000 n +0001978650 00000 n +0001978836 00000 n +0001980038 00000 n +0001980192 00000 n +0001980318 00000 n +0001980504 00000 n +0001981670 00000 n +0001981833 00000 n +0001981959 00000 n +0001982085 00000 n +0001982271 00000 n +0001983333 00000 n +0001983496 00000 n +0001983622 00000 n +0001983748 00000 n +0001983934 00000 n +0001985107 00000 n +0001985270 00000 n +0001985396 00000 n +0001985522 00000 n +0001985708 00000 n +0001986842 00000 n +0001986996 00000 n +0001987122 00000 n +0001987294 00000 n +0001988322 00000 n +0001988485 00000 n +0001988611 00000 n +0001988737 00000 n +0001988923 00000 n +0001990098 00000 n +0001990252 00000 n +0001990378 00000 n +0001990564 00000 n +0001991716 00000 n +0001991870 00000 n +0001991996 00000 n +0001992182 00000 n +0001993342 00000 n +0001993505 00000 n +0001993631 00000 n +0001993757 00000 n +0001993943 00000 n +0001995023 00000 n +0001995177 00000 n +0001995303 00000 n +0001995489 00000 n +0001996680 00000 n +0001996834 00000 n +0001996960 00000 n +0001997146 00000 n +0001998279 00000 n +0001998433 00000 n +0001998559 00000 n +0001998731 00000 n +0001999861 00000 n +0002000033 00000 n +0002000159 00000 n +0002000285 00000 n +0002000411 00000 n +0002000597 00000 n +0002001979 00000 n +0002002142 00000 n +0002002268 00000 n +0002002394 00000 n +0002002580 00000 n +0002003924 00000 n +0002004078 00000 n +0002004204 00000 n +0002004390 00000 n +0002005539 00000 n +0002005693 00000 n +0002005819 00000 n +0002006005 00000 n +0002007187 00000 n +0002007341 00000 n +0002007467 00000 n +0002007653 00000 n +0002008842 00000 n +0002009023 00000 n +0002009149 00000 n +0002009275 00000 n +0002009401 00000 n +0002009527 00000 n +0002009713 00000 n +0002011084 00000 n +0002011221 00000 n +0002011407 00000 n +0002012587 00000 n +0002012724 00000 n +0002012896 00000 n +0002013800 00000 n +0002013937 00000 n +0002014109 00000 n +0002015021 00000 n +0002015175 00000 n +0002015301 00000 n +0002015473 00000 n +0002016538 00000 n +0002016675 00000 n +0002016847 00000 n +0002017757 00000 n +0002017894 00000 n +0002018066 00000 n +0002019000 00000 n +0002019154 00000 n +0002019280 00000 n +0002019466 00000 n +0002020767 00000 n +0002020921 00000 n +0002021047 00000 n +0002021233 00000 n +0002022336 00000 n +0002022490 00000 n +0002022616 00000 n +0002022802 00000 n +0002023916 00000 n +0002024079 00000 n +0002024205 00000 n +0002024331 00000 n +0002024517 00000 n +0002025735 00000 n +0002025889 00000 n +0002026015 00000 n +0002026201 00000 n +0002027300 00000 n +0002027454 00000 n +0002027580 00000 n +0002027766 00000 n +0002028862 00000 n +0002028999 00000 n +0002029130 00000 n +0002029577 00000 n +0002029929 00000 n +0002030054 00000 n +0002030179 00000 n +0002030304 00000 n +0002030429 00000 n +0002030554 00000 n +0002030679 00000 n +0002030804 00000 n +0002030929 00000 n +0002031054 00000 n +0002031179 00000 n +0002031304 00000 n +0002031429 00000 n +0002031554 00000 n +0002031679 00000 n +0002031804 00000 n +0002031929 00000 n +0002032054 00000 n +0002032179 00000 n +0002032304 00000 n +0002032429 00000 n +0002032554 00000 n +0002032679 00000 n +0002032804 00000 n +0002032990 00000 n +0002037024 00000 n +0002037349 00000 n +0002037474 00000 n +0002037599 00000 n +0002037724 00000 n +0002037849 00000 n +0002037974 00000 n +0002038099 00000 n +0002038224 00000 n +0002038349 00000 n +0002038474 00000 n +0002038599 00000 n +0002038724 00000 n +0002038849 00000 n +0002038974 00000 n +0002039099 00000 n +0002039224 00000 n +0002039349 00000 n +0002039474 00000 n +0002039599 00000 n +0002039724 00000 n +0002039849 00000 n +0002040007 00000 n +0002043011 00000 n +0002043148 00000 n +0002043320 00000 n +0002044337 00000 n +0002044491 00000 n +0002044617 00000 n +0002044803 00000 n +0002045920 00000 n +0002046101 00000 n +0002046227 00000 n +0002046353 00000 n +0002046479 00000 n +0002046605 00000 n +0002046791 00000 n +0002048018 00000 n +0002048181 00000 n +0002048307 00000 n +0002048433 00000 n +0002048619 00000 n +0002049976 00000 n +0002050139 00000 n +0002050265 00000 n +0002050391 00000 n +0002050577 00000 n +0002052066 00000 n +0002052203 00000 n +0002052389 00000 n +0002053510 00000 n +0002053664 00000 n +0002053790 00000 n +0002053976 00000 n +0002055197 00000 n +0002055378 00000 n +0002055504 00000 n +0002055630 00000 n +0002055756 00000 n +0002055882 00000 n +0002056068 00000 n +0002057380 00000 n +0002057543 00000 n +0002057669 00000 n +0002057795 00000 n +0002057981 00000 n +0002059415 00000 n +0002059578 00000 n +0002059704 00000 n +0002059830 00000 n +0002060016 00000 n +0002061339 00000 n +0002061502 00000 n +0002061628 00000 n +0002061754 00000 n +0002061940 00000 n +0002063137 00000 n +0002063300 00000 n +0002063426 00000 n +0002063552 00000 n +0002063738 00000 n +0002065023 00000 n +0002065186 00000 n +0002065312 00000 n +0002065438 00000 n +0002065624 00000 n +0002066817 00000 n +0002066980 00000 n +0002067106 00000 n +0002067232 00000 n +0002067418 00000 n +0002068610 00000 n +0002068773 00000 n +0002068899 00000 n +0002069025 00000 n +0002069211 00000 n +0002070381 00000 n +0002070535 00000 n +0002070661 00000 n +0002070833 00000 n +0002072113 00000 n +0002072276 00000 n +0002072402 00000 n +0002072528 00000 n +0002072714 00000 n +0002074094 00000 n +0002074257 00000 n +0002074383 00000 n +0002074509 00000 n +0002074695 00000 n +0002075972 00000 n +0002076126 00000 n +0002076252 00000 n +0002076438 00000 n +0002077649 00000 n +0002077803 00000 n +0002077929 00000 n +0002078115 00000 n +0002079325 00000 n +0002079479 00000 n +0002079605 00000 n +0002079791 00000 n +0002081000 00000 n +0002081163 00000 n +0002081289 00000 n +0002081415 00000 n +0002081601 00000 n +0002083046 00000 n +0002083209 00000 n +0002083335 00000 n +0002083461 00000 n +0002083647 00000 n +0002085031 00000 n +0002085194 00000 n +0002085320 00000 n +0002085446 00000 n +0002085632 00000 n +0002087030 00000 n +0002087211 00000 n +0002087337 00000 n +0002087463 00000 n +0002087589 00000 n +0002087715 00000 n +0002087901 00000 n +0002089340 00000 n +0002089494 00000 n +0002089620 00000 n +0002089806 00000 n +0002090984 00000 n +0002091138 00000 n +0002091264 00000 n +0002091436 00000 n +0002092448 00000 n +0002092602 00000 n +0002092728 00000 n +0002092900 00000 n +0002093913 00000 n +0002094067 00000 n +0002094193 00000 n +0002094365 00000 n +0002095378 00000 n +0002095532 00000 n +0002095658 00000 n +0002095830 00000 n +0002096843 00000 n +0002096980 00000 n +0002097166 00000 n +0002098411 00000 n +0002098565 00000 n +0002098691 00000 n +0002098877 00000 n +0002100083 00000 n +0002100237 00000 n +0002100363 00000 n +0002100535 00000 n +0002101573 00000 n +0002101727 00000 n +0002101853 00000 n +0002102025 00000 n +0002103105 00000 n +0002103268 00000 n +0002103394 00000 n +0002103520 00000 n +0002103706 00000 n +0002105046 00000 n +0002105209 00000 n +0002105335 00000 n +0002105461 00000 n +0002105647 00000 n +0002106856 00000 n +0002107019 00000 n +0002107145 00000 n +0002107271 00000 n +0002107457 00000 n +0002108667 00000 n +0002108830 00000 n +0002108956 00000 n +0002109082 00000 n +0002109268 00000 n +0002110477 00000 n +0002110640 00000 n +0002110766 00000 n +0002110892 00000 n +0002111078 00000 n +0002112288 00000 n +0002112442 00000 n +0002112568 00000 n +0002112754 00000 n +0002114076 00000 n +0002114239 00000 n +0002114365 00000 n +0002114491 00000 n +0002114677 00000 n +0002115992 00000 n +0002116155 00000 n +0002116281 00000 n +0002116407 00000 n +0002116593 00000 n +0002117781 00000 n +0002117944 00000 n +0002118070 00000 n +0002118196 00000 n +0002118382 00000 n +0002119676 00000 n +0002119813 00000 n +0002119944 00000 n +0002120382 00000 n +0002120806 00000 n +0002120931 00000 n +0002121056 00000 n +0002121181 00000 n +0002121306 00000 n +0002121431 00000 n +0002121556 00000 n +0002121681 00000 n +0002121806 00000 n +0002121931 00000 n +0002122056 00000 n +0002122181 00000 n +0002122306 00000 n +0002122431 00000 n +0002122556 00000 n +0002122681 00000 n +0002122806 00000 n +0002122931 00000 n +0002123056 00000 n +0002123181 00000 n +0002123306 00000 n +0002123431 00000 n +0002123556 00000 n +0002123681 00000 n +0002123806 00000 n +0002123931 00000 n +0002124056 00000 n +0002124181 00000 n +0002124306 00000 n +0002124431 00000 n +0002124556 00000 n +0002124680 00000 n +0002124866 00000 n +0002128948 00000 n +0002129102 00000 n +0002129227 00000 n +0002129385 00000 n +0002130126 00000 n +0002130263 00000 n +0002130435 00000 n +0002131445 00000 n +0002131599 00000 n +0002131725 00000 n +0002131911 00000 n +0002132934 00000 n +0002133071 00000 n +0002133257 00000 n +0002134339 00000 n +0002134493 00000 n +0002134619 00000 n +0002134805 00000 n +0002135940 00000 n +0002136077 00000 n +0002136263 00000 n +0002137319 00000 n +0002137473 00000 n +0002137599 00000 n +0002137785 00000 n +0002138866 00000 n +0002139047 00000 n +0002139173 00000 n +0002139299 00000 n +0002139425 00000 n +0002139551 00000 n +0002139737 00000 n +0002140958 00000 n +0002141112 00000 n +0002141238 00000 n +0002141424 00000 n +0002142665 00000 n +0002142819 00000 n +0002142945 00000 n +0002143131 00000 n +0002144293 00000 n +0002144456 00000 n +0002144582 00000 n +0002144708 00000 n +0002144894 00000 n +0002145972 00000 n +0002146135 00000 n +0002146261 00000 n +0002146387 00000 n +0002146573 00000 n +0002147715 00000 n +0002147878 00000 n +0002148004 00000 n +0002148130 00000 n +0002148316 00000 n +0002149496 00000 n +0002149659 00000 n +0002149785 00000 n +0002149911 00000 n +0002150097 00000 n +0002151224 00000 n +0002151378 00000 n +0002151504 00000 n +0002151676 00000 n +0002152684 00000 n +0002152847 00000 n +0002152973 00000 n +0002153099 00000 n +0002153285 00000 n +0002154437 00000 n +0002154591 00000 n +0002154717 00000 n +0002154903 00000 n +0002155986 00000 n +0002156140 00000 n +0002156266 00000 n +0002156452 00000 n +0002157604 00000 n +0002157767 00000 n +0002157893 00000 n +0002158019 00000 n +0002158205 00000 n +0002159264 00000 n +0002159418 00000 n +0002159544 00000 n +0002159730 00000 n +0002160929 00000 n +0002161083 00000 n +0002161209 00000 n +0002161395 00000 n +0002162538 00000 n +0002162692 00000 n +0002162818 00000 n +0002162990 00000 n +0002164067 00000 n +0002164221 00000 n +0002164347 00000 n +0002164519 00000 n +0002165466 00000 n +0002165620 00000 n +0002165746 00000 n +0002165918 00000 n +0002166868 00000 n +0002167049 00000 n +0002167175 00000 n +0002167301 00000 n +0002167427 00000 n +0002167553 00000 n +0002167739 00000 n +0002169082 00000 n +0002169219 00000 n +0002169405 00000 n +0002170546 00000 n +0002170683 00000 n +0002170855 00000 n +0002171761 00000 n +0002171898 00000 n +0002172070 00000 n +0002172972 00000 n +0002173109 00000 n +0002173281 00000 n +0002174223 00000 n +0002174377 00000 n +0002174503 00000 n +0002174689 00000 n +0002175943 00000 n +0002176097 00000 n +0002176223 00000 n +0002176409 00000 n +0002177501 00000 n +0002177655 00000 n +0002177781 00000 n +0002177967 00000 n +0002179069 00000 n +0002179223 00000 n +0002179349 00000 n +0002179535 00000 n +0002180625 00000 n +0002180762 00000 n +0002180893 00000 n +0002181331 00000 n +0002181746 00000 n +0002181871 00000 n +0002181996 00000 n +0002182121 00000 n +0002182246 00000 n +0002182371 00000 n +0002182496 00000 n +0002182621 00000 n +0002182746 00000 n +0002182871 00000 n +0002182996 00000 n +0002183121 00000 n +0002183246 00000 n +0002183371 00000 n +0002183496 00000 n +0002183621 00000 n +0002183746 00000 n +0002183871 00000 n +0002183996 00000 n +0002184121 00000 n +0002184246 00000 n +0002184371 00000 n +0002184496 00000 n +0002184621 00000 n +0002184746 00000 n +0002184871 00000 n +0002184996 00000 n +0002185121 00000 n +0002185246 00000 n +0002185371 00000 n +0002185496 00000 n +0002185682 00000 n +0002189765 00000 n +0002189991 00000 n +0002190116 00000 n +0002190241 00000 n +0002190366 00000 n +0002190491 00000 n +0002190616 00000 n +0002190741 00000 n +0002190866 00000 n +0002190991 00000 n +0002191116 00000 n +0002191274 00000 n +0002192794 00000 n +0002192931 00000 n +0002193103 00000 n +0002194109 00000 n +0002194263 00000 n +0002194389 00000 n +0002194575 00000 n +0002195598 00000 n +0002195735 00000 n +0002195921 00000 n +0002197069 00000 n +0002197223 00000 n +0002197349 00000 n +0002197535 00000 n +0002198779 00000 n +0002198933 00000 n +0002199059 00000 n +0002199245 00000 n +0002200416 00000 n +0002200570 00000 n +0002200696 00000 n +0002200882 00000 n +0002202050 00000 n +0002202204 00000 n +0002202330 00000 n +0002202516 00000 n +0002203656 00000 n +0002203793 00000 n +0002203979 00000 n +0002205035 00000 n +0002205189 00000 n +0002205315 00000 n +0002205501 00000 n +0002206582 00000 n +0002206763 00000 n +0002206889 00000 n +0002207015 00000 n +0002207141 00000 n +0002207267 00000 n +0002207453 00000 n +0002208674 00000 n +0002208828 00000 n +0002208954 00000 n +0002209140 00000 n +0002210382 00000 n +0002210536 00000 n +0002210662 00000 n +0002210848 00000 n +0002212010 00000 n +0002212173 00000 n +0002212299 00000 n +0002212425 00000 n +0002212611 00000 n +0002213689 00000 n +0002213852 00000 n +0002213978 00000 n +0002214104 00000 n +0002214290 00000 n +0002215470 00000 n +0002215633 00000 n +0002215759 00000 n +0002215885 00000 n +0002216071 00000 n +0002217198 00000 n +0002217352 00000 n +0002217478 00000 n +0002217650 00000 n +0002218658 00000 n +0002218821 00000 n +0002218947 00000 n +0002219073 00000 n +0002219259 00000 n +0002220412 00000 n +0002220566 00000 n +0002220692 00000 n +0002220878 00000 n +0002221961 00000 n +0002222115 00000 n +0002222241 00000 n +0002222427 00000 n +0002223579 00000 n +0002223742 00000 n +0002223868 00000 n +0002223994 00000 n +0002224180 00000 n +0002225239 00000 n +0002225393 00000 n +0002225519 00000 n +0002225705 00000 n +0002226904 00000 n +0002227058 00000 n +0002227184 00000 n +0002227370 00000 n +0002228513 00000 n +0002228667 00000 n +0002228793 00000 n +0002228965 00000 n +0002230045 00000 n +0002230199 00000 n +0002230325 00000 n +0002230497 00000 n +0002231445 00000 n +0002231599 00000 n +0002231725 00000 n +0002231897 00000 n +0002232846 00000 n +0002233000 00000 n +0002233126 00000 n +0002233298 00000 n +0002234250 00000 n +0002234431 00000 n +0002234557 00000 n +0002234683 00000 n +0002234809 00000 n +0002234935 00000 n +0002235121 00000 n +0002236465 00000 n +0002236602 00000 n +0002236788 00000 n +0002237976 00000 n +0002238113 00000 n +0002238285 00000 n +0002239169 00000 n +0002239306 00000 n +0002239478 00000 n +0002240384 00000 n +0002240538 00000 n +0002240664 00000 n +0002240836 00000 n +0002241914 00000 n +0002242051 00000 n +0002242223 00000 n +0002243126 00000 n +0002243263 00000 n +0002243435 00000 n +0002244376 00000 n +0002244530 00000 n +0002244656 00000 n +0002244842 00000 n +0002246146 00000 n +0002246300 00000 n +0002246426 00000 n +0002246612 00000 n +0002247701 00000 n +0002247855 00000 n +0002247981 00000 n +0002248167 00000 n +0002249259 00000 n +0002249422 00000 n +0002249548 00000 n +0002249674 00000 n +0002249860 00000 n +0002251054 00000 n +0002251208 00000 n +0002251334 00000 n +0002251520 00000 n +0002252622 00000 n +0002252776 00000 n +0002252902 00000 n +0002253088 00000 n +0002254178 00000 n +0002256849 00000 n +0002257116 00000 n +0002270243 00000 n +0002270281 00000 n +0002270450 00000 n +0002270721 00000 n +0002284934 00000 n +0002285308 00000 n +0002318343 00000 n +0002340710 00000 n +0002340970 00000 n +0002341413 00000 n +0002341680 00000 n +0002342148 00000 n +0002370574 00000 n +0002371030 00000 n +0002371306 00000 n +0002371345 00000 n +0002371371 00000 n +0002371510 00000 n +0002371665 00000 n +0002371806 00000 n +0002371950 00000 n +0002372103 00000 n +0002372257 00000 n +0002372411 00000 n +0002372565 00000 n +0002372719 00000 n +0002372873 00000 n +0002373027 00000 n +0002373181 00000 n +0002373336 00000 n +0002373490 00000 n +0002373644 00000 n +0002373798 00000 n +0002373952 00000 n +0002374106 00000 n +0002374260 00000 n +0002374414 00000 n +0002374568 00000 n +0002374722 00000 n +0002374876 00000 n +0002375031 00000 n +0002375185 00000 n +0002375339 00000 n +0002375493 00000 n +0002375647 00000 n +0002375801 00000 n +0002375955 00000 n +0002376109 00000 n +0002376263 00000 n +0002376417 00000 n +0002376571 00000 n +0002376726 00000 n +0002376880 00000 n +0002377034 00000 n +0002377188 00000 n +0002377342 00000 n +0002377496 00000 n +0002377650 00000 n +0002377804 00000 n +0002377958 00000 n +0002378112 00000 n +0002378266 00000 n +0002378421 00000 n +0002378575 00000 n +0002378729 00000 n +0002378883 00000 n +0002379037 00000 n +0002379191 00000 n +0002379345 00000 n +0002379499 00000 n +0002379653 00000 n +0002379807 00000 n +0002379961 00000 n +0002380116 00000 n +0002380270 00000 n +0002380424 00000 n +0002380578 00000 n +0002380732 00000 n +0002380886 00000 n +0002381040 00000 n +0002381194 00000 n +0002381348 00000 n +0002381502 00000 n +0002381656 00000 n +0002381811 00000 n +0002381965 00000 n +0002382119 00000 n +0002382273 00000 n +0002382427 00000 n +0002382581 00000 n +0002382735 00000 n +0002382889 00000 n +0002383043 00000 n +0002383197 00000 n +0002383351 00000 n +0002383506 00000 n +0002383660 00000 n +0002383814 00000 n +0002383968 00000 n +0002384122 00000 n +0002384276 00000 n +0002384430 00000 n +0002384584 00000 n +0002384738 00000 n +0002384892 00000 n +0002385046 00000 n +0002385201 00000 n +0002385355 00000 n +0002385509 00000 n +0002385663 00000 n +0002385817 00000 n +0002385971 00000 n +0002386125 00000 n +0002386279 00000 n +0002386433 00000 n +0002386587 00000 n +0002386741 00000 n +0002386859 00000 n +0002387013 00000 n +0002387167 00000 n +0002387321 00000 n +0002387475 00000 n +0002387629 00000 n +0002387783 00000 n +0002391429 00000 n +trailer +<> +startxref +116 +%%EOF diff --git a/Extras/vectormathlibrary/doc/Vector_Math_Library_Cpp_SPU-Reference.pdf b/Extras/vectormathlibrary/doc/Vector_Math_Library_Cpp_SPU-Reference.pdf new file mode 100644 index 000000000..5a6e2ec95 --- /dev/null +++ b/Extras/vectormathlibrary/doc/Vector_Math_Library_Cpp_SPU-Reference.pdf @@ -0,0 +1,13541 @@ +%PDF-1.5 % +5737 0 obj<> endobj +xref +5737 935 +0000000016 00000 n +0000024478 00000 n +0000024616 00000 n +0000019387 00000 n +0000024743 00000 n +0000024880 00000 n +0000024996 00000 n +0000025477 00000 n +0000025732 00000 n +0000025810 00000 n +0000026206 00000 n +0000026786 00000 n +0000027035 00000 n +0000027538 00000 n +0000027797 00000 n +0000056613 00000 n +0000089349 00000 n +0000116791 00000 n +0000116851 00000 n +0000117042 00000 n +0000117195 00000 n +0000117373 00000 n +0000117517 00000 n +0000117697 00000 n +0000117890 00000 n +0000118034 00000 n +0000118213 00000 n +0000118413 00000 n +0000118559 00000 n +0000118737 00000 n +0000118924 00000 n +0000119068 00000 n +0000119245 00000 n +0000119437 00000 n +0000119581 00000 n +0000119757 00000 n +0000119949 00000 n +0000120094 00000 n +0000120272 00000 n +0000120465 00000 n +0000120609 00000 n +0000120787 00000 n +0000120962 00000 n +0000121106 00000 n +0000121307 00000 n +0000121499 00000 n +0000121643 00000 n +0000121821 00000 n +0000122013 00000 n +0000122157 00000 n +0000122334 00000 n +0000122533 00000 n +0000122677 00000 n +0000122855 00000 n +0000123041 00000 n +0000123185 00000 n +0000123363 00000 n +0000123554 00000 n +0000123698 00000 n +0000123874 00000 n +0000124067 00000 n +0000124212 00000 n +0000124390 00000 n +0000124582 00000 n +0000124726 00000 n +0000124903 00000 n +0000125078 00000 n +0000125222 00000 n +0000125424 00000 n +0000125588 00000 n +0000125720 00000 n +0000125819 00000 n +0000125931 00000 n +0000126035 00000 n +0000126221 00000 n +0000126333 00000 n +0000126445 00000 n +0000126632 00000 n +0000126744 00000 n +0000126854 00000 n +0000127040 00000 n +0000127140 00000 n +0000127242 00000 n +0000127426 00000 n +0000127539 00000 n +0000127637 00000 n +0000127822 00000 n +0000127934 00000 n +0000128032 00000 n +0000128218 00000 n +0000128330 00000 n +0000128428 00000 n +0000128560 00000 n +0000128683 00000 n +0000128819 00000 n +0000128948 00000 n +0000129064 00000 n +0000129182 00000 n +0000129313 00000 n +0000129431 00000 n +0000129561 00000 n +0000129677 00000 n +0000129793 00000 n +0000129909 00000 n +0000130037 00000 n +0000130161 00000 n +0000130287 00000 n +0000130414 00000 n +0000130535 00000 n +0000130661 00000 n +0000130781 00000 n +0000130911 00000 n +0000131025 00000 n +0000131149 00000 n +0000131267 00000 n +0000131379 00000 n +0000131505 00000 n +0000131639 00000 n +0000131767 00000 n +0000131884 00000 n +0000132020 00000 n +0000132157 00000 n +0000132287 00000 n +0000132404 00000 n +0000132522 00000 n +0000132653 00000 n +0000132784 00000 n +0000132900 00000 n +0000133016 00000 n +0000133134 00000 n +0000133261 00000 n +0000133385 00000 n +0000133511 00000 n +0000133637 00000 n +0000133758 00000 n +0000133884 00000 n +0000134005 00000 n +0000134119 00000 n +0000134243 00000 n +0000134361 00000 n +0000134475 00000 n +0000134602 00000 n +0000134738 00000 n +0000134870 00000 n +0000134992 00000 n +0000135128 00000 n +0000135257 00000 n +0000135375 00000 n +0000135491 00000 n +0000135607 00000 n +0000135737 00000 n +0000135869 00000 n +0000135995 00000 n +0000136111 00000 n +0000136227 00000 n +0000136354 00000 n +0000136480 00000 n +0000136601 00000 n +0000136729 00000 n +0000136849 00000 n +0000136979 00000 n +0000137094 00000 n +0000137221 00000 n +0000137363 00000 n +0000137483 00000 n +0000137617 00000 n +0000137731 00000 n +0000137867 00000 n +0000137983 00000 n +0000138102 00000 n +0000138220 00000 n +0000138336 00000 n +0000138452 00000 n +0000138579 00000 n +0000138703 00000 n +0000138817 00000 n +0000138932 00000 n +0000139050 00000 n +0000139162 00000 n +0000139281 00000 n +0000139398 00000 n +0000139514 00000 n +0000139646 00000 n +0000139772 00000 n +0000139900 00000 n +0000140020 00000 n +0000140149 00000 n +0000140277 00000 n +0000140395 00000 n +0000140511 00000 n +0000140627 00000 n +0000140760 00000 n +0000140891 00000 n +0000141017 00000 n +0000141144 00000 n +0000141264 00000 n +0000141392 00000 n +0000141520 00000 n +0000141652 00000 n +0000141768 00000 n +0000141886 00000 n +0000142017 00000 n +0000142147 00000 n +0000142273 00000 n +0000142394 00000 n +0000142522 00000 n +0000142631 00000 n +0000142735 00000 n +0000142839 00000 n +0000143026 00000 n +0000143135 00000 n +0000143238 00000 n +0000143415 00000 n +0000143527 00000 n +0000143640 00000 n +0000143840 00000 n +0000143946 00000 n +0000144052 00000 n +0000144172 00000 n +0000144293 00000 n +0000144413 00000 n +0000144539 00000 n +0000144663 00000 n +0000144789 00000 n +0000144913 00000 n +0000145037 00000 n +0000145163 00000 n +0000145287 00000 n +0000145416 00000 n +0000145544 00000 n +0000145671 00000 n +0000145798 00000 n +0000145926 00000 n +0000146051 00000 n +0000146176 00000 n +0000146300 00000 n +0000146422 00000 n +0000146545 00000 n +0000146665 00000 n +0000146785 00000 n +0000146905 00000 n +0000147025 00000 n +0000147143 00000 n +0000147262 00000 n +0000147383 00000 n +0000147504 00000 n +0000147624 00000 n +0000147745 00000 n +0000147871 00000 n +0000147975 00000 n +0000148089 00000 n +0000148278 00000 n +0000148384 00000 n +0000148498 00000 n +0000148676 00000 n +0000148789 00000 n +0000148902 00000 n +0000149102 00000 n +0000149208 00000 n +0000149314 00000 n +0000149435 00000 n +0000149555 00000 n +0000149676 00000 n +0000149796 00000 n +0000149916 00000 n +0000150042 00000 n +0000150166 00000 n +0000150292 00000 n +0000150416 00000 n +0000150541 00000 n +0000150667 00000 n +0000150791 00000 n +0000150919 00000 n +0000151048 00000 n +0000151176 00000 n +0000151302 00000 n +0000151429 00000 n +0000151556 00000 n +0000151682 00000 n +0000151808 00000 n +0000151924 00000 n +0000152052 00000 n +0000152176 00000 n +0000152300 00000 n +0000152425 00000 n +0000152548 00000 n +0000152671 00000 n +0000152799 00000 n +0000152932 00000 n +0000153050 00000 n +0000153172 00000 n +0000153306 00000 n +0000153424 00000 n +0000153544 00000 n +0000153664 00000 n +0000153784 00000 n +0000153905 00000 n +0000154025 00000 n +0000154143 00000 n +0000154271 00000 n +0000154406 00000 n +0000154524 00000 n +0000154644 00000 n +0000154764 00000 n +0000154884 00000 n +0000155005 00000 n +0000155125 00000 n +0000155252 00000 n +0000155356 00000 n +0000155456 00000 n +0000155634 00000 n +0000155744 00000 n +0000155856 00000 n +0000156057 00000 n +0000156161 00000 n +0000156265 00000 n +0000156384 00000 n +0000156503 00000 n +0000156621 00000 n +0000156747 00000 n +0000156871 00000 n +0000156998 00000 n +0000157123 00000 n +0000157247 00000 n +0000157373 00000 n +0000157488 00000 n +0000157602 00000 n +0000157723 00000 n +0000157837 00000 n +0000157951 00000 n +0000158065 00000 n +0000158185 00000 n +0000158311 00000 n +0000158416 00000 n +0000158516 00000 n +0000158703 00000 n +0000158811 00000 n +0000158922 00000 n +0000159100 00000 n +0000159212 00000 n +0000159324 00000 n +0000159524 00000 n +0000159624 00000 n +0000159725 00000 n +0000159839 00000 n +0000159953 00000 n +0000160067 00000 n +0000160181 00000 n +0000160295 00000 n +0000160421 00000 n +0000160546 00000 n +0000160674 00000 n +0000160798 00000 n +0000160925 00000 n +0000161049 00000 n +0000161175 00000 n +0000161301 00000 n +0000161425 00000 n +0000161553 00000 n +0000161681 00000 n +0000161807 00000 n +0000161931 00000 n +0000162055 00000 n +0000162178 00000 n +0000162300 00000 n +0000162414 00000 n +0000162532 00000 n +0000162646 00000 n +0000162761 00000 n +0000162881 00000 n +0000162996 00000 n +0000163110 00000 n +0000163228 00000 n +0000163342 00000 n +0000163456 00000 n +0000163576 00000 n +0000163697 00000 n +0000163801 00000 n +0000163917 00000 n +0000164105 00000 n +0000164214 00000 n +0000164329 00000 n +0000164505 00000 n +0000164617 00000 n +0000164731 00000 n +0000164933 00000 n +0000165045 00000 n +0000165157 00000 n +0000165283 00000 n +0000165410 00000 n +0000165536 00000 n +0000165662 00000 n +0000165789 00000 n +0000165913 00000 n +0000166041 00000 n +0000166168 00000 n +0000166295 00000 n +0000166411 00000 n +0000166540 00000 n +0000166664 00000 n +0000166788 00000 n +0000166912 00000 n +0000167035 00000 n +0000167157 00000 n +0000167291 00000 n +0000167409 00000 n +0000167529 00000 n +0000167649 00000 n +0000167769 00000 n +0000167889 00000 n +0000168009 00000 n +0000168127 00000 n +0000168255 00000 n +0000168390 00000 n +0000168508 00000 n +0000168628 00000 n +0000168749 00000 n +0000168871 00000 n +0000168991 00000 n +0000169111 00000 n +0000169245 00000 n +0000169349 00000 n +0000169449 00000 n +0000169635 00000 n +0000169738 00000 n +0000169843 00000 n +0000170020 00000 n +0000170134 00000 n +0000170246 00000 n +0000170447 00000 n +0000170554 00000 n +0000170660 00000 n +0000170780 00000 n +0000170900 00000 n +0000171022 00000 n +0000171148 00000 n +0000171272 00000 n +0000171398 00000 n +0000171522 00000 n +0000171648 00000 n +0000171772 00000 n +0000171896 00000 n +0000172023 00000 n +0000172148 00000 n +0000172272 00000 n +0000172401 00000 n +0000172517 00000 n +0000172632 00000 n +0000172747 00000 n +0000172867 00000 n +0000172981 00000 n +0000173095 00000 n +0000173210 00000 n +0000173331 00000 n +0000173458 00000 n +0000173562 00000 n +0000173662 00000 n +0000173848 00000 n +0000173950 00000 n +0000174053 00000 n +0000174231 00000 n +0000174344 00000 n +0000174456 00000 n +0000174658 00000 n +0000174764 00000 n +0000174871 00000 n +0000174991 00000 n +0000175111 00000 n +0000175232 00000 n +0000175353 00000 n +0000175473 00000 n +0000175594 00000 n +0000175720 00000 n +0000175845 00000 n +0000175973 00000 n +0000176097 00000 n +0000176223 00000 n +0000176347 00000 n +0000176471 00000 n +0000176599 00000 n +0000176723 00000 n +0000176851 00000 n +0000176967 00000 n +0000177084 00000 n +0000177198 00000 n +0000177316 00000 n +0000177430 00000 n +0000177544 00000 n +0000177664 00000 n +0000177778 00000 n +0000177893 00000 n +0000178011 00000 n +0000178125 00000 n +0000178241 00000 n +0000178361 00000 n +0000178487 00000 n +0000178599 00000 n +0000178703 00000 n +0000178889 00000 n +0000179002 00000 n +0000179112 00000 n +0000179297 00000 n +0000179409 00000 n +0000179519 00000 n +0000179704 00000 n +0000179804 00000 n +0000179906 00000 n +0000180090 00000 n +0000180204 00000 n +0000180303 00000 n +0000180489 00000 n +0000180601 00000 n +0000180699 00000 n +0000180885 00000 n +0000180997 00000 n +0000181095 00000 n +0000181227 00000 n +0000181363 00000 n +0000181491 00000 n +0000181607 00000 n +0000181726 00000 n +0000181856 00000 n +0000181974 00000 n +0000182104 00000 n +0000182220 00000 n +0000182336 00000 n +0000182452 00000 n +0000182578 00000 n +0000182702 00000 n +0000182829 00000 n +0000182955 00000 n +0000183075 00000 n +0000183202 00000 n +0000183322 00000 n +0000183452 00000 n +0000183566 00000 n +0000183691 00000 n +0000183809 00000 n +0000183921 00000 n +0000184047 00000 n +0000184181 00000 n +0000184309 00000 n +0000184425 00000 n +0000184562 00000 n +0000184699 00000 n +0000184827 00000 n +0000184944 00000 n +0000185063 00000 n +0000185193 00000 n +0000185323 00000 n +0000185439 00000 n +0000185555 00000 n +0000185671 00000 n +0000185798 00000 n +0000185923 00000 n +0000186049 00000 n +0000186175 00000 n +0000186295 00000 n +0000186421 00000 n +0000186541 00000 n +0000186655 00000 n +0000186779 00000 n +0000186898 00000 n +0000187010 00000 n +0000187136 00000 n +0000187272 00000 n +0000187404 00000 n +0000187540 00000 n +0000187668 00000 n +0000187787 00000 n +0000187903 00000 n +0000188019 00000 n +0000188150 00000 n +0000188280 00000 n +0000188406 00000 n +0000188522 00000 n +0000188638 00000 n +0000188766 00000 n +0000188892 00000 n +0000189012 00000 n +0000189138 00000 n +0000189259 00000 n +0000189389 00000 n +0000189503 00000 n +0000189629 00000 n +0000189770 00000 n +0000189890 00000 n +0000190025 00000 n +0000190140 00000 n +0000190278 00000 n +0000190395 00000 n +0000190513 00000 n +0000190632 00000 n +0000190748 00000 n +0000190866 00000 n +0000190992 00000 n +0000191116 00000 n +0000191232 00000 n +0000191347 00000 n +0000191465 00000 n +0000191577 00000 n +0000191695 00000 n +0000191811 00000 n +0000191927 00000 n +0000192060 00000 n +0000192186 00000 n +0000192312 00000 n +0000192432 00000 n +0000192560 00000 n +0000192688 00000 n +0000192807 00000 n +0000192923 00000 n +0000193039 00000 n +0000193170 00000 n +0000193300 00000 n +0000193427 00000 n +0000193553 00000 n +0000193675 00000 n +0000193804 00000 n +0000193932 00000 n +0000194064 00000 n +0000194180 00000 n +0000194296 00000 n +0000194426 00000 n +0000194557 00000 n +0000194683 00000 n +0000194803 00000 n +0000194931 00000 n +0000195039 00000 n +0000195145 00000 n +0000195249 00000 n +0000195435 00000 n +0000195543 00000 n +0000195645 00000 n +0000195822 00000 n +0000195935 00000 n +0000196047 00000 n +0000196248 00000 n +0000196354 00000 n +0000196460 00000 n +0000196580 00000 n +0000196701 00000 n +0000196822 00000 n +0000196942 00000 n +0000197062 00000 n +0000197189 00000 n +0000197313 00000 n +0000197440 00000 n +0000197564 00000 n +0000197688 00000 n +0000197814 00000 n +0000197938 00000 n +0000198066 00000 n +0000198194 00000 n +0000198320 00000 n +0000198446 00000 n +0000198575 00000 n +0000198699 00000 n +0000198825 00000 n +0000198949 00000 n +0000199071 00000 n +0000199194 00000 n +0000199315 00000 n +0000199435 00000 n +0000199556 00000 n +0000199676 00000 n +0000199795 00000 n +0000199913 00000 n +0000200033 00000 n +0000200153 00000 n +0000200273 00000 n +0000200393 00000 n +0000200511 00000 n +0000200637 00000 n +0000200743 00000 n +0000200858 00000 n +0000201045 00000 n +0000201151 00000 n +0000201265 00000 n +0000201442 00000 n +0000201554 00000 n +0000201666 00000 n +0000201869 00000 n +0000201976 00000 n +0000202082 00000 n +0000202202 00000 n +0000202322 00000 n +0000202442 00000 n +0000202562 00000 n +0000202682 00000 n +0000202802 00000 n +0000202923 00000 n +0000203049 00000 n +0000203174 00000 n +0000203300 00000 n +0000203424 00000 n +0000203548 00000 n +0000203674 00000 n +0000203799 00000 n +0000203927 00000 n +0000204055 00000 n +0000204185 00000 n +0000204311 00000 n +0000204438 00000 n +0000204565 00000 n +0000204691 00000 n +0000204817 00000 n +0000204933 00000 n +0000205062 00000 n +0000205186 00000 n +0000205310 00000 n +0000205435 00000 n +0000205557 00000 n +0000205680 00000 n +0000205808 00000 n +0000205938 00000 n +0000206057 00000 n +0000206180 00000 n +0000206314 00000 n +0000206432 00000 n +0000206552 00000 n +0000206673 00000 n +0000206793 00000 n +0000206913 00000 n +0000207033 00000 n +0000207151 00000 n +0000207279 00000 n +0000207413 00000 n +0000207531 00000 n +0000207651 00000 n +0000207771 00000 n +0000207891 00000 n +0000208011 00000 n +0000208131 00000 n +0000208249 00000 n +0000208377 00000 n +0000208483 00000 n +0000208583 00000 n +0000208759 00000 n +0000208869 00000 n +0000208982 00000 n +0000209182 00000 n +0000209286 00000 n +0000209391 00000 n +0000209509 00000 n +0000209628 00000 n +0000209748 00000 n +0000209867 00000 n +0000209985 00000 n +0000210111 00000 n +0000210235 00000 n +0000210362 00000 n +0000210486 00000 n +0000210611 00000 n +0000210738 00000 n +0000210854 00000 n +0000210969 00000 n +0000211089 00000 n +0000211203 00000 n +0000211317 00000 n +0000211431 00000 n +0000211551 00000 n +0000211676 00000 n +0000211782 00000 n +0000211882 00000 n +0000212068 00000 n +0000212176 00000 n +0000212288 00000 n +0000212465 00000 n +0000212577 00000 n +0000212690 00000 n +0000212891 00000 n +0000212991 00000 n +0000213091 00000 n +0000213205 00000 n +0000213320 00000 n +0000213435 00000 n +0000213549 00000 n +0000213663 00000 n +0000213777 00000 n +0000213892 00000 n +0000214019 00000 n +0000214144 00000 n +0000214270 00000 n +0000214394 00000 n +0000214521 00000 n +0000214646 00000 n +0000214771 00000 n +0000214898 00000 n +0000215022 00000 n +0000215151 00000 n +0000215279 00000 n +0000215406 00000 n +0000215530 00000 n +0000215654 00000 n +0000215777 00000 n +0000215900 00000 n +0000216014 00000 n +0000216133 00000 n +0000216248 00000 n +0000216362 00000 n +0000216483 00000 n +0000216597 00000 n +0000216711 00000 n +0000216829 00000 n +0000216943 00000 n +0000217058 00000 n +0000217180 00000 n +0000217301 00000 n +0000217407 00000 n +0000217521 00000 n +0000217708 00000 n +0000217816 00000 n +0000217930 00000 n +0000218107 00000 n +0000218221 00000 n +0000218333 00000 n +0000218534 00000 n +0000218648 00000 n +0000218760 00000 n +0000218887 00000 n +0000219013 00000 n +0000219140 00000 n +0000219266 00000 n +0000219394 00000 n +0000219520 00000 n +0000219646 00000 n +0000219770 00000 n +0000219898 00000 n +0000220024 00000 n +0000220151 00000 n +0000220267 00000 n +0000220395 00000 n +0000220519 00000 n +0000220643 00000 n +0000220767 00000 n +0000220890 00000 n +0000221013 00000 n +0000221149 00000 n +0000221267 00000 n +0000221388 00000 n +0000221509 00000 n +0000221629 00000 n +0000221749 00000 n +0000221869 00000 n +0000221987 00000 n +0000222116 00000 n +0000222250 00000 n +0000222368 00000 n +0000222488 00000 n +0000222609 00000 n +0000222729 00000 n +0000222849 00000 n +0000222970 00000 n +0000223088 00000 n +0000223221 00000 n +0000223327 00000 n +0000223427 00000 n +0000223614 00000 n +0000223716 00000 n +0000223819 00000 n +0000223998 00000 n +0000224111 00000 n +0000224223 00000 n +0000224425 00000 n +0000224531 00000 n +0000224638 00000 n +0000224758 00000 n +0000224878 00000 n +0000224998 00000 n +0000225119 00000 n +0000225239 00000 n +0000225367 00000 n +0000225491 00000 n +0000225618 00000 n +0000225742 00000 n +0000225870 00000 n +0000225994 00000 n +0000226118 00000 n +0000226245 00000 n +0000226369 00000 n +0000226493 00000 n +0000226621 00000 n +0000226737 00000 n +0000226852 00000 n +0000226966 00000 n +0000227086 00000 n +0000227200 00000 n +0000227314 00000 n +0000227428 00000 n +0000227548 00000 n +0000227674 00000 n +0000227780 00000 n +0000227880 00000 n +0000228068 00000 n +0000228170 00000 n +0000228273 00000 n +0000228451 00000 n +0000228563 00000 n +0000228675 00000 n +0000228876 00000 n +0000228983 00000 n +0000229089 00000 n +0000229210 00000 n +0000229330 00000 n +0000229451 00000 n +0000229573 00000 n +0000229693 00000 n +0000229813 00000 n +0000229933 00000 n +0000230053 00000 n +0000230180 00000 n +0000230305 00000 n +0000230431 00000 n +0000230555 00000 n +0000230681 00000 n +0000230805 00000 n +0000230929 00000 n +0000231057 00000 n +0000231182 00000 n +0000231310 00000 n +0000231427 00000 n +0000231543 00000 n +0000231657 00000 n +0000231775 00000 n +0000231889 00000 n +0000232003 00000 n +0000232123 00000 n +0000232237 00000 n +0000232351 00000 n +0000232469 00000 n +0000232583 00000 n +0000232697 00000 n +0000232817 00000 n +0000232944 00000 n +trailer +<<9ae8dee8755c804c8cbf9c63832193b4>]>> +startxref +0 +%%EOF + +5740 0 obj<>stream +n +QX G3DŽ+e7f^M )@5:+;F-g1u +_['pR∇><_\X1م4~mVp@0‰=r9 :ȎחZSG@OǠrHc,=VoMFsX"$v?qū&gFh #úhT{[(I!8JmmnS !j!ڀxL XR(tFUSȽqЛ9MQ`9@gڌ,!ϓV-fCa2 +Dϻ}/ {轮wڼ]ueT_|48sxyAqڴ5b3Z3aqGwGx(x935F '֕q;_j e( +$Kk|-ҟ lDh6&x  ?6Te2&զlP0Nɠ]},'9Mi:?\o2_oZ.LyH"'ڏPJo +{ш^mC 8ځqʊ <{a.q~ݿ\>46]'YP[sQc/`iED)ͤ~ r!o!~=B#}R驈~hBe K9mSWK_چs'a{˒3OH.9=2;GڤSc%'Gfr8*1>WCQ$˖9a"a߅\O2\sM=zUuM=.K+5q 1F<"jG1toL8jZީ#)C dW*8-{*KҮ +ȱdy\YXwX}Z5b|^Rsh9Б0;Fg0 2 :IbU +c]`%Τ.ޥ?E|bo 9:oo@UEBi9j+ Zt֦(odr&Ľ]J'њhԁXa +RtޱqZfHBys Zp\_ƥ]AY瑜dMܓ3HGtۃ+ԋa"xOtmzu+J!ڋǖSn?@l POL^mIr C$]0t_oa.~ ,pSz}Mxcl R(Q] vH`뼏p:L!MxG?ǚUkQ&z2sdk>=3:?l\X +R;w:evP2`jV;զ!20UH3':b8UcΘPq5%7)Bi5gyXG=P-BN2pryV~Z 5bUI}rHn3ahՀ~T#1[ageAȖv+Ƭ_K^ڒYM /Q{3%KmI C"="15:۴kL%{nAθƸ0x J&9=( +N ahҬC6jD <{,vQ3z/Z#72&tBjE;> =-I:*$"rSƯw|U 3Wҽ> tߩ%n|.}:%r!~N +ZSlκ Y|1\ܡѤPq";^,>6-315UYԙ8vCMvB6OO=Bf#n?>*h/=xRin!Xri,8~akw]<$u!}u%sɮy{RE A͍XUyR"t"3.H^-*J[\?45lBx)v-a^, h90fh>Zp(&LcY|9\ +Vy_9g"ܕIU iJBD˖G}2icRbW.(ObmMD{Ca~-HCܤk-7E5*.^6A+#<ӼJ>9|Ru=Fʩ` u{,D{L^ M]~'Y7^I1Uc&V窻3")>?#c{N/T(lhAlfV!vHUˮhNm`^Fpx{=ao6͚X {u4_򰞞>k&MG#lFw /=_sА?A=_1j=;qdY%T"*^윓HX(l߱ZSLZZ&% +z;e*Q2[~iX,Dk߶vq;?㉇mɿ/jP\ǐ #-B\٬f2bwwokȋΌ1k +Y^9R2pXa3Mirnj'K)'o>NwRVEf~^MCnL qu7pc <`4jnѲw#^de.*N/|6ӴBg`k*~PF M6iXV92=x0V'A)·9)[n}[n[,~0ۃPf>観)|*t e Cm ;)cj vQ4tZ?DϡT.|ڮjV{%N[ljy(P@@],T9o!_fPjMtoN;g^0,giͅ;=!Z&Lu*(>FQS4mEx9WNRZz&%B Y@#"efHPm=0 FJԯ=cOxZd]Ia~x.8ĒRlMkXѽhx^?Ų0>[ΨHqjU{VU>8U̩Uuhb޵Y9cmR2^MBSKЂϳwp6v˥ Z Z*<7cBkk hajv%~G$/n%dw; ijM%R۫Sz.}+?, Gϭ$BRNP~›M"GpUCL-)kdӌ"bIڕV/뇇}.bR,V !~4c%ёԤC"@&g.ƩS'֏^#99+"8nب)REΪ_;P0c%jHI1>հP?k]TU ڲz)jaUN.ň\a*2ۖ(}QD݌m4'Rgϟ,Z%4;q|zj&UРa4 +R>nHc+Jr l\B8$@f2n +}j:/-ǥONwNYKr1"(| +Kcf?7NɗmU.%뇶}Vh_VbxEl-!ʔ<%=~Gu) ͈&f%*t~0WIQFs (2HdlCͳQ S; 7БZgr&#by;3sm&~bP>ygm\ZA7bE'.> endobj 5739 0 obj<> endobj 5741 0 obj<> endobj 5742 0 obj<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5743 0 obj<> endobj 5744 0 obj<> endobj 5745 0 obj<> endobj 5746 0 obj<>stream +F` cjtyslQΌiu_mIN,wC`2$mQYKcc] yg|JI]q$S(utoOxla.U[-S{/Ndr؆l!b֧> endobj 5748 0 obj<> endobj 5749 0 obj<> endobj 5750 0 obj<> endobj 5751 0 obj<>stream +$5C%@Dzz2ۚex.Cd@#٘ ([y ;VK#POxPV CH" L=D7so+*>!u.4GrS-R^UC YmM-FHP]ғ:Ft'l/QTE9>DO w[EOqs{}{.X᝭3Kj=!ބ~Ⱦmzw+6o.yl0̴zHENzB&–Y]z$ZIo%Y0 +泃 ;* P%rUxmLxE)+<.]$L䭔[:Y'ԞY."+InpIf [>KաZ3#aRb n,vYH=ޭ)4@/Pjcrf#&Yi2'?In߉ܹn$<鑕'Lh5 h .Y2}|ӭClg< a Y,xOh70w)dE|[ :Z~Zlkڨ֥xzE@~IXS+1jW S\|(0թ? FGЮyUݤ&-.#wl,m#w6N6Ni2 яB-PXDwdf|ch_ G:-~>еO3Ei/O﫰}fMe!lZ?1fz96n#u$1~g9jqqe:Ugӿ@S;1Qu7[n Sfӄn˝ f}i˜ɾ{:"V+x.Ǧ@)ծ$H{ jP佦Z$XѺ* |Ul){(O$*[FĖݴ9E .KTʯ-\k@/OD衢c&^!]N.2S>_ Ļtf{O lquܗ:MAAf{ߠ\ ee C(x1qL!Ɨ*CZ%477d"?AkXg[(?d+?1f#PiA+zzl #'[MU9^Q\ޒukSĕGP TSӆm ڻ6o;㩪h*e$x*hEB6j`"MH7F+^#qy"HWLHț.Mac;홺.J8S293!;Ycj;{]YPn4G>n}g{[f>t(n2Z 3a&d +vܨz (YUvxȸ7䒾f<ISu +Cr*%T=e1ȧ's\4kЖ 'FoŔ M&"X>MMiISQA07Y"HxbYЧPv3JJ,wm 8ȍ?3O UDZIx{x ǰMQa=U=,暬ʢaH"2,(UkueÃZRRJJ0A +|7(.<}$?-!M778C^µaYT`X lJpB2֠DIҀ􉈯ݵuqIC[HKr0u߰eNmFunve/B|lDɓ ng Fl@g>cx^HAKBNM{Ub.嗎2Jr\bB,@tWNׇjLל9*VJ)zny;_B$_!p +QM&aB i_8WU ľxѸ,{N PtjJn󉡭DÒ 4l{}лu߹v$eut,CK>:q_?H僩9+Q-h$=PPr/N߱yÙGUAɧC(Z;9~V?jſfd_" +8X3[?G[Uj|…m0Ofut/q w/L7#Gé#5g~b#8I/uӔ1.D"ZYYDM4t]|˄DM +߶$Ws/JfT\S<tΒnajl0~[?Nz_?6b࡫lYyU=4Cfe:ْ+k/UswY\}} +z6ψŞoqSPhplU[֢B IbXӱ?, ap<gKXXJw~eDiJ{2X; m +s)ܐt@:b;>R{[u V廒JaIQ3//^*x¤嫏ЬUCH+l4rWpTPMρ5D`cIOR-oiҊ^e .<gI!;xZ]9 E"j &O9vs!ۘĀ$hp2cn$ я<>eJ!@),$WܣqG3 m ~\t#GJsbg'k2CY[Do~Z#n >y\nuǶ9Yd4Y>뗌7K_uV[i%'Fm\ +@ Ϸvd€/zèMY^ ƻ)]%v:޵ /8%b Qgh(KR~[XH֒.d}mtDa7vJt4:~7,bf Bۗ>p 񞤅69'.='rnf6n:DtD3{p<},HHXj ͯtChF +a/p~f9bIMdWqőX9y&@oi7y~m2ە*6&B3aU?(YGy?ie.t'UOpK7<<3Ѝl"Q\e`@؁?][9$X#{1BSѦxf K?-"!m0N.DlVfе͹5:FC5d.JApB0{̞J(p-/KCW"M"d?Tpgqy5?(Nn4B^|`3{ >Gg5hldpSX=)68q +t6'Ssؑ( +0h txnc  p|  1Q1gz,,)GlD|Gx%QQxmJ=6giϓIi)oHi.DDG'f$oXjnXw>ψcgU*kL~?-]QYj_϶< }jbɹ]ktZڐIl!+GO>#[-\nEznALJq t !:a|麎l.dl-3dٳ;5DH/BVFe;8:T2'C6[Đ(ل,ǰv8KU2` /a`"V"/1ke޾ojƮ׻̬JzD@`O/?ɷ7(/|*[5H_z*T|uڬzk#\q'g1' 2B9_X^K@6Aia}RMv!sqQý̈vOruʰ .e +'}HWx,/#PϫT%?,~x"鵊`s%ۖݲwO.^p$dC08i3rVV}LziӮ_b2, VTM򻂹h;3#zm16w~n{bfjX-ga"Qs!GY{eaFDN7J#]>Y,3~_&"@_%(֟cXɽ*@R(k 뛩J6YNgVsýQR+HlL!ntdfii#h]5dOsCC.Wkl_C+z50z<1"3{è#Fƫͭ/D6S@gA#/"ć>G_ޥGBȟ_묟"jp~!Kuv9&V -wasmf pe;\HDXtqY -צk*iD]3n&"Oׂ3? 23p \ӆx=Uω[;&iv7#o5b#3ooWfRa[@k %7 J7m'$].GyOEyP 0T\rn.G׹3 \a},[R`, i\i3jb녣&q;=$I&c yr5YY _拋8l{gG.V/QK<0}nɵM:2ㄣ T}PE^_;Qqęe|'>P缪DJ՚%}kNH9yۀ4vX[{;N|ہbS_bJeגfˀzy wNz--boo6T|@ |mqk3^&˩|>!mQ A[͚0':ɫt`q/4(\l@k72J8&y֭U KN S6"H}UF9F8; ++UC\=pV%#rDD/6Y-] /&ģ[A7Î<К¯.EH)0%`S u\oXs݈䍇#F-aWšx)Rcך#OV)eFP7Xդf|" Rw҉{NF+\C_GY#P*3IoGb`٦uI +=xC水 +Uso̤e8(7XTwcw‹Y\Ruwk41ĴFI3(D90u +PK foۑp+ҽ"`?4H3W-Mnp^N{X +o%jlk>rcO5Oòm>CKs/g{dEGK+eP Romz*Er5q6B*4?Ovٓw{F,=VX$eVnIX]кRlZcrEdQ07":S5В/:}m6^fgoOME jI(O ߆N=%{>r4ja ~#!`dOŋ :Lz㵌!:UP1:L@GN ’^ЙFY~xLBRKIBDzu3A$C8?$KS)iQE 1Ѫ+v.+݉Þ8L7@/#yVߚ`Hm|7`W6DN3+ܠ U6;W^A]a8*Q;":D`Z_+PH%qrИ,3[,=wlCՐ+mmQS_S|epSM]LrQW,#-g䬢B6#€l}kyiXQeau"N`:{'Znced]>ڿ%`h='/9%Kr.|:.3,eou_t0D'2~ӓK.gpןC|)\mz(J1VMz Ms1\, +k{Fؼ9l2Ҹ_oA;)lI!+ ުFY3&wt\\?m=JP$ 1;԰m`Yl~B CbIЫWs'3?igaz +2LϢ }mmAmF꜈뷏*Y̨dG X >c5^Q *v'ǓLʫ2!t}iQC'S(L |26(;6+jN䚔Gr cbndԸ>1Lӛlf5PWiAo=u&-cU'ޕ.Z^Hl}5֨D WWj[J鵉5Ɍ@v 02t->.{}1dƓNj%{Vf9X }}!A\} "XZU 6cպ\(Iw}=;Ti6Ivʔ9.:<^4e=4NdWz?QF^;1 Dv+Ȇ#+ Z?5N@6pw/w:ZәCEmƶlw>'%@Y̭<\Ǝ&e*/~1Kita>Z%G7w f!n%c#FҬRQ= )L{w[/hFa:äoVIʺu Hj,/\n*U^+;u@#G >R{(g%W.։EÝH-^ 5 `3˗ѨT[2+<(ACPZ6j %o@#z_+\1;3pep:R"$8EۺJ. +’u;uE%?&07607:AEDRh}JogUS~-S_I@Q,@?̡2d 0Vs*@I|?k hept`J,P9)p4໌T%"zp>ƭS'D$A%iZvP=9+ظ.EVl1ԚCT9_SX:;NT*qOüd סEcP,YLE.N?[ c蘖 .0YƤf[IVy# @</*lMQQrsXH~~n4af +$/q ЋbV5)QGߝ5Mc0}i2"/?Ք\= <9nC0\?2(C`g9Ή9N5ȁ1Cn ɢ`Zc4br~dL8w[(x 8Hzjӑh4ͬ=4P(p.wY4n7J"c@p[YĄAtK_-zP[G_q=.l n[Jv!ډD]/R|Y7؆ԉ&]*,`t#/y$,9aco8jr1oBrO`n#sY;ѥ봕b=9^}z$(˽W{N7 }'"Ï fR(A)RfӍB/F^ҜQi-|'Ƅ)y`q,o@x2,E%j +*2w.:2($I甽'ȪjtmC4`N{J +.X{3 cbN)H9ǏȻޢjݛK_̷!  rQԛC^}U4MBr/f\;T"FF]')H;j7@Cv1PSN%:y:^ !olLQ1w5օ_)_zPꋋ֜,3O V= a`0A}נg:R%Ɵ S~-6ȼzZ"8}gw?>$4P[@e#0'9f%8kqsXՉK_,͈wu(zSlg|/SЯݔ{'/Ťiye)_%"Gki{J)꜅Ӻi*+LCrIvAu8x]z@:McEYxUi쐰jHy#1_q;ނ -8n @Hϲ;M^ +ŤS7a>:q8K )Z<j +?)0F$I(eG{@pJF͘]W&Qs(OBgߏ& )ڲ٫G䑑(sn4;uË-`-7p.'V=s qf3wi)G%@,hK $m#*N\H7>g4|>/:\ 4? K:~'H%a<(n Y.`Z m^^=^?V!+J=RE4& +&L:OBr7$:sfPppD$@P}Ց|}Ay~xE7Bk 韀l`;uB|O7'_L{v&H:#o^2@7FeMu+;Q0_2ϿI0ccJDʏ8~' Ӓsv J") ]Ki iF(љ4Hw'-q(* X yTyvp:_"X#.'lgAPX}Gxd"#<( WG}HGZ~hTz.ɇ[kSq+#G?zu4S-* ]ֽn^'Ls7B>Q !I]|yX/R:}_N0 s:)?>4,/6ݰ?'qȉnivT+T +Z7!62DLg,PfsNZ$FP_N- 4 G]yx~ 0 xsΕn )r퐻,d'_!Peq*¼ x4[[X*!DQA|w:*+ҩ9Ie9 iҘՈU~CCO[.X \ًQk붊)8e%cp$ql+GtoFkc$Ez#7]c^;߯y|-PGjw "ɿ 1ku,ا-W}g IՁM/'4|IyQ>#SvѐJr^@8 ߢiwKŐ{g*n>AG:˹d g;CW!J?)MS~^N&78*M[1y ĺgwJĠ5Lgfb>STe DtVy, 7C;P:QKp)!_4<Q %[e/Jo8M8x\ +.uM&AJ&'"Wd *3&=z UNٲ?+p# ъ͂gdR'һ`긗% |W6TpD,avә!迯"75u2LMOM<#1Qw:AN L+bu$y-噻\хԾTɌP>myV XPN.d{.s'@aL"ЗnO^grYRB Z!+ݸTC~ :" 252:( Sok'#Mɸ5(Z0e 7I گ‡.)σ ]F-z2:O*"W (-ݦU[VeEѽWW5Hv'woSTE@!o- +3k&bH*S8g2uҺk^jmq|hՏq N璻ˮܫd@~'N~a 3s8}Z#\t[lz4 6^K< B'x 2=_G֬ƞ[%P5cv*uwB2 ˊ%I1/>*hC>77 dm} +`;Iha +VBJ դrrƳtprx$eÊ8A2.iuM7o0>gr?ruK'yu;)Y'z?"6咛a#X0$\;>GG{٢Yq7Cna1G/;释vд`9( gC% cV3P:"ݱ2 fim)MMw2t:I4l{6:T.Lo3?//8rf 192eRzuI"U#7cx+KQ$k +< 9ֹqd ڥU**n7."Zyw=w#Av+Q6'kxօdRj` D  :y"}?.y!v^ yu;˖k{ \߭rV-. 0*FL>MYYx[;l^81XAO,c[ż2.`eo[h,_)[d6Cm^n`wY#v^ +^'n嗶xzf)tcM#c/چ&[ +UZR +y dG:mx7X%WIbDjރ+'bJ=?iw.˧d|#~MNZri-EmP ]UH\>3 ^7FO[_k|C`SP6o:oK۲nUTfKPV97RxcH([5Z1oX#JOOІP|V r{#B +<0VLtunlwsaJ2c|iN raZup7^p;TI(L6B +:.e$о\_|Hw50nKro0qRWЀy6VGy>#@vVgBi6l,c :\\sܿ/4C XZջ|Ȓ`Z6k+rzѾ6q/ˈ(W?Ȟ3P8z_ޫf]~*36U͟xPW@~c^^j)re*F"`thDjMCܦ2aiY3nazBIz;HtehOa,+(-h_ă}Sk"8N>&(<()2ɗ]d!bnzn߲7qPbmo=N(wOpebhdaZPHN @FZݮLʄCGzOc,e͛Hu +Bɠp0!*ݞ0a7dx3ȸc!z72@ޯ: tGM|A^9P" L oسt!۪\ʱ-?ߖIe8epM_&ϴϒ ,tKGF(0vmUfbL~-.j #2s{T5=nJ+wG_j @+^u$r'FU۩6^v8{2:W vAd좶waע dbdQ6uwYhZ:ZM-'^Zi +Oz;bc.^봽dӣޝ^l +(O)đ1\S 6YMLњvL{1˦7C[>po@W'؄Y o6mdpC)u e5 $hhG9DQ U;J<JWo؃Rf*1!.qW$?ka>F0!Ak[{vEb+޵酪w47>Gabdz3ev)DgϿF[4;Ok~Sbѽ7WwgTRaہg )M$bHޟ +2Y-]D4 K% +g +]u0R![ndDMD|ys=']*JG;":5Ŏ,F\9ubBt!bui?WbIO\r$@9ұcMLq6/ʭ-+ٗ.~ ȁn`#$|66~V]mܿJX(x?WyY9ÊAmQv*9YJC7#]IR@m~>O)Kocf#(ѥ") uvher5$+J0Cʲf3NFo]ɴvP9[m*|z@N`˒yIP>oAHzmniʑg1|Za+ />}D;no\O!&I+s&ISJ䑄T4 y0N3UvV~bCTS0Mi󰛺˕r.\et&6hxKdvO -.r0`aPl[MfJVMئ#47OTa8ЪJϹ,yAKK+lD!7_NՏa:*D/$Qе4(C[2"&=i,M,fGo0c2 ֔B* F&PARe;)̷M2=7vɘT?|2 }<Ey 0% +Pi˾^u-}8wD1!dnO p\_ժIزLbihu#Qv.M +=lDhEjяm8`$?hUa<&ǜxr[:MNBS Wdq YQ! +c ȟIʌ8k$ +ҿ7&LgȗI +.!K'E2\qfgU+ik;"|8v:l޹ۼ]{ڔC\Cd,((C輬cKPnIFE҇(lʚMɧmRd] M$RzmtZHĄ8wTt5e˿P<84h#=1cH1Kp`0>cX|9iewayŀV?md%Fm ƣasӐ(YAS8C&]-24;cO&BaL^fn|ݕ]rHk +B r!ugir :Ԯ96.+iba.>< #ӗĸ5JfG6nj) ^e' 2.Wv& +)ŸV)y_B*WCK6 Bavr|[[l/l$&Rj35k-lUl=6CgZdQo˴)/dمF#&|bBf󞘃'-i_/9ΨZiYx*l\z"|{W 1N5[6s]_ "ۓtڣuZ\L.iUS`;)h{ +3S= vJRA#*:cM I + +1D$ia>YY)mtI2>nCWȦkYb:V|EΣ _NB&G˾{%M&IlS` b$T +PN%Q=Dzz&*lvV$"M.CRVVO O* ~yS̤WPQH⺦{X 87UX(< ͱd5!ARRlu >IFpxALp>C^ Y~G O9*כ!5隔;jne wiDoRdJwخvN҉|^iHэ"3I1+u t03_d" ˸ p'R!rnƷEab&Lg<.X+ÉD5$j9ka6n7+1H6yr;Γc}+x~(p0 B]]8aMFa^bC(nʙk Ӽ}{J7ޫ橵+$m^r ~ +;&F\?]<|Z9Ֆe40+DjNMwKUGQ)(LB)De;+;NqK|V4ݓ9sK۱ZS\zcd?Njk?6އr]aefq9 "+fP/*,$VWĮCOɻ  ji +b(CC +v_ Hk?u!&‡Ǫ^ΨβS1^Keo#; p^.:l_GCZ} [ԛ~)Wo*wU鲦VLaX `wt4+#O_v~;cv80m;9zBVτHTqXvl>ж{}|mtI5DL'j[ݭ4Xaq@7O#vʽx!uGKW$(Y@s_n_|c"ѕ+3676jYdq, 4l&}'6jS; 翜}tYE&Zw*`⨥Kҗ_!f46:C!ގʕs(P ,vtC;8L08U +?Ŕ`Wa2P 6x`f].ʴ"l"jt P@\L'`dR:Fj!8Sgs:mrkfb?m6ĊR1R0e!!{䅿hh|Bٹ=:HH2xMyF_,1pAa*xe.JI  rDreZ,;;A 턺t -Io?x톢犧,aЉakpt,mjQ]Wњ;O&l-F96/ 쥶 Tjb?PO")Ɇ Y]=/W**{yO_"qV|#lDWլG9 Ⱥг) +u: +@$,F“I8|Mȯ2/gHG4n., Nݠ -RP!$N6B>eeɏSo;5]˪\DQj7Yq1]bmɦLJPM ڀd]A|6Ѣ8,:R6Õ ɯ3|\21.3>ڝIxt޽_Eƀ<\ q~yt0`/~КC.(bs~gr/oj.@ڇDd[#f8gh%.xe],ݜ…AVnhwثNq)f'qne WA5[rQ}`FaJT6Zq,+9^neoGSّFYliw']Os#~U[VlP[eP+1 @C ʗU"|e!s<dA`sɣ7I|yN6;ȍsn>)kInv=E(̥JeEg!.Q6K=U*evoީ;7ïzԘ$$ũ8FxA~' 'qv;&֣jFl/'~]WSox+986Ρ#S:5Ȭ W_G+%M)p=CXI5ђi}wZ# );rvbU =+r1Lb洬{jS ڀ.q nl݇ +idQK A 6m-ݚrX-l:e۬ܰ%ބo;6O{*&~Ö"Ih &5v"6coPFt5qĽh| g|mǺmN22DAAշOvK G1ζ59x%ҝHHzF,dmĴ2Ɗq11^OgڨaɓyTɓ.I9ٺueG3r^c[멭E0x Tnqh«I +g-Ĕb% ycC6Hv TRą\'[2A8ho4%;,x g +ݰuc훐t[ڄv3R#⼕ҥ<652 eVŧY!k:6A"t[MN~0?ocͣ)+x8V![Ϟː'݅>PO)kȮ,Aّb= W~]2(kbĄr'\2 Z˘$$2>j^e+}="$)IttOa"eLMa,:C4ґ"ΔU`8䧾B>Jmn9*oT*mjsyou' 7"OfC9IK6ӓ H7}0Y݁q!k25M-c20CV +py9K2#>eMJ~b.'Wr(M ?ݳIdMbcݼcH,ܺ{`SFg5Lyy.$Ө@PCuiʱG12rz,;nB!ތQǹۮ26`W- T}R<\/=)ucz)R|ڊMϽBw "۟ ++" 2V﯒|C*?cx%@%jgnGH`!kӶYftk[eOt7UM(iK,1+L?*EK}ϩz eo/I1ߨfDln1GZu=anw'GjSh]Bo3߶]!.1U;$k'†VͷEQz&W}!nכZqXjV'/X~z_# V +ܗFރ>y{ޡo柑KT ?WT8h߄aY΋BGtE ==-ގ9#WYĠ c5?c׹')rw`fQfFL9k@ˀB 8Db,xݡ0l{[:ܺbDf+o,Ax-ꀊ%ɗ:~tzIvjT sZ(%;i8φƶԻ J׫tFM=pqK|n!#4`"Uw_U'3!;c(Ի|9Ⱥ5w ?ͭS˘c-pr[hUIKN+-A07TAR&IiҼÇ]ࠉE^%:ly?ܱS4 J #@CZ]Li/<|t\RaMZOTq1Y]eWǿB'1h5|1Q/ jnܼvGG7ҁq:I3c?Vʻ/֕@4WbϓL%f%La )$ArDxۃG<_<&QF_6pUSB?7.S^=, +L\,2Y|_#+& +;qa9oV_1N- +5LbQ'pNJ EjSC7@h4"lp.qT惝x +DkGMkrx5V0LLIrJr&NLu傏Lp>kagDr"axhqኡBgAΜ;a&Qʘ7g0abȶ uflNֻCuJc:?[|G`EkpU)Yn[id4F}s'+B!Wl.mȝڏt=v#u$ +;ɨHs1ݗF$q[~*&>~@ŐAV~:# >vhj$֍*Уȫs467k/SOv#B`+reS#<"EM8~6%Akհ@]1^7e]KH;]&Iz\N4(f(DWfЅ](G?k2D0t oKэ|yRKy^Z̀%mlljڝ +ݧ%Ŝ (uы-6EO<*ȼΈPgTh>ɂcnX[ox4N}FW`colaam"j傢ov Kig`34'e +E]F!k̋P5f?.? ]`^nNfƔp5J$|iyln|16H  [~} q؅`gfL3Ȍ{HUg }!M~I1V%F^~ΩpzPK@{ڶKB`bβ'* +xs1|EiPь44FpHj]!bV޾ +]e|6Lb†~AD`*飯E%u 1~İ}?w6Ta%z<tWu^giqMg4]C8ɠ 4nW(K˝ 5P_էUA(]nBSB9 EWfG7Dݛ7A#=9͡,mT2So7*񉚞 %7U)V p/ED]y1d|VEu}lHo#s-wDi4j>3Q(Hעdu=/*_]i !X3R5e]WTtۆ@^P쵳O=+wJv 3~̌@;H,obtxJ%$=WiC?;{%颐Z!,䞟f=er*#.EWDmlҶnh 0υpfolA~ +OHTL9Hs3fp8˪D߂tPY2颈ş֞%Oڅ +endstream endobj 5752 0 obj<>stream +%sX,J1GSk9I%Vv%}ʚځ9ۧψ] NOVRyImg~ +;//c'K`Q:j {)~>TXnA7X4:ZUmjV|7~ɫJVh޲;h!) 6Y 'o^ Eg'J.~B;VkcZu`k+s ʰDΎRRϮ7NKgz۳,qb-[TG{@2U{Ns_HosřZc ߵ6d(5szB+[-{$rpV?Hu)KeK(;gpeFn75!SQ=u7_ʢs Ԏ(M\G[8)6' 1VFJsEϽɯOhKkU2Ջ۽kTs< |;| Cc ̝pDSb)3: mi7AƐ +M&'n-__bwnIPPϚO㳥;_$mP@(`8!э(Q66Q4AkY,}SDL(g45X'ǰ +Q[brX8sH/J)+z?3J@/=K&zgg 1|O >^N|z4 +e )tT*]M;ǤZr꜀xlAs1|+HMʌşR0m.>lrH@ ^F>* 2 Ok *' )'lOa~cuTF(laGմ/^u&B[U1D, sGI0rx| + uĵkaٗ!OIvK;OF .+sPjYw$Q{߀Ш,4f'~a^GJXF^]T(6-m;*_ '+Wn0ߖLn.PLlN<.KƐțj\r+?DY95LsPf 6`lGtNzqe/݀vť>.6Q? +[q:#&ﴫ#p `؋"UGfDN5tdz(ĐW͑_^ 846:u,(?>DYk -oj *ho'8snmaH'?EM(6=ej& z3Ck:^sۋ4߂@ %U9S#hW5 +8j0x^T1F|< Xs]*!]99eXmz.ҿsq $xğ?AimTI7;w7'/'=By1i0[_C`rn͇ɳ i`$!; 2;Was-dhpxi䃖L|mWu! nXܐϋ#fh޿+wRH}ƍNY_&[Оm9QqoʲbzLS_׷롴T& uLGsY(1/`ED(VR7h[Fw T&b" X'rJssM)̒W0}?(4kI%jz?psD+}}wY-)Ԑ%"vU NSzg9> r` +J9^{nqӜ0rq erO:~wa7kc8~J3E堦HlB 0dͫ&q_XcϩӪaX AHEֹ=Ϛ?/Ņ&JEhݤUWF.,IQI7] }\3ɿШ~=w~VZbOm镴W! Ulo0H8ez 4nH B.?$X*/T/\_Q +r8t\.lרoOYR]!{Ȃػ]G$3i(WVO?J7ׂq.F¾02F Al=ѐ!݋Ux59;'"ژEQ|Nd&~4(D G]up)!_v(u|6dgˉYKǐc^w[{=)ݴST3pGoа 9ONr,M_U^)VGK;t^@8e>!)mϵC6WWs#0$ؐԋ}R#r W .p|ʠkH"X ­,KA6d𬬘GDzYbN{O:H}備aW 6롂9AJR NL- ?.٦Hφ:z"[­L)^5x Gm9mtD`Sdgs嶡c*'tJ vfxUy7Wn9^^|,=H?;FڌTY,M\5^Y[=bTK G +`-\Q=3N^ddH[U34EsoqScV*#b{)B@^SOxyPZdNT ߨ.8K;q4gnpp#E]¸Q^7yK,!ztY(%so; +Olլ~@{&H]i{ԣ+\{ȅgRL8{twMe* _jdp WqܕzW|D8$\׹\3m9ܲض~тӫhV$^gq%+I)tN7Ś+<.G;7kⴇ1ɖBOlXr,63Q6Ƨ)лtlv*жJ1!O T P?}I/a6̠#:^O +&qz?&آ"R4\L{с;h-2o;uҲƇSrYզAN#Sx]0*2Oe%Bؗ`>PFC٩~m@ +GrC0g *jL*z+̤: QD*V\ ']8i9VHIU-L!TJ[lԯn|<(Q +qK2ץ _/*|۫ˤu#<-s;''$~Fbi,`Skj9=P,B^x$F(.$aHNJm̍l@gU?n +q`c/Ȉt2jb=W`3,Dt23>l?`̈́I5T@Kߥh dgK.`37 wn Ds؂40s<-42&O!poS]xfBɨfDq*jWon`ab] `N cKBV؉rc[gCnvy,ҠAKFdU(` 67v_`pţ*F33: bA<^W gkw* χ]l`dTۥ+ɤHrt[_U:δjƄ!8`yvRWŎ)WAl26wSx$"QBSHʖ-,s+-OrRDZYG&U2VInIiQ!+d::@J[WWu Avy!wy.6+cSZ9{ѰQUM˓\ +WGh8}n 䕊`xZa;B+W̌19,Cd-Xp[۵"G2Jg +߆Ҵ9A%n+;*o~>B3*$A :\kp)U7Nqm$eكan󘭣}ˊrN2֡ g +ƅ&{|wgw_WZӱ;pH>dEm|ORy񙄠NjX&\ ÐN1)boOC(Xjq1VBA1=ÄƦ@ց,5S> xyJ["LIƁEhˌup"-k v\%ǰ]KX,P(Bpz<Kzxw{I tIEI+{ B6XG9-z~ajU23mtb!ED/e(h)OQ +' ]UNN"v̷8lZbS|PWg=~Xu񗅈Yя];aX0UjǨ$G'd- hm&RTy'_LOC?rTr,XDCX2X`ak5ctT4D+PeE^g"G8P=?$u֘W +ny5d<1ˮeZٲǚOD)p0/x+fdksޙ:I/49t8h㨞H?`x:+(}8Of1FvP%Kp_bKDZ1*A B/m+4ynj #:j +C  2_D/G9 +?أ W*%v^r.$U|a;\ӇA/ayM %~;ְTxO`(ڗ]H@&=裝֠ M^Xg{'dx1G㤭ʗā3ya² ,חKicv/aga- .~RMge'uQRJcqwCB $\TU#icQF@]cY>ŕӞok)Mf`8#:NƂ* VB;%;fOߚ=! {\BhB΃Bwr5G'$xFOQFZ qG@O"{ݯSxίgfUU5|zDV_LXNTs 2eǃJȕ.zx|2p3Rc)gޯ6>. j]X_*'e`c1Y@`|A0`0Z(%U%L 2lډ EP)g5nIK5%?FgHLx2~b/pܚlO{%@?87'%g!f[o /O>k[o*CTix(4X^qO%j%D]lw# O 3^H-ݹ{'`翲`3DYQɋ$ֳJ~Sd1'X ]-1ǜI8qd#(}R`%nKRgeZ2# &%:?f +jmjv$'cG;Ѫ +4rKâ +n.Ɣ0{TjVn`-~3iG#ˌp؎54v;3!&!c+ ~;J{G (oԓr +[_H)aKa#f +_lP{ӴR-۞=$SU 8eg;RHv<"pß>T b|-YF25 L x۞- }%ԒBBęV?  % pwbN_*/) +$~Hhon_ӯ?E'_dh7{uk[l|4! j:VQiC_b3ĚՔq8u(o|F;ےtli`!f>iot{q +yBLvt.jK񮬦@*Q +IdOCi*A[MF#MHO'ZGKtp;zEAC>ka?Gnv[uVGn표hG!1&WuX9NYy:7^Q[ p)xpdN杁SaO YQEMeG\r/wYr]>7&C7k-^Q|@y?IouZDH؍L>t|jjeL06A +@RVLVkV}J4Å^F(JAi@l7!L*p{ AV+Mv"8&ʲRL]d|`e!`cd?%IQBw># SΦ8nqBX;dYMWUZJaP'K= +Tm(8Ε +$QS^WϠ\9]7TN މ>Q߆e+$|8:޵LuoKJp!nPt~*ؤ)%% ^^6l17G='Z8=FLE tZu2Qi_N5$S(dFߧ_,34@#irh`ѓo'S}K9{ 46ƀpmG ŧfE>9^B>8#s:4%iÐhqS\1np9 +[ޑ/>33QfPwtlj{duv8I)(yM +c Bp?eA>LCm87ZPťƴs4L_p\jWc;KufgQ$BsSR6hhx=&!mqӥ b1PpTP+:dw;BmvL'h9[\^}>КqS`% bS֬I`'.B] +F- +p*UsP.Y6zBJXƳn2}^L=A3UXh SWm|o]hA>k"p*(kd^ѢWS 37 +~%v~/5 F}ٟ_qhVW̛^۬tC pEj,L|GvO/kĒTf![ѴT7rا3+9,ãL"v˯c +iwt+%bqf۳j'dX+4#E녤S+YU:HzKժКӊueͶ- ?C9[cWF:w"<[Y f`2-GubMFk I[<:f'ψ9Su|wFO œ >ɪIҵ"5gAQw #Ɍ=OJjF@{ML ߞ-S"mw=['?7|.ox2&E(Ȕ3\n09J"^d$QQ xi\j"?\)P~S(@ҝdWgψU>$¥@^MǶw7"]'FV1eExEV \-$sB`]̗saLqxĢCd=u0{^~?a)A ~eѶ5Z["3O +w5b Bl@kЋ/Au~V? nFᶲRioR6u}iX(_jݕǺ6gfBLׇPP#~p?㤛.S%|y#a,8toBl{%98T^VJ\7CFyWE/~$/tBS5jUؗ&>(j,WʅEs +|h릲oWuw!\*OKo ܗe ƫCJ:.sRR|8Wt̶dX+[w0E!`L-bd=~.g!ꫡBE>|*L'k_W@OPocTO&R{|T +ya^T{?_?&e:rG1n!_ !+&%;;R:Ac-K t ov" ] 次:@lo(W/tt9  IFl:2&#"w?B_@m0 + O;JcC]UàW{ۧ.Lߑ$}?oԌp.7o?t#5܋8Ĝ&- 9ZdLF +2?E d ojm=rm]}VV1'0f#R8W{8n ]/!f:%x̮cW_0xҲ] ٲ֤gê& :_>ER*4I\fqPL % +?k" +DJ8 Jr:%J'so`ɾ1=7(D=g?2C~IYf4"NV`i؃@m=zf[dyo(CN>Nl8eT%δ=p%DUDR[l87w.D0bE5T?՗SvD/gB +,z|7ҝvˏӳ;bx3K53- +`+ei*3"E>"0U 22T-W1?Ţ2j&>I͕2am="}TCZNA $1y~4IkxMɱ&8ihd~[2EIR5gXM/E"^QPKBk ZgEwX'6rV.D. +Gd@,IN 7N?9Ot>.` _*4$GYj:\X臘Wloy.O?Yԩ5_yi~r`ק}B<*"Xk ~:={uOYD*NO:>/?jC}Pˬx|Φ>W n|ҹu&ՙ;BGVDP<Pӓ4u5u~¨VO+̟/BcDuZtvk#r)P-y֗cܰV/F6m>-р(U1l{keE7)_Sۊ.y;L90?4)nˌrV +d)6NߏR^|eQ{UC>`: jDG X(&g +WjgſzĨyA8.glt6Ai6 +ACǕ&i|1'4(l살Z$To i`8ìn ZIÉ qr8bO="$-Z צ)|*H;o毫y3:ղW.\C/mxV4#3ynrIfOla|Wz,mBpDG150܊m6ur!.$ +•\f@yqJ$縓PyßjL:8\]33O5eҼXAos?̾t'oJqebh<-j|0URm '; ^hÍ8&6 lC( mJFC}1F] J͈ƱrL7sec*l|UM&)ɠ,YjiѰ?FpڟUOV=FAe$;̈́l2e\qXxn}g!˅53#k̷nBpV`|4ꋉի*j`fԥW}7xAxlɥÄ7xWS9FzcM*Qus4Qk^@F̙L( %xg|AX&v}%t*-L}0s\Lքo`.}S+-!uJ|V~jbDw!9$t^Zա7 n }.qyr2/%^ou[[n;Hu%GZZESe+5q(<$jsYˎb'䠉Ӧs`~$ n -r8ϵ¤\\r3@@;G;U7bb "/P)?7GFg 2$Z~Y+w> +粄RY$x&$DqfTRP8E+Ա$qƔH)S"ik4B)s(:?2M$׈6b>QggRaOHǤy3z5 n Uvg?~VN$O$KёD)݌h?3z9DA[N%f[| % eXq"k4v@*Pju@{

1Csݎ/ۥ<^mKHށ`׎MXkz ˯i0 q[nʣN~Y&5QDL#F y~P;=>N g/& +b~ BZF9t7.4nr}ѪGe j}0)nopp.5+P 2j qوr* ЁH<>{3[h"q]dm G/vfKYdDeqP< $1׵J__k^jNYkoSmHm4hDKr'?4aX{Bw/)&g!tqEx~kXǡYfj2+2@3еU#z~D+]?6'w H/]F2?</0C?N1XtN$\sսկ'^oČ˖ӧT9 ۾Dweh?zpD 16rK.ˌ!W@mjeD{rh'$ ʋ/dIJp˔/車$-kkka/[9@9h}')Pq^S=96# +v +E+ K:Ymixgk-Pvr,7Zj-xK .DAlO} +2Խ{Lw{\m|@=KF9SnfA<7Ii)4~,:c-i=Y mufQ+j9/Η Iԁ9Zc.,GT0W7CNhF0xH d=;\5D2鸊ftƾ?K._co/T)-ӊ6x `77 wA:2dZja$M< 刅SFy,P^ä}FOK>/2_EK: +;%6:b#^v,sD PN:~^U+(&Q/hCj HIԎg,Qq? +gu> +uH$%Ǫ1ؕtǼFbO67G@Z_n;5F(_.#҃7-wÀU/@s-Lxla'B1=c۷JՋTHKdOv +9bu{ZmNzi0bOw~U0*9s'S[ȖqܻW -ޥ[N׉;t*'K-R7& (^xY]zV.k㞀!]WkBM8o2q@Ի@s6Q&] Ax6|arؠ9YyGzc{ڱg߮L :J5qyC%o$<=o~ DIrɜB5g[Ge$IKx.X Qζrؗ_!p|ܭFôH8cS f -/f{C -ÔyvGTu\'7O`d6r+q]f=5.ɋt@q^d8uSkh-vb9xCtUU<0fhgw.D+"i[*D|;ڶkٴ-#g:wN7u&/jhg9H_Y$%'Lr TXUzލ_2yw~]} AYׂJaQ#0H^HHЉ +;{iLan"@$΄~z5{xRiwzݥ[O !.6ӅF9{"æ%:yۥde &ep$O7(*8 Cz +g @.(%(Ww;z0fEο\RMWR`&gJ4mA/[eaDƭӀ]) y@& ï.t#~=j&>GCmdGѦ|b#_)ѷКSJ |ϋst1 喏`f5@JIR,l|*~OOT{4O7Op+!n2kF9qYx$tnbYr̾zV8' +J]~r4 v!:fJ jC;3zRr ouz܁{A]JˇFFV#Qi% ՝"|<=`_E/j* #3Z +kn|t<_Zwt?UHB+1+ŘCi$G]]dFfF{|ï;: )@xmADQ$#wR`ְlE,[$~13VLs) @/LhRN0% Z^ft@Ο%ԛNp]樣FbQ47֪KUB&ήS:zDz8XTN寤5x16E=;Ѻ-V eilk%P  MH5 L[ObnC}4Id.^FM(}Q='d=:u' r\6(bB Yݟjb@|A!$=Um{jZ8$@#10,)QKի۽TksQ*#9fz`4ZoqGUsrTMgrҝӇʄ`W }6Im=\;gMM/EE5kM + %μs ltMN=0g"W9rz|uǩQBng—FXˎ"I<: i}&#Y#P[349B`hT2a_r +& +y!폐8o}w8;,q=vːgICnJfʜuLlXX?"?#-\0}3[`X[F5!”uu“(m&R5? Pɧ ϼĹ8[ MyOXc[-=58[$(кs9B~(!*Ӏ~E52 Pڌg0l&ob~7ocw:(8!&/ {)}9W#CvB/P8X,in@g=ӈT/b{8SggHEi[Rܤ}J z +Y_!Cbnx%#NH![Єi8js_2gچyǙ*G@:F &wr =v YԟJ__hغB!2bsY_?/>\nr6-&IiJχߡWHL2no)|n&CYw7׃M^"ozH`N(?3;) ?& 4E"L`@^f KG:ĈP +8HeZOI~>`:KŒ)5-9&\Jp r;G^%o2[xZJ& U*&3?O;Ôgi- # sCr)bp Bj%_?[]9]5fO?$8_lѤS]$YgE85>+dᐅe?hHZ=̻4A_y,|2*F̅k+wNVDCje,EA\7z'=4̬Ӝ[_eؚh|;p=1+4(|Akl1f;UUdٴǦ_”CØࢰ[, {KBUd !G{`D23Zӂ'(nfW9s|w7^-ϬRgNtW֞4_KBꍌdv|xW{}!.(̕?u~_"^YtepoJdCD1Ǚ=8+4b-ătU}Iɠf~'4tg>/cM0էg(-$BAGuc;NNR1/ʷk=/Y_ P13Z\(>~CU{ >k T,,Ʃ22kUz᠆eҩ OJnb6VZ' MGć"=+M/B5F$mgC_0W&(1"Ij,{lK~*]X} ؒ=lX[Opŀ`.ْnhն\I g9Ht$>{h$k5qT[e7Ak]$dj=htfЮT/qت.' I?/vo{maꍊD?gI&vtgA֫yT TR֖zo?< +_:0v$:8`YhWx@_`i#! LO'~ߠn$M\}#\X% +t3hS,PgrjH3wT<pw4ӥ_,c@Cm<4Y3$\&2Hru84Y4bn^pXyH:Z1D6?*ˑ{4ɍ5,OUip j 1o2Jah}i i/ʠ4"INzY)ȟm>Xv6,Jż.z`t- +snSYx/<kLů= C\,TQ()|_I4בy>FxP*a.`Cc[W`'B g^+ +q<@6R` ^0I_RK맸[B571}ti58>@e/mM<^hqwG-4+0P#^nD/! SeNOPlDZ3őӞ24U6\G.x}K36G?WMY2=k9v:7HiZiOb+;6zdljͤ㨹Ϯ~0~\k&JުecÍ]>*o>~lJ1 /lt^RЌ';}KSQ`#=clRVgl0 OTR"@YU?EL((ۨ6 Em1^ST3[[So nw==׊¹s +VrbOt;!(V_*J m e<6pl,uYdTl!!ts%|OE>LWSfp6/t3.ho W?f/ze +劇Lz^u_BZƾpzmT`poYi%݃ZjD'hlp鄭(^&lYoKtz> Qs>| T|Sj)ū#G-4 s<)(FBN,7:6.ۍm`y! 5\Pت0tt\\GIS2nNlH'|A2|WOR(':g#Ok/&50cwIYѥk=T ,/\Y]WDAdw4 *t#mfdy "MR,IN—kYfq(- 6[*sT<p:Q0&*q>jj/*NFǟtqNWZ* qNipRľ!ַQP^ TTa%up3t@YI +Τg,w<^nwK縓O1r24$GpOs= VLGU`U"1090bܪ_3QH([HA#5af_u԰ֿbۛ~zCܩ k*_yȓTW ͪlh oz ȳUѐ9]U@9+24"( 6ImY20*y$d@ߋߧ ??GfHvܣ^#97;Iஏ\{QdtUK< |\CjQ6x2`-v,gbl5|{E')l>7f1溜s7*JTW6ny|Ym(_*3/`$ _o6h8Up YrvisecOa]dW D%/Phx,D;tPL).j6$p;e5B;]rbLU$Ơ\>NjtiwZh\Ώ)!~DsqyChv*]5ušmC_:Wo> )}7#t)r8r5D.([d]$RMCl=\;jLGOzY&^8JYT, sW˯޷Vsǡ +o=|k*>O)ܰ^$,Fffi'"=:W 9Y!qڲi3BKډ.nrTZdʜ_Ѱ+ 1[ٶZQ\AFwIѫ^S /Lb[.mCcu ])X, I;^sM5*"KA8OBXUŘ3 xsRQďܬ]+mkzM- y +BgBCsݫ-7dnXkb I r%|m ^@ +Hx{@s]f:>HkόK:/'2s8F.~#nY|nP +9Fܰ-ϝ1À\[xw +:xYbkvn)ze.x\n%6+^xvץsE `:p:ȖF8 {GX˰Ͽ62ד]P/N̅|Kt ҇ vq1`Ъk>j2Ӻ&Y۾DPxB%4Ep@;*`bJ7\[/:EU_VNJ,lܨyi+> f8Ffך %BX}Ҍ@i2}pFz7AO4 ^xchG{MnL+=zM~0o^6A4Ã2+,Ml0c%U®i>XuMCVMbup=w#ZuAY(ȪѸPYc?'ޟ',t^iF_@MIZsȿ:0pĔ1xm}_y| Wp3)p6^&@=X6%}e^JfI vl0Ȉ%ZRxOMAEG +Z'^:&ۇaHD,,X]~:rF LJfk "8wD2]`œÙhٌT:K&\AEY &7{/啼1-'?ORgbˠcHs};NF& gpX~ -z&8+ཹ@D\-)p߶VB;'E?`d٩p㤂avuY(ldR0YJs#t(aPu̮hZiOKfh+E}۔V lLB>P͸3PF 2^;~P}0*ɲD5Vie8 ڣQNӗVHohCv{*K~!)۬!|\#Ca-],:WݠRKRD( #WVrmY?7AD41]SlH',.CDw/ ELFvp`DS(vFZEuCu' oڕWO $nokpu$x͝Fi@,CD:;FhECUvyw%wԧ>b aNxTFcZW"5\]/Sa7bܯ)S5*Er7-?EwbÚI/a/kb^UnFmEB}1e+z,Nd_![YP•PA] B#}}DLo|q_L$hSd %\g')N{Ckl_~C$+.Z&ӞBm"6[P,0$Sf;(Uغrutxrʠp>ȷP \'7a\!j4f^sR'ᐩUǓ/cO,o]2:+n+T +PuGE 7S8ñ..XV0ZH%> iAȮ?p- 'cj[Ҹ{=[f4:AVeW 'QD9_XwʹWJ 2#"G[O.l=`^`ɻUYW/,~*k`D}\h0՟16pB!jRDM3YRA~(#W!8H_;ڼqPh|ѽrY'ډ R#'72*05j?l̲=b\ꋄ & 5_3u[=K8~bvTvW_ڠd_ue[59prp/QtMRCէy7}!gyj>y zWl3%\{?JM +bC (g⇄Mxab-Ps`6j Pg\һ36pɃkzZ"*)p@{\7 +\r-پ*Y>T{s2gQǦe8>s3| ZP޻b B5RL+@u$駡{O.؄\n:V䆋-ŋs<qSGC3ˇ"v$ىjkŽ쇐Ϳц뫐J %md/ɼE_I Mbt=1?w  )6fѭd=q訌߻coif^m.Ke|'s\gkFGgZrg_2L6ZD ^(m֨pV ^Δ:%G XHxmdT'$ G.UeUK-*DگV; ҹ`}Y^Ω=VRs 䌲Np!`GגkGad=c4r){D +rjl91b7Adf2or o.(bC N''G\z,"wbJ%lVdPky7񟼂_ɲO=]I=1Ę0.8czvIj-d3iOX-T:tвnaxi_-RJE܂h(ұ&8#IS!D( aQ:,.#'R5@?0ڏwK즣*ɿ1}ֆaf(VP +LާVz ߛ6k=SR _?;VQKފer}Ğ}=FH t#ya9܉OCpfhJ*5ZNyu1y2D}r&q_"{ Lq0X*L'E2Fa&26zsO:6Oz>@Iшx0qEfd>5*v6-/!SԂ-&oq*?hx2)XoY.RN;h?$1r/ os6Dp2ߏQ +bE;G~;NV9!)Jޭ8*B|1ی~3NbfjhqP`(F闆c+/c,e˹YnME|ۊ[$KI1}Wo>鷲lH@5!45#j,|]u3F=GO! f)z:/+f$ 7̈eT|w>_gI%_@P])eVq̭ưx\bPM Q,c+IW5RIO*]ͬ\zSU=8mBL%UOC"p[+v J~\q}:ɸp맖($=Wmڔ~}M׊ք8ُca#@?Bt TGLA2H: 4)G f+">9],~Tɞ͠f:F&=*;nƅ&1gBIfpmZx>&\r+Vݨ8 X5"C"D)^i䳳RJ,]T ))`g}[? +ymF\ "!AdDp*M@b;1(M/BﳂCoB'W.]ǚxi&r&ь~oHDa8GkNDlSɉ!A֛롞n{>r7 @3 #/2.hQ/{Sy+v$5S> OgǥI]}AT*uGo0p^t >stream +!aS2Z+\vb%}$ebc OWRYND- HsG^1[n4 %rVLaKH (* +]s W"9Mu"|jq9j>o1j9l4=k'GC%<=r>1sÄv/ qGZecW2{ۜN:tF#x;O‰UHk 7dV^ΆE+-8V +wtDV1*Ih7<@*!u1;EPa~PJtNұ#L:[ߺSGÈ'1~{Sn6 +xx\?"AtDL÷w-Ωp1=&X +b1 +#jK SDk~YUӛ +=Ao4ꪬS^{o#>k^IS;f>j]G +Bf *6`.Qh[.˭ۿ"jQds(𓡘E,ќ"niZߐ q64G"E[fu$J8 @VǚIB`{C#l?::ܨ[ ;גY8$sek2N@_mBzM+r(P-srz +㒉p)7l6ZT kCt]?bil?X}C[""!5a<'J0]6`R3ndiO򃄷sR &B. +"!->z.59&- lg,/+?sxFԳCZ; Aj~5 TPdB:x4[-ۅ@H(Kxn$! jnIKxk .ZCdc4mľ99pIͭ:{00od\sy!(|4uBS9D!O.+^`L`0}Yے =(GbU&W'e2<.[JyY7bhۭŜmK@ꢍNܼ۟#cnYR& Ko7xjH߀7½3Q;A dP\WSAɜ)m)nJbn׻6[܊8{RnV:q1MPS>=L}1Hqi$owsUDWJ5{Fh}^Is$OӠsr_SX5e $-O'Yծ-dZ^7X~>^"SE]^hm%a\ɸlëCe"C=߂spysZRE#AZδP1._Z$$u8~9I3"9'B&^hԌ^>p Rc3MC܏@̯K0nԯ/ȸ 1g~.eQ/. N0?+l]Ҽ]圕8WYWҲK!|bp +5?nJ,eF,{L}, +'p PalZpDā;˲x*Ț%[8Fq¥<*eN|<`I}'Dޥ)|ƌP6y4>|y3g۾BW9GY;=G;+SLO +q63{N qS@}AaL"XίE{Rm_Yib GˆNY+vwC+A_obϜg&3T3~[<1L>DZur}X%BPGq[37[,NKd|~+"(:4u4+VP¥puT` Q &IAuts=^E}~mjq?6驮FLt+%;U$~%\Y3qMk/ĂќI%RƯ9qT"g*dE*SR_EH}"Sޟ"T pmde4)3 ۙ>AuќLZyYY"M7gBu4S<ۘN"Pvܒ?i!Vx7;TW +n**iEWDV7ZbR!IPjm.=v.E2VZ7mzIpOWjǩwz곛eƹwS'(1}ϣ@\ol֣%fXl08`ze~]ܭu倧[I?OTZHܑCƷ/IBX`}!8aoItg18KdZ9=CHd͡nkN4زF;1bv'=]8$bm[XFR@"~0po([źA +ղTU!=!P⌇,$٫@,NXtq@*9|6$9ҹRbD|g TCn3gMDw,<_S|H{,phj̛AU MNZ!XS֯Y+- +xO̫->i'!3G< +?oKj`G$z BNJhS'0L:w +4gڸPxёil ձ@EKL0<8#<|A|c/hØ 3i$n ho>RXxY+l.ˑ96M6tOl/゚E$֫gf0/JNlDb6G,Sߴy9VKW&UJrrl +ς> +C?Q1P"Bz3tY#:#w/_Db ~&WR/>JL>(E[P5SB? >s!dd +szRj{~*Zu<pΩ8%B>yKͷNVJu/V4NƃDw1So}5 Ӊi;u;BR~oAHp?dRwz}|ODwG\"O3·,D)b7ijrdmcBh͍&DNY+˒.܋]Yw3A :7mR'dMnܴоbԶiOɢK=[@G~дmIY7qZҘ4eXm{]*W,̓%dvjVHJT0$I.Q-<{)s{p3Bjj,wz Ke8#΢_;{GUȴxW)!a!ec'eCMr-Wi:u/һ`lXx9U[ %GR'+:C=x5NC`w`oX$r,N%yz\s>A!6K+:[8Q0:Ix[ju K NWojN+2\YbuIzw$+T&.fP\pYV.Bo٤;\XGm9(zu [Y,2zvY#ud0Xk2/4ó$"iלN%;>x FR| b"%.w_f9J&Յ~jN};6qkפq~!P4Fj4et= ŖM~C=Ǥ*b,poԖٞm ;NZ%,in^?, Aַѻ? _Y%io,[QdM_ccX¹}t`;݂[CIry+~8"g=w,y=06`,n{xwZm$b({J[9DKt#W[)teŹQ=,94+_>^4|$8wrۨ*Ymom穷Z4AVf]SyA~Uս<(5 'ց<;}OU6ΐBs]Hi?H 7T]AB%Q1`%:t˖{"{D,嶫ϭ r[p ]1/г͂/N]@v,fT RpzNK畭ȡBD4u٦ 9?}/D+ׄ~궗P +# ZE} +*ӡ-e#خ{XȰ( Y8e'aD*>wV1d_$w79"zAFbQw]DG/1b:ABf I̖22>,{ v| w_1&DǠę \=ieZxHAajF>:]@|,r5博nWgP9'XTS#|-4v'5z^0΀@0:g"Bj˧R0oȒtZaeLX|9ݢ:^` Iw ó<_!ZklܪKNJޕ{iHx!3{&,Ro " 8_"ޅ~uؑ 0ӐvrW89iD7@"G7B:KbxyF&%l^Qωڞ0#f3en8mE&@wC2AL]4%4c0c)Nt΀JMaWU|T[A%cUy:Kfx5suzd1}JK1z@iaBa[;pSmqJ? ̑vA^K> T_.ݖhb|lO*ě6n2*툑{ Zc{i4(!a$Ct{TNb^QʤHzJ̺x2.M4 }/[8⢩&MX&(0iR^wŹW31t*]lb=|}Vc- ^Maw( 2L"Pƒ{B 5|daP%q&VPU6G@lN(ps4mבIX6,s*3~b6yf堭a]6np{0۵yI)i{~*B4EvoxQ{-x=1: +>q7 ů"Eož2!;;(E(YKA1΍ה4 .#B'p5- x߸1PtI0r蜲X銩-V[r&4vȈ.i_PWH.Aס):Y&r\pg +7Dg+,6؇T~'wkSdFrLBs;0!D?zt;g<'o̥ +qlA6sƭ⺟ex'm#2t2oqM +sU"$љpmd`lW 83Vk}^LP}ԏSaVS* )xdcA48z#B*|}PȬ3D’g}٤.D)ɱ:ߩQA2×WⅿJ֚XVVSxmQU>j\)fق@:AHk]M272uWg8JΉg25֊ۤk[9NnU)k0's[!3gmBo=gxRL9?֡<"P2H%P: +L.J^@ӈ|[=J"rW4@fS3t5L!j^x5K+`Pڻ}DŽyb钟~QOиh(џԛ>.Sw)yp!G1T@dvS{OlK&ˣOWGv ™,vN0L* Wv#)ҸOr>s9A~ +'Uj>:fh' b v#y:-6+B1\Mc@MC i^-$ ++ DQM?R+9Nc Ri6jO{&8vY. ҃׼\G.؂UV'e> jiqFcY=;rzqaJG%OE[g4P\zN]c>/3Vuq*p^bD;W-Gah4Z/ +vRwbnweE$JȧexD</n\8q LhsCh7Ze{I}jֳBz˒(kub&1I83ӷqc_,^jf-xnw Ra{?<U֠ν7D)˒DyTўelUdY\B| +)c5n=J_ ],@I1W𘀓'rhah8>]ʍ9=' ,`YKN (f[OHZ̄طP# ] A: '&Nk\LP ԇy*{tvIah;MzGѧ6?LDz,G:v>8 3Z+{ 8wtࡠ(yj[*;; T$N͚r//Ã,RŇ䄮#n6(lݯx +w`VYXoOJGtYt^h[W bWiFCۓM$0T<@MHtG?%ȹ"V+?!'%6(Q{p`z8S A߸UQW6Kr!P&1eI\UXN_#2AEO.1W`~JX (S="FXFȬh;ʀEy$ V?&TMP:=~DM{%_6 昖&}#Syjdn%z56T6JO p;o'dY\ᰐߕ,ͿȠF*t2B]j; 39O3PL`|] ew6,Q{sH4Qe\(ͳOs|f'gX.~'KZF + y>*OjZ y)mO4v|I?FwsvŎ'tp.?O*ٵ|ŢAm\4~ i.xyXyܠr%yŚ9;20ͷdM9q^ }͏$PAE|*ӐZxvoCf_}X aVD8,߬1N.l`}'⎐C?h~,f;^%?OGƘ~.$;ELL5~p +''~NlkYVs@+xVDٕ+8ɾ IuzD]|:!;~-SPfi|,&\a קmMr€~>4* }oy rVgf^o߳iʭ2UMl8,Ul8N-G㬪4GJ +G&XW\$c&t!xX{/W>(#ZA#/VZa-NGm6Խ +#_` ޳Zr' yEQ(]wY.k]Zʹ'aihd!vq-_KΘv>{ /lvem+v|%GQ6JyDOnD@ ̍b,{ +R&Con|I`ѶZH܁[(KF:i}TM.(T5GH̡zX[6'PϹ܊`ˎ,L]DF\O{ - @L21}GrL@MI:&+cA!C`D@Q QBD'QH E?s?Զ}p .㰲D}?9Ux>T&97B.vuT=!G+וp&aҊ6ŠNwt +ND_a/B 02! mBΐim&OMh%f1T:ƄRQv#! >x@Nq> !UmF8*M6Yƀz7PINc9*ǣ9EJXZnݥS{w/=: +IU޷^|.nP +_eװ̨XsOr I#PəvG"Uȷd"G>s|T\_?_D3mYbcq|wW!4!r?Tmv-e?6ؚ)hJ,6m4g)2xoM5dtv -gLbmgJ_9 Ca%7$ +OgMU;%5DX fsr$AҞwP~]}u ̣>pXT3&E\ \5)nn<՝;ͻ@6&z9w)e亭,_?Ʃw<~rj+h?> V.`u3N'=igM|u4򣒍^>P),[2%tU0;Ƅ+͓S<6QVp+%]q10cD3 vɉIFޞ0bm2 c>bӣ?8ǧ/iV&%D!'LTz6CsLeoO1.O-LGhzy* .Yw|f6%9VIE$KR]H{ _1e{'*eSJ(L) +[5xN[Â(b!O>,5oDlzS42׳1BU5O.B:|ibxc { M (\w qu.gSV2;^'qs5V$EYp!b:X"ʭeRdtd4}Q͡6̓͟.8jƪXXH䡠@i>Mz ӻ r칂ÆÀ .twc[nN/URI6Q3 j# CADdpk1YY;!i=Q$Nrb% 1(@ +ĜFd_ ,3kG̓Cy/GZW\%}fElչF7JIӬ쎙gz3#abK%I~r+դWkL,ETA[TګZj"JӘ6pwZ:ksAˌE`qv|RueW\6S洐 YY%hD%ԩ8zd%s"D;lr !̐LtWS_ 5j^{P|~h-c,W#׈NV"3C0uL`؀jH4ۿS?kSRjTpIe2,9a6Ndr3xs~/;Vrǭ78@BT+MFYǕ8a(os/=wse{ hiG [-@Qxz٪o)>0$ez"\&=|kC|ąXp#ȉꥴ1>FSiҹCA~n_aV p「@_ +O~vİA^ +]in0)yZPD H>luU~ze:}H3;b?Zy6 ګ8CRU,ވ;+ahI2)#*yN70n/ͧGpߙ8,7I4 7p!pQ JK?(nE: DC_zk])dGYYFLnaHi9.F70VOz_sy-W1V-'bDt W +Ҕ=2V5JB;?^%Z]22nW{I;W9hTg{^F,gxP 5"aFk6rtl( ЈfmIyF?˂̣u>xOJse\̯6 BkMy04j$&9<™󡇻 o;1tœ.YDPmz- t=\bĵWwIg^% x*&89ʡ_8ߞ0-4ߍ fk4E]~HwtG}7El2r'T:dY灻;Z3 +k/RH*y~ɎӍOQrxbê[{dztblҥ\EaIB¦±e K/V 5Οbs1wڛ9T Ssr৑iu)q:;<>Ҕ yŽk:!)CG1}u4P18 30E= >/xIjv/>MV_o(l'0-j/H3Fbz"#&w:;& +ILwz x7 S8=L=5gάsQpȹ3n@[RTtTAl_B::5nƙ,`NSCӨÚuoKsVǩrl`H>K$F`og17CgP\,6ed_';&:@u'gBE&rh.)m S85&,r[;?~"2?GoYIY462˹eC}V;LM)BFܷ2J$3D\Qsrƃ'@p'ft#Pv^hx?ҹOj[wu+`{o-olKȌuxh҇I{_1..?N8~iť:H`M.{ #p{j2op gx_mn]uT0⊨fH .O{lPex4[%f / ?T["P6 ` ;SZ%.\ og4n0">,w=sPjio7`qeo2Vnċa.'4Yx1Vno&e=`yPpŕݛQ +|eIIkObck g-wk{$0V00U_+MZ^{$A7_&d.z*zL + +d\1-DWR w lL@9`A1Z Z| ,4H%21<2ъ@yV*v#ˡLR?\R=Xm'I=(\3/_a02չ*HK3}AVE: 6PȞDZ򓤝mXKp#wyچWoؖb-óE[^ `:w()E(u2(ͺ'%{ܺ݊;';gurA]!:;Q5rKwJ_ V PpwICh#Oopmh_ē#wVȠPD2 03*{db%Zf7iz.?λɯ"G͌gƾ);[\nwȰ[.^|rdl8AӁN?Q@g۠2tpA#vr󤅰,5 +Pω@S>vضLMM~1a P&Y4UP36giʼ3r;?P-:xb8+/7blu>gب0@G6yDۦr_%(f \ӬNsI\ IK7ttU0g2o%¢ +kȽ'NXm"3:f՗)3B(Eoeq~ꏑm_y: ܧj}&qRY-FAD[8%+Pbo`Q7H]i)jV?QBO<=XnbvyIZt;>Nn9zoX v ͇=Bsk83~eSS5j Y~TK~|Pkk9ݔ;wms㷫2mP215עd/jngZ\ֈ&/xv-Si0t] T^דM#6@(4&(gca 3<%\mf@{ƃR. ;L^j#u#XA*?=85PoL"dM}>npN70#7]({4ϸ805Zu[$+tm"w{PTV2[(R}o +UZ[J׋N +Nջ6 cvlq%rtc.0dwjbɗY4 /r,63̧ެӺ[\ꇵ4a]ބ^W7E wr6P] g<>q$5荱ɀ' ݕ膝ϖ_)j$pTIlסȾϯӍ#\qJ:&-2+tD@L69dt6l{[N$lK55% =â^G +Q4R${`e~cyxOAO/430ǥ,쐂>s #-ˀ&'# YC q-Gmk"T4yV\4s}lN#PMVb +y}2 NNQ mcrXu0sdV& ?"}/*?bpV|WLj9URqb@lLKZ|⿖ E+tRϾD0O,Ku̓х(}- ˟#:YD:A-y*T+ BKHhchiR3Xd:גq!c9@C2DD;x:pXc;&!0ݺe[ja\9 ecϏ|˓,)g7mcx{*m_#@6fv'E$ .y`057l:c;ַnD+)Fgb۴Ciӡ>ex{4-ʒ >Li#][3T!;q:pc@$RD#u/_u7ot[Qq+~DD2͇4%l?lܮ{(VƇP䷝+v(79(J'׈:tH/]u%o,m-ԇD%ɭ'Rz`k>a)9N0ʀtr}gU/A:O-)E%!R6#~ES՗XD>03Z5~W|RQ;oQWg`d/?=?γY@l' >}78޸4l5֦͆v˭|5-jv; 4"nS?-B##g͂'; px9KN%M$ =Ҭ2 Gau׮bSј]-wDrZƐ%U!ܐ.`]mbSoB4#PE_Qsf'&-ho9rF/uǛGv\/ê* +*nkgOr g ir!n'rRN7]fpb.6DH8|Ȝ)<8@%&G. \RP%˳)- W!J璈lt{IBE7W_(GL v,ЀWFU+m, GnQ.|rizRd%BU/Y&U%dۆv]Fw6:TЙ-Bh5*eMV'7w73Xfq6aѿ.TM5$ޛxzg>iΫ3SґJϰ +Yǖ{x0wS9c%]s~;Q $,-nV:jPaXSHʑ1u%W= w0y1;)G9²g󅤃s˫ݦGON-\wl$?uKwbW1A$O6SVGuU^REEj+HIk7垡/to( j69.*+v7w >%hP ˍoBQnSZ3l_յ:Hv#f a9_5,=D!JU.=?[ISHF (Ax"gPGd qT}e +hnApOJ7HpI$ wk$LYT9#jb49I~z~%ݴ(I㴄ՉN`"m[ָ.0P/iAIg՘/؅=]coA0+@˲=pS}O炏 zoa9,?$Hq_c]gd +HwF$4l;+є55g*NAvuH,sià?^h3mI<ܥ Uԧǃ\qYBό8(_]37lعvk]Kk@8WsEKrm LLF¹ӟtp",ͭ79sm9) 9n)ac Whwm|M+1"EּTO9܃l=>I9JM&75.1j +bSRHƂ#lAL4# B8Yd+2s4_>ߠ'g遳[G6Nrh'-0RncvW~ +w~au|fYNs}<Py2xgH!7 Jx)M/v#:cピ+4W#<06nEZeDնCQK.2ZպBx,$U, ұ\6! Ou܀P#fW`=$N˝OB+n0mՋ}Q# AL)[ `ř3`_߾Ӭ>q.o?$kub#vb_H]ro 1O?;͖QҥjrWp"&TE`6ԟN,~DfY,?l*(|Ѱ&̐9v)pϣpTtjiT YʆaS'*N"޻.vk9,h(9DFyZ%qN3%u',6-㽜 X᝛lLqIę;GqFKJjj:TO6B@|됰@õܫ)3eH_Hq-:_ +[#: V۠P?bVe^)O6YÍE;?bVfm:5D3 | H湤1U$a!0i>')i0XvjjfI>bj(uI]R!%\MJ-m-5@\m +_+]8EH 70(uiW6 >>)UPu,w`"U=F +ֿ +:ᄆ(G6uk[m.p8:ax"UMh=0Vheؿ_yKݥ#Si[EDMʩP  Ԧ 4ZĚ1 a\n> pW㒅b("yviW*^15>A;E-B$ +Lj7j<:."ti@ ""/!mچ"?×d!(DJJSv-4 )8~-N7UB_WTcʜr8-TUW9h +fsED:q*t82Nrӱ]Cqs̃E λ⸷[Epd1g_sLB +jJh7xO0s譜:lل4"-qǕ]mrE8pBT gtI0= x3ɡ ϥԬ :b[q=3$'ѯ>3l[/Z<>Xx ݌$> Blֽě)YRlgX^! \Q%sBΏ‚#zϑ Z(MpƷ +Z> +endstream endobj 5754 0 obj<> endobj 5755 0 obj<> endobj 5756 0 obj<> endobj 5757 0 obj<> endobj 5758 0 obj<1)>> endobj 5759 0 obj<> endobj 5760 0 obj<> endobj 5761 0 obj<'ۻ}*f)>> endobj 5762 0 obj<> endobj 5763 0 obj<eר27+QlKE\(o?#\)5O-Ȗ]օ0KΦ)>> endobj 5764 0 obj<> endobj 5765 0 obj<> endobj 5766 0 obj<> endobj 5767 0 obj<> endobj 5768 0 obj<> endobj 5769 0 obj<> endobj 5770 0 obj<> endobj 5771 0 obj</!MXkO)>> endobj 5772 0 obj<> endobj 5773 0 obj<> endobj 5774 0 obj<;'Cߧ)>> endobj 5775 0 obj<G6\(g/$79|C!` 9)>> endobj 5776 0 obj<> endobj 5777 0 obj<> endobj 5778 0 obj<> endobj 5779 0 obj<> endobj 5780 0 obj<> endobj 5781 0 obj<> endobj 5782 0 obj<> endobj 5783 0 obj<> endobj 5784 0 obj<> endobj 5785 0 obj<> endobj 5786 0 obj<> endobj 5787 0 obj<> endobj 5788 0 obj<})>> endobj 5789 0 obj<> endobj 5790 0 obj<> endobj 5791 0 obj<> endobj 5792 0 obj<}Q\r>⟗ھR+)>> endobj 5793 0 obj<> endobj 5794 0 obj<> endobj 5795 0 obj<> endobj 5796 0 obj<> endobj 5797 0 obj<> endobj 5798 0 obj<> endobj 5799 0 obj<> endobj 5800 0 obj<> endobj 5801 0 obj<> endobj 5802 0 obj<6Tvī:.ɜxBnth}C')>> endobj 5803 0 obj<> endobj 5804 0 obj<> endobj 5805 0 obj<OQաYK)>> endobj 5806 0 obj<> endobj 5807 0 obj<> endobj 5808 0 obj<> endobj 5809 0 obj<> endobj 5810 0 obj<> endobj 5811 0 obj<> endobj 5812 0 obj<> endobj 5813 0 obj<> endobj 5814 0 obj<> endobj 5815 0 obj<> endobj 5816 0 obj<> endobj 5817 0 obj<> endobj 5818 0 obj<> endobj 5819 0 obj<> endobj 5820 0 obj<> endobj 5821 0 obj<> endobj 5822 0 obj<> endobj 5823 0 obj<> endobj 5824 0 obj<> endobj 5825 0 obj<> endobj 5826 0 obj<> endobj 5827 0 obj<> endobj 5828 0 obj<> endobj 5829 0 obj<> endobj 5830 0 obj<> endobj 5831 0 obj<> endobj 5832 0 obj<> endobj 5833 0 obj<> endobj 5834 0 obj<> endobj 5835 0 obj<> endobj 5836 0 obj<> endobj 5837 0 obj<> endobj 5838 0 obj<> endobj 5839 0 obj<> endobj 5840 0 obj<> endobj 5841 0 obj<> endobj 5842 0 obj<> endobj 5843 0 obj<> endobj 5844 0 obj<> endobj 5845 0 obj<> endobj 5846 0 obj<> endobj 5847 0 obj<> endobj 5848 0 obj<> endobj 5849 0 obj<)>> endobj 5850 0 obj<> endobj 5851 0 obj<> endobj 5852 0 obj<> endobj 5853 0 obj<> endobj 5854 0 obj<yWZAOғKF)>> endobj 5855 0 obj<> endobj 5856 0 obj<> endobj 5857 0 obj<y)>> endobj 5858 0 obj<> endobj 5859 0 obj<> endobj 5860 0 obj<> endobj 5861 0 obj<> endobj 5862 0 obj<> endobj 5863 0 obj<> endobj 5864 0 obj<> endobj 5865 0 obj<> endobj 5866 0 obj<> endobj 5867 0 obj<> endobj 5868 0 obj<> endobj 5869 0 obj<> endobj 5870 0 obj<> endobj 5871 0 obj<#W)>> endobj 5872 0 obj<> endobj 5873 0 obj<> endobj 5874 0 obj<> endobj 5875 0 obj<P>O)>> endobj 5876 0 obj<> endobj 5877 0 obj<_+wP\\Azv)>> endobj 5878 0 obj<> endobj 5879 0 obj<> endobj 5880 0 obj<> endobj 5881 0 obj<> endobj 5882 0 obj<> endobj 5883 0 obj<> endobj 5884 0 obj<> endobj 5885 0 obj<> endobj 5886 0 obj<> endobj 5887 0 obj<> endobj 5888 0 obj<> endobj 5889 0 obj<> endobj 5890 0 obj<> endobj 5891 0 obj<> endobj 5892 0 obj<> endobj 5893 0 obj<> endobj 5894 0 obj<> endobj 5895 0 obj<> endobj 5896 0 obj<h>fK )>> endobj 5897 0 obj<> endobj 5898 0 obj<> endobj 5899 0 obj<> endobj 5900 0 obj<> endobj 5901 0 obj<> endobj 5902 0 obj<> endobj 5903 0 obj<> endobj 5904 0 obj<> endobj 5905 0 obj<> endobj 5906 0 obj<> endobj 5907 0 obj<> endobj 5908 0 obj<IGD)>> endobj 5909 0 obj<> endobj 5910 0 obj<> endobj 5911 0 obj<> endobj 5912 0 obj<> endobj 5913 0 obj<> endobj 5914 0 obj<> endobj 5915 0 obj<> endobj 5916 0 obj<> endobj 5917 0 obj<> endobj 5918 0 obj<> endobj 5919 0 obj<> endobj 5920 0 obj<> endobj 5921 0 obj<> endobj 5922 0 obj<> endobj 5923 0 obj<> endobj 5924 0 obj<> endobj 5925 0 obj<> endobj 5926 0 obj<> endobj 5927 0 obj<> endobj 5928 0 obj<> endobj 5929 0 obj<> endobj 5930 0 obj<> endobj 5931 0 obj<> endobj 5932 0 obj<P JF)>> endobj 5933 0 obj<> endobj 5934 0 obj<> endobj 5935 0 obj<> endobj 5936 0 obj<> endobj 5937 0 obj<> endobj 5938 0 obj<> endobj 5939 0 obj<n~1)>> endobj 5940 0 obj<> endobj 5941 0 obj<> endobj 5942 0 obj<> endobj 5943 0 obj<> endobj 5944 0 obj<> endobj 5945 0 obj<> endobj 5946 0 obj<> endobj 5947 0 obj<> endobj 5948 0 obj<> endobj 5949 0 obj<> endobj 5950 0 obj<> endobj 5951 0 obj<d]SE^)>> endobj 5952 0 obj<> endobj 5953 0 obj<> endobj 5954 0 obj<> endobj 5955 0 obj<6KXvB\n)>> endobj 5956 0 obj<> endobj 5957 0 obj<> endobj 5958 0 obj<> endobj 5959 0 obj<)>> endobj 5960 0 obj<> endobj 5961 0 obj<> endobj 5962 0 obj<> endobj 5963 0 obj<> endobj 5964 0 obj<> endobj 5965 0 obj<> endobj 5966 0 obj<> endobj 5967 0 obj<> endobj 5968 0 obj<> endobj 5969 0 obj<> endobj 5970 0 obj<> endobj 5971 0 obj<> endobj 5972 0 obj<> endobj 5973 0 obj<> endobj 5974 0 obj<> endobj 5975 0 obj<> endobj 5976 0 obj<> endobj 5977 0 obj<> endobj 5978 0 obj<> endobj 5979 0 obj<> endobj 5980 0 obj<> endobj 5981 0 obj<> endobj 5982 0 obj<*?0s/p)>> endobj 5983 0 obj<> endobj 5984 0 obj<> endobj 5985 0 obj<> endobj 5986 0 obj<> endobj 5987 0 obj<> endobj 5988 0 obj<> endobj 5989 0 obj<> endobj 5990 0 obj<> endobj 5991 0 obj<> endobj 5992 0 obj<> endobj 5993 0 obj<> endobj 5994 0 obj<> endobj 5995 0 obj<> endobj 5996 0 obj<> endobj 5997 0 obj<> endobj 5998 0 obj<> endobj 5999 0 obj<> endobj 6000 0 obj<> endobj 6001 0 obj<> endobj 6002 0 obj<,)>> endobj 6003 0 obj<> endobj 6004 0 obj<> endobj 6005 0 obj<> endobj 6006 0 obj<> endobj 6007 0 obj<> endobj 6008 0 obj<ˢ)>> endobj 6009 0 obj<> endobj 6010 0 obj<> endobj 6011 0 obj<> endobj 6012 0 obj<> endobj 6013 0 obj<> endobj 6014 0 obj<> endobj 6015 0 obj<> endobj 6016 0 obj<> endobj 6017 0 obj<> endobj 6018 0 obj<> endobj 6019 0 obj<> endobj 6020 0 obj<> endobj 6021 0 obj<> endobj 6022 0 obj<> endobj 6023 0 obj<> endobj 6024 0 obj<> endobj 6025 0 obj<> endobj 6026 0 obj<> endobj 6027 0 obj<> endobj 6028 0 obj<> endobj 6029 0 obj<> endobj 6030 0 obj<> endobj 6031 0 obj<> endobj 6032 0 obj<> endobj 6033 0 obj<> endobj 6034 0 obj<> endobj 6035 0 obj<> endobj 6036 0 obj<> endobj 6037 0 obj<> endobj 6038 0 obj<> endobj 6039 0 obj<> endobj 6040 0 obj<> endobj 6041 0 obj<> endobj 6042 0 obj<> endobj 6043 0 obj<> endobj 6044 0 obj<> endobj 6045 0 obj<7)>> endobj 6046 0 obj<> endobj 6047 0 obj<> endobj 6048 0 obj<> endobj 6049 0 obj<> endobj 6050 0 obj<> endobj 6051 0 obj<> endobj 6052 0 obj<> endobj 6053 0 obj<> endobj 6054 0 obj<> endobj 6055 0 obj<> endobj 6056 0 obj<> endobj 6057 0 obj<> endobj 6058 0 obj<> endobj 6059 0 obj<> endobj 6060 0 obj<> endobj 6061 0 obj<> endobj 6062 0 obj<> endobj 6063 0 obj<> endobj 6064 0 obj<> endobj 6065 0 obj<> endobj 6066 0 obj<> endobj 6067 0 obj<> endobj 6068 0 obj<> endobj 6069 0 obj<> endobj 6070 0 obj<> endobj 6071 0 obj<> endobj 6072 0 obj<> endobj 6073 0 obj<> endobj 6074 0 obj<> endobj 6075 0 obj<> endobj 6076 0 obj<> endobj 6077 0 obj<> endobj 6078 0 obj<> endobj 6079 0 obj<> endobj 6080 0 obj<> endobj 6081 0 obj<> endobj 6082 0 obj<> endobj 6083 0 obj<> endobj 6084 0 obj<> endobj 6085 0 obj<> endobj 6086 0 obj<> endobj 6087 0 obj<> endobj 6088 0 obj<> endobj 6089 0 obj<> endobj 6090 0 obj<wc)>> endobj 6091 0 obj<> endobj 6092 0 obj<> endobj 6093 0 obj<> endobj 6094 0 obj<> endobj 6095 0 obj<> endobj 6096 0 obj<)>> endobj 6097 0 obj<> endobj 6098 0 obj<> endobj 6099 0 obj<> endobj 6100 0 obj<> endobj 6101 0 obj<> endobj 6102 0 obj<> endobj 6103 0 obj<)>> endobj 6104 0 obj<> endobj 6105 0 obj<> endobj 6106 0 obj<> endobj 6107 0 obj<> endobj 6108 0 obj<> endobj 6109 0 obj<> endobj 6110 0 obj<> endobj 6111 0 obj<> endobj 6112 0 obj<> endobj 6113 0 obj<> endobj 6114 0 obj<> endobj 6115 0 obj<> endobj 6116 0 obj<> endobj 6117 0 obj<> endobj 6118 0 obj<> endobj 6119 0 obj<> endobj 6120 0 obj<> endobj 6121 0 obj<> endobj 6122 0 obj<> endobj 6123 0 obj<> endobj 6124 0 obj<> endobj 6125 0 obj<> endobj 6126 0 obj<> endobj 6127 0 obj<> endobj 6128 0 obj<> endobj 6129 0 obj<> endobj 6130 0 obj<> endobj 6131 0 obj<> endobj 6132 0 obj<> endobj 6133 0 obj<> endobj 6134 0 obj<> endobj 6135 0 obj<> endobj 6136 0 obj<> endobj 6137 0 obj<> endobj 6138 0 obj<> endobj 6139 0 obj<> endobj 6140 0 obj<> endobj 6141 0 obj<> endobj 6142 0 obj<> endobj 6143 0 obj<> endobj 6144 0 obj<> endobj 6145 0 obj<> endobj 6146 0 obj<> endobj 6147 0 obj<> endobj 6148 0 obj<> endobj 6149 0 obj<s)>> endobj 6150 0 obj<> endobj 6151 0 obj<> endobj 6152 0 obj<> endobj 6153 0 obj<> endobj 6154 0 obj<> endobj 6155 0 obj<> endobj 6156 0 obj<!\(TKQעs@/vJY\r#>)>> endobj 6157 0 obj<> endobj 6158 0 obj<> endobj 6159 0 obj<> endobj 6160 0 obj<> endobj 6161 0 obj<> endobj 6162 0 obj<> endobj 6163 0 obj<> endobj 6164 0 obj<> endobj 6165 0 obj<> endobj 6166 0 obj<> endobj 6167 0 obj<> endobj 6168 0 obj<> endobj 6169 0 obj<> endobj 6170 0 obj<> endobj 6171 0 obj<ٙ}?a@hJ>)>> endobj 6172 0 obj<> endobj 6173 0 obj<> endobj 6174 0 obj<S1fsl;K)>> endobj 6175 0 obj<> endobj 6176 0 obj<> endobj 6177 0 obj<> endobj 6178 0 obj<> endobj 6179 0 obj<> endobj 6180 0 obj<> endobj 6181 0 obj<> endobj 6182 0 obj<> endobj 6183 0 obj<> endobj 6184 0 obj<> endobj 6185 0 obj<> endobj 6186 0 obj<> endobj 6187 0 obj<> endobj 6188 0 obj<> endobj 6189 0 obj<> endobj 6190 0 obj<> endobj 6191 0 obj<> endobj 6192 0 obj<> endobj 6193 0 obj<)>> endobj 6194 0 obj<)>> endobj 6195 0 obj<> endobj 6196 0 obj<> endobj 6197 0 obj<&~)>> endobj 6198 0 obj<> endobj 6199 0 obj<> endobj 6200 0 obj<> endobj 6201 0 obj<> endobj 6202 0 obj<> endobj 6203 0 obj<> endobj 6204 0 obj<> endobj 6205 0 obj<> endobj 6206 0 obj<> endobj 6207 0 obj<> endobj 6208 0 obj<> endobj 6209 0 obj<> endobj 6210 0 obj<> endobj 6211 0 obj<> endobj 6212 0 obj<> endobj 6213 0 obj<> endobj 6214 0 obj<> endobj 6215 0 obj<Hh-\r+|)>> endobj 6216 0 obj<> endobj 6217 0 obj<> endobj 6218 0 obj<> endobj 6219 0 obj<> endobj 6220 0 obj<> endobj 6221 0 obj<> endobj 6222 0 obj<> endobj 6223 0 obj<> endobj 6224 0 obj<9{nJLV)>> endobj 6225 0 obj<> endobj 6226 0 obj<]\(tw)>> endobj 6227 0 obj<> endobj 6228 0 obj<> endobj 6229 0 obj<> endobj 6230 0 obj<> endobj 6231 0 obj<> endobj 6232 0 obj<> endobj 6233 0 obj<> endobj 6234 0 obj<> endobj 6235 0 obj<|К\(%-;)>> endobj 6236 0 obj<> endobj 6237 0 obj<> endobj 6238 0 obj<g00~] 6)>> endobj 6239 0 obj<> endobj 6240 0 obj<> endobj 6241 0 obj<> endobj 6242 0 obj<> endobj 6243 0 obj<> endobj 6244 0 obj<> endobj 6245 0 obj<> endobj 6246 0 obj<> endobj 6247 0 obj<> endobj 6248 0 obj<> endobj 6249 0 obj<> endobj 6250 0 obj<> endobj 6251 0 obj<> endobj 6252 0 obj<pi5Bs%f}I*R)>> endobj 6253 0 obj<> endobj 6254 0 obj<> endobj 6255 0 obj<> endobj 6256 0 obj<> endobj 6257 0 obj<> endobj 6258 0 obj<> endobj 6259 0 obj<> endobj 6260 0 obj<> endobj 6261 0 obj<> endobj 6262 0 obj<> endobj 6263 0 obj<> endobj 6264 0 obj<> endobj 6265 0 obj<> endobj 6266 0 obj<> endobj 6267 0 obj<> endobj 6268 0 obj<> endobj 6269 0 obj<> endobj 6270 0 obj<> endobj 6271 0 obj<> endobj 6272 0 obj<> endobj 6273 0 obj<> endobj 6274 0 obj<> endobj 6275 0 obj<> endobj 6276 0 obj<> endobj 6277 0 obj<> endobj 6278 0 obj<> endobj 6279 0 obj<> endobj 6280 0 obj<> endobj 6281 0 obj<> endobj 6282 0 obj<> endobj 6283 0 obj<> endobj 6284 0 obj<> endobj 6285 0 obj<> endobj 6286 0 obj<> endobj 6287 0 obj<> endobj 6288 0 obj<ik4B)>> endobj 6289 0 obj<> endobj 6290 0 obj<> endobj 6291 0 obj<> endobj 6292 0 obj<> endobj 6293 0 obj<> endobj 6294 0 obj<> endobj 6295 0 obj<> endobj 6296 0 obj<> endobj 6297 0 obj<> endobj 6298 0 obj<> endobj 6299 0 obj<> endobj 6300 0 obj<> endobj 6301 0 obj<> endobj 6302 0 obj<Z6>hpڞwS l)>> endobj 6303 0 obj<> endobj 6304 0 obj<&)>> endobj 6305 0 obj<> endobj 6306 0 obj<> endobj 6307 0 obj<> endobj 6308 0 obj<> endobj 6309 0 obj<> endobj 6310 0 obj<> endobj 6311 0 obj<> endobj 6312 0 obj<> endobj 6313 0 obj<> endobj 6314 0 obj<> endobj 6315 0 obj<> endobj 6316 0 obj<> endobj 6317 0 obj<> endobj 6318 0 obj<> endobj 6319 0 obj<> endobj 6320 0 obj<> endobj 6321 0 obj<> endobj 6322 0 obj<> endobj 6323 0 obj<> endobj 6324 0 obj<> endobj 6325 0 obj<> endobj 6326 0 obj<> endobj 6327 0 obj<> endobj 6328 0 obj<> endobj 6329 0 obj<> endobj 6330 0 obj<> endobj 6331 0 obj<> endobj 6332 0 obj<> endobj 6333 0 obj<> endobj 6334 0 obj<> endobj 6335 0 obj<> endobj 6336 0 obj<> endobj 6337 0 obj<> endobj 6338 0 obj<> endobj 6339 0 obj<> endobj 6340 0 obj<> endobj 6341 0 obj<> endobj 6342 0 obj<> endobj 6343 0 obj<> endobj 6344 0 obj<> endobj 6345 0 obj<7ըbT[FʉX)>> endobj 6346 0 obj<> endobj 6347 0 obj<> endobj 6348 0 obj<> endobj 6349 0 obj<> endobj 6350 0 obj<> endobj 6351 0 obj<)>> endobj 6352 0 obj<> endobj 6353 0 obj<> endobj 6354 0 obj<> endobj 6355 0 obj<> endobj 6356 0 obj<> endobj 6357 0 obj<> endobj 6358 0 obj<> endobj 6359 0 obj<> endobj 6360 0 obj<\(`6]Z=H)>> endobj 6361 0 obj<> endobj 6362 0 obj<> endobj 6363 0 obj<> endobj 6364 0 obj<> endobj 6365 0 obj<> endobj 6366 0 obj<> endobj 6367 0 obj<> endobj 6368 0 obj<)>> endobj 6369 0 obj<> endobj 6370 0 obj<> endobj 6371 0 obj<> endobj 6372 0 obj<> endobj 6373 0 obj<> endobj 6374 0 obj<> endobj 6375 0 obj<> endobj 6376 0 obj<> endobj 6377 0 obj<> endobj 6378 0 obj<> endobj 6379 0 obj<> endobj 6380 0 obj<> endobj 6381 0 obj<> endobj 6382 0 obj<Ip m6)>> endobj 6383 0 obj<> endobj 6384 0 obj<> endobj 6385 0 obj<> endobj 6386 0 obj<> endobj 6387 0 obj<tVN)>> endobj 6388 0 obj<> endobj 6389 0 obj<> endobj 6390 0 obj<)>> endobj 6391 0 obj<> endobj 6392 0 obj<> endobj 6393 0 obj<> endobj 6394 0 obj<> endobj 6395 0 obj<> endobj 6396 0 obj<> endobj 6397 0 obj<> endobj 6398 0 obj<> endobj 6399 0 obj<> endobj 6400 0 obj<> endobj 6401 0 obj<> endobj 6402 0 obj<> endobj 6403 0 obj<> endobj 6404 0 obj<> endobj 6405 0 obj<> endobj 6406 0 obj<> endobj 6407 0 obj<> endobj 6408 0 obj<> endobj 6409 0 obj<> endobj 6410 0 obj<> endobj 6411 0 obj<)>> endobj 6412 0 obj<> endobj 6413 0 obj<> endobj 6414 0 obj<> endobj 6415 0 obj<> endobj 6416 0 obj<> endobj 6417 0 obj<|Zv$Iaj)>> endobj 6418 0 obj<r\n6ܶ?jhPR[yͦD:8{ˠ\rҬmF0\n)>> endobj 6419 0 obj<> endobj 6420 0 obj<> endobj 6421 0 obj<> endobj 6422 0 obj<^wdS)>> endobj 6423 0 obj<> endobj 6424 0 obj<> endobj 6425 0 obj<> endobj 6426 0 obj<> endobj 6427 0 obj<> endobj 6428 0 obj<> endobj 6429 0 obj<> endobj 6430 0 obj<> endobj 6431 0 obj<> endobj 6432 0 obj<> endobj 6433 0 obj<> endobj 6434 0 obj<> endobj 6435 0 obj<> endobj 6436 0 obj<> endobj 6437 0 obj<> endobj 6438 0 obj<> endobj 6439 0 obj<> endobj 6440 0 obj<> endobj 6441 0 obj<> endobj 6442 0 obj<> endobj 6443 0 obj<> endobj 6444 0 obj<> endobj 6445 0 obj<> endobj 6446 0 obj<b譜Qbt)>> endobj 6447 0 obj<> endobj 6448 0 obj<> endobj 6449 0 obj<> endobj 6450 0 obj<> endobj 6451 0 obj<> endobj 6452 0 obj<> endobj 6453 0 obj<> endobj 6454 0 obj<> endobj 6455 0 obj<> endobj 6456 0 obj<> endobj 6457 0 obj<> endobj 6458 0 obj<> endobj 6459 0 obj<> endobj 6460 0 obj<> endobj 6461 0 obj<> endobj 6462 0 obj<> endobj 6463 0 obj<> endobj 6464 0 obj<> endobj 6465 0 obj<> endobj 6466 0 obj<> endobj 6467 0 obj<> endobj 6468 0 obj<> endobj 6469 0 obj<> endobj 6470 0 obj<YuD)>> endobj 6471 0 obj<> endobj 6472 0 obj<> endobj 6473 0 obj<> endobj 6474 0 obj<> endobj 6475 0 obj<> endobj 6476 0 obj<> endobj 6477 0 obj<.k4={pۦ2Ozk1T[D c wBAG)>> endobj 6478 0 obj<> endobj 6479 0 obj<> endobj 6480 0 obj<> endobj 6481 0 obj<> endobj 6482 0 obj<> endobj 6483 0 obj<> endobj 6484 0 obj<> endobj 6485 0 obj<> endobj 6486 0 obj<> endobj 6487 0 obj<> endobj 6488 0 obj<> endobj 6489 0 obj<u$)>> endobj 6490 0 obj<> endobj 6491 0 obj<> endobj 6492 0 obj<> endobj 6493 0 obj<> endobj 6494 0 obj<> endobj 6495 0 obj<> endobj 6496 0 obj<> endobj 6497 0 obj<> endobj 6498 0 obj<J)>> endobj 6499 0 obj<> endobj 6500 0 obj<> endobj 6501 0 obj< 4=z@i܇_mQaNjV)>> endobj 6502 0 obj<> endobj 6503 0 obj<o\))>> endobj 6504 0 obj<> endobj 6505 0 obj<> endobj 6506 0 obj<> endobj 6507 0 obj<> endobj 6508 0 obj<> endobj 6509 0 obj<> endobj 6510 0 obj<> endobj 6511 0 obj<> endobj 6512 0 obj<> endobj 6513 0 obj<> endobj 6514 0 obj<> endobj 6515 0 obj<> endobj 6516 0 obj<> endobj 6517 0 obj<> endobj 6518 0 obj<> endobj 6519 0 obj<> endobj 6520 0 obj<> endobj 6521 0 obj<> endobj 6522 0 obj<> endobj 6523 0 obj<> endobj 6524 0 obj<> endobj 6525 0 obj<> endobj 6526 0 obj<> endobj 6527 0 obj<> endobj 6528 0 obj<> endobj 6529 0 obj<)>> endobj 6530 0 obj<> endobj 6531 0 obj<AAP)>> endobj 6532 0 obj<暪m)>> endobj 6533 0 obj<> endobj 6534 0 obj<> endobj 6535 0 obj<> endobj 6536 0 obj<> endobj 6537 0 obj<> endobj 6538 0 obj<> endobj 6539 0 obj<> endobj 6540 0 obj<> endobj 6541 0 obj<> endobj 6542 0 obj<> endobj 6543 0 obj<> endobj 6544 0 obj<Qxpl6&Y9K*5GS\)&;F N,Wc )>> endobj 6545 0 obj<> endobj 6546 0 obj<> endobj 6547 0 obj<> endobj 6548 0 obj<> endobj 6549 0 obj<6m_Y"z)>> endobj 6550 0 obj<> endobj 6551 0 obj<> endobj 6552 0 obj<_)>> endobj 6553 0 obj<> endobj 6554 0 obj<> endobj 6555 0 obj<> endobj 6556 0 obj<pWu3\(QRp)>> endobj 6557 0 obj<> endobj 6558 0 obj<\nU%UH2l)>> endobj 6559 0 obj<> endobj 6560 0 obj<> endobj 6561 0 obj<> endobj 6562 0 obj<> endobj 6563 0 obj<> endobj 6564 0 obj<> endobj 6565 0 obj<> endobj 6566 0 obj<> endobj 6567 0 obj<> endobj 6568 0 obj<> endobj 6569 0 obj<> endobj 6570 0 obj<> endobj 6571 0 obj<> endobj 6572 0 obj<> endobj 6573 0 obj<> endobj 6574 0 obj<> endobj 6575 0 obj<> endobj 6576 0 obj<> endobj 6577 0 obj<> endobj 6578 0 obj<> endobj 6579 0 obj<> endobj 6580 0 obj<> endobj 6581 0 obj<> endobj 6582 0 obj<> endobj 6583 0 obj<> endobj 6584 0 obj<> endobj 6585 0 obj<,:e)>> endobj 6586 0 obj<> endobj 6587 0 obj<> endobj 6588 0 obj<> endobj 6589 0 obj<> endobj 6590 0 obj<> endobj 6591 0 obj<> endobj 6592 0 obj<> endobj 6593 0 obj<> endobj 6594 0 obj<> endobj 6595 0 obj<> endobj 6596 0 obj<> endobj 6597 0 obj<> endobj 6598 0 obj<> endobj 6599 0 obj<> endobj 6600 0 obj<> endobj 6601 0 obj<> endobj 6602 0 obj<> endobj 6603 0 obj<> endobj 6604 0 obj<> endobj 6605 0 obj<> endobj 6606 0 obj<> endobj 6627 0 obj<> endobj 6628 0 obj<> endobj 6629 0 obj<> endobj 6630 0 obj<> endobj 6631 0 obj<> endobj 6632 0 obj<> endobj 6633 0 obj<> endobj 6634 0 obj<> endobj 6635 0 obj<> endobj 6636 0 obj<DŌ)>> endobj 6637 0 obj<> endobj 6638 0 obj<> endobj 6639 0 obj<:Aw\))>> endobj 6640 0 obj<> endobj 6641 0 obj<> endobj 6642 0 obj<> endobj 6643 0 obj<> endobj 6644 0 obj<> endobj 6645 0 obj<> endobj 6646 0 obj<> endobj 6647 0 obj<> endobj 6648 0 obj<> endobj 6649 0 obj<> endobj 6650 0 obj<> endobj 6651 0 obj<> endobj 6652 0 obj<> endobj 6653 0 obj<> endobj 6654 0 obj<> endobj 6655 0 obj<> endobj 6656 0 obj<> endobj 6657 0 obj<> endobj 6658 0 obj<> endobj 6659 0 obj<> endobj 6660 0 obj<YOgpU )>> endobj 6661 0 obj<> endobj 6667 0 obj<! )>> endobj 6668 0 obj<> endobj 6669 0 obj<> endobj 6670 0 obj<> endobj 6671 0 obj<> endobj 1 0 obj<> endobj 2 0 obj<> endobj 3 0 obj<> endobj 4 0 obj<> endobj 5 0 obj<> endobj 6 0 obj<> endobj 7 0 obj<> endobj 8 0 obj<> endobj 9 0 obj<> endobj 10 0 obj<> endobj 11 0 obj<> endobj 12 0 obj<> endobj 13 0 obj<> endobj 14 0 obj<> endobj 15 0 obj<> endobj 16 0 obj<> endobj 17 0 obj<> endobj 18 0 obj<> endobj 19 0 obj<> endobj 20 0 obj<> endobj 21 0 obj<> endobj 22 0 obj<> endobj 23 0 obj<> endobj 24 0 obj<> endobj 25 0 obj<> endobj 26 0 obj<> endobj 27 0 obj<> endobj 28 0 obj<> endobj 29 0 obj<> endobj 30 0 obj<> endobj 31 0 obj<> endobj 32 0 obj<> endobj 33 0 obj<> endobj 34 0 obj<> endobj 35 0 obj<> endobj 36 0 obj<> endobj 37 0 obj<> endobj 38 0 obj<> endobj 39 0 obj<> endobj 40 0 obj<> endobj 41 0 obj<> endobj 42 0 obj<> endobj 43 0 obj<> endobj 44 0 obj<> endobj 45 0 obj<> endobj 46 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 47 0 obj<>stream +"W +cfmvy-:L%$oȗY_֞fמozd0L-mD8\3L=^v&>۹] u%ib6'k?hEU6pakijVzW`#gE53FG"y^J\} 6q;VFpo@wNp}DH J HߨgH(z~zG C;'OA!6 +~ E ^/nS.]t k24;#f;C|OA.}R7{T/[!u\%$'{]nYћ '.aϥ2~ThxqG!gBx! ZtJj{ -qQ321ꡥ= V1<|fCyz™~ԪG25/ayx')m;2%e[N.ߊ5zaMl)81rè4-c" +sG agрWH.RKXʤK3a]ɁĺZ譃);QO5/S)[dn~"jr=\K +d!c%IŐD-5ҎF9"]\D,Cf(A֡l^! Ay%GG!xWBGМy6 +nQWvMP}o&;5+aR*@rw6Ni E, E{4Q)Ӫ1 zͩ"Q1!jq1 ,h"A؁;frVy5HR,T̗IJ0G˜dkQRX~0/Dx\Tf YʫT2~EEC!c)-=H-ò* yY鯞YOI)b%PG2"6ThIz_7~H% +,eEW*X!Jj0TLjDKJu²>^)r(&zoֆUT"74(5zG3X;uXNʜ δQd^P^hS($7P;(p)xIhqkꠔ8bFiq7c p +h'G}،<+ +#kj1!{DqMإQuPqzfp("amƒ[i^)<ϰk0S9:)ujG ve[dXT;~A]5j =.6dM1#i\19 ӹQ>r܌8%g|AN%xRZl:lX!ypMiSCS=Ϸ"EyjcWdLZvu(kf9ĚHPkµ cSZ^׮C[{Wvֈ:[Nd#j.[XX/1wQ33CYoW09sOgBӶigPh9ѻ @+(' 5Wk⩗;tAz@~-PUʙIFmec6!^/OR6W=Q>۴k>^xpšXC :ML[c®wMb sؕ&0-3r1R2i1q`x +endstream endobj 48 0 obj<> endobj 49 0 obj<> endobj 50 0 obj<> endobj 51 0 obj<> endobj 52 0 obj<> endobj 53 0 obj<> endobj 54 0 obj<> endobj 55 0 obj<> endobj 56 0 obj<> endobj 57 0 obj<> endobj 58 0 obj<> endobj 59 0 obj<> endobj 60 0 obj<> endobj 61 0 obj<> endobj 62 0 obj<> endobj 63 0 obj<> endobj 64 0 obj<> endobj 65 0 obj<> endobj 66 0 obj<> endobj 67 0 obj<> endobj 68 0 obj<> endobj 69 0 obj<> endobj 70 0 obj<> endobj 71 0 obj<> endobj 72 0 obj<> endobj 73 0 obj<> endobj 74 0 obj<> endobj 75 0 obj<> endobj 76 0 obj<> endobj 77 0 obj<> endobj 78 0 obj<> endobj 79 0 obj<> endobj 80 0 obj<> endobj 81 0 obj<> endobj 82 0 obj<> endobj 83 0 obj<> endobj 84 0 obj<> endobj 85 0 obj<> endobj 86 0 obj<> endobj 87 0 obj<> endobj 88 0 obj<> endobj 89 0 obj<> endobj 90 0 obj<> endobj 91 0 obj<> endobj 92 0 obj<> endobj 93 0 obj<> endobj 94 0 obj<> endobj 95 0 obj<> endobj 96 0 obj<> endobj 97 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 98 0 obj<>stream +W! +Nl$/SXRIݻy}ܔ-&2v6w2[s㡽U_:iwGoj,1pC7|Xb6#j}2~#FtTced6.>xUGu=>r$m1I?M_kbj__~@F>Bg*qB5 QvQ2k +ؐIXIՔp6- /}~S?,/3_Ėz+܁ _<5 s@4I;Bf&n] ^u' >,L~oqm{#/Dr< EOՊ>4} +ZخKrzcaQ"Z~,G~&B1$63Oc03bb?~`1 +jlj{Pyeq\V(&)t &eEѦD*xhcnDGPUYo|ĨY(Ԁ7q`؂%/gtyr~J^^zWy!tg' 86ț$[d὏3*tAzP-GrNˤN3 +JTܹcLK]$ )!Cxzāỻg֪ѩ_`- +֗|HᏠt6ۛ4繗 s1%Ѐڃfzx&lU2 'O+T43_[+-s*)^~ݕ eAG[rٝ4Xt% /5ֳ@#$VP:$hg8AFJxOSS㾰/(*e`fb4 >QCAftuF2.VOSWNDUtu0;Ń nx\Dw'0\+kߘs +#C»ύ,!YW'9|x̳LcѼuW &I4XC8AVpT)%7~"3-gVJYoIgj.asj9c"tG+D5W/i XN4Of}-PI1xz૭T,:0Z̝m2z\)c,NV&2 :?wZh[@"> endobj 100 0 obj<> endobj 101 0 obj<> endobj 102 0 obj<> endobj 103 0 obj<> endobj 104 0 obj<> endobj 105 0 obj<> endobj 106 0 obj<> endobj 107 0 obj<> endobj 108 0 obj<> endobj 109 0 obj<> endobj 110 0 obj<> endobj 111 0 obj<> endobj 112 0 obj<> endobj 113 0 obj<> endobj 114 0 obj<> endobj 115 0 obj<> endobj 116 0 obj<> endobj 117 0 obj<> endobj 118 0 obj<> endobj 119 0 obj<> endobj 120 0 obj<> endobj 121 0 obj<> endobj 122 0 obj<> endobj 123 0 obj<> endobj 124 0 obj<> endobj 125 0 obj<> endobj 126 0 obj<> endobj 127 0 obj<> endobj 128 0 obj<> endobj 129 0 obj<> endobj 130 0 obj<> endobj 131 0 obj<> endobj 132 0 obj<> endobj 133 0 obj<> endobj 134 0 obj<> endobj 135 0 obj<> endobj 136 0 obj<> endobj 137 0 obj<> endobj 138 0 obj<> endobj 139 0 obj<> endobj 140 0 obj<> endobj 141 0 obj<> endobj 142 0 obj<> endobj 143 0 obj<> endobj 144 0 obj<> endobj 145 0 obj<> endobj 146 0 obj<> endobj 147 0 obj<> endobj 148 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 149 0 obj<>stream +q=+ЊG zQ +nރ\,L޸fdtjDl*űxZVܦ̀K|os|2O`EO*;{H[-ķAs +Gd'a` r?9l3* +S!#Ybw1PLepT +HOhiF +[֫[ ]ZS$ |囹0`OF/_ga3aCξz@KIHTcAǮs3~^j&F4uWa`{YMNel/Ajjb]оVpuɷ>ou6cAU"`ȩ$<sLL/#FضJ1EOh[6WAȻX>ZO୒An᝞3EA*^ IČ2JT:X)ws>bJ!.i?}] lMe8"lq;*~%\`+_7/yW-[؛?:8TrRyhG/a]֨ +܆@YlFޡYЫ2mMu 9e :wn_|x \p+ mqdkȭ7>,ZOPbMhs[ͫM -I 'd]RET%nN6mg_Im1h_ַn黱Rw2jm ȍ\vcX73r$%9 l1@f8˱@9You!0_^mk$oC %szrW>ds`}|8z<ꋥ3;UJm7s%YN4I!HdKM?ZjFmDwi20lBX2r6CS5Ul?D.\$4+d7d4M+V_%ssjX k1 +;n)ZSax!ű",RR;⨮v^e cMvhƗn8"HMO-{\0}PJai1r~]ΎK H ;yXm 6*B)^Ug5<\p[ֱZ+[\A̩8{b6w^f iQ2/hw-+¿TG>S< Qw*1c7$ u1 -(uI^r w +8Ԕv%dxN%#-bGn k8z>['2wd\¹ u:Ө/w8h U[Y*FoC-I<~Yt0zx*/mH\EV#Ov{a&W[ȹF0"wv`b* 0Q$/Nj]=6Q;[ &-7Zyw=o.2(\T$J zrNaʈ̀/ّ6m4 J8!xSP"~#&XZӻ=1@h*ssLɗ*B3Y~ۈd#hFU daJ^*$ue1LrU.bŗbAT$8Լժ6Rb~ç7a>cuqxMtnjmM\}7_e?ӊGF + HoUrֳ@d¨`C>I޿ 3|}B">y]2 b($#}G>cM0eLIT$X^X{O@IߢJ`;N+V6N|*\R$M:[R0O!)@6|阓kzYB\m Fz]d<DI7b,9`hBL?iyw`v>2Yu+lfK nlhQџ +` +endstream endobj 150 0 obj<> endobj 151 0 obj<> endobj 152 0 obj<> endobj 153 0 obj<> endobj 154 0 obj<> endobj 155 0 obj<> endobj 156 0 obj<> endobj 157 0 obj<> endobj 158 0 obj<> endobj 159 0 obj<> endobj 160 0 obj<> endobj 161 0 obj<> endobj 162 0 obj<> endobj 163 0 obj<> endobj 164 0 obj<> endobj 165 0 obj<> endobj 166 0 obj<> endobj 167 0 obj<> endobj 168 0 obj<> endobj 169 0 obj<> endobj 170 0 obj<> endobj 171 0 obj<> endobj 172 0 obj<> endobj 173 0 obj<> endobj 174 0 obj<> endobj 175 0 obj<> endobj 176 0 obj<> endobj 177 0 obj<> endobj 178 0 obj<> endobj 179 0 obj<> endobj 180 0 obj<> endobj 181 0 obj<> endobj 182 0 obj<> endobj 183 0 obj<> endobj 184 0 obj<> endobj 185 0 obj<> endobj 186 0 obj<> endobj 187 0 obj<> endobj 188 0 obj<> endobj 189 0 obj<> endobj 190 0 obj<> endobj 191 0 obj<> endobj 192 0 obj<> endobj 193 0 obj<> endobj 194 0 obj<> endobj 195 0 obj<> endobj 196 0 obj<> endobj 197 0 obj<> endobj 198 0 obj<> endobj 199 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 200 0 obj<>stream + )FƳj ([WYδWDn{B욮yi [dAs] "Aux]`>f*XN{iTP̡*%qN*5Ϟ rIgc=KJ4F•X5b,k4ti4#^ (E[5!/^>bzƼ$&.C$qU{Ŏ7iud{X*Ѓ Jv;C+d0&4qKI!,"OsYoGB%14duq./XۮSe[b\.|"$Jg M;Y5ۍN)7H(OXğR~ܨhK0yՃgЙNlR=X o,=mڒ +O,\c 1k012s*'Moxb2 +hN.\'߹up64bOn(J̺.pں]]&ڔ71:#JW)݄ZSC`vھdweV!CVme68I0( R"k-n[>faf \~=mTrX& !eV-،l3M"{ik0lN"MRe $oߖ=q@)V0l Jw&M'FJb{UO!<& ʍG8N"2=Ňܽ-miUp*򭕟哇aa7ŞLq5=zt`hw0#Hז e u仂 +z0ÏKBc wDYvEniO/˫j*j@gak+1M!*Ƌ^?4llcL8NLT>Pυtn!o jol WgaH)_DzF/tfS_A%V·fAvTܸ̙7Y"1!8>8mYX@ː/Lj3-eh-Չ0W&̪b9<` K|fO)gu Di" pae)=2qGa}J[mzSǧjSwg ^FG7'O .3:HϞiGxNFfϠ4a`]y˥R_Ak*ݽUMur{ŅX*+uE/w/9.Ŝ9^*_>'p>UeN|$_o!zgS3qzEIcOeɉ; *eMa?-Y/]^.( +"58*@k_J3ڿg1W:,lnag6.eظ=u[JGo OT̝'2O__&p PZ$}jO|/J7ǃ]"4Ae8n|RTԽwED1ɍ3mKelgg> z3@3E51pқa GS, b+ ]D +z-ۊnL Bj:]ΐ;Y!ءr~(sOi&,uߥᖀ%r4䝉ZϤ1k;!Wv!+A-T⬩ +r +uIgT$z +endstream endobj 201 0 obj<> endobj 202 0 obj<> endobj 203 0 obj<> endobj 204 0 obj<> endobj 205 0 obj<> endobj 206 0 obj<> endobj 207 0 obj<> endobj 208 0 obj<> endobj 209 0 obj<> endobj 210 0 obj<> endobj 211 0 obj<> endobj 212 0 obj<> endobj 213 0 obj<> endobj 214 0 obj<> endobj 215 0 obj<> endobj 216 0 obj<> endobj 217 0 obj<> endobj 218 0 obj<> endobj 219 0 obj<> endobj 220 0 obj<> endobj 221 0 obj<> endobj 222 0 obj<> endobj 223 0 obj<> endobj 224 0 obj<> endobj 225 0 obj<> endobj 226 0 obj<> endobj 227 0 obj<> endobj 228 0 obj<> endobj 229 0 obj<> endobj 230 0 obj<> endobj 231 0 obj<> endobj 232 0 obj<> endobj 233 0 obj<> endobj 234 0 obj<> endobj 235 0 obj<> endobj 236 0 obj<> endobj 237 0 obj<> endobj 238 0 obj<> endobj 239 0 obj<> endobj 240 0 obj<> endobj 241 0 obj<> endobj 242 0 obj<> endobj 243 0 obj<> endobj 244 0 obj<> endobj 245 0 obj<> endobj 246 0 obj<> endobj 247 0 obj<> endobj 248 0 obj<> endobj 249 0 obj<> endobj 250 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 251 0 obj<>stream +HuM#Z%: ֽ.Z_֊ms qZrhK !c沛\{ko jZb_*Bt5LjJpx=R/UdB/Nq+X* +#WärKo/UnȗR=*&ϪTZȰWvɶqGŅd c&JŒ+SŕPHuDfΌ~mr3դ6f9"fûo (P:vFa'H3gD) wJuaj;f72/BoHI⨰=2h.E3>>Vjȳ- U"u @KJ?q^Mӥܽv~ģghM:2/z ?1[l?8^1F$rr 83,MqEj{+UtG++H+PURs69k7C˰ :e']\DF%~"/+$<ّ0'Y[] +!`dPWVw2$p"J}ljݬleU~#TRHA=q`T$A0OF׀L-ECaB<'i$(r!p9TPSki0vp>'Z:B]#1SA5yP1ZUˉ`FT4Kau3¡l7=g^dxfI~O|rYa_tI6P(IeaM^Ps "Dn*K,rv"R4DMRi#[ +L!|Ύrb k쟄_biK 1Zr̶u > endobj 253 0 obj<> endobj 254 0 obj<> endobj 255 0 obj<> endobj 256 0 obj<> endobj 257 0 obj<> endobj 258 0 obj<> endobj 259 0 obj<> endobj 260 0 obj<> endobj 261 0 obj<> endobj 262 0 obj<> endobj 263 0 obj<> endobj 264 0 obj<> endobj 265 0 obj<> endobj 266 0 obj<> endobj 267 0 obj<> endobj 268 0 obj<> endobj 269 0 obj<> endobj 270 0 obj<> endobj 271 0 obj<> endobj 272 0 obj<> endobj 273 0 obj<> endobj 274 0 obj<> endobj 275 0 obj<> endobj 276 0 obj<> endobj 277 0 obj<> endobj 278 0 obj<> endobj 279 0 obj<> endobj 280 0 obj<> endobj 281 0 obj<> endobj 282 0 obj<> endobj 283 0 obj<> endobj 284 0 obj<> endobj 285 0 obj<> endobj 286 0 obj<> endobj 287 0 obj<> endobj 288 0 obj<> endobj 289 0 obj<> endobj 290 0 obj<> endobj 291 0 obj<> endobj 292 0 obj<> endobj 293 0 obj<> endobj 294 0 obj<> endobj 295 0 obj<> endobj 296 0 obj<> endobj 297 0 obj<> endobj 298 0 obj<> endobj 299 0 obj<> endobj 300 0 obj<> endobj 301 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 302 0 obj<>stream +FՔ8X;8KZ_b]cXi (IQGP ^pS^|3L'i2iwh I_B&D lz%fPݤDRO;iMMy$. LK\!c"֤A%d5ʦyO S.E݃'F"7:-Aʬ%a-%"9t94lblI??Y57C6R@xAnи2djG4ڋ]x XS3\&u"O'|yqEDnM22-A{퍭QG"Ȃ &ί6N0C뢊]X 8ab?ٝ8߁M0""l(Hw@ rlJOq#ƒO%/l\PJ[`H]`{he}D1u&x`$"㈽U͸?< +{}ȃjyRO +޽ KXY>% +LRh^(: PCJe# ;џHt4;5 nx VX?[ +'^[t"~t*uH*:#݉h ۚ.4rƕF*{r(p$0S)90іkp?Kpqx5B9Q~Ob{NjEOP] /޻g ƧVMsLzs'Œ֎#*QqB2 $SѓZkkwB8g@1i%q4B_$ @/QNݓpl[A5m8hw[?Ut|[Zt{WNy*cCލ߸eLb- j#eLY )ֳQMZn)8{ڟiygځ t[)$@SQ -u^=[l*~iM CEz' vc_XJRVl,;L Ę*gLDPc  *S׺:f3^> +RQܻZ'̳p3T'$Nv`_(]| !;t;%z +Xeq-mAǜ + +DT.7ptZ `l" +\H!ftôdLj]>7Ne$Q$Zhs"*a\kΛ%/MMZΪݺ9tz-Ϥb4Džr}D,{$C)hΣ⬯d%ReZ'MpH};3TygyP Y.ջym1J__ t 2{ u@#ԝ=>2j1Rnx~ABr̝2GT98Ȩ'{BOv;ՑA:!%0?]mjxփgbP$u,lMjZ!mb*o Ru 7b4_>r/4)prZ6zJyz$$v'0K=WLlgҚw .`0Qlwfō^C⫂0 8I BN_Eh1ȵBĤ斒mαu:OE TƲT +endstream endobj 303 0 obj<> endobj 304 0 obj<> endobj 305 0 obj<> endobj 306 0 obj<> endobj 307 0 obj<> endobj 308 0 obj<> endobj 309 0 obj<> endobj 310 0 obj<> endobj 311 0 obj<> endobj 312 0 obj<> endobj 313 0 obj<> endobj 314 0 obj<> endobj 315 0 obj<> endobj 316 0 obj<> endobj 317 0 obj<> endobj 318 0 obj<> endobj 319 0 obj<> endobj 320 0 obj<> endobj 321 0 obj<> endobj 322 0 obj<> endobj 323 0 obj<> endobj 324 0 obj<> endobj 325 0 obj<> endobj 326 0 obj<> endobj 327 0 obj<> endobj 328 0 obj<> endobj 329 0 obj<> endobj 330 0 obj<> endobj 331 0 obj<> endobj 332 0 obj<> endobj 333 0 obj<> endobj 334 0 obj<> endobj 335 0 obj<> endobj 336 0 obj<> endobj 337 0 obj<> endobj 338 0 obj<> endobj 339 0 obj<> endobj 340 0 obj<> endobj 341 0 obj<> endobj 342 0 obj<> endobj 343 0 obj<> endobj 344 0 obj<> endobj 345 0 obj<> endobj 346 0 obj<> endobj 347 0 obj<> endobj 348 0 obj<> endobj 349 0 obj<> endobj 350 0 obj<> endobj 351 0 obj<> endobj 352 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 353 0 obj<>stream +?hoƺ8zpM.3oW`@![{!fUVa+l+fFZqQt$6Z;o R !.' k9ϥ:6EN*Oap1d< F" SQUĶ$_#`]=n?ogbB;I9'T:ң m8% -Hf+`/~n0ZzOm( ~0{̜`#sI #cS sSX浯4TR:Fj?iR&vbIj0늿R(Lʗ5=PtKmo+m2/r m+R " ̼)mnd y2J'v{Q񉇎TSZ:&T>, 3$bEud $ `ˊDBW;?ǘUc]$YkJ͈B6)jq %b.6hScI:Pn17Ȥv4mնAlۿ#ҁʙt04̿ +r)}RɍPJ{>_9}S H#{TS}?Vl#'Qu;{͓  +Gf7+ߊYO=/BZ%p?,Z p`1VSryd 77=b};MU.F.ɆbKeIPB.&\2؏kR;vG[(A {K4dD@(NṿI4pVjĪDTLi;th?OhՄ 2S_ +(˓/*Jǻ$rAoYbSc@P!Ub(]נ'5QGuiR40˄!m3vj3JGnV&0nU3 W!]Y(͡[GB j*uTxêeSya*O]>o*0gfBjNNj]7DcJ9wú|ШX6;#2E )_HmU_/={aYC^ M;G nCj0N_oՉ!iqCp8d꽁,X6Z,(}09 CW[.wn%G'RR=G5Dw=pR_^]%n#JXg4+/RyZ0' +"!NQ7~c h㈼ڞc3Ľ82XXAu!;IĹPw4_ڎ>'0 +nJ\GZS/1mh>Gy3G rj +b+aM E)*&8͸o`קe AZ (DevhO'h1mÉf +endstream endobj 354 0 obj<> endobj 355 0 obj<> endobj 356 0 obj<> endobj 357 0 obj<> endobj 358 0 obj<> endobj 359 0 obj<> endobj 360 0 obj<> endobj 361 0 obj<> endobj 362 0 obj<> endobj 363 0 obj<> endobj 364 0 obj<> endobj 365 0 obj<> endobj 366 0 obj<> endobj 367 0 obj<> endobj 368 0 obj<> endobj 369 0 obj<> endobj 370 0 obj<> endobj 371 0 obj<> endobj 372 0 obj<> endobj 373 0 obj<> endobj 374 0 obj<> endobj 375 0 obj<> endobj 376 0 obj<> endobj 377 0 obj<> endobj 378 0 obj<> endobj 379 0 obj<> endobj 380 0 obj<> endobj 381 0 obj<> endobj 382 0 obj<> endobj 383 0 obj<> endobj 384 0 obj<> endobj 385 0 obj<> endobj 386 0 obj<> endobj 387 0 obj<> endobj 388 0 obj<> endobj 389 0 obj<> endobj 390 0 obj<> endobj 391 0 obj<> endobj 392 0 obj<> endobj 393 0 obj<> endobj 394 0 obj<> endobj 395 0 obj<> endobj 396 0 obj<> endobj 397 0 obj<> endobj 398 0 obj<> endobj 399 0 obj<> endobj 400 0 obj<> endobj 401 0 obj<> endobj 402 0 obj<> endobj 403 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 404 0 obj<>stream +dK!sd)O4ͽ^xUj?bD#h"\ "?>wf8sZ-}3M':Z8lBo4rz-a!~Z2! |j_8.I( >^:X"@!H%B%>r⑪,}g6ƬcT'A04 Nf78PT"( 5SKrܣZ-_MissC^q\K +w xTV%'A$G#{|.+O IF.Cެ,3Hxr` vWO7cKRKE=9eCu{f KT.2uE/5OD=ߗ2qbCjXu٦yUs߷PMƗ6˼@Ee5M!Ӓgrji>hO^\3ňDOIԿSpt~ g5/~4ULA7{ODދ Y. $Ld*lGg*&G,n)cl}4bӖ&+\'k<|wd;T{`"G!l)I~B5U/7Uz2 ;?e/Wapx|&ÙN'pKEhx_Ch?05_O`|iagx:ӈ *FC!8d+Rr,QI|ݩsm5nSvM҈^_^Y9Ɩ*bg +ݲf4mA- +xOg\ݳHX|pc{LwSrٰ)43C֥cVcd#2>riY8>}_ဪ6*c1)gOQHYg%L((";ۊQ@ZfMTvAF}F 'a#,)%wna1~W X:ÄόnܧAoe_tx~C"W9hcda1=;wzl1)A r%{  +ef|k˃ RX1t+Ò$45@CɩwW/6jotՎ   :~=4qv5[qNJ9j܆ (kS^iN1²>fzA5 +RMk4 e :I]hipQ!JjLG &c$(ĕ1M/c\ -U$#fjiV"2 A6PL.NwWvҢ]b\osM?¤h5$faCQʷ*KA<-&8c\fl0*_g"yzyQ^yo MGX~)(snR{:^Yx"1"78mF5i3d' =ndHr0|eh_Ľ'>~{R)]Q3hZacI^E!OcWtSBnFm8Cm0qrҊq":55ߵw17'F>{>pķ,<aVMB0{ xXyO觝bks e2A +υGW2%ӑZH*visϿ8X@3D kxᲵz + PG\ؚEz]m2Kz&zG{pʎ,'JK4~~zVxý+n +K> endobj 406 0 obj<> endobj 407 0 obj<> endobj 408 0 obj<> endobj 409 0 obj<> endobj 410 0 obj<> endobj 411 0 obj<> endobj 412 0 obj<> endobj 413 0 obj<> endobj 414 0 obj<> endobj 415 0 obj<> endobj 416 0 obj<> endobj 417 0 obj<> endobj 418 0 obj<> endobj 419 0 obj<> endobj 420 0 obj<> endobj 421 0 obj<> endobj 422 0 obj<> endobj 423 0 obj<> endobj 424 0 obj<> endobj 425 0 obj<> endobj 426 0 obj<> endobj 427 0 obj<> endobj 428 0 obj<> endobj 429 0 obj<> endobj 430 0 obj<> endobj 431 0 obj<> endobj 432 0 obj<> endobj 433 0 obj<> endobj 434 0 obj<> endobj 435 0 obj<> endobj 436 0 obj<> endobj 437 0 obj<> endobj 438 0 obj<> endobj 439 0 obj<> endobj 440 0 obj<> endobj 441 0 obj<> endobj 442 0 obj<> endobj 443 0 obj<> endobj 444 0 obj<> endobj 445 0 obj<> endobj 446 0 obj<> endobj 447 0 obj<> endobj 448 0 obj<> endobj 449 0 obj<> endobj 450 0 obj<> endobj 451 0 obj<> endobj 452 0 obj<> endobj 453 0 obj<> endobj 454 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 455 0 obj<>stream +^9- 􏭟#0ܸ?~ib`z,+Iڧ9] +v1*/*aE %dN˨@ͣŢFSlԜT1GCNml?Pxgi:|S\ "GgqX8&_mА& +\̖t +@ +vWY +FQšd ՈvuD z/qYagbaݍ]" +ѹ/QI48\Q`lEUXv#'ۣ(<"l"2WίIoL+C§h_g.15f$(H#4 pf=<#+A 撺BrJӁ \+̼:2Ԭ Oo'0¬ENJR( CԔ?+zYP7Uu "X+}l8&jB}-'I$Kzp ;! "6?b=ɐA l)}K)%jh%Y &a4nc\(pgDE U< +.F*MSK0t{oXGQ B w>KxXw]K+2P|8uLYkXkY@آK(+ǔZHW/iٞOYEQcjt_緫m-@tLoJcٿJbɹi/zS9\ WyvA;nLp!#UW X:%X/nGPexkjD5-92"6CarN$|-u`ZQ6OQ(-yd-]oۥfa?T)7ld@P@kZ.Ctp-1ӑkaxPFb6r9o-D]cIg Gp›5Fo~ .sl7ZϮGhQdğ|>t|-#^q&I7m,t&i+rV<PkRjӭCT +U@p.)#/ˈ\-Q)vr_02ev:b_&u 5cXŃ"(On+kƐ`|Dxb[~t&c G\ùgx[BQfK9q)G?^Lm2GM::ޛXNLߦuۙ10iwZy#ʹ԰eKSɹrēbCi{_\%j([>8̱YBѭ~2x+FS5xvTH̰"i#-yǬDɥQԭ~V GyIg>)1;&ds68!Aa\ 5\^z +ЮDGMCOAt/$ѼtDzkZ[~hSHgnևhz;@sٙ?7' T-}Тbty:ԉzdE7_D +endstream endobj 456 0 obj<> endobj 457 0 obj<> endobj 458 0 obj<> endobj 459 0 obj<> endobj 460 0 obj<> endobj 461 0 obj<> endobj 462 0 obj<> endobj 463 0 obj<> endobj 464 0 obj<> endobj 465 0 obj<> endobj 466 0 obj<> endobj 467 0 obj<> endobj 468 0 obj<> endobj 469 0 obj<> endobj 470 0 obj<> endobj 471 0 obj<> endobj 472 0 obj<> endobj 473 0 obj<> endobj 474 0 obj<> endobj 475 0 obj<> endobj 476 0 obj<> endobj 477 0 obj<> endobj 478 0 obj<> endobj 479 0 obj<> endobj 480 0 obj<> endobj 481 0 obj<> endobj 482 0 obj<> endobj 483 0 obj<> endobj 484 0 obj<> endobj 485 0 obj<> endobj 486 0 obj<> endobj 487 0 obj<> endobj 488 0 obj<> endobj 489 0 obj<> endobj 490 0 obj<> endobj 491 0 obj<> endobj 492 0 obj<> endobj 493 0 obj<> endobj 494 0 obj<> endobj 495 0 obj<> endobj 496 0 obj<> endobj 497 0 obj<> endobj 498 0 obj<> endobj 499 0 obj<> endobj 500 0 obj<> endobj 501 0 obj<> endobj 502 0 obj<> endobj 503 0 obj<> endobj 504 0 obj<> endobj 505 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 506 0 obj<>stream +RBqzlvo˙*?j6Z0w(Z:螒Q7.}{X,KO3K;`gZhB&KE$7NY6{ĖIy$agiJ/h,o]fi1Z +#/ +bȿQGVۧTo^\7}r< R Ю'1.Fvh{ + rGXtUoF+dIROmnq; X0Yp"K?Qw)R#2BUd,k"T+ϋstM9:dEr[#ᛀhB:fdz^e`,=_VٝqV$̪$2(l>82YR3mtѲD|hxczKf- sE\'c_^_GYQ+ ~FnΓoI-%ό_JN X2A\FĘ  * SN<$~#.B +[N8铨0?Z{bKtYr 8_U!Q(H4'9PB=v nzz}ksR}GDh ~YyE|@Ty +vkb?_ lnR:~e.8*Z3`1#G>1Uu +{) +OSӒVe*[B@}%Ԋ'woa87NQuQ.>?èz†) ya'thMCCDxvօSQafx\نPM,MFfy}ѡ@rIfe!X_ b ًĝD +Mbi-n%7D!1S.TnV_}8͕p7jxS'9F!lnf%)¤LWcjzitG'?/==1 fX9-]7:.=H2b@SAIMK輨8 C o#CRKL !WGX'mޜ&%R*RkȴLAGyݬƈ^#zo/)0I"#s/#3gDEIk/JA=z"|OQܸ^~M+\iӘOHncD+{O?Ra10D>ddL&I&/@/fi(̢$-|A9|8}2Q\_Bڹ6vh!ӭCa}3ΰjuLvSJ\H?DT%d݈Ԓ7m=,49OF(`wj!# Ͽ W2L5=sZC;lMaJ?QҠ1tHVo}2.{tN|'~P~,\l3?_xiTKZr58BE[+O.X+(w3:GЈ3v%=!ƅ4GH?UPƉE mZQvkP]BKe+DșGrVX|.{,A4\s\d3 Fdre!a~ լy慥4@IB!e ^l_ [2݆ +endstream endobj 507 0 obj<> endobj 508 0 obj<> endobj 509 0 obj<> endobj 510 0 obj<> endobj 511 0 obj<> endobj 512 0 obj<> endobj 513 0 obj<> endobj 514 0 obj<> endobj 515 0 obj<> endobj 516 0 obj<> endobj 517 0 obj<> endobj 518 0 obj<> endobj 519 0 obj<> endobj 520 0 obj<> endobj 521 0 obj<> endobj 522 0 obj<> endobj 523 0 obj<> endobj 524 0 obj<> endobj 525 0 obj<> endobj 526 0 obj<> endobj 527 0 obj<> endobj 528 0 obj<> endobj 529 0 obj<> endobj 530 0 obj<> endobj 531 0 obj<> endobj 532 0 obj<> endobj 533 0 obj<> endobj 534 0 obj<> endobj 535 0 obj<> endobj 536 0 obj<> endobj 537 0 obj<> endobj 538 0 obj<> endobj 539 0 obj<> endobj 540 0 obj<> endobj 541 0 obj<> endobj 542 0 obj<> endobj 543 0 obj<> endobj 544 0 obj<> endobj 545 0 obj<> endobj 546 0 obj<> endobj 547 0 obj<> endobj 548 0 obj<> endobj 549 0 obj<> endobj 550 0 obj<> endobj 551 0 obj<> endobj 552 0 obj<> endobj 553 0 obj<> endobj 554 0 obj<> endobj 555 0 obj<> endobj 556 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 557 0 obj<>stream +0  :mpƊ!]%qHH U!1#eaݶ/dD 0Ly-ҪB5yKCT5L-Tq[.Fקۄ-LWmNS?%\ vC0ERxюw\8<(^l2c#J@4 NO6BYyX>EhۆwWjJ@w((QGJׄ +r0D$d0Rz>^2VEwYķ qoq;)P$)`N}ri8Izl9#R.fk9?8[<{x!EySYHozuשQ)0_v0UJZ| +t4K+cwCS_v2°QDgR` z%g5W X;s^WS4A)Rשi3Xay.z爒 w[lZWWV9 +zOTȉ(*6µ;iFffl3n#9g*x(ݵCϚ9'I"4v74keJp򻮷ZdL!eYw7nA=c9d$~`8t7J2[~5U~Yr,}9n̠?7&ube54}jNByIVCCp4* Ԝⶐ/U:[ +E 5F4 4'"70+<77GgZH36&HqMHqsi :b[O{zyg8jA!\,cW"\,T2@+GERU߾{EO=jIuVT:c(~k2b-cHK?`BN5(L +̓Nս/9xR1rTr2Ԇ Y&Gz~H{Au=@O_^nt[N<;Ѭ@*iuA^*8XX@HMc`$\_:9o)]Su/Koe* ︢(A MjXgLTBo_]⤸b 'x_JLZ +C>ufAJ^j4]f:͓3:"i[}$&~L[*ϵSUۻ|GW.kq7ʯ"Ls[ ;~efj""ͫ t[r ٜVQmݐa dxP?(Ł6RbK) *f].}NI 4Zg|Pmͩ-4#IHy +5!%?i֠hpVN<{tF/]Bwx*b^oֲ؛3aȯ +Ʋ4q'QS0֜ Nd1nù=Y0GOK!z> endobj 559 0 obj<> endobj 560 0 obj<> endobj 561 0 obj<> endobj 562 0 obj<> endobj 563 0 obj<> endobj 564 0 obj<> endobj 565 0 obj<> endobj 566 0 obj<> endobj 567 0 obj<> endobj 568 0 obj<> endobj 569 0 obj<> endobj 570 0 obj<> endobj 571 0 obj<> endobj 572 0 obj<> endobj 573 0 obj<> endobj 574 0 obj<> endobj 575 0 obj<> endobj 576 0 obj<> endobj 577 0 obj<> endobj 578 0 obj<> endobj 579 0 obj<> endobj 580 0 obj<> endobj 581 0 obj<> endobj 582 0 obj<> endobj 583 0 obj<> endobj 584 0 obj<> endobj 585 0 obj<> endobj 586 0 obj<> endobj 587 0 obj<> endobj 588 0 obj<> endobj 589 0 obj<> endobj 590 0 obj<> endobj 591 0 obj<> endobj 592 0 obj<> endobj 593 0 obj<> endobj 594 0 obj<> endobj 595 0 obj<> endobj 596 0 obj<> endobj 597 0 obj<> endobj 598 0 obj<> endobj 599 0 obj<> endobj 600 0 obj<> endobj 601 0 obj<> endobj 602 0 obj<> endobj 603 0 obj<> endobj 604 0 obj<> endobj 605 0 obj<> endobj 606 0 obj<> endobj 607 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 608 0 obj<>stream +VmX) %.35"޴RHS%IC[벙nMD"ߞ]MXcsEyݧT߹y h=/$~ +b X{Ѩx<+औVz5ɋG\4X<ס`>$ `=`r_gG::15:8FwPdUB˜(o7k82d{ ojJq4 bXG] _.IΊש +w`>`.^&> y^Z +>SاFTI.Œ9o`x̍f_ã/A] +IF_)Ɛ߉}򌮗D6NlF/<{myaND"/jɖǩqt0nnz/{jGƉJ0#~}TeQP]sdO??MBoXo*ԥhe&RD'gF$o%dž-=Xc|2*ĵ|Fyp|h7k_D' +"O5ޫ1hB88 QUO+߄AEEV)GDBx'1̜XNi-KorMJ ˵! +v^fڽ &xS{[*UNzZ-#DECHU O"M5ZQ ՔgG--9@d1>~7_݄P/DTM--N]y2Tfx͑nGWMǙAj2ZZNAoӴ$5. q3a0s +endstream endobj 609 0 obj<> endobj 610 0 obj<> endobj 611 0 obj<> endobj 612 0 obj<> endobj 613 0 obj<> endobj 614 0 obj<> endobj 615 0 obj<> endobj 616 0 obj<> endobj 617 0 obj<> endobj 618 0 obj<> endobj 619 0 obj<> endobj 620 0 obj<> endobj 621 0 obj<> endobj 622 0 obj<> endobj 623 0 obj<> endobj 624 0 obj<> endobj 625 0 obj<> endobj 626 0 obj<> endobj 627 0 obj<> endobj 628 0 obj<> endobj 629 0 obj<> endobj 630 0 obj<> endobj 631 0 obj<> endobj 632 0 obj<> endobj 633 0 obj<> endobj 634 0 obj<> endobj 635 0 obj<> endobj 636 0 obj<> endobj 637 0 obj<> endobj 638 0 obj<> endobj 639 0 obj<> endobj 640 0 obj<> endobj 641 0 obj<> endobj 642 0 obj<> endobj 643 0 obj<> endobj 644 0 obj<> endobj 645 0 obj<> endobj 646 0 obj<> endobj 647 0 obj<> endobj 648 0 obj<> endobj 649 0 obj<> endobj 650 0 obj<> endobj 651 0 obj<> endobj 652 0 obj<> endobj 653 0 obj<> endobj 654 0 obj<> endobj 655 0 obj<> endobj 656 0 obj<> endobj 657 0 obj<> endobj 658 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 659 0 obj<>stream +`{"oˋ~t#''b D/z`-\ *}m*\v.öc:/95L!P?eO_8">mF>̂`K2+j@)'zd x)wIXnWtp˛GL{eLoXgYI@k\,9ҽV%']}@`C6!!Rn"ԠLo"nVymR0?q-kkE9GݜH7(E8j8wKi낐66vhZx6'lgo 38RO 9?h[fb21 +|Zб>DR!蘚kg2tGp_{N0^' 'qt?G*`PxohD9.J fP۵ß, vQ zmBič@I07m`+ԟn4q(#m 0L{gN`~oMS#8 Lu[xjKѠ +; &[&LHKٷB {e +E')&zƥFɢ #}_]ǰ@htK܈ 軮M&e/*a%[bBjڞ9p}wO~]2'Pj8pNev`m< >*Z'y;iq(qD~\,f,we_N a.mO[? Q:Ap +BP[z7*(`0!8_qܯle63S*_yy芋KØ8X~a8j [UDPrcdn;tob\Z`;s=S"!ҩ/%é5Wu;=&,UTM #Kye/\g1υlc\ebyKVSt]I@ΑtșȪ^h; {bf4^__Uϝzю&r%U::8E|P]PP!LtzN]JգlBL8BiJ k>ȩ& ͽWYce6dԑPŶQ1&>=C$/P> endobj 661 0 obj<> endobj 662 0 obj<> endobj 663 0 obj<> endobj 664 0 obj<> endobj 665 0 obj<> endobj 666 0 obj<> endobj 667 0 obj<> endobj 668 0 obj<> endobj 669 0 obj<> endobj 670 0 obj<> endobj 671 0 obj<> endobj 672 0 obj<> endobj 673 0 obj<> endobj 674 0 obj<> endobj 675 0 obj<> endobj 676 0 obj<> endobj 677 0 obj<> endobj 678 0 obj<> endobj 679 0 obj<> endobj 680 0 obj<> endobj 681 0 obj<> endobj 682 0 obj<> endobj 683 0 obj<> endobj 684 0 obj<> endobj 685 0 obj<> endobj 686 0 obj<> endobj 687 0 obj<> endobj 688 0 obj<> endobj 689 0 obj<> endobj 690 0 obj<> endobj 691 0 obj<> endobj 692 0 obj<> endobj 693 0 obj<> endobj 694 0 obj<> endobj 695 0 obj<> endobj 696 0 obj<> endobj 697 0 obj<> endobj 698 0 obj<> endobj 699 0 obj<> endobj 700 0 obj<> endobj 701 0 obj<> endobj 702 0 obj<> endobj 703 0 obj<> endobj 704 0 obj<> endobj 705 0 obj<> endobj 706 0 obj<> endobj 707 0 obj<> endobj 708 0 obj<> endobj 709 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 710 0 obj<>stream +ĞX_q, _%H򔢑1}i]$(sDt +:^5FHjqLL9A"|BxxF/L>SCWfMkaOM-:sƴYNHSI-i+%*EFч&Pv0'2a71+~3WX^l4,23QGEjCGgVK23GWB$Yrp ZuzՔ95t5>`cBƾlkq [ )XUQ +¾4V;|WsslL:tHK䠴RW )PqD "ܺ$at"ޥyU<\8ٯjա㴙+9>:$f<[ #g>#hP.'Gx_&ucqtx::jdTT>>kRd5o_3/hytkD_4JaGz[m򉟭?J Еm5<&|J27+(TieJ ӂ-}6qQIiuomfjëY✎w?+ Hk,/=uP@S*A_dX"vZ)|E@Fv,@c뫛ZB)۬$˷3ٻYZA._е_(zcigdfKjւ~|52%EucL:J%TP8zqQF빗C[+&g +o= +NnUƧ2++|DȅQ dEvo+ȕ.:Gyȟף]P󦹔׃ǾD$55bxC:gmcafquWA[T +sZBݵưX9E4v -z`nd?X%zqh&E$1^Ha&oj+pBI +=J;~* /;}=#m?6 x6Nh h=ٛLnY1)/LCҘn؄W?x^5O&+'<".Ɉ#D]WAPŒmV2{fp)-'m{1/I}[^_Xl?$ yقqpmS\ͪJ6"Tk16tCA[nB{E\v_MFc}c;}ЀuU"-*XW&csFcS!XIidZt + R-`qa,u^ 5l[& 6.(j"lVf'\zJv٫P7!X;]ۂ9YZ`RH ,l=UеRjÝscTBLmj(úp@ g>}Y|wm"TSY` +endstream endobj 711 0 obj<> endobj 712 0 obj<> endobj 713 0 obj<> endobj 714 0 obj<> endobj 715 0 obj<> endobj 716 0 obj<> endobj 717 0 obj<> endobj 718 0 obj<> endobj 719 0 obj<> endobj 720 0 obj<> endobj 721 0 obj<> endobj 722 0 obj<> endobj 723 0 obj<> endobj 724 0 obj<> endobj 725 0 obj<> endobj 726 0 obj<> endobj 727 0 obj<> endobj 728 0 obj<> endobj 729 0 obj<> endobj 730 0 obj<> endobj 731 0 obj<> endobj 732 0 obj<> endobj 733 0 obj<> endobj 734 0 obj<> endobj 735 0 obj<> endobj 736 0 obj<> endobj 737 0 obj<> endobj 738 0 obj<> endobj 739 0 obj<> endobj 740 0 obj<> endobj 741 0 obj<> endobj 742 0 obj<> endobj 743 0 obj<> endobj 744 0 obj<> endobj 745 0 obj<> endobj 746 0 obj<> endobj 747 0 obj<> endobj 748 0 obj<> endobj 749 0 obj<> endobj 750 0 obj<> endobj 751 0 obj<> endobj 752 0 obj<> endobj 753 0 obj<> endobj 754 0 obj<> endobj 755 0 obj<> endobj 756 0 obj<> endobj 757 0 obj<> endobj 758 0 obj<> endobj 759 0 obj<> endobj 760 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 761 0 obj<>stream +⡊m9;ٹ,}wBā0zᗥo/-E!Į ( aX kZīګD(Vf'6lI n0 nl3hQ^7kEJpժ HuD&ѹf~" */wzQO$B"l=u=?_͓kf7}d3&xee0w"D{Q"a@%SH:1#Kh?gt;氙ZG8urG q쾁gRp)v 9#eP 5/8f5XHQ +$b̰-=B d-'=E b_3`]&23S\t{!n +xb@kmBA^7(&nV0Р=< _۵iF{NtJY`X KmX5f_A(5=Aw]&,FK Wd$DRfGZ~/5u~gؿ]dȬ88`u뚰g^HkZrrAaB6+B= gN;y171;P&x݂IÜah\8gk;ֲ'3;jvsz@q9?3-[5]%E%vAw%sE_ϱ*2כ s! M_{:ݬ Ȇdf ܺ1Y0ئH0^NHmsL^Ţ+}T/l kLttyW%&B7O HhINM|!1FiW9۞ÇnxtI\OcF9~= Yxaٵ2 +PR0.&RRxp/V5; Gwd 9 7TU̯Bfb(O}.;rkd|/,6;|$RTcn4in=9U?6#k< !OtN?q +s<Rrn is6Hl^!k|Ew|69s74N) 8={[TyŌzG>ywmwos6i[f9}O\8 p~er٩Əj!D4T:c s;,H +-MklY|-+oծ:fOWРu|1oOmӑQZ'l3oY_,Jt 鐢=c8qDwݷ/[ڎi` ! ~T?[0" Lal)0sњuۮs1( {S>s +$ VcȬAb1OS8͡e.+pw>[) ցPy:_.#۾7~,"ϪZrN0_l(Brґjh s8thxq_kF"N:; +uaPS]Wo ++_*-O4{kB4k2gL{Qu)c [f;W Jn$ Ob\:Mw$6&&a ;ֹ_&|4JQ&Ƙ-_w]刑NUP@(Iܓ1:<@]Gk8y}krM ʤ2#ț":KpR:iGMl ILvGqR+Rx=^ +wو\#Sg객AL3С*~> 7!7~ٷ{Ԥ"Pph11u뎞‰Kl䜑!6ґa@z ?̪>W +endstream endobj 762 0 obj<> endobj 763 0 obj<> endobj 764 0 obj<> endobj 765 0 obj<> endobj 766 0 obj<> endobj 767 0 obj<> endobj 768 0 obj<> endobj 769 0 obj<> endobj 770 0 obj<> endobj 771 0 obj<> endobj 772 0 obj<> endobj 773 0 obj<> endobj 774 0 obj<> endobj 775 0 obj<> endobj 776 0 obj<> endobj 777 0 obj<> endobj 778 0 obj<> endobj 779 0 obj<> endobj 780 0 obj<> endobj 781 0 obj<> endobj 782 0 obj<> endobj 783 0 obj<> endobj 784 0 obj<> endobj 785 0 obj<> endobj 786 0 obj<> endobj 787 0 obj<> endobj 788 0 obj<> endobj 789 0 obj<> endobj 790 0 obj<> endobj 791 0 obj<> endobj 792 0 obj<> endobj 793 0 obj<> endobj 794 0 obj<> endobj 795 0 obj<> endobj 796 0 obj<> endobj 797 0 obj<> endobj 798 0 obj<> endobj 799 0 obj<> endobj 800 0 obj<> endobj 801 0 obj<> endobj 802 0 obj<> endobj 803 0 obj<> endobj 804 0 obj<> endobj 805 0 obj<> endobj 806 0 obj<> endobj 807 0 obj<> endobj 808 0 obj<> endobj 809 0 obj<> endobj 810 0 obj<> endobj 811 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 812 0 obj<>stream +OVXIY&_BF]ЊFĨ{1pDR@ dۢti,a7Һ P)Tq,y~|zp,;G2_\= Vfm q{囊!4ϲ1B|cq%)8<ޥ$DkZٲ oN/qnZ!⋰0!eg6@\=~%]rHZ5Ik__b5Hz;u9j,[[na, H* +wKr~kwMHqƦjY3:,øߵTB rӚ.n¬hom/^h$S#N֦SCbzD'.J 'VC<_и3;=6RxВ~MaLZ M1]1"Fk lX$yɱ +C"9}#t`9Lڷ4\FO#mtl91jN: > +A ?>.mXV#:fbs^;X/*=07!-ڷ׭җ|jD/!wD,<eK7>bUC^r/_ 7 742Pc2r³|O0jNmSƂ*@Xڰhz"RUSR*K ц~+.x3A1RoޖQ0M ;D-+A}OU4 +]IR$B|W5l.N>R7ԒI +=R|CK1 gN !kJ'қ'=L]dbq ٿNRne .eP5 UAVd/:ŭ 9]7*=8?%˭dcK%D!>U1+Flvų؏6Jעo#=lҶÇSפ[. Kr5ܹ BDkYPzf 0H_[2<2u[5|ʼn`.ҺN$(Vt_MQ;P+[/݇ dS5? r[ծ$LmA=Kk^Bhfqrjq)h+!~ȜFm)6( cI@$rDdY_d)CHSV#<Lҕp=Ԓρ57* ;.LfS1=p/@vrBgâ2aLQ՛bP pl1b/dÚ*m +yEoxj@:[Q 0LࢳZ{2q ;cVsb-EABPA[]Wcql00#ڝ"ɼkRe#="-w -|C6Gn'8&jgP2RK_-ŷ7J >7LYwQ6%E82ٯSNϛLL?,MLjrRQ +,i º ?Waa7 -C= m z/'Xה}yaK []8 Qh:",ѢV5a)8_d +endstream endobj 813 0 obj<> endobj 814 0 obj<> endobj 815 0 obj<> endobj 816 0 obj<> endobj 817 0 obj<> endobj 818 0 obj<> endobj 819 0 obj<> endobj 820 0 obj<> endobj 821 0 obj<> endobj 822 0 obj<> endobj 823 0 obj<> endobj 824 0 obj<> endobj 825 0 obj<> endobj 826 0 obj<> endobj 827 0 obj<> endobj 828 0 obj<> endobj 829 0 obj<> endobj 830 0 obj<> endobj 831 0 obj<> endobj 832 0 obj<> endobj 833 0 obj<> endobj 834 0 obj<> endobj 835 0 obj<> endobj 836 0 obj<> endobj 837 0 obj<> endobj 838 0 obj<> endobj 839 0 obj<> endobj 840 0 obj<> endobj 841 0 obj<> endobj 842 0 obj<> endobj 843 0 obj<> endobj 844 0 obj<> endobj 845 0 obj<> endobj 846 0 obj<> endobj 847 0 obj<> endobj 848 0 obj<> endobj 849 0 obj<> endobj 850 0 obj<> endobj 851 0 obj<> endobj 852 0 obj<> endobj 853 0 obj<> endobj 854 0 obj<> endobj 855 0 obj<> endobj 856 0 obj<> endobj 857 0 obj<> endobj 858 0 obj<> endobj 859 0 obj<> endobj 860 0 obj<> endobj 861 0 obj<> endobj 862 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 863 0 obj<>stream +E ؛AoOVZ/5&9ah<1%Z\Ns[a;BAwJd;36{w`^CqJ\V?L5cBLLaL+Svl?dj4;1.wcA¶ꊖQg\" Dz[ +U[-RjVwy^mIsAt  $^BY7J+D.fm .4QMB/iݭCG{HSe !ʳD.<`f[M`4'=lB_0Ce#'2[삔{`fqfF.μQ۰jFZhNlu46[6SۭN qCƈm/I f)Mj3K5 UyzH]&PW75KLUOy'⻭YDyqVsHƫq=A;#P/(Gma#o'wg;~'0@&tPpz&{xvr$*mKi}|Œ.pťBnS"{4 hTENt1b8: 2uv=${ B3)}شf jl/%\/jZB3„-ݦhADV1Fo_R1^{ Wzzt9)Oy*:nGjgj0@ JdJgfr~snsټK:t<*[2|Ņ+"4C"G-yCyeYD|8Ϻ; a΄ &)9<`kg D&9K CJ5ktnj։^58ڪ^ULj^XZw* RX_7>c2,K6۶*ib#/yaYavʛ>fj>ʮ3%"אֻسK{5FYC95XxR8фgGʦ&f{ ^<7p\HD>jf 핋61cǑJ#Hj<"=VJS/R]Q$f$Xձѽer3E=2uVSSU^IlZs"sEcG~kIVޓ=%Il)b#nԗzt%-@;SDߙ 79\6AP,?rCTe˟KOM'mĴ tonGS8{1GHC:{X[sµmKޔD[GTE5LͿ2i+kI(m9ch`oޒ_>Z@@bOfH~-v(UF.]or2,>4q=ŽD5X+=>}KHz0tU֖9kR +endstream endobj 864 0 obj<> endobj 865 0 obj<> endobj 866 0 obj<> endobj 867 0 obj<> endobj 868 0 obj<> endobj 869 0 obj<> endobj 870 0 obj<> endobj 871 0 obj<> endobj 872 0 obj<> endobj 873 0 obj<> endobj 874 0 obj<> endobj 875 0 obj<> endobj 876 0 obj<> endobj 877 0 obj<> endobj 878 0 obj<> endobj 879 0 obj<> endobj 880 0 obj<> endobj 881 0 obj<> endobj 882 0 obj<> endobj 883 0 obj<> endobj 884 0 obj<> endobj 885 0 obj<> endobj 886 0 obj<> endobj 887 0 obj<> endobj 888 0 obj<> endobj 889 0 obj<> endobj 890 0 obj<> endobj 891 0 obj<> endobj 892 0 obj<> endobj 893 0 obj<> endobj 894 0 obj<> endobj 895 0 obj<> endobj 896 0 obj<> endobj 897 0 obj<> endobj 898 0 obj<> endobj 899 0 obj<> endobj 900 0 obj<> endobj 901 0 obj<> endobj 902 0 obj<> endobj 903 0 obj<> endobj 904 0 obj<> endobj 905 0 obj<> endobj 906 0 obj<> endobj 907 0 obj<> endobj 908 0 obj<> endobj 909 0 obj<> endobj 910 0 obj<> endobj 911 0 obj<> endobj 912 0 obj<> endobj 913 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 914 0 obj<>stream +19oQ 1J|v{(xءc]Q|"C߇Ww~srpb-6c1bX)ʹ!SM_*TL&xWMdZ!zi-`CIJES۵5STEIE֕*wz!ZƮPM(rUSkE}6V^@hb0G@\OqfT!p#aN #r#́ՠL庋L|@Lӆl#xASu8}ZH*SOf]UP٤JQ2/Xntػ_K  tsqI^Q@1 vgjDl*s~Hp9o-SI*@9KAE:*-h$Oe5n>3R*.H'[b]]@| OzD=ݥtD/||4!g{X,l?Aqp*$]# )rR?.CJfACꀝ-bAxdtz,A3j&\f`H@r2vHl|J4r'>[<¹3Lu`ҎkBܼnQ!FX^/؞oTgi\RZ-G+̮r¤nNKstP ~%~w+R +>`9$V.\!8kf5kn~Z hx~7^@Zn\Pw4/V q8{]pliIkN1[iL߹ 4[:fa%Kp眇+:J n OnN6:2`6ҥ ,O3G{֍oJ^i&-Xܩ36P1`M>'Z'\(:'İD/`b fHR 2h! lv=4!ӵvuߤXM+oh>rm?,^3"?~d(f+uY2ZG[׫ f4Έmđd0EgHP/ N_ܔzw PBߙϞWNv ~S_0rޓT7džƗOѳ6.JLt3J`Rg$,)az)ZS2-t(H̸w,>}O_j'^N!*J=6c KYË[ѥZ]o4a +endstream endobj 915 0 obj<> endobj 916 0 obj<> endobj 917 0 obj<> endobj 918 0 obj<> endobj 919 0 obj<> endobj 920 0 obj<> endobj 921 0 obj<> endobj 922 0 obj<> endobj 923 0 obj<> endobj 924 0 obj<> endobj 925 0 obj<> endobj 926 0 obj<> endobj 927 0 obj<> endobj 928 0 obj<> endobj 929 0 obj<> endobj 930 0 obj<> endobj 931 0 obj<> endobj 932 0 obj<> endobj 933 0 obj<> endobj 934 0 obj<> endobj 935 0 obj<> endobj 936 0 obj<> endobj 937 0 obj<> endobj 938 0 obj<> endobj 939 0 obj<> endobj 940 0 obj<> endobj 941 0 obj<> endobj 942 0 obj<> endobj 943 0 obj<> endobj 944 0 obj<> endobj 945 0 obj<> endobj 946 0 obj<> endobj 947 0 obj<> endobj 948 0 obj<> endobj 949 0 obj<> endobj 950 0 obj<> endobj 951 0 obj<> endobj 952 0 obj<> endobj 953 0 obj<> endobj 954 0 obj<> endobj 955 0 obj<> endobj 956 0 obj<> endobj 957 0 obj<> endobj 958 0 obj<> endobj 959 0 obj<> endobj 960 0 obj<> endobj 961 0 obj<> endobj 962 0 obj<> endobj 963 0 obj<> endobj 964 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 965 0 obj<>stream +և\6J iK%S1wa8qC pZF(ŏghg{iVo_Nc rq 8n 3JNeLuRI'Շ12JtmlF8OC(6r$:|2sZȘXp@;D<:Wh_xt8 Z%D:@];{6\%sۤ d؋92v, "8_$x|]:'E:]BaX' 2;7;RU/ +*jZ+cc4;+އu}rE{BH׈LYxWgr|!r#4qͱG{sR'Em^,|{,^,}nFy@MjЭv`9%o^}{'-/tع{go6XȾ@1hi6El;DXf$iY{֎G8Cô@>dL:n(R0lJn؋,|*Gٺ__AƍY.XIąHQ&%oqXKrΤFK%.RoW6ٲ ~n -F ;'ЫhR|72 Bט!δM‡uBChc=G!,8@0Y_Swdq; Pݚ +X@d|:ny< o_1Enõ"F*{4ŕFeWWD-hw ݎ W/y)kíX5ep:z"nr:x.1"х*IYR"~$Q;S%X !%V-Uv&cFpEYS­Өo*yMN1`=AX֗tۭ%! ජyX+kӄ;c{(-`$"1h;tv08$4Nώn6jP>"bm_/2kr 0ᛮίF goa +endstream endobj 966 0 obj<> endobj 967 0 obj<> endobj 968 0 obj<> endobj 969 0 obj<> endobj 970 0 obj<> endobj 971 0 obj<> endobj 972 0 obj<> endobj 973 0 obj<> endobj 974 0 obj<> endobj 975 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 976 0 obj<>stream +~dF%A;DBy|3}JMl+ۀ'&r4Dh!=1xfӄsz?)GE]!ϑP3/ד@h`" ,RX, Υ{YU9keT6T9d͓5#>Y!UW4y/e6mW7>'Qaia٘."+P+T[``ܸ'hME}عt'y 'fԕ<m^x_*{ +"o} +JUwZrΪGո{_ߵ]4JH˫oP?inZzpyiׄy:)dY`zb]K3xGc?U&_T -{G@WV,p|K F"AvŠhy5U,MetL3[Q=>]*]lrG[W7PE +DsMn`kܜ-΃lj<$:PW*x.8yRTbU*1+C\ +endstream endobj 977 0 obj<> endobj 978 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 979 0 obj<>stream +L4TO=5O;Wrf&암Xs䲂PT(#e8΁^؏axN~EdiZ.ڬg9g'.FB!5٫R_["M'@ +}W*br+* N 0#ZDwқS  1b}|/[RPH$GdX,wɇ3>g*Mʫ'e5*#C; 4 [$}=6Vz4X?t+|",dUэBx +endstream endobj 980 0 obj<> endobj 981 0 obj<> endobj 982 0 obj<> endobj 983 0 obj<> endobj 984 0 obj<> endobj 985 0 obj<> endobj 986 0 obj<> endobj 987 0 obj<> endobj 988 0 obj<> endobj 989 0 obj<> endobj 990 0 obj<> endobj 991 0 obj<> endobj 992 0 obj<> endobj 993 0 obj<> endobj 994 0 obj<> endobj 995 0 obj<> endobj 996 0 obj<> endobj 997 0 obj<> endobj 998 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 999 0 obj<>stream +`+B3ڛ M\t> -^Ҽ6c7Ee COA]p <4娂ēڭoGp0wfWƨ^\[L aj^WO}6 +[f:@9=50_2+)l৭8nڮ&3 |GV~E IU~e#q zGeO큊XyFuo.`&J1c78D6uo£cۢ3h:S^Y)^RJ٫#wT6/@z; ` hX/;9.iA-UY ) +x[XyJcƎ\Xgrf_4t"*V΢>Bf7i>>-ټ 9a3>2Hc.C+H@}UհZI9kN?)/]Eu;akK绾e#OibnwmNB۪u٨yHsXg̼ؾ{>&o( 7sΆso`%Z]x6gVnrM N +O|PK#Wvoo9҈mAO% +gF>HQ``8P.k,2L`$3Ƴ18f} /{)_[ G@uE QarT`"JL˭b eHHy UL kԵI H|P{AL£2f/Qe:0M/w|G ÝjEUCp/zэF ׉ 'We =qKȠ^Y}T?5kh*%qMUja?M^ %;' K +*TƖ_J&K o_|c[OLOv=9\Eۛ;-~H֎;A j?U`[\UG!Lh^P197'(7gx N%s!FeP,T>Pm_9]mM524(r5u)MfSXT]=k.AV{{YSE^OqlT3kxǞѥB@rߒ&EESfE=޹Mecm~gEH/tF<?]4WRQ4d%"C;ٰͤz aHas*Lv$bmk[m8 }KT9!z0^uu=W5X9A#IehjgrH͆9\1flYNJnks(%O9N,ɟݤen]d +p!bAAs̙ +#a}@p,cAh{rt#3o!!DoV6J~{@mQXw^[Tm&_=>).W\r7" i4EHy}& ~w^bGǥ`5_>Ai= RU }vy+r0QrVO̼OZ{: |q5*M}qA"tf$'8LXb|q=WGbR$ c틏5H0pHz6%f|2v~8DÉ/=O$GP/3Vv7֜Z!ABS u.7|hJ|zo٘>301e(5]Zzƹ[toL~@HWy 6Fj kxfXgbBd#ט:ks(#ula4`!sɾ3hj4rkj0>HI</txSͅqt6`xn +}z-xG@qC4C65_C-ZaW7^4p`cwKUqz0,=tUh$sҔ(u޿\|-f#E:PyuaRhm +`~[UwKb(1fN]q1 @O(]ӓ=y5NԪd )&%㓳fSa].pDY:T6Bzx > endobj 1001 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1002 0 obj<>stream +LvۑW$ N@s0YN_ϳǍ.N%(.?JkVtvXKB߲H|ڢN(ۣH99C*N٥J㾦'cĶ_QѸ7zo{[D嫰gVVo;Sc=6ʛi@KZ=mA/50S"KD]z9J=,Е~rkr"%#2r}*mfbl%---)ʥYdTJvAId1=DMQ[c|B]K8 [w]LTq:aq>W;qYxE~z~Q +endstream endobj 1003 0 obj<> endobj 1004 0 obj<> endobj 1005 0 obj<> endobj 1006 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1007 0 obj<>stream +jKDp/ȇ.Pb@8[9 +bׁ6 +|ZCaĄ4о.Ǜ³L5W\hb))еe$s_t[GH&(W8I}{ͨ=;H~XAgE{]rfK= NmɩEzKsQN4I9A>Н${"B$f@Wub.lv^dqК'Mcnb\6 B +s|$!<0 .2M.]H:RLqj2ԭS&fc\,!SbI| W!r=/fHF1"e {1:xEz6~M3 $؆pZIϛAAG*EwaY{ugnY1U s%ˇ鏥~5[<}CJS`klF-_BVmߛnVPN6>x|9P|<-c&Lq?'830 + 3PdZҏZmi\rzE tösW#~L龩>oHǴy4,C;drnڱ>9%2E{1G N녴('*yɽ%qmG[xn;/u-d$^iwgXb_|3ZLSbz/ 1#fʗS+x$"uANAV=? K;CYrEdA>Cb~+e\L,֙ζ $1?o0#+yE{e4zk:<4W9S%[w]Htfo#?k{roy6 *ڻIʙ-\܏q$Ӈ*0 'DW*9wF_X*';y7h9]';M~ԛrĆ X,(1bA~ܞTqAh^ #ؤ^Ѡ:FB*1Ї"0G4#v CNA zzuF? l~m8HHT> +I}Ns0w:D- OV6Ʌn҆Rlb'9sT7|9մQ0/̽5 Tzpݛ &a#QbD-neZ+[6Sz wjv +endstream endobj 1008 0 obj<> endobj 1009 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1010 0 obj<>stream +${N4odj>leFv]Zο'רuaQ$DR6Lu|-6rEA*8nM#<ŝ/Hk4pIx, + 8TpDWD~AœYPgg4Ilڴ(֓8=s#=yMv!6i/z!G)erhH夁Z kɪǜo!;۾#a"`~Nn~e9"A]W¿ "=m]h4> endobj 1012 0 obj<> endobj 1013 0 obj<> endobj 1014 0 obj<> endobj 1015 0 obj<> endobj 1016 0 obj<> endobj 1017 0 obj<> endobj 1018 0 obj<> endobj 1019 0 obj<> endobj 1020 0 obj<> endobj 1021 0 obj<> endobj 1022 0 obj<> endobj 1023 0 obj<> endobj 1024 0 obj<> endobj 1025 0 obj<> endobj 1026 0 obj<> endobj 1027 0 obj<> endobj 1028 0 obj<> endobj 1029 0 obj<> endobj 1030 0 obj<> endobj 1031 0 obj<> endobj 1032 0 obj<> endobj 1033 0 obj<> endobj 1034 0 obj<> endobj 1035 0 obj<> endobj 1036 0 obj<> endobj 1037 0 obj<> endobj 1038 0 obj<> endobj 1039 0 obj<> endobj 1040 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1041 0 obj<>stream +֋ThE",@w߭_ +yL|JyzQ@@~K~qud&t>3ѐ +jKُ7nS`,\zBPҌǂc fWWtjaէQ +Y)"r>$w[ʅyXE?",Edu w8:(b:XUQA=>IEY뛩AWzVy QPW[v8.}yt~4Ҿvm/{;a ʭY:vl`S]ž赀!0R1,z$\;?Aj ίl2eOĐ'\fRju/Aal_tjW&[6R 㪬d4ݜK/ N7٢K^!vdi"La0x^b@q=灺ɚ+wNInbG" 5$d#?wZ_*QSZ]5v:cbY)X7q,xqy#-C}: +_4 JR.WsKUI%PGZBP *=M#ݵ +WБk0T+?N[VX  +QO-]DFMC9Eu@+@_ֈ [)ʯVL.;x=WdG=CEC dZ7 +.߽3b[:ogIǰ+Ǣ*`_p^NK^4S0 lQpXͩW2Xa֍odC"=lDJ$˥5Er?:!eN&᳗?1G,ưDƋ'gh@+6ԅ~9xFsjo?"D ,FˎA& ЛZOzCJ@]ھ5>b=w9!/z?Oҝ?381rcB>9q@]X k;R5I[DȈ+!M\Gh,P`d' +~;q.nJ^CDҔTר''3@agEO.foB)Avq䀎ْYɰ_/SA73taY= ͢,] jVzVdSTa8fZ+Q h*@3v=бraְ_"kVͦx? 9_n~XΕ`6y'&][emOR$t"=6"Hf ^PuVQNU%ީ,J1n&Mhw,S|qwT~uwX/!T~c cy[!CHZ/UVrR4؊SZ/kз0+JmnYXC_5db'ZΘNFm-YTyCꎢ$Ҧsw)F/Mn򿌼>r!#(!M"-Φ\a؟! +;Pp((`uT|ص`E,)4QBUI01MpVvhjqIe/bk3 4vL5ه75M%=h{B9 ~s2ȑs~guhGe4v_ c='Tp,+|hcGr4kzzWYH\XrSw&.3>TfgCT2V`߆օK/^{g ɠf*_,RsL6XMȭbWS Ў0~|G[7xrwhO+i0Hᎇ{p!U~7k  ݛW1}7pL+H㗻vCXt,kt8s} ͇?Zuv2{)iGe0*S\u_rUx#*"oI|Oꅚ:$̱Ua"\'`1Ɠ`]MrddjFy!H:,Q"0 Wc=ǹp{!Wt=\B9 \;}偵Đ|ǓP!e-!!p³hd⟾È}oV0 8ZpSq_%Z!ᒃuc6 ᯛ+ b ѭ>ɍz&)eԾ +=w@sn~71`tQJ7Q罹+zIWKU59U%.9oF^8H@ H]S}Ue+K%oXC'.z%;,4XWV߁76p6HFd)T"|DGґqOwdAHɀڍ>52}H!ϩTiAPT=Q 3;HŽ¥,II`-َ?Ag@btjw5Y۝LrLM$wf2Cr;*iMI4\Ȉ +endstream endobj 1042 0 obj<> endobj 1043 0 obj<> endobj 1044 0 obj<> endobj 1045 0 obj<> endobj 1046 0 obj<> endobj 1047 0 obj<> endobj 1048 0 obj<> endobj 1049 0 obj<> endobj 1050 0 obj<> endobj 1051 0 obj<> endobj 1052 0 obj<> endobj 1053 0 obj<> endobj 1054 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 1072 0 obj<> endobj 1073 0 obj<> endobj 1074 0 obj<> endobj 1075 0 obj<> endobj 1076 0 obj<> endobj 1077 0 obj<> endobj 1078 0 obj<> endobj 1079 0 obj<> endobj 1080 0 obj<> endobj 1081 0 obj<> endobj 1082 0 obj<> endobj 1083 0 obj<> endobj 1084 0 obj<> endobj 1085 0 obj<> endobj 1086 0 obj<> endobj 1087 0 obj<> endobj 1088 0 obj<> endobj 1089 0 obj<> endobj 1090 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1091 0 obj<>stream + +ԧ֩'j4ΰ7^'fJEutk@C2%ոo,&ɦ+Axu%XD[j&a0mJ5H\N{j>2]zҒ h 7R!qyC-_R@F=R߆nw@>E +k{e8ִ5ygVe)* /F6wc? ZХC<_lW]r~$"~@-K~[+~x!jˏ,N= V|_UqgХ+1둑)(W!GDA9h>Cs>7"CnwlZeـJ^.\XNڸe On4g:J=;*ʿS(|%1968vW0e(S_c Eǝg"%xwָKbXm=ε,&Cu\춪D]vS)Q72:.ءf:7jySs6d,pD&z1ͳl/B'I]> +blGH E4n1٥Xj h'CAP֭x譴vTvtR~e1xnZl3}Djj% ra, +N݃Nߡgjh Ѯ9eȷwB FGDTp;Rm<b|sm?K9 o+Ze[5\ʻ&^|5dIq d}~g*ٳWǠBP{ټ&uk#Ϫn:D"-Ybԝ|g tB<#?\4cmZ?g"$~#uLQ.Il8QM5rs%)zhi ɯXXc֘+c "42W-}*3 .kEoGA^3 \؁@$թ,Ljft.s5ݴn"3S߀,{~G^ҔoRT@!4b7e),n*2XK~+..'󀐹f=A/#w]i,;xU?mG8)7T![Ĕ'%5!*ȋ}[w[kIkf >i:: `=l+p{g +&XEҥ k6oŶ~nMljzx_*vޞWǿ4dןU6'a JPV?zdKƝn+/֫ieům9Oi\$ס1?-ܞWWz%K3GJTnrCl#Q'D"ZB ì(A>|qn=5<+ژo7 71%pHӡj>ZC A *3L!)+ їM\)U +k:D9{I_sVx{$Vx+K0DH5;ˁG5P݈@w50gm(rmHߪr"P|AqQrt&V +endstream endobj 1092 0 obj<> endobj 1093 0 obj<> endobj 1094 0 obj<> endobj 1095 0 obj<> endobj 1096 0 obj<> endobj 1097 0 obj<> endobj 1098 0 obj<> endobj 1099 0 obj<> endobj 1100 0 obj<> endobj 1101 0 obj<> endobj 1102 0 obj<> endobj 1103 0 obj<> endobj 1104 0 obj<> endobj 1105 0 obj<> endobj 1106 0 obj<> endobj 1107 0 obj<> endobj 1108 0 obj<> endobj 1109 0 obj<> endobj 1110 0 obj<> endobj 1111 0 obj<> endobj 1112 0 obj<> endobj 1113 0 obj<> endobj 1114 0 obj<> endobj 1115 0 obj<> endobj 1116 0 obj<> endobj 1117 0 obj<> endobj 1118 0 obj<> endobj 1119 0 obj<> endobj 1120 0 obj<> endobj 1121 0 obj<> endobj 1122 0 obj<> endobj 1123 0 obj<> endobj 1124 0 obj<> endobj 1125 0 obj<> endobj 1126 0 obj<> endobj 1127 0 obj<> endobj 1128 0 obj<> endobj 1129 0 obj<> endobj 1130 0 obj<> endobj 1131 0 obj<> endobj 1132 0 obj<> endobj 1133 0 obj<> endobj 1134 0 obj<> endobj 1135 0 obj<> endobj 1136 0 obj<> endobj 1137 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1138 0 obj<>stream +צnasPq1H| 0dWJ(=cv_>d-l?1=}sV +&-fQO1>[?!$[$d (,gW.b2zͨUॊ 1JLH(FI#xbiWvaHC6d&-4 f{ kʚcsaA~R_6;g~{ &&"H7tB̫Dk &GfI8@d[Ǟ?!bnB`35&1iqiBV +̊LEH0 ԆqLS(|D)vB΃TMnT\$f@+ΐ' Kp {~eWPO\q`~:&M>?d;AõMķ_aؕ |<% YaEĂ3}˼Fٽ/GU6#2`5ܚ[T=:il.Q O53짋 X@ F.ݩ>^NAsG|7Y~NoO9(!pI斟^T-fN +!IS3o/2Dl*̯f>lGAfʖ(~On*[]Y_'_K8|Ji +nw{Pk" g7{$笾U8p{;Z]%\FeSw F蛗= MD0;[׭#5f9ۦ+m-ҾY%Yls$F3}S"`Ԡ,+/e+&D)F71rf!7C6jf[xZhy&{R`Gk]@fmSfC͙Šwذ>q:5!Pz0 6B<׳&􀑦G9Q/ 4 -> Բ5<5b휹 +F*NY}ꒅ݋ƻ8U!X+df`CgM |4aeqYҲS ~H#^2hu]+ 3ﺒ}Bnbb\.F˓DgmI3XxpO&.Y{8O^ߡ$ NI{fw_]lpB @eU0xA +Ӥ! 1;^UòmqɪB|k$:A+/BzʝdL'hV\|upn6uNvqmӽx}4z5 TmnFm$25jmp lQ0 ЇGΙ#[Q]6%Js`uGr7B||֚m"´Xsi-g@^'t0W߇ lj]GGl!_arSz5ߌԀMA q֦.$Ct7eijG,5xVd~kFd=_r5,rh ;.A6B5Y8x~ H$gr&-j3"a*!H*v)ge $mEO{ N=W)H7 ES!:7$EF%5rh\B1|b%"cO-BTxN# G#%>2^Swf94 QD3fa wiSNcT{yA8D:A +=7yL@h;ko]/3у-~MM2R3@OIhhžNF*K#/V/uX+-vC]EdwJ/5:vn%̆hFtoWz#YQ'mO;mъB&2͍yuN>~*vcPCqwwvgU+P {+A {"Ou'eF$#8kkN7YB rQ%˟4'u;f:}'f.uhl/D;G=8g~!8XaNi  +ML~׍%]r$!gΓiE%s +'-;u p3a +&"(,dIQMVqEǽd]B2-$%P.7Ѳ(]E6"gn O مU#<-kCޥld +f8 +7tun1 ~`h8?: 5 ޘ'o!l@ƽ[` [$&F.JdyX.{ +חN Ɯv7X7V X܊6up4Vǚ1/eqwxꟆչ1fźaYejJW0@2Ĝ!z˝E,q[r5 cH ɋu6L3=r9W +JzvB6)2,siR-Ki4KRUhp̤rČeِ펌&TB +m44~eOo:dlѱ~2d~˙'}'߈njغl*NtXNҊ)@psa6KX IB=ӪYbkax,{ls `QN`tlfYγ\rFs}$o;;8,AB^6DI۞,tyThԙN;0t?N"[n(L`^]$Ov K& +endstream endobj 1139 0 obj<> endobj 1140 0 obj<> endobj 1141 0 obj<> endobj 1142 0 obj<> endobj 1143 0 obj<> endobj 1144 0 obj<> endobj 1145 0 obj<> endobj 1146 0 obj<> endobj 1147 0 obj<> endobj 1148 0 obj<> endobj 1149 0 obj<> endobj 1150 0 obj<> endobj 1151 0 obj<> endobj 1152 0 obj<> endobj 1153 0 obj<> endobj 1154 0 obj<> endobj 1155 0 obj<> endobj 1156 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1157 0 obj<>stream +Ӛ[axZSa +y#ǝ @\|ͮxlrC_+3^ +V@X7z<@C謏h+T΀Fzvu2Z' Z*˓dN1z9i`weaE=9sTm^Zcɲًi!ٖm7nt%`Jz-znfz@ +m~O]_70NlC[2h͂1Y(y7f)ȃn׉yB m[Wn'\l9=DGR Ab6;w q{ `E 42;z>':vP%"{ qW}u_Q:ೋ"}P̥XI9@;H %RKZTJBC8&aX LX &dTb. +̒fU4"Mr[C.{*XxL +UlX-S0Xp;pϋϕ&! +Po*n8u:P.c}7⭠o(¼}FK*|],W|Az+^|GƑl԰I:V0#yAG 3<5<.'JYtfKohEj޽Gnܟ8Х9N Kp9E&ѓ tmٳR bgìzC[X%au},m iWPzK#%O__amq5):xz8aQX@ݶlsV4SF 5\gEQ\eQu.s\ *&v5=C?N=e?VgU\S7i+ZkCXE#UU`yug'mnx[ +OYEf:JoR0ŪLA]Hk{R~(_$7Ms|9*) {7[Df榷 s0K=5='PBJQ/kwh[VX#2^qJ6p՜8liX4͇F/|*̄<9/a(gw yr`oeBmrC3dz *355%$͠0Ρ,ںLqC;=+ȇUbK]i&)A@QJmDe#)lO9JTUxfëMX)9J5ۑUό6uR?5=ZFq!ۧYݥ!בּtnxrͷ?UOD%ЃͺG\_,4r{p SZxS늦l +|? +[.x/;81f^+ȗMq9I=JbL)"z@Ps +0 2G,n F%V0;`L 0-ѻf.?hC >П_p,P,7hjۓZP‹Rt/~n~E6X GәMǼCv$4EΜ`ǹ_] NR/!ȇ,HF@DCtZf$$k}G9Or0BHUBTZD(uQd[+6ק.DHH[ a)pA" 8a%;rTf:#Tb%-u$f~?f .C˖$<1dup!`f + E;M1^Ιhi7(i7A OBA@O<[_dn(fcb**+AT$Ą篦/~9N*J-uCAv~+ezB>rhEk>2b z~lpqo6)EK2gpѽr~T |*AUQָ-_WͺyE+YÃ!,_›RgCϾ؊lXn׭Z +UUf<4}.tAEz0vB!K-9j_Na`6SCFu|WQPϞMwL$$N*A]:tFٲe*9 _ .YMR2'/GONb`Sw`[LGPb,)e^}x[iq'·hS\=ij>z/";V8*8~(s|E +endstream endobj 1158 0 obj<> endobj 1159 0 obj<> endobj 1160 0 obj<> endobj 1161 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1162 0 obj<>stream +@ǽ3>YwxQ@TArY4Hyd@'V Q̢S}3K.3RvRF]?lHp;j|bi P`d$XB߄0Sh߲dYe% A VTXYReJt9II>";E 6"rT%&$zH$Y8u +)~߬䧮E"7KkR" +5hWq/,S'쀏jW?/ %(L1c|ԥEȴ&QZkw|ɌAEG̷I{FlQkuzyHvB!2ΰXES=IR X ;jܑ\] ,E +/,6ƢSTSyr[Ψ8iWgl-ayDM[ C |_2[mS袊|`Q,,DBbG:Cۂyd%& +qGI>=E*ZpV&4ERPӡF @V= +ڲ=XC+(0U°))E}UN{4A9͆Uua=nxw'Ū^Bw[W+Z%ĝ 1Vu9-fR$Fs*5_8W"DN*fW$d(D=8ǹwlBD"GSE@{i0tx(h憎aSX>Myk1hux^ޠ +XYt95iCݔ^+@A[Bl-榮'ҎRr4j0b'^^1VWP=m1~L)iF>j>ŋՑ& nB !;(;(陂 se7 bW/#hH +endstream endobj 1163 0 obj<> endobj 1164 0 obj<> endobj 1165 0 obj<> endobj 1166 0 obj<> endobj 1167 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1168 0 obj<>stream +mOԆiWP +ۤ%PsdkfLՉup,B[_~Jp Rl[(QjbFZzRբS?҇qLBaQAsF^7Xws74g`h`̦r0ӦNLIPM̢ zD*x3}ɿG06"BJL %=ϓ|h=5w=!A9kPT9a*Ն$"F>惡[9,r +\fK&LtYmN܅ߊdBngS'!֜$\43bER>ӛtCYxz5Z#'kt-8!؁~ְ -E,AU".2A47!聭x$3n_|ba6хhx#Va~B8闇uix9d!ZV &m;sjѨ4!y#g.( ~z>EUюaq6@N./1ZH~1@f^l|$-WtgctXr@:%f湣<o# K@oaA_N[K`/Cp80 JJ*iSo=y !J6ԙ0Mgd +pf j,| FZu*זf +К{Gr3Zk ͢@GH32O1TYc" +Sΐq/!}f+5.dcb7ZOg{9; <01bw) )] }U۲Q*3E3tٸ ߃s( =|_\|4&CW ZP];Ғ$ʯ|kV gSJڀ8Gmr(r:GbWq L$#)գ2Ϣ MR5Hrî:6=25efp2mkm +endstream endobj 1169 0 obj<> endobj 1170 0 obj<> endobj 1171 0 obj<> endobj 1172 0 obj<> endobj 1173 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1174 0 obj<>stream + +dž2Ĕ]gqǤ|}pGgʀ47ף%. # +nZ|i-la mf=لe)*\{=a*ư$>sf6e'i$ +|c E\ O#cw-̨nq7yGEĚDfM# y-k̶L/\3*RhS(1][qc-s#|BwnwnӨ=z~  mL主l¥X*IHhܝ?27[n-B\/yub-jzQk <"eEe?:u 3'š{ =ä gFKGփm/UcpZ&Esuް|r M39x\ޭ.2׵J6-A*4y_D"XW_khiYS詄Xjъ'i[>KX +:S¼+DUBy +V2hM{2NV0JIyr|I:y`" JM Zr%ʾ}ך(7Tc嫷P* rRg{9&29a/"6תf&i\ZM^lB|% +}F7u?th\'GSUq.7넾n+JKZ> endobj 1176 0 obj<> endobj 1177 0 obj<> endobj 1178 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1179 0 obj<>stream +~sz0ms@?rS,3h&E&ҎFD(BBR3V3ǜ&]GSn1Yh@?+5YL9l?n/um>!c od85Z34}[t`Ms$/.b +3g{t܇NX Pɛ@c-KLsoeO5hZC)HZg,M&:TB\ԚswئnK~aEY +CD1cCOZx.Ҍ x-,P"=XF&Ftlijb7ܢl!MCX"Ru*:WLg.IcO<ڑ6+=.Yv[SgA`g~\TNJ&pƮG ų I2 4r%s7iE4[04GMw^]Է@H(5@NJ(Jz䭳ףI tT3Gfe֝)ʯ \ԍv| աwe +y)4X-=> endobj 1181 0 obj<> endobj 1182 0 obj<> endobj 1183 0 obj<> endobj 1184 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1185 0 obj<>stream +ֵhFs{iߧ%xȹ B j4N'>5K@J nσG럌@r  MaԍU@( aTK%u GŇOM5%3N}%nT{:6~I`߄<VKe ICABOg! (Az "roV +xGGgL [Ƒ!QGBeǨ! lrlC( Bg@7༾]΅JCՇۂ| kHtbu+ %h2  D5›O_ùv~{X$720te[1!<4MtkֹXvGFs?M2VS5UiY +dCIq`F'FK =G gh FX̯d@-C\:}/ +=}4|<<8|K4.oK ^pSM]ψXZTaRy"rX[@X~tK=w3_Tj1,,DBJP!/pHHz@E$Ok\i1ǼmϘ6Cjbԛ@P\NDz5K/#+.=:X'De.1GÎ]҉,fXU]l}s:u[eb(uaSSg)r]Ex/: ǹ"T]E=>-5)}LDڮӽ21`Slݵ$$A8zM&^͔G=?0bW,59(ρOEdvt +vNxoYD < רb>(aA[Σ+E Hvb"9P`2њX4tϛt^{R^Z^[_/bd'lO9(#̶6C8#T/.wCy]w V0 ݘsrG`Q_FvWzτyzn"2O|NXeUt#ESyF5ӮɉNFB)'#;I8yWb'-81O?ɲ[B:!U!]*Sҙ" YK}y4lb4w[s5e\g $9r3y}[5Dg#8{4;CIIÃނNB0_N01 ?48da9qSmj0 +endstream endobj 1186 0 obj<> endobj 1187 0 obj<> endobj 1188 0 obj<> endobj 1189 0 obj<> endobj 1190 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1191 0 obj<>stream +d ,h~5abO[?a]~jy.0Ҽ)?Iḓ尩l9;LvI{zU\W;턽}s? z.b)bJcbaOi]!ɋeXI+BR:bw=]2\)a&\YoͷHҸXh{v.as&y==X>rgá/0 PһQxi.h^3]5~g<G3j$2)&P-c7%Hz|La4m[ cJs^dn"|*uɜᱠ'35 6̈́qE-9Ggt4aS?Ab?X![#^yTǛcT_j;PB3c%AeGmx{}%Ϯ @܄nu`pNH$t&NGɔ$sdj.Q|o8=Fؠ徇Qh?M8&|Јny`{ +pjSHވ;D17 +UQ.wಉEosf;:YA)51}]kI#No/ 6![& $ΖmF~{?+ nqܟ#@d VmVi3vɡo&͡S3Aң+)?MYN!R?>j=g *m9Ktee(ūZFVCP;ځu,?t;+?ODc{4oT=g?L䖱٧H +%A +ArE},?JvZḧ́3EOP5oԒW40RUuݼ%$d"v!̠A$ =qr 촍h]}(xj +F b2BB]QߦMndS;s -,)s(Ղf([%1eV+BNH"><8Dn$&rZAض 1L0d*ՙI, ,%,P<9a 6 |0 +h1tdb$?0E-I'T87)EWAzxT*XaWfڻrzz?jz2dW-cjўo׉\Ru(OPW M_pn{8 +endstream endobj 1192 0 obj<> endobj 1193 0 obj<> endobj 1194 0 obj<> endobj 1195 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1196 0 obj<>stream +@X$d _l4Pq]H7$gjţʽU࿠WӠMCV>u& $a/D ̞v&_#{Z^)^G`-2 +S߶`>N3 o>i-;|yW=Zqy9x]QIl+#͝VE5'OK`& B!pbd9}m-ɗV8>{|7䣹,ٻgE*Cp\"\2X>ȘTL~JfVtթO_}sgK~2;Ɲdj-:Mfwf4z:B&)FyuMp SlziqWC~Va(/:ߒذ՞Il>@2,^D{qݭ\+ q&@hԻdj;g!|و+N.'R}=xi]vb^_q,Dz]x=>4/%؞ u}nXBE& 6aU*<UD 1tf*̠ + $wP21tt 3hdCP4W;'emSRrIcbeNJFPØ)jcd.sP2p=s>O'$!ˎLZ,?vU0S.S_0Y(|2Ho1iPSi+{`h|_ғZdWLw0}).$t[BpwEojћdq0$59F7je%HRLW$]R_k;-y θTKt?bY+X@ G6 V^ibB> !fEДSv@Yܱ*̱\I[ + T zW +endstream endobj 1197 0 obj<> endobj 1198 0 obj<> endobj 1199 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1200 0 obj<>stream +^;LKaե*`ZѫȒk)~Ec`'%Fm&FwHI +S!n +܀>Mo{{d=s\|sN'Jh23MAvɬuj'L15oUVoXb%pS +FjmH Yb_rRO[q3Ĉ'JYl12!˪@6 +E>j^it$1F=_y܌$ !x̍j/RBA{slA_e&ẉjI|=vxVMO:fe) 2Ne\GOkN|!mJmAU''Vʤd,]~|`k +> endobj 1202 0 obj<> endobj 1203 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1204 0 obj<>stream ++6oZ|V/RUT[ڠt88na:¸HCS&Pz[K&hf);*Aw-)a*‘ڮNT? +5:8}23pzo- +dVx6=}ǼL}m?Z6á 9{Ybe;=,Z>>и/jb0b J F7gi8~QW_iucr ESeٚ)΁Auwc0z*#-;!KnO3r$GGН!GQ.E^2d +, E$_^#B; ~+ F1>8J@ u Z/N?e: W4CYb# A.=UcT) $ԏ*\q=ṟ:̚'׼M]c$+)ql=D([ %Y /k֚sB sECTUW7ZUj; v,VZe?{A09LJGIώ$i^7rP"ю^H.$(Ix,}B;*NY2 O{&ai(~lgv $AvQK[|r'ˈZkg+\%u\#8"7nDޢ:WyrEs۝0 y ޟs[Z5ZHCNtQ0˝ÃJ +endstream endobj 1205 0 obj<> endobj 1206 0 obj<> endobj 1207 0 obj<> endobj 1208 0 obj<> endobj 1209 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1210 0 obj<>stream +jif[Sm`{\_3x(y᜶Iَj+=_2JU5來)鰹7pӧ3Rsĵe>]: N@--zf +wcnl!hgEVv(Tw"_q[S,NOrNe;brrCw[/ +hNDa۬10B 6'U> = ф( D㕨꘾Tۇ 6jij;0v{⃯.U + {8u7w1T,X ĉsy!߃/p2ibkabcd;v廓$ +IG#'Y:G 1>53X(Jq#.&#!5EW`B;05)/;bM=sD^@BLy.K&$/C##=}?ڬnʸad 7~Ů֪8 +AF!M,#wO$ ԔJBzY*<-+D +u\Z|x)WF e&0[F0 %(d ڕBl 8 lwŜ_{H-o1:i䖫}6ǸXO*e2\qOC- _| +bt-Ja+4 vS1CiO2M}Tx'&ZjY?t G Md WMrWw6RRfe/Sp]p컋q !O- Yjw:(B9fA#иq56*!̌[iU-YŠ*[ɒO{Ԗ +vHNyܶ;:2PZ' DV_RA/AYZ}aXE _ͫ}S#3"ܿ"OVu3Y ͗E_ܥcu'0L+4\&E`/zpoGxp2<~'-E8{gO%x@4=qűST4ѲvV=*|>H&)=7"z$ +~ĸ$n,-sH#adXbNJj{(2.m5R( +4٫1Mʳޤ,F,z@Ksy*;u& +endstream endobj 1211 0 obj<> endobj 1212 0 obj<> endobj 1213 0 obj<> endobj 1214 0 obj<> endobj 1215 0 obj<> endobj 1216 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1217 0 obj<>stream +N5FƢ4fiC@ Xվ u5O bwDI_Ғ?gt-k)^0l2 h<5-ifՊ0 J$uN|A §VB>d˧ sJze sZpp myż$ q@eZzz$T?c^KKtq^/%>*lƜEhlxj=7nV]4^ w7cuBQCdsΆgN@#wS2yEiM+G5C?NJ{"C&Jf:r>T٭?7~so؇.Zؤ~4i &#FjtE#!=e6Qp$"}a\C"@mmk]xV e)D\L}$K1?#|#dLg0q@Ib@cڹu.-CܟޙNN(Sa[fBd&NeޫԲ7g)0xC/tm͸ Tj D `Z:. ,e?=.Iv;-u[1|q]b}sX% +Qe@?i>5r|w Ny='O+cSgN@yͮ] iWӃ_xo>|lZ5m"\ED޼+ Օ7(wR+@õG;-v`๮|`xCaAZnzZapVPGȏn'< +Kl'UWLP&&^9`ۗJn߼4 RI&<+} &ʙz}U⃊"Zg1R; ޵'CcIPj'~XF/[mjkKu 1@*yoˤ$wRf@P8~؈ +)E9VLoLϼ7O*$)עjCA5cG^!qK?0j2s?"$~_ +{"?6h:psoDT4̘1I1i +#m<y>>Xn0|7{K 9c^腨3z`𹳌+P\@ $k+Q[m'?OlҢ zHZc! +g,?a)'K)T!"yw bPr.dlX9KUQT*nk%GI:Ô]?%+  ueF!5ViX,MXbl,h x *_'Y?*U5;zCfM̦8b +endstream endobj 1218 0 obj<> endobj 1219 0 obj<> endobj 1220 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1221 0 obj<>stream +87X70GwEPz$㉲įTddL.ą&H Sðd +1KINPD N߂0}6AJWTD +yThZVsJl +茘v>Z$ġ|_o8 + L+w glrp@dXK] %poA$zx3q D" +ڱhM)xGf]҂D>;4 +S|8bϲ= +мMdsuŗծV2b4žH5$b7Xql'ۢlY^̰Ub{7QaR^P_7cޚp?&|L:> endobj 1223 0 obj<> endobj 1224 0 obj<> endobj 1225 0 obj<> endobj 1226 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1227 0 obj<>stream +@ ?.&KӔP5 'uInBQ$0T#.nOEɺ]⛡d#:gLsMm(9p]\RL~KTx8!W@A,_4 %>^˫ٗnj};}*kb}fS t7 릎wسd->~Ϧ|BSha@j/Υvl('Q/A`>{Zy;d}g) gG:+a*Q]XG}w*Dz/nRXʒ.f "4.76WO#dMrָ6s9B ed-RjX8| 4ֺVۑ ]<4S=CAƅ +XQbڀctO4i: ČQGE{nʶ)>+]̨7:!aCF(6 ffeplB +VDm w0UFasqŜgxy`>%zkwtQ߮Pqz%PeYSDEt5?\cNZXNj\peW1$ogGO{ĥ7%Rm!9Ddb![]*rHLg~Yfj{LӅ|W\9+6L_/Vo:b,Wmsxnš"^ w]L0vc +bG⌖Ab%&*rRjT䴦awF F&N}Du`PSQ? &RT816p(d*/+,/q{Q.nv%'DXsP<=ouD"{^턉y}FA=.XgO_SwW?M8J)5I^C.ɬVvc'ܠ6&ӬKAlw@bBr21VTc%d"Қ%`󮤹5!@ԇ_CӒ> endobj 1229 0 obj<> endobj 1230 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1231 0 obj<>stream +qvI0AlZQUx>at箼?^Cd5F#!iM?9D9լSa paCEEτI~o\R7йbBcڒDoȸkьF/o~u{$†].Rt&g +y @;2`F}a%y}/N+S/hcCt{)?t= + =%H.4!3pq$#! 3֚/$ nM=л]k39lőREٺDS1YF|`ZJnm7ϊK |oPׇhaPŸYtփHk51 W>D [#D9͵M4=D>Ar?@Z}x %h|Q P);k +b_f;EGBC{_Flzְ%ߖΫح +>A=|M8a +.%z(ܿ (O^%Yr7uL._1FYGT*&M\s^@׶o}go +,Hی+#YGm2n”,fm W0Jf_u5pk @>ޭ࿒hޛmHIO-CD[sHHZ)N(g4G 5Q f越Ae/D;\wy"I ;ɚ38{]8 A!:@f.n6NZ`U\2 +endstream endobj 1232 0 obj<> endobj 1233 0 obj<> endobj 1234 0 obj<> endobj 1235 0 obj<> endobj 1236 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1237 0 obj<>stream +u9_\r/zGtJŻUف'[a#ځ9( Q{o@&864[Ov+^+μd^r 8.@qH٭I* :5NE +őzUf+tJ~.df>JθV_޶S(Nj  "GG2/6{k_bLudC +mGBhW|wy&:Dxeu Hw^}I~dYLwhR,dp^y2".튒ѹOAho|FH#g?*Š5=j{g{t +J+^RTTm=|pzнu'yZR 1Y@a%^\ΞFݽyTۓ*/|g)dG*p?C~ kUjɧ~2p&9IJsvgEm͗Xۜ(MdI^K"N޾?%ۊ瞦!%A]AH6Ng +s!?<_{~\X`},0IK?uHb3+σGGuXm8,h QU+BX<™)vzsќ +g#5 g$eku F48ʢs 닁Eq}kLoeHhq[|vnbzw,<`7EK[g4ri7 fBhj1'ppʉ8Q+uFqqTCjٗp)zm<Ė.e̤Sv&{1t uyYG֤Rh_%@DAǠnA x}V#@.> ۢP={qP'j4[uFA+<B3}0\qQOޖ˷&r? +@OSW.)ѢJZ՚L?2܉ Ba]Bq[HLZpo&leJp>$SÝ4bMBj<Q-v D[f%Øb5p^[o6"t[87 tԺUfuH#?]<@R x(&ɼb6 cIH-ڷC,9rGveoq w.,vW;{3ؒ +endstream endobj 1238 0 obj<> endobj 1239 0 obj<> endobj 1240 0 obj<> endobj 1241 0 obj<> endobj 1242 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1243 0 obj<>stream +k:>KS`ϷvC[}6P ?2Ty*|Gc`^@#w9MpCӮkWY % ~lqE}D3wCTH.LKO60~_ά +C.,qVz֢cX*]_횞n?OO)>`؞֛%BέZɾ.:2+I#0 ZA\tAv{ߔj%SG֢(ϓԷcJ#答7'*%YEʼPa^VMr By7_{rհ04#YxǏ +@FHUaNm +,UtTΪD W9#P4藋 P=dvbzҿM ~XDtXe<ןbf:zN'$I"@DMWxl)2U$r+uZx,-v5;ރ0BQc0c,T7%:w'$f͙t70)\ap^{*:);@w]M,0} t(w F-~W获&5EIIy- :0iDYMHșoF?3LT|(xӦ_B`FefIU<==#)mBT|DKa :"B~ሪ~i5YB~_R؈H˂ @v ZXB轘/7ӣ+> endobj 1245 0 obj<> endobj 1246 0 obj<> endobj 1247 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1248 0 obj<>stream +VY\HXɏUgGa"6Xy65*6f3Y)saYJ淠bVN ȟ,(πD,Hmcdng4qh\: +\/>qVEIq[?69@`iVt[Ju~Gel< +B ]#zѱ a},Ig@o2=R%SQ`l(:k2:D})h{R7SXFmpy|?T qLVF%xj$toDt|[v +k(SJKvCe`lrk 򊹝ц)#4mqj{NŶB/`pkt2Jp˙;]+K~6SC.^1p@9:t^&@+8Ȉ{R&KH' l; +endstream endobj 1249 0 obj<> endobj 1250 0 obj<> endobj 1251 0 obj<> endobj 1252 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1253 0 obj<>stream +D !#6=ujs]RYzF?EoǝqS3 )t;HE;S٩ZLDIk8ȺD!{5/vyHBse)6B +qT8:lN +YzU*~/klV 4kq Y:_U:#BL33fY\T@MW,=R*.x:Tq@yVLXK~dl7A鏜9 umA\V<`rbGƵ ]5п k2˘CO<'t*)ہFִ.`N]qo\a󝫞277ex gǗѫ&t&DYt3Z0 Sb\g=4OÙJhמ'SY n2A:HWũS +]"tm=N&7GL03R&Gib*1FwꈆBu[+OG۹$NVFND7/QEߙF8Vq*fr +jƴ0 41l!̀GH.kдo3T&,z+DƶГfSKA64O ]]|4yj~ : +!b>]FnIU,E4|m!ظt6`;Qyl T_! ] 3C^rۑ_cj.wWخE1<9W+֢.5ˈl4g$8~ +endstream endobj 1254 0 obj<> endobj 1255 0 obj<> endobj 1256 0 obj<> endobj 1257 0 obj<> endobj 1258 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1259 0 obj<>stream +ۙ^('<1HP0J0OEB7OqMZSbZɍԊq4"9ݕ2# Ot~u5P#19[CYo2#Q]J{Ҁvl񁸕c)M"9%y(˘)p˄w<>}fr~(P]s9VdxG(1SQd]ۇr["o2ɉVwo]R.&[ɞPІSMS WG؀kD0*\Q4I}kb6#l$",:D0Ssf*W٭Q>OA=FjDl&=# TEHE_- vLVe>(gRΓyH!Q价ߐ`Iu<KL"AyvaԱ#E ]A^7u˪q#|C(]=0S%N~l 0Pؖr|8oܶA;+>6öubclQoz=>+bbU%T#_wq f>bT/Rd +V'輿{aJT:o3d}E@cJ?V?V\/NϬ5ѮV2T*ȊУMAGlO_K,#eJ,QGzI[tF5q/"{f GZ>֞d`4Z^cMdz۩@tRjna9Sa({ES#^uC:LWTkE+㦆8_~U -5. +h~3E4t`TH;o,sY> dikr*XiEEN^v"~3$Y0M{+ȔEÑit__XA +}!贵/ߛpQ~4mf93Ɏ98*:1١V@'N4p-IbUI$Xgd8.0nqOj=ʈmt +endstream endobj 1260 0 obj<> endobj 1261 0 obj<> endobj 1262 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1263 0 obj<>stream +\{'֍ +&59^KG#ǽVl#%M/'L@>JsRR\`d# `xӹ=>=I3_9H7Z̙Nu}X$$Dh|t>1}~]{ì:n-~L_]PD)wzhT:l> + E&8 \@Slo2fF#(YOTLWl_7*nDʶ7RJ%D޺Б7p)?a灜;wp]#b>V<H00.k+~v) +endstream endobj 1264 0 obj<> endobj 1265 0 obj<> endobj 1266 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1267 0 obj<>stream +6oYqfmOYէ ik˻&͔IތT`/Bh潤'@2iQD{5(ą(g[| +zƖ@kaȣa@0np׭ٯ ]]w?eJʰ}⠅Tf,zZ*`9DY}ua-?S8w~*jw Fjr .3:ͧ.|Iԓ|R G>&/j`-59ʉ#\vH ʹT2q,^0!XK U~.Omj$V=[Bt 1}U͂ɉsשEژŕj@2#0k=C}R*-HQ( &@&X&pj|:P!(%2 esەSCԱOE= IR.sFm +aϜUB623ܢ `RDc{-`Q@ilSg%gk>Ati!X U翔q^むjYEBIɧ[8s^ttW,6ԭ+ڪTLkQ +alp=X&nWvz]_\ܒG;,0}fHNs8We4I96. #]p)((?ASUíI~p"rV ԒB :{^킶=E[@1]GC8~q)4@虸}MM'\Є3pSRxM7[ V5̓f"opc?^pnPeaOj$@L +IN:(Q[$xC֛;_> |L]M|/~.](> endobj 1269 0 obj<> endobj 1270 0 obj<> endobj 1271 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1272 0 obj<>stream +bh#blo_*תn^'vm孜5 +,Ůԃ~ڸAť2C*OvGJ]pTd\%8-6ĜO :7s1Ţu @wQOQ?reP0;mg| ضk +l&ZH(7dJf.:TT"GkfpZY)"ʯEL^پCjJ, # de8mouz6|$cY:]*n1JXb0{.3_FjEl,*S* 5fijÉ!mo:@xqư籉jŠ:rm,yE+/!.]El,D~/T MRNYH!W}Eƪ&˖ ^[[W-|\5ɤgY~tU:V.%\o3< hrIfnzp8b5w"oq4jwb ٽ >dH$Hޒ$ЦjM߈^Ԍn66.M;$iTI%y߃nBsZ7s*P9x4@Gg߯a*Z(Aׇi|Uɰ(%HQ!dRH%pkx?f+8(ܯRs$A [),GSgpRe lUP_a,VdZOr\nnіxbs +?>,>GRLxbyt/`QK#Ń\= 65bY{TYiJŷ&:% WD C۾׽^ezF޿_h:3toQ+Gbn)מLVf\תpX&3Z:jf<.("^3qhX=ӴEdgy6) bù!jbH 4 k`hQr|bx"cH|*4h~[tj"Ҁ 0\6zv/9KFדfp *G)e CGlg՗nDwN>q+F_!v&?rfOUjɲb7W\kzSeyظj;d7NQĕWhxmcoNq3kؠ!<<[̵~ Zwj$wLட- C;ZQFʰAn}ڡx:<$.GfɌY6bj +endstream endobj 1273 0 obj<> endobj 1274 0 obj<> endobj 1275 0 obj<> endobj 1276 0 obj<> endobj 1277 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1278 0 obj<>stream +GXVde4,t#bq1$GPʤ6Ie,w c\x7f.7 + l:4̢gΞZLo" |‘ٴ -d&Мúhk`ЀТ-.:9Ⱥ;i`P^ǏI/ј"#T3j*3du!/bocVR',`B5 +/2UQ+d*M!s/^4A992*:zu{7yuS, *K's"2.7&e +OBA>vç4eO/~M"O wJQbW xr +@]K%L#kU*<,{@Vݝ:h D,I?;_J$YB{a(3X6lԍ`dn2 $yCWOli6zL5%l{G)F5TCW\=a.ƕ G `߂pZ'0af8`\,"n W'1,gt88qdX +oDQylUߍLWwffwb]gxNq ;~n0oGf{) h}* d~EbzR.]F)~!;VFa; uǓ&b +֐$wT'/+M u fpZc+ +6ub%=[!/QiI::g$9N3q?NcGzFƆJ ʘaHԽx-aHH ZۥqyXEBJk`7͉/jďɪ+נy-z_7+]<7 +9 lS&j0x`&>}jEpuLcn5 = 3 揿#PpM/)g")B,y8pn(lj2Ƨ,x~} Md81xŀ?D@oF(%~Z*Z0!TkG\Z^F>H!'̴)ΡQۢD@>ZH&áK)@uiIk5{=*xе +endstream endobj 1279 0 obj<> endobj 1280 0 obj<> endobj 1281 0 obj<> endobj 1282 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1283 0 obj<>stream +RqkyRH? 6s/{qjVV2l{!y$6PRC4^Jf|҆e_-7ʏt?*)lSx鈻t{p_Q=:h,Dp5X)rE2;Wwk;oUc,_ۣcWԉ&?&cƑxLF_ +Gx H4q-%jX>uC"i\VUD04N=[{\0݋(jy3'l\=>ȸhK9M>OkRă^?_ H-Q\S2f݋Su5ZwB+y}$~1׭"tӏK2$*z2ޱ,hӒbGe/X7G&?0 +m0)aHβ +50S3=Հ,Hߣ0>:4/X4xm|?>E6%oV!F1! +iBi;#MS}"TZ_yY@dwGS"UDyY+8@*}9jAEbJX‘[ :ϒ-4'i9?)ḭRs9w4un8w_)ɼ #L|t4&(%JeDy>qfƥ{Z;8ҩvb3W >9@5Ǒ>*p@ KF{!CxJW8uN+".Q.Ir[WZD<]=|!9gw@`UEVMޛG!]h]z:}DN /i3XɊ y'~ܦ3nJ};;HEˋeo`Қq8Ȕ[> endobj 1285 0 obj<> endobj 1286 0 obj<> endobj 1287 0 obj<> endobj 1288 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1289 0 obj<>stream + 6s)Z)}E~weo˖(%'/+d8WVM0E.45,Uk1bJ'dw"O4^e6y҅&(xO p=#TЌ:ў8;i7ٮ[xm,̅qڱrwJ=ޅIc!>0kߟÀZ~:Ttb|dBY.f}?^UARǗzu؅jִPryH:{~Xq;.:v`$7T='^oʀKxKfU"?MUz?F:Ā}./B@db~R $ZQ8P=έȵt"#5RD ]`pQ%貍?9Zyex.c幖.}0  kT̛OB,*HYy?YnEʳjE@s<6'psNӪ3-lMm¯hNs +@Xh6Ci +ESQ}> endobj 1291 0 obj<> endobj 1292 0 obj<> endobj 1293 0 obj<> endobj 1294 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1295 0 obj<>stream +ԼM"{rE+8>/2?[[E@ޡ0]j]7J>5C# +72XМa΂;iѱ!*F~ e<ۨjT^n3BPZ 0 +2Sa|[;wQ; ]ߊ<ۮK5(:zvb #U1+ VsT=:l& jjpJ\hV*5ÃFF~Fxon)(.<=./QeQW$dhctJ4|AP }Xen%H*qZ L>iEao1Ӻ۠Cx1FA#EHFt4_%.d+ne+Mpc‡zY$G-$(09J]:`9"rfL*6 0P6f43L: KRpys.&~o{>[2!d댊j"yIOOUtU-3>àʙK >$pLZٞj4!.U2fd ϓ%2ȉmeIH]0ULTyW^+X~KL8eᐊYJs~Rs<4)Ĕ;;X|p-R ՛AG0jAAcfQ[d8]8LrBS >u"7' ^Ξ_\7СNo>!f63&3WD ,jtIyjzEtR߈Ҩ]"`p'.MKphw+;dAS~sj-ۖ9|U{ofvu+}^ȺtU44 /&>-Dk{gGc؞ ).r]x]E G; LN-!gPgEjpgijI9z+7ց2 ع)_G^9harazR,mK$k/1YŚl`{r907ABxӂ-{$}Ae\>& QG%۔E(cCޭkI:auVG< +endstream endobj 1296 0 obj<> endobj 1297 0 obj<> endobj 1298 0 obj<> endobj 1299 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1300 0 obj<>stream +j篼đQ'Ţ6phkXoGP/I"Bayv(e/y 9DrP>?Cc ۠uG~QdoB ./l:3"Җ IEtOn}-iDr'njIE>a]8bt+EA-pq݅Gr]-T=\/|*-CW)ꝮuS{[@'bk-yTk=ҁ=ƭ"c(+|1QNH ;DWEqYeB}fa>eP xϋqm^ ]'E5ef1%*_>x GKT9 _~V$5]lLAN״hmyXO@u?29˦L[>@B9 /w{oǶҿQ_5pYIE{5&*x9 excP/G5]s ?{D3u<;b6(Buݾg5JQZ.E!+yT n3b| + +o4ԏŤ;p{Hf܊HF-wW%8IAV'VR-pLas[efZ6_J,K42J4F ϗ '_M?Oc"aǙ۸X_hG{S>!g߭2 `Ⱥ$_>EU0007 ~z=S#*'.rrW=?VD~{/b 3;#Z4VoVqEykfѪf}hHi;a>f%Q Nm>vdD#C?X/E܊0X|b [s_DCnfһ8g9iGEc! +~IO/dqhFr'fl83C'E,o\IEOIOKz*[hES;r08Jџj)jnm뵰97М|,X 3c >[}jV`VX&!ťN| 'J;v,b6OWPӀ`FS+ cћGdPtނq 3bق^b/(*uz1F"ct`-^ I$="\_>|:xqSG݋_Ͷ +endstream endobj 1301 0 obj<> endobj 1302 0 obj<> endobj 1303 0 obj<> endobj 1304 0 obj<> endobj 1305 0 obj<> endobj 1306 0 obj<> endobj 1307 0 obj<> endobj 1308 0 obj<> endobj 1309 0 obj<> endobj 1310 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1311 0 obj<>stream +hoT.tǍSEZVhh B\ +>zOC2YT:P__ +bH`8XQsH5uzt0G+ꑖ⩃bIEUG|ߏսM%\ h< p<p7>SOÏu) )MʲS!jo3}VF(HU喜J$b<>E}C/ D߀ꄤSʕg^FתxPX-Ō9ovݹdK#2pJ8EԵbw/`[ߏ +1{@V^J!9}! 4y +oCz##7MTļd3a$&m8u-4H!/}-P3Q]+OAƓa+[i= 3%.fI߬!3ݗbV/[TzAG8ﴂ'jAU!2],7 NUH+wsn} +*`_a(atbRKЕ>Xy*Nvup_8:YY!Eb tW%bw }0X~Kei5yfwSu#~7B +4o jb24j[`u#uǠ :oF~=ẇ[Gq[\0\b= TQjk:jfhȏHۆCM@z 3hWx4BcBhn?i!8,3L4$/g-SsiBU۸rl hg=gZy%kFskh#!{ϥx . ŀ}ƓLy8MQrt,PLOa̕n0H4wnºmL1O!-k3u nפAawX@{~=An +d/zs. x౏KKZ8 +'9ұszӜ+9_mXc[EЊ-G6@s#vɗ߃A轩W.ڐ@53VL;q3\RBYl10kK +endstream endobj 1312 0 obj<> endobj 1313 0 obj<> endobj 1314 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1315 0 obj<>stream +,>ς4GҳQ~rT[M W" R٘ӾbAYUPg QAz峥qz&0(٥~VT譥nVd4,tZȶ@#I (?wN;]'JL`sėM7CZh%0vCaY_ME8:"zY6mg-g׎6adwj83j(]U>DjxK2v +5C1T <ɍC-cz{ i"'o)yFu T2tZiD4-ቪ~ud)WnFIr:[)=?ssnxqCESOe#*NG}%۟ABn& ZV3LkW5$!q"oPܷ{i#adLM?ۙihQ +*X,x.XI0J9M%OmX@ VGC-{>a=M?/³Et!A*CG0 Vw#<@5jFy[d+dHFme 5cMaJzy?HnYm09~IÆ7];s4K-{)TLhn To6; a {ot~/ +}cqHЈkSK;"R =5~hŢ*88qqfBkh5;ϭ<`4L۾hUaz,yk/-?17ZvtP0AQYK326W̚P ,Fv},UG6~ ys+ӑ > endobj 1317 0 obj<> endobj 1318 0 obj<> endobj 1319 0 obj<> endobj 1320 0 obj<> endobj 1321 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1322 0 obj<>stream +;m8 +.31dV+I @-Kwxu=fh ?)_nf[rmU]}ah^ =PfocW]0(2&sb*ڕkS-KF* tvD܍ d QL@"RkE +_zDŽy]Оŵ m~%(-}g=o+eCXs$ݙ?ӫiA<؀Q3J.oϡRSVۮPfGAIVwҏMTt./eDZ4~`j[~7j_P{#A3E?k E|q@LKA>7[5;jL0%uC =ɚ1vdî۸pm2LOu})*Ņn?HݙՀ"}Rt]}ze }K;z  1K_zlD<\|<ϢV-T-$ocen 3d@oQ$&| 0y"QH79j 5*I}u`7WX`(&hߘ^Q:E,ouh=!ΜIr|V54ֱ͗fg?^`WCsdT /n7 p]~i٥GMYa]¹/^7hm,o ΐ/:!DB@Unf-kTDKNӂ +<\Y2Pnå M_ܢ̌{,A |L^i2l0>li?{;ͭ\(W2/+LHA+:rr1W`Z`9tU qwͼ$GI815DTt=];SG7h6nͮv'͒r8ui:bD? 1HQRIbuF_Ig<*ޖzt֜箖X[9(Ӫ~6L/רY 9Ma> endobj 1324 0 obj<> endobj 1325 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1326 0 obj<>stream +r8G6)qŏ ŨTn~ ;7 3;ob׍-RN!"!V"aq+4eP6XZI A'8&r;WR<k ; n_J!:)!xR/bd|ZVԎ<1:@7bjxطba1bzJpɌ'/]|ZOB8dYuݻ4&הѱ,=s'Xi |2fvYUiQ}]Bi\e# Y墩y+KLt<zy6t| : TćU6NHzd&DzK`|T+BY6ox\b}ƠϞd + +ݤقɎb4Ͻ. UB~C!bdê0P)v6|gEY B3A %D +\h1b'pz Йqq}qxsfU3duLX e{,8D($r?smgV4Qz?[ #Z!y1֟(#eWk}h4 +d\#3Y9y dz5qkh73kc*|:6Ya! 뤴Մ'/H Ź \L> endobj 1328 0 obj<> endobj 1329 0 obj<> endobj 1330 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1331 0 obj<>stream +['w"@x>7Yo1:.$xMӂ!"YJ]jF6wD1P!$ +lM=ojݍA aRSx%Wx|Un(iis/ {6S2CSA̩"OȨB)ya)E.W,:*Uu {5v#Ы,> (m_[;ّE>ڡzaVLrq!>6:uڤ;(h{R~+0 +G3&Sw*:8^ֿ3W):ݹ"W+71뽈䜣=[]hz-;޳On꣠PgV0\h}(+UK: 5&X 6@'t%fu\P*ɲh^7I}'A/Mc2Y2')qZՑ/NNF#/Jvm]i\5fTc9>Hၮ;ejXR-h':P;ٞ̀Vway3IdTDG] , Ppݬw/[2ոxj3a += $ҎrK~q{mh#F*]Z"g)vwu|Jp4TdO{O$yј3NWJ-+tLNe-P '%Cj~X$f4\>Vr>ۜs"QwI|[٘  ~ܙ*=rV!*oHz՞)P~S29Y (UgTY~C]3+кFȝ舡pFn(wiNż6ڋ6 #twnQ+Hb +endstream endobj 1332 0 obj<> endobj 1333 0 obj<> endobj 1334 0 obj<> endobj 1335 0 obj<> endobj 1336 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1337 0 obj<>stream +$;GɨeU|Q0y{!e0 -W{ɷ%'=ĊH$ ʏԛO=gs¯ʳz_xɭOq #O\<Ƙ2#uj:-;jp[F" n3FiN#<Bo$2ߺ}cYE/ĥ)o:ܟ #pʫZx$!0jCR< T=w`qoLŮxAb%P.6!l؀-Jo>ja.4}y&`v[}NWmil*PFRC(y&x3"3AS0,Iq[DpGPRߔYW5k$ոF!Q\ +-WB.M|J6aL[\#h卄q(xDd4A4y@n>?)1EͦMh3C<Ӌץ.i߇UU4e( 1\-B ] e?@A y4lM|H=wsOv+g<6 |"q\㭯"%'a>*%RP vlZKj-礼GHeocJ9xqDu@f~+ok< UqV=8;װOgVijԑbR61tcaNj/D +> endobj 1339 0 obj<> endobj 1340 0 obj<> endobj 1341 0 obj<> endobj 1342 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1343 0 obj<>stream +@k ]@ Irml/gGפ:Y/Kڏ46HJ\ɋ{q@ۂ&>|㐍W} eV|Ou:N*+3r*gW0:ܲr/!jCu_*[XBnO2Uྊ!.E`NtxƵucX4:iφ{,k`xERո/'iK164iՑh)7#rB77 + +;Eyesj 'y-!X_ i;wcD?~γtr`oqA@~J.=ov UO1F[PCAZߎDǼk>r?ZEn9J% +^sgSqX2nfOg@XEqXiRsxݿ&bU`V0 ޢ#DAc ğgc)[OiO{NjiYa%RFU}6{2G.kϓNE5] p>p;ܕlRsRx#3,kEFr6N!M,BD8PƑK}-kp%5~iQh» !9 :]E#MtHJ2N _lf scJ1 Ċ|p˰ƇSڞ> YݙwS + ߽ 2dEu /g#amQǎ&JMxy^&QU˔D[FmYK&I%-Ej>ZkQi0kip)4FP_5ա4u)lwAGT\] jO^yC,4 =w&"j`R#Hb wv24XV?=ƤgHF7~&즥P7_R]ڣchΌ3W ~P&Sa.F!QLƌ<apIDF9Ey9T{pO +endstream endobj 1344 0 obj<> endobj 1345 0 obj<> endobj 1346 0 obj<> endobj 1347 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1348 0 obj<>stream +Yd?Xz !o8C#:i3!|^mN +[lEL'S'9@cJ[\Neۙ1C*L{ðA tDR"rzT6]P4_8h{_X\2*/凉t6R'O~CKWvXR" *`xDZ2ٹHr9LǷ@ WpH.I6c~ݼNg(S,#X-VY^iY&ir,}n3F,Zg1Ѳ{ +^&O}0ͼYd/CNJk_h#58Q=MԹf)|KktC'Undw :ʦe>,kt(uegEssn`"fVE9_.Pi[JVA @Gϒ F-*VT\oU4l#{]X㶾@k z@!(`δ}0X߮IzkLI׎$)_Zk4If^$@Ah1Vǯ25q1t @H +endstream endobj 1349 0 obj<> endobj 1350 0 obj<> endobj 1351 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1352 0 obj<>stream +Ǐ +$+"; +KXt~yqĂ{,'T@e6#C$]kqװ q ,TM5|jCONc PWU?,g+ziߍkzUP/nR#sG*llw3$yωc0$xC7ZwFc38,re'= +v@M$Ǯ8Bm i̤)N2g}NY2CMsnƄn;8Y4*ޅGhd%Fg@󇠉]U?AbMWX.]n@n%pli7ʻMxE-:}ʼnM >bAЯoUsS}ŽxdE@3G"K"4cN)\},7ŏ>*$ă9aщ0S5,L4s5Xn!ˀ [ HWE*0~H]dO5$x({{9R#?z:5g~W$CwF=!~‚}j!Fۭ8%(!$CH rȈgd +endstream endobj 1353 0 obj<> endobj 1354 0 obj<> endobj 1355 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1356 0 obj<>stream +Uij=QyI0l6q(Oл?*'73-~h@Rx?%KgG}Yp6ceE|c0N*L_L+IoyAz>D1h1|7bIVпC<[Q⽪DQzLCJ,ꤻXp 0!˿SS+Z3g)B_1ӊ|+$=avm£eɍ)a2嚩`V%$==<]t@( + 6к g+K[-%[kSroa%Bt_G!hFՒAr]G!W\밄%,F*㱹n4 + P7U^>WVą'UxP9&/~g7U߮['ׯ[: +sM<X潵vۣ RDɢlz@ +Q/H) 5{n _\In:}Ai +'!9s +abbR +`:(O7z2f<)FLϵUb隽|J/ ÍV-&j:ㅺQ*V&~|ᶥ7tq/"8^Sa漽J'1Nǯ> endobj 1358 0 obj<> endobj 1359 0 obj<> endobj 1360 0 obj<> endobj 1361 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1362 0 obj<>stream +_$=EQ*XxOZ)) +PhФ<bO;FOSfc do8 vϵ"dct:!8 +[:9oYI(hp/(kDM%_nNBXXhôflV2y]sהYhڐcBXzLp² WЀl`4ׁE}DZ/`*u{ cCX%eTF=RNh +|Pw?-'\'4՛38͛`4~Ѝ_K ̞W;@T3mUJxQ2ُ:Al1%wľCLm+[{W-ĵu{V|E~^!gC75H輭~"V׼I[vRC=o"ZSzo>aXC…YUi#&,/?~B5A($s/s׺:a9?'M@ sO,O&bVIc7XwL'^@c>XD kuޡA B9ѥ4i!欀QkC +_GR>>.S:uȾd1<5EcuRi߾$iRPE8/3NA#]ތkNDI[w2(hxT[ыL~q}\ϢZOBL1oPX+agn!ȉ9;)w {6#W$$LgEqNtc#AܐH^^;[G2FZWOk@~?Cei xb +Bg# Jʚ\qc*>RCݶifA hx#- +:Ȝ׈͝d +srL<[;ҭa}i +2w9*tej?cZwձG>"4VZxhIn/֥!٭ay#Hf9v.2,>hI> endobj 1364 0 obj<> endobj 1365 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1366 0 obj<>stream +?4yn)ZZUR]Ah]xݒ0\B٦?i[\ұMI6Վ]" RZ\rt5wUQqovډa{SaVYoSLwoU6rorjr?KH本#@LwrTǷB-[_k_F` e- ά3{792_O43.%@p._ mMdʳj%ʹ?_Ut,@Xު׳7HW 鱅mZ] s (w0? .f`)co"BcCR~Bi9Z$NÄ;2,ΟˋљxQ*q{P42wk40j0`4beެuRTwwHDgu7 +4W^I`J9{M +H泥Ar>> A-PZ(Ⱥ9L`4F^aёwt2>[RʛpR?p_ CpYp2bR8Ƀqlt`Ms{<\HrT'z}0WLd0#۵B8J3x<% +endstream endobj 1367 0 obj<> endobj 1368 0 obj<> endobj 1369 0 obj<> endobj 1370 0 obj<> endobj 1371 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1372 0 obj<>stream +K=iT'6u#)wj<,=~ǐ|e0DM(cBz\P 6x_z_{B0Sur$aa;З&$ԟi*+&\P=*:׽k}$䊬yڔ 3qq fM&7(Oq+UJ`UrȔ3`1fծ/Aemrݦ[X=>ϖO?vf0 +endstream endobj 1373 0 obj<> endobj 1374 0 obj<> endobj 1375 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1376 0 obj<>stream + +q&faRٱ&A,~9 J3P +*K E 7}]ng1 +Lx(8H rC[\{my/q<.2T)L%bնD/O2~̢!u%WЄxt]-'~f)â +1bSImd֣1ѐ f?lBm;hh"f5I`pEzJ3s yv' |9!b &Oq(qpqpm``It~/bٷ?))=`Ta .{s<jy0٨(Cv)XjdOoθsQ9 WQ$cSgE &z\t6I{A˪1~VVbEq`<GC+`b}zx&7;ԏ/l|1yxFT5ߑz#LY MA\4geh#7dJ1(GQ/e)ޣQ5Z8((s}J +!y)MQ: pM'0Vx/>Qݞa vk\VydOP߻%y(}Nc9/6 Zz{Ms\i)BZ#_!oc +lj&E!H9tp&rpڝ%=Ԕ + 2 }C ɐ_9!,|v9bh %O,?F lϋ:"5rLx,l_1l; Džx"hؽ%>vbIe<)҂qbYFpT.$WM*DJͳŪ#Z.J_92EEmSxk{RE$7zQ)}Vx#:\$Ly5>ns2Kbg٘VDNoLAg~?t6_r̋ +endstream endobj 1377 0 obj<> endobj 1378 0 obj<> endobj 1379 0 obj<> endobj 1380 0 obj<> endobj 1381 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1382 0 obj<>stream +HSMLW/1+::SQH5'_YTnz3SS#42JIPh':y]ƒHkI0ŝ3Pd^g\ +b>dPJ {?pjD(?ɇMK>>%] /+H L_kaQQ6_sqw[ڥJYv!S/G-" =uf[e9X;P,p_#N}W~QI@}6%ΗWY3E.uώ.10"V1<(*T1)#I'篔f"k &Ӕ xs/܁ӁE~kڽpEQ +MزGAFq9;bgno͝[̥'z(مb[&qqY "::9weI&8,FQ8&P' +hGwtMզQq&%ls2RR߯v(h MH^#~1$HOժ uaZ +=O@kڐuXjrm|Ӎmh6Y*~(X_/H#c&I`UqO8 JqE2e(t+Ff+ .=A +<sBdG=TaVYuY 0L,Wm$7/I fE}S:W*L+f&18`Ƕ)DsIL[}-W/P_ZВL9 Еۏr+ `"?̽CzMqg0>u#>OvMd:IY_ 9TJ$lnm7)!ǽqEj| +endstream endobj 1383 0 obj<> endobj 1384 0 obj<> endobj 1385 0 obj<> endobj 1386 0 obj<> endobj 1387 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1388 0 obj<>stream +o[/: 6J?Qcsu`D+d:@7LLoAk>[.b2Lzf GKN$`:#v!h*Y*ڌ}3=|d`IzCgbÓ̓C]2xB^Pdag,S bv[GYRL+m!Sb +j+ ِHrM$QNb6gd@/ޤ8xJA\p!ɧb}E+ P2 ҢۦXd!_¾T$0jU2AޚVlLW}%>i tlR4M>nj /BAxٽ8y=rD΍Iv"߁j82[װ~LW +",=pFOr}f u.?[%<tЕW}Jt ?bș@Β"ܡ'_Z[@h.(]Cv D2.Cܳ*p~tl++&y˴`,nmnuɍ5631rʓ1UJUQأJZZߴ!xӜ[V#YTtHl kT=^bsj'aW%+0uUI`2碮rC)m$63}h1_?;an "R}k*HV] Nn$g\uSFc f/ѫ `f>dd*[[2>{6㲫"4ncxQjjɧ42\7gABw6m9D5OX6\d4QW=N -FDвFW&A6D/,[%llrqJdQۦ֗0-;AH1RSDJŝ7Jn~6/5&9Dv[K$d`1h`I Q<;de5sΖߵDDۅ11 +endstream endobj 1389 0 obj<> endobj 1390 0 obj<> endobj 1391 0 obj<> endobj 1392 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1393 0 obj<>stream +Hl/G\r1W}'3O˪[`P,Fay+(nvdBAc4$zuc?F_x*=Lχg& "Z"]RHF\`H-+$\ y[k'#z̒iH~ʝ{y #% /nH-pI"@X(] ַu" jkًկ*.U7WAĞH3&#Ƨʥt!oo5Bu.hĆat'3O^k;x O;M-5Te3iՒyN*JzlPn+]+J3Vec-{~%=g?nHY R~-UHg*DtgmTt"uvVe^{Mo8r&܏ܨzN!H(&tjZ >G̀ݻgS:[QHI_Pat3A44qdΗ^w@9N :K]r f B&{Wj3H8 K3A[Eݭ(P1Z9]y?jLqlR1-v,yyֳ+rT MM'+˝[ qj2:̆[-ݰbb]+ s$=#0?P})⤒r?e$&e]/IWP23WhPly !>뮶IL.Wۑ8;qTdm'Ϛ1`eoٱR[fJHyTM]VpW2t[|Tk4u#\u!5ZԘ C +Y~jPs5m;V'OLXm%c1$oJЭyӆwzǘ2G} +͍͞/0;ir)ZSt(9/|孈*%oG6 c +endstream endobj 1394 0 obj<> endobj 1395 0 obj<> endobj 1396 0 obj<> endobj 1397 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1398 0 obj<>stream +avYmmbxT$'E ?QtN =;,QyX]2^{peQݷ;2){64rDNܑ? Q7;7eϾ,_ w"1+B a =a>6Z2~+~D)+~Z +3s$Wkk}^M BM񉺛35T>D,I5^tֵ-H0xqD!O־@@4+e:b}tWSʍ 7(ꈅis0AU+[qEl-#"t%B/Q\1kTiƌH!kp +V]d'r"jxp9B?rx_O ^΃$ߤ^ZAZo`˷2j2=kmREw-hu\@~yu !̅d.KFy +N`8ښEa,?"Kk>'έui6='i@G3ʿ3ՔIn9^nz":\~ _-cZ˕{pS«J.Ԋvs*wSLMgb1~D79I~2WIO{b撧k ,K)` +%,zKK<ϡEWKL{&OkU3w* U2U@#o#\`K3ˇPBVМ5~\fћfsֳc=],ls]3BJDIӧYka@;J+k+qٳuU$,%`jM!Ÿ,k!wOlW'`їUy.Q֚=IQ]ݚfkP쀯7l{&Vv9]WP .vA#$Koiӫ[dfX\m!{䇭x ) Ayoǩ)։ɚ9=󖐱fvs͢UtmC7 nd|ʸg 2D޾Nl p!:K> endobj 1400 0 obj<> endobj 1401 0 obj<> endobj 1402 0 obj<> endobj 1403 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1404 0 obj<>stream +ϱ2>@ՙ!rJ}T!t,-O<I⑇$I&s8(z3f1Oq +)dv_LJ?b@bXMM?X|n' +!}7ˈgRtaI)6N|9+GJΪo,; {LTuvA(bE.SpUa{*X*9}VpIsVz)$hmHZtd,8s~v5'-z#fd-k?B{ ] +*|x3p.* )6s-,OxOySSo)'BE\ؔwЀHݮT&&P#_NY;k4 go~9IhJ?HL>7>߳U/TfD$v}D, +\xRBݪ|X-#DT_֢Yݏs1MX-@r.:<^R j8Ҝd)4sEc +endstream endobj 1405 0 obj<> endobj 1406 0 obj<> endobj 1407 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1408 0 obj<>stream +A{{,!cB5zS:A%(dt`izR:nw:v:OlN;cy1Q!@`<-M'Ys ׉ 5\x|ڙ~+ޏޥl}`B'~M'Kŝh- R)8^`d1dX/>u;x$_Jot +y}T)$|DŽ`i˞XU[1& Y^Ot1OnR#nTY(5HE2E7F_{O }5042[XZZܙ91I7uSbD1V骘$0x(v dߑv^>A R,E6+xś*un3zj]0 [{GvgR /x.a w8&{:D"ҍc:!j{4=[5``-͆gt(D ^c˛<厂C=P`J ҦO2{{l:uE(8olmV183mX)I7!Jۨ,gV9 qFn 6կ9.Y lCB7f w]rNG\NE&A .SGF1t]dR)=2s P?_!WL8clGKxxsiS +Z1M9JAwh|?$~6=o +OG +endstream endobj 1409 0 obj<> endobj 1410 0 obj<> endobj 1411 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1412 0 obj<>stream +[k}=ʬIyk8RA:q3gMs_uP&Nq"1W6Lt4][go؟gzFMk`[1vIIXttG6mxpM܇_9.ROo׻} J{##=R/.jw媲oQ`OZGY*`" 3l*H{PP(HF֣ZWQ-q=o˅١ҧ71;5qVSFKKsbPUҨX\V{KƍQ>PoWƪ55̆&U ^d`!4p6yzUG﬿\|=%4*&qBRS07+tۊp%wK\P]1BKIlY`nwN%:ȵPƷJj$$Ceq/.D8Y] +]p"W#|E@$E*탹e0ڴ /q#0'sm6Qx ={@QbEahT|v3!e{ڙQd6z EӉqx*D$^(|IK13Έq>N*]~ZAh2i0 5q! _ *[+f-| : +u(~kN3u*y4_kIwX'gBa@"C;e*s5dS@:VBˀQ-18#h7y®nD9ƬE%+.9֌MPv4TΫ9~Sϫf^Y_2Y rf~  B7"V쩜tɚS<4cfnj\jWwY{(ӽ2EFCE.K#"Fo{g&1ʥϔC40Uksb:1O (Jr>=} Yҏ-(ڥXQjB4rʘ7SJzܠ,u" + sC7fNW̢ @ iJ]b +:!+T)˾]|ċv:gԻC:| +G<4zx4G,@u jbQyM,}-Ƀ4O>d40q8]~VM7!/- uKEҜEl>{9hֆ2TAhv})S;zw E?uS +endstream endobj 1413 0 obj<> endobj 1414 0 obj<> endobj 1415 0 obj<> endobj 1416 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1417 0 obj<>stream += óYp>38g}5keM5UsU+L]"K4d3EzD0 X)0˄Fp۫d8lFʴ)7C|3^UƑec!r;hS%&^ !:]Mev"*`6ùw)8aY#]s"IU+R,"'cŠ,#ыCiG(~:r]s$ RL?dy,HŠ+ͺOw%y߬B +Q. ^nCl/ t +endstream endobj 1418 0 obj<> endobj 1419 0 obj<> endobj 1420 0 obj<> endobj 1421 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1422 0 obj<>stream +?.9a26CГ%V IbGEu\Eg/|rv?,07{1uHKpsfE"jJ5yBzFQYV8p=C8QóK'(^;edlaO$m\Oibe(.7OGBDᥥg|1pUoti^,!\n|wh/s)OD=qrJ'Ēċ H;1-L&7yrփ޳с wpx| h<:U^Jgp~)urR}ĵĖlD+83L]W*S%n< + `h<\jz媖TbUrUav$OcL^O7RUB'1p +44oGvz}mrΓI@/=/&%ߊ;yvv<\lFq1a9#-I1Pt˼,63E^s AK2"-6}vhψ ]'y U?|/uyCR+Vף󵒰t]g=? b* &^4b7/#/n,vE^ +M,8]Bc#pOzn_|Wwb+ޠz+N6o+&nLS'eBE_/O솧Էr +tȵnCf 5QႫpC)NtoFǜUFQկh:Lq֒lB(1tZ:+g2Dnsf'sO-$y0хFL\SsdS%eVEYb'QRsZ)6Ka# +%A: ]-~D}?4KI] tha@#rWРpQG(#Ȏ? +endstream endobj 1423 0 obj<> endobj 1424 0 obj<> endobj 1425 0 obj<> endobj 1426 0 obj<> endobj 1427 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1428 0 obj<>stream +'NY—'`zL}S({6vQQP O/ 2(òG>%6J\sp}6aHTB ^VGEI֓̆"('ΫU`k9qtN#pbM 9 4V Κ^ec_[7ɽ^{(1L0.Ww(PbjsȒ_#9h_ogv^",Y+sG$_ghv+"G) TEC'h=24INz+=iSPLB"qM#tt옻{Ƥ vϋP/HetY<+VIN9K:ErqpM+puOH"?a}JN|=-Ƨ;ztHFv']^g텇׏ ?*^\h qNTP+|҈zn&Vt();:[+KI5y'ueI'>ړ|H93*ӺIZGaN?P潏JX7uGe=;0~]D]ig1Q0WluH5Q6DB}zyyRQTAЅvƵG_}z5E;bR7Ð9yǐ%*ԱI0<(e +L{h"E$50Xr§hnV(As![f젱T7hH2"Q +Spio|GGtP6l+giqxj !?MBUzɮ@-XչQTVjp3M,ڢttP1G1WY:&<; ¹MM4F)DU@)Cyb? J/c)t3؞ +Rv~_~L^Y*5.xAmp1!=tW5 xµ$GsDw br|N)MEo0y@I23 7{ @}n?njcNp3>Ni6i25T"ՐM oZΓHWSer)jtZuM?"S+3۩|8 pd:{ĵd.8dEZi>_",6kI P#jLGRi_יz^#,mgȜg@ +|]L-H tZ+단T3nTmv 2jU0gѓ]'D+R :+kPZ?MkB54qXL$*9?U"DI2Mnas:$Z! +endstream endobj 1429 0 obj<> endobj 1430 0 obj<> endobj 1431 0 obj<> endobj 1432 0 obj<> endobj 1433 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1434 0 obj<>stream + FTQqn}$5=:^%N-j9Tŭl4\QTL8_Va>1hv + +wEW(c1bэۃ( sDl~?ߺyY9VAs3!KI19ZѶ(5IjYJTzL`@ۣD>xcx.dbCƗj3)rҋXHE89N 19T7h@TF?=AC m(BtƑHR,YHh}U`02lρill'E신Zz< _ng-;Qɚ2:߯[Vx߂,JXC=f^DHXy7d`f>y uu3ct7` @*K, Ֆ[]V/T @hFF{~"m̊}SҙH2$l:-f|Xz%v2sM$@}9G, [p٫YUPyVc8٪NI"1r:*]GoHKÚ*jcϤb2hDOR&Q: C/ <,6K +Ra#\7&1҃3ðhB$tiZ|Fh ًpX{Ҁ)$̦sJ<>uwdcNG;rYM9%#Ӥ$v^!bCYӧ%E^ +P%cߗ\/dռ-é9Hz~iz\wQBB 0E:Ẁ~isһ!IK*NX׀ܢ-yby&(x$d';'1 7VO +endstream endobj 1435 0 obj<> endobj 1436 0 obj<> endobj 1437 0 obj<> endobj 1438 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1439 0 obj<>stream +(84!_&a#܅le"ba%6N5:vhb01}Q!2~kR')pZAw?GTi*Y ( oKE* +!0Z!\QعER)^iJӸuD,CJސLF(%?ZEכ 7oض&AKXust+q-\0LWMT9`-|yP펍狘A i 9;+loM.$iv_oB0a*z?(K(GGQ I>ؽagHպ2tHFeeo)[C3"fXa?hރ^Gg$IۙB'8b/ E*?g4[\t'g"Kz[YO4Awd-?d=);ǃz&)\`ٚUY&>`Rkl.Zсmț XDHc-ro 9޿%RN[ B.!)N"(t/Q~m[ןTEPBi2{$>iep +>dƤpdլBeHlq+ScY9΄%X:d5%O +\. 7NVNy5`P}xWgj W!dr6ɂ{NZ7v0E"2v^.j.>W7_ ITLߢqϭbcVC鷿|{GD3 ghH[Gj5_f +endstream endobj 1440 0 obj<> endobj 1441 0 obj<> endobj 1442 0 obj<> endobj 1443 0 obj<> endobj 1444 0 obj<> endobj 1445 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1446 0 obj<>stream +7Ӣ0 qeJVd̃eRhx'FJ󺌥"}XpLwt={.:ib _Wмo*Iۧ"H* kTGj{>21 $TRfBD-[ rճhP2[1?=xmBG#h=O 7A]Uf_k`gN1T'EZƓQ6>mT_#$!T(/q!#)6#_B03XfY劘d,T{1Сy@5MܥFe(T1^CGQe:~3˪:R#-(lB_JcGA"! xu9+ ̉i GA}0/q2U1Kl01b0 }4/r [`$ kQSa7 N)$8ၪ"󎠊~8P^/.]U"2 /Z&PA˕RXK_Xj}:C_:8S(C̢>` ߫ww/&\e^`ySe35aٺU9a=, >/ڇSN:2)Qْ(b7Qz&в`y -9HC% :[fȴ}]ctໄYfvj<o|nKWߡr&&[ cV8<-פa C?n=@ʈC S+czTzT'y]& +endstream endobj 1447 0 obj<> endobj 1448 0 obj<> endobj 1449 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1450 0 obj<>stream +? 5FOΡ!3gH(G ^R} M"UN`t¿DH[ab'&25 (cswl!tjVh* fr3I(eH:d&v5e`0fOe67{9Qz6uzlWl#(.$zo.u@4;DN&M$It2r#3›4,(`zXߐ9"eFsyw#PmlAkHJvN{TƼcJ.OslKpеRq%e2ƚ\4+ɞᩘ;.s˰7"]o>$1:8y[xl>Ke8mY|nZ2uH* Vosp sG.E;[i>0 +P>-"R?uIYBWMۤwzvC2n/ i`%fF7ܺD&JOhx|Q܀[HU}T1lYd k-~WX?Nhh}Q8Ɗ@J?{5 zE4 hMց|e;u㍁]8P={q85~XIb T;Sľk+D;)?6E_A®6}wЛQ RzML1DȂD`ө HqԿ/g'oa-Tsu}:d`r!³ Pi/Om"Pr/ƾBfW-IHIM̳Uy0e & +endstream endobj 1451 0 obj<> endobj 1452 0 obj<> endobj 1453 0 obj<> endobj 1454 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1455 0 obj<>stream +e{FKՉG0<~wcجA Xq=:^Jc4w%񛙃3w )?B96Nû$iu Na9d֔DΠmtɫ?`!XӢPϴ2;}׀,S>6Dh NtaXSdIθ]17~HlL#ql2k.-{XØR50fmwΠ;Xܰd)j&%1;$p1vij|Bޡl E";>ꩄ߿e< 1+D_-YXƞtL|:e)7 ݑFδyʈ!$pT|M;3oYr;d7dP;7%fP +$N߻ 䶚 3'Wæ1 @ׂsg`d3~.ؖd-t>75^T + q&p 4Z7'MW~6i=D5rG\}߿ bK/ +!s!;?2tMy[( B/1ȈTDoJ/Ot +w:CŜ>sn@%ӳJaRfzVWӐE*M/dQӽ6+y6#Ӳ 3l#uT-m%#`M'.Z>Ȥ֐\­yë@ I +endstream endobj 1456 0 obj<> endobj 1457 0 obj<> endobj 1458 0 obj<> endobj 1459 0 obj<> endobj 1460 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1461 0 obj<>stream +nXK&r0c_0Izhuew#6s`{HǴX"^bݩcP__ :86V=N/\}Jv˦a:cbQӪt;!eGA +ja+`[ Rv˿מ؄뉾N)vلg㯿qym2{.yϨ^i%k֞.tۇ#)CI ,߾cI_/a|_x>jIڸ7.Q6s(9/P/nx7l~C'R 6>LfM6-]M9UgQiz H9UK_~WioPB7.?Vd]H)6dp ACM#!IVQʃ~::jmpiRA婂Z%Xih a?\Vh1s4WaJ=\C>qEV(Ͱ +޾׈a KBe/~$y\B}'RO?_I[{#ٸRihpDs0P7"e8$S>&i +ޒ P=l@u* +endstream endobj 1462 0 obj<> endobj 1463 0 obj<> endobj 1464 0 obj<> endobj 1465 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1466 0 obj<>stream +۠)=Ab'P/z7'ȲR x.xb\r;W6r`͙CؚtD~;#U*XZdhZTQ^qD4'M;uA^X%4èx "b=jlRxǵ>EjBו^Il +h15$:H!y=5 +_캁jFmBJ錖)GD;4C68^WG;MFޯ;M+l`.]&;2oXly}8! Q#7$⢲)Y~8UX$DƑ+Ӑ.Ƥ3NЅt ja'Xm~%>%ns+w> +F12T5 GQƓU/I<M;ZAc 1Rne >j̼2L)w!t7@/?#x :Zq蹆VᲈSl]/@|ཧ)l[ܵ pGvb$oE7E(#yhHDq\L0;.? 8z|F|DzP]4SmBG%syV w$Mr9Qʴa>jb?8PUUiBPlg&x)}{p|F || Mh {yK#h:$.dۃסˋǠ74p-\ .Q4)UrͪIK-YZVv`Yѝ\աU(K9& DQm^JC}uG|UĖ +̝ViOMhDg%R.c{mz5my(L.ʠZrab##j d2/ ۋS +|Ql|P]O%ұp׹i1)#O26`%#V#J%Ai ]~ǨZPD=ו|Hbk'hO +endstream endobj 1467 0 obj<> endobj 1468 0 obj<> endobj 1469 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1470 0 obj<>stream +GzZʯ-z-j|_q^y.cy?6|ȫ\dp +cgn̴v߲uADn> ޫC_;Aib$im*,&#J YN Śn +Z)Jhp&P}FbByStײX TpvpG*(eYJ:zEq?*yU^tA5LO>\7!˶&CfCJ^0%ς DΣ & Sm=jl/܋lOmoOl"Mϼ~;MNf93ި?Al[{5~Wz0z,/)BAU/p]6}H@e_;q;ooyd7+uj}/LpBRűA@/ +9aP{;m +stIJE*>f5UJ"쨰6X ۅ!!oB(XdѪS}|W*UsjE<]*JreD021'8K]ԗh}T⒖UvG#H +endstream endobj 1471 0 obj<> endobj 1472 0 obj<> endobj 1473 0 obj<> endobj 1474 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1475 0 obj<>stream +ŭ/Ȫ/nW2Y[yhoKrE@ ]3krԻґOMY^Oo@5̧4QrP, ӡ7_0>]򋒚/3b*~o68ݎtPnlN*@7K9UOӭuUYqRR;7,Ie`9Ylu4P@H/%auFᆚ5K0NiahZzD9sM;WmBTME(; TBʹU9ʇq#$&ki8|[wϩcoX!0igt +o!6O4}jsNH +73  +fhLzrC4ϮCs Zaˤ&Ax~Ci}7 l%'\_kT9&$RWx/=O( +7skB'hn?"8C3r˛J03ĺJcU,dHtf[w(id5kR[ǝiZ܊ԃuh˾JX+_ K䔇Ŗ ߈365"@`:/Oj_"c2w7a1{Kku.Ff]sm{Ü;B|b۹>;?oePW5_$`ȪLQ ~"ۙA'ζĜNhmɘ>˕FwrJ==e? pkvG w+a2ʢJwJw7;&B2Wپ_HH9Zc T\sLvĊ&݊cq*Ne%iPu Ku4S`Pz~QRϰU>yC! *4*dX8YL9oc+! +]a\ ay'5,|N]>wyֆ*t%KDnp2\() L;'qZgþυi\^[Wz8:}󶖍*M +endstream endobj 1476 0 obj<> endobj 1477 0 obj<> endobj 1478 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1479 0 obj<>stream +]Aq›nm ޟoЍf5$ʆT^ird+Աr^M( +q2@UJ3WZTŸ6MV([/H/\vT42mՆl*>L=\PYBcf\X&%u_TuWgwOd NO0dXʐ\ +؋r0H[i0mGٸ r$I>G@ CCo;]KJCW-:Ԙ]__M=IZxv`Ë[m_q$g'&qVcs,m%wlQs` f jxQ -kR%XޑX,k}4̼tLS|8t:<,XβAwg'z\U 3 r~ 䡤C2xo!O`&2j)a9 nBtXқRČ t13#׃39.F\>}TAM{$eMW ǏX=E``ɯcr3J[mthSeYB0|)#-d P9&V’t柿*ZF1 :öݥ9P(ԎZǠ4X>m3 q="qbniɺP瓵ο(괦(E.)tDV,TWJ@³ƚm&'Zs-FV}>Nk^v. DР'|5[7K/r^tc6pμ, Oʋxs4<ƍ#t~WKY-?J\K9?.l))ӼOgwW/L*Z`}ZPxgJ A60Qoy ʝXP+F}kŌmлhć?l.#*Clzb V3@t2 ɯ4r>yu,=zEZB hh+Ц-ԍ(ɚ6 E٘l +endstream endobj 1480 0 obj<> endobj 1481 0 obj<> endobj 1482 0 obj<> endobj 1483 0 obj<> endobj 1484 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1485 0 obj<>stream +!>ɠF!i4U]'JjjOu*e$'}Ym$C1+%m`$$r%KyP( @QA:Iug+۷$O';Vpb%sBsZ߮ SR#3G "t7L7`I<[*ڃ<:CND79`AՂPz0)gmOy[\f `HQ4i)xyG:x OZIJ0Fy4 8LҨI\M ?K9U!<ډۜHo=!K!s8rњifd|8+^aOwP [ǖ[o QoDkG1w:n@.?[ 1Ο22eu(Ӧ&4KiC ϴ^Z[ji|_Z &΂i?g`m N +iCr[N@ m?|T%wmsaL϶rF* =Ʉ8qߊM/춐u&m/Z JTݻ`cfYO N~QtkÑ|NKxj9yBT8T\P_J'33AKAhH ،acQ#y{(|pAI'N8B@r zS&l,vPYfsb:`z~NmGXdX̓7XFaJJظ;!?[@Zh҄yeWR ӈa}D +Us udEw-eH2r9z#۝ssBY?C5U+/ze6-{;Md*jZh=dcd+*ˍvFF&NU+YA҇CE>cx uR%bZ) c|Lz)0;5+)24R.z^ݏXX +Ө1J%T}faȲΜG,lke\ IEE'Ht{}Z$V`&O]*DQ䨕xmhPY +endstream endobj 1486 0 obj<> endobj 1487 0 obj<> endobj 1488 0 obj<> endobj 1489 0 obj<> endobj 1490 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1491 0 obj<>stream +tI.OG8۠lLG, ' /l56_3 +xBb`>K;CĆqm)^]F#|yW}RiV:A͞-+㞺&?O=q~m8p\uͩ"wLЪ>v?dɉ?GvqNŶykǒcG-w֘8#q +no ٣JwК$269s*cܤFHc`k:y6NMM )()0HWft%((^[ sO\gkˆUL O +t RGHDZY}g!K{5r(PWLkCEFG<'VG pPQ+MU${%dD =]~"Q7[ê}:@%z_`M'x.ׇotjp!"WXh}AlIDt3lqAmTJi|ֺU@bB'yY9Č9Y259m2Sq| -/Av .Ƴ_CZ䕑+zgnɃWQķOS5ڵz_jT7OwWH zՇl+[z?>0" b(%)șw/ǥ_wP//]𫭾Q.~q20mfMozAe=LS\?QM1)= +lx};&]iWԬUhG/kZ_"񾼿-iB Q~t` (pP0ztmLr 2 nr +endstream endobj 1492 0 obj<> endobj 1493 0 obj<> endobj 1494 0 obj<> endobj 1495 0 obj<> endobj 1496 0 obj<> endobj 1497 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1498 0 obj<>stream +srW+N+mOMB| +yʮ7oVx4lZ:) +9D /R.Dj~}H8ʣy7{ (/`N}A S:%9ZDŽױhŘ^, q3go}1'moϓ? Q$0B}ub*~pSl5x* ߤu zt:;v*`wٰ"R8f>pc4TVtw8^i{-rHMB1ڷ߫4)!t[\y9oGr4KOk6P.1rJjfsR86,A" =L.y̙B})̄{#AAXv{1` m:*TP33;L];T\3:y|3hKyV4P,¶>u%Qm i D̷?KDQ3lXwN&\F2bf_lT 6Sv9ɷnYբY7!雼׵iI^dC&F +ϒmeԃ6:D/*ah1{3-)pPZs "Hg.=QїYyt λ^C*@Q|xߩ@u7䲩1g^(l+bQM  4:UeyE΍1fݜ\[V=@AΜP>4 CpP\%0Ũ= `\,%%Ɋq(ۑPUVPAFn9KhNӧ#J50tlPɯ"iُ:D٦5No F8gAR\]vHR_IM1}-׈ ˓">bGmKQ]̂Am'ecxzi*u<1ѯu+ vŅ`X?B j rkLb|m|{:*DC):hIZu}fTYى<^$({&;C>.^8)(-`{h\_{ǖS1XJcw}_H"!e +_8R96^sX+b^q֪*PhP +)%ݞE < Ĵ!ւ\y(zI:C-ϩX{O7_>: +endstream endobj 1499 0 obj<> endobj 1500 0 obj<> endobj 1501 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1502 0 obj<>stream + [iq,_OUb&[׽}ʻȆJ +KJџ; ?. P.N}Q`4hCqASuPL-ê?E1ʱ~:#!/A, ɕѾ*i{ +;CyDaxGqΡ2g!܎}sGGi3ql>0"/%Q.=Cok5H?5zHq0&Ja-yR映26;oK fGDif5ZFׯˈn=.<{\Y\W]Vt j&c" F3@l\E_jb2ds2ʿhlkEiؙ%O{>yʐIM5pGx@;\#+eJ Q DBNsfoAuGaA@tR0p/8 DVghJmE @ Ai#oG I|۸66mX&;`n@q'=]`ꃻ;2b^/88_v;> endobj 1504 0 obj<> endobj 1505 0 obj<> endobj 1506 0 obj<> endobj 1507 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1508 0 obj<>stream +V3 03\2O#qSN3M:K5(*EU죣@~{54`x9Gt72]3G("Zݐ:z~&[#j_J|9m0fpB 4cR= L07Ikh܆VnS̑g>Pm h:"#vXd~9AUDh!R9c~Cay(o퍙PȤ}UfpddU_E6Ņ:øzد;z IsknJq!Exv⢲)څ=[咷WJas׭s3iQՉ :&-rvJe f4ɀLO]rrÕQ&uVϕ9JL6ZTkCaݒ^vĀShY5@pլ:HY =S"mc-m kKQ_ '."U:WV_yn2KNB?))\ib}7#z)lmD^v6%HqN_F<Gn0+g2$a|pe(oaVqR +5^ P/%v}Jʢ}id{I{y +endstream endobj 1509 0 obj<> endobj 1510 0 obj<> endobj 1511 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1512 0 obj<>stream +.A0>E>wr:i`{`8ɹ(d$=]Q{/@#AD|tc[L(o{u hN\2z7g**F1.?m-N&4uK_fހ`d_ߟ0cR5α[%Rz~ ~tYal/<ѝ7-i]J8oi6o5&!k*J'lc\ˋȡXd?%X~H5Q鴐I|1-.0j")?nRT^CMm{1֊zal~ kEc`rnpq2*6GOKgZ;Ɋ˽ q,(Ō_SΖ,^wژ}/۲n|{3 nC\nm'U˷d)E*K,n%Ԇ`^\Lk|*~(o/f<{eYVhY}LNh:z>ᑰ9*!˴Y ݑ?QKpx̦kl_4T>Ƈz@=u8sdXbx_/nz!R +endstream endobj 1513 0 obj<> endobj 1514 0 obj<> endobj 1515 0 obj<> endobj 1516 0 obj<> endobj 1517 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1518 0 obj<>stream +i^bDžV݀ l޹9Q PsKo)V겦ΌcEMAMHI\mfN^涝!ߴHSsibnD¿ET7Ҭx]GG{xv} +/I6KTZUh4iHݭ.ufOwZo;"4uybL"g9 g4`AL\eկ>ET[ rޞuHTM/dZ:f.H"qTfNݘǞk(ǔ7Q[>7m?/1!%8 0deTE &iF6i {9? P!+/]L!)LnDB8T/ӭg/U#4(ڧ(쌵)ax^*EWJ=! ֚I__V:Oz 뷇&{̰*4_BA깮=^G$Ka>ZT0or>aV +Ys9}1rGYV,m){*AqսI6i!{0CxGõ^2>si^Ld[P8̣"?i<ڔ1#\O*aNH"Rel3  +w?2 B'a9mGaQO/zkt1q%\j_ì5Nķ }~q\`ݺ!QJ%B%Ë +hX*.Ƶ C,I(bM Ѷ@IIUx~&JS#_ctG}?UeoO< +:̔o4ÙRN|X6G1Av;FUɭFSː؉?b}VH0hupPl9T'x "7 rlU&S_ nN<5`/fC28.1)ܝ&2hE~;{} Vs^cZw6y6%\&[1a54עn= +[n+e\uӠy#L9E!kL"~:' eG?pM֓+[lBAriKCG: O_Û=鴇ROu{؇ +uadjwݪ Dè\(t9N,Y;Z=l"071[8}pruZ%, +endstream endobj 1519 0 obj<> endobj 1520 0 obj<> endobj 1521 0 obj<> endobj 1522 0 obj<> endobj 1523 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1524 0 obj<>stream +4y +X`5½ٮp^ ZkT%$Y65]Ok^LXEdiQd2,gQ]-Mx/}cwN>sVcE1ت{K:'h{e Ϻɲ<̪b6'0+$Mf{zAHP-P.~\t p_ Y<}@;ۙ;?0O4<Պ[^jʵ6/ϧTn'$\[:to.AQ`%iYYkh4Hj47@]19^ 9L*Jz+50zH֩JgV+sj<l4y'bBN\6f"*P=2!jZ.ҮT}2?ӗ'.qWK~Gkdi3댴/T?3`S)e!.߻ .LV +lr.z6w#ɬF4ZHQS^z?t 6t ⒱ +95yb+M(Acetd3Ղ1)[e8n3(3}tc#*Fƕ|B{" +aqa~kQs6*ej~+ @XXY"d63Z3 Tj2%ni)X9ɬmbՔNq.RҾQLy#rGor'T'ҽdRYHJZ4SP3M{yU/S9׉ r=RiIn W7:jUSkO#*.Kݯ^]N}PL]d ;Ԭ9ڴ1CZYG_(l~2 Bs')^!Ɠ辶[T-/ٞ$+H +endstream endobj 1525 0 obj<> endobj 1526 0 obj<> endobj 1527 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1528 0 obj<>stream +Ԗۃ5[*`gbzC=+hJ)/`k4#1 + \&7ϳ]LT,s\cPxs/z<hBzvP&h~:0 k(- 07X3֞܃tc&4G1Do _dj|p^b&i|:R{f+FF=1M^3ULMeuD4Vas_Dp*o_G>R(6\#y 8~\*6ȕ9N 67_NA + |U/2\q +xu584 +endstream endobj 1529 0 obj<> endobj 1530 0 obj<> endobj 1531 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1532 0 obj<>stream +ԾqU aEv/َ5W+1Huzia |lj48@ +/z?]KL%GʦP@!Jk*nr]f/rom&FƔ+1{f@Xl\,S1ٽX^\ t@8x*/Z(\3*7?Ψ-hQV'Hq2'&59KqVr-8hl"^kwN@{W3݇zEhEgMAP-28B""n,Ig=0VkVΰݲP'qCUp| <ǫ[`svGE@ɨZc&#A- H&tL1@`D-֙<\UkpՎ:ʍ_L~k]%'h +6}:(s8oȏx A>_'Ew(| KHU,¿IX-AQUG!sG(նF"6OR{y(-Rp&%1W }˽3/f6IGlM=XY^DjHlPKg:,oJysC8% 'Ei\,)uy֪/|Yix} 98;w4҆$X3i64YӡLbxo8j7gtڛrl*pD{ tɞKlq\tÔ+gZb D tp2gZ6TOJU?̽D hT(C6]~\FRf+mPFI9oረZt.w81VĢ;LԪW-V}8s_& ) `$fE"YԭEw0gw?^+QLܧ#'a3T»pd1BK5cY$ =d `@0#n7:@nrlUgf +endstream endobj 1533 0 obj<> endobj 1534 0 obj<> endobj 1535 0 obj<> endobj 1536 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1537 0 obj<>stream +iu. M$VDXtN djFOUʮg-안ҰngFPݵV&,tF#i:D1[ևeS񕟞4@V=) q7( lJN x"I HC"kOBLB|҅o8~˃MN| hC5xV׽2-i!Pγ{\>z|X3qtFU5n K:RyC ߄I+Q1Z=|λz`ݶ4ި 3hRPioln[Y0T*yRHI㍞?}vR^9sM!Jҙ4F=8UZM}b5muWnuKTXl.dV;,w?@ܸq G-ROR9KswS_Jbpq3VGJx~58~ԯ,yYԼ̟š/F~rO +uƼF. +\8mſܻXjtﳺpOZjj +C^}T&Iyƾ>Nj*@D;^~WkU{ؿ1iJRUP|Bcq.@Ȕ~a=8:QB@I˜N~?\}{bԟoQJ UPՈDQ? 5(aH  ͓fN2/*ZK'F8Ɛ *ո3Ij(O[4v'SLyzޏ'ɄNyDpb8$\]B 9~z@V,2U + +œ12>G`Lԥu jr~D5`XЫ LY/˔!6,5 ˲ toMetd`FfRf̓6PK +`*f7^'WY7"6_=1=DUMʕ9-隡QT +&Kr%_ +endstream endobj 1538 0 obj<> endobj 1539 0 obj<> endobj 1540 0 obj<> endobj 1541 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1542 0 obj<>stream +k7k)ҁ<(hysd0C^"rŮ# ˙fY~EJT bxo +u `NituWT2h| PKcNhz>;]cbg=*r5ѝSrU$E)=˜mPVRQx2^3S%hDnnjiU +|C}XZ^85FP栬U7w!`r?8|<-dl|L K)F,"-(`>-?XQ5$l/<ڑ}嚏K~Ocx5j;[07||%7 G1Bcj÷Qݯ$I. J:|u^sY͑t/?:&0M(UM_!,y%29KŇF~x 䳟ڍ(YX6*rc\^!ؘT+8GS*̞5Ik^Ŗ^7Ky0G77 ݾ8Jbv$EoA[Ω6Z ,kzlaaUhh5W|֠t54ـR/;B'ƽqgId8E0D%R3f2eS]M+ls*q8ֵED=l4E; q`|vVg%Ov=тԉIb.džF&pfڣm@[r־eg!, ^X\dž8?y(Q.]Fvlu쥹4y2|3YtIj(0\~p.#v(>#4eA ^ؠzDX>ʋӞ#[QxiM8~uژ]UƾԴ,-"߾OSO)Inkkm{!̬Pn&|<\dNW)"}|顗U 6uzJyV +PwaNՕucn ri6ș OZ PLЪ7U3l G_xFYe%}~H:խ:E)';VSjEF\_KE|yB6{J^5~}!Ԭj4#{B6@0+ 23H3lP> endobj 1544 0 obj<> endobj 1545 0 obj<> endobj 1546 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1547 0 obj<>stream +{*P x6%Mz /+ d|F]_45lf> +eZf/7s]G>0 f=T`u鸤mM : SuUi`\t@ X~yg5lҨ_2ůxPvy Lݩⲕ ܓBזRВ֬I~JTQ",rX'x }ȑ?ϚIϪfCGVCCloMњ>LX,yc1"[L" hts"$&LIʔ'@k֊~o}!xDf|!1;WZQI@<90Q9>nR Z t7uΠxa&iIZX:D9ŃbA8D%MhQW+kN FczUʏ!8)O'\*B<Z+j7 杫IّcxeQ@:ţQ[]q7.5'_HlaIz?abh@A{zFj\q,tXl_\bjs5MKϠ@Z~l ;;'-_ 7]UxTḞR:ya챿g%2-UFWNZUZEW&+,%7 +k ׾鍋1^F'|a^k!C iڈJk)h9r6J2`Z[?29e-ƎL"W]5VHM]1@:r,pHx;ճyfHpS'-]jGg +&M#3Z#' ƿ}xllⴑ@95<9I[N7HbÊ:vTuT)Y oal+l;Hr-ce  ׽jw%S? +N\y;^vȲ#0r#0L9Ga{_e'<]D%,J*![O9~n.9 +ؚ_p`eKXT\}RM\waKY69i'ݧ̓d!Eu:g$ސ{Xd!5&{}Hg\r +Yϯ+(s"_e T%| pFAJ֟AEL)hQVwƃOЖcB;f3D54|qkrAN +endstream endobj 1548 0 obj<> endobj 1549 0 obj<> endobj 1550 0 obj<> endobj 1551 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1552 0 obj<>stream ++vj=0cۦkdx,wM| +?)nDSOߵ-aٌLpA0 rh93䤲ɻfae2YLf~ZNi%>>Se\Wt OO +^mߩe7o%Z@+h>^ͽP:ɨt9mjv1y:_qWMS;`F:+&}ԻYdV^F"L*k|׊J6!n:-o+ IeKw!XVQ6e ,msxmPB8?, +endstream endobj 1553 0 obj<> endobj 1554 0 obj<> endobj 1555 0 obj<> endobj 1556 0 obj<> endobj 1557 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1558 0 obj<>stream +^CWϋ$2YP*W (Z]ΫŸ!Jepk/E?=B'Zi߻ _+-pI"S>jhy`I @L~k VӃ*Raox3i`I ~iZtoA`K{@YwAO4i˨\ג1DKv n:ax#}!P:=RB)aQ;jIˋD\ʰȇ̡zO*RR&ճHwe~76 xk颉: gVietQ4iYtB)Q!DG<z- ެDruk#&K_@y`=ƓmUd9@ Qqs܌ϴ}kHoz)@XA ԩ=fRY{10혟rƺ:uv'r(:V䵭H(ኔB^P`/CB Pdo z'}r: dsD0ֶJײX`пI\řԕчɢ瓯&ԡSgĂS~R85|~U~PjS߉uިNZ-e8Ps%6wFK=l Fd=TjN5,!>hYiR(,)37HAf)#jگ>H|a7!|VFF(jYrjږƓq<| {;JVa)dPEA#I-. Lm~^B_NKkn Hi6"ȿ6hG׷vta >蠬߰{aط2]@תWfţ6{&NxJ3ߺ-qbK,Q;5p]@jЗZ`B9bO9S攖G"ԄovBqtD(6BFKT67"1Ly4{Fs  d;2F pn e㬢fmUmb:ald?5pxIu!*HvH,LUT"[f+~8u/+ +endstream endobj 1559 0 obj<> endobj 1560 0 obj<> endobj 1561 0 obj<> endobj 1562 0 obj<> endobj 1563 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1564 0 obj<>stream +v;\j}ʈj :vP +V&Lݩ(hx{4!!?YXȾFƮԌQhECA:@QLE8@Ţ.hqyat3 zU>Z +͜Տhej{dfh*SjVӒ6Ɖ;ןb&@{Z0X +.ˬ$1e<;&JOzs2#!γR!p†;>/sh2%WeO7.398s#uxw-"~ĘT ی%'d|EAi1wnR(ܼ.ف~jp΀悡,ͷPB~=rJ*>c %ƭK9`Uq "hT@hɏ# F:@i5_hTiTexsNw9Gq$}9bT~<;=P=p)Oai=9kTA&I0V2w䎊D0q$/D 6eCLG)JZ|00_p^ww1rqW԰0 # ,z2 ݑY}<:K'y*:\-=%jzL|C;i~'esŧ8DkA#!JWPaX:l{5 Q[p^Qag̘k@}cA"%%Tw[ #Pu + (6( ,_d^L P$[‹G6΃𤤨vOVcZ[9y=^,IM/J=aP(NHpZ5+{080hZ UX/Ӽޖ&sX>tlH]-tG[MX) + m`=릈of*[RgwξROpTylreдZ[Y X$p ta>sd+ib_#?hV6~e];- H^RS٨q%2{[7'/)iݕP*f| ֽl*bRQ@".u]=%I*7_{qAw4C '2(ٯ[0{\$נ A)涣Ǝ@m@[8p !,0E%hԬccǧppe]F2.U@Q.G  +e2V>_V8!tΌ lZYCk53$nT"ë5#wRl*.nqGZy\\M7֚[:Bˊ(Y%Iڶ| ex؝C>ѡGL.J>.6?gdӎZe]x|o^İ{N1kg!9 +endstream endobj 1565 0 obj<> endobj 1566 0 obj<> endobj 1567 0 obj<> endobj 1568 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1569 0 obj<>stream +ڮjåd{P~g_FvܫH L"*bd5<]Z vj*oVw~+PCʁ! +% +'Fp3a}`:Q4^~{jG!x K<9*:M{"rMme<4Tc g )!yNliU8/ >q]ܵBX$`כ&VHf07=:sH ?Ɨ'17_c4x Qk>%4RhSQ؅Sc#S|t۶sV;S> x,|'+K?Jbͪ VvPI @0s2]7 V_|GT"E@+5nvݾG0,W@ǃ=W6tqbnjֳXP3e9Zb2jq+wޯd)OyFOuM&Ģ$jZ:@zr4VNJzɘK,Ԝ5߁Q/ѲhD ,xȣ%^ew]1OP~]!-+ؐݷ\; -MW8#IivB7 Y?%3h%kIru\DT_;{V'%7ΘbitvECoXTT;~)qsmYx^Ӯkw +:!uHЅ$0$(.u;&Cfg7´8:-2?\ku銺޽ZNp=<R5F^AKV#~YTȂVK3ؐ,1اs?v7տ= tWyg/5;*p_{@x7*bLW_>>#a̸ R ::)ofN x jugԓ4 =$VmTW`aJE<@:]MRɖĄ[0OpH/^#os%| V\ қOMܚu't?$U + ׷*B?J?_BDbnA"=^/[\\W3>:UQO+ʃFh[͋8rDuƉGv܉>k}t|n-[)x+ $.PwlL '$&~"|hiAY\ƘWk0Hyb4ze!U$8ŬłHuwQ҈nr֣KmV竝ٶ}f/J+Pwy'tjPګ.OZjMh}e/8 z1z&|ϯD +endstream endobj 1570 0 obj<> endobj 1571 0 obj<> endobj 1572 0 obj<> endobj 1573 0 obj<> endobj 1574 0 obj<> endobj 1575 0 obj<> endobj 1576 0 obj<> endobj 1577 0 obj<> endobj 1578 0 obj<> endobj 1579 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1580 0 obj<>stream +_ު-) ~χj«¨ +|k3C| I 3w9.f|AusE#Tʿ_޳&pkDIBn'[6NwyLW.rzCAoG_S>!DT\A*C_ fʜ9r oN+k>y@jϓg7r$O,i}k%w;%Ois^d`fȃ7aoDaJbnO su Q?\)nYϫ-o0R7 ̢.]L1t6̤u/,f-d/́s 6"tyk7K&p彬[~L3ioEU6<&)LYΛ L3Rgy ƆEh Z8\#3 /= fܕ*TbKkh^Ac]uHbО2סXWWB\}({+#dJj'Yȇ#@\qxg׹A`TGEѽϧ쏽t9~3C{y2- %B9:L"(㱀_ԛ9UL5)ǞQuU>ҫ{I#FFSO0ٶ7۳n .oK,0n.&)s/wv(˰2@TQJ0 <#~9H:1-Ae"w{8+oL-LJpD!Lw35` $VA= +ȣTdؒF,gW> endobj 1582 0 obj<> endobj 1583 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1584 0 obj<>stream +vSPYohpGLhMQzLa{;2rsS\@U\טerP +)2N-!ikh2A;H{j&y#k6NG]hmPj$bfMӭh4z"ۮ$+pP<q,FKOLwHYV^v{VRd1SF g ~2o3 ]syFQ*`Ve.^T ,=e`xt0ԦquffΜI]8S +b#bޑwqu8>Pw#))&5 DBdcK3P[Hsi>fq'29@INO)f!^uSѫ8tԚ6J +"2ѓ Ct-j1IctD81N;Za6S. d)C15yi@|?܋⠲GR:3 +B8W:_ըvTޮ@+MF&>$ /M}YP +Vdustl/_^1Ȝ=ί)YlRuxE0qMP&VUO5i5#ڮhWS˕Xg7 +Uxmpp>6E4 \7'Nˊp '{Kl_1Ժ+HCG8A_XHGHQfžmYz>([cGgW'^7JT.Vk20u[͓$DyE +#k +endstream endobj 1585 0 obj<> endobj 1586 0 obj<> endobj 1587 0 obj<> endobj 1588 0 obj<> endobj 1589 0 obj<> endobj 1590 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1591 0 obj<>stream +-*μ= z9~>]N>_ͩlzEM]1BI5LP~& +PHZV9"sڑsX㕤*$.'3 Zg ")xZ+xwN9HUn siSV4fItVxgZ*kWkQw{/gMĬ ФvɸUqG߉B Kl`ఔ-)r|e2D6gک*kZҰ_@:c}m,yV#܅څ27&YL{8P%WRhjع^@Ͼ_Fk61>(,"][~N 7Op(*mAb!\pu''&,Wjz!#[ߔI9YN,e/?7xZ~a`/*1MbF3n߬ +켴wМD1OmˎF_qY8)?27&8p;xOB Ht<AZɄ ❾^Icb!^#Pib? 7=4 +.B`d_55z&PlXN43Rb7 8&o#o?Fú[J#%O2kdpStjkoͻbt1H, G'Ny)$Xr#?S^ /NOs =SȂN:~Fi[əg!o}zb|R9Ƹ7JWn+}o~]z!G-ѕz^?#]Q1'DnlpA׹" ݥ9#Wa:T:';slL͞FRކ^WWc%GcXxk"p!#lV=;X-A/0F& + v#0_< +FE<ܦ +@XՀ3o& -BU{@橕dIX54m#Oe8 jKՐçaw6nuO@g\}$ʗIY$ex2B"z95[ i\+֯L X?q66iOLy/(e,[GW2> endobj 1593 0 obj<> endobj 1594 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1595 0 obj<>stream +Ugx$%?[A;U5lS]|.*y@dL26T1PHςI& v\TY{QJ-}g ,A\kFGIݚYx}--YHa͘Z|TMJ ab:'~LǼ6*ZIUZNNBe8#SiZ=8U2t!A9PQIݥ6(nBQ0] D3xZ-9 {(iOh,ߟm~4m>z1+ŹJSXm*DC_CWQb64[tSHY +\*p Lb&Oi8'> T倜\JqtF afS֜ݯ&Y!{KN.JdjtoL߿}ߓ/ 4%<lN*xKPz63کy[TsX$2".M/ +"dҀDi? ){ sr2Ǖe͒AߜO%_y-޴[cN8mU(\ +rqIr;SDʱM[WcI{,cT:Mvx"j$:2rbEP*-4IZES$'J+{wްZ]EwpEhg\;eoGF}26hyAP0]h%nt?nY ` i5n;7ʝwG@;ʡaCliASѧ F6'?4qNӃ)EP)1ܨR@b> endobj 1597 0 obj<> endobj 1598 0 obj<> endobj 1599 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1600 0 obj<>stream +[9IWgEC.pNX~I?]y"q?ТvD+{jmc`?m٨Ms58@}j8oEnhVPjpx/ +>Ku'Pbx-Q\wdy F|&)7_.T*M0@:(t&wi-{ +%SLiN~Im( 3Ͷ-cTY+⪧FY|dKͽXI+:Cbmlؕ}Dl?gҰBZ& Hٝmx5GRf +ޏQc%x˼۰ 2mB$[|v$-ݔ2YvdK| ᳈n_A2q'DcV8dZƂ,Ѹz}ڔ#yʏ[bw I)-7UE,z5eN#ݍkT@fFtJbuhg1x+)A_!VI0OUuB]&R+)m7"u [hӒh'H^=/ Idgr<Ь] '$fJHsoX51OF#ǁa`P.z$xϜu%HY| +n +Ꮗ]"/,&NmаNHqxȝh4&X:8']}CN``sL^͌YL_?x뾒6.HD>(G.1seJE}Bp?a,o96WlaN.#$؈:ޙNAL* &OAyaK%TgV&yP6DI}9Ak/nNZҭᒽ\pq90;͗eȳP0!҅w[M.R#QY4P &1 NTPF> +endstream endobj 1601 0 obj<> endobj 1602 0 obj<> endobj 1603 0 obj<> endobj 1604 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1605 0 obj<>stream +nCjRBY6Հ8. WR~ Rל9ދ8lmB𡚣Ks7Cn;nyR<1q +ލi숶S05tt'r:u%Ge"EP3 uD TSSď.6`P7뵼\V]*} cuf"yU+\pͩ ?L5HQm/s᪸78D.pTC_.4SzrJLҡ/,Ցc?;Fx_`.|7> endobj 1607 0 obj<> endobj 1608 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1609 0 obj<>stream + N>=Q?Ձ G^Q2MijQVt=JՍqH =˸ +- +ZкxKB"QQ9Cye=wT_'s!2;pohxh ~#uP{}; +5-3r~5k}qEXcO͛ }MPc'VmfY;D>ᙞ6tЂLe.wѐ}vaGe[s_w]J}!:ojJ9-nB!foZ8:. /|lR8 RձջnSI,ٳ~L~Pч*(/ wYa (_25(GPcW-xhJD0(3=N (=JV9eƽ%9Es5{EKQ ;T(U)請-*(d:'a?q„u7 +,PE|LO:'5K3x_yY@CG!L1x p=ܒjJ@#>k&6}8 9Dž[!]> endobj 1611 0 obj<> endobj 1612 0 obj<> endobj 1613 0 obj<> endobj 1614 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1615 0 obj<>stream +%~>yֈ4'AN>/IU?27ЏNWCPGθ4@W(Zl% 86IwyY +3+J4Dbi})_ (ta[6Σnn7pFG&j}Aꅽj CnV7Rl{3CcƳc[mIz';>3^XG: 4`NA#YĪ]T\Ya,#;88#j r N mu1ɀv6c,6܎*PW8++|Z9 7>ԧDb(†/yUmc: eLGH-:8N%hŽ(:}n=nmfbtRh@9wϢ0*&G>Tk˟jXHZ e_=FĂzL!KF<%7vJ;n&_ |3Cv =/ڣX`MAGcA]t8;(rRNCO=`L)Rද-lTEqJ0~Lwy*#XL׍"+ӏB?d3 +Zw&3qeۍIHnˮ"rWK4iV05n/jZDR>4"'!Kh +F6\"9 NfgߝGp7˼$&bk,G+POa no]#d1H2܁᠔H3͑I 7sOJxƏeZtSz8?M<̣*/ddpq%C|gY_fzb"jE +endstream endobj 1616 0 obj<> endobj 1617 0 obj<> endobj 1618 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1619 0 obj<>stream +oQt.BBٺ +7 lBvC%##Z">j_&0k״׆8DCXNșQz=WK\ YjZ#jA\*+MO3HGr$&V<0>StȢ$E"tSa";i{S=ٱ04$u{aeŽot~`TX~c֕!T?7=)#w0a"$M l^7S[tÕ {pALe=HJOQŭqh{9QXO,{,,n|Bz <R~PA|7 `DN|Ip.X%0$}Mk]qF1Pzk V @g7 +)JZ/;L Y10rBsV/tUza#O1:Vd Vv VH{awMLZX&:0Ѵ&K_}DOdb4-siM/29 Cr 8X([ljnL^hkiU:=/R$CII>΀Ô̹au:0 7™T _)v+GJ&:`´4ebh+Sj :h zQk~7ONzx""݇X)Kc7lƱn 8!e-40ڑ'P`%>0,>qnG.T&2sZP$'3LyrmyĢfO3|oA~tH_*Ek:ϡ{vȣYq8ʏά'rΜ%0;<8*ٷ%f!YHE[{J l@Q\cV-ɝfuŒ>wI2 +endstream endobj 1620 0 obj<> endobj 1621 0 obj<> endobj 1622 0 obj<> endobj 1623 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1624 0 obj<>stream +3np`I-(I +-:G ~N ]%.t(ǵk 0&,/% $Y2S%a1XEp!+J>ۭ}{_m$y$aY';N飿I%c]y +C*[xs\&# ,raك$E[峈EJn','e%o܋QdM<:sLRf\ǙD5PxBN T!Ń9.:b MsugO EDM҈ +,?z &Mki9|='2o1݈,7@x"\?ϯe%^F[[$2El‰tJݗؾiY?W?;;U-yncmNڴ@ +endstream endobj 1625 0 obj<> endobj 1626 0 obj<> endobj 1627 0 obj<> endobj 1628 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1629 0 obj<>stream +b*kxa[|n7ͽ&we!.D]J퓔PBN p<3Csk Ky"q;+&UaޞnerP?JYa&.F'5l6}0Cx/شnqr0t- ,+0ZZl*~A P%Qe7bI.7#,*w2v0|H@$x 3>;N3,ZDsY>d/xYhDÖG` /mPs?ժ&n,r7%'3 ZOPJ"[ [|g *(W zW"N{ҁ8.Tվ8FX..zief0f Jiia^SI?C&: :$4rb7TOX,}N#D,ule'>@SCb!_e0i6Md-кCY D-W"aDN,(]>],`F KTHIZgH>K/7sR +endstream endobj 1630 0 obj<> endobj 1631 0 obj<> endobj 1632 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1633 0 obj<>stream +FA7C`$=D Ĵo|"ЖSQ; 3M#>)4#1w}m~6b>(I =lt{th%0\ \g&7!}5V'D\(˝a'N~;J.vс{qlS +yƗO?(HEn5;dAJe)LZ9\`\?h ȾD ׬ZՅ<{g;ȨZÕv.rtY͸ɱ"7kf185S ٸI+bQ!Ka{;dOH[Y7q< )3?SCa1,uč"kА2V[Hxrć +%X +!7߯M1jv~׺lP{ lq }%_b \|k N zKۺ1z%ަ >ĉh"R9p<ӟMb;^sB0'ח nW['3\q +Bo{Adnb:Ϥ#@Fh)Um\BpBaLM6([y?]B|\\Unݐ(*PW_`/Q,u&(:5.fvd +endstream endobj 1634 0 obj<> endobj 1635 0 obj<> endobj 1636 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1637 0 obj<>stream +Qz:5[Dg+BVA9jupPF곇 c w:#/^׼pKtMvq +ĆH F;52W[溘 STIN=l ƛSRy됞T'.Į`|j&0Gc ˛֐d4n6a +5ۇ|#t1PQGxsavYx$Zl(&^$TT3j0 <-mAD l)nFI.Qw w B}KXĨ^spXG+bci kj9c).>I#JJ*"ȂS+DWVMS*T6cX%kИ=0Z:;tâTE n13n[tYyv% 9\(=Tl0g7QªI:Gwl + ־Z:.B@?eo R6 S^&nA%~ E=2!أMoC4O\Aٮ]@,)5*bڲI̱.Il`aϜ3p<Be^i NҒS"3j$c#SϾA +tNrؙb&ݩf>Pl9;$^$#3O?:_EVb +x,upxR?5Y'{ XAA4_XC|ھZ%Cl)}6QifywHN2!z?Kʆ|KA%IFC``*F }WÂnprmxB&[:M: @ɱ|?'Om#+=JOUpVKB@X} F.F9ZB?5I/@<=~)0dERnۂ[Ň~=c3S^|WtN3Cd0qG;2 +.xFH)Suw`5e#  e0N'㵛au!q<σx6pg+tʢSBϘ_f7/yfdZ'lF<}t#s:s\M{G%Q']uY'yvf~30) +endstream endobj 1638 0 obj<> endobj 1639 0 obj<> endobj 1640 0 obj<> endobj 1641 0 obj<> endobj 1642 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1643 0 obj<>stream +. xtB3*3+deMCF4ɊV \Nka._M<Ɩ"#&X?=YQNEXΩ՞ NY $[މ*WX=۠; <}B&$=H-*(Zz=E\sR%$$^ KyiTrƒ}$;MRR$LyŧʒPF! SP^J]'%kjˏwbk³0~ 3OPF +8){6YP.=P + pal=X~-MPE*}xb#7OHY!`mՖ稘N]0m[u$-Ў4DOZWJtsB85}cmS0:9Y׀,Qz$6b,ƺI+,N& CNqw9kZP+SR#~UlҷQա}vD+M=@$4n7{E.4ܻڥ3vW31QG>m~.`D(!eH~[͜#-$my RִœEU;3^_݋l6v4T` ;F%dik? 6I* \Oa D Xe+3L\n`S/Q}gB2/p?]]պM}$|@H=_h +juioQMoG _u$U+7DTOrLx;e'EaCG5 7zK4f c%˦?ͽhtjcc~@+-JA_(2T]h?x br ݔL@^=Q8;sdS=WW\xbO߰o!@:cI(K)=(bEmi|~:m?:n~_,R) 9Q5`^ }Ң^_ctBfKCvUj'&TO6%sΜ[M +ĶdUO gdg`Ԡ JVA-5抈ՙh,L=b; k,]MUϧ: +endstream endobj 1644 0 obj<> endobj 1645 0 obj<> endobj 1646 0 obj<> endobj 1647 0 obj<> endobj 1648 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1649 0 obj<>stream +gPrc4Q3;J4Q!Iu7I8\p7=S95}#fom1̳A '5 ^Q)I55Uycyʠ_v֤ sfTlYv/ 4 uw숦7KN^-?۹C `A KJ l0-z~8uَc`"͞XLӅ<3e3ʏgc1患h썼 sdQ5Y_̛C +AUb0% [[=u3,t}5MeG٧GRwb=D"&A_7xW #Thrh/ÑMA3E*Pg_QTW1&UxN{q=/`^p7[W~fobǜ$܏ +;ڡM:U3n+o+s1֥CpPDGXYP>(nCOgb-:#ʱ( +D_!}O=0xVZt݊Ol$+P2׆9%u)5W=OE"0WAKq}(k,)sە9IPPH<`_q)),lc\-VD6\L]ctx ) \]\u7cԥo**i(8.d?Q:zniGU* l +NfԲZZKh uU?ْȞ*P!)"kvcSCX= CqzqviÅ꼊Aר}/G!lOG4SGh-(F 84SŃ$2 +L"ߤİǀŢ ш4"qߒ[#G#\a@ܹΞ+PhCN.f6kf&DKT? ѣLV|TW?ty[3Py,%/ř*i\ʚ5kX+ jթ oc Զ(ڻntPJ;YRa{BswcA CsuCm֢Էߦ8X$q^t!,!\؝ZBmņ?*c>i VjG/R7YF~lbyǵېzqsUxzdS10m!j='W^c@qB3}2keG;'ɜ_}) UqV<7e+.$kGf=/IKf PƿBb.np},m)snrRGP\ ;E[Б$lbVﴼ9*$t܊Jc/린U5`Yf|&dl\g?9G_"AA +endstream endobj 1650 0 obj<> endobj 1651 0 obj<> endobj 1652 0 obj<> endobj 1653 0 obj<> endobj 1654 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1655 0 obj<>stream +Ο>ݧ:0YN +cK1%8+قnu'?`)~<7}2=>gWFy>{|B+N -aE- ٩X^Vɕ5q/i+)wLND(ֶ"%ːE \8g FwJrL[~wvܪG!/R]]`MXMf}@5Ⲥw)c--]ϰe*N?ssDtwgQqv)OQP[²F.w_V ezhQ1Y4EOL^7*.Zrz䲿Z$(qeuU`3NE^tZ9wy¦MDpq! +[ʔ`, +UˮfN{ FX.ߤmt]ˌz@b3:tL<ߢJA]#_<~WZ!v5Θ=\3*-AxY4-2-7C0C %\|`T^q9f92>sxC%k嶵-;$ H4/ M9TumSŝ֟2bZ0{ܢU3j9߅!V׷vPfߡcQ~Ogv "ʏ߷eScpivLN*k uIF&)-WL Gޭze vKc@lY&X`e0HjQKzUDi㽎+&XC"9rJXAg>;U"^+5Ռ/5A ĺ1"J$)-ikfXS4. =x)B{Wj3!´[/J);1MRɅ#ñV`EDCRrK*/,6b +QYPb`ap)X\a)wRZA4.CT4Iy>}RdNPħHy1b +3i1Ih\E?1{ }CKZF7/A(N>(9FbDU(JUE0%1mK.^-z4dcMZiGKlp.bVlba+l*ݸ +endstream endobj 1656 0 obj<> endobj 1657 0 obj<> endobj 1658 0 obj<> endobj 1659 0 obj<> endobj 1660 0 obj<> endobj 1661 0 obj<> endobj 1662 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1663 0 obj<>stream +_F]+[%Ik7˔ܶ^ +s % g. jW⠬?9' +!X~oD2l.UwK EU/dRA*}{|Ti*cl&W0qM;_~qs:62WU6bnnj?jT˓@ߞA׊(\ 3b&`8p \[c*[3J nP KEUAe^;" YSl%ƙ1Y/LE]v(mgVC W.ݷ ? Ń*K!÷RB+IovE^`str1G!wOEFI#= +*!T7.+PʁN:Ԡfna1p5 fwYABMu>G1}cNA8ޥ/F=D]slS~)>5-+IseOrn?o}DXG=RH|l i/{ڤyzS +JVU4XIi.X!Bs&hيfVxɕo&_Ng&Dyq{1:A,w%_!n|)mx~0)Y39×Pjo3u+pz\M2y`8eͩ {V-ޢ)2sQc|t0J4n0 opMtZbY5> +endstream endobj 1664 0 obj<> endobj 1665 0 obj<> endobj 1666 0 obj<> endobj 1667 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1668 0 obj<>stream +/;CTQP3)3R >7)݁Eҁ1))ݟs%k&qd@i#K׋{.M@F p$7H0OZz` =tev-H{Ep]6 |oQ}"AnV蘷8bݬz|Miܲ\~BBzW磎&}r5{Hpv=*Ս/ɣ)*|Xru45F6,ѓ +݆IRoe !(h%ku)Ơ/[tו,A$ZԵ&6'!GPl#6@&_e2dȖZݤ(7R6ǀ%4*Ue[(^36M IuCGn R:7w +: +tMdz|@').n0eT@1,IkDq +9|Z=%^8SK>wbU: ~ JAWl2kɓS' R:kN[l;N[f3="0Ey +pr"12XVj\ۄGocof4s9 +eyٛ=/y}7 팏S~8خ+_ F:E]Oďҳ]CGp= Oic;`B`TU2FQ ?+tݷsvL斅ydZ^Fkg# G|Ly?m4q5%H]gڹo醙̼Iޢkf唵BE>%wk<w`ӘBreWd<$" )N0$i!tyΩDTml)ٹ~UJjBHk +'kVV%> endobj 1670 0 obj<> endobj 1671 0 obj<> endobj 1672 0 obj<> endobj 1673 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1674 0 obj<>stream +W'.WJ wMZ7=w@y"Ar! w7ŧns^-bNWl첢1UBBtV#:ʝwW-GZnMgf)Պ7`%#+_ꢨ%DqGj.4)>uH8(ڳqpQ[ҀE}/P JVZt VݨbOrHo{ 'n}l)3 +ڰ :~xaU{aH' +b+XB>wy& +,*x72I)]Q!Y3A1r5x'Fܤb{#>"717& +6E"cXQPtK-qېܼ*3Tl^4ti}<~;y[bۤp rj6)3.B|f|vlݘ^1RRRG|\~* +Զ\ث$\>fmUܦ25Yv~)}l -tas/|‘nv{ cv)Q@ū:ӜƧ`G w1sG Rj`qmR$Sԟ~ϡKlGxp%2B,1vtgqkBrBuq-<|!BKT9HN&u|%=)>0^ [9T3Ph~օ,k1hlQ6}wJ}Tk2 sd]e;+SZe-P!Ba]CWHҌShd=( n;t09%DuX^>u _\%Ǖ(_6ɑOIS\ Ia|YVuii&c)v'l=*q-Za%tDoZk$?} Gib +#3OTGt;>b){G[m]( P 2rw nC<ʎ6>B$M1-*.;ZB3+;E7,8Vvw>`_z$6!ݟ1<'A3@`w0"R`"ks{P*x39G)K ;$" HF&XMP6bJ4'≝XˁHG턈 +endstream endobj 1675 0 obj<> endobj 1676 0 obj<> endobj 1677 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1678 0 obj<>stream +&,7%va:`*PøցuGޓĈ&X`8xKCRlX%UHJTV ֕LJ9&a# L9G$wzS/Hq[}WX*9^zY>Kba@32\=qYje 0Vu3}lIGjXbmi =aN$5lǜ~ psN}1Z\[C*Dgzm| &[.$q%xxfCʂsIm3ܕe TdQ#u1s;⚁I4QYo_},WiHM~~my3F7 ]fiF5@M)^86`gEoᵰ[òy0t +$w黌2J +ҿK +F;5saT]3 KPK +#L14-{{~KC j#'1>=d=a&65{܃>/ ++# !)w?}n#zpK[4XǟlP{TupPMB2o. i_~QРagN JKV6JI/o 7J?hO!#Zvt[Uiq8! y56<4Ku #ZraWGS^_> endobj 1680 0 obj<> endobj 1681 0 obj<> endobj 1682 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1683 0 obj<>stream +K\(uˆe0,؈e3FHHk~FN6 a45seI";T/9}H-/Z)$QBlPm|kEeRpT~K_^ҭ4|O.Yd^{ :I4;M d۲Bisx{n[=mq؝ȻJ:K0٥Yg%,ռN48cկU"0 +u*G;osԠ>z [퍐]5q_ U ۻ|^G'E2E}U~9Š:BPY:*=DG`01q8q\O f&ՙLQ|@2MHH1U J|=Y^MJίs7jl1qyB\%ur5^?ɯd mgA 51m,'{%M[\+0rCRӹBK`ۦWP77E:hmd8❛!ǑM~fb]򛉭М| +m֫;U=lk]X(<틯9W/z" }^-~+Q4,E؜<|bm bV?< - !ĕ#9v!Vv5^~^+L$TAc-,oPDC^Jb<^pU!k2&U fɿAÃӓ3'F@[$iv[HP6@0̸MĂĎMc'Tp˘WH04 +>ʴp _ }@pC'ٛw+Gf•̩1ma-mr@ɜb. re%'qfy^_A*T 1x*hz-9haҌѢs }" Pi0hZS{FJugZWsc&s` `$W:մ] >5ƗðkuPʀ3?Qg\5#O󁬢*s^GC4a*GiX5Q|日@#~w +endstream endobj 1684 0 obj<> endobj 1685 0 obj<> endobj 1686 0 obj<> endobj 1687 0 obj<> endobj 1688 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1689 0 obj<>stream +eW 3R>y}ARa+4wf[,ODּ-< <@]Q۠D*?%TUTvslV|@6W`W⯯ltP+QF /z}c@?D4/)o yV:65.)@mLk"![`I#(m]-" J%=='ݶ0S*|Hѡ1ɨ1Bj| 2癛b]NVhnDN f]Sf*u~C^ȹjAЫ_#\r $u=r^u 6Scc͎wZ T!a611, ̶uB͔T(d lʅx3w +σə,y@;cX.茦_|; tږjߟa+?{O؋d{}QsBv"SpxF+= ^Kv@ۈDl3LS!X|.|o?74W=S}vyLjb vrozY=kw|FRLx*akJmŎ+"'cM^I L@fZk &9ujSSJ;ڪ-;,]0:[SEW O;ÏH`O ޛ}Y`3wq^MKR4(" Cg*nLai7enk\JHu +:Tv$;kD' 2F +Ң~uHQ6VK +4 k*vH7A\!Of;G*~$# ң 4飣D-Qv6 +}ܭ}چZ=~0SqF@J`G[kr2Xײ|> 铂%! ݀v VmlNLsU +endstream endobj 1690 0 obj<> endobj 1691 0 obj<> endobj 1692 0 obj<> endobj 1693 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1694 0 obj<>stream +0+g% aZUCd.Uv1w<ИEN[ĘWC $x +v Pc JQ0߶љyfe}?lh;>|cd~Sg#f %1!a +y`u9Eoa~ESc.]:JebjR V]2aR Jmx@1udȥt%a@,7 +JBGbK؏]=iAiMqD 4[ s!2(cնj4-u"nY܋$YCPk^`9BbL]+7>?8 `0ffۣzRY-$sf;ı*eG%xOT:%./&1aƆľ$nK 雇SjXeF\ ͏P%ԥ( vUkنTBơrgp' JƷy!vsG'$csPakM8Nѷʈ9|/p=6fXOH'=46D wJy=꒮OcUeMV*+O@59sd>3\ bN)nFn,܄1M<0NŃ\Ou%T<Cc;_@HyI:;2eR,1`l) cq-8BfYfM%nJ-?Kd}v\fn>9xLE63й 3^vAE#zj +endstream endobj 1695 0 obj<> endobj 1696 0 obj<> endobj 1697 0 obj<> endobj 1698 0 obj<> endobj 1699 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1700 0 obj<>stream +49uѴNhW/SPҨRiohݱ8㗀' ]p%|FJMbɂdSTLr3-ڃq@kpw2)fvܯseL>}kQKƐ0|fKnSu+gkR: jqS曷J.!`$k~ @# 3{xzQNK"AtΧBBxb@46)k^ߒe:g uz_Y>/@ՈZ4բZLHZܬ; +li"5>|. X,4VBκTkש)w!tвBLWٿ~LjM&N/@i3twYiXZ +6)G#Йk([dL{ږO.ݝ8cdr\Q>Ich|y\#C$6dѲb3sh^sQZ,ȥX+?G?7eH(צ_U#, =}Tock3GJ'dS Jf*AzMSZ?v Z+ǒ_Y v/ncʕf/t(];hK{tC2uڷ'pzgD} VoCP4h'rDzgwϽ$P kbR, pNb ]Sb!śH}UH7aI{|&i&%L.+MGpµM@9ӉOgVOsY#W [NVhYL "AB1',gXD}7=Lp4A\ӭW::gDL1pmL*xݯ/B4۹{p0;QX XKh!I. 8xrU>u, +Dx⠟1,xIf2(Gn1З;gI=z*w:hS(|8sQڴ;RD+ȭjpq3"VE%.> endobj 1702 0 obj<> endobj 1703 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1704 0 obj<>stream +o@{SR7>[.2]P/%nI=.sýOn y\iVXqڟcdep%n\ݍNXtYyl&$RURKai=")}o#X~ZD{HjMhmuqtG +#nv۩ujxƪCd\Hty+ G6$SC3 ekۛm$B37afZ֣ǻ|@'+ߨ?%"jz&jY Yo7\F{x~٤peW5 jU-(BV\E($;R<1#Y@*3} erm8˒ Ii-o j&ߐX"rǶ[LQ)@zsw=)YHIvK:r8ʉ"y cdbq yR11v?BE qQ W{Ǥ[[AW>G{Z_@Ӆ@pw\qߜ&ν{2oA'#|u |#u̟z bmC:@Aè ˳цG~Biu{[@@xt?SRb" J|627<ݻu8S_Udw%ͬuָ`tܳkN_Q]+rŭ S^vڕhQ7t+&Dj3*aCLS,6iƊd@r95M*Bj?fmd:cU>b!;9|*W5@T4_WֆZオDIγKl]?$&հ#Jdk366ƸTϱUcqk_tL@A,}tM#a44؃ҚJ-2f;(:Yc[,7Ymh d)̍&օ6ڤu`5mHj˂:ױj{bh֤K5>(Ug]ө|M]G,$`+se_&cx/yOiӑw2hfjwƐjۅݯ]*!Dލ'q5ת "^0 +endstream endobj 1705 0 obj<> endobj 1706 0 obj<> endobj 1707 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1708 0 obj<>stream +ZZvҚ?R'O 1ӓ[^POO2jkd SIFw_bE]< +|"e)j)M'뢁ۆ]-e<=_GNԏ<>R |fIηff", 71"-Ou4Pxj})k -wu`xV=;H&!(SQ,E5cp+VuAZ+%pd2oLݴ,9g/P,0sG,K x^ȉ +bF:w~)z#x@.e~::vfvquYuO>f{:;&-N Bg2G0zxPE&uZDZ>6`YK.>'+Cz ,HOmGsdx-Y{sO'D +N7X,L#QQ2:yE¥y>;g~OL׋\j_u{^0|W(ӞQJu;Y]cOZō#bG(!r11 5TnyѺ qh/Oؕ,nA(b \r(|]fW+I?xYeWğ +odIU&K$X'#TȜ5  4^-0WXAb<"l~]fcyeJ,d4q=b&2r譂 +V{ g~tgua):>LpW$h$*Zd=T7سs,3>I[3xkukzZBgtW[7Ʃ)%ZiPmC~JPYNJ !_1X:7H\~|Ŭ=n]uc_k=STUo!rwT䱄#cjb{7͉ IRpe+¶O +endstream endobj 1709 0 obj<> endobj 1710 0 obj<> endobj 1711 0 obj<> endobj 1712 0 obj<> endobj 1713 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1714 0 obj<>stream +jYnX0K(bxԴRD#?9g[ ă hZsF t=%U9ĨPrXwƽ w>&KJ~.NQY&Akofvu\I {nf"{%yzhG;d%ROYFN qWv~Fze:Lyr)Dg&jrsur|j6G@YIJ3tEh:HHJ/3Zr+_uli*@\aL* ~Ŕ.ep du"VaUsDHP` hdǫAL2\ +Z"3WkU{Ϯ~E@5(R.5l'Uk>kσUM5+ݑ~0&\tlYș&i07^=*}r@J+8g @CX0ⵧLFx)(/+, uz[1o5 8ͰM +\ ~p5?;ړaw(sӕ"|tx!нoPOf\ҿs0z~nT=XW@v0 w3M(/idN4ʐGyMz뜚ա$q~%/woD׮Ѥp+tftx^ɢ<;ד{mm;O+}R:9$dh$!/Ze3 bxYrǖ69ukㇺt0 NMȼb1GYۣJD#eIid^FR *fn+:Y8Ǩn uXՍރFe %a2V=V5:[‹FqB? @MY+NV|8Bh)/k~`Tx|0#6סdqڶ9q Ѡ3}Ŵ t* ΀VPx/1 -K@ +S^, ,+2EGC>A߭iڧʭDC[ !{cCs@JIS@^wV '&kDd]=V;S?~)ד7Q2ɀ!͒뗵KS-eG"W+ }%" dãMvTfA)}F_3igBY.[UۚW.%#堌rv=3;r=V^ Ó$vJ-{Ʉ\_ď?s1Bu6\ahbݥ8"= 5q ! VׅΒ&I,KZ&viyPGb308tRܮPaB +endstream endobj 1715 0 obj<> endobj 1716 0 obj<> endobj 1717 0 obj<> endobj 1718 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1719 0 obj<>stream +3Nd{EzwK W;}L{ ;34QwyoA\0sFe!iڈ+o^.&/~5 z&T)SwYi <9qno;℺nL/TE`ErZۓl}zTb^ 83>\)SP|dym #)H!9NbOaX}oj%!y+vnxlvW ,թ8(%#~/!@$슻,۫1};&~wgpBfc<ճXo"DC:=) e$ uW8%)` $ʿF`Ңɺ9@/ h7*#\swAH_ eO@WIx +LW@z_WT/u20-2#hfDƧ$<0:SA1| ά(u+'R%)TP|31ToV_?stP$Nݼ35#ٳl{anBC`\<4s3$Đ=[|!wҤjyFH_ -14I"̄ތfE(e6dW s4w)lТmU^N_|HWul4QO_?XU~U_qr0 h{q +endstream endobj 1720 0 obj<> endobj 1721 0 obj<> endobj 1722 0 obj<> endobj 1723 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1724 0 obj<>stream +P\!% <1v>v^dy%WvR~WoMyC@m[7ܳ/QlqURlLK((< ,n7>̀d0t(8d3bo_0{f46Sy:lHYd/< %-,U.$>XSb R 2#gCs]YT&<ٚqT eQpN(I;OtYzՀ"_I=~t.Y;I(-žG)ml%d: +[7;'|渏 +&U# Mȥӣ0qXLx]8Kki7`[UބJIy&r k4\ +@4 vujɶE6K$ +ҹ~/ǀ TwiZ>t J4Je:r + +IX@7-ȕ@0qgDA!reex+w9ԊwFWm4ƧM6)cr }YpajblteXHph^bGԿ‡63B{$k-̴fџŦU3vㄋ(_)NdNQt6S zl k;ݳtX /0;!D0nCaGlt~.V͉ tV/B#Y+њʼ,=- <}j>qQqc+1$`,Hv`P +ZR ۰-{^}ZOVyXw4fryqܪީP)OV%KȮ0n"`%8#(ҴQys0Fy/EyNc|K!e&rIG7@{`H|1rz&fYWiI^yGYX4iW Q +}laAH~~ndT>ny8ЅTP; 3XvΉx2 V-䣹N+hm9 PLbN,K| mFQLg[Y/yKɹ_d4 ne.zVI>2X/ +endstream endobj 1725 0 obj<> endobj 1726 0 obj<> endobj 1727 0 obj<> endobj 1728 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1729 0 obj<>stream + j@+F|:]wk^ݷ5f BzR'2 6iv o >7 JW) WKrh>8R*9ÉH1.$eR<hX"|s}3|gv?rxwp*Q>:Ԇ|6MV!yj /Qbmm̠W!Vƚӄףowk~ |!ڷS`FՏt̸id=QjTTLkfgǦɚ˃"'7wpr=Re T7(|KZ^HU# f>߮ r 3SŽ~l۾KAe{awb 1ʀ(!TzGߪ]{G[PHO]QjL'& @Kvzyg[=W0d1pUCER8({$Z&3P`j쐗E" 0[Q"wYw&[57Mtd4<ֶSaXkmD=$dip1xVcy+8I03tåG⾇j-{  +*A%&PBף }@j/(#l?Id:UZZNs~fP`5Ku'f=e}iZ=Cv>sd)հA:B05S|I5DݛkėIPQS7L_؃ȩnkuI{i-኶.&Z?:GN$܏jKx '*RQ>V +L3ݝ(&;IJsy׶+@'S 4EwfI[Ij 6.= JZ 'IBg>  MV;VF!_i WKq +ײWwθfOܑ=!S&eѶܦ 0Ij|\;s=%mb;MTqя@Pxyq=׆~Yh˦,0~Z*|xs#bZ DT +׻:TU +Z}7J_ڢKe ]E0 +Df/^/B8\DA(9Ě.B[qHxޛ7Bu@wݯ +/ Wnr>NI`±+C+_Dl1~n!t!f@%<խrN$D>)}6|gR8ֲdոWk׵8l's#+0whZ~#"XC +TibQ淋 o55Q>j !|$Y>:\WZ- +endstream endobj 1730 0 obj<> endobj 1731 0 obj<> endobj 1732 0 obj<> endobj 1733 0 obj<> endobj 1734 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1735 0 obj<>stream +>EU"a疶E.L"ZIWtGӄAno(·SgkN`GHL3bGEq!S/ha);k[E5WEXH0RO +؛KVr~<%:X &hgTK`\ߊ7nX[[L;g!#}źy'sx{ FlA5ܴ/ x#NAx9)9 |s["buZQ,< DPRt5zMI]_V(Dz!L MGZITl5Q^5פ{@CK:ee31ˉumy# 6TXW5*Mvγи +ofn|j+Ͱ^-0_4L} ٢sxxPY u7bwIjaS8B-̡/Mh%ՠ̟AF<d뭻 &S}/Ie?}A0?(/zZeҕ')kU#7z)2@+^O1svٙKo҇>+ '=:A&4@AzAH$ϜkAݶYjh~] _uGN`d@*p?nD b͑IUhȷ!9e72!8b]t" 7\QP&\^'(8GASkGLd:8D@DɫkD&^*uߗJD="2f@\.i.zfB3a@Kp # fxr|N{NX{X:#RK;[ ee;Đ+dedW{Jj^H-{y(v+㟫e)=sP&!nNZj!%b?!(%S*yw.I޽0z 1e{'p+6'zaMVԱܻVf/v56j32d'VXD'edzRt^L͍7|mv8GN湐!qZ@Qa+5Vt#4q2 TOhH㢹E3}T`rS%z5EbCʲZzpΔ*]+ށu}hHXuN^{fizt-.)1a k[x߰)jG&oM'6uiC"lmed(>N ƈ#7S@T~ОXEh@8P{in=qT:e KqB .٧Ќ%Vi+92DᲚN0[-_SoҷEڦ+>eѴ@R݄z,F7_+L|"˿%0NrtE20@U!1~ɪ z$ 姷GiEjIw +endstream endobj 1736 0 obj<> endobj 1737 0 obj<> endobj 1738 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1739 0 obj<>stream +<__;kȾ/C 7kW\'R.z,SEfJ^\'WuZACqE{ZЌ +PەswhC}tV<ZvkCJ~9*E_-MDC`6^k-p:hAQm_UhK/3@ +QJ~ܸ0rf;>.Ha*L sqݢXrѴA?7 v p\s։?Q5싩!M1Y1cC*p0̻/B$gqML5$3u8dv`TAUi0i-5fV ;1u{\zLs$YE![@]d5;,`QCTLá?pvn^D'JDigvJr'Lh {tp'9dz%W$WAƊrǺk`b'dJ")3 JY4@ A2{Q#]2S͝MʐlL$)@U'O\GTL9Ө5ߤcTi>|m0Ni *:k(]MZM e32S}'Qsp`W 8>Ƙ.;9&o% *b2L4.`H +endstream endobj 1740 0 obj<> endobj 1741 0 obj<> endobj 1742 0 obj<> endobj 1743 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1744 0 obj<>stream +2-?oԯRkN_$J`@i ;xDOj\!.Kҧh]Zy*D +EYyLܦ)]?2Ɣp7c=}TV$ʈ!ߡ54`*\>.N]y4tX;m_|U^&RLJ\/Т-"5H2iYMxIX0V'̾QS/C[Z ?(vL) #3.l2tVw bk#x%|<IҙXmZ4ʐix`TjC3'C_eZOSf'UלJ{5 +ݱC +#߄T-{M֡|dp9 )&(̵}_'zǾ;4uVlyTshёq┢]a h)+˜WmwvΣ_#iΊYTRw~).G5ߕ.,,Ufm 5Sc&Gn;d#HAt8JٶB" '+R;XA{716 ~B G5A0%G+e8&i]]v]hxdÑsXKVeq +7XddWGݖHr^O{mh18A~G*v_`AyzXj}t@L/aݤ.jlJISwWeCvY=TA1Xi~CܒAݻEn]֭4gEYL ih*By3ܤn ߁º_'gnW(-ԟ?%;r 1i2b7 ; ~j"8RQJ1NayQނPiI=hNz[Wn &q6vile=-_ϵʦ#GrD~>~a8;mdKyފ#T`Xad€ _Wt=~ kL˄ {H1tK6?.#A"݊.ʣdޜ֪El+O[ +endstream endobj 1745 0 obj<> endobj 1746 0 obj<> endobj 1747 0 obj<> endobj 1748 0 obj<> endobj 1749 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1750 0 obj<>stream +8e+]ӷl85ZOio=Ga\-#=%H#1bHX:1mo.-m<M` +mP%HhH:S:-k;~3*?^=]z:s@%gQz_/\wHtټhzg?eec +["ѾF +DPb봼ԛVz`fٌf 2QPӞmYXIPm L p[4Xy.7}AhL8^B5N#lxU0qQ=Ҿ1x*ǵ4)^?4n;L*ٗG3K>b +f>3j$"TDƷ^û !*$Y3LS,xF1oKQ *¥Im?TYFp sĮRäwS+:e0ێpVF0 e4=\B"Y;̺Xgd=}SK렳֛kobIitGSLh FшW@2P3z6o&;X^N$bHAGufzg=2|oWI7$k!e m 1NL(1̑ ShM8Wn5EJpBgO~egku}_> endobj 1752 0 obj<> endobj 1753 0 obj<> endobj 1754 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1755 0 obj<>stream +7÷_/S=>3 .T_4wBD1cUw&ӵ I-OJXVZvyo $j#DH"zg|HAf  y?Ď͵W% o:-qX")2%9϶0 Ⱦ|=꿅E2|'Rș74׷,.n&J~8^r f~HZF ͸k@ 59g?e>:McUT{6}e߽p &jFqEm00!E +ұII:P +F81ZHh1u}Oc 9>sLla.8LMVtDXI|f.jah6]D__e+{9u)̴ 0;s^W+9Kcpaylj߮`T-jkphK<eIWo(i@pUo3d }݈dי~D d>3? Ex֡u.r0ZƉ,mtW'eAؼx-Ov-ih1}M̈́c30!K᜚LGE zRT X-HYCAKhX) =@С yT!oO[gpx7JnSBuS/8cobWK\9 87Uxcʹ IO&wH+%E 3;iR׊!疎_ќL@U9IGxb\jX5vHL?Ch)]mԛXcuCOƒGܟWsV=pH)x<ʬ_y>236D +v+4}ݥًiS{q<"W2nJhY~kTO + +rRjsmO +@xJeΝ+* +endstream endobj 1756 0 obj<> endobj 1757 0 obj<> endobj 1758 0 obj<> endobj 1759 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1760 0 obj<>stream ++) '_Tdun[/ A7mUɁ7P9pNTbaG+4˞k2 C DH&/Kc1aDMM._T +?o%))E.y4bCاk:A|4 Od6r7c%- md g4|gϠ#j?_Bq0I.й=0Q[.7LsҖO-H]Ȑ1s< +ΏzS$zG'B'󻲌YۍJ.Dv5xiv(M\%ϐ}ui3j2͕:{C#6jP]> }ƥvfev̰&-q# :qH +\Mtf%L][")^nktyC(u/;-=QΒ8SjB@M02aɒA }og\MjU@@qH%yw&uX,ύҶ_Z[niN-Vz%-o +Bx B(eP +g@˦>:!W_8QÊX#l+l P-;f5&2%YxY?> +MV_&ϡ?j?b?_F6rP_ʯۇ@/7Yޡ0Z vĿ5Dΰ)s2ϟ]H?G\+; 5*"ydS<8Q +hQDiGV<.lk@nI޿|X gf4קL>@Y2)}<LM4`4cSlGlC"Y{Gf;fj<0ۆG݀;$:6k6Km +5ʕUǮjL *T,^~ [JBH +;PIմ M͎Nؼ8p#e/ظF;Hjv~迵*mK%=ۈcH6yr#٫T);h( -gEO.g1@ */ChݾuVq4<l$}\T`ŵ{EcRsI6 +vS=8>JWԴ{b1ݑ=wRPЉ*v˩Tpm +endstream endobj 1761 0 obj<> endobj 1762 0 obj<> endobj 1763 0 obj<> endobj 1764 0 obj<> endobj 1765 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1766 0 obj<>stream +Դo 9VlHj:Ke{FUn ׂ (9Z914 68xh:k-`xC`:D&CYyJLjH011M-wK$h!ĚuM-ևd8^μ8=C|2Ļ\K*)ܔGZiǖ tb˚}0M`VޘQ_-BPcـt΍c"UV}^pTٓh;rQ)zgx%4DQ9W?Kx+2y70B`J'}"EyS܂DAUC'l7H90ʙ`"Rҙ@Vc$m {"F$bKD=p׫cZWfbZ~!\.qz8xsb42TKvSk~|M/3\;^FWߌ_!kPISG/R>E#͓^'; A%"z(@z3!'Ė0/mBIG|j,)c SAyͫHR5\Fgf3\CrPcT`VKr( Ѥ|@%Ex8cq&2.UBp~/DC]ST=e&5 E88'laєv:8bc7qT!La+76NR&Ǡ@x!1:+J3I;&$#8*r <gJk> endobj 1768 0 obj<> endobj 1769 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1770 0 obj<>stream +Qyʏ5vA\lcs5Zs9SG˞=VٝD_uo  GVf:Cމ4:YUDMH&) au&{ʚ%C ZVB8$쯣=J-4iǾLK.PK[t6;d4 _Zz5;aZBGͥ@} +SְSAN/sA!JМڥ辩؛6 ͚drʰa P >5U\+hc9osyTْ +Q ۼHr78,{!g@*Y ;'<C*g!Al͇._ Pcn}s3@4*6Y^W-KGlC|T4Bd '?kʱϝs( "e:OdL8)| DLuu?i}h %6DF|ยA8cC8r@Sǩ !}pz`|s8,c_?^,]OGefCңC>O!]9=[4_Gr݀"c網Q=ծ&O3Zg6 e\ߘ-qe#{ik.MyhVJeHvP (q~T)Y3#w^&Q7J㞒 +{I60=KDŽa>3wrdbE ־yCY]EFQ' 2Y0Ngzux_] pCjp7\Kabp$j4MjGnPMS&q.+2 ^ŀjYf3v`Mw½fpUgNگ!`rSUɉOeg?(fޢ'D[w +,s<(AFo +endstream endobj 1771 0 obj<> endobj 1772 0 obj<> endobj 1773 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1774 0 obj<>stream +T^! +`I;$1N.P@nBh$ 4ސLM؉+_Ncva6`ҷRf ~]G'UnKihZb]S}]"EN\ +dX~ˀX'{NbuLis`4$a7KB|}7#PPPUi1BiNi&4kd){Cl+O=;C1pTQv$?NC(Z{>cɦXڙV c +NeA^]& +U~BH9!]$iEha;ƷlԜ*>/ztəU8Őtxhx-`\y~q316͍钢 >'aa@ pUeleZ{ыIG4lwLTl,h9NJR\bZg<=)NcO6De ]\byXurCdg.7]'7hiXyg2D{/p,j-Z5%j.(tW|7v]Hݮ0'ӄ؄쾟.W#AW2R-CO!FS0Sbq0lj gWrt`FezOA#sza ޲1l!oFo ; :SF+z;'OA^7o>j[zZX៊JuLL8u_G\ 8A<߆KS֜zyb+d* +'ׇwW8_$\p$(3?VZ(2Y4xT;UOO н&]Bru͢vfAϬTz6C޻ŽY +Y*zfoq7K.E>āJm + +d)>IE3MNx`:EX}yP?6d{12/Ƹ0ڐ2Zؒ++>ύqnv$Iy. R⫟fwW)Y>Y 0a#w16W1И.~knMApbF/?$ +_ }P0kCy`Mq^uj6r(@Yw([72}`P%/| +endstream endobj 1775 0 obj<> endobj 1776 0 obj<> endobj 1777 0 obj<> endobj 1778 0 obj<> endobj 1779 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1780 0 obj<>stream +vFGq<61`twn>ubV68[[vvTƹ}SorWGj(ťe<3[njaȅMasn'uaǜr4%GԱd8Ib*' pJUxSd8*_f<3uC^_Mߜ[us3?6,rR|օsک6#ߔQX:{ryfU;OEЂW苞3K[e@(DB} *$Q ,!hx"&NF%2[OeoBڲxoɕ 5%zFW? V4p`eI%$L:sjŧ֐H*Sn8RpEosfܴu8x|DY Ķ39AL%"Q;m„8sIwW4<)Jb?%4S'Dm ׈/ ~3W @`+pbꢞFɭ8#UR=ȕAUUpJirm1p`b خO{t \͠v#RNb]@RlcZ-UWdi4f\P7g> endobj 1782 0 obj<> endobj 1783 0 obj<> endobj 1784 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1785 0 obj<>stream +@Ds3|L6J]))?,:shW 3{&^o/FcJS?-v]gwRĄ_T=g."5ɵNA4rس AtizCj]NYf g l![D ,MDK3{([A + Sգp]Os~}L#iЗѬK2\:HG:E+3g/J 1~\2-ɲlI>xG(Pg^HhWA-ff.0XlלbM JPn%Rm02Yx +lNGjMn -jU'u$h-K`^zC6=Sg +wN},a~r+`k+0Vbvklfl ݛnu uv·  )e@DIbu$"nduՀufJsbRƾna6!tm.3Ly|م3XHM-*s- :;jk5(< Nk`:Tg )E +7aQӡT--fiO2ݏVU3QG{f۠\ R+#/#&br oK^<0w!.odJ_[v. +endstream endobj 1786 0 obj<> endobj 1787 0 obj<> endobj 1788 0 obj<> endobj 1789 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1790 0 obj<>stream +klqw ?^\^_k@'..j^Q :b1)( CAh*ze0 dl-JG(TE:,}DM]$ k,? OH c/*<}2{?_2˷gRq傅È>E_l/lP"R2J7OcyՋV#`'L=(ٮߜ.3#dtGǛ*SDV :`sG@}, %gӚ}J` l"^)Bh@u 4uIK;_;s?4|5\:@GyD{^HSƪV̧Tq}\gő.>G?9BSx-#.Bb--{L5bbD,?Y]#IkRJ/35[[oN8(;9b`M+HìP7 3!X㗨 0{Gؕ C::`F~J +kwf!F\p@zDUA55k*r@y~Ae( >{j] O-% v } ýnNZN?8i.燪Y[Kδgwb,@Ncȿ%3}@&H"PXX +2k$Mw{.1k3{O|)1::.e݃R+pS1#3c;a\nYaL;7&릫 }LFNA8e@~ y>4;* p3AkMGMT^.R'ൻfЮ*154ςM zp7#bB? +_,.b*>@TwݰrPxt^3X]P(Gnb-*h1*_Rخ #vT:tCK#Ï~ gj́j6xWg㓪 '5"((/c GP_+[#^>)4i&r$=(ކԌ &K3`eWc/jJl {'éW^mA߿Kd#Uʜnil?'M7͠ WîqechwZcawNX*K}Odv8'#n.E*JF + +endstream endobj 1791 0 obj<> endobj 1792 0 obj<> endobj 1793 0 obj<> endobj 1794 0 obj<> endobj 1795 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1796 0 obj<>stream +`f%`C|ٸ}XW/2M xƂi%'hwOAw L!Ay [}yU8+L'S=N‚WxT ㋇0è3Db +LFM,u+8uF]qb'0Ӗv!=gqk {Y{tNì:+ 5C_dL<Ċ""{ + rS:cUkܜA2q6=K5焗naZ{_^/$)뛆z<{9̥- +?W ̍z>%$HFx"h}ɶeN:)ٌhSMf+HnXQ8dZWV9ME#zx=k7WDhUw \'P"==:-X۱k ct'DLhŽz]ifM.ws Zg+Q_Y HQk)?g9^*ErYu,r0GX-HD LjV9 #:*R&UY+^xj ‰{$)6,nJvi<^E\A(ǃ6˜~ bJ2r\cD0{ZJIvroUI;UeO +X5 ;y;pޝ!KU\'8,@PCM3C%v>Dj(!}P̭zTJ#Q'{.]!\cƔWBu^v1|]|fWVL/(K= yÊԲ3|_LSleMxsj+hx>h\;BU_gA=}Rt^Q5 A ӓyV j&-REs"/PLEu/xAxCg%ˉ9Ocܘ"4 +<ݗOVL,Q-EKiepk >Yk@g֎T ~6MS#9Y}O%B\w}޿r\&;+L1"fNLhVX^ڨŗoPp{I_. OXlO;;]jupբ+> endobj 1798 0 obj<> endobj 1799 0 obj<> endobj 1800 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1801 0 obj<>stream +Ń-+=_$!8Xdx 8d{n(䈈"I&D6$/-PwnCFs֫0i )`E(^<_2G3I6KDƺwfW *ck\ w0, QpU_].WgAk)Mfm +3jCK"Q<č>JE*ll(cr烆fMKC_,ܑW7$&lp3`n+61-a3KFpKzP&z#wnF֏.gƪ<+c/ASJs„u~ޕ(sTrʃײ#A +`R掱 +<uF +k/=OO),=u,wU%7"5|#PI]`x7N&^TfpBȉ""Jϖ׸I Mg-W\ !\Œ0ې0hyÊzm6q^!S£ pxH=O Xvh0*,i'Ҏ_lt`\r9&쪙]$睉~z&Y+yΗgwĢA6*VNh;XRQt:ir8 EYPFRSΛڬ0V젷+6u4_vY$cB/g)D ?J]GΘIy&`5_ ` + 1lb>iCh㇟,MQ 4g,ݧ0׎O&S|zUew*:<~; +d[p,UڨMO,#W8 +endstream endobj 1802 0 obj<> endobj 1803 0 obj<> endobj 1804 0 obj<> endobj 1805 0 obj<> endobj 1806 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1807 0 obj<>stream +1kͱA4Riμ*uo6앸¿PGV[`{-~wuAU(?5ѹ ^rXcgB(C\JVb(gpbiZUDj{PDëSb>>ʚ-ɕO;3&jy"=-+2vgbvw4- 9>!:ghu|EyzUwTBb\TP:gZ{wX`:+r'*^.դ872jJ_@;[t:f ׵*|hD;yP9Q24ZYKfZ'7s$z =_\2 P`">b (CZέ M"\Pګ4Z1$+lB1Jr, [a+ٺpxڤut3 d]eqaCLj*z6>cKX(BdDI ,u:HAFNAj)pΚj$uHvIDhztH? $w4ʬ`/SD}wΪdI{rB$k +$c ȊA"T.hY݇7XUI`cLeƑ|#vIs@ƼmFʘ 5~pۖ?}V$03ԨweC/|1=lU)LR[̟4 > endobj 1809 0 obj<> endobj 1810 0 obj<> endobj 1811 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1812 0 obj<>stream +ӗJ<(]dxծj#WM;U, vSuةݵ0>>ӑ,-DnDh7[>~ە.$Z`*:(;lcH¹z˃6zA2)9d?#%206g0TYG5v'cdES=y~߶rӢz&;SLP,<'N]u>'!xh%s oja']FNkw!BhCsr+9PCO~1LY,#FQU:[錋0gWî9CXHd?sjUT2SB۔؝ J +k v'`+W=T\QB.BMpCN/I˻)wQ'}y½cLYf !<P!,M(׳])ʼ MZt*&xTQ=LuہpFs^qzDpp-V(Ht`X +aK6/턲tڒxp =?Ǐ!τ4#TeGDeLd`UqQB`džL: U_5!!Tds35s9b^ ZBp~ VֹYfCq8ƒ +e+C7cs㘻(7ꘇ70WGSV?RB)US0rS 6GD=DoYJ*aD9i1LlӤ#1Ÿ,OjBTd㈾ j"aV3>U.T"ڬ"7eiH#Y5t+]Pڜ6݅;J.SZ' 2+|<,jSle9WF!Nb OrN[{ vGxIюrS*h Pw3%&,~zm) $ s\GHm +˓V4J69R#D&[ZU}1f_x~ g|ޜu^ e̩=$s +endstream endobj 1819 0 obj<> endobj 1820 0 obj<> endobj 1821 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1822 0 obj<>stream +Y("~a`o1%G'e * +V9tv8NC4+ \Zwa9$ﺓ +BW!ihoMFI4VwXW`vsuLO2"teAgu7'ch@H7 |ӻ _=vWdžhXR'zSuPVAN/a: ]ݛVHLˮj4D2Œ|}yqi=6`&IA'<؇  mSxNꍪ +endstream endobj 1823 0 obj<> endobj 1824 0 obj<> endobj 1825 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1826 0 obj<>stream +=kZJqb_SeHCpL`}+uaߓ ? +xZ p":CLz1vJҟRv $/ndygd.ӸL]0@Tު;)@,^i窲_KmaXmÔ) LI@kV>ĥsO)T&pF'FȻ#XZazb;b:5 =n(ٮDZhO”lՔۅYfu薏Z:sl~pSYob!" ++!;犉C)4cwsqk>Bm$h}4ek:р= Np F%T~I^һͬr+cftɽlc#Vnji?oF?X^B ٥:; +ssRH2bHمq.ſ֝dT(m0}^гGǗQN w nE{w1gQ A M)Qޥh~}VW9Ųvj>CEMuLoH+ƴgiH%M9FTm;''sFB* {8C9ko +)N#p 0U|m3-!6+T;9 ]>5,6͙CMQC:թ4踨YbMdJ1p}jGӦB5/aK3ȌB1inbRnrll^AR5t7k6io],tL>p{8stt\ʪAKP"a7,ԇ˳ۜhV N, P +ԑQ.՚x3SmӥX8ŴدPv'[bW4I3sfZoB~[qX7h &r u`8)^ .6zzbdf<3L"KI;vיiSG@%=M~HAqkp2tۯ>Xʋ6l:M")( +endstream endobj 1827 0 obj<> endobj 1828 0 obj<> endobj 1829 0 obj<> endobj 1830 0 obj<> endobj 1831 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1832 0 obj<>stream +8&YKVe3"Ȱe/I1q_rMoe[j$yPoA@g4-nƊHGE`k.& /fÆK:Lf'?۫Mo< +nECM%IM-( d؏,GJ{@T7]5gY;!7]d;׫G)$!\$+)R\m@g˴HbD >9-gy=+v{WP)LKhBʱdmV2IGXU<@AB>#r@jXG-q6xN=n*Y_lkY[ L$t9 `A6Y (UO!?n[}YQ}ʹFFKDe0m, !x+1,܎og7/3s-$ +_S_ ;֤ l vo*f@2ϸ}}m;H4{xXypثM |Z8 +endstream endobj 1833 0 obj<> endobj 1834 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1835 0 obj<>stream +c%߰4]c\5)ձ ?0]PΌb%[AD"q3%2Jx5cL^!XDpxv2$;@x8hgO6^7X*J[+}6PP-<?)!XPO/r /"7oO 5L/-I!=w[g +\)0/9| +endstream endobj 1836 0 obj<> endobj 1837 0 obj<> endobj 1838 0 obj<> endobj 1839 0 obj<> endobj 1840 0 obj<> endobj 1841 0 obj<> endobj 1842 0 obj<> endobj 1843 0 obj<> endobj 1844 0 obj<> endobj 1845 0 obj<> endobj 1846 0 obj<> endobj 1847 0 obj<> endobj 1848 0 obj<> endobj 1849 0 obj<> endobj 1850 0 obj<> endobj 1851 0 obj<> endobj 1852 0 obj<> endobj 1853 0 obj<> endobj 1854 0 obj<> endobj 1855 0 obj<> endobj 1856 0 obj<> endobj 1857 0 obj<> endobj 1858 0 obj<> endobj 1859 0 obj<> endobj 1860 0 obj<> endobj 1861 0 obj<> endobj 1862 0 obj<> endobj 1863 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1864 0 obj<>stream +EnY2pVk>UW=\QyRu/w +6@6t h&xX{IWB?rZ a6˶ՕU1OpiPeS6hx<ϰeg{Ξm"ߘN+vR'Ë0!vy{rKU1%-=| +y\(z.eO^P jVU'\c).;Y|H&K}y6rK0)wg.Tg8?J$UHw +PjO<ΡiD6Jgen&c~FE/H'Xo", E,Q!+Ȳf5s d9 QbS pj+d퇥X9CZtn u:F@c.dLkċc2;Œ1rBSh&@&iCw(;m`a5r1k TLa#K6\QϗLg|BV緌uq`1ꬦo%wGC;$MgW"#2R*[kF|F>:Tl5$:A}Qsa%Efvy00N|gm +J 6̅\kS_}"{/3"׺hm] 7IRKW+[g*zh1 @xRc{W:ѼOލjf|gaďd ɤ<4rT[!Wi +W\JZ./꺱ztrb%!4oÚJx"zYL\o82 +f}E\A#hyn +;Yw#]0]XٓWo޲[ /уkXxH9&u2P_kƟq3# w .Ɍ2s$ Zԡ$3W~SsJH۴MӠwl:5N,G0u^޺B0'J q\#}-CLmm[xO3,Эot{y+?V\C1={ ;B\Wz*a-o'U=|,(s;j!'t^/PC?s+ކ%brz&Ay; 5ʾЦ?#Q11*s7fI Q>}Ȗ.eZ\x48xEe8nY:+d ]tz^t_?sxnA,}&ŝۆlMS@"~Ÿ,=oXUÈаM/4D 0a&q&_:'{\&r, ^dQ/OMi! `3!ʞkM4@\c:(ޚ+՝A>xXшi>ȹC<h˟BG4\Bm/<ǗSlߐRr=nSX%3O/+qFu@#0|>z,㙥Kr,u8̺ns:%?@|2%c2BD՗U8>M~GB7QK3=L@q݂N=8Q-fՃH e ٵ:js56^elۀ4 ]^ZO;;`{h{OxTE=J^gRbHu'ͻHd3bm7MOy,]:gͻ+>_d dx>N6mYHL3lj#UaS-Sr7{}g +QX(>m G.͌h=*m:J9W_ap(M1Lץ`2;|<Y@d()eL* *mJ^+@~ 3,&%:0fUw +<*bN!;aX%MAℾ*ϩ'1zOͣH3S%4u„Nb;,DP'EKDN#R3GFr5ƒs N^:η+j av]N 6-uA?> Z;+$F@AM>TAr\C7*-v^p\QnO))Mbz էTn7 h"j/SVރ(&.F{~OakDܑ ` c{ w-D$ 33Jq^R۝qqrSuf#i]lN+z~'ϜpxVe\%FCA|SddhntM.dNֵ6sG?7׺2)́/!y`@ cd+"L9Gi0BQjI G$G^6c՘F}{lz,Diͷ|1/{BP.7R7L;mR؅ѐFL +W"]hV`D !jSl 1D#19]Ȧ}t=TTBs),@Ej*~;Pj54i |.%k <O!M>#&<=R [8+z6JOxF"|`.<4"& )^>JCϱcj/% l.tZ],g>i^𜬈*OHL\qh`ws}ԒC+H&c-Qp[T5~ۨt!|QO)Īe>(%YWo9q|m[ +Mq8{e}eZU XÊ[}Qfh@x5J"qs򹇖Nz o5 j^O9h4蜃ߕ>ׁ+r ҒDBt ^Ҟq Kqn_yj9 AMT#,jQ;=Zadz@+餵w׷z>G+'hO@MZOVWdgd*nDrc%w"زE_2θ ϐܣ2 2:>5FH(:QVlu :5HQe0,_9{PIrYZқXzD O$YW#VHŚS<i;nuAсI d2q`C\$<7 Ow]F +endstream endobj 1865 0 obj<> endobj 1866 0 obj<> endobj 1867 0 obj<> endobj 1868 0 obj<> endobj 1869 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<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1879 0 obj<>stream +QPkBȁBҒ%쾘(~r4&8sB{BȡY|Z^S$NtH}T9ok=/G pB)nTl@Op|o +O;9;%i  " DsM(EO),!S]7hN68R=DQ'yoL{c>mgh.>i`x) i)fSPodªq7TN+'+NXq&Op4/lɕ- +Bt~BǸCw=]*ϭ%)CjMu|)Y4nk>86F=؉Jڦ~)ɫnc⹌  E.w5jrhWt(<}LG٪W@ARDs;?ԣJ%ZҲp#sd8U( d)eT"w?;yb{ݢ3H\Gh&9nw+}CyV+Da+uѢ=Z̞l+T:Lu*_P9yE.Q/loFN^Ha de[l<7Pܴ=#\<܄{d>o,;*tV" ~MH0~e eV26aHyW'Kq#F`DDQq%͵ rvů.Fl{8Fy,w/e~00c^TyV0xI,2:%"8ɥ{OzRmfxTr-K{id]8~cz)&et9e= +(zJۉV9Tؼ RԠ^ +#}.;(O77MĿf#>Tu;ZZwv 0DzoVn3ٰی+/ڛ8X* KGA:؝eWQ ndnoF;*8g(_.L܀l'$a;C֓ Ղ? mNd J: +aSݏzQvlel +qQ|`e _fG%Uc&P.*7YLrg[$ogь^>pGeӑe4_8ry#i9>LTaLP* dAdS^UoI6G{yڳ>"K)2kMؕB] %zj?apWB=ϠHCw9iȌKiܑ~U󓢡'1.ǻkwLM{/قDP.jۻ762ށbʫu9ia gŦXK-dz%(ƵNhfC< U :s +,v1ͥ؋o "zCO\}5^RHrS@P%0grMx𘒔F /f~ Fn~gy똲mوg?ƥ:ؗ}PTБu\҉O\5u#\}a)+St Bsi{Sͥ|X4nibQD&g.[RQ:] CL2F=ﱞf"L>z(F6VvfH{2q9m?Ұz]> endobj 1881 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1882 0 obj<>stream +Iuc#Ak+5qOI`'[2|sc +sCXWĥ^ t\u)c kX^jH_j]&qw'Aln]u&:Ve>ul,.z ,i]32Mk.4 0zC*WhwY1#;j.j +kd.2$x%e6=P(UpǣW1qff/2;7OWltĭ(AGm,e6 +h43 yˊj^|${PԺUz9RZ %^O@@`UΆFoDEv M^s*8q:1Ü+Ct}/j(d϶J(;ņ7IخQ8?SIU%jw!`pK MMԳ8ݟՠЦOS8ص'lq/Iylf\\+7E>+۶BE8^ C2~LPX%WF67}嬊KWh>wjr B&Z )vBK.> OqDN6Y pa +-q-FjSBZ$WఁZWMXSe#'5WgV,~a,#VY*&×DAh4Gs$|9>.ͻ|cVhhD=WRڵ+:%BK7LNo +o# +tGw7ۅ4S3H$ămcQ/~&BqIo D,u _@pVCGq *nd ++mTZN{q +endstream endobj 1883 0 obj<> endobj 1884 0 obj<> endobj 1885 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1886 0 obj<>stream +Q+`f-HH +;r6c*Y^.N2W3Kq.l|=*6qp.+~Z% i8`eyH|ݎɥ7C7?:^uKnK+,i o9^63TMxw5\j.wl;-)mlv9aU*fD[َ\@<kc_{9@ MWH%;cNi\wޥXw Df頩u;ޕz4.|YJAq|2E#/TGyXu7=ѕ|(&9*s e 9Px6)EKm+ +#2~U$(_Ti?b *TZymܻ|FYtV)wߤ[E*@X쿿[RߵD.c|&ܿE?u +ᩕPmƹ㞝̧ +5"_Oi4cu$ΘI.n?9w +W +%=bQ,i!6jAff*̶A*b%32. ĺUD]s hhC T~0I_@7 +BAW aD#qCe89OP +endstream endobj 1887 0 obj<> endobj 1888 0 obj<> endobj 1889 0 obj<> endobj 1890 0 obj<> endobj 1891 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1892 0 obj<>stream +韉v ]8/zRMLX{ڱA㭒jy;tpII\ HFX%{^MW6Aq.EbQo: 㕍◦ӢOF7-(&Glv Kͥ0cUvgB1[ẙ垗쟭P|_e7npخ`0I#%n2lut/T/r ޚQ@E6=O!{sx_{Q7Y=qo9q)6l%fW;]3S׌=9%ʉrmߦ_5JhƮPZFu)6%G]8O*{Wj? \Q;F323c|q<|>eh,cC7u+nn:gyMbނaG|jqLpaœ1rSԡo:'OwD񅗀'MaU%rhF24Dߌr=rEH\(|KfA~E_ Ul=JM8PZΙHm  +_kB=X3&0H$3"C0\PC8$RyDJIƄhl! KyD@akN:d 8W}V4 [ro5XQY;<9 +:H!Ÿ& +[1U?}Dmc{?Wh/[x<X` <XK`l@ŏƱ{]沩KT_ ZrƝMjPp-)$:F_bg aH%?-rLTZa>7` j;H+Y<6}YIt6!QEy ~/S|`Ύy:_ّ'@adA?8]HbEصJE0&*WFnc 0t8ϒ઎/| yfx(Lz<jSC*}0}gJ@e +endstream endobj 1893 0 obj<> endobj 1894 0 obj<> endobj 1895 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1896 0 obj<>stream +[qA ){f&-']gZqO9 7kS* +V;o[43t춮LQi)ijb>G9υCH! u)N4Xh +Qh&2ղ[10܏,˲b[>R!GL\LѴ!|Ny> Xr@U6lMm8aO;cI +v8=S{i&2Lҙ*opdd0:`L=푒?}f q/%s(P36-O< +_!ӱ u;Yp88+t2@xYEu@5C\;lmvnLqhC\E^f +jJej +ryq֩q:r3:`Y$ +endstream endobj 1897 0 obj<> endobj 1898 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1899 0 obj<>stream +ډ\|d>D4r(#RhqcATL92 l7#q"sSAQ3d0]M.}Î"f}_[M5HbEY+J ~9cL!d-m #M +3pwّ-Зo|UR۹yfYz9h< hӭ c[W]0Oܭqc0" '~E 'AlUrN.@-XrA CW6K""9-#f}\'b X9egL|el"qP6OU2Ca(s.=\V;biD?fkl¢^Y,ѽ1d#n(YH: +j<HtjK7ǽo$>:LG^rsJr>$ik۶p#14mqD}8'.1D&.|n,7blĬK l)*jvUѸ̌|+PUXGTrT*R>+̅{CµƔ._.]s{i˫CGF 8$҉]Pa>(-Uf-4> endobj 1901 0 obj<> endobj 1902 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1903 0 obj<>stream +iC\' ꝫ;dغ2cuT;Ԇ󬴁2(w>,IBO=(. +P#۸kEtW21+J@CvܦYǫkfTqH={6fC8E)_;ЄG̤26 yίqfC.|Vbg ?YzC3,$tȞ^ҳ*KdzG";CcؐvG)jn} +]5 :ɘm6?9KK,ϝ;q.v;uJt <@E+хWY: +rS۶ orbtj,Q 6rxUwf!QXmAkېb1*[WHE2g?\NͫL_Asu^˰EiLqx 2Ʋ/k^i .&gDBgT i{^:')AlK )Nf10eZ` hǧ?Ǎbܜ8^T,=$Gnn,9[8',U$C*8r0 ԟ|TL/2c~ck[k A2]9QVoZ}đ +%X\.taec-v\=iRmJwF}5+VȖD-JF%\#%au2ue@btZ,٬}(}GXbB'ʧQz1JLY5ߞ IWŲtlc׺ezЖz)Ta=9z +l+ WG=[ht9-~ڬ;Bl0ͫ~ R E'DzV\mU0B(B#vX6Ͻ'y6 3h4}2m'~(+K S> endobj 1905 0 obj<> endobj 1906 0 obj<> endobj 1907 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1908 0 obj<>stream +r߉ ߯+Cvݽhyt@?IENc'rXhbTڊw >hvn +#ֻ/6)A6$ Me#' $pwx:|Ϧ-dj5B ;̓;4&?/('x1}]>PjWTzo(bO~tIGp-c#io|*ܹAꞄXi/Pb7llOxOɬcω"G `X Idl]ⵂiK|þ8cB(%)7ҭLEUA. Fʼ:k}2K˔Ck +1^)(MMyp~쩵{!YZq4P T(V +z-E2ۢ8N5iȵY,:/`f7eX?s6L%O`g/c4[\'c:>}0eƂLϤB D)@qL5 "ǍmJ2IBLjo;ɏ1R{#<}^x^KhK4Z B0{T?Qevw')}. Ya'KWخǙ[c%Cю +3a-B|ak9b^]AX`D#M'\sd)كdV|Ca_s- zLw~)N$'Ɱ}:ۥ=0@v-w7DAc~ 31Jm1~+2@HEux/j.UrXn3;Tv/袵'f"nZ6F&d0LV?Sϙk|oldr1((4p-B(i JK6VӠl>;<ۨ9C9 +endstream endobj 1909 0 obj<> endobj 1910 0 obj<> endobj 1911 0 obj<> endobj 1912 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1913 0 obj<>stream +V}6Ij!A ǯV8ތFWa `Nj`Pu.{=#.‚%[\*6/hX<!fB#{HXXufN#SLF}:`A¯Ve qNֆG4~ը[f܀x[4 +xٿ%l uUʄ:~Cms(%)=PDžxFF1DpWoI!nQ4s[1.oyM1)?.JF^_PŴPfUBc3n7.J+!ȼ䀁\aч(.8F$OLt de(}n=VGx TU$, 7nC2㜼?G9:g\^5?r x`y::˭W#8X +!gm\=]ǁ lޮG8@XP0ʪSYm)wOkRCd$KO ]ڤ&߾ ␻f Pבhai^@BXEHL{՜n$Kߝy9}tnO]O2BK]}l)IΛUHHe"Y <:xbM1e7 P_,6 +]kqza=&>sb#^مcXSh.g-+7T}̂#@س,JO;E97 ~d!7맮))+c%lL@"\]qx;~YÍқ SJSȘU5& Kd11 0Y#x[ٜo mR~5 fЎbσ9~q"cWaN58vqO +endstream endobj 1914 0 obj<> endobj 1915 0 obj<> endobj 1916 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1917 0 obj<>stream +Nyc8̡x~e!*3J3;:!P=z9S).e.]E\kƦ +tiКlGi@1ṞRF&:'ɼ @X\ڋΪv@Q\NҡVf2P< Xb5OڊԦI%_y`=~rwn@[lwFإF#1 į"k #ɓf+LT5IұGIl)tINBJlaƣJ1az0YNM@y'צ +AxÔqلiX+ySl.I~K0Ƒ6%cu2Hn&?=A t݄`<>ͤ+x#Ny(HHNAIpRwy9kѺΥXe~+oJ1qX7 +096eݣ MM(Zbb"/jݱ߀-GJ@8;~8[Kc]>J[鱍Xӕf\g.jC7X}Q0? #uZ{Jc* a,^VPWc +/DËOwM ݵP7h)v^&bt-͋#꽍 +v4] !Gd>:,R< B|ϞF,zfXjT=t1VUhr.@Y`AskbPbwfufk0ş +endstream endobj 1918 0 obj<> endobj 1919 0 obj<> endobj 1920 0 obj<> endobj 1921 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1922 0 obj<>stream +vXS?Y(BH3sߗ|l3f +HpMw+Rh!]f.)HF(^pVsVsuё)M;QjFĤJ9uH1w>DL8gY=f+a;K]_v ֐z`ڻ<5.rqF9V JKҔI俢T '@eĩH!\Pb`d @w_^ynUdy ˏ0EK f2ǿ44vȈ~͈ +!?-$z +2rT5xr{ s쾳Q J  9>2_UHʶ&҉.Lw#sЇT@m]_+(CG.bU(:杖(ˉh^ejDB٤R&3;F."6(50fz^DЋBЀ]fȩ\tFҭ=0A(9wUo^۱U[oF_wZʄդ =$$pc\ +HyH]N +auP3/X;)_M]:BsiCrM7uxUAZ|qpe/pL)O)䮤T6ُθld 12 ,zZ qC&q>>,{*'/A +endstream endobj 1923 0 obj<> endobj 1924 0 obj<> endobj 1925 0 obj<> endobj 1926 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1927 0 obj<>stream +4PU6N_|̱jN_5 ?MoaS0#‚OvR71d^rS +ٛg{s2B*$0ɽ#%jB`ٮgfwl^5=>:LT~vf+2CIQo|O`@r:GF5#D4'+p cI3SŖa5|~ 1D` b?r߲C{L}bX'ajS&=!&? +Uat,hj=$<bbc$%k{ * iT6eVmӋmaeC +bAŜ_j׊ EAYXJؐΫƅ8MnREb`oLlgI7P>F6ǼW]8JrA\~Dg=)y5'])õIvV|>HP0ʒ.ڤ9[lD!O +G9%9 -45 %F5$nn:SVo'ԃJqx=yoSt4.v(9I%8Ɩ,P=>)EjH1ZNYWI&f-"7iݨB7"ZZ _98GՌ!q;Jfv~ߗ9!m؆Z7xI.EӀ/n$t~ & {yɲц DM ?|}-eŢLlqx"ZC'r +endstream endobj 1928 0 obj<> endobj 1929 0 obj<> endobj 1930 0 obj<> endobj 1931 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1932 0 obj<>stream +g\Ę*k0Wc+KoϞJ8δq[<|ELKxJk~N[AE|u\4!-2-́ x%a)NK_L7ms7*̀XݑweTG0B. ++*]_ڍ: >ӌrH$>^+0Z>0@/c|0_-4X%7pq7+M?;64(@~x`Ís.M"#Υ]Μ1TO y@`WIPc5Okͺߙ\D\?]qk]ۿkٶnh~P?8]Uc=`5J9267C0 W (fSHFR6j4t!,b!ʷr=ZE݈}a_ tDU.pc8!A]mkVA +c߲4x9RktVnwgobCOHL8<^zߠݧ<{IBmٟ8|kLsI4̺}/qm|Z,=$l1 7M&Y&>̾2kq@ǼD5A> +Xb*eENNK;3p"7Uke378_&tk\l+y%Q0jH˴hF=7evFȻ֮xt^_LѨ`N5xkh^XC$G&w>\Tb[`ys~K@K ĶC c2X$-Sw*ނ!KMFy /l~H5"8Z5H&m1jeg^{ +endstream endobj 1933 0 obj<> endobj 1934 0 obj<> endobj 1935 0 obj<> endobj 1936 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1937 0 obj<>stream +:3yt#UxE ]07T^s{|tRT +/H샧Le +Y[qP;=߰?3֗R\:KM,Öe=X+ؚmZ4Q:C2l{N +m?nALnĕm딵-} nX7rJ5:Jyu0anı }yen\֏“DhR7^8J+-^B̜^z ŀub꓊WЍ?N/ၱʑ)FQ20ZKI qA%Qa_zr2RM +%%١ϛL ++Z͘t($ׇ+4?Jf!`{7x-Xo L/C }$+)K"%,ALi6hdS*J!bp|P[DŽRr4jAmu/] 07; 8Fc@ $kK{)~vӚCJ2;a=H[}^鍪 +=8?(-Ke$QI`H@I')<|#z: q2T%E)┱?<'X@^")v֏RU?QS Rp($NჳKe>G-V? Zfu-Yj_HѨR +=eMʅ*vo}U(IQ-z#B6-a8s3!΀BԘ1ei8 + [#! 84s 2@ՏCLo/+T񚛑&-j$#.Tq*I:Ի&u +: "7_?<Fp cߐL&|+EUp +t5ljvvd{Qmzb9yv'*|i@`'#XPnkݑl:sC +(] ?]1Kn*𕘎h} +endstream endobj 1938 0 obj<> endobj 1939 0 obj<> endobj 1940 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1941 0 obj<>stream +%VPoyăfƛxUPӯfI%aS(ppg :\U6[{)_{pӬ``@%Ԃ rK{F<~cyekxM: XM.[ZXR$e.}GR*PMXz _gC-J]ޟ&#@x??BgKf\nchkhm}D(0k4FR j!.'1!eT;ISG +0TRL:7_ G3,Iz@wz\99S mm7Z uAڋ@ϼD%] OէP(2{aK ӎd>ja5V}4E9&,f${{^ D͜ĆxzؘikiEܸ DZ@xLSxV 1Em}0fVE;#@d<뽮יx>ۇot6Zp]6:-+ :L +uW2cN9tꕲ:~ Du~ut[Yw +`aKSȀS,G440ەɵc]FX6SCℒgiғ!7n{oI=lqM- K$MXQIt4 +TԎ9 -cdr|OvT )t~Ӱ-U +endstream endobj 1942 0 obj<> endobj 1943 0 obj<> endobj 1944 0 obj<> endobj 1945 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1946 0 obj<>stream +Jƙ KHћ1p̈́s'U= F(_t1LlXMGp)xʅDEx̰OCB0^>~qȎ4k>TD+/:b~Ԡ2hbeG3rcbbYs'[ Bc? A#R|E$=K{2@{tu5 ٭{$C(:D)-(4'͌04nn!Bh6H.zh@KbE(IRt_6$zG$I #*@vs{Y%g'8bXD? +WQzYb#Ph(>fԧ/ZăvsNS} +JZ:VPGS$?%*7&oIONj2_ay֎}&İ޷c$.y6r-*즦F2Z{\ڳE厷|d k1E ۴T$-qP) | c"Y+\mf`'&dmM<PixOS! u5=tIRڬ}<& ~7!EqvIe8̂go%p3ScKSb$I{Tcnn7Qa?2鱤TlƢ}AB' N1 {[)I8qdEovF9\,;=5J+,V?k +Zd/i^Dv|DM>/pϕdc_ IH@2%YHjV +endstream endobj 1947 0 obj<> endobj 1948 0 obj<> endobj 1949 0 obj<> endobj 1950 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1951 0 obj<>stream +UG{s赍%ትQ@s5AEܨY/+-iu^%/O0,@řM`mXܿlX'Y*~ cE‚ +SqKpTA[ҀD䊗:>ɩVĴm=ځpHn YMW6#^PT*PLZ &m0|t4(3"yF?#%Ժ dg=ߞ>/8W + ?Wˇvq5Bc*\M1* 7. ^qZtᓗO͔W(I8$\Ҧ͕Ǻ4;\1o8f>'Cw,fw6ЄDVs_RJSt-'鋿I!?@;Ya2VFȜ _ GͽO"jb,#Nѥ'G)FXŌvEOzHv$spdo;_ert=λJ.< a&GO\,Xs +3Oѿ|0H&5 w0fCr @ᒭ1<*l 9Re6Cզ]Wi7yڥO<6P >We潯12ЌMX9&汹j6| +endstream endobj 1952 0 obj<> endobj 1953 0 obj<> endobj 1954 0 obj<> endobj 1955 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1956 0 obj<>stream + [תS$=1܈\&>qNʯ*xbb 18] ]=^=3JK_q>O.3@fӹD'-F&T_)Kɟ2oX8!Bxr>f.u^sYf07,n8=5 +lmñR5&$S9o +}l ƽ>xqN«*s!O2{ԅ%oHC &'qYv~ hbਧ +9׆iEOO 僝&&ļa +.PrD.ʈС~k(xfLRwiJ%ٜv= [lu;pzWq_So8KJL2/?CYĈV墴pn}e(;0oq"hcznU1^R2sd!3}Og?S @AiEO?H+$&Y?ƍt0]@{v|Q(A 6U"-Z/gXyZlD- <'jf ,W~!*M: ;Be'߅R=^#>:9xFߟ7Q ~ab:>И -ݸ8<;~q+kNvK!1w͊\\0|߮QDfNKV1L (NఆȽr**lAvtDE7h•5-嗄 3]8n#( g H.CYLt`Oa3=7FrB,maD示ʢpH1n:!+pW $p=IA?H<Jk|wolzL}i*#Nw}|=jl&J36QZ +endstream endobj 1957 0 obj<> endobj 1958 0 obj<> endobj 1959 0 obj<> endobj 1960 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1961 0 obj<>stream +1|Bh aƈ( &aӰ1V>3R_o\@io>aP\bn2pE a/>H3|'?i3,BORԆ+}1Z^W^#nOj uWs : v$]]XZ_Z@[+BN^WFyos +rE&#?FbH5k9=w(O==szWsOYy*{aK3BXn}˙齞e5H: pѦ!/nAx`ンK?=ZMJuz]V2z%eE%Z?c9_9; 9,::^j|Ro:VJ3r>!XF#%cAn$3XvZR\gɭvq˼O 8^xϤ+o[<3?\]]91@O|l0 4iP2/0*.mĢl$bum X1Ơ=G&o ]`7KWu}K"{ \bX|]juH~ + +=FBY:^MHx?K"tϛ9?rcS dIU|7jJbɨ܊)MyJ ]t'?xKyQ~-vw|3߶\$;͓o6 r#L[:$:t 070!N +Eyv + +endstream endobj 1962 0 obj<> endobj 1963 0 obj<> endobj 1964 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1965 0 obj<>stream +Ei^ sФ*at gFel͎Ej>R~F4|m +:˕eXE9@L2y+Mr+ľ̈́i0sI#xlzm\xPJon3nCt"V&Fנ HGA +epdѽ&%oL\!-}>#﹕Lkz_->s)~z$A*!\o~=v 28:FhV8O}ݔB=_Ѭ'Y{䪅k}\&])L{T$CPIFcSVoSc\ +kcR L%{CNxb'S4/۬y鼅@麲R0^`}jПs%\=>I͡$ VQO2NFfȠ^ld^ΆAqtX׆Q6:T[EWx)ImoV8ZX7\tOnb.إTQ`Pa&E0WUӒb#'OQt 3@ͭ/e  /c<`@,HC<b.pa懺`F zIItXYAcMޚ^ٮU̢hFqmgKj +endstream endobj 1966 0 obj<> endobj 1967 0 obj<> endobj 1968 0 obj<> endobj 1969 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1970 0 obj<>stream +kc{xy MCd'Ci# e:la{L~a3KmED:@ ʹ;Ҥ(aw<0x::MiR&IS4ug^hD@eeT8F +ʳ4@9Q\UVρ1?L%͗֨i%:벦 y?YQppeAwn!w8RB@jm6^pmX,#taNd:fUb 0O?yar)j{@'DDZT:h7J)c3GH_MXi(- ԆpU\_D\^p \"T*Jg\utxVQ,޷H)BT,GT_: <@ѷųA^l_CڽlG]bvx \Ҽ%t;J Gk}%$tҸ懣eKYZ9&sϻYNHkgMiHz>}pg'Z;5ur vpQ{c|"hxh]$8C{fׇ9zY,H4p :znR5O%L2*#g,w <)7h"\ MyAp0(o$lh%Xa!*l+ Mvf!f38M܈cyJ5z_Y{\dM-!?lBkGluw܁;ۦaiw"%'2 VZVٯVq^65ݛ|.GI}YY?3to9HvY/ǒ^{ *D9db\'W׊yK% 4g) h|6Y1xn5tVCr3Ѯ +k+3dw|n7j#MyZOWU[ئM?K7e~@4[^_,$E$9Eb46'W'B$5ug+IVDh@X9 +u8^ :w3:NƙsW\9ƹNQq2Sq gg Hm?K1 X ',-X^)xcM'"φ}n@* i/|V ,6+ γ!ԺoH3heJ鎄!6~_t%֞p "m܊ +=-' +endstream endobj 1971 0 obj<> endobj 1972 0 obj<> endobj 1973 0 obj<> endobj 1974 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1975 0 obj<>stream +&gݾYFr-ÂE@,Ӈ1~]s~N7Jwb /'[1b:t+_Vp +m~q^,pnxqP4:>g-iy*/haCq+DJM &CQ:")̦>!$yug2Qh־3mVp[mPPC5 poRPx.-4E8H/֔2|Y-*}2U쇨Xw,6ŌGZ2uG*آ;YyW'is䶵Er#06ǰ{YNYj0Pww2I5/e|uөj53mI+Fl"O6\.꠶h\n9zx9I ˵j+>23bRwc6fY9Jzl֨.UtTs!z#?S&:BE 9v~p_.(NY&)'o2Ca*/]ߋ2vXT_+Uwu<58NId9O +͠;0UYfx?`氞Z*q [N$$8$IQ.:VO5sޢg~aap*2W H2QU&rG'k v:496ri% 64gB*\~!=v^=oIslꈼI3dR-v&wA5m2~ +`}ye^˙<bb]ʼnRy~hN/l@)">c}^Eq.do;p1&>"ECe8@%b EmSUxI5S Co{*޽_txگ&Hb.r_jI$~= ; +"갳weRJ٘9AV E_Ht|.`Ѫq 74'!HLIYd11 >v!)3iYS7 +endstream endobj 1976 0 obj<> endobj 1977 0 obj<> endobj 1978 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1979 0 obj<>stream +cm5€ٕ͹o]JIX`ٵ†pc{$R, MBQ8즉U6^}_vÎ~[*AVVNi+`SwRVSȗ;<cѥ/pc_SwQatMezc2Yj./I]̊5avZC@rv< C,W_G;Xgw ŋ! "뻰-LKpoItUTߜo%ᎽBNIj"- 9p.$$T{PVrp& `8r^е̒K'F.uB +-ϩ|QLl<,'{86č?WM/VbJrXX笪^O[2F9E 4|w龽5ˇ杠Ɖω7֯\FΖz日P̻q+|䷦#95wxqh"71\=2}}V%֝y0kR5EcSz򥋚' =6#ު~؛0謭p|]87;^"F6tMϡ=c"A]-gIrS)ŏeq\ݫ Cry@a| X3vuF[C/ɜTmZ9yD˲DQ;]6^V)o+%YjZisc~/טv` +N&S]8'5]HMb6 Dz嚓3S +endstream endobj 1980 0 obj<> endobj 1981 0 obj<> endobj 1982 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1983 0 obj<>stream +@jCI6I]FSϟᐭZrzqv]HBJy3jXT_ +< Q^]MmC7{]WrDb@r}y)EF0٠?ӕ g޳58ũCdN(e-ȝ͜^@ڑא:ҠV= }(s72nGOS̙{s5iTG osQl-Mߡ4p BX+9l$lM(sQZ,`'3A}!d-a@ˡ7eiUژړFb%!oqs׼Am/> endobj 1985 0 obj<> endobj 1986 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1987 0 obj<>stream + 3 +[yׂ^ +m3WЄySMZQ*PoYt -wХTnΏC_{#c(0 gxZ)OǾ0g~IF4>1k<;G^gW/#YB6ϱA}0p9Pw8lZY(L1|K>]v#,D2% W)1$fݝpkz\g|l4`d~҇hyYX^2؏L.3B (Ka\Ppa]a):G>%%N)Ò6gU[uZҦ ?T}?'9G|[87l}CFQMJf.:c;iQϋ뽖;L."Y)ڮf0jE:͋0ۛIeT)`C +[sg WqYMǠ B7Wށ>>Hg`s#+D|8U"uSՍ4㑕ޝgv5RqJH.rkU +u8Cy;&d&u?p :2}x s{i)>T=W]n~Ƌ]}Ki-@y= 6F\ȗc(sfeyX1uefv9;˂!z߽'RZR@8uη~ > endobj 1989 0 obj<> endobj 1990 0 obj<> endobj 1991 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1992 0 obj<>stream +3Ѱ͒||hù+mM~2$;g$ʼnb#^:uLh*eG0:gB$ (4X .UvH&j2wiqSN 8|`wT`Ovk6oiq$ޗ= 61-4n&,3S}q +@=?Ȍb9OMmy=TGOmn3TFe0nL~ATQÐ&;dRjOO">BSS9EpYLF"0!XPm ,G(xG珼݂b%D;1~ס1`OWBb݇cm+c}l2nvTDQ7 (rq g]|XW5I Vf-F—1_b:X(: y>@im Ze) ,%B -:9i&ucLwb> +zʳ(bҝ?Lu%D^ՄbgXfͩhft*%9Fڟ, /imLj_Xx;*̜4i|ΐ%lBr;2't +زLqPm6\T!VQY^ύ?M 6[pۢvH,E$:i̷/̓XOV96CȞ &fjXmv_c\~o +ng>x=zKǣw"cjp9A6Zy"#03'Q"F.6M .pUn\l\d5)p,>E^}5d!VXB~ĺy:&RsH J>6N>z`3cI;~k9)=s]s'溹x;u9N&hZ@\y3F:K؝=Oև kF,?"B9>u@Ӎ𤇣Nk5} MqYlE:WpJHgQSھb<\d +endstream endobj 1993 0 obj<> endobj 1994 0 obj<> endobj 1995 0 obj<> endobj 1996 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 1997 0 obj<>stream +Xc9|pKwgAk$:a2)1S|}m,3$Xp6{&*\?@nFϳDpq"Fպ{<|rWonldݬfG2ۿ(GFk. s#xDL}6ӂJiQ_j2[G&>V9Z wIȩU8.\8UV]{@*b;rTSstd(j@ͩFTl񢴽pa.֦7w%19B9[V tsfi)%M. N ]k FN˂inzH>*5&b#踛߮X<;kr"kxo1SLU'f8RMSQ}1,}]q7 ?ObR(#,{dt獬CLsH.1킄> endobj 1999 0 obj<> endobj 2000 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2001 0 obj<>stream +aa3 !/uZnvb.B" )Kt1x\}g}d?V}m8WϺĿ\9UW$cSz%W)_P%rq\NcUzJ/:(Z4ZF$F;KpCzo$&I|_?p3K&ƠZgP\i> endobj 2003 0 obj<> endobj 2004 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2005 0 obj<>stream +Z"DU۷z0㭇2PSit7("hjɢO1s[JC<%MPF@ u=8Q id=12=0Y'juql5r%> $^*U AX;@ؕXߴp d糖;KQX1Z8[[bڙ-B~c#ȶEvW_xhxnJ=h{_mAQPlxwN083x2џvFw NOĒ Lq!*׀;"Wӫ` $~8LGkٻ8s'+uUN s,Tnm3kB(CnJ_a7ƅ@̪|5V+ :=# ˒ti_bu>K?ZS|5FxU^zUy a=yE:XϻZ z&]_|,x5ptS +endstream endobj 2006 0 obj<> endobj 2007 0 obj<> endobj 2008 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2009 0 obj<>stream ++EəuRb*(8uh8űpREG+}n'{!bGFM4\QF, +ooPGA17{կF3&O!lVdf @ڸبt1e6 ?^'TGuV4?z1Mrxu)K }с}I ǻQu x rBN*^u5J{Y'mIH!ߴ TsLM{e|,ke_!zٚ[zGzD >eϖX +m:Q)ExPn?7"pR7t9gtRe9dU/0"4QN496쑮t$ $SDB5¥EG$q)Dl@]#u=~>38YSbWa7X)]tz'Jn.!An:ҌbJhXIBYH۴Dג`1d. :>գ_.jC܃򧇔W> endobj 2011 0 obj<> endobj 2012 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2013 0 obj<>stream +wPTu1NTcZ>xNͲ(sk(9r!HeUڛ47&3"3 lh׳EN#%[6Wk|%:GL'#X33 &eU"%n?ROAzS#FZ}UG턽{Q\PU-V9Ȗ[ +^גm+r_˅UH_l{q:dXE2dۨA0m+'"?]u$ƍ}#hFXp}D&+;CzK|ԧ_k9wͧr(BY8: E4=0,(#^A&7B>kڎGc^5MGX,c/j氧$m:wKV5ŶrbTwNTs Pqk _"`áO1uI7 I#p]g5v)w]nvM(<>A~DJM+wP0j],um H̃=d.}3-a3;+=cP4!*;{pes6#=ɩf1z>Q?.`ױNcW a?S=B_g!ֈ݋޲ - 8sť>ίR~ +endstream endobj 2014 0 obj<> endobj 2015 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2016 0 obj<>stream +f[pX96<5!@>ҏ2^󩉨ppD24d%{!zsU{@(7*AiJHoF&CB9YOeSYo%eI:YJ"YN Iy &@JO~*J2Z4ȭeG LWWg\l/z;xdF+]I\"zv =JQYcς4 70\k}p34?`f8yB*h&4W5%c;U=fiFÁ{; n3: (FC(w\ÔK57^`̄v$.e5[#`O ZeΔP,*5IN"elW#,h(da/o{I,W"Xy։="g<5uLn 8ե?ҡZ`g嫖2GA?e[lT0hxneÚ%^Mz5aukZ9.N6LEgd-ߌ:to(L RٽsH~^5k.Ro*q-F +!Ytj|\I%LMǟavFY`}HM3TL2&ϪV-?c&.H|YaF*c4a*FK$AP J.ZǽP8HaHV='1y08hHbf;_ ;LXc7Z~UN=`hfhFf阅ۏ}SM 8?J㭏G^.mڥ`jz=}q`F'6j2_O*GdaDZP),BXD`A.r_+ .]縳'M\9_S1Kͧ/pjp8^ ʩ}XR,Sw> endobj 2018 0 obj<> endobj 2019 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2020 0 obj<>stream +$ct_tJg뮦4+Y9B=Nֹ4\h5zWFR+NE;LRGUK=HϊPqن}@•!Z2|BבiA@z";2լb"ϫej[d)AN֑ Dg@M fcɘCϓ͓03 d)\d඗1u}6hyƁvˏW hx$NPޱ*uZж AQ +e3 +nKjY0D+8{GHLhZ l>NC>tߘjH} ?Ӫ߈ +ժb r`穂 iRkX!dˑ'_Mu|f[ +gPz5hߣT9E*ܭIekCjԾZ(Q6-i9 \0۞ݘ4#qI>~|EO0$^EHB\é(SjC \Uob;:wˠ'MxGYܨ;FW4*,<0g$(rxZbrt5R^ڲ"OӰ,]ڦڿV#¢c$/ L)4lgI@.=z9M7J\OB\H @BUASXV@{+>K1G +'6;,`=`yN1."I- Zs&*=(T!tɳr ct, ꔀ + x%tNhߨ9 +endstream endobj 2021 0 obj<> endobj 2022 0 obj<> endobj 2023 0 obj<> endobj 2024 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2025 0 obj<>stream +̉2q'}ek[yz)P +hkeqqf,>znl#uT4gQ Rm5$]g.kO*EE ;Z<ݓOjLn×iv\fAVaŦzRdi|"$07̏++γ'ٷ_hh]N-.3=4[ tYoy5VMwT- +[S…C˾uP[C#2,\s<Ÿ¡O- õZI[RW/ m +BDy`T67M%|0 ]n"'Aj%_> Mb L0(BfYxO)L4XQŶZ:U$'pi! 0qΟY2 2By>[H0=l/F'ʔBR&-e-|HWўg HBIϯ*'9Һ}Q]cKh;E6Ep)M'.ppxR|0#x \=WAYIjJ˶NH˫I]k +zoL/ u0!d@3l!BnAj!|ɀ߁UK[M!tu,邒{ۣ_8pETt  ||ԍEF1W)o&ө6h('B/H[{΋wŘlf]j3> endobj 2027 0 obj<> endobj 2028 0 obj<> endobj 2029 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2030 0 obj<>stream +ntuc̝rݮɰj_2ɩ _ٟWQ;p~-i͝Lu2X҄RrX::Z΃co{pEyEU XXU:bEYS;Ɵ\0Y _:dF\?bl?9(eUkR=I^cRlN`Qyn؄ёMEl]J +*%aRMQߟO:˄ iJPjM[&6{VWu*Xa+""}IVD؈d$xn?9!ǟ֝ϼ5z-a׻nfV6DiV-AG݆Wk EzP  ]–${]M%,O;|XxW݁8 +#Ll=͗"\^`ڕq)Zua_'KoIO*Ky]o _&F(R@O+|C[1SNdA/*izCHYek + yZ7Uk^j}XwUn:ӥ}Q-?S2MTK딂.l$l'ϴkVu Ϭө0, e;G~]؞e;N:^H^Y;^ͧHc~̿܃@wͿ}o 0` +endstream endobj 2031 0 obj<> endobj 2032 0 obj<> endobj 2033 0 obj<> endobj 2034 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2035 0 obj<>stream + OM<)}*>x\qInMLofQCIC LP co5;F$MbMk 50fT6 6VMnà[ZR qCw* d75;3٠xh]aܟ$eDb@ݹpTf[:ףc&Z&;8u)˭/|oO) G6Vt;ij?)AnƨDM08ώĒ[2_ -O{k# $2Ĉp +5iG*ΖEЇܾ^66߻v KDGO3dO 0ግ@n#|fly \F fJK"c'(?* Z'q*4c"`B_J{H:u-!D_,cG|:W^R; e|V`[+k,^| ™_s5 +_ɞz '3puΚR[kIlF. +|ԈiA--%7`7ٵw"IT3;[ D%_۽>2+17ff/ +tSٝD}V_D \^hiio rf,BV~-iqX2a\霍4tOQ_8W~'M{E8t9VdHsHܶJy")f}9?rK.{ElR mCqn<nN8ٳG7+6ycjg.LŠ _po~7u_bV4 +A ΤAWr6>9@iAj8' HB_B{* r\].IȚ+P)[b*i]k SAA 9 zshH"(0\%a+ M~d1蠢%.DzR,2Gb[e%сXcśh5~eP> endobj 2037 0 obj<> endobj 2038 0 obj<> endobj 2039 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2040 0 obj<>stream +aѼlb:\b)eXn{3 }䳴;FR9 e!DX ?)ůgޯ1d>P\.@א08e $eb1bx4Fbk@Ecz#̺to[`ᚘ3S,7]wY>ڹ(UG}M;:>pO즎k)ڶ,;L[~(.1_Hwc"u6"qHO"9"Y6/_aH|X9qϵs+l^*0_Y>5*H^aVF]]AUjgIQ4 .3B&aY^%իK5A;#O.A7!KX2`Uԓz˪)[`6LS=:D+SO ݤ1G17?l&bHg %w^W6+Q#LydS> endobj 2042 0 obj<> endobj 2043 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2044 0 obj<>stream +m.mUd@nF(v f L7iePG>W `gуƓ-93 #0!o#"viCp8 +BPʍ+,R&G/XsTacZ1T,{5Ziق(-,zކ]2kA,*tr[ !x$ng?}3"g])m'-9,Tȱ>Љ# +~`m y"Z:?pFFLY{渟i5NC@"ȿ`6F}D3,~8"gcCk*^}X܌k5k?jʏmLf +'"I%VNDUlP+'ڥW +qakb1KLbǍoQQ>/)5e^ך:)9|&cr +\Ho7ALCџ}F#\&]9}#3IEWQ1V zlh~mފd ̎L$o$发q( eZA3U+P͋wa_mZfzܐ/=011s,(X|OQk& +RͶz[W-/~jW%ݤUBP_ +̞c\3T鿎4y#wlO Lj4-_F)PȖ:VO,+Agו /K׈1 +:΅sA(a}stZSgo 34U$X4يm>z,­Ҡ'?lP8%}zdꤵcUTG˨@'[K +5PlXzPPtQ$=z9_2 +endstream endobj 2045 0 obj<> endobj 2046 0 obj<> endobj 2047 0 obj<> endobj 2048 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2049 0 obj<>stream +睍8&H +rX=4&o|hiLpm,(?2x +NG峗k-~Sy#E[h _@oHj"֘in9EOC,ЋD|ܸ6=q.PH>Q^ +'L]߮?ļ.^Iͫ0;! Ww]:NO;o!p+y`$j*4Xh2=Ocu6E='L-q;8>X1_CL`_%H[b "TDY_E-,ܟ: c T$vcï +FnL !oT.U98qYt|Yw\ 0LC_Y5xIUgcG6$}-yG RZ?iZa{>z׈SacH9,T +6U ,+u4\FuMb hJ*!]n 1ٵIIΝUNP}ch:ègFθp6Sѕ?-DTKfzO +H`I I3z=f,=FbKZB=^=c}oeB* +!B֏Gac);:'l-9ǝ(htK 3}ߦe O:z~jC>{GCܡ+q.VwțחaC8"dV'O__ +4pVȑ?o&im')PV.x>P#Ez76_f6a&jH|'()( 4¦߱y, JFSݳ lN`{._[dbq* +o(LjI"R,4 #{5KF{,I`%_(I ≴&D%f2u'k*\~Jz5DQ)?.г_y9\OFJ[CND_Kda: c(5dAUL (Fؚ6{IK.NjShhg,xmpt&&7^˒D)S-MX-ewN*bNC> endobj 2051 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2052 0 obj<>stream +<23]4ɗ`,bc$+#ܡmD<@= +|1ɬRe NU[r{*9d\= ATQ"thIs.cS6ٗYo>)*B1__K6#tY}o8e ]},p};Xt|>ϭo}\jE; 7R=Ep^2( +L#]t(-#h=DiQ31 XXOח;ؼ> endobj 2054 0 obj<> endobj 2055 0 obj<> endobj 2056 0 obj<> endobj 2057 0 obj<> endobj 2058 0 obj<> endobj 2059 0 obj<> endobj 2060 0 obj<> endobj 2061 0 obj<> endobj 2062 0 obj<> endobj 2063 0 obj<> endobj 2064 0 obj<> endobj 2065 0 obj<> endobj 2066 0 obj<> endobj 2067 0 obj<> endobj 2068 0 obj<> endobj 2069 0 obj<> endobj 2070 0 obj<> endobj 2071 0 obj<> endobj 2072 0 obj<> endobj 2073 0 obj<> endobj 2074 0 obj<> endobj 2075 0 obj<> endobj 2076 0 obj<> endobj 2077 0 obj<> endobj 2078 0 obj<> endobj 2079 0 obj<> endobj 2080 0 obj<> endobj 2081 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2082 0 obj<>stream +Q#)z*9pd񚚓oe&?1X9'4KSUEk{8ig=1 +|KzHF뗷ǰHJRl%WC=օָ9@O-KCvQs"E.#\5?Se?Պ+f'4J=ԁkvr۬Z:g&lˤb?~ PJX[N?F\*⦔6PN]]x͋|:ͧo-d)@&<9IԽ>n# wD +xtt1ƹBjt(.撳d?Ijo7eGB*. t OչR +<"D7%=^Kf"q%־EŧK_6+$ tWM26e.~JSӰcxXZ?>Fҟ[!4Cl_cQ.^πr BI, ̖RY7*"[)&cajd6'~M u"ZjsJdpöB#yk5J +rW:ҴM9H>63 k? .[phdY Jnܒ7% d;U _qq(o} Y5Hf_lϑ(*lN>oDy5Ht: k$gr06{u^y-k@ZWx/Hq7+aub]Ds|!M#,GjegX)<9Psʃ^kZGV±UAB/67oOچ!/ f~&ǮT.cֵ/2 h?ӓij=oެ 1C.Žsې.2\A[3R#|iePNDӫ|]#6H|HhčYV~29NJ'Qdvy*Id@!(n xVG('elY.1-w8pU_Km5廾z^>#p]@}nՓY+b`$%5]ijh>%6&rAVq-#V1yM؄U~#`@4&f6b2@l/us{DT幘J}}z&Hy5g>9u' P +,(5`q x,$tѴ0+`i:œZf +$Rk Slԟ#۪J66 I/H)nO7wfQBi *E{C>$c}w, >ibĺu䣞YI2 +:VEh AȁH2J:`nfW^]3QwS\<1dcS%I9>pw *QPP芥pAoso3bosW(7c"9}CI9ıۓقM/R. *nIM"oVS1Ѱ2RUeCx#G.A,@]VC^Ӑ*0EO|O2rDX0b ~:(4'2?,'zrC7kZ/FJx=50,6#FŇ*$4˗Ab r5bV͔rgRLcݰrMQlci΄7cG3ǵ/ Ppvn(bezd'"GلFY2Sa{tP%S,PC{^8v'I _v1&Wd' 5xF|$=$M7ʨ 03Y%L,͙{P4CߺKͮl@ VqBd(TXw4L>,Z/'"*쯟Z?Ikg_#H,^@mTlt>`?AOKzwlr8.Hx8ǚV?>!UCFN_^#JxQ2>riqE,$uhQ*Զ>!TGF6HE2yJ𖨚#itLpzC &8|6,rYrTӵ'%I/((g;ŏ9#W9V9R _1?ԋG#}r!dPv5CI~ 91o^k#mC\s@6OnYji2AGl<&}CE")eɖpW w6* +P V +z6čHV Q! Re)2i%2|mb~ΈwL;K'oo0lN!e5HnLkvA4]K;_M5>t}McF* M|&&Mr$f4[?@'Cf0VZD-W5uQ `屋Mjdf$k"f/V]Ii?Bj8V:s'F0v򎀠bxπ,fK9|a%Vv"-΄?[RZ=pJ6@gWYLq=dCMZwXRNl \PkD!i:GWBl& $~^ +ùʩJzVq/솱$̂h"K#qCO\. +XQM+݃y\wJ"=,C?T{P…υ /E=5&Dp=@Nob1i*GLmd' nV,lΎeʌ{|577t(@bM0$=@Q5(qBPTCR`zЈ#Tz7ZGDjy g.XbiŖ+ϾG޾V:~1^@NcW_0ft> endobj 2084 0 obj<> endobj 2085 0 obj<> endobj 2086 0 obj<> endobj 2087 0 obj<> endobj 2088 0 obj<> endobj 2089 0 obj<> endobj 2090 0 obj<> endobj 2091 0 obj<> endobj 2092 0 obj<> endobj 2093 0 obj<> endobj 2094 0 obj<> endobj 2095 0 obj<> endobj 2096 0 obj<> endobj 2097 0 obj<> endobj 2098 0 obj<> endobj 2099 0 obj<> endobj 2100 0 obj<> endobj 2101 0 obj<> endobj 2102 0 obj<> endobj 2103 0 obj<> endobj 2104 0 obj<> endobj 2105 0 obj<> endobj 2106 0 obj<> endobj 2107 0 obj<> endobj 2108 0 obj<> endobj 2109 0 obj<> endobj 2110 0 obj<> endobj 2111 0 obj<> endobj 2112 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2113 0 obj<>stream + 2!%j6ȉѼʲNOmՑTA|thRj2eY%\foiCJ_Tbx39Ϊ 3LE>^, +YǙ/F|F :iۣ \tО),F/Qp]~ԞROQc Q=0b+fM*ʜ_ +]1~+MJaY@Vj F?]k)7 R30!8r~h˲=Ob_adjm *u HbB 塔C-՞/)Jׁ|Nܩ2?+s^4+gԐ[j=8`](#euA<_\N y"+3CG +\_zk(˜Thytɍfd3<`bz$2Zg9s:ïHy#5yY轨Âs&E/G71c8 -FNdRs[0A3آ`Gm5uZރl ؊?;=uOMBnb,.D ':WED+K1&a6fXd!r/_ 䎶n3!Nvg^[X)tp Jl[{RQs7q/l“pqUD+ri2ڻܜf3b². pa)${@7u޳Eqkfۂ\U{=D(t펯Nw DGamG~hq>7`|s%Ue(?T  9TTu(E>Y>XJ^&kCx*&qZ10 æ4., s1H/0TKaAԶ]m|'&ďbzV^ix%OYH7/JXsY]OwO FUm5>#y}]C2/e~rRs}!u#!gIh\%++{VsTpX!?hT%;_vI/+HhP?Xcy6A6t43ɱ _ +C#S󇺮y<^T/e8eV@=Y;j3M:̩//#о[;DzpRJ?6TF\'HP`.vJIK_7-QgE&y#_<ǀ[]Ѝ15Ʃv+-URU #b1Bv>in.qJh.4Э(NלI؉)GI_eX J/0 h|:X֌EeQق|m + sW åF藄J{F[.u JoPEV؁*?:Amу4|DKvAa5YU]SXliX*E;Ž+6YǕs̄Ѹ'kOI#t|-m&mtPƧG9lw%&w\uP!m,QU7 jb>VPℝ"SJɠ` =Ei m2!i})tWNbN52 +Y1}0t ]ڮ^P ZPa +&rcm A+n$^@3ҝ i $Dz/, ,T+೽qvAfĘf,^I_ Z{>}lgyW +,?2{Lm~sm""eATM Ab:Mbm_ʓX$Ji7[WC'EKE Ɖw&5\.%PNˢSk|89Q8-oHusZz-8FOfr&WSKXO^{x趴hc{Am,ׂ.Q̠jvsF nM7=r0-J*hiPt ;y&/Ey+"Mq2 !L(f]c"aE$xH2<++~.dri_6l*$!RG@?7Cal7H˦J;*c#?}oEC{hV,-J)]lAV<<1Y$k`.<+ָq\I\g.<ܲ-p=}5kP8cM72bTKuM_} {ա+-T6.+ u٭meC$,Sit.Qr7gKj_SS,dm#^0 _U|iX)tb6;dHq1üD螥AgnO +FߤW/r,==7s'nȠ +³?5B֡p +endstream endobj 2114 0 obj<> endobj 2115 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2116 0 obj<>stream +_'rT[X6ΒSڡ/,ݒdggԫ +"2Dlx @[ rZL6[W)Yc*y>L>*@TK?#rMUfBɶ=.j8A4'4+`qS"jWKHWJљA{HA*mvz'41jU /;\ӭ|鹒"F"cA'r?{spj+ywI& ?tI#ɓ(jUx(,1:`eejݮ*H'f?p)*2k1rw^AlF.P)Hf\ +&궛^Ne7C}mZe?W儧"ϔ"8ǃ

mtu;+ئX@DM͔ɥ}"@aU(U>=.AXRyW7Kv"|G l5LgB+q;`Y|`֮el qQNֽu`r`bǁ +endstream endobj 2117 0 obj<> endobj 2118 0 obj<> endobj 2119 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2120 0 obj<>stream +%tKaYTn~ 1E:е8W❻.8Ț3q9ϕ Uߦc?{m('}*N]I;Gg/Hjmx{-7U\1ftO̊)tfXQg$?!e}JHŇi'è; UTbR!FBF@h +:ۘI' RQU\@ 7i1Z+RT4)O2:_g&g><-KUIR]|q+I/˝2  ݹG=W_+^7\ hت2Z 8w-L1oPgpY⠙,FD*kqe+׫wbKb3"z 0I:s `%:Yu+YNPZo⸃8*|%Cstz7%B4{L͍P|7TP+=]VƒZк4CO4[l]H8זLtj =a Q1qy؝aLJzXKu瑸ud5\A4: =5!zK%s <'s`FEc~Ԃũ[; Q4+8ܖ{ME֛{PO +IY< ))`|w{պ-l3w1om;;q:#Dy/>ǹjnNl{"e nspd>MRCd0cYcgR3o +HAMPp ź8ˡovR +i-(T+w.CPX n93jl v=섗u <:$TzYNDo2K1qxX}~;60L`5H. +endstream endobj 2121 0 obj<> endobj 2122 0 obj<> endobj 2123 0 obj<> endobj 2124 0 obj<> endobj 2125 0 obj<> endobj 2126 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2127 0 obj<>stream +lZ{^e\]iД(Mf jυ9:n(Mr@KłE] 9%ԗKbk.^-O>" [y(5N&V^>KDb2ICa <Η"ѺIJb6B*q(w D׍i`vZ7HN{qJN""Ԃ`oC +V=ֲg\8W87T(0P%e"5DU ӧP*@@Nŀ=ulXV??e,u|מ8R<%]^.\*y>h XM V2cm lz~^c:2jD*~j BmrA$Z4sp=7 +y6r\"*@hiؔn 7S'tڋzloaؗ E "bxEk~z9 ס,*hɒ0Wwеh$O_4 =5&4 Qha֏ݧEAW -gsu n~6bw|-% G9AZ$ި4~:XdzT.Q} Ŀ<:9_أ 䔊mi}'ÁA' )܀.6L9xܵDvX|Op +{|l/G}ŷ#9> endobj 2129 0 obj<> endobj 2130 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2131 0 obj<>stream +P|3weA\TIPՉTe]VRWmY% ɡe\:0}mD}(&?#k[y` 2~p׭9&pQV VBH)15Ts,Ed{9k.y>̶oX@WX|;`6) PFQzYnxTRɩD*^\j +=f܈]u.F$f`nϏ N6x;yq.)+ʹ?>`*& %dcL7XwCDv8\sord#R +M& H~ &9V̊.OOq$_A' +CWyxV\!kn Y W:uX ?"fͤ%D>0`DIx=']z'-l&P+]$Pv$ohuNź&ѭd$Esem +m+8hu/styȫGt[r\hk06Ci+&wކf諫wΉ+KWv#]4)v^qnU@<0i Jy\Tu? M0|hiϣ򝋺Z)j-;3AwƝ6i6um)pX<0ƒ6KkGds]׌@5NCM5ؖI*q@{>:eif҉Y}Q Ay>b dFPXO:WY_-Q'w_4VjvDWL/`܋Rc +w"Uhƀ 7NCϸ%Yh=4H Ej^JTX<Ehޙ^'R+r#Գv> ayo(!vX>c22YY5 +δK)Pjh,$ϕhOS@^'b&{k/,DL>C(Uh\.Mj;Y|d ?_ Z= -K` 9eU ++ZUv!a-ɍeS\ +endstream endobj 2132 0 obj<> endobj 2133 0 obj<> endobj 2134 0 obj<> endobj 2135 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2136 0 obj<>stream +FǛ>MT Cͮ.6M4JYk.KƦ=_飛0DD33)oJv<3vh;RxST  Ӭ^ls( +G~Řjˠ(')UqQzpG3;̛}$WC%yrj @ &,Ys 9g]ENXQ0Q n!aEC)O6n=-]`xBM̶-I)IFPQrW~yv)k@sF +B!9o(X+z@+s[dgˢaȔ̗ +endstream endobj 2137 0 obj<> endobj 2138 0 obj<> endobj 2139 0 obj<> endobj 2140 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2141 0 obj<>stream + ~&(?i2-& o}-E20O,!OP*ŸX}{@I2OlcЊ8i{a0/O,7$Q*ZJ(lnd(l vĈJL +'58:{E@@xLߔ$Y+ PQܷ_\@[.@a)${pov;]mr{洭Vs=x^PhXFau%N? D% 0V@qHn-x \mJ+OPGi.S i4ul) + TrL](Sq|J7DQ7]^BwJ@uC}mx t]|?B>6bdj̃MnS. z 5g7d"18bcJz7&ȂQ&L(]eڏA6oeG.O"ۥs&m凯V>9d/{ʿy$fs ?X#\n{(lvڬs^]]#[)tx ge]dpWyL֍FlŞ uSjHe q@y) +m]\/S%fQ*NRqc!&LxZ_JC`{pJԁE} ȓ12hŵM;&TXEZI@)<}`TM>*w 4pTO a5k"D q7#5>pGwa8|3m33S6Uũ+c&UV{ fS*q/i +endstream endobj 2142 0 obj<> endobj 2143 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2144 0 obj<>stream + +hu:\Oׄo(AYk 4%籟ڈdT *P򱉘kp.|Mi;dNJ33b tJDiTB*JYBu+&%0:b.  Q=Nn?jBԒ&9~񊴁LjO( +lD [pv"T}D\\OUeәD )!ML +ɓ>E<W'kJAItܙRߟ N%+ U1Dqjf[)߅r%(\'yXvgw6ZrBKC079e*GZnndەgG +z ʍG: Wg}%ܣeih%H> endobj 2146 0 obj<> endobj 2147 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2148 0 obj<>stream +K/eJvpsNAz/HZ`"r ^y)uqm"jz`;.s537H^il1#nhwݓGūH֍oy7%Ϧ)%0hxxkFB2!l=wnHk|("MH_pzROgUˊ~CfGs'B8j$}'[AL>3SZ̦ j~Oy|.!9tcνtL&V8E?NRRu6ӭO[aAap,gpŽ6ri-~$6$Gx+ VYJjI P$7ҲƜ%PJ

|%:5Yk;:[ | )$ˎw] xwfqĎ's:t1۹}kymXuYwG'%tw@JI; W7ⳉD@S9g2mC 9Vofs5H據}N0ѫ>>k%XMH=k uz e*c37@ +d|EVJ|0Yie\,eyjfEZ%r(b̾Ѥ+ѥBpR޽{%iE +endstream endobj 2149 0 obj<> endobj 2150 0 obj<> endobj 2151 0 obj<> endobj 2152 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2153 0 obj<>stream +NUn.p@Ùir[c hʝ$m?4K+Ȃ^ \ +41ugL]Tm-&tAPp47J +٫I5s7w؟S +(70OҖڙ/[Xc[, x>vB|epO'Zu=+a0o&Սh: &C ?ʤ7-Z6ɫ%~rJk!nWGݱueyB[_"uviHa80yA%xxAĶ}9Ι)w{ڀV$i{0v4r)\6rw3~T7a-iNE]'hרD!VkmA܁]aΙI?)؞e?dMi&I"A~K%9j_r-p_CX- +4 %5c!l^,Eă! be}X !4rΔH]b8鐆mzʒzDc<vߗNT._PQW+?#֮)B׼Sٟ^ @\_Y}UQopv_W aDpp=' xW'PV 1*>2VD%v+e+^ˊY#T֕wyH) ȿȲp+h(+ȩ\]U(%RUO+L?U!K&DІcXfSk>/$FLx6w)Lꆁ;bU6=bie_{4WtjC7O{Bx﹋Fn+_"8> endobj 2155 0 obj<> endobj 2156 0 obj<> endobj 2157 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2158 0 obj<>stream +8(9mړ_}g(n..ZX)9́_I ُeS4s/DPAٕ:CJGZ s¿`fw90+wV]ЍK2˯+ܐ]"`kBv&2&?c3נ>An/:%ՠ94-yr-Irk#~+tY쏡@:abi܂4)U>67F9r -p0!Qozkl\v߹}4whI!ʃ 8oZd?7HVu")'ta1{Z<< f )B@Ϧ!.n: #AMeZss ߑzlM B6 + ^L?v,XW ȯnFs Iؒeb +endstream endobj 2159 0 obj<> endobj 2160 0 obj<> endobj 2161 0 obj<> endobj 2162 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2163 0 obj<>stream +Vjbv_-lO8IVItm +{=MSؿAe_KI7g~g +}-95CdN\=88#/[}}o2XsOEo=2;cojl ͊,'Xh"`;3 fR ٥z~TB@MxqrLZqkR"lQ o5.XPB,Rbk$+YFhİ~zE8ͧ:Л5ǩ6 ZZ3dD +biMz鉝֨9&l&>)P˟qox$cA.G6aOj~iTՠNIi6RdDS!ģwA,MªO'B,O/\dek d< ~t%޹05pKwYζ4 hLj@6(|B$RS}TSMi0`$"uGGwpTub^kyގOgQR)}[Hl ˧[#ad^zX쥤ebZlÒͨYZUƘ'ybc +0?; M)+Qg9g!S+.BA&;[X"yKs*prm 0 m?~(՞ld<*/̚f~3n3Ah9૿=^=OZa'Le Tc{ƺUGl3Yo~81+eVx&ofw۰ImLG)S~jV߉FN'UP*ٮZ3e>d> endobj 2165 0 obj<> endobj 2166 0 obj<> endobj 2167 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2168 0 obj<>stream +8N(5,ΈL(5V ~ ggx+i>ev +:>zd,^\g^cp>-< 74nmyG[QOC⍁<"YE_%bS@@Aq2ַt;L)G `W6g&e>CWM("B +9սcC-#|:6ţlŲIgizu˺>ǘJH}#7<v#t^*ޜ>X)z&t11Nеɱy} qAĆ#vWntmGiC)Op*zjnל8Ӱ&m,Xˀrlb0)C(^1gfx <@AQYl9)enqA$CيzYW#8fZ]=^ oUM})ߤ;}wG1)۷m 5>pbFtЯQsm1jtd S,>e$Ž.C йz:uSh +|d_o𤧠ViA AR5A9j5nyGf\wXrV3RLE +HL[[{b'3d&"MF=ϰY05!9sVFqܼ7_g%f]/ !|Ndd9_($"8V[|GS[?<0 ؗK*Òy»1`roS(~J2i\9zH \/Z&[eQ ?#'S{tIdM/eTiU(kn2$N4"~T + #e?Aec]#>^=$2x{h1Z=,v֣!W8JyfA ) Z) wQNa4}n8}[R5߸E(QQ5#jmc?%FfJ=檋huU3G"#ewLֵd[HTF=+FOɲL:PaKwzS9B >z# +endstream endobj 2169 0 obj<> endobj 2170 0 obj<> endobj 2171 0 obj<> endobj 2172 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2173 0 obj<>stream +TA~J.#OL(@#GgO{ž=V\SL`J]4A_ڤ$8'r_tAY|Wh9zOc8 +OR=L˔Ub[CSZ+'Ah~+IR_oyy_X-@e c*o,Y)i6Ai#fe|UO^* h‘*hsCgZT1X7EQ~jNYv;EZDBNQLH),Ec[ݭ.Ro¾L=ANIO'Xc{V/K q_:Hcz 609od5 IA}CKE>`d~/|}l|d/rU']͒"t=i\!؄)x:(g3Y4d۪u<> endobj 2175 0 obj<> endobj 2176 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2177 0 obj<>stream +;ϴ=c a,Z?S&n7񥊆4f ,(Oiב0杽\t|9T +Rםe,OM+oLc^ +{(JqBI 9 o-CC-yqPfe&EyM*Owȵ(>]: +GxU%\B6%p0*\RUD@ė ZnӗNt!q}GB]tdQN46ߥ/l^Gw`áhde2"A=PUmda"8Ub PB"X-Ǻb%d1=X sgFcڤ\9vjǡ,ۙmWFhB +l(_M?ȏטHq@X9PƮBчN%]Jon5^O֟n"N E\BϏ}Ygk! +!j8%`jIT2 1g 1$ !le;= {gYZ[ +A0cPmdh@ {+`+o>RTÉG!؈{hjְg^O;65Hil'~5 +?ny" )猗Ybܲ4/NAG#v@2O=~o7M wm\ Aj +?e /tb8pC|#T0TyebD,eylx+:N".,m+pLq +߮5줽>F@\61Em2Q +endstream endobj 2178 0 obj<> endobj 2179 0 obj<> endobj 2180 0 obj<> endobj 2181 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2182 0 obj<>stream +|C.n{|ͽh}:, %c٧Wpr1 ;TXշ!^*9*!}"NS[)>vM4аVpdMʗT>;g+w:65A-ГV* b`ݚ@.2|Q$ɥ~[]&[O1ޠ\ͪwc,qֱ^j"<e-NnCt#; #.5bSgR{ӠƕvȜ0B^daKPr0Zrc@!D?V@Pc).ul -Ly,PzN~#G$? >W7[_c;&lГp-fbȮ=}6z4ns z?.NyQae b{O 6,Kqv,tZcML1qA [ '3S )9GU +cAO|O&O4 yVq![vVHWY^=&);m$vSƵw&x|_ ب-wy焯3)# 31AH5myW ' r6̷b?c =d +讅5ۢ +W4 dAsʁj8,&5YKp pOɾ68]M.}5, /,Y"lwRgKmY4pi&lȦVpfv85u&/H4I^SNaFc#V46;mb-ɓM}BէtQD&';"g$3ēAACyǵ/Բi\|'Ulp+ 889avLaeVi:{ɏK +Z> endobj 2184 0 obj<> endobj 2185 0 obj<> endobj 2186 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2187 0 obj<>stream +zE@1qiYoW߽DoRpY%!8CK~GsHtj$?8KVv;b; ίa#IE&\ȴb6> *[A_ژ9U i{V YZN>7X,&‚Q3>cИlטo*~K62RއP]+>3P4M$֒ *&]-<p Ȍ䀣d?WVXD{ 2MR yOwxx\h0QQC@7 +Rj7;_ M85S i`JR|3y:)JK]re]j"&N&uRA-cDP,HEHԇqM !S,\q`.$L'?fhEGM%#JdfO. #q&gݜ×[2*84@qD +_ 2,_->38b/H ^10 >}$c*Cxmy-*9/Q &0TIJx%a\ +TuXkl-"Hټ[j˷-=n*qs.S4ww R fR |vGB"B2mPXZi  pg:io!T<ŔژL_ԡ@>(P*:RB^6`"3ۘ^:]Y7ܼl{il:#QD)ArxsX43 ӧ!>!n>8?j/DaJ|ѪEzG"i:Za04obgӗiL= `9!a\hE?4v+Vm45B ݴ.1 +endstream endobj 2188 0 obj<> endobj 2189 0 obj<> endobj 2190 0 obj<> endobj 2191 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2192 0 obj<>stream +a&"; :k?PWl1[7JUQH+fIFQk0mn{ʱs]i2V ͏Bcx.ђ0ίxk4jãsld2J~0Ӓz%uZ8L cQ-;?.qzu0n_i$_6L 1lK,ˑiM#v`Q7խ<rgVvuaIH_xu[%./=uϡ1;H6DB8 42n[k(SD'܇$MCJ9+a +^R& ؚGvf!"=ߛY;Y^}~w i/ҀQ<KFKSŀAdE]x^> T塡5ogϿR_b!j䱌< y.n߷5e> ꚻ0X@M`h=H]߇0^U -.̷}]:YV,O-EK'?᧯C_@bVCMQ1^BQ8<3y?VFY2e +QB@*! @+|iܪs"0; |Em6,0Sr:T +IAydk 0-c\!gNwHi2BA1AVz +endstream endobj 2193 0 obj<> endobj 2194 0 obj<> endobj 2195 0 obj<> endobj 2196 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2197 0 obj<>stream +>Fz wŦB١;؋2mA)_]l[ }[2rUg_S!OzȁJʀ/VNKuՒ F;9!_EFGUV囕†`sd͡XAG!2Ar+UK$[h=.L)m,qR @2깃:XD??E!8u[5FGszRDsN6-}vr|VFjkSٮ(ܖ0IAPw5 +Qo֙W|JIг4.OM~ET0Qln(Sh vkG~ޫlorłXӁnˠ6%NJ t)_2l[$Y\lJRNY-kܒɺ9yE KA0@P E_f(;T'Dbڋ[ `SD{iV3f5'HۿSh i:Ώt|Pq[ ˎV\iK +aa2n'$*&K0UvlOOw!+~3ADA;MpZ";- {?D/|ܳLyUMb6ݼr56_`"O8_o Ll|ooN{^iJ Bkn +"2_0&΍"]XP xF8 dG81.bQ }|KtOd8'We4a@=<vh[{~O򪢪LO] 2w!j ͼ>-do45Zd n?CބVB?zhOU*6~o(vn-ڭeS1`o ioTc%@"0P` "g3rK4YW<$3k1 +=? pK}-Rڰ%S^"/qRGIz& f R*sE?o/j, +M7;lBيIJV재7q$!XگMĨ&%0O<ͩ,飽C:m3p +endstream endobj 2198 0 obj<> endobj 2199 0 obj<> endobj 2200 0 obj<> endobj 2201 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2202 0 obj<>stream +-Y^0|{`HJ<aÅʴ[!l -45;`FmYKg0okG*izNcjfMh7wn;S_贓\ H9$`f'CwA'h׾C?Pѓ'rg0$I+)]3ZMF  %bYSё`IߓL.^DE^<w_'zBӄgh Vm!s-[=?H~CrٺnڸJ3Si=7o~\Hv'HS~9{Q&KjC(HI#]pCot]GDt;y3.oFP/Eϼl-Aa/Dl 9\n *3 ::$c]2WS, +M:8!y*ܳ?/.JຢFeCoGQ+}RX*qf@-Y78 D`o91$0ge±nLKOYue_Ј7@ L.Nv}g0Ĺ|R + 7}T棕xt8\%O;.R[f/Ud܄j3_YG1rk:/1ݾghlw7sR 7QVu/2 ;V]dWiڸgN'"<l>PYjR'Z AjlfK #1Rd)QKb1'YWKq.<}q&'|٫ 7N;֓2U]4SUCiRi;S@j'affkPGKl2OZl8+;'M^rD؁uWG>Aoz +1JbeU6@pyw{M6dQK>Q%Ö"twV)TurMmoXqƤĎ;Ze +endstream endobj 2203 0 obj<> endobj 2204 0 obj<> endobj 2205 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2206 0 obj<>stream +1[= &yئx) kl>>2euu lk/,j`]l#B^OI\QB* X<=FF IgVL8Ԇ y_:  wO'Hyy辖դƷ#29y`YcGƠ6gi P|$:K:$<(aygyfCgl4PHpL&W. f +1 +Qf?͖b8 u'Ү+|2\AP7;T)2ŁΌ;1qݰYַX;J@c +Pm-U2dR2[ҳQI)SWWE`jgj;B2.[Ob9 +>"s%=5"p|N9T[Z#_f@T5p4o#V9rPƀ-?$ c!ܦFٮ`!D,yvf8ni<.IAuE3C~Fm+:i_-rya=xYW^}"9"{r[5,)zw^UD\oa>^g(k6lH߆|Y)ɍcy\yl<5(ժ d|WT=_] +c,4{obs3IeݽQF#Rc[0 {`ݰE!`<N7IJ Qdc˛OG.0}=%{Au' +aħ9T<(Lx,@wQ彦i- *G3$v{/WXc˔/n*N&;[BP"(q/x g_( O/:Ef޿ +ZFXx=I ٸU ,^'x,a,e9|g +endstream endobj 2207 0 obj<> endobj 2208 0 obj<> endobj 2209 0 obj<> endobj 2210 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2211 0 obj<>stream +ۓW"ӻ !f)D%':su:V1 Cna2_c9':PJǮT!O*S#9_ +r>N=?MMľț=[j>JYÃֵ +oN$6 51p FBcV:7qAg J@e|`(u,cFV",]~ +1+2ݲxEmZW-2c'ׅL7xf[OwO?3"whT]]喃2mVKb X o·#k VuD&eƣ$G$(d7>}~bTLbkMuI> ԥ #SXΘ HʼD|@WƧu,s)WJ R`8u?C#o6ŐWS~!v;zo+ր`K%Sa`qoX0PSMU:32D(8Fn6{͊ڢLjDDr[ $ +Hnv|5!Uc#xRp(H- 8af!qĮSGɹe)U@sx띮4}zFRާQdO6<^N><+ }gxhAOvgA'ʱTͫ(b. 6fywMdċܐO)7,quKRəpۗP% ?Ӊ} $MFH^YnN#fm()x~ByfR߀R~0cdTF&f +_I1L)(36gB٣#1#fz@5G$նX9^q1q dFb13f"iH&[2#%YL\_Ct7R?K`8ȑ(pa(c8 C<ݹuBx0N תA5> endobj 2213 0 obj<> endobj 2214 0 obj<> endobj 2215 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2216 0 obj<>stream +q 83y?Yk,,R<~Ysh??TE6Y""ݱBl,ŰO|Si}wݻ`T +grd.ĵ8 uGXSAKۤ&' N܍6,y" ~†ߴnbIu. +b矐YLjIx|n -/v(7={JRړKoj=mŒr;c!W#t@M+M;Q(;&As->ưBaȅrɽVlNzÉ*Wn ~!a>A:sz_g~$-H}tOi + ]\ C玉w QXʍgvyrgvKq4&TCNߗ ;6> endobj 2218 0 obj<> endobj 2219 0 obj<> endobj 2220 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2221 0 obj<>stream + sApct^mn(ZQDBNtgTah0! ?;#-N&B]>;< J+&x/}rBCoh>U.fXIm>3|kF֠Uy*7codȢTn&95HvPZӭZӒW7pP(I*Eo;s1jzz--!Bg{iyk. ALNeR<ԙAyq%+0ѹY3ᬎ&aR^ + +ӫ3;2UraŌQ.?W30>vʆ +2R5$<@O`N"F4 ?{E#l ZM$324F]>nC5"""=-ogX\XJl`Y89 +5p<xIи{VDz%uih{esP n(.&A_בz*6և3Jˇ9̴n.rߘd7oK$ZǨ"xi&m!QKOZfC(BR:ʦTx1_۽I8iuoscPhđ@_/_zN:) bfzxSTXls VVUI,]/wSS߉`33F2|Oӧ؂BKou6d}&h99rvZ]vv e][OIp2Z=Ƣ[4U + G}7"@䛴A۶̝ݗJ^6uwmXh?xS+BUc |pA$ +z=XG2U]gsMErx#$}=˷%pm94NCTvb$7Rح!QaFauxuB=h𖥩'Cb,V?AFr }'ndJT޾`S[)fMdk_pi@@*%q_}`/dǃ> endobj 2223 0 obj<> endobj 2224 0 obj<> endobj 2225 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2226 0 obj<>stream +m@ R4gN͛++X,!5]OKQVr'B`r3%WjYIb,Әۃ[Ĥm r/"UVF?ρdQ3?t|ھypaD_G2&Ȗpk)vga)'G(۝B7zV1 +jEģ#txZ\^\/0y $sne{+qw(%[P̃2Hf9Loհd/ql/&ߍ6L\;}$чo;xل%U0:Xk?#Q3q>'t3ˈ@'NvMh!d~'إGkC;b7a"*%e^ ; Y$_0'k̲EPZV-=!ջ}Y=@}1gS^; pjGC`W#E2ȹIݳ-%b_.'}%lbXuyJ<:zyRF{k*-Z[ d;kq|jf +M:ks)6&0VՕ2u2Mѩ fq4*[؜؄(^=jpvvYidA|yeޜks߱}nY12s~3uLRW^# )1Yz6 +*nm4a]$ y=u^xPm\V# ,Zc)tL`+Wm[i_?2X^i ]u2fwlRXu"0I,ҋV%d eͩ +3RKA`Z9?ט v M3;xRcKԕ$$7A}E, +endstream endobj 2227 0 obj<> endobj 2228 0 obj<> endobj 2229 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2230 0 obj<>stream +/]EJWU`M,,gpDKnR@E)92y# h; 8c`Ƚ/ \5lf`@^"2.)o_J z,X8ﰩ5)ͅpz.lO&~QMF%V[#P~Que6lYa狺J9>B<_q6 _a+T X!5\31GLQpL<<.Du{f`%ʀCgRPRǵ^eTT|=ːg{ɪW(ܸixCd_t;VeZ܊D| Ra>].⻤K\c$PaW讹*~s_ȾˤJi"Y)e8|V> 4 WY2yRǫgU~=Y ݿpKNgؖ7fQ]R5Ҍĕ:=`:6c$q)A۟!d:g=5ePrmxvMǃ^j3ג>o8N JG`| ~DyFRȈo˴h6S(Ik\[T&)%"pnܚ:i Oh#jqe"ƩZujV6Uof>x{~І/Ô7\''xv0:˷Na'zkx!_m2tؙ5Ci?+Y=`@6I3h!ʊϽ ]yw~&SliP+z8]T~*FNr_KA3)ehV.Ih no$pwצ=vѝ}ˍBfKE>[4g.2ύۯ{ *>_B֢+^c`1g86hwv uCLydrvh(}A;=ۏ#-$oEX#6zt+ 7$Ix9ǒҳy%kYcP)5U7YmbtEܽwC +ğybP`;\?7\O%x5$V.YaSi49S_cO%L4##WeD|*M>A!Jͳ,VܳTǷܱ2ȭ,R&.ؗ g0[ 5f8'-3$AX=nB-t<2\"f ] D66>z2 W &v.'d" o<\veQ"1I8_9\ߡ%r.Di* \H2{_>HրGt5b/'G}q<Ϩl5Kw&v8i @4nz ++u^>#p?dd?Iʹa-Z7315Y/ ĤIxv`EsCŷ2ZlR17MiɷKj +endstream endobj 2231 0 obj<> endobj 2232 0 obj<> endobj 2233 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2234 0 obj<>stream +`°d|_fdNHu 4luKvەbȢOe١ϴ[TggDJMtow![ڦ %Iim<4,g^IgΡ׺^Oč:Q/D*u/iP"DLGh&\aa߀t/iUŌ6>uWW5R =TB鞔L9ʅrO6^~R߾7=%Y{CK Na@96'I`7|{D/02Neef*ZqD(+9T ,,PYa)-8g>K1i=LPU ^`Ώx?Xa%ow(Qs*1zĵShGjJc lO?.?uErz/\Mng\FQ3DX?(&_]6F<ՎԆh0`NTsHuZ<'b^au=izzcmYt^YdL*ػ5.Yu]& k( +Z5U5ۙ E^̎s6NOߓ)+u4uЏ;92*\@8t;BT"]TSȓM0,j$W@mH0 B|1Zw4al*uI9e_g'GlrO]JG*{#EgWw)sT:M.摭tB>QanQ݂/S"-Ed): &PL%P8͐eDxp-TC9ᄽ=lk 9bu$~r}b%NSaB߸A{MO[R`\T+\}:{pO%eQcdV> endobj 2236 0 obj<> endobj 2237 0 obj<> endobj 2238 0 obj<> endobj 2239 0 obj<> endobj 2240 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2241 0 obj<>stream +/~{VgRPk@@PSCJEKx + T|#1 3{<,ilfچqM!(Y*bp-T1;zʀN/SOC (00)7 XB3d,mN/C'LRS^@3]N~4d+7HDb`''rqq%3n'\nx6L*-oaI Bú+0dZvYJo#/FcmOҔhG C|N  +K%2W_A=K#ky~xXWnc_@@3コ3oj iٻ,8eX3$,igP=O8~gXKVHhvlzV2E>Cl;h7PDIg0yŻFPRC̆ )ȣ 0ޘ + N4R5P7*ӜSܼpvZ?;m9P2MIMbrڇUZ '?AR+|t(* ^5 3'BEzZ ^a7aL{qI@\/|gׁW[IGJE+;X 9VIvM|C֝PXn%&M)ֲzeF+P|1fkʚTޟ{ɝrM(UvlԒ~CrB5iMۃ*vS\_Ŝa Htwaۏm.46L#{O8F"lxGYGKDoĮBz,jŏ֑R[`>ֵ: ɞk8xa@ "6yM]n[09(lӌ j^l:č%_y+!^Pߎ햛NTb~F$-agI0MʿfB~$*XX*vM#b4 AM3(<ջjvtM-+[6C1Wͻ&/,^N<D d׏c+V]@[Ԣ#mTt. 9Ir.Y#[Ξ<2t+D|h q%ڷwx1LȅF^}FuOԻqٽPi`0Y'22h纏-eÇ߿Z}.2嵥r*hb a\/nt /V]aT9jϘ41MM1eߝi,} RTg(ܟo`j +gڥ"߱Uxl,8,P[R+{W]asf8ٝh\a[٭ t/ +endstream endobj 2242 0 obj<> endobj 2243 0 obj<> endobj 2244 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2245 0 obj<>stream +]Ӵ[Nm{C<Q b mſUekg)!JՌwNt"')]'z&7grQ{r-&eAZ^>]̵x.Rq #<"G2zG1A1CLLhr)P]z/{JnE+c>2kfnGK3XzuzF6RʜT]RS}}$Zٱ05Pjgݻ֥ kT(ů1׍6Q/49z9#׮a-%l;aƏ{ҍE`:W_YI]BoPE'˲)NqfYZq~-?!>wZ0Npk-磇cw=G⍘d&T*HKEfc^XGiκv#d1:u1oXڀkC"C\jUH_G];D.oNJ\wr CEn5ÉpTLl$I Ên$Z+94)k Ic(^&BbA5IW mL{RKD64 +L3ʅ*M 9f ^mwz1B4!G p)tsv^II\ ?7<rMZg6Z_qB&~Xm.?"n2^{D9^Jo6P.`%(d/Ooo%f~fӜ䎆2vf+P7/H>C󥧅 %c3t@K4 zzjyImmlgqH'%؇Y u +.(>o4ZTۇ`n Jq%/[_ՋhsԁyPMLE\:q&:jw_^ ׵ +0usGG"g.,)tɢlOg( Yţpx? ۅp֖|S:A -c~!"cPb@&|: K&e4X rP_[ csA\7bX'c-Oj}2ľxe!5/ZHO<Тf$¦Wa.=~̍*-L˹x*V%KW-w < u0!-7i-*-z)єPn g +endstream endobj 2246 0 obj<> endobj 2247 0 obj<> endobj 2248 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2249 0 obj<>stream +c NМ@ȳI6h͍s]F~~A/ϻ/Xo9j;_$7XTN29q7DWbjD +E7@mzgj +ZS5*n#JArGG, ON @ +&y?kdX9(qWU+=g0MHOӇfk ԃ8xd=_Ӿ ٦w;q=*7NPj_a}NK=$ӜE[>؋ğ bHk{̹c2x]@A\"h/~CƧrNO?; ]٤$Uz +(z¤j_@UWb&gB13h:㎷" Zg !#EXT:e/DfucEK3?BC~dai tI\ llk?(B;턗rQ迶GnkwfZ!CXF!ҏ?G҆IF O#_9TaVz-~up & ZEWmHf, @U[PR>UR\,6F>+]Y۳`j<0S+O%,i^&u'JO YW8l@F[u79)ǷWtn0o~#w؆ХnP$v[[ZXc !S4[%<ߔs+?Uymw4奴\R;Ivą +*ӫkD0 cY@8iE^J8'm>RY#(ÔJ642|մsY@c^m|)"7nZn `}`2g>H3bS {) ,i{@'5ELEI+Mg@w)xv-9LPipX턫J\MAZ*DmrH@JZtt]?Vךxo9>/\j"o$ 1Do@G3XP[+$Z<[+ӽJRt;D"QɃyDDѭ; + Cl2c؜euS✶4 z$:zj?4 +endstream endobj 2250 0 obj<> endobj 2251 0 obj<> endobj 2252 0 obj<> endobj 2253 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2254 0 obj<>stream +oQ[e#"] +&*^|W)uP$!W<FQiy:}Ak8V넷 +aj0)DN̲b4 Zg^P-KB{Dw3x#&#f5_CkΒ`&"2O9K" G OٯD/ͷŀi%MhyfB;84g8k%$?ɖo43~wCSsI~pMp@JȤ:CF1hi ,4‘g&P./9>"m6 NGe8fD(IQSc߅UfF'V3x8#~6@,xiBQy+l+}kqt[K=Ȍ[wEZR+A3 ol7q:8 վݼ!R0n#Tǰ470KE{oGVj$A߁jy!w^=5)6OIx* ,q ψKDX95 fpԄ` @Ѥίd_P%q;4Nb  +i* Y]%p.g#Ee +<.^t\V֐%!ʗ`/p^Oe%~wr\YSDdq[l5 +dPu13Ns>_U_B!%7\{,C}ro6I/,'XqZ dK3X5{lc~PƈBeW6~ŧ=Tۍ-{ܹ}Jv>ӥtŮ籴W-%@W״â +~3zY:R}5$ j2Aq,nֱ pfq`O`僊¥%ژ_g w:q"6'N.qչRGDm<@K×LCЍ qt :V{=;ӛέJhKPe1'bV5۔^źRNVR.BAAGEiF{ ±mE=(to}}茯NŊr_ thEOȻМ*0{*<99ZJFV-͞ GUMV%*qbggN +endstream endobj 2255 0 obj<> endobj 2256 0 obj<> endobj 2257 0 obj<> endobj 2258 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2259 0 obj<>stream +\؍&9QMY40L2(|3xQE*C>,hI& O +ٖ ]3Qi&NG0A.A&qR\~y`VаXllaTqbB"u6/E-~2;Jv%Ύ*3o`vt*ma o9">+ ^NB+*ZkmgߜX}\(Ic{ɔ5{^ U6.e`XJoNV(uh%E\/D{}*I[ X$kcP =ᘀ{JW3|txPnYt[*X'w`pXBHeva}FԳzKmܽC6Y4Х] +$C!g"r])a0r6b 7I3ku+$oJ"FL,îqdjRNCIQ-Y6cy"^-Cnl5Ɛ55#Iu!O`!uwʲBѣſ4"YV8JTxU>"np]i3G +!^υ?W6pEb0'`K\}0sr3fٲ,?I6VŴek =0F3Q l0n9 c^lDͱAa cM]b1@ܸ85Q#" >2OF^:(o/rCK'Q'p@"_AZx|ƋN]E;&#sMF҆I)v,X^hd=_ɝun}ȟf>ky yBV))C8gVt<Ϊ*?M +endstream endobj 2260 0 obj<> endobj 2261 0 obj<> endobj 2262 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2263 0 obj<>stream + vfM[&VS`x"'7:?%X.$!lsⓊ2R+Z^K~">e63@3Ȃ'/,WmfgexRmyZ<f2?2>7~W',fsiK1Ҽ+4Ei_t7=pV-ƖZ#߻H +/33 ! +")G*~Jrl/ٰ9(yge8ufY=<4vv@Uk(wmAw=GKDB|P+Kyx`<36*5gv']&y˜gd!iC<$9" z>;Ey&cm94@]]g,{og7sFN'թX)ehdL8C/Z+%3Èϝ{V(zeϴi`D{?LY}apM`ɛ5\\p'DzD% E^0GtuZ\(ǽ '_c^6}{' -k\x( xR=Q'`Fխ/F!9څNIY}Ѷ,@T\3G oTCI%zVi-Nsp#) ^lyX()m6H>Bro>.!9fuY&hʮ/:%6?#s,%C$NbM +endstream endobj 2264 0 obj<> endobj 2265 0 obj<> endobj 2266 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2267 0 obj<>stream +xRg+_XijLVa+LdMd{#9&?iݖ C;dSY'r^x>X"ϔ9vljA8SRXɜ'S*IPEX>). #{qSbSOF4L2#!ZJ_@,`Z+n?'Zli0⍓/o@VT -+0}MW25#H/ +|,k~R/oCeY: irQcf N#7~>ze(pK[40Nȁ3ww'%˕i=:p},@<5anN x Zƻ֧NG\Mj<}n|= 2/ J"WuT'A^˶-^Wzq ;VALl_7}˵fr96 +ј6?-\轸z!ŧ8Q ΁~uaX 9W'A$$ EO9" ը'h %2*@֗x%UXhn} 5mmx̽V'==*sNx2ʭ3ҧC:|Rw"~K{+qn4;U R0.;ͯ .{s;"T3XBHKqfBHK6֡Q^"7GS5 +pdJ~z-T^AUё8(wzĩnMW}[x\= 3yH\~g'v?oϑ2P;+a&K/gLLm<{l?*> endobj 2269 0 obj<> endobj 2270 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2271 0 obj<>stream +}$ퟥRW?Rp a)S·MȊh(M~&De!kKcXD4HMkH 4 D ]G966ٔR8#'gDX ^U۹JI\܊$(]Jd#n@BiH)[fф`vr_Uߞi *%HcN$e:>z'CyM''Js,0[|l{A+U>B\$BA>.3rǞƈ҉yF`3*FC F5e&7OJ0PSt^1x0qDl~3-(Sss'λ;>y*A~Hr^3B}lp*͍i,滴VwEEIPcñsvЅt`SV.sev]5Q煘'h5٢qY2΄ZZsA'_;4NLϐE)0nhq +4O}n`(cp)#T&P(ҥ;m HS7$I~B0w+3|-V@w5cbL|Ig-#Pҕ<СW ރ}v?=V"Aur) +z?^%(׻Ne͂C̥Y [ZEȏxpqL/}o4[puVt D)Ry_=9C +aǗ:cX]zLc)`FpTƴh8" ٟ,`!-J,p0}x3/Wd7X03X V[XWNv +Q ;BP,\ÊF SPEi6w4ԏ!2iRFJJs>j}\J-8 +ij> endobj 2273 0 obj<> endobj 2274 0 obj<> endobj 2275 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2276 0 obj<>stream +l'q.oro& RiQa+ +uaKE1ɯ$7dHg( W.:FʙrG5*|O*!گ +9e#h9@cRL ݂lxd^ӆ'M+U$t]_u 8q+ 6BO5zmv6 )Nyw aA9UaQ^fGz,~`tj2!o !5k#53xJ}ui@FmXqVO(.aD@P0W>RVRm2{9`?(;f=Kmގ wz^RAҼ#Kn(p_=߱L@,d{q΅33Tb=Fo^pCݻpQnrЬ-PtuXī_me}w;s`iMTj8Sx_ +endstream endobj 2277 0 obj<> endobj 2278 0 obj<> endobj 2279 0 obj<> endobj 2280 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2281 0 obj<>stream + G|TǠAX okPE"]]YqRAiVO:MS01KPD8"Fɛm +3HD*Wq+}gũaIH{uJu^fx#ːgr2NPh| zq<6[<`} f~=q9bL祜fD]}1cܳIu+q`㹳1j\yRКw)blG!2㡮z`Vc2y[ \C'x7=P-|iqձ$!o#`#t\V/ep^, +GgyZ33Aهo|8㋆dCˑg@oƾΪ돥wQth:BK elJL̶O^'a%Q =q_&~CdW!Wh5wXb3[(*dz &M| +vZ_pLp훐3'ܤX"PXHP/䴭$e/>]-yw7%ծݯ˧hPui=>< -͌$Cy>/52UNk\t"ASw&pGc X~\K.,-S=nY;ԍhӌb:XlDmf.׹^>z]ņQߑ,w ޙ,EPxqRcQ- Dϗ,a9[0_V p#pЬȨ~Uؽq *@1hJ_-)I"i*Iʓ榞!pĤ"@/>V!nK +endstream endobj 2282 0 obj<> endobj 2283 0 obj<> endobj 2284 0 obj<> endobj 2285 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2286 0 obj<>stream +@?BB*҈Z둖l?d;Y"ݩf?|Jא7]?l{pQ}>s_mm3eWI|7MṌ|>j'O^]XDNu'L\ԑH?K!eyR?Ц@-RDRT}xc_DwmG~jk0Ai5~PtD̻gՓs%a!d1 wV:wffhlm;J$X*>C@3uZ~w-lB,Hך1B9f4 9hĤ qz7&e!(Uy"Ob-ޑwd<ԧ[5smUMshUߪ:+Xe*=d:F NdvN|f˞ I3miBqc'͎Gu̥r?#T˿s9(7~c'z8Pǽ vF գ*3D$oW\%MXVgYhfK?2.Y-^g XoD~[hB[,k$OmzBD@,Tj5 Hq]"b 5M 7}ˬ4wR<܏im(<2Ţ_ZwU\Kw&+86b:$Yt޼L<z!}ec1CD&fMd~y_iÛ$<+(L]ؗhAΊYjjF&͏WUR3 厘4dF2CVaCE +Nl30(Fy:~x`g+ i%$i֤쩮#V(k&iLyB)W΋H4mjbmr ֱ4c# ?ܡ)Aoe [VbZg Ei8=bHa.Kɪ%{1h**qaajYQ^Jm ُ4{.} 8F k/0RYBK2z*hoBbr YIKXi] +endstream endobj 2287 0 obj<> endobj 2288 0 obj<> endobj 2289 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2290 0 obj<>stream +Ub$9P:fa;2 Q. +yW˽I]o_zR@NIM +8|NQ("xK ,A)h.MۖRT 'xt4@&pC90֕0u9==}ts!?EQ60JK>k"YbYʴÄw=|SwcR]D(&)ѾWK\KU„ewt7Gf¨`N@4Y[dOUf02j/s lO)8d(&x)c.Q1y$qr>e̗\yguGTԗ/! -:=v`AD~N]gPm159+dxV{ѢVAf +H!y߳';JXh.2 )U_KIdSNDͶc%K\WZZúsUڒh+/oLGIH̀4g2[롿noa91}A.cp3*EB[ +ko*db<N ?RZJ(Ap]ކj3ǓMls@uYm{q|6C =i?U9ܵBѠ盗 + ;=N,^VҋlM}=r{jib;j3 (unI~{*Vo^| +B3f󟞥|(k.U`eۅko\ AQtqh_iX߈Gͩ1zuAəLhQ E'Q̲ƀ)WOU|yOyKA~NX?&+ӂZˈ4H<9f2ySx/7Hy e"A*l]F?J*,utBtp ̞A@n(Z5Ej yzO``%(0EcŎGF* (W\# Vb~<&n\8i/ÉAa6ЃSa]X?^TfA˓OuxOdCE֟&iӝj+k4a 5ꠗh{ a!_"[AZ|s LުP%겴Tr +endstream endobj 2291 0 obj<> endobj 2292 0 obj<> endobj 2293 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2294 0 obj<>stream +'a`w!k8/Jz\͏%&D!jRN\j k;l֫ +^@/L{댝۸c4eXT7I 2_rIȑe6GOsH!qg|GvMZ2oL(z\?HayjfyWOAg +OY3|oݲpH 4U{E @qB3=d>^ǃGJ|LTbRөZOz<vp+!&Ҽ`Vm:Ūk>V.u֣V2x %jx`)VY= +W'{e2c 4oL_U!a()>WٌʺN.{n:2O%A22@qx֎A|iA岽CU=S\ qk `g\c{܅);Dy<ܸ`=]+,(P:i_oٷ +X%13t]ϬsĻd?T&@]E뽹i> endobj 2296 0 obj<> endobj 2297 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2298 0 obj<>stream +=-vbᏴ +N 6-"堿m"k7L԰|m#)gdͼ`ČCR&mᔝد"~wkċnMOUG/3e921̀[|⾆-DO-t_$epU3@h:8H2F)A@Zݶ{o*&AWRF0Ķ<{E <2Eeخ)`tLwHc WdmH%}mC]_lNᒮpurQۏx\wK!h-?YOųUq ^v~K;,dS&l(>Y]ԇ;r/hueP׾eGri'n?,.t=ç x,e+O [s޼e3-~)7U*J?z,,3rZ$f%v b$І]>-#K鉪nt k'K82%4ݟscƥZ?;io-(}Y$8=4ji& **,2&LȼdeLѽwR/ۼϯ@bT>ҕCQ?8")虲k8OnNAQ ̈2>$GT!4Rjj +s3J[2ڹ/h[]& _H_1p8mKraЫ c­j"hɺK`ͯ=,cK:ZbX0\{ p_&ߞG.NrRon +W;hNZpij!=أ۱YPfB +1/'p ӟlw4Y^6q5& M1:[m-pi[H1 +endstream endobj 2299 0 obj<> endobj 2300 0 obj<> endobj 2301 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2302 0 obj<>stream +@r NERPU$Pߙo8-KF:Lå`IB3ā% :^lM6@:MRg ySfZ׼P$DVt,gFP/Ý$ X2Y)C=FzAI_*58f'Pt +A2f3`f>VDc|=:y&6p$ѪA m+%;Re AJF$XOp +$`8+ eb WʂӝN>LF"eyrueV n + +TEqT\oRXDnbn~_Uayd_`4WU7&V+Â9}Ϙl '샟k8:P6mvŤxbUIY.@|v5e短r*M=l21N x0c!u(3H N̹&3ipTkG;2S)jDe>r$6 w.&N?jOJ`GNkrA _#;<"C*%CJ,]`q`/08afOF}!zo}^+`}'NcN6:lNZH S"?◷g-<JIxH,E85V;\3_`"poݚu/*iBI T#m 7E G3 nMI +endstream endobj 2303 0 obj<> endobj 2304 0 obj<> endobj 2305 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2306 0 obj<>stream +9lr`_K7\F@:DԢ2S#۟y}JE^sd<6D&q+kfu~4q1t.r!埴r p&a FA8GӲ[u?-WF#W..MB<3NjwKNI&sIlW㾽` +ޝcujVrY ?Ï. cf8wp=T8Ǧiھ NԒ`/:"[~Jɣ9z{޻/xn=5{tq !reELBSYLM$yV[C Eoi}s><Q[^AL6 hø9W_<5uVLug΄;UCq} WL達v;"ឦ/[oq%ÅBi~E;?c# ;% az)JEj7 cwXŽ_~)roK@Gtpl,u1-0b&.j&5^ ۤ@PIFKwNEHƬ̿b&2t8xp˲jv[EA6=pC72!ESSWn)Np%2{B=2\lum@ޘ*x6~F;TLO#( +endstream endobj 2307 0 obj<> endobj 2308 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2309 0 obj<>stream +b#^91Z tvlw##= (\Q]-Vd f&e^AއVoCG0|vA#Yȵ|nfjA7Dio2r8-Y|UR| q`{ sNݥY΄=zU6u#TagĜ75jpSh )Z|׋<(]79+:60jҗP赓h8}MBY5z2'\V\z/kH>5u),/6=dؽ?HhiMJ[ךPlmnhS 3®3B4T"檭 OX~)"y3Fx-" @2^OjGf>ڡ9aG.wEu RTă8@8`(zv"ABUo81zm! ) teICftN:V7ɱ6w+Ԕ6]D d<Ș6IfI`Y80l^1ͪ붍 ɏ/"-E[.XtM9!+ڬ=iP,Ĝ/8thgMjlzwPS/ k ]]~CoB{IhdV # uۋQZGl܀5|:#\‹O<%%饦*tWG >Pmk /bvV *ޚ[Aaړ`Xp9|; +endstream endobj 2310 0 obj<> endobj 2311 0 obj<> endobj 2312 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2313 0 obj<>stream +<sZky= #M!,BdNE*QȲӡu\rᰙY6p Y&,Ëz)յl˪5сy(??td7Vh=L`j9Ñ0#(>9engU] Ҟ\N݅-ܨ0igj_)z$\&آjH߷kurUB?uu6l@-:)hkv4)Yw#2qC1Z8o=z7.&+Hc!/Eq1=ޞERJ/'߰>pե]"W~u{\gW 34QLп.O{;O8|$x6eNRC`rQe񔺀jW{R*Y@jڞBJЭ$MbV, K?~r13@"7坐_"ߟRjj4i m,pSu +Z#@nyޟ镴"OIŦlb/ u~doe}Qn/ ;7u8V) cpeͬ>zZHQ + j{-{il:A[[Nl0pܗfm&֔|e=Lt_"s;Bٰq#>] TN]-(7Zǒ'sBGDA`a%.?_~Szms<:઎83@lL +VdB= GmHU _UԠ =QtlI+Pg2MS `6f:=q,VKgdCq+9g= 1Y I]LK\\g֥K<'9(=[f;<ҧ13 Y]!iG.VٝX83eSZ 0|C7CU;G~ٕםӈhd* cZa5|4d.֡ +endstream endobj 2314 0 obj<> endobj 2315 0 obj<> endobj 2316 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2317 0 obj<>stream +x_!4\tJ"`K!,O1ky)իD>ˡFx,EѨ_CyCnsS&Vh*'瘱(d1X;otKU^`DŽ!aY@LGS 0w6Kq T;;9 k#{Xb2hSѴ~[qA*nW;_75Ś1.@/$>q/iU@M elZ:Syּ^ ࢣ%QNwaYA4[ f|g(ƍ*սr8sA`.PÕ5)^,&m`pEOiG^*n%aY]UnW էղ,`B|9>wVVTI/"2Y [ɨs*M +Y8꒍%ӱ˽X$GQn*?ǫy4$ybA`GOKsF낧Zepp=\• b +C-ޓyeXIK^HG,ƤT%;HhHR\; W{h:=bkL"xG\Nͪkpy`HF&JR?7gg-]an`ofTG4 ,*~C r{\]1Wdi(L K +,jOX17+j=hlr9 0:ՂA~c^$\lRM\ΤW884b;uhC+s+p>"-j6lLw=n.D cwDQh⌆54)r'?ta޳It].`3W{gqB]]LLt$HZ׳FBaP" 3[l +endstream endobj 2318 0 obj<> endobj 2319 0 obj<> endobj 2320 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2321 0 obj<>stream +sn\m=T0eNm7gTe /#Ñae 8 r287B@CFRfׯxhCmܟaPkٽ2ől|)ȴ1-y" GSʮI55<+v6!W[$0%KQqgS +KM +%O +[+An!He\VhTIllnEcݠø>Mbâ]59.y^j݅|c샥c`Ƿ$S״c%Tp 7dꝍ Tyrn0VJq ѽ$ \KaTB?LG xUAF/㺏%BB1:ʒ_'2DN Hˮ|ǝt@UFUb3\tbIZv,qaabsj)[ַ6/?fQ> endobj 2323 0 obj<> endobj 2324 0 obj<> endobj 2325 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2326 0 obj<>stream +lqMӠ8o=Mքno3 @6@U̶XYzQX"pI8kt9VG1fܟ/Xf=r W@QՃQ3E= +WS?Ɨ<^DFl~$O+9rwC.i"^&9ZaĒdK$TD0SGI(iCu3;I)>zS ~ZX&$18Td :^8Nm]Q!^+ȨNh ӵϿm6 wJ}΂6UU8Cp%GyE:I P^5FH'$6M_INǣ&bb JpF 6D@ WhqFv56١4ur/lSM(`ni3p)[H.Sq u[3H%ȇ&:lY:S[N\D|? xcC #18Q-CI9ŵ:5KZXoPh:i9s'o=\\r'7e3"SKxSdɒrۉ&τ+TOWi3 RRS>VķbrD͏qd|uɞßY* j^,3"ML +endstream endobj 2327 0 obj<> endobj 2328 0 obj<> endobj 2329 0 obj<> endobj 2330 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2331 0 obj<>stream +p';8_U2 ©m5$m|Y1,]&PY`VHս_`𱩱 +op&~X'ȝGDKq}䱲(].RĖ;Q} 蜛)D}@ v$Q7ت# qn[ˠy:R)B ̓U7Jz6QqmpUY=IgCPM?`8UE)+H۬D uXvdLʎnCaÞmxk$--/l<m bEOÈtta|g>y5Ot +j +sHH\:. +` wd ,Kc,E޴#x}ڐ7~ /6ď8 +ұSOuv!SZ9+ GmքM`0yJ<-}Ucn~h۟o)ʬB,Z_ ]X~. 5jV!4yiBs@Yz9QNq[/z)hv2m1|u'q#HN~>Hiv_qmuE Y^cTVjzP=(:}ojݷ] kxF\C:)Mq`kws{ ;+G҆cQ>o׈}I=$ B4o{I h6/H;=ؑJ){x3V -w/u{#qu"˾Z/VM3bGwfxduFH=kp/"M!SՁZZ@] ]M~B^h힄znfHk7}s'6;*}*c곴AD l^V#he\bvJH~wWg0CDjNrM[X|wS#j׀hvUQ6b nKP|٭"<ſOԁR3e葑QBz . ͺP,*nI NE&%+*+=\ +endstream endobj 2332 0 obj<> endobj 2333 0 obj<> endobj 2334 0 obj<> endobj 2335 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2336 0 obj<>stream +4z@ 6]̯F+qOH:Ǜ-E`i {]hRٛ,SS{K&VzHd7u[ƦhchkiW:k؄^^n%JYIJh[ +A59Eo9*fSH!.Mڮ\xa޻ t^JH7fal#~jF] =H%[H`sx7#F)f毇o_{aڡ40kJp̨?c:+%h"~|4WA>hؠV1g&3+NW>0:\i55ޥiS8p`w9m& qc /~֬PG$0ڷ #Z72R)8V1\UsqkB"a=p%wUKxζ{6w>Wfs])>;r SZfTVwGAZdْ!@phQ4(Ki:qɿ<]%O TYD~ߝw>~=6!.| $jmz4EufPiah;kIsW!#J8[pߢiA ZM:H+ov-ȖV'}'8 tcunٕI\$ +m/맹1:>D>)m'nbjfnp!Hi$"XJM y@鍋~EΆm`R[Қʚ>9. &WpWY(->gq{lSс'q:וo]p^0xFGCzuw*%,ܘst1ӰC>;hLrjF\ ["/] +E{@ +H#0*?HCL$ڹf[5DLv؍1#zO--A|m.iJvU 6G)_LKc:{`woǷ$':V؂2@*GŢ 0lK +endstream endobj 2337 0 obj<> endobj 2338 0 obj<> endobj 2339 0 obj<> endobj 2340 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2341 0 obj<>stream + @ʛ~4%%屎8z+MhWNE{6ZI+M<z'?np%S(&#A,[J9 '_c/"CZ&N:wK|NC[/[ cRk8&86\"#t\ia/efM؍|*Pܿ_: .Cr)#p^sa̫@ǃW{,TYᖚL=F]x|Q:laxq&ШhGylj: kK #}bxY +]ٿ.OBKld#no[̟Z$ .Ri2Rͽ?ȲXWBMO/o֪~wp$_Ɲ~ru #K`^!JC1q"+?.JEXv'K,ݿJh_QcRmےMI=rnCA'\x5cS\U( 'nlZ +mltZK/C-Da~OmKş[MeN4砦m5iJrD0Җ8. +:a2{GQ{rަyEdUM¥vQ>Ow ɔ*5ՁJΘ4%=sc뙁cf0B X{Zr;\`H.b +12R,x:d y^TD( J>_Y:@ͣ3óbrO(_ȐIfJOqcƊo`2O;pqbPb# ۸"jͫFڑde5`?Oh1ja IҮ~>k8?d k&6Qr_tmTӽ"н|W@@Q( b'!0Ʒ dmS+yEB 7pt %8c%Q=1DU%P։և1`ލ%?]w$ԨknNAA1j?iqߣ +endstream endobj 2342 0 obj<> endobj 2343 0 obj<> endobj 2344 0 obj<> endobj 2345 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2346 0 obj<>stream +aF! B}UI"8Rh1$%A&gmZ_U `sL]]q,MӦCGƈ]/ZE=:Jc%KQ[+ +uAB]TQV-w9:`d2<"HtS. }FG=@:LgwZ0;H7PfOlZ(@ERa E`t"tueb.! ]M^C 5Ũ24B +U{:yEe[PQQ#X$N1 3Z3hy>sn[Z^\q:RLR4bMm큨mf,^N{2B~uvc/i?pz`}"( 2{1 /Ghb {=uI}Ō̺7VhpT'(3%AF y}Is+E>o֔S&@(qEWDqLu#<{=|+VeoDXz [ȦM8 B0tM%ߛ҅ yRyVikY4M + t$܌zjMOK)$ok +s]L~t"9zx"R5[mn\[JNU@E +endstream endobj 2347 0 obj<> endobj 2348 0 obj<> endobj 2349 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2350 0 obj<>stream +Ϗ+υ}|<8RR3I#+T&s dWJ(p$!3pIshoJx +,Idx\K'LD6`wMV5S݅ g#6~iĭ'%fy[t'ZƠ副axSuT'Y@{Ob.rYE~FFN }@܁ G7NG} +if*҉ j.I 0EdmУL~)Pb͑[6+^,>ˉ`Z{p< k&ޕ |]h7/H}B؝A ǎ7P̰O~2w)؋d`[=>@-l\B0_{HlJ*hBLd +R<)J-5fUq///ש8Z i6 )M+Yw8 nE^b^ ]U@_sZԍݮ&'d&Õ%-7fpzR? |2YTCMȈBvMHDK!ZMD [(KԏtH+q;"Idh0 :S ?R 螸(+g[%CJN> endobj 2352 0 obj<> endobj 2353 0 obj<> endobj 2354 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2355 0 obj<>stream +?Y: v0uto }A8;r t "Qd]BƐSCbꏠ(1,W)5kh>Mn}()k6<[߷LM!ƪ֐m)zSv4Rd,|ha/^̡1ȡ&$>rbXGJ "ʋԌWQa'b.: k$z[Hjuk'? J\q[#QdH +8Bv䘿ң'~(SB cQFv^ɁMI[A 6**dvD j/h(obo\, )3}^f.x_R4Qbr4](LNE0O%U vE&uRRt +[P# ]&kc&Rr +3[ r)JJan=翿Q1A#]"P?$:ɽk#Tјz?;ˌnTɓE?LM9bda5YU&|-agqO=CMM i,p@&j~,#2o%:e7E)J[+&/bCa?KRT6GxCi.d:0L +> endobj 2357 0 obj<> endobj 2358 0 obj<> endobj 2359 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2360 0 obj<>stream +#퀜9&΃`"2fY")x@i$F̽3;l%YygDT ~葏P-ȇ6ˀlD +(vpYGiu];~~!̲-эCC24& XaɠܩzO=xwɉJCS&4~B88 +RdE+Gknx҂4iښ(%(gZjR3 g;C#? uuKX$ R6%-gJRA˿,8s+[9[m̆]jT˥ hκUC9`="|}vE2֗у۞[P#󯾴#L{Xs}Gglm,!Sca'K6x'?.0| " YHJԨ!TɨGm{FHxxM#Vc#vu76|zeWxIL0!:HW';=}o-s |vCm/Y΍{/Ԏ:#;=˰$\*O(t}} 4V&z#HaxMssK-::wC]BN6qΌ2[NopY-8ӃtUH"Aض%B]S7)j3&1d?3/r.$Uik77PJ8̸v G@@q"ǔz;Ưn evK5q c\^ ɩhVx5\ojwl(0a὇ +:_1`Nf*F!D O+=liƸa>LfKvBm}"3Oc3,_69g!wp9(5@ЋBYMfOFq_'=eB⁜!P//{|Lou3<q4N +endstream endobj 2361 0 obj<> endobj 2362 0 obj<> endobj 2363 0 obj<> endobj 2364 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2365 0 obj<>stream +YSSR'оaڋ!)l7gBzfn֛ +fxvψ屌|sLZ;:2.Mse|,W +[^6e;g*z g[ˣ IJ}wozNtx:n%RKTN< ),ڌR2[To8t,R޷E̕@wZ~[j1ґPav]["]t??jG2q*zK\wOӂ^KVYGT?o]NriBV!w1=qfWFsFul1$u97[7׆(Bڦ0#G,KL>nMh͙w2Iicp }@~%Љ?dxR}&V_~Y/`wNTxwLxv@[Z%UfS;x&/M22"+ކ<ˢ5أoʼ;yzr*?Yu9X{^Ȕpq LV:/F {޳&T}blHyx\R]PSaxϳAF>nNiٴk"W ,;)G15SԚW6cP&P}Ts/q?Rvn"$m:okl +ڋ0DG}]'C ;2$-ŨDIі5."ŀ7B? +isa5x^bYҰK~-d:َ9CMFUPuJ&.gjdCQ +&H\ݻ0 Dj5gm׍> endobj 2367 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2368 0 obj<>stream +! PY!#ιx1l{/C7T7R1Wf^dO\z0Iunئ;*a_}C~?xzzsVk|*7d8j]̫.씉 VRx3x#]THEeyC|,(OV tAlƃ7P$D c렰fhs;cim1p`L +f8ClSg"(PLb+08]K eVtb|%xڿ3huɈ9"+(`[ep2kK͕I[a$xs';V-|sdd3z;ag +endstream endobj 2369 0 obj<> endobj 2370 0 obj<> endobj 2371 0 obj<> endobj 2372 0 obj<> endobj 2373 0 obj<> endobj 2374 0 obj<> endobj 2375 0 obj<> endobj 2376 0 obj<> endobj 2377 0 obj<> endobj 2378 0 obj<> endobj 2379 0 obj<> endobj 2380 0 obj<> endobj 2381 0 obj<> endobj 2382 0 obj<> endobj 2383 0 obj<> endobj 2384 0 obj<> endobj 2385 0 obj<> endobj 2386 0 obj<> endobj 2387 0 obj<> endobj 2388 0 obj<> endobj 2389 0 obj<> endobj 2390 0 obj<> endobj 2391 0 obj<> endobj 2392 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2393 0 obj<>stream +؆B'$S(\6iM~pkZAq v^| 'a+bdY@.ND9M>axKC)frL@*Кu5$p{$kls`QU b @zͽ^(̿?=چNZBdȰRAމp pu Y9&SP;xCbJ}[ym.E; OO,ё\*wڧ7ӂpGؖMpeI,x9Z8{Zz6P ªDT(>1*joLԾ'.T.3[9 FVЮRqSg>[E[yAܖ OG~RX35.ߨxfvEa@Ἶ.?cC /-Sc:E<UTazϒ䐙nHM4 Ӹ&3%Cz#57o}p0rZp۵b^_L\KԥGc>i4tSBoyFm{G~;Љ!UVZ!@J$( m~%N- PqVdd7Ƽn3|LClT|b ~bsk.Ub 7sI`R o[4eIڅCu%5vukcvK03y=VDD*w Ct#c +C:"h=F3ÌצT!7Rka"ǖ];t=KcSF=En!ix0'Ł'RY=\e*-{jA W]{4 \݄p;mqt0@agRygצNƷ)#bd}nW̘pւwSnکi|OicIg.VX IFbAom2XE@WOcgB _Dz)ৢOn*êXi+, +0! L ?8&:R>SVhMkXS8dj-(ʴ.Xqj~7#j֥|whu%*tXCI15 | wWL+t4T77&=uy["XVLmcd-em3qD{clbt0!:ƒSS',7sp}K*-Hͬ.8yved;j֏]R"QB`Ұg? J)LtЀD p`FxcASS׃kzzbg }]{9w´*~Vo_X[!H&*x*?`_R|La2HPT*̙Aiԋ*^f:2ӟ+8jNNFkއ~1ۆ؊mjVNqBAD +YYZ:MJ>;Q3UNxje3D =ؖRJ<%-djj3O/XჂ9UyM74}#.\뭧=9.Se^cyuξS> >%%R kX}juŇ8})?2jvhT9lyZm߶gECi-po/)0/VuSojk|R(۝f4"H:Vɴ&Tzvs#f&b!$]+N1VSwUܙn7FZgu-,ˁHs48՜,Y;l% Ec̎ѤKXr)'(HaV<6á\zY"brsO> +ku1=Vk}AjnEFѲz[Œe W*eM|Behx ^xԕ&5nјT]^pgWZ3=D{TO^ب+{J֘3t8; W]q wp 3֖?OĖe!ܙ->mM$Xž04#ct߄Us!"GUQ1ԇ_-:C4˳԰t랼}կb:43>%;Uň.v&cT@"hjRgd눓.R??f m|gvS6:WT;NLIR:[%5YS +BIJ>_1,$ 2!ׅ.0mjGwqҊ۫(Hnz^܇y\oS(4Er9 8F5A,q_A>cYz6<:I/`c㡺8+`">cUQ;p3]QbyLfrdQyFDgp;M>ME2ۢY< -^|cK?oBKijTR[YS$UsUe1˯8R\c#Ndk{@9 V#bv2p!sjji >QB<Cr0("A2]&s͚d7q Q=H~rN~ 1i2:RiUJ_ {wJ=<6(gdh:ـxA3 }uk{Ap76 +ZE ++fS`c> ikO" XNCS]0q#5i>Jѳة"n}t$LYh ;C9xPA#Bo"jbġvs5 U +p޿-D"jl)5|96n/xeTzfHWfYV< +%t3(V{I%j" 6pҚF HS>%zˬygs[f!\2,uɉ6_=45Y }3j 9@ T<:}i> F::G,$B +endstream endobj 2394 0 obj<> endobj 2395 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2396 0 obj<>stream + w%)=bi]0}掃4:UV=cF6zPz 'oxZef0:?}3xNh +[.N$&;gL{ r֝Z0}T}Yka-@BOA> Ò-oB_xMX%b+ t$}I^=ߏ0 sZe[s5 $]#Uy3=?o_ z*F|l #Gx-qiK<z>985`}KZ+q[\"µF:Z"OrE&CX&Ts@DV sȰP1} FҨ VhxJs+O&4tm[;껶8'DGt ^?a]hJc[{Z̳qS?P~i8`ke "@%-M54`lI^ +VG$/=O愩1{X2Z63G/WQ@(QiYǾ,qƗ= M9ev}HO~RU: e +ʸDxO|zr3S+3\aYGzd-r;͠\SyƢhr& 9ŞӾr:<dY"ܢ'"tl[%82 +endstream endobj 2397 0 obj<> endobj 2398 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2399 0 obj<>stream +,*>il3@#!+|dAr "%# `Y8z¦d$bS/ɹ@%p |H':"7aʭwMLʇE="L*VMUR[BnmJZ#o=ElX|ah5-2tUc]`s;8MpfP~Jџ:"G=5 ewnW>čnPk~+]~C*t&L= %ĴךKao؟&,8ƅkBII:#t 32O KtD=-q +wWտ=8^~ޏbD(>Yݰ(_>+_IsdL~3I3kҴ q tZ-E -y8pU)Țj'0Z7AD³axPUTG=|M +}LEtWrD1|#thZ,jj& }q +eư(1w'y֠_DySWjv`ш {—Ϧ**8H^7.|TW}FC3Sa46Is'bBW!.T}X~nw,WI~% 7O e6®~T< #JW=t:i&.{ CTdͮ>9aʈ?wɊ/wN SZjo5QZOq \vY +]I>SmzwQ3RR]$k,XɈI. -UQۓܠ}{;=bT5QktEA;tJE)UǙSGQ=,Xp1Ң!̻MXR͔f&ty66RZ#wtmW4Q) )Vak} +endstream endobj 2400 0 obj<> endobj 2401 0 obj<> endobj 2402 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2403 0 obj<>stream +GSSL.sz%,BU?Ӄ5/`Md)$gyal%ƪ50b&gf*gFUzHFxw;_㢧#88Qݏ?ܳw#9 +pgdΎFVA Y +gEh[ \T8K9W`L+`>Fđ|;Of߰YUa\+16-(cBzu#abKRfR ̿}j8^(>'PK +>3$p pTt6@/68er'P6W*x#S|xt`,ɮԤ>Ӈ@RE=ۢ)szh$iȪxj;*`uTJl%ar9xLFټ"KuiN@~/tJQDT3Qp^7ګ/}X]R4\1;зH > endobj 2405 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2406 0 obj<>stream +v2D "a8%&y*Т'\z2Ķcl NG4A$vC]uٙ 6n-236gLڮ;}ؾ\tX:l#֟W{\vHFu:"|AVes$:ܬ-Rt*<*ݞG!pv#Y!c󡕂p_E4UɮXO_XV0>S{wMiih)hkx w<1Zu2DaU'g." .W,NKAܟ,}y|'I + +endstream endobj 2407 0 obj<> endobj 2408 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2409 0 obj<>stream +J/d-k Te^7m"Y?Z2&%s&MHZ?I&׺U.Jcp@"8Tؤgr +M +,3ȅn%Q{t~A6D \njcYVhLch4x3Kb>dk9 l'ZK+݂qȥte)_CW7PՋ$ڄlN1Fl4ِk7ƃ~KB& cӗ_ӻzfϷR8i*K!^bɬhm\ .K5u}5`2&9yzen+7'1v +ĽEYZAnN[W@4KBV#Vgf:6} uOI8x/uěNOc1E>I95Dݶ\6ހV}bqܜ^"fؕ< ;=ʎl5LJ[4o fd\ߠBǺIgHx +›9 ${ ZSQF P>M +endstream endobj 2410 0 obj<> endobj 2411 0 obj<> endobj 2412 0 obj<> endobj 2413 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2414 0 obj<>stream +Z,ٻjsgq`PSQu&jSn?ߐp,ETh4,R.$+yrJDT7"PICu /,|(dToz15R jg{@NYEDlF6( R +hwɬ e0t3015vny>SmZù\dqX+p#dEcR¨K5E$֫EO|ӱ@go !&r紱B2B!nJhx SHEi3mƖ"ޏĻz!3w!XǓ-͖5ڃ+euLl[$AA*T,.|tv[t~QidIԒ Eǽ{^7>j;ȸϵ3 JH(AX4h (?#to b y"ę )gjBLx#a%]*iƜ7/ Oa?ǵYf3(K\/ G`MP4qpz2ACRf}3 |HC +d[QNDltSj +_VC(E5ntC +Yh\Qn\U: 0LGQ~)ɱzB:⒬|}+=ً{ƛRWC Y;I3C.5 V=)(>Iu@Vlb^!+/܂gNөOb }E wy1Yv/ +OJ2Cn^I)w!fROC,ց v_T +r;A +Bѽ z@l%R|o r4J rc?ˇ L?w "APhU w^g Q.贛z:dXSyt6S: I$[rtNk/d4Tv<7Ӥ&.9^Ҥ}P; #ɒkHQx jd` }M.nsZIMDIF PDOT76vXZK 0Keyኃp4b4LmGC7N8]`ԩ$rе9x(f/UYg .۲ +endstream endobj 2415 0 obj<> endobj 2416 0 obj<> endobj 2417 0 obj<> endobj 2418 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2419 0 obj<>stream +:-(VDٟHS"jua@`RAT=_lP(*ڇBK6Om֥ ,+Y6yWrVpHA_G]Hz[M 6 f޸Kyj3Vs)R(}?4pi֍ ݼ?2ҥjiyv3d`rbDcC=-ﺈ7<~;LAw +놷Hl&ʚ W!{}HX\Īa)mǾ 1:u.O#=_e+qMJ Ys..FHE,vh3J՛ ß>#5W_ XtE4/<߈%I`S6{;l!-q%Ow`e^Z}dP 2H%+_O7U$r/1]AvVcb9;z5 LF̓N`DCna6vyG]M!lV @V;rU0/.ϔ0͡t߿&I6C}Z>%KXa&UTi̡H@pD )#ŵWhѭ&/yrjfBoiE{,2}e1t з+Q> DA˃ 7G$L|?Dۏ 9[0T=_UqSW`YLhG]IO/4~;5۟7 w߮G~)Irl>g.mJjFFeU0l;GshZ/ ̾[r'4 lCuVxv(jĩӞ).S7ItÝu Y9kDCco?9~ϩ bA쵆6ƟF;L;$Q5q)qIHճFI~6ghG%uDz^c%dggj%urFmqFa{VI W#k܂b[R +endstream endobj 2420 0 obj<> endobj 2421 0 obj<> endobj 2422 0 obj<> endobj 2423 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2424 0 obj<>stream +< K8+`%姘A VPn[45mI&}[\7w%Jk1~)Lr76aX`H*)Ϫ4 gݟ߯;#r9@RwMkV>ӘIouT uYZ%%#Fgo.w]jxU`dd4CAb;i6u.;0nԛ&$^S?J3펳? qd]*HVdaxKOgk+YoFO5} 轀V*]NE4$?ZoI*y,6vʼnQ\ąFQS8Ƙ}YnznB JZ/ ,9vў+5isD j1֥IÊF~JGY%@L=COĆ]oN1\,V˟jg~q5]b[9)uC5>}&/?\8K,n̙ua5}C>r KlKK"!CH?OuGP4ڜ#`))ב$ `޺ihG{!B-YkfTQ%MAdTwfc]I #1qs<2{J^Lm1JG{Q=VevkiPyL " (;щ[6T4iLW%4H@60b⍅Fl (\呺6}:Bx01tK^(gč|Ѥ1D(}Y<}۫5`m 2+|Q~ϓ +endstream endobj 2425 0 obj<> endobj 2426 0 obj<> endobj 2427 0 obj<> endobj 2428 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2429 0 obj<>stream +5߼Lef2xi6  SR) +X0A꣊uDQJ"0p.zC4Q O~ZM HpN p7}x/KPOS %AsRs]fnY)%SB S&¤5%R1KO)_S@C{GraY&.; T*ƱAq=( dݒ.WЪXhEp#0(]X4^\ZTEko'Vzrсm?c(%7>ED=i膝7C Qê +1ܛ'tarYA[-F/7}%KH't)(piڻh"ɕR&mĈ8C-]ߒƲcreaҼ+Uj!2RBf*Tkw(g){洏X;w;&0WSBb^A`0l.?hju0MUKTz ZF\Y--Qtsat&M,W:;_C5$&c}%w Bq]f GwF =GsSjAy6ɶ^EvYRuYǘ#\}NZTrJhQ;Yh-uow `Fo4as\e!uWSdM p]K͵lZ*E$DzNg*d xv u#(ӂ 'W~WRsТ^G #ԛ&a)6[ƁC0:(Sqԩ~C$=2!O,\҄r +TG&6צ X|/VJK׎uhmMB9  #[̎]A`<FCƦD> endobj 2431 0 obj<> endobj 2432 0 obj<> endobj 2433 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2434 0 obj<>stream +$(@KVZ桙:,hQ"!H`:gaz-3^=^j}gO0hUś޵0B4P!ڢ1N\SBG1n#vNJIp V<i6:^h +:o!Qk>S.bv+j#7{B]-8b<}Wt?!n阰)[DϾs+Yijߖa=dLĺ٣_]I\_LŴEDHKf$Um{Ų?JĆJZ%1mMbC]1Ij;kآ-p*.{(+w;jY{̔B;Mmasyh 1|/Uඒ>a5˕dFCɔ/k6`faM;?˫oZ[nXv)!A]QGw@9r#`r +fd!=KMXROEUQ#;ʊI,\=:m +"5a}7 ó#2 uol:vo"4Ǻoh#{ g uyA V8\0JM>㻗X ҷ^*5S?DU;1U>9eTs~MӔ69cgXqU:NDLI6Ugܰ5S(*|/\ArК=f2(%-lX^ +endstream endobj 2435 0 obj<> endobj 2436 0 obj<> endobj 2437 0 obj<> endobj 2438 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2439 0 obj<>stream +ොZ%]CCX>\񱓿DI)ӐXf,~ ]/*2sU1XkcvlJ*,`:pEꡊjfѵX76%5]JNn P!Xک?viXC$]bK41]Ѿ[8dEQ_2̩Wx#0O~gG? ȩҡq+/\jݝ4(Kj&ùØ0"8LTS\YM^_E{"+P,Q\x@2=G+YU +2Bg;oXw^df,%ɶCR;O7bO$Daɣf`uTf~} }O +S +N!{JQ){e=obl N +Ž #0.^^MZKy6*\ϛ-^eN œP Ml2c ,VQ=quut}fv8D߆+Sm!{e|ev>k'P꣫0QՁX(vHTgf[LQ ,!w]\X<)5㶉I0LwK]D \s(Ƕۇn!.m]4ymnه>#ӈz,ѐ\C^țCN(Bȩ)ޅ -ʋG +ĸ Cŷ9 O{%4/n߷NSѷ +%\2Ky兂jO)5_LZϛĵ?6gN"+s;Ȫ.#fKm\Scz=k$mm/C +endstream endobj 2440 0 obj<> endobj 2441 0 obj<> endobj 2442 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2443 0 obj<>stream +pFS(Iy.[чv "49/.zndeH+:b++'c:WͿAnPڻb`m9F#_ARX?s&á)+,Bꚃ<㦇I0XХX,#Yȵ&߆R#*'40JxNŷl | +7{'P9@][v`]Map1_idK`)J֔cviy״:Ɵ\ki'fSؠ¹Em:j yyk+ږ!5+R#>U:oDF%T7fF Cl +-oXJh0nzUmGGXqIXGE}ި-Ql+9RHlV g篹T_ k2 !tr:@wXUhH*},k"jKYZ'g Q:LJSlbw;k`bjBbQ +;^bJ%"/Aq(rͭQTZR8(2OK`=$ 3R; wǃH> endobj 2445 0 obj<> endobj 2446 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2447 0 obj<>stream +J=>^C3ۡ1J?TLb տqh]GB +><81 +7.` %IcϺ;aSkE3VqMc丝%rI.st I1g]Jsڌ\I0llrL~w cO1}ǝBAѢ^kTt^}Ļ)WltQ[~c6d)~0ɞJb=i^ksGPZ++mm /oc*cr1602mxɎEK-ʄjʌ띂gX}L'&f4ؑy D7#Lϗ#? +D$ZdIW>[:+ۂVVJE8^hBT%V鐹.LLZsS{,rj(~dVo~S'0㎔3EyjKŕȘsǨ3T!f&r截 'Է5=,{C҂įH:-pg((3c;&愁@G|󙣴bx́jԄ2/(XYJ7ίս*2OliNxk΅~l$2PJ&a+$?AoV{-lYӃbM۬-6VTT4lFIWiMf 2)}rt/ڀ0FH5D +nF).ft41~A7.N^O?\WeKhaLGyv|XtW-VxBEb3Yp"az(lrs'"XEqp~U-&f # jDdCG~>"bRҜřJ,hqLY;*5&x\(I̅<q5bfh&~bV/МC33x0W!\=|&Sؿ)X( + +endstream endobj 2448 0 obj<> endobj 2449 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2450 0 obj<>stream +=;E\Lm듡$pƳgJ*k3\)OtyQr1H.2rtp3*~!4b8XbKڰ1lZ&JsVZ*ߞ7hZMZF#a#ب(©wB@.H3H[0W6J](1e !=\V1nꓫ"2>dme"nOcJvG}>$ ])'|@V,P%RZUl)Щ2Jbf+>YG.@.co"7IY{o5ǣBu+@cVb`dj_nfb g+.# +vZ +,2Dt[%w*-ylJ]r2T}}(//hS8˳ 8 _?DmQyKשsEY 놩yC}5Ԣ>~$Ëa-/=}+D\(q4gmKoSU]R^'?IrΗ#höEw lt)E=c:;Uoe ~4yQ +pb@4AU݂(W:Ox mE/ +lBz";GnypĀc,̫lݚ)Te&W@0A*Pփ u$蛊+oOhxŔ%6McʏX?a29@݂ +endstream endobj 2451 0 obj<> endobj 2452 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2453 0 obj<>stream +䭸bO)5wOꔳ}?HY ^0z 3D{ Qp\Hw0z15N dݾ݇whfW;B8(|k ʊP8Jn u৊/j>GK7 QN䃏o z[t3`2c& nӀu̽>D`AO{V} yq7I +s`E"Qa|;l췳?|һ +w<`n(p]* Q:>{mT#DW+,;"!^_{wBȏ9fܱѷ7*xfS td,%EYf$ݣ`6uqpbUf(E$/ozgHhy@1Ey!mJk8M޼ Yki';Sx ӯ.Wٿak > ?w| ]Ca01gϲO%`?S]:WStɆ(mB&yok/a..f}<(mg|WucK #Wͧ}6_a j6++5Q9za Zx$]sl֖UZ1i$GRr3~7Lј>3+zO z)Xj6{ƳV'K!cw6R@\nBO||a0)'L^oxYG "2N{y8Xds u*9|3AF9m89 xB}Kl@0KxY1+́D*.]r̒'V9CΨ֐^/LK5;Li( p9HȻz6pK(9a;L!07E5e$lW4tÇF/3N-x۱d;&LB2"oyFuStLD~]Z-`SF4ה9 P|mQ=ԧa$~,OVDٟ]#)rHGxDܬIJ +endstream endobj 2454 0 obj<> endobj 2455 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2456 0 obj<>stream +_cBdȲ\vC=kTZxpʈpJi€VoG] 94 Rڶn"5)hC _ RL:"ʍ'#I{InsU~]:IKG{)6Ru?YA.cدBq[b0yՠQ[pycuͰQ/xQnIϮv +.;(rۡ4 Z7./+Gz1&4\]^q' 1wEe3-Jp~7B Dg=-(!Wxɟ 92Zͬa9^VaMPW aٕ-r7pQJǗ +0KjhVo<s|uka7e%~T =D2ɭboOo@hYYkD"Ԋb2 T2Ч *U7pnGlig& x42CڨoG UM똘*2|?^9`fcCH9{h c UkP$ǀVϾ;̺mV%P p~tb10\,2 c#dPf$ ]aIו zSWA"e&{[jg>͹!~1zж7x]@*1OJߣu/H*U`o=~ 2k., j\MGK3'iI Ts +endstream endobj 2457 0 obj<> endobj 2458 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2459 0 obj<>stream +GdL@z,N%Z*uHP2-mR7\/ Ҥ3_FP~Bv̜5\hdmUM9'N[:^}V_r`Z޴a8"h:Yb'<:FTV#L>\)8g8YOrQmH%i +?U6{8N 7!FdgqC:i h~@PFN1вWgtY6FʺCK)S?ե^0k4{Vd!:{ +QJXxn1ս8.+*ZJ5iy׭U+9sN@c.$==5V(rsLI;-@-v(^gQSxֶ$9Q׾Q!!0H{r#P.7 {BAs`eiw5nySjF=1w>0 o6bW59N=>f ÚL [Va \z<i /:&vj; '͹s{}yx,Crܡ/T

> endobj 2461 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2462 0 obj<>stream +[HL/䷲Xya |1%'qs:*/#"˴ٓMM ?;V׀#T#.EC:ánWh <d kd\WL7S Rq]\> g>QDn *Aۤ?14kro⸐(-(kɼCApv|I鹞;QXV0\0P%A"}3p/VB$U4zMkm>Λux׶'~!zmOqX$?*WY'Ui(b_OL9" 9`I *9} +;I^#= iC$ 7RS׬ihiIpn%#'Eqfzjmnj\XwbO7^SϞl z\S-U)v^doZ"'[cٯ3}L'=9bcf]XsZdQ: -!ư<1G  ]pl bzG 0[+"G[N#BwY7m qea<S&ē^T]@3D:U? +endstream endobj 2463 0 obj<> endobj 2464 0 obj<> endobj 2465 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2466 0 obj<>stream +I[C-׆dyہ rER)KufZu޿w6J5NK"(f5s lI]CxF$[̎IO;,>3({Gѳ(4zJ=rAGW暼fDLF43k>Oă]\pi_K/݆Ax>c8V*saҫ],$չWKLdƃVe&6 +(\{&i >!TCEUeZN)L8o?б3stISq^[^4Q:#Z3Rωl;n;ٝrw>Hjl S%w>حó-`y-.F]iaF4k$p +Bk؈(^ uj29*?jS%8 u>(+O6 sfև~uT' +$_FX~)t|g,9-ԿvEAIs߰r'" gĨt lkdza`% +$,ۃ[|| +qFӤ4zAU**Kߟ!e119(,/gƹ1L$y-w?.oYMbU@!%,VS u—[L$$=x/lgK?z 9S7?=q=~)ʅЛZ'֑!g5Ae %ӑ|DX\ ʲ2x'{.JZF(BOOfhon 0cđeҴ?@$|iݠ(3IsDvt/[ _`P{XmɗL'9|TSCa^ +hx2"}+`*l,nSqrء4q poгh2L> endobj 2468 0 obj<> endobj 2469 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2470 0 obj<>stream +A?f +EZHC{@GI66 ~Ⱥ\f'dJE(cBa@Yrc%ЭeQY:<\&-Zٴ z +w,0H|yl P@q9wS=l@sťċO!/!~AXX+ۗkGhI+vo!6iK}Afj *n̝oƒN1@ rh9* [DYVi?kިBX.a>3ty θe/C5,$%U~c4GȵYTlrIqHdի B{RT<[SF ē/ kP9DCHjTGэ^`f .shK>eԮ8~Z9{P6M>E6K#cO=.lVR, 7O0J#aҟυ|~oࢿ\UR2:A$<߸ %iZI8fj bD s +7E%t&@l]}Yp]tʪTln|U0E@B.ӘCuOWo]Zr5`0Yh^8U;,ޘyGeVKR!$+?YgT`xFDqn028>D av5Akg˯nYk,xnrkZهu?lA^$v`\!nPF&0>C,1o5\'}5MBUdOYڨ+4N}4`LRFƽj29OׂO4tc8q}cv'&ӣlˆvTLV_+gˇ`WMuJe-5s]%aN]%YZ +endstream endobj 2471 0 obj<> endobj 2472 0 obj<> endobj 2473 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2474 0 obj<>stream +R.`  5閘ii5cyNLAb_PQ5!.c246ȳƆD on炙t<_4Ĩ!(25~ڀGL/S'îX\4>[LŽ'Ix]r(Ľ^_[Z{Wy-\zq?AOƾt(bBZl%VC$CaZ^ SAƇVA"e.){z9Y=g>ku#v+凎8h7!I>涢j9~851W}sf/ 2`w3:]}~ƀ3y"a}ٰq_1U|^\5t1+[bF Du{CKyd3$OQp:^p}Jai,NJ|Tu:s8||4jl +A8 Re½ o:ôǒAT&3hZ)fDݎQlŪgilRV(^1|ЁNz6mBSӣT2a{ ~f^oƢ T +N*%t3sx6ЖK2y^"1G91]#byB`W_KTx> Ea#P)L=6nU0[)uyzBB/!Kk ^A**2- ND%h\!pq^͎sWƅ> endobj 2476 0 obj<> endobj 2477 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2478 0 obj<>stream +s٬AT/_4NjjlY%anqc0TԺ3H̝y࿕#$J`z!mՌs1z0Z H%la843>qeIO#Ei~eC8dC$V9]-} u/]Ag~iU[p. +$ ַu}?ak@@g S:|@ZRFn'hs:<\(g7Bj<'5{G';RX| T3K|AW1C/NH;$>i]x[ɵ8\2Øt_(KzHBy0nd(h˳PT/^ZG8sG;Y)Oӑ\md-f;\6YvJF.?[zkh竦}[D w/Hz`10ShV5LG]'ݏ48X=RN<7:]1XhHH(ď--zŕh2ƯuVo}Q+ν~I ڑ2l^u@%u6K]y/*:rSc0AvF Pu1h1N:G ]Y6тF2_,B),{Gn9Jk># +endstream endobj 2479 0 obj<> endobj 2480 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2481 0 obj<>stream +jGu+9PUzz:N](~w*'#V~cQ",_-љL6[xɜe*Y!}tZ-0yYaiG"?et;ihT|`ʿe}hm_ +'mq}~<. ?ZP<\ei3 |FYU8/ i߹*Rl Ilj+|G^ 9y)u{[8 Tb1ٮQ1|WvA-6c?}8%(2n8X?P7773QDޘ{Ӊfn/Fn#GRн˰Y~D`[t +endstream endobj 2482 0 obj<> endobj 2483 0 obj<> endobj 2484 0 obj<> endobj 2485 0 obj<> endobj 2486 0 obj<> endobj 2487 0 obj<> endobj 2488 0 obj<> endobj 2489 0 obj<> endobj 2490 0 obj<> endobj 2491 0 obj<> endobj 2492 0 obj<> endobj 2493 0 obj<> endobj 2494 0 obj<> endobj 2495 0 obj<> endobj 2496 0 obj<> endobj 2497 0 obj<> endobj 2498 0 obj<> endobj 2499 0 obj<> endobj 2500 0 obj<> endobj 2501 0 obj<> endobj 2502 0 obj<> endobj 2503 0 obj<> endobj 2504 0 obj<> endobj 2505 0 obj<> endobj 2506 0 obj<> endobj 2507 0 obj<> endobj 2508 0 obj<> endobj 2509 0 obj<> endobj 2510 0 obj<> endobj 2511 0 obj<> endobj 2512 0 obj<> endobj 2513 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2514 0 obj<>stream +hSc +K jxCE )$%K eUa KPTxm$[Nf,ZGܓXZ?N-z{,N4 Q `5{>@ +T c>G_ lQ40s={|{BZ6й²MGx66`j-Zŏj{y&`Y, 1|.®s[ǀϢ1%ќ5T#Ɇ=ƶ +WWb҆$̄X2B|n]L̔ ,Z$g{r[4.|8K3Cv +z0ؖg^U!.v}2JEPajB'0R2`²[GRj 0c Hɩ2Lp_im8s3ڎ)Q54cӓKoW3Q&iq"bU_o6Ù-rCaEJ?j|!`2^Mob=Ŧ=h$'?`,YwյNwgoG4Fq45PFh0\K2̀*ʳ 㚐=~n)hէ"g~94\WUO퀯-s?ES:j$gX37YEP6a`;UGvq;' +gfXqx٠CNY~_yP"t.eRb)jM 6ս;F2: :9\4„ˍjD Њch&W3bV9"n%B#B3oxXN1/FV[qϭ~K!~]YnW/FC|Vlprj=ۭ -2w/B:<<5^#;{' +(%$\ [KˬD~Zw'xףPݜJu +St9ңbY= UJMY_wbB*[(+TRmR*J}]@0۟v ~gE,{1-.%<-r_H+~$8-1Q"i8'/:FvKmDu#8qutBõezDZ9kSLx pm`šw G/ ,̩r#3L/@ힾ*{>p$jqDS$s1z(ZKj%0!&†Pޒ +J +dak4n6f[R+Rюml7%B1$B߽v3fy4@ͱg!If5I]4/N*EqN8<xZjE:z8) ?OjzcRO:ҽy 󙕹N|rӵe}q{Q't1nρq˜L0 p\!()H`hE[}g)% fb`ДίΝ-J+|0#;뚆l7J^sp?c<"c-$eu D$\PYwZ5;S`{o}l~Eqf]J>8v$S/_aw)z$y'ifǛ`*¥_t6ɢYYHՔ٢>*@kҀ$CpK~)ʺ ?۬ + ]Ƥy9OrFe(ujoOsj G+EhxJÚ 0UNeD¦,|rG5>9U{MSf2+r0ȳP2C(]_<ᕠg^6 9EyyegxYp\%T>B!_D4;1dBn; 6aH#Y_yM(f* S+җL5{;0E޸Q0 2K㶱kD ` %OGkNY|6 ʊ`%7WdO?Nk|݂fJĩ|E*n,ǟpBGDHW/߶ 4IwK^,2b(\Xh7,(2"PvҜ> 9)ڴ|@Q m4D1jh#eL= UdU bIڒFdLJ?^kQXJ9MoT^@%uWxI7D}~gwa]E׏`peSAjbZ<_QmOd+0 <+z+^W\En.eK$Uק_Er>QI&Ui_dORR%O, Z=gگ{p\0 +endstream endobj 2515 0 obj<> endobj 2516 0 obj<> endobj 2517 0 obj<> endobj 2518 0 obj<> endobj 2519 0 obj<> endobj 2520 0 obj<> endobj 2521 0 obj<> endobj 2522 0 obj<> endobj 2523 0 obj<> endobj 2524 0 obj<> endobj 2525 0 obj<> endobj 2526 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2527 0 obj<>stream +=U!bcEՆr+PK3{ ,Cqr͒y>o*=\ }U;o,N}hޱ.✮'Zc*JBQDmXP*Ke14&"HL6?c'[!Ȩ }_bXF` CPuI:bz#A2$`1.z%1ɱh[X+5rnsvv۰ukNǔ[pHQ\w,%3 &vPſKa)"&XƁIq '鍐=X%R1-W|Ţ;jJسFl;( E72#S,BSTmleFl0ֺ;aSNj ߇ͤm\O1|(&s$3}A'a8Ѩ_\ϲ;,*jTPCDPG].&ЎRZsSH*juՁ9s\ZXNi&|F7 +) }Utek$8-d;/+Cʆ.y(%{ 421 #bYƍw^%<9in'<#t/ʰH3gP95:[Еa"vo=(D' B!BT#bϦ')Zxl';h:0aẠ^+tJc T$(3%A}wZZQ{iIs]2|^ڒ4G?s\m:?۬b@f)mnAFкFSs4PEW׏ Î59KL8-NuSK vpJBa+pz]>8BctUMVaz<7h,[CB0oK9*:{lUf%yز6[Y?~|.mk;fkS{@f1V$!♻I{k/(A+'^)2x`柳po='[ ^h6w i^Ɂ1w, Mz`5Ӽ,Yukn +endstream endobj 2528 0 obj<> endobj 2529 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2530 0 obj<>stream +.6)z +s~ۡHF+A`u>M" P!*Wz,Y!xI'Z>Zr>~́4eː:H p_'-Oaq5bJ]!TT7 `ev`w~| 9%u[-d8 F^@`LCb;꾮~h[/r2i$j# KBo*z;)s-\2 (CIU7Q;40zwL }k3'Ժ;?U;Fuap`Eآ0'oG(| +ըo@9 tszOHfBGdsZ%P3SV!F8`[~M5KȳjBj|>Ԩ +qhp!aL6TZĽCV./oǴ]J,OR[6u͘dlohUǞCJuVܗInyK(3bĉC㟅9> t!pd^UdّL *0D*OW`[ z[K\R]oV8w + +endstream endobj 2531 0 obj<> endobj 2532 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2533 0 obj<>stream +ԑouwfoPN,E@z0UHzILfZ?Ƨh7}.VB{64|6Ɔ(fPR/ƞbjf\3ՙP |xDco^E[j.f_|/u]>]uq{Ɔȧ +uojsnۭϺ~0hyt] ,FJ_. #>;L`{iH=x~>wFGg;鳝Q |ǕY']PJi1.^7ه&"wrcFE\P1%m9Ci:` ^u5*NJ$f}54;)^Rju>(ĵ#nHv2L֑[{ҙEhmaS嶲*' @x(ڤŀ^k+U11MHtq|c1"CL.#Elψ+o==1<k9[ +endstream endobj 2534 0 obj<> endobj 2535 0 obj<> endobj 2536 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2537 0 obj<>stream +,,w?ϱGk'+1^W|YG"׬ J}*5Z}ix4o!0k xㅍCM(cnIݳP 0nkGg_N"£ewC ]2eCt.t6òWJļɠV IRUAOɊ:qmsՐMzcW1nqR8bh4ЈQdݜA)CsY^k$ Ib8UlEe0`,WKV}NNJ.wTWh-xUB>ch[wHA9Xw#\e˪B!8W ZwB伊 !Ʋ5=D$SLd5(Ƹxg 3GMx4e'Nj^%Cb qKf0XN)<4~ki<]ȌXIm/0G@vXQ}7~Xւ縄8}}H#j~NAE^XP=gy+s7ȃCIK9#Zc⊕u4dil +endstream endobj 2538 0 obj<> endobj 2539 0 obj<> endobj 2540 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2541 0 obj<>stream + w< Cc":l9Hi%g3Js/ +&XϬM{\zn\Yhj>kjS11LK`hɠ$L,7cK##c)섇p|">ŴZ.3[4|Z8"!ŔU?礇1FUsB6{E%U So/~W3ni!;]:5cHb&]DXjmS ua*}uQ8Ғ!%)3J7]mP0+a+c$gQK`?/l̠gv=Ȋ!ߴl9HyyilJݮVj{ё~~D~z'p29(ppѥݱNۆ +8y ]4tN:h̳]U_bݦy*=f :!v}yW:M^ ]itz9Y2v +MXՙeV,ݤoIn?'x.PyZ f6('4d@KdDsԤҮ/ғ k^\:PTaGOR +G xTبNt+r^P F LrqE]e@aubIH# BfAhZ$ADrn'C&ެc24яs?lkax{JVM#9Znת1e̶@r F)`WNΣ' hi⍂Q8mFci"UW'VJE9fYt4f]hS 4G;m;,u\W qd%zB %9.vA 0WDo1>Wu +endstream endobj 2542 0 obj<> endobj 2543 0 obj<> endobj 2544 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2545 0 obj<>stream +D`5:5􌝧\LIiwLef=p0(seC5:tp*g%dMg~9HaBSm|{ SSJdp9_2k6#:rȩh0r +eQ_ڑT25SLZr*\A~~ǀ^΁@yk(Z,7(ty@.^Y,[sWқBeG_DpG߲5,>;0v%WDx( 2V6?d*3 yrISWZW41|EQ +QsjxůO^dBɄ d1i_-,$elM# TwI_&+P|B$}&yڙ2Y&Թ1|>L_>iIa\b6qZe♓Ij|c=!:?MCkiʏRt$8Zkw̿O0K$B:SnJͩ.^sꞍl+V<>co>q#^oӥeg!??2 jHWg)EymlS[8S4s94ߒH-M/ObegsI 57ߞ㌒t!pcP8iA SA<^_a?<}YQ34{ct߄їѹ>kOP³;0&UX~L I87R@?a7vBN}U4z vb+|L^cAoF&>gǕ +:7 U~U +endstream endobj 2546 0 obj<> endobj 2547 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2548 0 obj<>stream +?@b"B1g[Vas$u/{#3-ĉMLϻDu@Zˈ:|.Ԗwǫuπ^0 +A0X g?~b5F\xWOK@?ϔ\.:muqD8oֻ̐,Ε٘ +=alvESԢel> Kτ:S +!Em!8$!qbyrv R]ܮ07v׃FVfbp%6CS>!{COxq'Ϻ*ck#w3K}ƄHs!}n?:UTfJ"0L?lt)zU=jMA)rT;LIf3BZ*( ZEpn9dbɯ,1q,3RǺsF+ eO$YM6NޭUˇ/33#VK o!8rZ$&e߿N* IsHmHN3d(Ua"Q]T8aΈaϞWpXFI'@)|uy[TIe2Fԃòþk}- Qxq"qaIiXʩ ӾXtW?XEBE-NZW}K?i6{,G YB}Zazgzrw;9)ĻM;٭%7dwbS4R!'o*֛]3yLe/$Oehe^)نx䡹¿9AO9P+ir8 m#r(8`$u}*g -[0'!D՘s>CFA[ n5^pVZb<]g1%8\]Ңa7 v}TX}<$L?z^p:_3`ZQ^#ҹEY8:z޻_>NF{*aĝb:V=h +endstream endobj 2549 0 obj<> endobj 2550 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2551 0 obj<>stream +*!7D@h죄#D‡3~14#if?va^ Թ:wKYdCYARmGo $HfzIߓJ=Fr78&?{HtCjLcSG8$yx f{=872 z~1n_z3_愨n}gt=T\t=OI6pFJA ϛ`'IsEH>Ы+qUᚘ\Pka uX/Ka$+q 4dGKi ~Zvܧor)谁<ѳfp;ccG's. j2XdJlԉ3pS]Uc)7tXqú +XSo,D vAk]8IZ{Snو LYͣ 5/؃̱nt͹o֜K讗ڙ4w7FꙔT1"U ]uȈA]8MTkb [C^.~THw8mBJ㻜vn<瞔5iFl6|? o@7͈Zx+{vc,be+W# +endstream endobj 2552 0 obj<> endobj 2553 0 obj<> endobj 2554 0 obj<> endobj 2555 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2556 0 obj<>stream +lsy ,\2 +D29++8iRB6MM.fu@5SCz&S-{_iX7d4-iY +M׋|{̿#7ET?lLU`a b()^3sCLV +(} F&nGc{QCInO_!@.C#\l}CFˉꑢx&ӿ0B:`sڨ#qJ^X]D32Sc~TH:l3ZPD6/u&Oa" ރw~iSO굱Q?Eג@MOww@SU KŲ$l.˙kxֵc}ϻ +ojKd(=a0^e &H;<ƃ^C[+l^ t:3Kv8a֪S$n1s2b%wQ:u} LVEG1'/EՉa SLծ1޶*rTYΟiUX9r%d@тk5,kԼG=n ucPR]Q:L^aV}>]{h2>u$͆`j-۱h 6م!W.>'0kn7 o_u:\'YPyУH23ljdkZV+< UZ೶/6v ɈyX +$-W~|e(bŌ EmC6O5DoͣH5aCV@7'~Ϩ@G6R v̭ZAKBѣQB ft +qE1 Cl7 y5d^$̀H?~4}Ԫ6 ftzDe,M,XKp,+IF u`#zB@Z]ކBx ~s^b$;/Nn˔mf$a%LGxio0u +c< P> endobj 2558 0 obj<> endobj 2559 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2560 0 obj<>stream +镻Ә+Vv ő(]#{P>n[*GnP\2"i:WB HWիVSVƂy~y3[ -\V/|7]Z +KO +s-6'"()v^`s{\ L'pnP{;&Y""ר|"݈ + cӿ_3'>o ={ z#nD2HR۾jDuT"hiӟ0 zLZ/fxn S v%dOͣJ.k5Z߃{G#|',49jw GO>PO`.D+LŠ|zYNZgU.3-o[1i6#MP[C^ ^`/k~ՠ JDǽ`8MN( /`Ter, #o=Ħ+wX42\5&ʃs^XC7J+:t' |)_!wWޮledwE +y7BIEU*,hD0=86#+_{j^aM\I'aqo6Hُ)}@tU]w_.ĔGdԷKl/ rg )IwoIB-nÈ.^2^˶ܛ +endstream endobj 2561 0 obj<> endobj 2562 0 obj<> endobj 2563 0 obj<> endobj 2564 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2565 0 obj<>stream +<֔cxjz-{O1g7\/u:hONu*YҚRlLf;\>*Nni(}3;?q a5ʹ@|wh<"[Wm.\R(ghw0&O( 6w឴h">\_+/ +] L!GQw0sbůztDZZ4&HMmPoRΩ_X1pd ݠ!’sF[%֨S Km.QPt/Lx ɦ!6f_d9uQ1{{Cxczi>7nkQ'O~w88+օK}va^$t;_v|WIH_UKqo"F!{9MWvd(aG7$Ky{ʩSW9]I>u'߫,Kd聴QPIcU򻩠C>uL_=ŔKd~)Qkβ/{bO *: G!S^s Sۜ,0@2W51?}= x[otOl +FC&^=t-ߖqRɘ?k:1X cpUle8s +$=#GmTI3ע^2!NG\wL7m:ڐaD$yKHǭ5҂bFcoz%eP#mkӾD+>`'ҷe"tj^<_Y,s}s`ٙcѯ9{% &P8S|~ʳYoް=6V"n Whd$%0%;S 9ZjU&SJζtkx > ){F``</ +endstream endobj 2566 0 obj<> endobj 2567 0 obj<> endobj 2568 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2569 0 obj<>stream +,1g? )oƇgAZEvgfILQ jN9I,z@}2t@{y ;s; +M$#tK ޏqA ϖ=6*. :;Žʒ)kik4 RK_nCJʼrSczT:G7V@Jn 3 *waFr%VEW2~aF1<N7=C#/)TW1xLKgFOvZ<0A*dgU ذ:@|џ&8b%>x͠1f{ :k4mŒMRp\<~ T(MJ6g.ʕrXm;{C50.,%æ 0_fciKK/ur!<QQW!_g&1ZwLQ.G0x3+u*G/Uuyz/?Kʢeqk`Ja,NZl*&8>۽܀L]1󔅱o,~Ⱥ0^kap(@u42(V._(Zp\%[B gX`^c lva6V*p'"DL?<_j]`{tbrv1}qʭ^6&) nvB w)Oϕ&YM^&2 Wxq̰~H]^ˇ `]ړ rض6'1ZV45ҿW,1ӞK[|^GEWS)MrE.[FTk{Ǩ \{AsO!bpQ[+ LO-f3-kNS1X?9Գ^ʏ}Qz?ӏ4~Z(($_' Mp%u~%Z~>~uNpH__ǥ;Z.p5enDt{)HGsF,b2!U,fi*s^f͸뿢 ΐt=x +endstream endobj 2570 0 obj<> endobj 2571 0 obj<> endobj 2572 0 obj<> endobj 2573 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2574 0 obj<>stream +_ p%8LVy0iՆAƫÿ,LuhLQF嵰U2ʐSn\QMy;HJ:)CnWiAȝk.-rtoJ_ z/L=L`C`HSRtps0%ӘJS +ۑ'p 'lwX K%+CE<1vr ^kh;7^nJzW;ß/dTt8.#c Լ yܽ)~Ty +RYAQDx9{v +,1KN;s#׿y(rn-&{"^ ٿH\)~O8:ZDR.[Aj~ 0,yf-M-y@_p %_|,W{(-\ B9!O$f蝬u,5 (,)S~`5yF?r QY?KPNfOޕpHe5> endobj 2576 0 obj<> endobj 2577 0 obj<> endobj 2578 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2579 0 obj<>stream +굷 {[Nd +[@-m[vVJ` hJS@eX()/`~WZ#[8Ix\Uίff^Q­^ihK57x:c$U9>R#!Vchʠߗߝ5S}WPx'CRL')D^Ek <Y+= "6b׽lWG \-s_HKu! n{x4`:E݅CAVtIO/x#r"c$\\"&yO]`'QKE@Y}ܤ~ۢ`x f^a*$;>Toj&%ʢ=*z)";/icEy0߭HQ0j\Y%7rw©#bx\_g'•:qв$BsND#"=RpXյ#,'qp# AeCVA?gs}?Dw\lV9\im!B,|Qߋ˜&:Ky6VsWc9|U3YC67.8;0SaAH|)DǼ!r@v|tnZ5݉6}U#^P[M5 |C%ZZᖘw!@}BL("?`{bP7oERiԒ eT,l4޲FwojKV݆V>nnfưnW>$qc7Rw{5wʽ6-kF~cx?#ە ea8yГɁw b hQW-\4d2 ZըsjʻEIyiMp-mO4kMxNl[3g^3v\\:/OpcbQ ɹyưg$giiYi`X?}m rEm??/Ed4<cGKt +endstream endobj 2580 0 obj<> endobj 2581 0 obj<> endobj 2582 0 obj<> endobj 2583 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2584 0 obj<>stream + ~fd~q'ye/wPJGu.T1rxCݛӧTKi:BF`T&\4Ffrċ`52/u52E"%SnFu[O=vŞ62'qJ"ݫ42ɦR.i-P3E`*ckUk+^߰ Vշ/~|(ձjo5_8ͧIHL&\8\"N߯?$ڎ}2[8]33Gϛik,I!C{pmjl9b9f:(jvUaޭĔ4![dGmsE3 ,F耺p'n(^fR$U e9븢 WV~BEeIlCS$j8-o2"v'3 N]LZ +-pjT+8 !LO|坮`Ƚ[[z;_4~xHNՄY\V3 2Ax*XjB9^p K 2ϨWb @,:V-sTځ<΀u1bDeh2Y% 9,;J놎=p zW$lGj!I@k4C41=ð7H +RqP@%_]ɠ] n"ʠl"DJ2uE< +p94gW +̙ʞGK ^enR"\p(ˢ8'ƘƤnyBw+S|16)B*!J_1I2*~6&řOK+qaɸx^V6-}Ɵxf|0O./e +tk8Mvz/ƻE*p-L|dYA ֟ÎX:8:dUʍl+yQ6_8[$'0P +endstream endobj 2585 0 obj<> endobj 2586 0 obj<> endobj 2587 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2588 0 obj<>stream +pxTrr+(GV!wsUbe] 8޷.KIpliHMw>A?Qs8S+4f׬< OUR?*HC'ݎd,h:j kyCƸDmh0yɏZO 5ZN"`/k 1<"T2bwpou@1l:$nW(KN)!tB\>{PKrGٙԁGfc0*LS %\Q+W{Ɓ3EwyZ,?jT$^b =ߝy|U+m7{ U.r@ y}s5F{ 0bӔ\8@ *ՈU{R͉)Jk21k*wc]Z=v P/h/uaV*f ۽#"WUTgv|BCeW!|G A`QҒWL[E76ںc43nTPeX(%z*/5j[X3u!x4IǏ$Jks}%>޻\ + T:зbr~|Xg/(48xE񽡌% X;W@UErTCRUkc=ynh_b霷H,),[O1<."OC[1K]t]kIDد] WdѪV> endobj 2590 0 obj<> endobj 2591 0 obj<> endobj 2592 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2593 0 obj<>stream +*.M + +Vʍ_ƏڥHؒ'P%n M k?y8Lgnv\#DJ|D d= M&v~ +YE7[-[&HOe3 +;i،CmZPA5F=G"PY4eaXfW:c@&"野1U[zilQȄûo +HAq~RMa~;U]rO+-ky'LQA5ŎU'DJ+u>~YM6,]_N}&n8Ǒf#̜4q t>x8NTtnt!5=UdUgWڼ?>#eش>=_;d3(դPY\9ڽRr1ɝ4u`2ww vK% ~[isΕ_E;WS@1FX {E򚎊ɎhnCRGnuPkku_HÇD1[ީD;haBȘLtz<>OVD'-[]R`QJC.sˀkS;E) W3~x#Hjd0b@3V%E%m)k}T>%ı)ثk; +endstream endobj 2594 0 obj<> endobj 2595 0 obj<> endobj 2596 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2597 0 obj<>stream +Y,ZT@[؃\sK [9l_+df4 cc=ailhiǦ_@# *,J؝p#fD_Ua7]G4hFoCіx`d ^TmWi)/P͊T`şURwh +At/YE_ l'mՙdFdJR3!05)D+eYE7ӅbK%,i7JQZ=MrN(ʫ?\=yĥ#U¥%k7bIby;gc۪#!~ +U6mh6Q$)& 3a4E2Xk4YYNMǂ r HPH{_lU7{+((c$?'^AS5'nB>@:ashM +3 V"BzSOv5(8QN$q$-.|2 6*JѢ8i1((_Q@G<-=I:Wty4WlfZ5~r%Q(d/"iYOP$R o2;} ר=?A_1u+WP<5'WԆ;%,}xhgLGytpVoBճ5(|V(2m°Bl:i֭]': jf +endstream endobj 2598 0 obj<> endobj 2599 0 obj<> endobj 2600 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2601 0 obj<>stream +&?!'v ߞY +"O\7V:'|^3 SEh.``RVXD/g[ &6.!F;2Wٴ' h\ZKimRIl(x][unEgޮÚ$TdW}*-)ϳ:TƻF,偦 +&^B1`A\Ϋ䘌pkM{IPy>!9~*UgsVnx,= +[ND\ +_|FD1(j#2XVI=Q^,;0^Za +6(MN:P*TUuh4)@j0[*ȡa(3d +F +M =ĠNix. c $ HR@$$I`!2WRݚ$YbYKX⹏9;I~Vİ}*f{qY+:GhS V&gj>2y .?ڏcr-ᆆ0A'F!DFfNGg^7/[VI$Z WW0hG)Hm" w=)_tB#lPk 6Gn1>ϝ$M9#1E+ =dxMH^h}1+H %֡B+ |H-7nj*Bs]@Ac[B=dȧ 6#kR]*PD9Ck>9[WYǍFz62"I +endstream endobj 2602 0 obj<> endobj 2603 0 obj<> endobj 2604 0 obj<> endobj 2605 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2606 0 obj<>stream +An$M1%2;6ĭJhP@etnYʿVw]i|c*^aS uс;9;`AV=HɵLa'3n7Je NňKa,8"i8UfE0_ײϜְS iJ*vY50)j[%5kМ=ϑ~PtתٻjC:#!A/FpKJ[?XN@6_F\ vmưن ]=.#z_gVEsJW iGV G7ɬ<{1rЧ^i)lpA +TS̶JBϑ r(.M yʛ&I'lל9=ƞTMj ,FjDߪ3BD>p^I5DJpS qd$L!'&N-뀶[MF=+@b@o3NY>^_9\*.['$5 摅upX䠣@ѷC eW/Y% ;K6A yj{' 6t?bluW͚@sS< O @is$ڻբ~1 >miC' M8hxZZiAϜN.0 +9p,+L +iK&dhzV\+d~lCAͬ_^nJCBɞՂ|U K9ONU9TMTFzV3HX䭂Tkf*BXiF,0*x;w)@$Ldu! +Ij! +endstream endobj 2607 0 obj<> endobj 2608 0 obj<> endobj 2609 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2610 0 obj<>stream +9j+O;1 +7U3hw6gM22E},EmwUU0xyx euGb:#laK9ʡ%/XPQu_O6@Nf,4ICγ#=bu? +%Ws*LTb]j` +J,F4H>Nx7%.h1qFu4 ~@Qk/f4;9S |w\Hd .IMf<2{j6Fs)'A$<øL*?0/oZDlq$abBh(<N_53SZ5K>/>~fƑ >AMϫir"/AφvV஗y):A:tj=k%dvBtss>Ĺwx5Hb-\3rsiNQZ)f gMelP4|;Sg;~%.}޿+_Lp)_ +endstream endobj 2611 0 obj<> endobj 2612 0 obj<> endobj 2613 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2614 0 obj<>stream +WWE"yzI4[H J/# thl?h'?&{a~j{wβbӁh(.ãJ-a]LBBV6<<>\ Lp?}u:5vڎ x` +ʰפcnc?g?O^ +8 ~7Wp^Q ˼krVR[(f6Zln&:ƉPbM`Bq@ 2We2)SF~ce:;u +6 OTI$NO_gg)$;+?z =:.R_|^LюDUF5;wZbyU(4ו (zd1K3Smww?0oB[yJe7_+`J`L88.D`PSPVyVqX|*@dGdK|@`H=Z(#ߓb*>.?7sjg`Py62E`VīvH~I +jjv@$Pެ;$CG> endobj 2616 0 obj<> endobj 2617 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2618 0 obj<>stream +Ɇ]ͤ!CϮ潺W+nK҅֔Y1LgI#ϻvl&Lg r >#v֊2vJ#B.o--{d +<(U5-zӝR:gƍ0^v[P^Ϸunildΰnץۃ\,qbټ8tq75S`*9I oʾnXتާ17?<:!^T rEX $OoB laq X^~\tS + UyPuk2 R͟ngVYxȱ>$Jƪ1ňzgwٕ 4ߘp{&e$E" S^3dw[,"5S iZ ?BX10Iy,~+ϴj9r(l_$Y9o0&D+nd7]&0 ' +"6. 8л{hO 4I:{𑣈7ZJ/cc6/!4Qݥ vAhWbHVk4.˜Q?, lT+xt?~&O!0.m*ƚYAMO|_uN3ĂS]ڠyGZI`Xwf\%1hMG_A<8lȱ2_:&jnX@k5䏻-MX`]b1VՃa,HTf"UϾSw{u `M~:qq*OA`?=Osh[i1 @YË5-`љt*LZHsٙ{=> endobj 2620 0 obj<> endobj 2621 0 obj<> endobj 2622 0 obj<> endobj 2623 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2624 0 obj<>stream + X%.I?t_dha^A_\~˨Zk17WIٞzir}hG$i: ^+9]z +WbJĤֱxլ/XIB-W@_(}.pQ|n݅;~E]ܿyfsk6+L`!t=PF1gN`ӞdZ^BTN[C24JNQ 3xT{0bPu"7@Sx"[M:9'+h>^kcH RIAԙc~Yul2}2ɐ}Zm=tByqmgزS܍M0G>?CI^ [h4ek[֝+ >ĞPv\/Lh  9xNǩVKAZd<(LpleP6EE!( NFlї_uדpfx3FdC +QvIczÈENH w Ct}V7X+FZ( <M?(jOMгq'Şj FUBLFˎ-H8~k ;X){#b2;t80=rS8]-~EW@JZ{hsgĐ +ή=BДOcT_uුxgiW!%y W{?n&.|A//U˅%J1lhh`^x +|#ݫև. L?(߬qYw6hs ,g]Ћ! ṮiD?%*^߂gvЫʼn[hp^ { c-N-H T1 mZAB H^מ l&|> endobj 2626 0 obj<> endobj 2627 0 obj<> endobj 2628 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2629 0 obj<>stream +Cܩ6I3ḹ[ _ܫyxBa o/,%Lg!ÀЂ6]XQȖ5~ؗZ}=SPc +{< y a5t@zi ɚ(nH nR4X ςAVhm7(pc/.,E/}#uz:h>?G>k/qF9xxUaR+3A{sTwSh|Ū+cWY_G:!tlsJC) +ԁ]*K& (QZXQ=fpW*Sv1o:vg9%:J)<~joo_=) ydYg):!h,u;qj虧Xͼy f<"afdkJ3oa*s?A +P42+NHWu}L{YuݖMk]0= +*nqCPBtAC߶1@R:gKvx✷ه@+U'!cZEyP 2sYWB7 zt@}_Xa_r ?- 5c+)伎dzɋtoi xh؅I9  @AJ +xvnEmpjccM&_:)1\*af)&~S| D&NHy,][t*R^?>e_h56\}V|C/Lް7 Uu/;'%SrgYp +4L9Z#*m+mvۆ41G B" +endstream endobj 2630 0 obj<> endobj 2631 0 obj<> endobj 2632 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2633 0 obj<>stream +wWV1H5a*Vf ٣~=V(1ߨ0>BBtÜfCEnP%S #c+wmC>kc! +C})%l`z kdž@x%2~4uN̏3:W{6$G[/!?=T@v8P ˧^*_<\EI^w2uq Uk?IE8@$.|ПwIwc&İu6\86F wӫZ_;<߁ƐT ߦofcZx/#EUH4<P;!4,o_d+d]P€V+`lRB Gu Wx=1Dv#+V;tD@DvWn)4Gzڢ~xVəP#(n2R3TV叔l}op1#puQ=ǍoxHwo$,?\ +h#B?:u_bwᕯr:[~$;I|9CxMKONvAqjf~N)8^UiQ,Vb3tFfv~#FdWBTq3l^i͑J yb`# EP#{l(ihv ZU o}DX(Z=Q6stK1Qv3Tyd&v+|y- j@ʐ:b*@UNؾ3s&AݘHoR 8uD$ѢFp?Q{XN4w9dL¸]wFҊSJYC +4>{YdӎC +endstream endobj 2634 0 obj<> endobj 2635 0 obj<> endobj 2636 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2637 0 obj<>stream +/ÿz2˚9I E.dMGGM0}u.|ZƤPE([7x^Ft1lF^jCmvZ"Kg]ʟ^斌F@01g< +G $_-kx-Zx1mANv]Ό +$W}3wE@3p +{Q#כke' W?'g˹[F39&U4)2 V}{I~w=zIJm)!7:;RÏ;lzV|2ez[r;Ei [Vt&ZP 3:LA<+4#t+V&'/LkڸUhY[#>og*(V@UUgKE('|_ IՄ[76&նvO$;cI3!:m&t2pA}:Dp.2Bω Podb -Yᴈu&gC8ڮ#)T@yE/k&xm]DP@lJvq}wAS;pZ*zLf Ջ7qVӟ,cJ,Cx 8&3=}u"iѷt끕-f7-)G3ٔ^:˴݃AYiAy_poFi* :#Ŭmw6>/ XE/1"zma"+,:8v\O Av5Rj=*l;3"z^ >2׃I1({<෮2916Z@qޑl#:^\|m7rkoVNjrbB? ) 5O5 O4\; jK&ʘ]g@w-bFn4X/g[Dw(:nDV!lC +endstream endobj 2638 0 obj<> endobj 2639 0 obj<> endobj 2640 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2641 0 obj<>stream +SjڶN?j71$a>m~;۳kU^x@h̬}\âr6;o^*J4a +9ދ g9e5B5ݙfhf `I?jSIuI{N +e h4ﰁ!;H*/D$5NNJK=)WQzT4%>A:4Fsľȱ1s/;ϕJĵN ENJE&݌ xO{-e԰6|R(Ц|ZʌBV5vx3i$٣ Y2@&HuUd$/4s-5[9mjK6/~9PCH^yD]:+46A eAјG0MxŀN%P0*Lr j#r=O#+Ӯ"#Ԭ_\Y :WR6#=8bRb±4$z}.thՄ9ITc>t9Bn džy*JP$vȦ;66v/#`^Q[ۣb5GDfƯө6M$&no瀭y |XFw{@ +%/ je+vOJ_袗]VǠ.KBN/獟:zق_G;A6iہDLo@GGFmJ,%lȧ +3'%"J%/!7$dGinoiR"iAh>uߧ?vcDzi|Rh3\WRZ #ZUsk smr=L4J +}-l;; ;hkz$Dy`9 t8mz$Q. κVTS;т}*GxoO9tHXNP.?J|r@1~ϠB -"G,iɺzHvKeE!2i uJU%厮!ʲV+{wẹVΫ ͈p|EV2'.uOh]C +endstream endobj 2642 0 obj<> endobj 2643 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2644 0 obj<>stream +@J+n~^y@Һ_?Kˌ]Te27K6dDyVSޖyV\˝_7Jn"r9V5zld +YU\V}Pz(! TmL_t3EMd6OkH|Z}5H'|'Up[@% g_r+b_ 8  +o +::##0P`Br(WjZ1ү0}r:k}|(.@X҉t]qr5ѿclJn,*L* ?vH3N$1]UQZC~N̟g7lXi,2Pu1:O|{B}k %6׋ jLu/2Dqz|LS:Daջ}ܒdkUPs8X)NTaוHΤof.W 6ˍQvMO<x*C 8F \?$UB\H f~[.&/}gm9PjP\@;REŨȅ{q24%g[P:䓅ҁDkA#EWOOQ? 1F֨~vBƩ>Է 7n5,ďԶ i wL0bS. ΌK4o)Ћ^cY; 7> endobj 2646 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2647 0 obj<>stream +J^T<[6y1d؝qmFK 7zJ F8KΊYak}[Npηxv +CiÔU>Rͧd Nr;8?0Sz~խ`BBy仇oYx4b3 $Ǘ%6կ'(#f#? :ya\"Y!iAo;gElTb漹 KfxیxMq+#xω 'p94j +hxe̊ia ǯڤo2-xJrxˍΒ51]4Vb}4箺4J%;Me# 5 X~|ݬ&l=jj] XQ4+O[WM]tSh 7E6?tHYI9^rUuL o?&H8{2ql=زVKI~},@z&с+aroLӵ{u[|<&\ epD?6ŔdUYp1(1N|٥4Vu{K?SlT|MsQ!n}TM[2ZYB+4"|qZE"F`k , -C$SpH¼FŇRɃu䷳t51\Y{~@j$uЇf z G{k߼xt\lrR69a{Cu nװ{ 5ȏ*Eebzւdr97w,h|p' +K1~]j[mQWZk۹:M\k=R !hF[qCb  仄UJYx*M|#X՞n>MB3  +tf|0g%.p:ƞyo!FlDJQ_9m0 ~9F}t#y)ɤ6I" +endstream endobj 2648 0 obj<> endobj 2649 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2650 0 obj<>stream +ZRj~[πPI::u*&Kq2I4 [/bv Gz+xk?tۃD7Amݏ\Ý, 잀^4c8n%Fy<4e-X, dw/BOs2r5sUrCk]0EE8Y! $ryn|R' -'xi-d ׇ9L\( "`'=_E r/Gy0qi+{NwuituD?H;T۱Dz!@7Oe"%ΪQU(;_;2aCTԂWg`/o+mH)MSycxH/(>Aʸ&~UN/rP!ȮXސ뻰4-ܳZX.D+ Ip6V;7p>]9oC9"*p񗲹6z /^L a؃6 nZꗨ𵲌KbZ:nR:46/s1/kmȾ?OD `P뱸 +xmNaY3) @$mT ^E `t z@(z㢃 +m),ka`f"S%fWR'nlLzf"aU/ǂ}? +endstream endobj 2651 0 obj<> endobj 2652 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2653 0 obj<>stream +ku`"{{c1ءoQ8O6n =ώm>{on?ncY+GƝiW2NAe!Gʳ% & srNEZ6K]ny0dJA>1x>LbosDUMD (NN~3n%n"޴y((s w5ތЁ, hq0>U@qhg KBbWx&ז=Sx*@SwTT,`hYҧVq%JxU|J~-F6ȫ1>6V!儷L_]$ M&,gW_oZg*3RR7,[4;ړyHI Ί6 +̕(v.{Կwy *<S-2h۳:UF6˧{nkC}!hA8$nM$ Hu@2 muփvu)jhܨ[ ŁAzFwͺm;9׈@"sD]>"֪)*3RgTQ:n\y.OAS1JUú0M )$+?[7ESulᬐuƃŖFcЌ_І[PDrXjۗ2o2<[x4}sdԎ?ԝᨛrq\pܧ:gtLpGnSgX.?Q"Ľ-h~q_[ X 7c eX Us(OMIs55ۃZϢ +endstream endobj 2654 0 obj<> endobj 2655 0 obj<> endobj 2656 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2657 0 obj<>stream +p.!,Ln1)CR}57<Z-xv8?(N(Rm=\j(q WeV#SsLNpBB808DbA;E;G4[?2)Y"ͯ-]4٢ӗ$~-ĕ" +:)1Vz!%*`& ,NeWۻQ}<< ٞ0;J gA*Pyj@OE;} n۔]ͨIj=PyxՅ<[pl JhJêǀqVq+m;ND-0bUQ5u1 b}(yǙgZ^y?KSO!Nm Q 0N׾jD1)o[~C$Ky _KT<`*w|6Tm/ 4G/]Q%WZ]J;Bsߥ)@fj*Ͳpc6Mo/'ClmmBKYx$1^J{Tb,#Ehs-GxF>z-HCTw +CDCIcn1f37 +q]hy:v1ː$:a<qSr(z mEݻf]ioK]YwG(?{]a$B-c[l $"A@3vEB0=җ[/{2 Jh~*FGmIARuV)ZqqڵD')srZ!ֵ<ĦWMk~ߊ)6 4l>EՏzkx|SqiM|!b_! tO.CNSG KFg&a1Po3aOb/&̺䫖`o>r_X2) Hyh,J)S#O6Vy)٭{Gq߳yT]$?:`Halg! +endstream endobj 2658 0 obj<> endobj 2659 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2660 0 obj<>stream +ţvؓ\?6h[:A%A #bOn"غ'1Rj(::Jcy.!™ T?VZUlcutxrRΗY3fQ́w>FKO vDm*Jc๷ѧ'GVj!W$oB [KCk0G%R>k7 8ћ˼"Gڦ+2o)Ԓhȋ#rʍz@Er`Xڧ#O"'//tQh6 +&1X* 'x-ƕTQ'߳/> /?tmF.b1"0~$Ә#hj/no9I(? +%HT +9y(q6&dx +endstream endobj 2661 0 obj<> endobj 2662 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2663 0 obj<>stream +9BlVD~b*?5po/ƥdlbDZ9gObx40sY'H$U^2` H1Tb_.&>t剜?Xd8Az'/JP a󫛻ܴ Wp%gxwlmOy_cx9X̹ӇјA +TpA*Û֡=k |GCJs[dpou=Nb1s`"KxR]) @2r72Q!tut,K/ +20 Fdvc D4STS +mM[9ZsTm"u$:о !f̓>WcxVo ]b Qo sieqe3)la~*@n P\} +-tHNYQ<7#PVC!1)BX邥/>k=澝d+-֡~T)͇ynj"XǪ +iaѕ4"?BZ;n@ŗ:D/> endobj 2665 0 obj<> endobj 2666 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2667 0 obj<>stream +Zr 20i|jD5U=aFXqU&2 ^DPif/eďHu6țт/ջ? 2'qVﵚn}otł]v}e|R]_Bh -Ɲ Vk8 b;{*uG@SUuJ/~Q^BqR-H"91Q4rg,{Q4˫~+MU*Yu /:4ja[%wd:\-^6;x*kFP>MwLz=it]%~8F(5RʢP6B`y;17R>"=ft5D $i<;,z80ZN&GOo eZ'ܝnjT*-/FǪXd~g(˃;Ԑ̬S + 9JVY^#=ieo=ro6bc_O lTG?>,m&bGx50t >1xmѹ,lt{ѧӌwB(rpK9Bck6$AL.CE·!BzCN(:bI" y޶⋒E[>kMuRG5.2=jFPǟkW_-ekD*=/uo+⹝lւAm)S(#J`rLJi-s+A]e B6_1=&2v2 +7)`.(6>`^6TsEo*> +]ViwM| +mv}@q/%C(njdIRy,Z60b CCf& +\Fg C/MVYu`9c_D.>[ꌦ@B :y|bIXxh -"#L&0mq^9wP_/уnOb-Q~D7ȸMO_J(NXƟI۷Oxj(5lV)CD.0hlȹckT1d#ֽP0*|l NTM.e3TSp./w҇WQ+ +?]X3v<ڂn +endstream endobj 2668 0 obj<> endobj 2669 0 obj<> endobj 2670 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2671 0 obj<>stream +?]\Û8m:!~*<؍Y-5 +#Wɔ[:Il"(OfG~kDٓr&ͱ F/H)2e$h3Nb**7Jϭ%Pu_į$Qu`y0![NIuLɈ8pĴ]b5BiQK"Aw,ލvBu2`'@㸪B!Q&H f~A8|md 7jhz iiįe}4AHjW'zaG[NR2gi=igKXP'{EN-na8%DאL2+.k@"}vz+׬%b.eIܪ~ȱh +h9y7(8 rNح(I >c>=BV)?1l$c㷄pR\.@sz,k;ZjpFŻ̯bXG->v8tZFU}]k 9= }АnqsqSrT+Tb9i9FNxUP kԘ2k$ y#Fz0B,Anio7\%:Hu9&̽H $5zepFi* g<&Z陗Usvkʩ̨SWUK$Ot ɜ,87ݨQbGaHC<i{Jw@in1۫ am|^htYJs²hlb-9u^I 6 C)y!yd.2s|C P +endstream endobj 2672 0 obj<> endobj 2673 0 obj<> endobj 2674 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2675 0 obj<>stream +Qf6) fB-`o.r?Rr廬nS\́Hs l; +Y)O !na_ĉ/hxc?q]YسpP䞚$D:he^["y>҄5 +eh4>-.v8f=_(z9əhjפȽΖIh退tt,2_ǻG|Htw*6k^uUAHN54z +m=WʹYR/z1+7D1m:}tW;e5˷jk4;HzBi{AEŮMdyjToWNIW>gv1 += ABހ\eq\ 녊eRKu(1sij[LێqeaOjo7^"XZ?)`U +^3/ec *@?F6h D;\nnIiFC=K/l@I|MJ7\D2Xdzd5N&yWeшNC7P' @0g=Zu:,8wz#9%cC=F/i N[ orÃ+Td:B*&7+ $91nƥ5MuBqdWWrXTFNv?c|B3 |b$ b@㕲do> endobj 2677 0 obj<> endobj 2678 0 obj<> endobj 2679 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2680 0 obj<>stream +g]y1ah1WuR.ȹg`I<V*x'ZpvB arĐw "]ڝAylG+a72& +8z[~\jx 6zx\:48;>ϊX뜱>:nqvQj ʖ9ΛJ*=kۮpQ Ul~T\tXI݃ؑ50gpx5 ax G[`g\璐ϠΨio5)قF%>! `OA_I17M?iK`y+fQiYQ*}`kԹ % +R{ +_J$'*w4HdSTex8iiU k괳(d{r =Aݞ)|q7j%_/~Rݷ?3S%1lJb 7ER`Y.t`ZJa00:ty?0M#f+.8P`\q%R!H f)'՟'ezddDˎAEIpJOvEm{&xig= IvM{ ) \hśV[1KKd̄E1] 4"ru=2E_w1DLl~U!>ny[#~z5kXBAe^\^7Z|٪Kk]{*E]QBq5: DbB36y}HgɮSf)W3 +4-5\)ɷjR),ق]4R\;Ȧtx5xa'(KtnӉ La +,h ' "ʁ? +`qQđqn]Qb7qJ= ͼ-/ ^y畼C6^BH s[ˣ2OD$ܦç~9P6q8+%Yj@8vS,Y[gJ Q)ތ@!eyf3$4ӀߏcA_/m`w* 2myG +endstream endobj 2681 0 obj<> endobj 2682 0 obj<> endobj 2683 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2684 0 obj<>stream + rWK<@%¯4rV +8D??lػYVjFІv% *@U|#~ލo|;IOM B3Q|CAd~>{>X+@Νu?\:͈IHÁ-b8j^zd8X~d{* o۩<Hh8 RL6  +23yl ;IqJ2b9lt1#5Âo:L}zsNYlX89E4mMLߋtDq +}y%N[fkBƈ*$[1(֨# ƪʬ(IB!(=< +&P<+> endobj 2686 0 obj<> endobj 2687 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2688 0 obj<>stream + shs3z_$NPpgmӍ  L|/ 1΋4sIpcB +;ޏJKĩ _T_ ׄʼn֙FH-Du?]>p3Zp?(j X$8.G]c:u茙i@{CEko!0" /pH0E0o6l7T~]P+6Q9UkWCaB-6T&5lj .0_k!q, >%2$t0*z1YKd 3H:5hIVnckUlH!QAf\׈@±7'Z:urf[+u2[& L^U:!r j!1+q^4=LScMve,t3挍R\Ak vxM2OVӬi$mu08fc.%`[G ;RjN`)&0Z*LA9. ~HBJy$[d9WVe{Z҄+HG(dvg8ݙUopU^HsMBV B&%ϤgJ J<.GfWJ[;ckzY<485hQ*bYaUA)qz?r߆ߚZamM 2Kcxrp Kfs *`DP7I3lJ-~ gfsM"~65F]1u/@,;F'u^gZЭsN, PO $I9x]AyR޹;4.t|稫|}+*j?V3fQI@79(9t;M$vZJaPN7c +FD T'c6bV+MoDtWfgi\ +endstream endobj 2689 0 obj<> endobj 2690 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2691 0 obj<>stream +껞=>{aq=k=- Ohhi1\m+\:%Nlϣ 5ۛQE#a&D@Xsb,6#d8\HyƙoXPK=UzgS7˫FX_UiYlP`:N 1PڠYyPuii +i6p>- Tk_=-E-mb%絹l@`-g&oBPݹ)ObqW5?q?uwq$nuyⶖU>T5䶨R-W=ۭRʓGxxD輰#YkG=lFɕTX('A4L +endstream endobj 2692 0 obj<> endobj 2693 0 obj<> endobj 2694 0 obj<> endobj 2695 0 obj<> endobj 2696 0 obj<> endobj 2697 0 obj<> endobj 2698 0 obj<> endobj 2699 0 obj<> endobj 2700 0 obj<> endobj 2701 0 obj<> endobj 2702 0 obj<> endobj 2703 0 obj<> endobj 2704 0 obj<> endobj 2705 0 obj<> endobj 2706 0 obj<> endobj 2707 0 obj<> endobj 2708 0 obj<> endobj 2709 0 obj<> endobj 2710 0 obj<> endobj 2711 0 obj<> endobj 2712 0 obj<> endobj 2713 0 obj<> endobj 2714 0 obj<> endobj 2715 0 obj<> endobj 2716 0 obj<> endobj 2717 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2718 0 obj<>stream +_ r7Tk?fX<EPjmȆ GXJ&bvcU/7/#FbvAw>vSHq =\Qf)\Q38+ժ"H?t_Xޥf#~y: Rmq"O=n ɥy8!1m4tw:@Zwa@!^*#<$7(~Bh!SOaWtl3#9h g*θ<غ>ɯlO؎q uV{5_b%k)V_۠wl + e6!q PK7L3(-7Vh6s(Ie\DMoRg(tu<ѳoZ-pLy(U>COTop -a{?x9Z@;m!WLQv8Vb̖06JrIIӺRȒ!\9|*F3נl3jө&;;qxS!0c:#˔)O37:`7K,\UYjVQ P6\4E#b3}(h~Pٍ̨;piH8)jMcyD~kY͘t;z(l*Ct\Iq*΄px0h%9V{\Ɗ|XP g Rlw6!(.R\cq6j%k_B#MotQ' b;P& ?Ƅfݤ)uLѻ?˪zކ8DOl1nAG)r1 +tj-K5V^'궀ug顮\2'lb+Hɤe׷_m0xY3XvC{c1|aw"hZ@y0M> iNKrM+3vZ&I!",21LiOmؼ`@U,v) k͕{z>'4 \#Ap=;~<62iWƱ@D:rcOC5-0,gbDN3N:yS-bM^@V@m7g':BAP ! pэ>v~;,ԧZ%܏bjEJ֊t'Ind͵q$$CL4d=;b:vp҉XυG})CSKН$s/ĢJOTg1f:~jzzDWU#VSo| [nT%NGƆ}ydrL}&8/GzN_19bp㇞13V|MKK{~ +c; NCKd;WfC9QcL~M@Wg +hCy3E4㣕ekuA:ڏ7tET…RW|GZpX.Z}wsU άdA:?:M#]ٷImJp_[Jd|g,lq_qVћ%Eۙ++6rcTܟqԳ,Z/Ei~(PDG@QL}8zIYrІ |gt[R8zHP=Z=pP(NU!㸥xK`Ώ!M!vq=uo;!> WC}0% OaJs5hޜNp +:+S`h.S.}nX;'rйqvڪs.e^t> u|@{Yc|d-u/ԎF2ˬ" eMǐc2 +)evF ̢EAw$~<e;LC,*WFzdGTn6 ʝsi0 h%NO2I2UMі7-)Bk$"w glXr- UOM'SC7yOu~v@c=P9`!o.+S^Q*/kc +ʮGhRYEzyGdnmRתEV.?Yds6yMۼH\;&XqwL>˽.gWKbs'ݱ[l+ +K +6bOnj>q}<^zy'TI/1AS2za5P}x5:7y 5zXƙ|x}J༻/_,N uݤ'a- c\Z^ +XU"&  U2֕c(VKgD}R>, V%% o[aH;@=?~/ƀEu-.,2wAV3{x` KꞟgflzzETÌ-V +JiZgf~v|0 O}jE`{Y՜ʃPXҍ+\2u"XV`01;&ھ@/̥,!~6O^r9e'nLi`_ }-I¤%vǖB"F|$1wMWP|p?ׂ`}?CvTO\ty靯0Q@ 6؏φi`HOgBP .5@hu|T7'Qvy= #q"csURݧskvj$,᳄yU^.kS0_*{1 W֘؎6X6wL<߬1gKG)U(iS9zqCSZtW*K>c0~ (~5"qԳLeu&PY8m0,#1`VHK5*Zű"þ!6v%AFQFZ9_ƋHys/]Rx]Wl 0 Vcei`o` Ȼ(ʄv_<^Ymp\[׶x (4TE2y3A.89З ILYׇgnhʐ=a ZGQhTnm +endstream endobj 2719 0 obj<> endobj 2720 0 obj<> endobj 2721 0 obj<> endobj 2722 0 obj<> endobj 2723 0 obj<> endobj 2724 0 obj<> endobj 2725 0 obj<> endobj 2726 0 obj<> endobj 2727 0 obj<> endobj 2728 0 obj<> endobj 2729 0 obj<> endobj 2730 0 obj<> endobj 2731 0 obj<> endobj 2732 0 obj<> endobj 2733 0 obj<> endobj 2734 0 obj<> endobj 2735 0 obj<> endobj 2736 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2737 0 obj<>stream +C'7\fjWo/3(wxy)m.mm +\Qk +,Ń ,Lً[#N!]8Fڊ]\:j7Ht"Q/t벰LK`lЁd[J];#s^߲n$4ʳt*Gbj)AZ7svE HFr!}kb`L #D `~\ t H@ QZr|ጶevD:9?Rt-b ]/Rw1|64E5ImI*-=IߗoYv7I,+zA$H*]ւy][`NXPM|DiRB\ȘlLvԊ"6m\W r"NRZչkr7S[Kt'$d :q1ŵ$x+vR +&SK 忔pE=%m8q?3Mp;?۟d~ڹFq0*BEBVjmhI|CAVlL QΎ=}CIoJ!64Νg kiэ]]<"uykݬ>s!$٦<-|^?ADΣ]TPGu&gBk ss.4OܧB}+j #Α=bM \̳'v6l@OM9_?(Fۥ4>$jdr09Le:x?ݡ}o&ݠ M6nu239>'{# vb4&w,-*>9K@Ȧ癇X? BՔGV-F>Xstf3E"! +;ʕ s"5>]tk{%* %8_ d6|8oN +RJ j(F3g$~9-sx޳ z՚ .DDo_yCcΗc VVݖqPs(meNL26ۥ׭ k>=J +endstream endobj 2738 0 obj<> endobj 2739 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2740 0 obj<>stream +G[ϫOi:"!_/?;]t"# \K1l.E>L7i{mRnmN;r  U_,&8zwe<)Pnq$J@ik=ltd!i*:ogULO+aӜb @hȕ!~!,S +&ߨتE׳_#Q  |RI  +K@'ukrrs,U:^5 S/ _w]o{:":^jű܅}ߊ +endstream endobj 2741 0 obj<> endobj 2742 0 obj<> endobj 2743 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2744 0 obj<>stream +đXԬ0;bKXA7}sTEGYH'U^UYXwG9\' k&3wZ]$ãlcAA{/vP$tFQj̓w4=O"(HHld.BO +q>s?xa[@RAs"d~N,)ͱTՇs_Y iz%4\_ AcV{/lM(Nb{nm܂ s8-RiC &( nK6۪]1otͳ]qcS>?5&Ouڪ$Y0o`oIHUAZRD(oUwYQDF˾ȍzA*)Q/SY.c5-⥮VrHCoM V0`HY$Iƹ/ߣVݥdQiP9Obg +:.tAo;*B&xl`dlzЂ'!~C Xҧ΄g0p2#ƺ=bWoӘSacH؜'fIld(`8 4pP"w5_)DyB%1+9/%|5KkULWܪ*^}%þ`4j(qz<#簢& r~WZ 06NDJ0|ۂ #@._HUZА>B]OfkߡDk/5YyVm;JCNB2|Wol`ᴱuUًF}A +y fuēs<+Ƣء1< O`g' +endstream endobj 2745 0 obj<> endobj 2746 0 obj<> endobj 2747 0 obj<> endobj 2748 0 obj<> endobj 2749 0 obj<> endobj 2750 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2751 0 obj<>stream +S={%g̢-3IZߧ*|JfJ(JxJ>Ge<=8۶{`^<ѻ *NbRo3pI(?jtrl# c060\ +rt +;k!=Cfį:~ SQPwkp=+1Ho.=Y} մrUXs] ^*87Movn?ad#(I`:kSuGG)z(-3X~l^-j`Yʨ#jX x2盄^̷2:?u݌8*'fR#Ğmm'^4z35z,MEVR:cqLtPŤF5Q0UCQV ͏PLiAGɟ%k`rus!ot@@#.<&D> endobj 2753 0 obj<> endobj 2754 0 obj<> endobj 2755 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2756 0 obj<>stream +i_e{@~?t$.Ln* |kG9gљuxÏƎk0%;G+/%jҫ +zD}g1u2E.o8c-@B=Drb^.X* 1EyQeڞ%C޾GmC﵊4߮2oB2ݵ6;4CZtBjT Mp?J99A.^tl`Q5WB*0W$v"HNHʷ1;VULzE"/Ĵs#,8E zvVw_8`>I7U}Qԇ5x߶@10\$qu:Dfy܂\ްδ0 2ogBH9GwͺVRqb(Z5D/,Ebb |OZ{*a]CʃUR SmXrʄa uc8*d[T'Sի\xetn Vۺ#1mH:ᴪF6JWP7B=&S_{ $OF~^?l#ii WZ 2Ke9ųTtecfZ'~^ġy#> X]1xpD&Bsg`Ͱ$D2a zU0G#8tOcsViL"Jrh⤷&f7$;!B ѣ5ҭf0(~ƈޚS!WJ9iH{'# ۸<9M{ +endstream endobj 2757 0 obj<> endobj 2758 0 obj<> endobj 2759 0 obj<> endobj 2760 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2761 0 obj<>stream +2^>Ԕ@$o[r8 6ՏIC;KsIPwMvTK-¸TVȍk(@yY4}c D3lK8j|p'ȔVxTAtV?N<n73i`1˝;#`eCgI؆ )u͢26Ə[|"uEO;=a^,A{d-4-/W%Hgʩ,#r0$#+Z?V5\+KENR{6 OAkl}& +Lh\ C8JD:N bDun +9G>Ȧa'7Ot+RWJ, ^M͈ЋKWvѻ b?B١D--G#N:- ,&A5}$^ƀJ0nH;{ tO6"嘟8 +ɑ!#tP/hݿ_H^ֵuB}GUq{hlwJ8#],"WB͵URRpМO}Z C.|ryqUGղ@ dTYVzU*aХ"ƌ+1?j + 3C=&g ?RO+#aR>󔮳GO~П@iŚ!$Iv +g: $xh,ђiasz8ej b,O7xeTD2ҿInSk~`⏩%0b2J;V٣+ +?b5GmyNݡ9LANIgAT(jL㬤su#ke@g_}L24B=iL_D9qz>q_сI8yK{=EXɭbG+IptUH0&տOʜyÐ̻Q ޒ3>g8 "P\Ǘ׸ŴW/"t%Ɍh6xHL<.xl,ya}JGyݪ%Qq?d9]ӻ:$6PUF9׀[䒫jrV->s՜8ߚ||>k4VD璡SLWv&).c:Wu;>eiw =\dS,3&\R/0=Xp Et4z}D=4B .5gR0t\ogԹSkY,n3i9 +endstream endobj 2762 0 obj<> endobj 2763 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2764 0 obj<>stream +7ڗa6ag!hi2@ʓaNwN~o()xrHBh`! ;&3z-wX-C=1i; ]sa6:T odB&!9[J}' +E9~w6Wڂ{u^oԪk8#10Jz笳ĤyfJcU+i[O.Ls'읚__uvtIѻ4mEtP8)+5]#萜XBEj.)G,h ~UEڀ <#h/Lj6 +endstream endobj 2765 0 obj<> endobj 2766 0 obj<> endobj 2767 0 obj<> endobj 2768 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2769 0 obj<>stream +UL9U(4q"-q9K|٩9/(-]@R vXAȤק09t3L浉zH'6gǯTT5#!DZuպCĕS4Q/A.qO}C͹# ˃>ƪqIb-o.sETy6z{*$g%0Weh8Br;v)x0>o +]V=rQw;."W@Qk51mlmᫌ(`xPa17}FsJ6X kgD4rq{`=U+DTm1 + vSw>͗%FD(::kT6*JrC'@}bņr?q⓸efPQgVMqڑ-ͧ w`T--Űٹ[2"[XYkv )s&8ީũ.Q/nǝGwN"!2[-~R(Vn7 !L]1InV%XbDVX'P'#u~] +؟jDtm [_/H%8 6MAyCF)e MP$B- 9xgm3䘀kڶ3Rcq9S昰FSNBH((?FG#ʛ;Ʈ$C6} E+.Cg@cQC?SQT9 E9$կ/#~K[ _(əyE\wk,-}FW~isi5Bg'S,HPF/w7$6Vp&ir'B 'vT Ԣ^zBLqjrZSp!.zR +]4 +WHJ"uf +endstream endobj 2770 0 obj<> endobj 2771 0 obj<> endobj 2772 0 obj<> endobj 2773 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2774 0 obj<>stream +7[u)eUg^|EBvg={r `lYþnPeX$i`2~E85,Y:;e_la@@HÔ1mMߡ?PN=$ &>;k`"V'2.L),=qe; %l!̍հ)]q5 dYIbXN~cbpU DH^!4}`L &!ba D4Hٮddl Y5 +M"J|ո'EuU?iyoD_=T*{}mQ(vb3@-T`tik9t٪Z)&Ѓ+0 +>uFolF](iȴ%ZwGyPεі.ܷ(B82X/ 6q"4&ŕpNuX&pS6MrTJ2p$焞#C3C}cβ" Sdp5B6L;LE@[MrPf5Uw^&swZm qW-l%d +1î#6dhQD ymRre;'} ?x|)gwY2,ڨҢ$e%Z ؍+RycAhb–#1\,_ޔF#ְhQ̔[s鈑(˩bضr"U̹uǐr%<=_QWo:aW9`*t|j[hi5<=QJPir _q+C*bAVto˓8f.H=.厙í ~R5ŏ ˇV\2nnYFHq^=Z{d!NYU ~/r/1\7e'jEHWԓlgTWi Ri͌)_R.#S9,+ )#m IǴ8O +endstream endobj 2775 0 obj<> endobj 2776 0 obj<> endobj 2777 0 obj<> endobj 2778 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2779 0 obj<>stream +0R͠ܝL##Ĥ;.]JGaiLK} +H=I0i-DJ +՛򋐎U;wdKe}Gf3wJa#s֭4f5܄Dճ$ռ ShOm.mOf<q PnD_d@*h-;Gϭ2]^0EDF(a_F哘Fp|[SVtNt2Bd,q+>S|9fz Koϒȹ̬=%*&9zO+Fʳf6[ ;,yBA xSV2Ե>WWv<əç$H Oއg?]y[[쐫I^ +7-m*yDH˥/?' SdBA.<XBmF`IhN5͈wGϕe5??apJ6)K#CeZzHܢ;B|!ʋ $gʱ8hiFN7tN2k,oҪE'7ڦ.PҞ'v +w|Ppi^bns &~עZDŊaSĪZqIGmV7L؍+Q1(,F$|\8C\` +kn6"HśrevQ/^f=FdmcMoږtPRjr +,e"!X)cX[d"Ob9 F߹u6IPxEǫ +endstream endobj 2780 0 obj<> endobj 2781 0 obj<> endobj 2782 0 obj<> endobj 2783 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2784 0 obj<>stream +o2h +ìa- )W֝$J$ziW1.PvG{ègnHqfQH*|O-3)w\CBI%UrZ]z9uVbҕwVwffmkMPBwHt1z\s\ "0(꫓WcT]]Es(Cr#.@3S \FwZje pXoM {ަŤ7M75@2{\%|ލm.ɡ_)؆-ꍒAzF K +4\!ٿO&=@OS,Xj" "!S؉Y94++(> endobj 2786 0 obj<> endobj 2787 0 obj<> endobj 2788 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2789 0 obj<>stream +vknuq!ehv- q^WAe26pEv^i+lZ#\`YMƒZ9.TNZ# (}A1D2hx_ZAw%]e7T:# .ؠTd,D^w܉ c:j\qrrl&V)s PL@AF<2Ok~28֨ 8 fXk!$W:,XɎnm9dZB + ^C:=: ۔5=6U>3XFV=fxx3싦N*z;#9EOA.RV!M)L^0H7Kkb>ûYS~kb%2mIr*H;\Uf f6A|뛅T"ʵ$0^9eL + Gc^Z e2X U aTN"aY \vJ+\y'KG=bF*0-j{ ԑ'(8 z%^dQgybF3W_6$"s<9Mu BXx2ϯSCb&;,[Vڧw;z6!5=4 kaqW䫇QPtӅ( +oˎ|] +endstream endobj 2790 0 obj<> endobj 2791 0 obj<> endobj 2792 0 obj<> endobj 2793 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2794 0 obj<>stream +k]V"To6l.˓cފF0tbFMXK9\}ƪX\a[ޮKVeoxh d"D/sȥR Jnsq˛j%iX/W} 5rB#/A gf-@GS/8a)NR52,2JpCztS;D@|ך4D^r˜*-'Pܙ]9*˼0W&J# +i[cZ:t#: ;y2-U807 q [ H$wf4l-wP1yӺ.>eXl(+/c\ #F#I/raOX;?-\͡du+~T?-8;\Q&CݐAۭ'q͐Wԩ),^hL:x{gKVN>1IW{9Ԥ !4HI)̕tNTk|1T~^YYWV$_f,,wAM P^Xy2c5KP5WB,X0\iBp'z6[*jÎHfX1b4$ +y<@q\z+&Wr,YfH"81 +ǫx8Įv +|1@ξkɳ H_En@N}} }XQ# ܡn cͬ~n./}bٱU6apΛΐd8Xv̋$ʆbэm7QQJIL^lZX b| a|Sl2'2A +/vi3OäIG9\ϊQ{hEac^M +1p)uƧ9)  adGŸЗ +?$F61GNfNp=@O>M {s0ɲs4逃*7}ivӛ%~QGׁ!Ljs|zؕ2V6z*fլ +Jd1 +lExpٮQ J[si >kC' +endstream endobj 2795 0 obj<> endobj 2796 0 obj<> endobj 2797 0 obj<> endobj 2798 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2799 0 obj<>stream +#?%[AussĨe{T#w0󏉣FU\&lpfuVu8i}PeU=+vƨOދ.sjآL;Y rxC,$rqwV2dx-#}'_<_hכ#:m;*5"".ih8HVTHLef*K 6J^;ּՏd9L]6]S9cRLx@8[)4x C +Cxi9?AJIƾy`,BLCNL +2ōd[UGo,hMMA!0%Wyx:>ZEn쁡J2˕ܽ +uo|;. J©v~gb@.<"m=JAN JLh_Sk'8o( ˿ƈ]"SZHV~F!WA9oSگ?$pklu츅!m6Rn/h +md_%'hZc:yǜq`Ԟ Y]Xꉇ{ӋArn?cb0y [@#"Τ:@NRʕõYg>(ԦZ=P%t3o9ec[`{nޔ!YUY&q2>ח [s#_ FkڠXՆВj> endobj 2801 0 obj<> endobj 2802 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2803 0 obj<>stream +41v#HPS3tyw|8|S $T:BQ Y\(fyӗѵyoM5ӣSN[N ,)#2 +W< +1x;_-wpsJh^&D@f iPg"𦔻_\v粊6#{9h0E\$bM7_vHPa|}wRH7u+T]:C[ 8UmtDQn+1s%(7qSVR t;DW hhOg#kc'k'/"Ch]"V_BR-ە$0`'qEWU'ӽpNNjY0U 5b@Y>{u\.Fvȸcw}?mM+:R0My3SBL;~'@ȅ:S[a5Gn'Y}߼m:f 9gȶwfwTh- AzO|%*:A,=aClX,.PF ;3|%<*$G(9~o 3)TBǂ~N4o{TΖoVZeh9dQوc٨ 338UfZJ RY4rs= #m `տͷ6 q%ibGJz]\4<K>>-G!ц㢰BY +H ,`{PܬKbr70XZ4&*%{iP`1l@D1EM +Fνsq32C()AfS85vy'©*`TG~g^֙pnj`Nc^]/$yҫ:!ߊ"k RllXk#íTe̎ +endstream endobj 2804 0 obj<> endobj 2805 0 obj<> endobj 2806 0 obj<> endobj 2807 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2808 0 obj<>stream +׏ΙrXb>x*ATDH"mNvvN̢7qC4˳#!H[ENEGOL=M +iDxyih\K/naCQn[GЯY(Rܾ5 R$bbNX0j?tm"gJ-3z0c?%TJ"ɣN Vh,˳G>)#j|ycsi,v9i5x֘8G4ޭe]\g5h;a?qY |1#Z@q,aB2%zkDuOX;)jKs+V"zRUʪ.Ο))i{iB2I*Z-Zv^_\˵ZҺ-OY_[87?iӴB] ^4}wk։K;5K Uh@L x)C,yh([vSIOg(Y-H@V!ot!]vL.J)2qvKy ,_^իzFsK +K )mMe}!8Z ۧG7qOȱ0kfH_+{#gE}JDֺUU'< EvݼPPgɊ$dip$lǁ@oLr:fkr*-h!Tgqnt~~Lgbd+YzUy@  ^"9pBbfJ$`2ÝrF$o`LxUYO} V 5NY-LQpf`CBל,'Qoe@F#€8umMN6;^ip%2uxxIS昇?"Bdnm{wbI2ҥC%An `^(+)b> endobj 2815 0 obj<> endobj 2816 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2817 0 obj<>stream +',.(% ]PHL ?+p s`{V{oQ֖wb*"<#2PR0v~oz @J`s3[9Q*˛c@+j.AoJrCtDF8h{|ԖZвfGXѨB7 +]yX^, %nj@X mWw6enݨ_ܜka& G|KUm}[ЋAS_.,ABNVN *\/8~9U̟X4AN$OS~z덯oDɈ}9!6n0Qvջ(ov)Sqk."H5)S@6E]F[=m`ka~BS+JQ2%?,C:G|=wnXih@GLCA&Z)!ǭ0d^%&;ZDG\4;;RbvrhQ;(zO fMSlf #-RN6_$jpsy +f1jy ]Q rEm]] +"3i# CL?c,~8*}t *_k \Ho?ck7Un\/(uʓzw̐tsx9; Bl&/&{NWl.,N3ζɪ0vo|潅xSO<8OoC;YLୀ&*qe +xPw]Y47k:-( W=j'55ũ㺔_b> 0y +O%E ʎlyLˊҊөssIiCy>ei[]1i\y-XѓAmai-@\8 +{WF;?* *O Cß|0~u<W=ئ6;O(㋌ Uobb6{Oʳ +endstream endobj 2818 0 obj<> endobj 2819 0 obj<> endobj 2820 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2821 0 obj<>stream +{Fكx v[Mrn7JZiv#"8"l<.!4h^b$>ڴ "^9cIp3TcЖUWG$Zj/|^\S6﵀:$ZF"꼟+ukXFUX@`خ&iUf'-=K +_#?c64թ%= \aC1%H]atbp;q,ԣ J}z)) ʴ!ŹJ 0mDN!~<7Ҋrfy J-Ep`dF_PT9YGWV)Vnj:;@O9c^&Ǣ8ɝ>K&Q4"06A+F.5VM*3Z=c'j"~lrK1{U(~|]*iLX.@)('5 {lYaP/~ӃNȗEOQh~ w$| Ծilz8dB͝@Gv<|wj4ou:+]haP8Ai~;:KSvd=|3.&ϡ, YGk5v(=0Y熒w 8,gb#9Q +endstream endobj 2822 0 obj<> endobj 2823 0 obj<> endobj 2824 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2825 0 obj<>stream +J> $)fDI)d˂OLaxu 䍿W]W>Azf> ++H,GU “B0pB<RYMyQӿ  >YFswm`MQnLsfwXK)AM?Ksoy +-y?>bH(hf^.yF9^:oPԭ\|DEՃ}'q1lQCb+f,98G@%6<_IҜhuP:t9v0gQA٣o{& B1|OfYP S$IL88A.6zɬ~x1;$jo: 8" +v|7{A +?!ݚݯs(qioi\Ubw>~.qj7@XJfw,J5+oFb:?4zp4ԁ۪A_m=r{{3I.c>,M.{!C5ӭ~"}5*Ys;4x @Ju|fY',&CkaۂE\xiq40ݜ%}߻*#Ԩ z +z !eD6 -f?FairܚTI +%'f?ɨ [w0ըHE;>?Oy)Wyh41S¤gBwN*b9z˼OHuބQmq'BBRMwoŲ)6Ú~˨dwOY4% JO%@{nZ38k-&`9(z1> endobj 2827 0 obj<> endobj 2828 0 obj<> endobj 2829 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2830 0 obj<>stream +WT fD1'M/)+Fvrͅ-3{X%;{'J`_;_OX\:(/Cv&u2GGgwo9$צǏ64VE=ʱ.YUEP0pAW[-&ai\@tuz!љ_GKlvijN9^`+F1;3ϻ6êȌ[Y;g,7*g_Z#Ysa3OI>Lt^5rV j~\(Pm IwE键Gn]l7|_nINY݃@wd¯a1J]bE +nAjh@q) - lxv*LILxBpٌF!;_XFjhk!mdr-}^AHo4i?:!6[''gT^<$XQ\|ak3͚>an#Su<#J+dXePeej5BFʖ=ٕơbdHEQ&>j86dEŢ%M+;* {)k./YXܿ2P}%ȦK`=a&.6t#}cJxM[~N#CMxԊ,lH]SeyVpo +{P]f"s+tC{yęp1 Al$MxOQD!ͪt}K QIVngѲ[=px-RV˾1i: =R:F^~T,EiS/LjyEx"2/ug1X=6[y`EඏUB\}% 4/Z +l1]ZO]bN)qTͯ.|jsR)RJaSB +`5*U2p檓cᖏٟ C8-AˈVd*>lj*|\I%< 3C7rHIf_S]?9z38y+Vsv"9^WM-RyO>>11x '5Mtצc-fc8"d.*Q6:j7;C΂V!YևJ֟P7=] +endstream endobj 2831 0 obj<> endobj 2832 0 obj<> endobj 2833 0 obj<> endobj 2834 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2835 0 obj<>stream +t-9pr{ܞЁ{r,r7ii ǭBW * >9C$`|_pZ;.4>z|tB@v߀N)W O2KWG|ANw gr˷)H DVEi@dѥU ,&:tHi΁0en֞irdKOXxOG׷`h"h8zPDzJx2eǥek> endobj 2837 0 obj<> endobj 2838 0 obj<> endobj 2839 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2840 0 obj<>stream + ֌ ZSdah\b-vSAO U&-+@0ȣtf/ՍAk=닿R \ o:ϖ+%fEzeQ +z +@ʜ/!!Eε9rPE3@6lB5)hEw؉lȋ ֬JXcnl61n}㺱9E)]9Ua/u?P8\Oulcҋ nrWcv]eEɗ6$1Sˀ-KjKPvVt˛Eݮ~Sn&wܟO?FsÃ_ҿOܑPŲ[1 +޻62)mPi5gy|;z`cWn!]k bUSwz&P*_̶ + +T;w%P @ +eƙtoF sfLa .nzTQdZ˪NpByĞs/N$$w^F K3T׹vӛ$/acQ-(p3*!ܤ+F1#:m|> @,҄1i[/aEN?jg~[2_3i|aOYTэlz6t)'6?q;\&uǷсJq_ms(IOJdWM2"u(,| i#G!* + Odf/C=_b2T!|wc4-1<8EsOPPVo{45{ϲLhS¦z<-5 3 xHAD݂&^.ǝtK@ByRTEL.޸>ߔh   6x]hŢZ?i +U +~ӦvEj ]4B(f dWKo[p3`#Wy*8J=Q>IGdjkXĤ],sr@347!,4wI +x$Fp2}g9MȨrdy6 +pӰV%r!3hۥT> endobj 2842 0 obj<> endobj 2843 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2844 0 obj<>stream +#4L=&SX(8 '"seg i;8oe ڴ ID J#Lɬy_O;WRXsd]}L&ʓu  f۪4ذS#lmp蓡؁i +-r-F ͩ"0\ J&#N|5>6o|nPbh} +zP"g :oua(Y`uQ7\<އq0b )8!(WW:8nvyzOej2XJ̈Ϯ?p_(QA4H-g +*; {kZӷȈT8| 1uv*d-)EHHQ^-juP/9">9'rqL ^:E+@7UD`GaOW_c-SowMC,8q2 +n j" ++w>kr$ :y'r_XIeHGаh^a&.% +I|o,ejc˅/|yA>p._>%PES>X97-kՂVBPo*6#DCMH|SARqN,AC凵co{wWu=2qmbO޲|M"DQpBc`O{{#߶ɓ#cEَR "lsR]HeCWVt:sxx߄ +lIJqt]G8Fh6ϛO pNҨh-?~om=_u) % >z|o&CK&""YD7 ?]V;DNw逴=ԯƴZym͊AmC> ׹R5Lp"(WݟƟr +zv4=zR{zbեJLi1-7 +endstream endobj 2845 0 obj<> endobj 2846 0 obj<> endobj 2847 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2848 0 obj<>stream +vA/]jCܒ4R4f 035Z,cA%[*ͮ7wF[{"- '(% R$_q_dq{%-GHk,os/+փb<}kjf${ H*9xL%1/̇#Tu15d1ׁ-R(DOJ |RNm3s3k]G8m(%&;5@4T.kF]<$l<b&HP۟v6I@984p1|@p%ی1~_Ck;k=m â\؞N°NAL^ +endstream endobj 2849 0 obj<> endobj 2850 0 obj<> endobj 2851 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2852 0 obj<>stream +YV:_@v;Ƣl0n쩼S{+ɥjJ0aU7tsō|\Bp!vήFQuFQ2M|z퍿fKwO`1-n3d!?VL]T_,f̠X g@˿Td R,}B-+!)z1TEn&(HkPFVgp=Dc=R'!构M[M^L9ДE:|zѮ E#FcGϩz "ҵSjHޤcX44T}: +nx[3tܦMH2@m6VPua@wzP<0sv[zSŴ)M.8k=jY _x:j.L}nb߫5۵Ny +^sH\^\ [OTATqCk(#\MNiŞ X|hk@^o$z +83:p0,!yA\^h8k[],6s,8A8BNp/CZ \=:`$ڍ1? pk3xEi8%K\Hc:5|HSxb]/K/5C֪tYW$4å=J`fsZfE΂ö^fD'uƓ;I)$KBE-~S_N`JpA2]oEгoYC?ey,wTf@z{6r[<>x9! +endstream endobj 2853 0 obj<> endobj 2854 0 obj<> endobj 2855 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2856 0 obj<>stream +7pNJ9,?qczTR] +Qnӟ +;ܒʉmrnC`ϊ`JKA *!d &Q n3_M:VF^3|Dkᅂ#]8Vawsd*@WRū5jE\GnY /c '5wn #ϝgm\}XPmF;Gʮe!rnj)뙂ڐC*Z9K[f<7eOqǀ@ 3Okr0Oۨӳס"T/O;7>]~E=>:23t| Lb)|s1Ԙߜ4nXxlag$.څsGrM vev~XQpnS'i{%כ) îUT9؟.&zq02'"+ ,xq% :7!0jhojo7?f/)-$.*h3: )MaBwj3qpB(־PMqimƭM.A9Y2Bթ.#EMVb\B P\'f mFM8LfT97> endobj 2858 0 obj<> endobj 2859 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2860 0 obj<>stream +] +zsE~0\ȍا,v\h{Z;w$J [hNJl'u,GIKm$*.`hf7~]EπzQC[c^ZwyZ(*@}'%dUtC9 Tx@KyH Ifb"j?颁5ݪ4Tӆs ||SW?{ujvc04/+IABKLBa~%-n.߬-F-lh@&W;ׁ"y{Er̍rBVz񝾾 mZO 5y}9&|h_g?W _DPwP +Pd =dvE튃#;}f[B-sQ{' JG$6j};H6S2^M5NbE0n!*%[Fgf&BMRWȊԆ2/_ԊMV ug*+;ygE /,,l(x$VV +endstream endobj 2861 0 obj<> endobj 2862 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2863 0 obj<>stream +;4Jl+A&H HQT]UjTuq/1&8)B #`wbK׵[AD/B8V8ZCF`&cL:tڏ\]6s V!E2t!w TXD/Be}7HwxjIҾvځ1Jz4ک 9L`M@X{ +]㏿I>{ ;9G4K5lxr¤˞ɡ<:ilFc1:zP8-HP7oW[:؅b!ӴȳC>u5L} II`Xz lAD U@ǡhy-:+ѹ:=CS׉oGlaᰍ´L -Xr7` ;:F9\8?oZ{5Eʸ*y>\.Qm%O?6l۠|}rbrmnupۋ#@͛"Qf(gx τCeajuBMGѣk0\lsaԋOeD1DH[ fRÕ:Ћ9-XOtaJ ^52=b wm< dVG2LzlMv@FnfD>?ЯF- }?еDt\'yeʒM\IPl^>:XbۦPAN +endstream endobj 2864 0 obj<> endobj 2865 0 obj<> endobj 2866 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2867 0 obj<>stream +[Q!;KPûR~ =5N!9Ȃ*Y(أyҚ1xeFߏE'(9MTG}lPMxaF! +jjfĞ

{/v=xIzrWT 8WViUqf w⦲3EvQ<߻i'@Zq'-C~)M "qb2]+#T VKYgA1`F@8.+eIW-M)يleL49k%_u)(̰b$ke-@)\P^@eL0lw$\sue80dtkމSV@OJA k$+]b ٕKbi +e[]e :: @j$gaʒڰZ&C]L $#iY:dmR#U[2)Kq?cD-뢖t |MBW⢖OYlK_ +&!_=- 'oOidF{ƓQ^^7|{N^:lq(۳R\Njxb,"PwWV4ŝp/e%=Y%UJ,JM?a8Y1 $AV1 3fϷ Sck|7@:eEE^X3E{\$ڻqsK|v !vMD +t[(솋>BVF:dm|>a)U$kڼPuBE`X77ix~A+M=t3Ok2H?;y4qZYJ4dΪ:X#ftW aXEneꊷzQL +qұ tSKBO^|k]f}] +<<Ɋ'T|4)ňV5YG +endstream endobj 2868 0 obj<> endobj 2869 0 obj<> endobj 2870 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2871 0 obj<>stream +t$BbwB!)w#:U892b+}WT^2DE_KJ#0hF{~H4䙔FѺynx@nQ%HIr8TP}T|[l_4 iD\5jm.V=<P+qt`n!^-tzmkKu)%P0B~s|s[KgXa"denhld8M'N(os@j>(M[ P]y$|0{mo U?. +HIX rL}9^oM. , PBHctAa73:D6i|ȂoɄC˹_)nhp& %ͯ!1qPW_"r9P>jd]EDhq'ˠL^iίH-6sJ)^J3%"E;TX5r=\F&+0-=n '&w+{| nW驨 +sRu&M]H[v(# +* *d_?AHH!4p Xp( yJ*1ݛoH GTUmQ +endstream endobj 2872 0 obj<> endobj 2873 0 obj<> endobj 2874 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2875 0 obj<>stream +Y0?ؽ{D(o-8<[CxT!3<d+ʓ 1b4\AwcP$>L><Y`em\@D+왉mb, 3ާs5f%?ŽZ?ANy3Q DEZXK1" 4sThְ(zx *)'ly1Fa_(8$3Cnf,D,IwCPb`,=(̃,="?- }p%ETo OBj}y8oHc T53Gw&~:~Y7NMH[׌'Z[L*HJ*cpWI^PjeT(Uff|mC!D%E4ȸJݶ_wdǶP'tIpjm͹ng!^$-sڻYyg%m 9Es臞VAkşrXtV;:bd(NXP()\%fYH2*֬ƥ%g3V^dcOX^\k s' +endstream endobj 2876 0 obj<> endobj 2877 0 obj<> endobj 2878 0 obj<> endobj 2879 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2880 0 obj<>stream +rYS2!usƍq_AeWEVW8=HA^)cb1k*m2̯2T" y˽)tƗZoxGP/2`wO2v_cY` s(CeV(ۉPNӵk*6V!k<'Ǿ1kpi +_Î@9jѸ&븠w+F쪖ﴋHDb;&%X4Z#y_sX-bH\P<\@QAtܺQ.ۮ0 hhϯ<#&ځQsm=Z{4'_&~Qrc^ds1 8Ee>.fo/\=1\rw(?a]U@P-*. : Oc2-1pT|r6QM黁HT(9:B[ICTlkjk,1LИE yG WALȸwzoxђS$A&HT߳F>Yzڙ2z_b6TCҢ%PQn d؏A#tti{^`(<ȰNiynFx9v8Ғ=F! +nct'&n3HMyjP# DǸ[ s̕hDwXµS5VXۗBI/gRCyVms#$BJ ,Iz_ >AYlڦbO}+:Ct$`c1>3,x2T xJ +; +%7 ZF}|P +3FZVSt +(E\]nkyr(FO@Cߦ!wCH> )U)\ 4c )gu$\K +`ɲakwy{0Ւ@bZ0X(  +!@o- c{/&(Eח1QznsRQ6)6 ՘i(Jޔ^m19z^r~ld%ޞ1]k8Hk7Z}%Y^c/ViKُܸ&@b&Eچ=eslnN2n2d*:Qȶq>Fryp(Dd Ky[ۣb#O4UEx +endstream endobj 2881 0 obj<> endobj 2882 0 obj<> endobj 2883 0 obj<> endobj 2884 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2885 0 obj<>stream +L܀H@ 5'ދt%31ZXV~qUj99Y%kv`;9U7 ,fԉN&4)Q5#H{P,ܭ}&J(al3Ѩς X:69GJa{VT8xLYZf,㩙#j"m7-` zK ]YϹO0tOl&g#ţ6BIդ9Wb=*7 FYUwx x-BVF1H&Թ||xL/QT .5D] tC'JuNvtpEk&N8ޕvuAa40CP3^f +E0r'_EHR?T}A_sDfXe pJih7=T*K1U//E2F0;S2C7b\9B H}~!ҠuزP#y7+_f WIN,RDK: L^n8!Rwx8y? :~YT*#Nt`N;rөZlA#M E]ç9ӊ't,K%y|{ eӝ3ƆסS9P&b䢋B!D?Q!FDQW1?)Kٿ٭15{=R_{~RsP!l^JOf7" +Hć~1> endobj 2887 0 obj<> endobj 2888 0 obj<> endobj 2889 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2890 0 obj<>stream +elC@ytp&Nѥ$P8,8DEt &ipf=VPE_Axud8 kh5aqNpӖ.fq|Y.vּur=(s1 c?r%On|=,kC`n4Z+gj68Qa'ȹ%U:-cƗ]x%cH &қƋAR*ݟB2]]?^Vhu|2DYM5NR2X," 5yG0cqSЀ=!͝&5ԓ|,DZՁ0g1#+>oUx׍V&Zz|ՋLeR>uɋk\)XEݤzVeVQnQx^qm#[ìa@ON8d(?2fFj"޺nъ'eкcqh^+F-Rh;NzX =a~SF-e CuHX% d rZ̼EibTS9,3sʿ/cF'D T%s]xΖ$'e`^/iKmٳ7yeMjMםkN'yCʒWi{ + +endstream endobj 2891 0 obj<> endobj 2892 0 obj<> endobj 2893 0 obj<> endobj 2894 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2895 0 obj<>stream +!3+m z[7ԕb䆃/$` (;_::Oue +GH$%!WJj j&/n@|*1Xx糔@V5DS,zk[f83:JiZ|rU=Ijf7ҫ;2x\kAݨD DR%i+]^lZ"gf횸I\j)Ql!9K8$I*?%ZH+6U4!/EYA˿k2pJ "Bg8.uE +g,-7>ݦ}9z-0xyPb;<=TYwS祉qgmL fA|w,jCОv(˃*o+0Էцq^=mj켨DJunv(@ v9 SA!?GURjG./Vo /2O/#L^ Q +}-~`_5fB*cGcsX\X_.՝>QApche.Tc4`" + +e"-Vx,`$+e`A[\9F +Nv~.^N15 Wb?WVIu0L~LpYBB䚷NQfoSuΛ!ZT~*QG6)V~2ТS d;U,<ՕЕ#|c5ęX/A"HF?1'en8 ΁!=ᒝ\+MO 2rt3FTz\ R QCd$ZM:'zN~I*B^B4=sZzi*u{WJl_F_0:g :*/Ah2(^eP>%=(dw M}2ѠJݠy'J)Wh<&S+܃th*YW!^}exC Xd<7 F]thbe$́),E|#Ex;aViy:dsm^z&|ѡw2`m J 3R qC{.Ϩ3?1o9 +endstream endobj 2896 0 obj<> endobj 2897 0 obj<> endobj 2898 0 obj<> endobj 2899 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2900 0 obj<>stream +58 ^oAΐtqr)HEɿKنo)݆ +e%oܢGh}- LLW oc\eI$UJu[dA>lJ|#yrz/Ah+g-ɕ[`nI4 v)7ufТ^Uvkq1jD, ەh:)A)>Y }G? ֻ̅0W +_lbؼ g0.ţ gHUP{~? GFqGw=|{,EvOYĒv2K rsei h]b#P YdYnhKa1KhKR֠»7k59y7t[ D fS)Ye`{[!MrЀS>&>pĮ,%cla3n)hLmTSIi[JDfWo i*M["PjG "k%v㥢O)kfUA&:v bK7:_op'aꪬ tv)OHO.땮ЋON'=eeE C?O7MoS5koߴ/fhEhlr֏݁6~3|%8塛bĀZ+ ᦧWκcS4oY9w-²Hb]:1qΧrFՍN 2DA'ޝxD^xg9Jьce^.1vꊲh5 FzGgJI5~SZ!48,Wgf9WD;Vk?k#H C[Kvkl[& 9.23n" 6[ +(xsw=bLBNz@i9_ #WY[ge~rW%JZMf@_ 7< AT^itpqg4G +*p{NHkӘ"촬ddj>3Vpa\w`XLH> endobj 2902 0 obj<> endobj 2903 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2904 0 obj<>stream +1i"J0m5Aʋ4 ̔,ʣ̕;2HbԵjnsKbq)5ѥ,Uu޻*D`S_kFL G#67Y_<|GX M}À{m 9 ys Mդj!``)I'.BTlWlbmČ5uL+t%).6pRW@R l&,4US*\rlyTn%; eW5 sunF a bdcq{ +)K8/2rZLNlqAEnLCw= La9=ØsD68-S{rYñ>- Q \JRF:c`sO = wHUlΥZu3xZǨd1~Y[dqf!T+SyfS 0;CF4w͔ХJ) 2fzBk\(Y  +>הvfI"dkK +G6C7+A6^ `0)Ga%_w*W=hEAWH{4Н֍ SNr[1?(Р)#'Ohtze^Kyq&mdY<̼fš*qDA: ovJd˿Ny , +VNOݥ5\ĕ{iv2\c$=,&=M> endobj 2906 0 obj<> endobj 2907 0 obj<> endobj 2908 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2909 0 obj<>stream +@+_X:q +&{kbUH0`/MaꏰV%3jP(ƮwxdXL+/fK& #[@){&;ìPmPN/DDa8(b)NDҙz8Bmhm.p%JJBV;CTx'XTgHW5rv5I (ڕa؅wO9|7ol X׺uA\j +w?19HkM5LJ_"cZtG$A'Եj^ -Dž,¸ |~xʝXٞh;MGeOĞu'TA TZ Шf:Ÿ_ *?,wKKXW.DqT~Lj}4M.;djBMH3']Ac +M{ ݨ4@м9-`m *,'@ ++aNBX^.c6B]$%4/.0tȁ2yb|6͚5mtX)r犍ɿ2{V|L$2]ӉrQ> +UU1Aᅦ59+dkb;lE降lZ)АԕNs){|> endobj 2911 0 obj<> endobj 2912 0 obj<> endobj 2913 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2914 0 obj<>stream +uz̮˹;yni0mޯ ̀Ba[k|!nR#t&VE(w…<ܣ +-vg_9*AC|2<޿I s_a/ :Ÿ^x +WwHs|PE<^I ?!B/ i[W;ηB1mŲ߀$>WTN  C,O^8l˞˺7N +Ա)("n\FpKgɊ"L#p]5 yV'[aqc< ~×#yr^ 9Ijy%8wɹ< tY>Ȫ?˱[yiڰjU^+Εx35 +5~Ƿ_`v!Ogǔ9_YrK`AɊ?| S7yIbs=+Ig|I&eHl8 +endstream endobj 2915 0 obj<> endobj 2916 0 obj<> endobj 2917 0 obj<> endobj 2918 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2919 0 obj<>stream +\:q\.AӼX+ϕ+@6I2s.ED l +f*]X>`a^(0wjIޛm4RQ5J8k| ]M7$>嶘M8֕]z;P+`M*CYOdڧ~ :K2V:&i٬ЕxҹDyݕ3+[JVDVM$Xg": (B*>%)Qf}h=x+ӌ;,{0; &͎layBmlғ,W7PF'ȲjJT#/ak*.qA0'<nݗ F!#*%oi +ZYݸ1 Q<)>Llѳ@NFz q~pȥ^]\ۺ1"0,'V{˓J jd +>uڳ7 tZ N[A s" tȔc>ʋNM]K{ځN$$whTS N3_-15%F8n"~v)#2bt>ߋHdy_O[nf4Q 3#"z5{  DBf ~YiP($ggť$EY]]'bHs(GRa(\LC4)UK}6ρϘؔH4p8lX_bPĕ8h7}:ٽ4^$wΕ(5@,wʺSAuG7lcB!B?φj$6PAnI@~JCt>pYړEDz il&.N*Q^] Fmo2| Q!UYAC,@7`X8XVvsWv<Ft. {Pk¸TqsXoL^fP +@JUr (nɏd4t'ypsIԷ aԊ_h'!c9%TTE[vǀj_&)K~Q!:[ː!h@"aS9IbM]$2]P_iqXa h Qē7 +endstream endobj 2920 0 obj<> endobj 2921 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2922 0 obj<>stream +n? p`72dD-Xi',tӫ0Zq]E {+ xVzV;A9I{`S9Vz ܫt'4n'469{_~>以M$GiSqaVӡlQnФoofm]e:*MDY\W7rQ|*2%L@a"ల;yG9}sAt]AuPo*C s ay#Pށ=əFb 2O +endstream endobj 2923 0 obj<> endobj 2924 0 obj<> endobj 2925 0 obj<> endobj 2926 0 obj<> endobj 2927 0 obj<> endobj 2928 0 obj<> endobj 2929 0 obj<> endobj 2930 0 obj<> endobj 2931 0 obj<> endobj 2932 0 obj<> endobj 2933 0 obj<> endobj 2934 0 obj<> endobj 2935 0 obj<> endobj 2936 0 obj<> endobj 2937 0 obj<> endobj 2938 0 obj<> endobj 2939 0 obj<> endobj 2940 0 obj<> endobj 2941 0 obj<> endobj 2942 0 obj<> endobj 2943 0 obj<> endobj 2944 0 obj<> endobj 2945 0 obj<> endobj 2946 0 obj<> endobj 2947 0 obj<> endobj 2948 0 obj<> endobj 2949 0 obj<> endobj 2950 0 obj<> endobj 2951 0 obj<> endobj 2952 0 obj<> endobj 2953 0 obj<> endobj 2954 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2955 0 obj<>stream +՟N&¤oRZwB.r&E]Ao4,7 !͂ג)#AcUZPL63ϳprhɠ"+h@@y7:n+ 3|PwMJavV&YJQՎB7ME{pHQ4 +0Yw.qZ?Qݤ,/uIa+\lEz~n$RF}θ9'=PL[yèoΏ(v(;*K .DnW4!kaj"d[h*>xɆ=0B%% * +[cv{2A__p8V܃&#'1D?~,xw&֓w3^|e2O åi/Iu0`vKܮ 1B2jXζrH'6)IVΫ5lSi8O .6v^/!pEZ%g|1Vu3%-ӱJM-zͶ]nLp9h4Z5{x#Aiv&'ŧ~0 \cSN$Kg;mOvHZ]՘bac*^0/sm~/k:*ȓ838U ߬1W $ua;Bxyt^ZDK|˙Ni~qtkؓkA.+h ( %6(>:o*Ke9Iyg6$55i.K7܇aLw1zX`gLw\ߤp§t?|"]^Fa-#g(6Dܸ>O"C. N0{-]P°jE}/;(Da4HSkaM4,{[MʔB_+.i Byzv״W*xg߽[fCv@3\tGٴ fUɦ-UbvV^@n>hOUWcq(x3SROt!l!F+F*_ zL6[AU(OY91=J*Nef#qRDg#r!m ,;fOF^ds cVh76)}K CxcՃ^%gbis6"CʾG٩jvRQuP0\" op-,O4~{V-[ڦtOWu_ {t[^]0J8 ˚èNhk蔵" ">  Gۃ[_D'躮Rjm^2!p${䳳{֬.Ƙ3e^t_,V.9aBy{exbx2f>sݭ.Vs6nE;O>?ӛ?, hD%bdT`S{YnώL=86}@{@ρ;Lv^?+解gW"Υe8ΩlWXW^tTmvrinyK*鎤?H{N+ވ᰸x(l1B3D^Q*kjce@%b2tS!:zৢRU_B&R$D2s\ Rl 9MHT,Ui PP no{|J1CͮZ"YvZ j[wa&"g(rxqW}m.-Re9$(MCHǟ{Yyoiӛ jB[-{/">z8V)_ۋ43x79_P46p[Ã7Ϥe@WdmmC*S|y-ɷB̕|V~\rkQ0MZ%uSf *E)i6 +4 j`2N/<ȸ̭Ȩڂ^}pl%d~xOQ8xtjLч>f+ 2нr{ 82oĭW b5;φ&ZquPnpQݎa?+,pMWkn78FM3~_`&b^AmwJ +DİuXwq2i>-y0_h?*a:H +jYwF?]p9|x=(j_?2a^Yw>lea;~ʉtFNz/.ʣ>xd' wgw 8 VC!wݚ>2*إWG-A:Ӷd0I{M*t;UA] e1 210D7t#a{siqŦD" +38j$acb(u'TӔ َ'>떉]#24)")twڻ2<;1`e7cGc-ӅXp)|2 +nP(sN-_6B7\d>JcTw]HؾӟwFw5v%ǎIpݪc23 +7ubXqKb\] π34p} oS> oA u jS]?\ [EvAALُT=/ӂhĐQ򱸘ʓR !:udi -Kf>tMhˡfD86UD\idΌ3[<{^Wȯ*菊{[%P%׏|6l<qF/HpYA-(} iw23cیaCeoI +*#kL!f0÷iGsD +lh&⧫ోx(ku +endstream endobj 2956 0 obj<> endobj 2957 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2958 0 obj<>stream +msB%PEyЅ-$jK* DX,-co,}4`*Kcr lMT}.U +:6tY_a¹Y/I1-nVB6/y6R}L "nNeE(Ԁ/;srYQWI7'9Sx;>3.ipuړ!   XQqlF>ƝF2RJ`QW ZB09BТR٨Kv]HC5^mZ8r X"B0/E}( Ay_s^БaW; ),P^]+@xZU$CT%`lA:Nt@87rxR(E9[jYKP$l7 &DX!}ؑ6r@XQkh\\>;?}eAK!?CJO|Qۆ B:~q}<*-T\M0Y]=dg(]'(ŷRg-,C*q( Rj#H@MB8"e;y{qToNnR?1E#ZeȰ>yw[Z9j{ޜz uH ++Kzr{ULR!BHˆ1k􁳠> endobj 2960 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2961 0 obj<>stream +8tZ 2MkâK̓|BǶ% xiZU}tjeR %`_k z΁y墱DL4D'e]ߟBsels $xNPwv|lPg* uO֐y|g9,Q:PZ7@vk |< +ߠ6q𨟷nn-=mzOleOVκ0ؤ;O($?ml9R,?HX,G +[,6ܬ.SOʿ-I;ԖZꂪe:v8+#5N3eCݬLh> ,kf=۶kađϷUG4\an Yu 6c+鄬J~UmYOUEs3ܲ@U(2f#jqoz]Qh +ׇZHܻl=%)ex|R:c7liIT'<龬y0EgNeeOiRf9|6+Z ` t,ʆV1 ;43&ML[zYs ı)[W.y4r +=NN +endstream endobj 2962 0 obj<> endobj 2963 0 obj<> endobj 2964 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2965 0 obj<>stream +ATZ$>] u>U.JVK{ӺېwXڳG$]wD X^/0So+ybaU+f$hcg$87q֩7+t.V48H)Zc.*s98 ]oOpDv^6m.3{ɃaoHWv@f`,nJi omOZJȂìy:6UCJ<:Oỵ=9AhCu`M V~ń5,fh[][; h6zere֗*TsbEIg?x,2j-T*{yK$yFPR{a"O;>} s`VBupQ6|b;zD)\J&;H/ +>w78氧.VYogL fbbrEt5EXvDq+WC5l* `+92xNOѯEv%D^|+D(k SNeXŋB) +BM +SKk![k=x?V\A5ߦb4d=QN?AmpV9JZD=ܺ.wŹR)E_ x.ʈ +endstream endobj 2966 0 obj<> endobj 2967 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2968 0 obj<>stream +51^-{kpL);m-.D0}?ؓ .@ lN᜵K*Z$`Ay?^@F@JAUWTQ|ucQE#\nJwXTaY.OAWZ,Y\82, L.QuuC)ߌ:]Q_6n=~A\ +C'Lx^=4 +~0O†a 24Ilxefބ\fZ,CTbuDĒ=E" +w_78(вDUt0ĆV`p(IzMn\`~ w=i6USXp>NN7d$ +b-ȟ` +&г^>V[Opq<ߐY)w"e> endobj 2970 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2971 0 obj<>stream +Ʀ43De RzyZ*8CJ2zyI $A+h7ydL>ޘF~àժ3O[6۾pDXv{7M0r/5_ս0=Q3up +-Gf<T%z%r.v]3پfC +:Wqe?4pX_5T(ζ`+ye{(=lfkm#Өx++?Hl) \\O A^5k&*jmG{P8g< &TeyiGEq$' pSWJrX;е40ebvpl3Cr zV %" ZYz!r@pI4~Ȃ?]@'%J3֓YE~&4&qb@@QVc;) ǫgv bRP?.CY%27t>Q<"M6>'3k|o=jNp@:_vz˙^I!!yN){U l{-sP&VS=-H'Nѭ~o-aJs\SƬR FBYFbe)kA+V>|?p ZƫvTwv9 ^g*>Wƀ8( mKG4{y1$ &>,qoYU +T_BSltWcxy@@ d~%i*JֺY&c@vn*,ͨxS}C]EI](]E)Mp-PBvzMJ߉! +IL<SC% +endstream endobj 2972 0 obj<> endobj 2973 0 obj<> endobj 2974 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2975 0 obj<>stream +/"w]&f{5u@U*+J3Iml(S<+)LU3o2' +<]}tAb{ %㹀 _HD =Tg$Rj7w\ xz<{*K}nҍ[+ 4@T^߯gΠw'w䗄= x'>&l:U׈Mk h#Uߟ G/w\tMQB69.Zi})WO4;m >#ZJRcXmZj0`tRByy{a-\M8p8u C]H͈ӣљ{L#+f?-zI'Myǟlx@ +d@q*tPWڟ%E~9D?Lk-v /%} +v);il]=΄mrYMp5X_b)B e$cūw(U"\S[ ~*vg6iИt#~G ZA5LVV@/9ݱ4蹁m_7JrG }CP Dz-U'rśφ`(#SFMG:_T5~=Vͦ.)S5+_ 7${w>4c35g|W.@-%ZoTUG%j>{Cf!y$C^75Y/k9͛x6;P@ ;7J ];U K&Z﵇e+פ!XTPSYժ__F?5deˈ?`hg3Cz$T  u.AP[4MBf@ \^&tVyKnC,5lsa.Z }KE%tvC>{)졏Pj5$&'4L*}=T oI۶nAX@dyNʘKqÆgo"y̪lv!"XAh>^]1B}?Ep\1㊼kRh܊E+P(J M1?QT/8袇ɾ_^ײYYU*9_ S[o'PTX'\*"> endobj 2977 0 obj<> endobj 2978 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2979 0 obj<>stream +3`saC%^zxvZ(nJɑ@eh:Ra"gR(ī_Fa t{qQ.DՋL1A#al9DSJi*H+xƗVQ|Wle"»ɟ'VRɰɒulW(m_sI`D?; +'-71w-9:j෦!20 B{?`8ZE~9=L)'C^_ZuX*i2cJ|Π/^QI[΄vck|L%TNc1Lr!|oOԀ`.re @7_Mp4L{5 ōl0(L2ϭ ؁&1ߐ/(3UK4rCb<|ʽ\Fūjo躖ƽ (j29|d˯3snu(! ph,f36RfwZrP{{{0?{npf܍ʢZ1{>s|ʜbusRB=sŒ6|΃'w楒S&γW8.t dFb0̣g^N"DK`\;iXPtL%3mqcX'k׻|CV0\ˬZB!s'su7kO fWΰ+qrW c<095pd(YKj%Ki:`wu#O +zUi Jk0=V;MlU7y>!O܀$%,n~`^B, +ɞ$7Fa׆=9Opa8rDBl<4Nxdط|(]5xŲMr;5^i#ο tu`6R5hfM ڜ*F'Ȇ_/KmD6={t(Mr026!sHr *խ-؆`2b +endstream endobj 2980 0 obj<> endobj 2981 0 obj<> endobj 2982 0 obj<> endobj 2983 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2984 0 obj<>stream +,s`ή*JV*I*-ɭD{}^fbm ,uwD-sN)aL"3ȵ#&;j&:9B^SeБ)HUºƻI̅ri\Hb< "#c" ,Q,jƋTע"zKq>٢ڜ! ex'ىeRwD O5'=DSLΗMR0`|^L[nu*|K \8ȏl~ |݌/hʽ5i2Bas gS +yax +ZwȷИLj\H: >)tO +6I_aǣg tԾTJI YP4#ȑ_7\\x-PJ 1.4>cN؜TtYJIXC75nReĤf~MwrgPOiX&&룷 +YʾBȎO{ C|,+4+GM'X;__.bf2oYu1 p|hbKaϵ1M&AY$N!p =JH@CH=PdkqUViJ?pZ %yCkPdq ʏFC|bϱܥU.;.> endobj 2986 0 obj<> endobj 2987 0 obj<> endobj 2988 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2989 0 obj<>stream +\?rAQ | E6/>ӈxn3)U39/kh VZ'#(e_IT ,dtK?x``ϋ+w;ʱУƒЕ0vqϥ~SS6ٴk?ޜɭ>:!ٺ>*.o4wog2zK |KL^^d&RGHmPԷa%oEοjt'Qb gOk6 {*sT&юtIxӇ"ur{D8@تjύ %B9ZLS*EWݍMA(f5ؒTgy!?ن4@qa{%^xd6l7 jayR rwgˋ)X\mT9N35G H=σx-!] +k(H0{?I1WCɄHkHB]8v`uX׊uzPm*܍R_ÌwUU*閛r[GO'۰_ߖe/9&St[՟šcVdjb#xVQ~n+#Gig"> endobj 2991 0 obj<> endobj 2992 0 obj<> endobj 2993 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2994 0 obj<>stream +XרZ4@)ey{"'X Q0n{߻& 2w .-u9(*xqc8$T吣;*%J+*]1@ciR]wqA\uTτSU;R1&h`vRi \ ??Ў6h"mǵxP]}/C+◴MPKN6 H^pܤy +%ٵ`šTn}؇165 +UcGRwvrYmz8pR&18.)}LE`*jT{4nXMUG=5 Oj0 [P淫ع"S/h!y\_=dFlcL2a<ז[F_"f,^ 7L7bIe[jư JI,y!gINxG,6b0`? O,"#(.ܞ5 } ǭS'lʱӯОN/.s#,xZdm!50Έto ħNwPdO5bF(h nuVw%'/5c_BKԝ4q<J"mۯOm1r;K<Xm8'Yծ"spqќڏ_66e&>]w54fD +WCWU=W#ʼ?S812e6$*BWw) F{7<ܘ F,/ 7QLIYPMbh2iQdgW͘i|ğ[("ԁ1qUEҺhY9>_0U_F&zjr1".4  |rBFcf8ݤN;Kj9As4TՒZ𣧽C# >Y%(atVcC5*krLк,-t}S7#ZB\b} ڤZ}7$!,ǥ3țvo%9a{x)'{i|6Eo1 +endstream endobj 2995 0 obj<> endobj 2996 0 obj<> endobj 2997 0 obj<> endobj 2998 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 2999 0 obj<>stream +Pyÿ́ \kvXC=E:Vא0Z6./cZO, }!4 -#VqNT.~*{7(2ikӿfuDx(rj R2b{A5P)+(y8(]|\l(L\,OR;Fb U +ŸS|<({@ O@6:7Il&ؠT*R,JʃG圱%V2R!b&PH簢B)bF&.[ǾzG@eK,L߷z`Qn63J2 ?KwugDDaw$B +ҌP+z=F>;b?)r q^Sq$ YLgDTBtu4\+ʂbD1+&οd-ϴl#{`sD@ T|7TV۾Wk+@9j +Jg`:(s.ڻB=z (šF҈CL睕c}CmvV,cxX:[%P4GOW}(C<<عԍ??P3r)F4WPm*O%Lihޤjhݰ,bRt/_g#Fh:oxlԏdԠC tcqBU%:e^R,THQfut)]éh+P@:ek[Sw92'A;laS/spXq$ZR@ˍ<s'>(!w!_QkUmokv:p(yCH%sVZPlZ +endstream endobj 3000 0 obj<> endobj 3001 0 obj<> endobj 3002 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3003 0 obj<>stream +ʚNJ3կ4QկL"½ ";lgĥMmUN(+^;:d,H'.(|=هr޳zFlGr[Ih'xǒ`)s+qHQYTHeeE5{;-}Dj_Ri6k~ +YS窱chPw1bdC MȘË1;xQ5Pj,O-&wz=ّn taezvkSݶp{ !s\ۈUt|7h`Npo:++nq>E+Ȣ&0V^jIrYNݻf'W/+=EkWt=bET=njxsՐ0?"X~pg p-?(BD%ө +endstream endobj 3004 0 obj<> endobj 3005 0 obj<> endobj 3006 0 obj<> endobj 3007 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3008 0 obj<>stream +Q,HϸU9VPNVap" ^@4"Z(?`l(G\?_ﴰW: VJ=]ܖ!R9)  +2~Q(Շܓ3V3, }xUe!xfiK]%q42bMGؿ +? zVt Y E^2Xd h]!,j?Ec1˹-`[.:!h:Rđ}T/هfW ''..(g.uVF=O:T#T*-Qqm>{|LpXMbC+\t&{x۷5ureASBz V`N}T.oR%y V^tEۖb&A~.N"]6UTr#˶c1זcL(2&#aP1TK9/@t%BcvJ24 3x_2<~0lSfVG0 \~v6,Xhq%3 O $>zC߅Vy4rޘ(6].'gúm爢wH=M.ffsf|OGTO{tT!@ûkflަ9:zw?Cm}b¦q79mRi߮03H;̂0PW_=欏>H;73rĈs%ECp#]2g3X'{YPTE#CDy1j*ATsQ,XAT^P EJ{aSIsڪ[N7gS:Xz##X@Ix>YNޫd[@*aYf=9gcԽNs'H+Van c\\:0mTq0kgX+r3KVMWCƦպ҆ +FVޖuSc^ [C )*%"`,I6q>B}ŗT{ b|M$ ;C)G*(W# +endstream endobj 3009 0 obj<> endobj 3010 0 obj<> endobj 3011 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3012 0 obj<>stream +R∻2s xZ[O,\_EU)0]vG_(F!2yW(لCJ<LpܨQvsiSYcsyBqN.>٠w4C yVaJ[=6xnl}Ho1(NÏn=_\-##l֝>yOa)5t 3D@{MjG5`t/a!'Lf \ʜ p *oԜp\F/$Kꐅ'HCÕ_] ;9UܬL(>"[tz9=F[MgZ +RYO2S/DdO3*jI$TPVo{gZymtSU=FG Гɥ^?:K2OT爯n&Š(fm"<4K0{OLD T]Siqk`y 6[*Ӂ {I8޳$ + 'EKzW6B +endstream endobj 3013 0 obj<> endobj 3014 0 obj<> endobj 3015 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3016 0 obj<>stream +|k.vdj>*jCA7#t#޲yS{r.; +%-]n",gPYd} F̹L*{Ч} !L1ָt2ww@1bp UyrO KEzXq+Lugק˾uC7Z_ҵAK:6Bu(zS#F&Kb$r"`Ej`*guW#37B̿ KtS$yՂ9>rQZZkUVӋ=pGw~ :Sbh?u[RmY4=fx*ðy _ ˙qّ˪(<"ƬX.'fu5X:/|H\ُx}ׄ)M?n{ E#x{ޚ~mr hu/$U|;PGkF6ø|*:Rnw钡GE+} pTn^'$s ^ [ϯM7x\A<2q4-}n6҉kkW)Ldg#˼5o:v7jN+Ֆ)7>~W9rJsL*exB$N!QQuK+L D{$05O3hkնX~gK &ŸUWguĀ > endobj 3018 0 obj<> endobj 3019 0 obj<> endobj 3020 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3021 0 obj<>stream +۶"&9p +TeYo 34VN!K}f}SuGG5ȼNu/:nPF"sϯ*,xv8nTbk%h %-u!Mb!\Hlhw2w5M{&SOB t_Ё {{ W$!OE9MO;O]|ڶaMUDLJ)ॶ tij%TL!'MJkpx $(#+'`h_d:QJW#u4wmxG ]@;,wrByϼeqYjHєLvE:%S~`j<._O+lt +7_S#>{RzpIE q6+͒t8-IX ߓ + H< +,uxV;n(bmf5HG z9}t .EQx*%O]8&I9GR[2 +c+ KA  UiQ'V^`.TeV(;+h-|Yl{y>O ɝyrnE8׊5jx@R7|GIwKD9Pzv;"ėTP{ׇ `459Y+&|OeZJlĠiGvW> endobj 3023 0 obj<> endobj 3024 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3025 0 obj<>stream +z4msz7JC@_Y z} +&0waMb@؊[ބ1x +.X1_gabOح<3 :6vq5{nM%!W0֫kodMU <EZzoF*ԭU;J_PYS:܁alucZLM% j_ HSUHi\㴐 w-F"#AUw%y;_D8:.'?;;"u31'MTú0+qZ{A6x3m;z q8̕t~+!`l0[.,9=,]$Nvh0OL^KГɋzzV sz6D!&6;^YXݸ;6S<6;DVFΧ!4Wo'6ׂ Ɛiݵ5 UrM{BOaLګP8NxFX>?F}߽_y4)iAƳ:θA2'ѢE(uՐuVE'7 d iVuw> endobj 3027 0 obj<> endobj 3028 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3029 0 obj<>stream +mPj9#R0;‡|<@6i-]u+l| Ȱ-h0LŨjU%JEN8mr<[\.Wb;\tF\X6e}@+Lmj D9]1lVD|O33ݍqol4)`㟇VBX m긍f}C' +\w: lUI`HEOkZSQhMR9nӆjyO-q {E,pwڷU ḰJs]c#͈>Aә>JҠtz#0nl6 a^G Ք:0qA\,؇{ϛ8> endobj 3031 0 obj<> endobj 3032 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3033 0 obj<>stream +ZXiȔ3{cŖ7i0 0ih_&+o4h$N>>ŢKgzwl_֕hM,JJG7U*A1KϟSô/]v]Pz%QXЄ< ó!"_οv6Iޑ4ƺ\L^a/~pǮV7+ZS!ڋ] +BQJXBF^{$L&:4 +."1{gxdaxzbQ9)em"̸NiUS@jT.EG,4n u͂^.]_C>%ju5a`"+ # +!eii %&Y}_ũl_TIQ|0j+٨Pl>_a+I1 +=S$+wl>!:\InJ% >Ɔ4?C]临<'y>9H5_)N*`/SI?]d!:6iRS=dcZc1hPZb)xd| =FaC_ :lZ]j"0`n5C|T?GgVח + ֻd9xFB ʝF$̽ι|QfS;(2%U.;G.P6ȷ#ԇ&,a]*C?gZq6b +endstream endobj 3034 0 obj<> endobj 3035 0 obj<> endobj 3036 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3037 0 obj<>stream +;= +0M1ԟg)I~G!LeZ;*0R-|j.{S6^^ţi(!C}A1#dHQt\^DJ$͗JqӾ^(L>\k,2=, ޶Kفّ`z:aGVa#zQiAΧ=MT*YX2(\j@hRRBR9 C&onThI ½ݑa!hqj{rfIꅕI(/XFC&f0c)#p:x "&yӌq7OXSyG˺L*sS}/A +endstream endobj 3038 0 obj<> endobj 3039 0 obj<> endobj 3040 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3041 0 obj<>stream +\RSlvWO#1<% [o>* lTB!Gn)< s4[:)g{ٟxu|tTb+MHh2ёz rE49ЦhdRŬ +]Hq"(-`KB# U:C3p@1D +9E@1a;'%Wh'*yr`Єi_VCQ&xa)`,k.5״+=WTrJ:W[^K-['n0w2`UO vt=ּ؁9Q3&rNl&uP 0YfN`½řdi߳O +{4Q jЩO<"X({:E +r-u&Re>)' ~q45xKA55B eֺu8uf=hB1Ыڵ6miM=XmVWb!=5'aEŒJ|M?}GdRJSݲ/MX6u|^VF^0] +endstream endobj 3042 0 obj<> endobj 3043 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3044 0 obj<>stream +8nȹJME4kB4 V.\f 8pZf @SjW8~͗Ch6?]JcbijI[}5%4P.ȗi\ذ𓮼-qBp`j +i(C +:-M]Rj`Fe_6$\kkvӛq $IiJ$IrV޻XYs P+> endobj 3046 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3047 0 obj<>stream +^]4LL-۠NC~K"^t<_՛p!'DxCp31IN +"B'3zr#T=-UEga?4g&i0C40wE"eϘs="ާ9B<9=#"5PR\Q ,IƒomZQ//&hu4u⏇kH}P۞O7>TCB9):zMimu]}wAx1P6J&Ǡ%rcWѢy_`X)m +9Us b4L]Pmt}V$|B,"4=?j5'w[@q}Ji> endobj 3049 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3050 0 obj<>stream +.^Ҙ,KQGLOrmjUۺ^nɛ>_€ 1$pP@|%}Kn;uqq?_ ~ܗeFۖpc`jKFY&vbYvJ<=)|1&8 sF>`pDZG[%g Mv?w2:\Jv<)=1P?'tf'3 Yf*AH*_O0/g '5z:< -WOb'!؇oB I!Ǹ`1" 1N\D T^qg޾P&nX޸pDir CbXuCzܩ@Ѳ+)FE#/<ڨ8 `R)N2%IrG` +v,O[&jiT<{,y*/@DS4E=R k7KPe@XPơ+J2{T}D$rR-XB%\X}A2[f*o'{%ԛW3?ȣPp_z|pT᫧io[flN7yPT8}y" lQ 9 tfy/jzBFhC5e<*F'D  &j9YIg`s-NGǣ0,x%;zڑ )#:qt(d..zO + Nn7' 3| (:žQ# +endstream endobj 3051 0 obj<> endobj 3052 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3053 0 obj<>stream +܀(q202,ZJcL_&42jmD}ll +e0*a3QّC(²ķme UP~Z3RqUyy)K S⋹p]瓧zwοwCnT\@RXdB߻(4 \Ι6D֐|#66C=ZY]gO/d  >+lp1%yո0g g7jnIӹuFGjV1\z;cP+ Q!#V 8oK6=)7ʍS$)p~/ GzT<&z|$8ͷ\ +)6HG͛Mocl#3%}qHGvZ^t{عțǽW5NI^,YL5*㲢x0ld9"wqCʽ,7a(,* j90Դn86uP[Zs@9'Eco,j2ݔ&{8у=0o> endobj 3055 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3056 0 obj<>stream +9 + ^ +`.:"7] w# EVq.gs^l:9A"Qt36,#?k%nkC Xp"n<~Ӣ۾0N/vևsURa5d=!M"e&3 @$l̑is/ȾӌnX\kZvS~yNJ){` @VTF6\DRRHͣtO'Con)*ͣĞ>̓=h(8ՠn$fV8HFwMa4eZw-LX/=&ץM o뎕iߎWa߿;N@h¿=TVq5SˠqeT$~ }]MSnLX"CkQsE"fy@=xs !qZSMjΊ"% $ri$R06SIзE]C[Oa)#?(-tg(AZo$A T) +S2 O0l%s斎wz:טQJy\$/\"XkK MUzhezvBsO=Tާѩ"B>Aš'I_csF;Tݣ> endobj 3058 0 obj<> endobj 3059 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3060 0 obj<>stream +6`}MVi  yP_ʃ;(.K lن{Z5NZ|hX:Ȫ2-GuM F#Gm~J8gJ3ዲɊB\E(npfɅyjhF~P4rTܞֻ+ޓ$ɨIuJ3شc3eg2*승錁VZdG۩`UP9mfR_?}B\>al4OHm +WZH_1a5LfpW,Be|֭3ɦ5<:YCq)14u"s5Bi1n2=w!Z 'FEZrNnJmނ}pHJhzx$a"? MIۃ#DROTyds]U] i?nqhąM$rv=|kCf.B]67_e5;!n( Rɍ{z~a} Myȁul>,Mp{ >)@鼗?M=N]Mgs#){ QuV.\d*Qe\*kdpr+oaˏ;|yOܛ*25#1 PHJJauIB^x<κz=qC-hځ-cz;y }TȘ7ޑvگb`U7Go:1J}5%FJAtooi;xϯD00dԛ"F3Alivɽ]u.T +PVXͅC*_w4B35r/<;e{5F2",4240QY3;Bqb#A."gisJN1zRi{+ika7n^/1]kY + v_B[h=wL=/vt^ ' ;|ZPsǬ9|{.$":6 +endstream endobj 3061 0 obj<> endobj 3062 0 obj<> endobj 3063 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3064 0 obj<>stream +uTq~ +ѣv7b"xdvP˖`,Ԡ =<ܭJUf:C_M)ObR?\3|x(||&v͏Z O8ށh +>4 edK](/P"p` !wsEY] _ezͤ.hH2/VBwٶ1;sh&YPvT5I}6u/0IRd# bS[J"A]eШToCH<'ҧ[^gR[ҏ9U:\wԧXQ90OԇJzON$rA|\'Z;zabܰD7.#Lht-c`J)60tV[R`K$m˜1CTj񼤰ulj(d0sZWiob4L;',ͷۭj"p˷-+Az +tTY i.vpHV#U;R\ku4HI%FumPx92(Fkށ^SC:$ýО2Ay71Mϧ&ZE`-Yߎ'{B=57^l??oL!E űEUJ6YAZŒ)), w˹nkdBgxZ%vb}8Z`IS:L}t+aȓ'J%17wԅ5R4 =8WUJNyAR:ՋĔeiGIቻg z-cJKŦ7$`_%rܪDK:'ǫD$%֋> endobj 3070 0 obj<> endobj 3071 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3072 0 obj<>stream +d`=&Txy2CT~񡹛⹺N )i.|KJ0;4ǟ̰[q/ʚRJYP]X bWpJC5YQ9qNhP;L@i˫HnO(Ekh2J{ +K.*j`)qbDf/؋;";W k=p?\=oOd95Mă\!SFz@}XxYzPx$yTǯ)ظgzĝםӬvPAASAfe3ǻLj>R/ezOfP::7jrr/X7p?!ʮZYuО\Q 'i$cZ: u7VM2ɣĻRhR2D,-%"ey' ܋^G(U9GvHw^Օ\zU.8J]<55Fb .Tluvb+:WL`.bX&stJݕ|qUGu׆y׆ b>ss+ĿX0^ΫJ(d>yv Rnn04_!<+2C*@TD\E^^mNrðxm=T> endobj 3074 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3075 0 obj<>stream +_\Ht]n%4O{D1naûֲ1SP>ԃ8}dv(?nAk{źՃ.!cY<|6CbK%a j=fxSuWb0胁Ox:;kUz#mO]$D"Moa7QfwI UO+ixY%ɓYǢE//]~45)ɕ:*9Oe p;TH#k7`֤i#Kh2P&\1u漄gw4i@\T֌dBW=Mg3(:77d´Rh@U +endstream endobj 3076 0 obj<> endobj 3077 0 obj<> endobj 3078 0 obj<> endobj 3079 0 obj<> endobj 3080 0 obj<> endobj 3081 0 obj<> endobj 3082 0 obj<> endobj 3083 0 obj<> endobj 3084 0 obj<> endobj 3085 0 obj<> endobj 3086 0 obj<> endobj 3087 0 obj<> endobj 3088 0 obj<> endobj 3089 0 obj<> endobj 3090 0 obj<> endobj 3091 0 obj<> endobj 3092 0 obj<> endobj 3093 0 obj<> endobj 3094 0 obj<> endobj 3095 0 obj<> endobj 3096 0 obj<> endobj 3097 0 obj<> endobj 3098 0 obj<> endobj 3099 0 obj<> endobj 3100 0 obj<> endobj 3101 0 obj<> endobj 3102 0 obj<> endobj 3103 0 obj<> endobj 3104 0 obj<> endobj 3105 0 obj<> endobj 3106 0 obj<> endobj 3107 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3108 0 obj<>stream +,]'ѴEx{p@}}BLHWtp|oSGM1lBr*F7ǹ*SXiԪj5tدk;TX4l?VF+%48EEZ9mr0z9Hh"nGJh /fח㟷i- <o(Be^[p@ZA;{D8Bj <= ^2p~1]^kD@omR؉bkY^{1N̗R3c M]t'inou頮bi'$##|fTH)QI7!.t4Dtu{J|Fg ,)軅_cD22qp7glE^᳠1%c'5@!,9I) zH?ͫ&~w'{^9N΄hHQ]С]3fJuv^>RG 5XRAszQnRE4!>?-G&?LwJ:` 6O69v1J1V$u ||B:ӣMnHhmu+FyN$(26dIhiHP%E~Nم2H-U) pΊS~8cU״ ̸khfs_92(LfY u4eMW*/ފ&In1ƛa_ۓ}f0=w7e-]¼%BEݨ"S'#jx)wC@duܥPԜ7" >oo b/t~+Q?][w7Q&4'>rIg`-cY9z,+ {JEs3+2W+@DqDl;w3ObŅD_[g#v,]"OU\&FI &Z///Gv:/훋a7(?aXE<[fI28gw&.# +7Τh~J2'&M}( e躏Zn.X}V87\M׶JbFNHaH' 7|#!3 V5#y-CA9/6!i)E¹##^s +~[Ht:JvI~w<>)O~-/ݡ"hc͍Q8n2}WJzErAuBx-Ak{yCE>{b}\?^Nϧ0 ON-rܮH E3iWLϲ/\PVa{mAP +kS$Z l_N5 xN))yoCth )6 +6l {X7툀[v,/(cw_Yb!l+r*|4KBY;Bn8Kd5#Ǘ3=~r#P"Brݝp=j?_>9S}ŵv]Gb&8pџ?:DA +V+2l(kqy9VQE2YcZXA3ӏDqnכX-س]$rwʖ~> )+a!QWCE4m~yN11{ #%Y.8DB r* | U\_yll +|g:B;"=,ǗSus W^ygwd.-\ǦHuemV5R +MI剙jِnAFg%pDhҡ`s71 +q3֢u3[Kp]8>T^<@Le@ Ugr-AB Lza՘.O>S wMAkfÉ7~PP ?/ +y4X_^7'bxR2R޹'MZ ŰAue0Va߾!{;/*41tB-m-پѴDpTѤB"p'z:*]#ꀳp8C-Effd$3~"|liij7/.{`H?4.PbءsA*9}JN><0U]"o@kt&]voA8V 6 Վ];0F=ޥKyF$nC"1j:h%gu':thew Ƨ˷~3Xbv@e_}U89͒]/9zx8;j$;R +endstream endobj 3109 0 obj<> endobj 3110 0 obj<> endobj 3111 0 obj<> endobj 3112 0 obj<> endobj 3113 0 obj<> endobj 3114 0 obj<> endobj 3115 0 obj<> endobj 3116 0 obj<> endobj 3117 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3118 0 obj<>stream +a4Ӄ^gbq$zjop{ D``3(6ULc8F@4_M.A0? agSXoW5waP2l&Q~r󲱰 o[2HUG]{t%“gC晰׺zђBݩݠt[bY[(k2#?_ޛ䟭$8B!sa2fۻ?(DpӦg^͑}3 +_ݨwmDKS[d,ixm:2f_'(A´- ( D覗܎˖MDCY܎d; x +T\O@ /.S87bE;:E`4$f좖7*c sufVpjh- &k>A| r&4mA~!X?%ּ>;z(QiF_s4ds! pKHRb k*|>MPB GpfgŸk)L!! 9O5?,4z{; ^AB{bv ь0,9ͪ|y +tn;q#Ǽ٨;gң8;i2n蒨rJ:P8[Ps͕ 5*W j]zY Yzvјgjb"c iW-籨 x1>lVbP֟0ݫNҿK_){tFv+}"NW +b.7E=,o(_u +>`Y^Z!HqIX >i> i;gz@TlUƊx,RIܗ@~X*34hWw.ڜ5;Xxģ(80:B"ˤXo5bsj|cX%|//XǺ}^m0pۛUQ|)KP1ٗȤn}i=6Z%*mwj:#e)ZN̟ʍT:>U0 -wa=WD 3F.G +}Cf.CV +endstream endobj 3119 0 obj<> endobj 3120 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3121 0 obj<>stream + j26 +#X%TDJ2AoT[h^!{N@[۸\UVm48xokPAjI3̭w" 0N!LuƖ.JtB6NP6|> +.} nb]+M뤋Ɋ,.J 6(^'6_þh +t8#R&30{ACE4ogdT"4e^ qɃۙ8ܽ0#OCBxQzlE~s$gw|rxE쫓̼#=A_gB0 +endstream endobj 3122 0 obj<> endobj 3123 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3124 0 obj<>stream +Z&"#%n&^yx|E|Q>Ȥ2U~ ݎHil4V=ƍ5iI|jK\||`%o%2O" !Uƞ?EOh( "[.ǝ+Q3B1let9ۙ7NHôBnh}5e6A+LpТĔĀTGpfNk|5O ohr E-[+T!052!P{vOA@ة+Y8mVur ڦ<٧`+H҃xwL˕bc'**}epV`]<`j׉m+Ő@S^P< خAdgh,@Qm`30%|>V0**AmOO#pܡiHO&I) JRUJ(+jl> endobj 3126 0 obj<> endobj 3127 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3128 0 obj<>stream + (@%olrmʹYLoЍwp~1إI^?v]{жLjxny,ɖt WYЉ1'2{޾ *J;SFv4]"磱&;{.~׫3ECY. : +$}9P{@P f/a|K\M[5Q=6 ƕYfVXYVMJXAG/3}lwk$j&|n +O1ئhccgSCCuS::e. U_ H: ç+*. +jPy>[YJiXH[`qdU3nv [kriktY͍V|bu ֠ > {59s&sBWi^Eٗ6ܧ&$,0VG|}W_c\P\]$"lIN*<%%6p)CCJ>^;sV=HQ aу/Nsx'JD滾Ja^ܦ/p0%3?@DОH^tG]K%m 3NqJ E(!SxeFfWN + 4M(ĭnGX/I&7Z1%v&5MoBTW)t'GC:Z9KWAVNU |*%o fD +endstream endobj 3129 0 obj<> endobj 3130 0 obj<> endobj 3131 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3132 0 obj<>stream +|+<6zҚ(j~\+CdsvGB@AW}M&E^a_2M 2 0aεϙ.|՘ԃݪjȄdC` SV|ݭ}A|(iGpi*kŭ 2RǍmd0K.uy1[h&M j䓎Y;kҐ:@Rwc`+lt|@˫BI>J؀ (т2?a I*O3rc_&xz:+QLH葽Su(y^4-l7Nm~' CʰיԊ\Ѱ$uR̞<dV&3'*gm^]; Fj4~6[SS:[i=?v"^=g$kPvoLqv#"$$>ݱ+cZ5X@U ]:4$" Gyקν|F Zϭ&e'n( ڸ{ ~iB"+psu~[^jcpv~*<{d }*S3\?\KƁoiZ%X YhSOb.wI"8вC.oD[0%0Q&@.maWs|J/0z\;qAu@zT"s'~xSMoGCQ.pXJ +tG(FTz0¯OroĹ23x ,A@mqͬPD=Un;Ķ39iV=5b U#:Y1]r]j$_ώx= R7`mWxj6SE A/ZDeq5e!PO`e_ !]nB>d(G'oAc;`96 +endstream endobj 3133 0 obj<> endobj 3134 0 obj<> endobj 3135 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3136 0 obj<>stream +c!:d|5Ʌ `ՠ#Vo6?)؎ŭY0#{~RnmXLSq2 +è]ѯ}ճ0sYr(ۯn,ؖ#NhfQ?LU1k3wc!a3;aIEu8:8cLd7CCXШحF2C1u*69G+ ]z( ȢMLX^3;Ӥ vuqWS:;!;0qP|G^7@LBp4qx9y^G +L>+R, ad4 +-@X}׳ε' +=.?Sk[$Aq|MAE ?ߠGm=ppüńpЁ#Eah,Trpfj=; Jh(nDRen$?g|3=$p>[n1ꅇ78 +MaMq?#e/e~A z/*EEzaAf4}L?`+ے;}\Pn gy2[]m+a n +z2/}8Q;+B3J\8X6 f,$Mc3ZE-! +JO5߆u 2f4P?/uQ @XͣGOLKVy:{ B(˕; =e8oA|ismֆ2RX4 S4bX ˕.,% {{84^ T]~x{2bZ09nj #m2`]k(2'2a!r텮YwKŹӴZArel6S-qWiG|#dLψ{|l}^1N»#\#ybar%e%1YsE?KJj)`L"..6kJ[:tc ]߬i2D3y +endstream endobj 3137 0 obj<> endobj 3138 0 obj<> endobj 3139 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3140 0 obj<>stream +>^v+d;-(o k8yjTitxUPE6l}μ $9 =>ӱǒP_혆}패614=Xs=Ś$F#3Eo.F0BBITcp1Wɿct#mغ*SɆ~"i8ᡰD:0n|N}Q/U ~C9kEW3oA^pLw/x + RY=QT OQ:%o8Cs ]"qJM#<>2LE#O=I*UReepMKڎƧ7:vpzFAnlo{ky&"DX|Ǽ}KqW*{=W!Xt=uǟXtX֕n˞I%ËV`XnmQ±[*` +eYYlhw5l~6@A:}Ej3MΊ)rqm֫wANRZ>aahPn4e1ۂhyVoӃ_S̕1^ +endstream endobj 3141 0 obj<> endobj 3142 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3143 0 obj<>stream +=)$_s EA/4Ob{$QQvkmPQ!(VU=ʍ%1b/K@R 똭VRmYn1 Aw=<[F7bkݴ8 tBtI0`Kjdóḟ: *dcC1r"c -B]ȋt%ƒ O3RG!$[kkX|,<?{i"v̜7Ne 8IUJy +f$s"{Bxe`3 >|*+JAXa8&{ ?h~뇄K氨T#jmx$*0xEPx1 h+m@޵A1? NޢMF)Srݬ~vN5W fQ1!o ?^̑Hѝ@̢خ*ӥN)s%DSeUK<(IUhX[VDD24fFOuYBoZQ7@C_w !v* `6~BD9$k+_~Tl;YnZh!ז>wL2.ѣ$€{e]!ޫ -@I#7˅DE77 ᗃvk[spGНw3d* %3># Kٰ`3 hHgb\6 MOW +Hzkݣa8֕[tp_Y >``[ M_ ZewGkOZ =~1^q~Bա2·}:\"n:!*P"T D6LhHXVhäe k2iSk_'- |/ )]bI8 +endstream endobj 3144 0 obj<> endobj 3145 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3146 0 obj<>stream +aIr2m*]-}nF47\<)> vF\kۢD(%c&.vG:S͔Ɓڏ^Z;kVfB*+ +9m4-[I>OWAsZySQNYC%':ScQ:tq>ӊSF˅JG+`HW,]cuZKglҢDTa\I)U{+ߚL_2y0@NW~岝dwa\d1<'9d%,4 G*.2֥A)<=!A+AϧrWh/QTʝV͇7Z}vDā2rQ=|JK};}ei/poMYߏ]7#l?Xk*\aw60 R/[Fu*\Ƽ`v`98|bL h&朸8ێ gŰBxqX)2ߥLk|i(ʇ}1(:!sĬ5ТSF1b Jm +L{m%^O +endstream endobj 3147 0 obj<> endobj 3148 0 obj<> endobj 3149 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3150 0 obj<>stream +#AbQ$bE˽mR*/ܒ>mNe1(KHru/`^Vu 7GU 莬(̀NoxOټ%$EV(fpXiIEƉpb]HCʷevgrAx:] #;;ΣŴ>5FYM"ZT!z=ۑ+xt9jp'[ޥ$ 8Ku6m᝸wo6GV>RdE *.~,#҈gs Bhѽ[fTٗ]pw3/ܐ"_[?c[}\ak4wjAJEUUJErmIUJyHV?|dJD0@]XwBcoN(/p8f8*Py|vN&u++΍5! lmWSFPb-;g̘09HÉ:4dg6=0k$/)ƞ3JQB2&*N 냃P#&sye +endstream endobj 3151 0 obj<> endobj 3152 0 obj<> endobj 3153 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3154 0 obj<>stream +> (XXbu' cqDN{?|&?[MaȖrA1k~PVz]_ntq~y{m?m&KrbbV[rMP{BuC2>%BB:6&tt>_yw +l-tjJE k:Ȇ+g |fnaś p?n 3yX!_xu@dP4IY*4TaIcoSC$5gu!!r꺯nTRu9B2S/Yi<A@`zZqtpt)E /EkDyю0% o^O/_tJ(m8{CJ9$,ü~4dV}(y*1:쬛\}[ +یfs>j'C ć>> +QlJtb9&z'訿F#Ȗ_-}&-K MXe]gr|g2&ڟk8qa^  7iI.BcW`df6-\΅Na mXQdwa"~3oi] bu;PKkx՝<4v rTOiFX2XH +Ǝ,;ZZ@fLʶN5wKOru&ބr}0LM-AҫB}1Axs# f좦zPcRNWզBgp{\N]9?I$QA(և?iQtkǭs; YaSeuk +endstream endobj 3155 0 obj<> endobj 3156 0 obj<> endobj 3157 0 obj<> endobj 3158 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3159 0 obj<>stream +}OC~'ռ}t$vЩ}jI6TF8DwHsMI +(|ɭ$@Fwψ^FSzuJXsR.B)V],ė_qQ|;n6FH;Կ=q3vZлA1m*ډ>uj +k(dk-ћlK:uq< oz}`+g]xrE6#O:W.f'Olx(]yZKX'{G@~:]_cCKrw7‘c`|H7l4~B!p@js߿ޅV +/m<x?gn$$J%S E+LTT1oZk>~tcx2Pt|Rc1eC8:fC"$VkI}KbQ@gzCfl-bAGK: OH]GRn'H?ƝUcsqig C;ﭼb&oPV( -}ߣr$`$xul?zg>x m@4X);t +endstream endobj 3160 0 obj<> endobj 3161 0 obj<> endobj 3162 0 obj<> endobj 3163 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3164 0 obj<>stream +F>'ʕ*ҳ4d&ny520R'x05(Mhb*xqZn"ަR?3mwJfp8a-cHPN|.Bn٥AhiQ`VOWxD]h(%̔[n YQ8gN1,%QA+w))~anlg&ǏdjUBV A1n-43g -(ǙPaa Mm.KOgOtL$;_%])Ka(0M'.LX.7kwHd)b_(> ^^-x&I{6ho z ^{Eߕd{6gd;'1O9QD۳U껝30uC0ni?*mQChUIBS#!@?ׂ%>_ޫK {pjۓ[\cٚ/˒S_ZTf0?pZ{ȩ1 +endstream endobj 3165 0 obj<> endobj 3166 0 obj<> endobj 3167 0 obj<> endobj 3168 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3169 0 obj<>stream +hGLKa]oMFbןQLI0-Ո}3i`YxG&['aO.nlYik9wÿX u7~Cͬ-v$+rpӞjn.] ++&IL\NbXo3+3fIm~{; odTkj@|<2bhʭ@&PcM)bC3"ۺqw'Ԫ +#[ @o31&[ (QrJP4K\mD&y+ +(B]HP6"ǎܘXC}ÒQR)wjDJoY +#Rӱ^LŞn65 N)CB0ݷ"Ċ} mI-W4y:)Mz焎F +͘4t+72V״nz*Tb7lB8zɊ8JzHA{zzl׸$ i>=UA geoZcjs{m`e] h.uC188t_!'ݪhH8j*cȂFjy1fA}ҎvJçWbҌiESw|pṳ4}-|% ]gE!d{̎n#֒X b2pAGl#+Br*m\VgdW u, fZe`ȳʝy81#|\Q|Q^yg̃^ɳdf̥RR֗87f ]d5!}8ZRidnKJZ`XMo99E;ԏ<%E$A_2ߔPO)bb?/T1h AƁS4TJ~ +1L :*m$S6l +endstream endobj 3170 0 obj<> endobj 3171 0 obj<> endobj 3172 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3173 0 obj<>stream +2^Y{ΤJx 2NlY5*jTfiCec5!)Z>7"|ojo~ #|[>qSI.QzC0[;K$̑hȦJky g}k"۸xƸr++?5M‡R\ f@isp}=R1G-8͔6} EZEp\h 3W¸J1Ҁ0 IJ@a{:I:8#uV(Zۡmeao)B! $$ךxD+|p(]ƝYoa'w^ =ezVcRlϙik"Li?#[-!/ N0fY m‰ZGy5^C%=0xgZ~ߪ cmb +RYX dU:RFҩuVW.I B4^x|jϯ'ԙo(NR=O:S]{حY(eA2 +9cG({&,*+ݺ*q?(:s|mY|HԚ'n+&'G!HOWxQZIs5~-8~%® ͙WK <̿ɻ^AJO.O?ΕN0;_ЃGE.X!ٗ>~=k[Xds˩8;?ec'keZqԕZJ!ekn>,ZK||z1cX}aYj͇?]'ᜭ#*FYHjO=،삫| AG>q恄AiԔB-"ѯ MdZ;m5 +endstream endobj 3174 0 obj<> endobj 3175 0 obj<> endobj 3176 0 obj<> endobj 3177 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3178 0 obj<>stream +0ٲ3_[<i7ـpe՝WvյC=2,Hh/u{LrI?;<11kv= ǔg A~1؊Mϒ=#) -Az+9OP)$m["bS%_ +ERߖptvy{Pg +\QŎ.c EQ] Ʈ}3n\fdpk8SI):Y1 :G\FKݺ.ncy +T=zPĢ# X XgHO4n{G\O 8  O/5-PJ4Q(46JnZZT lDv):AX4胰%Q2$k]^0WxǕPvcAllҋ-\ۗ6YCmn P z)#:=)E:tw%2vRM8Nd*MWĚ'@8P= `+x +f3-}St7㫪~=bnq1E]KBp DX!NsM鄳+Ȋ8޷PPGT &YpЎWITehB} pB=/l<'pRmFrٜRwޭ!f;M6=,;#T*.l]k_+W\ſR~F&asS*MC@AoH7lp+Q)Q~l#xbnBsvr Θ)IoIQ(/2Um0ex]_7V0:å"G8 Þb,8OiDG}Ar] +endstream endobj 3179 0 obj<> endobj 3180 0 obj<> endobj 3181 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3182 0 obj<>stream +?aHeko yP(yEʯ4ˁUWiiS͇^AS耋XUO hy\ kRx6?;n/#Hg3[O%CYej_zCH9+3RD9^zãl_Z +~ :(kgϚדbuDM'' o 2N`uK:^7ټ28wcF/$aV_]p~ 9@YX9P3ycW1Ï(=\ptlm6 hkN8(l;<}clwb#rǫYH"7{]ZױbFB9{r4-bN|Ӛ}]Q&0,Ht9)UL:W]޳P mi]@5 hMg}jn0lY+t`fGk0ܙ/NӌeeC5(|<_8F)>座HE0Ab*Lduo(u nɑkDQi2e2yf> bdufdiN?%HGzPVF"*8)Vx+ ȄⷢLP千@ߨ"6Pk|݇89fZ,bڪdz3vYᔛ)-#z oPK}xjϪ$\'%نGjf&6Pz[U .ӢDj4T)аO@6ě6``iQ)A򹡦5z :^1O.T"⭎87N?G@ V]{@ +endstream endobj 3183 0 obj<> endobj 3184 0 obj<> endobj 3185 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3186 0 obj<>stream +[0QX?I"$VJ|IO~PAKTJ8&kB Sb UӭS`OxvޖafO +`k7pr3Zc(hbv{_-9Y_]IG]tZLcQXya*IwE:|v#^[+7ڸ4m𑄟DB~=n-Ba94z&]=v͟Q|bnvQK>׻W!卫|В_|Hl?4jM*A\9Hj}cB vaH5}~T{{Qs/:![ݪC lX8cRh<;pG씥~$.X+ R = Fg$c+L';zkNTʠ-̖ LBFފ@ҼjqڃyLz. +f; +\0l!Sd$z^ܵЋF>>Dmr%M :&|{lP҅gKi[D['jtkLZǍnCa37uZjFeJv^_abm~\0 sVcVᱛ8pp: Ъ5sj`%N|-QXZ7^Q&W-qB/%$V[#0\^Y|Ql|dmE7)Yw!Y:$ieĦ]h@T|3G}.>ݜpj]3~3)*mYAe~'˶XMɄ(>.Ԗ%#bbMpݔ4E?_Z n`Fe= m2ޞ^_f|mOB +KR|&vaIaN +endstream endobj 3187 0 obj<> endobj 3188 0 obj<> endobj 3189 0 obj<> endobj 3190 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3191 0 obj<>stream +#$bM;^x؁Ǿn|X%`m|o,.+;2iA%iz.'-a%$4gnMrDȃ]{#O%ZZp֠_ >%r}ӫZB}bp:ƌKp(P:<ݥUэU_x&o-¤D) AUDв{מl66¸5)99H-$?llS)Ф^W,-t:y.>~Mf3K+ 1h;>%DKs/S̀(V jHdI +()UrhClڒ(@RxzLD6|]Y@rW#4DA[ZF'Zfmէ9ԁ*'> endobj 3193 0 obj<> endobj 3194 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3195 0 obj<>stream +/9t,]&Գ =xXKdes`{5R@!=+apd׍ٚ7]g;MDolRɒ!^3XqШPj!<-bUeD$_ݻb=u 0y׾+ǫa6`0yr2[$S yeǕ!Ll͛=⓺J:gzU @ya~dH +޳쐂`Uf>pY>|= QeZGCjPG> endobj 3197 0 obj<> endobj 3198 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3199 0 obj<>stream +սcP'[͟nY~t5p0/4,L +Pγ«uf.妕_v + {i_d|P+fJlo?1w3@[U:aKRa ;I|"?ON M",/b b6X"8boj]@Qߴ*p>l/4qBs*}y"WĊ*uwzlm%{pHY3@ҌZL0 k jB3:- W`/.мrSȏ{H+hw*pjb#f-M8:aJjU#(Zbi4س`SVc1ƻӦڝl-0E..Co B>CH}x_~ڴTn>lCgsxXP! Q_KLASD(~ b# +[@$U*Gh*f$HQ G +pq?D^%Zs2K[k +dD~T_!?V:QÐrkYLgJ(C5vyPVK})'z^L|@d]FG ux.p7.nq#bK(ޚ?E/H5MWQx&Gx^v1Y+cD>3~,R _S9+AmLLv<*$@~Jkzuaѱ4v['ද$mah"QK~hh c@9SI. a¡00T,xȒ14/Jcs/u~;o[jÞ9 B]5. +endstream endobj 3200 0 obj<> endobj 3201 0 obj<> endobj 3202 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3203 0 obj<>stream + L +[wZlPՂJى(Rc zyUwW__\8wS'^9dG+04S9{j*Z|?g,W}T4L :f1NEo*»MPwu |8ʿ,]يs@!Iu|E)Gmi<Ƭj;ex¥Z3wSҞLd5 5C~,|'i^bo)Cc +Ҙұo~DvL9u *IKN.l!R_Y6{Pv4EbC횒;RIJ6 [_߾bRnj-#f̌4\@^u2g;;s^{TjKŗK­^yT6aѷn>0%Zi w: +n΁DiVA >uئ/}>?Ś'xZ[uhX</[07UҪ + 1TK5_H9L9P+qcEm8^uB#cszPS2&GG&RqєјvWSl>YRʑ;A&T ek;\,Қ>4_Nηj5Pl d~̋:7֙iw]b ,eDt _Z~m' h*\u~*p + {ykaPݙ,יuSF"UdW^h2|T*}ٮ${\$F/)#HvT]Ͱ^DIZYm Ml1Ii ؊?j2…4? +?T3nz (wD3RP?ir_mխz+$+<')N{Vٴ\%;jYܖҕөcO剸r!p杞>D U/h7}C_7a? +endstream endobj 3204 0 obj<> endobj 3205 0 obj<> endobj 3206 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3207 0 obj<>stream +:2Zy\%3r#a: ~Nn1CFtf5S1⿒v-JB5mQTO&_f݅ࡊ֨FQz\KjU¹݌sSR4"q ։մvg/e|Zο +\1׶m쩱BU [‘~;3T>S%+ :u&B^dlV7voW BK +և7m譍<@H~p%ysQ)b쉊f&^ٯ7'oYbALjnU,tСzX)!9Ӆ5([^MiXj,O +D[~EPidѫFoui.oI.K)K\EwXz4Q{c1Njj\ANO3Ba508=J#(7DrP0&F@ͷ] +3wQpG-Yf쾽 UQUW,U)⛸ޞnat&&)S~S[\"x7י+|<[8QWǜ @FaWaǻ˛&v̽Qx:!a֎Ͳ$mc0}t*Ō"DZX3t% 1&}^WP63IJm "ۂI +o%bZDw֗˫o nJ٘q\ώ]h/^sgKx(O _Q|g5~U4;]q%3> endobj 3209 0 obj<> endobj 3210 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3211 0 obj<>stream +jFWb{9襗:"ȿ=t#;7! ?y +ev+\ h,|wf{Ԑ[pJi.f6S^+;]4h*sFxWLjR>7M;\q;A'7IfDz⪳Lz8G=VR֛4|C^_:.d w}^o]*"#rQbgbk.RlE`a_ˡ+{|Qy ٞlЂ9a3ԥ\Z48ReĀ ؟OG}. qp܇]HuV34q?_e9lS8"S@C7p2"m*u_$ƍ>nPxs;Y6Vc`q;ʠu1>`a9}*q0[#~-Hq[j0D(/B<O4NŹ떺q2v[(ỀL%4IQ8S-բEm\u}ޯ|Ӆ 7HA$PI?ϯ?mr7qv^4E5q5ʑ0+*UgЮd`Xz_b@B)9.;g(Bq#ֆ jvbK+z64ٗ*ʹK)7 ~Y=@Z;sFj‡RUbRh:ء=l*T%9Ž!˒(ؚ2i^G@>~sT +endstream endobj 3212 0 obj<> endobj 3213 0 obj<> endobj 3214 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3215 0 obj<>stream +Σmp*턾L1fQ}RT SYZ[KkeS<ȭ"5276SǠp/m}|~謡Ⱥɦ8ݑKzղ6hIbC(y]- S퐘1lZn +;T?`gʨ oLLTcد)2(Bܟ8^ ǯl50c$^9I\chֹٶ?1KzxD3* F2BO^f 7\,~҄z֗2@O$^j¡*#:z??*CU)n rقM޽;[Q a`Bs/#dNF&Ĩ*q{ӃɃB:}IAOݿgN^T^W{okiNd."|sʣFţ̆-_ޤ4̄#R7V;s:$oNO \TIVϔIe~P+cJ@(&$GImڌG6z ٗvb]-U {U KU5'K/fnAESeZAbAQ4&h7<#OQJ t16SFJZ$[ԋVa:C2Q +__ =AQSa5?zz+uXB)C4 ɐL,IZh>쀓O +\J̑ /qdq9nEr/AKebfifCp>P=D +endstream endobj 3216 0 obj<> endobj 3217 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3218 0 obj<>stream +FyG1taY0ȩ m3/u bNl '7!rv0XuZK}&W/bLQy/tXOOGl"|Ћ )`kU0j>fӉwC B+A$̅4o&YH/)g`O?B=%(kDM"'̱]ۆ,q)B9{m9BEɃ=0jH9Quތ?ʊz*]"ƲAL,CV*N5N +X^Q4˅7v +23> Cr 5 +Ђ,|l"waIrXvZbbO2D9NV귷?͌>:,24ىF Br5- +JKŤ$nxN[D:j[$G1̽2_L} w(N x./ T+жu|a׮*=]+,>cyPCL?NH$2:ǰW'KZ]@LL$u/cҤQ78?&'\+@A}`;a-#GDa5! ukg30]^CUsWS? NE}P2ѦaQsqgA08t;N&EtOi7pŅּ)ȁWuVZk + I*;` YZ'Y62ž +l҉ cWT +endstream endobj 3219 0 obj<> endobj 3220 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3221 0 obj<>stream +^hWಎm -@AP +Kf-hyv-ħb +iĤKz\3܀N&m9Ry!HsLP/UX?Է溸e@GB1L@/;_ 9MǤ[Xsݿ|nlqO~YzMPsںizO<* [{ع*bEN:, oC SBzp+ SqG4l69W"[G\*+YM_yqX$Z}e7y}L+ "8]-auYe"'TrIMR0ik dc$찏u +i8_1 ߍ G8яWE{`M'ςEǓ bn;/+ Z}r^Ȕ?|OP>:X|6H`Uxq"ͭ4CQ)%Je~pP؆3{|Be9Rɭ(VV2 HK wvMy>c3jj7OnTH]CZ%]qWʀqyXʞSuZ#aXJI[܌ȍmyyu4Ue8Ŭ+GCKj2G jhP Di{/pMlw;:`7NgmE!͵]K)#U-?TAK/6_~> endobj 3223 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3224 0 obj<>stream +mG!pp4r-- .x:tLqܛ +w=ǁ9c9`w咞%.IABDp.T.t`U@w]S63R„e49xyE] 9~Hq w~n4DZ𮇃pwo a[ʵJbI~Ƒ1Yj)ӯ߾A>ӛ@&`k-%4'`b]z߼+dQ˸;6խbp<Yi'Ȕ hh{ 22ͬ. S?OYj2 + V}pc A(4TD{te!`/xM8IYW+G&4l]j3g`[SU~1)gJpiߊ aqPnz;+oH=e)9Q[|G8KYDx{(ל A`E9P9TEJvX.WT{D;nriGe8_}R7(v:T&9jIQ6G(qP\b6煪t٩ f-[΂DJDU%SrX5k\'3UƉ{im`$ |a60 2Q&. iWU$Zb +X&O1XW`kx+^yEɔQMBCOgaO0L|B*26gq~uM92G'gŤiZsihxrI +,CX}; +endstream endobj 3225 0 obj<> endobj 3226 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3227 0 obj<>stream +WáTyb|w60y}^J,Zxm(l<^dB-V +{Xl nAĤ e{-l|N:Nf[ȭ}~@ޘy>t; !VZ\/ƬnpWN o}]Jp|fy6X T) GCک~d"k$8GYqHxKӝdlZ u1u-v=NM5Wof:؎AD6$Rb@|t$_ۙ8J.EnF^RGe=b1DnU"Tךo@3(p{MلH}Ťu7@Oe!;X+!EUgY ~*Tg%W 3>fu|@fV?y?#PLl. z'HvܥFf~d/N'G\XrJ.'KhwZ6LzfRzc4j?~#v.&0L"ҬE];ORNv +xé_y?ÿ3,uB6{_cDXsc*PCP{x:v)UjZdh-M$U瀉ÿ5[=taC+k#x%[`KJb +endstream endobj 3228 0 obj<> endobj 3229 0 obj<> endobj 3230 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3231 0 obj<>stream ++\;.c #zk 󘍶,"@qoװ 6t:Im㣸^O/`8da4ֺ?9eqpb=>rIQCcQA*$H7TpbiB|Mu%Mz:+)$V]"=ZQpRP E 0/zTԑ$GϩkT}.9'ds X#1tT3Ő{fƵ,]¡k:xpI^l,7ޯDDX~ +endstream endobj 3232 0 obj<> endobj 3233 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3234 0 obj<>stream +Go)%NJυf \Z-!sFX,xr_]ᭃ%S ױj]ZLUwLi +;06]fHL+>uhJa;~8,v['w(D4.ނvrC![qܳV4DP\8 2L885(O{.q|$_^Q+^Eiu$1ݢ0HV fQtt *TYF1|'n@2 MϨ@Џ왘2ZSU ӣB[zIXqTe.Am@&;0NjZ4.]4?mTIV."[ӌe =o e.w"?. +cV*#!פ~b}RjR{Ktya$ ,iOX< Xyt-bܷxm{B=ߌZ޷.lofa;qt`& xs|+ĥϷC&:c q% VM0䡰C 4Jyi[/;+<`@!EG7匇;lZ.V :WN/sf[Hz̤f%Ln&ÜQ^(7EQLL-&0 OMc3 +ǔ{ݪ-t&~Ov1<5JҫGÿ\€A HeoUR˕I*a9WKϬ C.> endobj 3236 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3237 0 obj<>stream +Yt8lŹݡvQ6E:Ċ湩=iPq7>m ^w!KYt!!N~Yr8X~Sm^o M᛿Dtm}JO˜-XDʰP}Nl)5se7tOް,%ۆF,ډdyX0L~ecwz!й<[]0ׅ +nUVF#kEАyuN"iJÛ>!+!H:nUMGj§7*}B p >Ӓ +UZ:2@5d%*| ȧ@P +- c1)l4_0E 8氭-Q& A"CJ_ .r(en~)%*o~_@-Y(-k]5~2w]7򡣮H%P&l-aaZlz+H(rN"^q\*uh8%Vw }Hrѕb@DB3fMN HK50YET]H=4y +c(:QA<JHB+hg iꞅj K6@'h<`Stw"4-3ED:`A;Hhi#āQ}O '}o@ jӲ+[$h`=@l]#}Bw-mR ǭϏD6g:BJ)pN` +endstream endobj 3238 0 obj<> endobj 3239 0 obj<> endobj 3240 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3241 0 obj<>stream +gK͙6/tb_9y; ?"Bé#we3B`vž<,~u3TR} 5Ta&CBp2~` Q?&<5VZ" 8/wLk^xӰ$ām@cևVA7I9x"SetzQٷ{ԃI|cpNmWmrV.Ux;Yh"_$=Tp$]!`ti!=[ +K NZ!=GMdh}LAE@"+ w~r_MrUјa_hv׿&LL}-|Qcf[{bq tBo{uOJUP1@~+mtI3 Z f`HԞj@SRQ@k`_z˪)՝iDѫ@1PFhnr9I'dm;<\`]!jڭׄhkjgǠxJ0ui9O{ݿs)ޗ &QFi7ªxԯm\Yw(fK Ϛ,3чYpflKYoe jZ6B| +B'Y䰛/cgj.",+e RpТ!flK#LLjXtɲUlʰ=PKB. V)cS] V(^Q}/56y]tΜ#+Ṫi \\5p=}0F8bxfk퓺;/ 9{qwŰVOm/K[Y"pO_+ e\;_oŋN~Lv5p=wm?E9 y9썉Ґ~*ЦY}~K+k[[K8U/VJtfC7-oˎxvoQ?v05 Al Nc?2@XTr +endstream endobj 3242 0 obj<> endobj 3243 0 obj<> endobj 3244 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3245 0 obj<>stream +)FWa]<7.}X6ҧH-wt: P TW&?G#G P\.UdOI~4nsˏi|h/lE? ȋ[?RYYkxLR ve4y*Elv/;boa`(:LyB%c{}&ߍSr]| h +5.X VR0ă)^]Y]'ӂ:1esG&$MG4Fx l"&rשF 9C{+,нV%5dTGr<:oAiE)AwdW~ffX/SXE9(R,,hsut.==vmbWYaRŚ(3{.z^>N:*ce\ ]GC W;cBw1/֡'$F%7R_mtPnSiT/~XW!fv*|zΧAqp|)PwͰlan8dݔ=#pD +endstream endobj 3246 0 obj<> endobj 3247 0 obj<> endobj 3248 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3249 0 obj<>stream +80#+lf^֟hOp ~+9t]pU@_ _ gZwJ0t)R󡓙|7] "..ʟ+ze Ƌm7vH~SXcm=Q1s+0+'-Џ"A4qK +/+ /M&$F|CIL'uN)竦'2eWΓ;f/m҂ʇϟ3EDJ t5`2vWy[\fg1SZ47*Fr'ViV<]gRO":ׇC~t{t{}iOG@x"e c/H_Ϥ5xb]kxb,V3{rF -vkX'>Ya?ɺ]aYaA?FrAй?J!x? U }OFzV!dFN&neWBJylHN?$%Ѻ)=yjs .¦ZXCg1_I0'XTZ7@N.[>NfnZ%|$Ig>Fnb?!nU]I Kd(?K^ عZ۩0]UYfCjU~%㕷>t1[@EK'W&;#4Զ +endstream endobj 3250 0 obj<> endobj 3251 0 obj<> endobj 3252 0 obj<> endobj 3253 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3254 0 obj<>stream + Ca~fNs0řkf1g*KNOkT*Ყr-/>5*,>gtqgNI$k)(AҲub) +;QU6R_-y/ __g##b 6&67w^ɫD{iDcA:^fLf/Nc#scJ-j^|z5INq4A%-; +endstream endobj 3255 0 obj<> endobj 3256 0 obj<> endobj 3257 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3258 0 obj<>stream +j9,3 ehn]qi:ȟ(L|qCgK)YώȲL*cEcTRB3O~7x 4v |f/ǯ[;`wd}]1DPYnkI\+*{|*4G~EZBoNFq[ݎtR )A׌ /V +؜WJzߑ)0BhEש[Of=zNX$#ƂR!/εA˶jJTGeQ29d!4fa 7!]֒t{6l$$nL܋-zֱgejCוi[EprS|߃bTp}\E#T6|* c߸ DzYHd=}BqAQ۸\J:%(zl'k:K8Bb$|X--6.U-z  Hgu(!UO+G].?x}.5 zuIΡ}&&]HjK[z6eH?5]Gh\A 9x\@GEVKaD~baI@ׄkt_P⚽ +_H~w²/#`ְ{8!km~}@"^<GTo[\Uyİn)=^/O X[ +ED]EB@=:HЁu sYj.X-;A:I^u!oKk%w0r%v +endstream endobj 3259 0 obj<> endobj 3260 0 obj<> endobj 3261 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3262 0 obj<>stream +|~x +q|݈\bf7;%-ѯS%.woHCIf؎Q|,?_?hixjn)8) NiK%1 P L +D7`X@yL{7Ц?̛w0)-Hd){&rut8t <3 +42ID+JK)߿+6G3w:̩qu[V濃z uE/@^O|urOnhmczR-Lh~1?~>an$GɫWL p-sÃ}' ,5=zZS^횓Lٕq)k#j~c;"j'6p.*Q6zvCR.yO +n ,ݸ[K5b"@&5]P:|v + DIҵ "Ol>os2#/rB*DdR&%#iIPxQps_d8 roMn6kkkg+]t +endstream endobj 3263 0 obj<> endobj 3264 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3265 0 obj<>stream +r6IBeR> endobj 3267 0 obj<> endobj 3268 0 obj<> endobj 3269 0 obj<> endobj 3270 0 obj<> endobj 3271 0 obj<> endobj 3272 0 obj<> endobj 3273 0 obj<> endobj 3274 0 obj<> endobj 3275 0 obj<> endobj 3276 0 obj<> endobj 3277 0 obj<> endobj 3278 0 obj<> endobj 3279 0 obj<> endobj 3280 0 obj<> endobj 3281 0 obj<> endobj 3282 0 obj<> endobj 3283 0 obj<> endobj 3284 0 obj<> endobj 3285 0 obj<> endobj 3286 0 obj<> endobj 3287 0 obj<> endobj 3288 0 obj<> endobj 3289 0 obj<> endobj 3290 0 obj<> endobj 3291 0 obj<> endobj 3292 0 obj<> endobj 3293 0 obj<> endobj 3294 0 obj<> endobj 3295 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3296 0 obj<>stream +ŏLcG*VwMr W®׫:ڌf@#4bD"ۋVH7 +-e-c>vyCK󮿌&n}DˇԢSiO9N;(uirѦxN˕:F&wwbݽ8:;ETg+ĺ`i#@ooGsadlyaѬKTm0s#ed +!dJw7+F=LJ4񡵕}#H<^i&I諎1dpB-$\_G?' 7!-6X%-&DDR# @dxDϴ_ZٝϧtҮ"6{nvA;:m~u)pmy; +XwHg'-GOGL0féoY~f9+m>Hhܕ`xB 7T\| hsuKv'10&Rp]9z.6 $+lucC祴vi]G#mCL?K 5ME2Cc=5맳W%%0̰x1 c\2r&,hd^6D+Σ]|׆ݘі( If>CQ?dt0${{I~{r1PvQ#sL\>pl L>m]A⥠yz7zl/A+ȑ -.SE\^3(OTzzZ=ց3{+"A-㵂^'0\گ?a/U(+lx+w5y' q‚^GbqوtqHRLc q1\-c)8ԳU/ՙsڃp$OL*d$<#ZFd5"[k$NȅJ?:K8Y(Ovh<+ZmSjP]'Yb}/o~UpLnZ-DǹS%l&މcDSa[w,$ -]iXJrjL +&` ]ЯP/xa9<4 C\K? 47Nf +W5؄eARWFpܲ?aƎ]օԅa]`U?-{ZI?Qsnf1S/JFŧy$}sco kiĥQ&˶Zf!ߙyߊ4\d !sLYDX+csTvuC2d ?^` to1 Ex~Zz:1B">jb*c=f)LӁ1 0 S H3__&"`]RUcix:+>098\Lot=\ +[ s ]+X'aLmo[AV/{@LǓz܏]9&W͂=d!oܚn# '}ۈ~gcwSuEb5q̿@ 6gFT a +7oIy{rj_ 3^)ϩli7>65^ka1IuQ]Th[]<6Zb/6}(@[՟,œ}sB[=.Ǿ\.J}אSܴl<8%wؿtougLYXs/j(+U'=Lm~ߑ$!Y. 8 #q{_ΨwRmֈ,UAE{+yKRG*' ZQ&Y6)3]y lUfvcW _"D-x-/a m7˦V`sK_y̥۶;p}+:Mb?d^b;6T`xK8ȹ|-ᲁ+QXP{ƹe +FR]@7Yc&MhF4|@{Zb0Z\=>{D%T)m-}ł ƹ)qulC|^km 3Pp'ϗ:qq捲⳨UD._F"?B+ vԢFKhN`,Rʞ[BfxFph(XVuU%VŶBN2oAdoK9҇jp8/Vbhjkn]@QfsiQB)'6_9G83oٺRɨ oњYg`ƬFyp݁w6 a%lh'CKGj !mܞKrUht;sW5yAZ0ux-_jTsT5 S8T갬PYD#(,p(DT zHfë-=ʜlzwK ,ځXR^=!/ƀEG"܊Oky0Bn3V%L꠆ZrM:ݿ7|֥StkYjVa|6iti;G{q|K6%$eXvPMtÉ  %3;HUMr N)N +B}.ZIv1 dӉۿ|j Ӿl ^rwa@B3_Ocq'D2Ձʠ65>I?CQO +"ziq`ig@D1t$P03[sr ?W4G ]oq}O2@VtCkpnY1$NĄSzӡ.vJ}% (-&KW~fPx!ox kQVg˞!a +endstream endobj 3297 0 obj<> endobj 3298 0 obj<> endobj 3299 0 obj<> endobj 3300 0 obj<> endobj 3301 0 obj<> endobj 3302 0 obj<> endobj 3303 0 obj<> endobj 3304 0 obj<> endobj 3305 0 obj<> endobj 3306 0 obj<> endobj 3307 0 obj<> endobj 3308 0 obj<> endobj 3309 0 obj<> endobj 3310 0 obj<> endobj 3311 0 obj<> endobj 3312 0 obj<> endobj 3313 0 obj<> endobj 3314 0 obj<> endobj 3315 0 obj<> endobj 3316 0 obj<> endobj 3317 0 obj<> endobj 3318 0 obj<> endobj 3319 0 obj<> endobj 3320 0 obj<> endobj 3321 0 obj<> endobj 3322 0 obj<> endobj 3323 0 obj<> endobj 3324 0 obj<> endobj 3325 0 obj<> endobj 3326 0 obj<> endobj 3327 0 obj<> endobj 3328 0 obj<> endobj 3329 0 obj<> endobj 3330 0 obj<> endobj 3331 0 obj<> endobj 3332 0 obj<> endobj 3333 0 obj<> endobj 3334 0 obj<> endobj 3335 0 obj<> endobj 3336 0 obj<> endobj 3337 0 obj<> endobj 3338 0 obj<> endobj 3339 0 obj<> endobj 3340 0 obj<> endobj 3341 0 obj<> endobj 3342 0 obj<> endobj 3343 0 obj<> endobj 3344 0 obj<> endobj 3345 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3346 0 obj<>stream +4Ϣ3@N(kJwY!ז%+d*֧J&YTڲ覆x[v'jI+Ш;KJ~<r_)Ap?i' }Pe9;S"͓{~aKu=g$>|tzVM{ĊFX%Z#|(]xn(-k;'ưTjWpʡD>-2 ^ O(>TtDgjD{2vù竢lc/"4*sȘm<8d},hB*$mR*Y5u퇏(aAPla|xmX̹=%00 ӟHT;D`s|֮UN.)ϛy 6FVe!QkG-Bڷr*;PLEqv <Zl>bA͟Ysk1(Z؄ +&r\OFd*?ASC;;InbV1ގ|#*+jR.At㊯.[ ɘxj͎a+]hန?y;phY h_tfWuEPT(^fy+yU,'O4q5!m״1Pyg՞/MkA2zf8p_?\mt%nj6wA!oyݙ07+.=v)ǀYD ĵ܌^!yXi.\HLMKLn9%D/Iجm5nE"|ÃY E3*؁-Cg$jK `=A2MtPI R&BtOV9#^Ry>7}io7Z@ +]=L渊O3#'z5PƓHOPQ{otI &P6'cߕ:c(p.ˌeӅ> i,ꑬlptꚡITAoժS2^(6}+<ңc6"llaS̵mml[Za +7Qe/A쟉NU-HDk2^I]2#{99Yr98΃,~^8.< Ln`hQ}#;Xy8tS̺qi%#7k zsԬз4TU;Y` t`MeWj"zu 0E'{utkD,MҞٳAMƍ:JW!_-AfBxHw柪K܁-:-9(@O&_1{FˇG-4dk5y{itƟo*>1""~ ԫs7$N*? 7!B_lDv +3JܤY]~.;mFM"KȂPl_0P'/0ݠIDs..t1 2ೈ˘pK@l^1FSWU__t8Jt^ 䜚`Ò>[«|r%dV(@藩dVnW␩v-|X3&0٨52Kv$ ++lj"lw{iB neԧ=!6%U<(ȚC@tx*&,Q~;BZ"~BOA;#º8Rw[<=Dz:\42z #X7B*jNpE, .1%^>r'ŸY>->Zb)MONـnx0pJml,֭ n|πZGUX1NS#| +~O9{?*CKW`'& +c\l5|H50&t̔\D7MvU$ڌw*KHNk.LAEO`H4sl/dNk>yee,p-ĦL b<8®Ez!/ kŅJOԹ4)&Bf|0UQw i!]T:,Xb*0 B (g6/Ru}5,?#ɱRE/!>yRkr^ hh3>:baTGRJJcKI*)@gH:ή0@FNvKnӈ}#Ӏ gա$׎7M^ք08oZ,z/l7~R~@POzCG@_fYdTp?W3vu.E,lRqԹ@Z(^)mDٌA$N'Ҋ)sJ4 +ÎE⌝%9dL4X<)5Áik!j4]l KDnR~M1XP 24V؊vT3u̍ɯ=x )fl+N?P1 +׼Z`o "\'IEߨwT7 t\+ru~7Nj ^#j$r8^1 Bɺ;Tb<, D83r_z_X}uP44 D*c͈vk$xOt)V?n=WGʝUr v T|+8&xfF#[ˡehV\zlCgDo QgmC]YTKMl Y;(8Qt 6FG94D/*bHr?Le +"35ٰ[tmD`#7<lf"$k2ʨb=9PBTm:";/GRKImEj8Ƒ^&o(OSՃt/Qt )ղe wc0OX@K'xJŰ5zd v)Aw2{&=g:L*hveh5 ["ϻ'S DZZbTUg6ў㍢ 'JʥuGY 21ꅱ2;Kv6jAjkzNƅY^LpDN& -ۍS7U3Vy$`U/6 {OKK8^T$:> endobj 3348 0 obj<> endobj 3349 0 obj<> endobj 3350 0 obj<> endobj 3351 0 obj<> endobj 3352 0 obj<> endobj 3353 0 obj<> endobj 3354 0 obj<> endobj 3355 0 obj<> endobj 3356 0 obj<> endobj 3357 0 obj<> endobj 3358 0 obj<> endobj 3359 0 obj<> endobj 3360 0 obj<> endobj 3361 0 obj<> endobj 3362 0 obj<> endobj 3363 0 obj<> endobj 3364 0 obj<> endobj 3365 0 obj<> endobj 3366 0 obj<> endobj 3367 0 obj<> endobj 3368 0 obj<> endobj 3369 0 obj<> endobj 3370 0 obj<> endobj 3371 0 obj<> endobj 3372 0 obj<> endobj 3373 0 obj<> endobj 3374 0 obj<> endobj 3375 0 obj<> endobj 3376 0 obj<> endobj 3377 0 obj<> endobj 3378 0 obj<> endobj 3379 0 obj<> endobj 3380 0 obj<> endobj 3381 0 obj<> endobj 3382 0 obj<> endobj 3383 0 obj<> endobj 3384 0 obj<> endobj 3385 0 obj<> endobj 3386 0 obj<> endobj 3387 0 obj<> endobj 3388 0 obj<> endobj 3389 0 obj<> endobj 3390 0 obj<> endobj 3391 0 obj<> endobj 3392 0 obj<> endobj 3393 0 obj<> endobj 3394 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3395 0 obj<>stream +D֨rQ"c=^*YlbVמە(H+FRC7X+c\n'afdRaMolzB~=PMrl o铀:ʫ0 <Ꝋ,CGS[Wq@etiQ{s8ri" 2&uCS6{*S2 o6酑GǛp/^#XduM eHe""f+h W N e!sH.q~x2ڂkTAR@5uTrڭR7:OeGO4 Q`S@(UǐlɗM;">egFO[T:j^jZ7BZ)A3|xm>N"z;Er7˞xf @9g2@U}db['.«iv +twؾKz|@3+4S#Ϡ + CMM6/X_zej Ј@7iqSr1Z'{L+@@C") Xl$X:ހ *@uIƮa2*Wn3dbm-1 Eׅl]|k(92 p ^Z Y<[qCzFGVGކzX$~o(f WtS"F!tRG5 vB /6 R& zm/nt {Oj\.4e>HWYjcqP*@iyJ&o5w3z6YDtc@8@.bD0ۍr +IӨL ;]˭%Ee$njI$tgML?P: l]&6ߺu]ۓAS!uwooQlp“px//&.};Ջ 8FAPs^]ÐmK^ +TPe/rҰgSc֘nߔm:2*_9ᰢ % Uʸq:r@X;x +Sw=KGޖL&~9E,> 0ջS蛬G'sN \UbR/j+s` F]@RJp|:S%^B`}BGb#ʟl>RFOaʩV`f¾7/K=@zߡ{%oiK8TJD/xAwtF%?c覚?*xˎ@Ԇ^!%j>r$8D Z+)__T6bKgwwn;X&])*dܰA={쌉0 eCNCQ-v_c-r4?\HR{ע.}b=Zvt*CQ՝an|uhS(Sj<+D2!%ͣn /͢KžUf᥯8 /f-x"C K`m၁,p֜hXBRTfV aP]C +ְJEa]-#bj#v,5- 2AGjw !\ǝC 7{BP1Ͷ@Bv[K?G!l@YlOa(g_bjˆWY qLҺ*Soʿan?y؊ni$W3m>Yzia: ʂpPO)u +Fa +5S9a{@}bA@Bea\3/s 4g׹R +qRhsl̹%MY+%'vS*5mB;ٕs%vGH2£^\SnxwdKu#Yi-X,+]mm8Ps1=GgjfwNsqȆ.Fp#T_$Fp"wJv8 +rWOW_E΂޵9Uin^ >%BO5'8!ȩlƗDZ$Y)|Rj%sj nk\3nwYq ukφ7++Qq1 m_{sLNcGX <2{%T)v#'sܮžMQM@\eQimTv&y(<.L_ i)΍hj_mِ!USDѲ|H.YGpڇ{@f u'yn2Ckxg={g&Ģah,K^H(A竳Xx\7\<;;]-A#C˼o8Uc@#Lȍ}3;ΤZ)eBxȘiI' Ki=Q- RBkA3z9ND#Iu3<=7g1h.FZS=+Mb3m+T+lʐz& TB4M8=Cǘ +3uLأ׹}$iYZ&3XnkrN ٘\+LDLZBó+5]sN?hɇE*U^^us J9up=bV̋{l- P{.  `J +NoBc8Xd ֐n\fed1%բ8YIK@EvVphGCv~`_' ީE}NJڴb):B&bn磈[k!qI-Ah7)Ev^rWd;`rݲaigA<'*Mj@o-p |dIsɜȔHحVhCS1"<,k$<]*j ͯN(8NJص{RFb?/Z z ^Mz'箳rA^J* Zgc Z%|49}{Q]N<:yCq)_($.F"[~ +/S\ \,4X:T>'3 h[;hxbz ‚lଵ|m'7ժ k\_cqmP$^Uao]d\@&\&]3ޣ9A =gٺUjm_\YT44 r-SR?:,e'lPٽ@ ˘7&)0_jN&fm[V9n} B*x%.=ٱkpAjt’c%_~T{'UZwu떦k"٘[[դ]_Aoj+zaݨ@_TNEDIP ީ`y++?V#j`%L,2拁SUNe|,7D 9v~ T˚=(vш.Չ%O />5q +UnyQljy mkᅙXJM qeABu>Ńq>۝N$)*6~M]#gfd jV}B^uwS0;p 3 R:zO6I<ڷ<$zl/&$y6{+[<IJ W9ILQD#s<|"JB?]<;I3)\|\B1A:VWhk*kᰩ1l#cȻkC>ly5cx 4-X MEKg3f$tj;Hܑ=UZ7 Y'֍H"\TH`7 I-ZQ;Y5(:xmǧoGj=$kqR9|n q܀'X *z+!pZ҈2juΦrJ;aQOE_m@Q;e :"i"T ]q-+ :igR@.qՅ?T߈Pd SU8w| +endstream endobj 3396 0 obj<> endobj 3397 0 obj<> endobj 3398 0 obj<> endobj 3399 0 obj<> endobj 3400 0 obj<> endobj 3401 0 obj<> endobj 3402 0 obj<> endobj 3403 0 obj<> endobj 3404 0 obj<> endobj 3405 0 obj<> endobj 3406 0 obj<> endobj 3407 0 obj<> endobj 3408 0 obj<> endobj 3409 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3410 0 obj<>stream +@!Rló^{Q>I{E+J^jEV|%tN{lTdFgP˾Bh8#Iv r`nwRlm)4ʕt"tURH*$kr9NJr$}4:&aCUs `)袿!Ls09lq45l@B]_oډCFylG eLF1!?2CG].j@^boF{ׯˬJ,F{tHHPڞ \fW-ogLBfcDG /{v)G,<ÈdPZd9AfhnV=!кO^H]-B Y#LGhj^?#-F5#8B3|r NyN2Hvu(\4Gɾ?#桱ýc91N׹?eCڕc.& ޴IA H] kGr3it\[%]+Bp^j/]t kγ.µ㝆gPT <k?9"ʉ +PL\TZ.̥%@!^`ɶ,Mcf{f%.0Pc:z +lm +,vU $eJY#9tA EЦ^:tJH.:ESYa*>̾2DcgJV0|**vBP1& ;Z $܀0?Kݷ8l8ы\xˤBfT)Dq n&Ty<~j [=FuqH%g(Q#RݺX"I\yX3SD:|5May zL[9JݻD'U~' A0_wT]2U ~뢚0fZi 쟬HF;D4K( fRFiW(k>yO*OX x[C GUjCrW`1[;b|Ԭ&$XTd!nE֊TnL\VBO?¾5rV J\'$p,Rҥ*-@QA? ק*ITQk0唟2n`$|ʫ[űҀ+hŸ̪񠹓IZ\f_&?Qy& (FQ< S2;W9B,^ִxk?\y`gpwu\W @]A.f6a3S'xRI\C̅ 4Ib /ijF=O5m7qȑѺɽ'=\笵c9XS-FUߗCOMS.쁇!5 FREߘ%Yv\AtiTk>_`埊4f ۼITWm#lwBW֮(F=ַsZF[5mÂ~sX=r$jo;>,t^TYRy6"[+hMc( |l]/3ADo[P_4~DSW 7!Ao\|x'!j]DH(! / Қ5-)bh08z)KHڏP_wfX iMlts Aހ +endstream endobj 3411 0 obj<> endobj 3412 0 obj<> endobj 3413 0 obj<> endobj 3414 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3415 0 obj<>stream +tAѸZ'&洴Wg0E"+klQ-8ڗb<#:#,8FhbiWKJYIwغ4*c :GWb<="4 =fʷNo_TC + ߆A : > mP-?%vLx'1g郊6 +WRC"*CVIB7O%24NL!jXϒ[,҉b |َ9’@K\\A9V˖b^q"h*^:uw wۮ|?0(iH^3xIX +]rw̍L;<3Hs]Bm)o>h^(Bo64V+ +@\-jTMmc _ ݞWp1hL7\ďga, u؄z„|:-7 GZq"vB&kgU*4S_7y8:5!I>L(ӮJC%pE40ǎw(bOڇ; R9F$I^ :"ZT똤8鲐 kKy}QA32o "|R?/KtI%RF,oqcم9O9AjsV],CQŹcș2:_~DRsT䃢gkR#4z,|%Dݻ0< { -#[N`AGd5?iDSp]'53~4y| +P_~bE {wxjvL`5xM'`wadK?Ӕ!bζ~j 0z7FO%[>̂pجk.A~=F-YVHBp0J6@354pzqd̥\`iޔ]&f1bE(G SIHٿg^Bf6cȼ -I2L=a/ѧ +endstream endobj 3416 0 obj<> endobj 3417 0 obj<> endobj 3418 0 obj<> endobj 3419 0 obj<> endobj 3420 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3421 0 obj<>stream +<Ѡn*RRf-N8.o>9}je^o~.^-o:S"M=|* 7y$2't"K=Zu-ϣ* sc)crIh4+SɈ4vS8OA2b9u4^dbce!Dܷ % {&0D#>J~?"0 n*$xw)oLsz=lP-Ф͌2)6>UPAa\Pn=n UGDd0Opit3 DFF._!nhF3Zȏ"A$^B@H ɣ[xxTS/IyER+"lmɜy6QyRB(j>ղ2ujBU}Fy1`i[e]D'X;Ą.;Mj[Y,9v>E tc];Sc&']~V6}'j)^1]j ~+QR[Q JaOv&+i,Q`*05Cq2Q{Z)  ϐfieL!V=tysW<->(Bui3lXN#\[1c7mm"34y|VUc{:,!Yx('D鑏 )~xSjN[>8oeH'9Um8qO.=cl[=ۺA;=0hhV(Br{*aQh=fҵ;T7b;x-: 5b !Dxg| 2N_INfw/#uHEzpKioK[{€^ /'`tk;kP۷눉rhItט~P# =~CAfu"} |\ KNNhԏ g$!X7!`/?N 0-ھg s8KbOޛ^7m.; zh`ۣt̑`+,y-CD4ڌGUJvn +&[C*{)Raep2>7HZAbN-VE;h_n9!Qު!-Ox mR2V0l+HA&е[{ugɿ*D þJ0y 6s \y%`br鲇#ւg`zLR˛ +endstream endobj 3422 0 obj<> endobj 3423 0 obj<> endobj 3424 0 obj<> endobj 3425 0 obj<> endobj 3426 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3427 0 obj<>stream +<\Ǹ P/ݲf" pƌn{AT]V28PQ FtO^g㧂x.g2:ayCgQJxpsXʂy/ FOV̀€ ]tzb {g>vbҘ&Wz7 ;c#ؙ~{A=)! ϵ݉V=M}+E @xl>hqq%jĻM00R:fF+gKb~ +/Ra% +xd\'ts^\| +(R" 2\!i{Ґ)AANn<؅t Y$a8g&XpRGr3~۳HgGL_A 1QI*DW^6.ΡX_s^6\9#U?{h/kRQ7As309/r?*V²5<@;n(ٲfu5;.ևȡY6 곌Sq"HL0| +؅+[,o!x"qP|A\asG]X(-Vթeߺ΢sbwYq +!ތuL= GP6weŚB +h  *Gk3&Y|va.77igU='d;T4jmY.lQ + >lcA`\V˻l_*Ie`7Dujמֽ*uAN! 0k*M+xTaR֒iuf#!f9r\-n+{^-kxBbeorE]a +'Q n3ތr/zjBa f#ׯY?̜[6UPoPHt8__9UnzF +endstream endobj 3428 0 obj<> endobj 3429 0 obj<> endobj 3430 0 obj<> endobj 3431 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3432 0 obj<>stream +kš`DΌ$#&m _VGy/pi2w"'AC=㤂 De`_`bizRt g#:$Vp,g7}V̓}O=@_Dz3 ]i@fר/(Q`5x"ę9kPi-bjGi׫.cm=t kiQ.@/AJ梔u3ycШ($xg(oaM*24AE$0nY +̐W#8x#ЩKWD-v#'nF0 ]o5wu̺ʞH~+~Dt410c72uzqRJa 9+` [GPAuŸ`ِUD l\ eňbǯjyϒ6lIYeBEuqډDK >76gȔøYl=JH8/N|" 6F:DO:T!]1=;6 +n^d7~V?wɱ{pWmfǃAjxG/W1@Y C]YDI̵,BO~$wkJЉEIzrlVj߲ IWwxѡX51HSA#x=ѡzP2Z@^?ШVφׅ8`:ohT[,SMuCGg&AڤB{cy" Y+o8!)[S6rK;`paqjq5F~PE?^DDa p|Ze)FNlv^TjpvenWq@HCIV* 0/̿_!U_> endobj 3434 0 obj<> endobj 3435 0 obj<> endobj 3436 0 obj<> endobj 3437 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3438 0 obj<>stream +n[bP-6-3P4CàTH߂mJ>|O kvNT\WT \D*E_1DE!W 'Q:/D4WE߁C>9cUt0V95CmK׊B»oE6&kM7c8WԛN9,Cۺ?2 VbZo.y38*<Ǔ(ž hc}12:87K<©-'}ivx s54<2VSͯ<ٺҸs[|8`d0Lu M-@Ț.7 +x6_>4$s1^cO{y/.MVR&[5Hkti$j"9[xSY̓SrL:q/@E(hA#{x\V"vAr#zdO(IW(gݜ:wɜUan1d!n܊vILĢ"jR>M[1PE)㊃DFVW*mׂ90 1KPG_Db'q3axnұ"LT\4xl oCI2\-?H񘉥 6F|CS[ixRKӂ^ c2K $!8{`93,Ch(Pz , +|i@d̿ Ė6SU]<;L}YVH {q֪ds vP1N7>`E--4RO웰CeCLtlܡs{)7_F8%~8ϭ]XaAޞ%7#v{SWsZdX$to` +endstream endobj 3439 0 obj<> endobj 3440 0 obj<> endobj 3441 0 obj<> endobj 3442 0 obj<> endobj 3443 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3444 0 obj<>stream +4UM(|Rݑ+S} N03=,c:÷yV[GTh[b9ͳBdP1ia/+iQ>2*M& BO-sE0[rmw^1s>Ȑ0ڔHJZ bv.@ E/0XRtR_Wa#lwkY6ɛkId<+lnQQԦv"dĉ(lmqga x`˻$Ss@2P.}K&y΅Qc-Q1n } vUgo ݣz Dd9d͛pf4WxC*G&&1i[yb?oюS +VRO qԡ Ya)(ڵ&reGg!;;w/dk+rk|dy7'yкʟ +WU~3}\٧TLJ 85 >"=w|B+2  +mWsN +H],O!l~*3چh +}00 )Sj0"\\z(,z;'5d~47~,scOEF1H>o@2$?qToh!ݩ.wXjlox 2]KI;U@TvJ%PkkEݚ9哌8UK)SNc9۵doXw >k; 1X?{'H"B",dR^bI,SX~B#_\',D`o:F\<3:tGbLq4 o;$ȳՎ.|@6U@ P +3f& +q+ўzTǓcrɇؘ :!:eb8.C1NbxZ̝\NnK"$stϥA H8f;<e$ +DwVmXzGh>ԭkݶRt0$.]i 'nb>B +t5}͝Rf;I++_Z_"Vo^" Rs0 VXMH +endstream endobj 3445 0 obj<> endobj 3446 0 obj<> endobj 3447 0 obj<> endobj 3448 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3449 0 obj<>stream +9ҐEdcٝ^)3gvv`MV܏HY8epLhˑyS&3!6YxJb!|V`1&sqlPq*rԴi$n.hwdܨ4z-ez )EX +O6sF&#OhWθ5dc*64Sok-gdܡ&WPBht8%PɅ8o,cVF/|qA!wk{YVx6_qDq'-p"MbN]^ugϿ8F9{ :b>| +FpP%y4 j*>rQxʞoEˏ{}v ]0R=)1R?iSm\[5,vrXC06N<ͅآA6Pʞ\YZpI1*b +lFAi{(lI t1:YA#}IR4b1m" vl=7G A&SJ5i% LUhDǬ %8eza)Ef>r T!uwѮ<%fW| K%$;{L.Hu2f W=SwSE)8!'0o/#+y&dp dQz13XI^Ӎ: ,lUZRed~Ǐ?CW r6$[BEx5a)Kq'dŰM9\/& +m΂jQyDۘV?96}U!M1x?1 ݆ņ<NES~n)B1NJME pAmJ?7BŶocEF?s"kWt$J%+,%Li͌AͿeu`{ +{+TĮ +endstream endobj 3450 0 obj<> endobj 3451 0 obj<> endobj 3452 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3453 0 obj<>stream +h8FԍjE{`jLc%SW~eǴ.:/Fӯ˖uEpD\jlp=:SR.eG*\aPZӌr%4Q/Z0 qvY1 vFSd>Ly8 Ƹk:4/Vb2lxft/SO,d%n҇5 !J۵gږߛèpv58t/@\4WybԔV%'D\ܣd|硆Eqz MI +F{D-TRSBnk7âu Ik?9 g2'dg< )ڏH эPhVLq" ;;'"}j¼‡ǀ7/ +endstream endobj 3454 0 obj<> endobj 3455 0 obj<> endobj 3456 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3457 0 obj<>stream +:u8wvU֞uwgx{T(ir4\gMxlRe@7R.7-NC.FZ|?d!Po2HUvK+øZ;q;X GvitE:c%bzm1f~JY zry/#ƾ ]q~±bCHtWy6pC;l(G:<!~z{+8K?l1-{Hf#89\Hou?O[v6QsoiF]K +1_CZ4j'4VH>]v>;9}cҐ%V=SBVThD_~6vQ.kI%PU12G\ 6۝L j2yt!~$=@Ij1jÖEq3'媬:%b 8dgy80,:r Mo{Tg׮oioCAC\Q0f'O+ڣ?PKE[)K-M]jU/ Bs۔wF75mm@X|kylz^d赈P-dK l,m>K2 8\ }ػ7QrFܕ2:2D>ʹ_ lڍ"DHH>5Qy۷y&GcsڏhLi? +\w|䘠f 9eAtf @OjsSŒ!ww3gh+-UL:k +;@]k tmSL NVz9-[ܰɎgDAgk^B7h [#Sa6H@ƪbH(i-^ -f =)w +DZWWrWւdOKi~6Z +endstream endobj 3458 0 obj<> endobj 3459 0 obj<> endobj 3460 0 obj<> endobj 3461 0 obj<> endobj 3462 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3463 0 obj<>stream +]/RSc<9qm$B?,P$0̽LBO/OR27_`$Ը!>ZAΐd{|(9TuΧ Xw@ q-0gEw>^״YۨL:X-D#.5I[KB >`ЬSH><(/ FF^(Iζ{|3Nulg ,ӯyV}5JL"; dJr3SdF4ӳxAu1̀kT?q'M%#(q{t WogF,2k>RLj^u#Jy [/c,G;xrTyte 5$\m *fY4;WO.kAz0:\=RKRHO9zzuر']\7yuSRҪL"aTyca)L2B9ܐ.k"H'J_02Ԅ*{}RH{И + Z(Z?;1K=.7DVId0ENeqGgKd@. ] @GA9\I0fEfiD8/eünFPyUqaʼ L~*jQd͸`+FT&* ؾc~*Ej0]T7wS6l%!`AQ]sMx^#m!覟=o'ߕhJ2`eGÚ)3݊7Ƭep:?T7_ a~;Q$'Cn^5`USFܙ{1p"o%ﲆglItT +o7*\/(q~.mi$( +endstream endobj 3464 0 obj<> endobj 3465 0 obj<> endobj 3466 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3467 0 obj<>stream + +?e|!1$S| v|Ow[,/CH]"dڦZZ@u +΍ + }%BqT{a ˑ쯁6 +(֋vY3u׳Щիg=!y += +oZ.j\2 +:ɔczO +Dގ@y./@f5ֿ]??n|otq$SKm1dX{׽Cg:~?@!.YC?F/%@D,E`~%{%a<Da$1:LCujyL3"<)o )_ ^\:8u/imn"Wn;h,*oIbNJ<߃ J┤e~|ԴxhrQnvB09W3%p8b3\2=Kq3e .}))}\8Kv,hW8tIX{+?c4#k ܙg>y3Z֯;5E{߈txw^TALyk6dfH~{瘯ϾViC^1 .wL0SsKTI&ম+m;O"]YL[XVbdnрg2~;l1\"]Cu6 [v b.8=;{Kuk{+#ͩYѧ$,Wݿ牭?3}{%O\t,OuΝFz8r$ jﱿlHnyN?_<(OM`JS^Nvḇ|+SxmI[z㖪6c摟|q.O,4TF0c¢6~xʝUYϕOT)1t音['HLO;-&\X㸼_94nsN]t_Rf| +OgD+"IPDR? C/= $B]Qk +,CimY:/so.ŵ}?hp ++ +endstream endobj 3468 0 obj<> endobj 3469 0 obj<> endobj 3470 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3471 0 obj<>stream +7;0@G}Z+LRx/ݘ]e8(sjDi/k(v56uJ^̕pfb2}&Üm<Qăߐ~;f|_Buxyw@hhnp<64Ym9Ly9x*gw8vsb@ + Cb|(R j=ȝgLrBOK2^%; +6_*Jbjwh|tr4%m{45%P.ɕ + !~rE{^Ź@X8J.&!cTd~ޒP?xz6OMG\e> endobj 3473 0 obj<> endobj 3474 0 obj<> endobj 3475 0 obj<> endobj 3476 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3477 0 obj<>stream +< j+3KWW#`MC Wa4^v_99?P1N$WN nZb\"[qǮypW mKeVP^+ }UnS]xII˃[pڇX&^ϠuђsDfe*O5B#.=ࠊ|J=S u=P\q5ӽӦm䓖CvpWIM@f<0f^n%Ԃxku[+;`8JFIPًa +}N#8qίpWl03b̓ o71zL2_'8bmjt]VA | Iߞ%VkEUb=dTg +¤p,L6 /<َGx  mq-#"k,>rb?cM_1/u34Chr{ +[,/a+wLNo7lnp~ d:{gnYa/@Დۆ(~ ?`ŜQ٨ӓ+Ot V+0tjp5C4IκaęJ 0iQ!B,">1h0 +Z⏬iz.$Iϖ-kT/h|ΫkG`]]Ǟg999c^YTjIk?qh1:[L/`Z4Y03يgAz]a;rjd.SL= sE< +ļӿIKl.B5FHAwy1A^ |p.xi3 )&/^T2CG5U%uд#~t1?ݫ+W3m8)r1{ Q-si +q? {AF$bCȀl1E_2*T +endstream endobj 3478 0 obj<> endobj 3479 0 obj<> endobj 3480 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3481 0 obj<>stream +A!d5. *ɠEoQ a@ڵmyCm뼦Dža|&Q$".UWj5Xkj Rx/2N$P,`N[zϡV1CXalOt+N˫{F95I=v e0Ȅ|@P?~> ,i OʪorC'?f);<6ۺb5^Bdf[bYHn5f>VB:V;fL=g0-> .n> VrYzȡFmޔx Zfi 1>XKdnw͇(N$gjpY% YfPlٮ~g b`.>ƒUŬT|",&( ,:b;|<]f'ɧbmxv}PLި .-kIGƏm?!> N;QǬ¥_"LggFU^+cF?<:2ۡ*å:кAlY3ηTi<7ep] '7@0*.^mO_XÂ. pIna9QwFG:"+P, ,GpnU{tc|P!1v +/\] +8p:@X&HlʸPWvdmW0D_%VLEbTmݚQhƣM ܉"m:2_+`>YY> endobj 3483 0 obj<> endobj 3484 0 obj<> endobj 3485 0 obj<> endobj 3486 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3487 0 obj<>stream +{f 9㥰3Ӝ`N{ cXI@=@%`ҵYaQFAhي=Tڊ 1^>W$1|4~'gO՛vx 2Ry:z@dX΢?+G KAU3r_/d _IPå Aܾ18~-^`p| IT[s ~M p#3B䪇 M +6ȧr2-1 P>  +Pz~Ք)8PLAAnƸ +(0H!mr + oWyXJOnژ=*S4fI^١"gWN݂9s#$Qn$Jxޒ#&KӘ/Ck[X#-OÊw<<і_Ic2;9߰ (PR0mUo3ד+5kL=ޮ{ЅLIq^VG>7fͽ#ɀKi +R|I>0o|gmgneeufW#jXjFcn[Ⱦ w"|3'<>ŷ`%֐`9 >#xˌ?Dkthx y\Aq;BT#&ٌyg: F7r ކ]rew~vlW_;Lk%9KN\9ΝۻtعHq Al +@E,>VSŋ$@l=ҳu&$ >r$=°@_%*e >@,L%>ᚨ +> endobj 3489 0 obj<> endobj 3490 0 obj<> endobj 3491 0 obj<> endobj 3492 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3493 0 obj<>stream +LKQR}x5:K='XI{" +)$0>hPMˆ<),l's8\0lB>*x3o\v`b\7!yt#f>ؑ-?gy0qpϫ{"@H$T +!ojIP2IHclM&W`w.O' !jFDOyiNyc WJwEňmmn; FTudkVyjwx\Nims -{Yf\nkdz4cQm,?CAF 惖$}uj_}^R͒ϭ~cuqJL]E#ˆw֕`,Ȍ?!tȠQoK_%stt~ҹ2Tr3\%m#ҲE714P̎2.DӂVK'oՇv"Bq]=_٤/n0n .^#?DZ(4yo4WNJ{s^A t#%!o8Rb\k|Տ򫕤.6p",5QfSN~^mk_4ـLyn#W7y\I_#:q:B^S=QWƬ[.Rh&Ԭ7.P0[> endobj 3495 0 obj<> endobj 3496 0 obj<> endobj 3497 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3498 0 obj<>stream +p?2QXL:BSgYӰ¹+"~ G,xg:.J5#uߠ&0s- 8DMGZKYFdJE@Mu4)deYs;= +`'}ߝ$ lp`ls)Ԥ #S$UEpo# fu^ܺ˘hc,Σ8\NQG2&%] [բp] # CnA#Q&4?oY)h qc `sZ>jpږ2/{q7ʨd0jP\oD AcM6\|PN/DB cXѫLHo9y|uvM|+-zO)sb- z>(!k !{뀆yOncf7.P)Kڬ1nܸgz>s|0IqӶIU}2 =)-2}3#FP{_#yM7qC +]("'. Pjau# +l0o=L +endstream endobj 3499 0 obj<> endobj 3500 0 obj<> endobj 3501 0 obj<> endobj 3502 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3503 0 obj<>stream +௣M!* &C8[XPBnR&j n2/@htE} +H`}9Hog'|&ok_c|誤{AŠM43@th!~uV1c$]-W@Ȣi&ef=oAw7cM8][2ccT8nFNԦ(}NYMRC.G[#)ogVx1OV ױ%~qO^{"a!] +-+#JN |aT;6B*i (H{KdS(K'[Ǎ'R|o>ȇ_2!8h횛Q`hLlhdNɤ:lO4ς˔")} 7nn?;T=x:*Q0';Bg2i^*DV(v!c븋kze;Tr yQ ҵ Qx +DR2o_Hďe~q`~`͔%]Sc|ye#.iAK<`5:l^%S35hf5){Ewh,Ys`/#M8s?mSD+աiYD*s0eH>Ej0nu +m +AM7mHbt/>[ 2nhuz,;2wHn)zlkh-XkjewҪ \잪ԭUg $40p3^!ux★cH#;H*mY<[1{ׄR?g>/iЉ HM"J!9)UW +endstream endobj 3504 0 obj<> endobj 3505 0 obj<> endobj 3506 0 obj<> endobj 3507 0 obj<> endobj 3508 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3509 0 obj<>stream +P +~P{\Omϲ7-7C]7Q@}m`Eޱ"K$K5tٺ`<}iP:/kJiƾl\pǭN4>Od:IT˿$xY$*z6-9IDxW樯Z9pAK5j#rGAފ3-pD'xdJhVN"ؙPÅTJgTWr©b[OB(">!po1nZ 8h~VXIyg "a'..PR3 v[u|Y"yW`J+gk.mc_}pfKJG @6-M䛒C"{,ǧMiENm*A8$;zmп'v@N("⿶W&T":K>= +23 &Gob;# OҬ\C^rI^) Y'1Y[?;uAv:"y;F$I `{4x Ҹ[7GIV.~aEwjGb^.5Z15TrdFԃ fLWI Ubl0i.0l{J'?h/0Ali$ '&H?LÅln7T[ެ UtJ쓢[9z}F(:"#SWIG.<OP;غMṂ]"MLYJ|/#*'!Fɥr8DD2Ϙ=žv:r0;=> endobj 3511 0 obj<> endobj 3512 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3513 0 obj<>stream +S dr_|0P^OtsQ9P48̴PXb:dO2G4T@(4m(g!_t"t4=SxJuO'Vymz7:٤'A,1JQU]sE<&S<XT/=u NP*RC!o躠֭2.4Q bl;!׀bfkc\D$*%"̰T-0t*Zohur,0AcL4wevs8z@v z+cܬ /i&r-GZ/~vK|qYX\WicywT#^/>8P5zZF}w'/GF<|f+y~=j&. +:-?~sA=L wjQW.Ui pFXz[G᭸%XRiQ_g Wೖv]&Q>zLh/חTY.?Ŵ kwD~YG3 +zdLݹ>%zr֎,馸f&h[jU(c;i#Nb8ВϰHMI9Ns5Δl\Mz}rS;}n5-V0MΪZv`&ZLŗNz!O&mg}zl~qwk_[[gS1n[6];IJ;1 lOajqE]xwiyFv^0TG+z*r4>8kUƗvcϤF0Z39է?]TNPLrCt39@tp((z}ɭNЌBf] $*n0gQ'L0Zuu Tjf1ui'ӮvfəFة)a9 JQzX޼T΁!nc e&?ՇGvIj %| G4/t@.JhCd57,%\ TOJ +VO:fNa2&&O0s{ +endstream endobj 3514 0 obj<> endobj 3515 0 obj<> endobj 3516 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3517 0 obj<>stream +IW;Ÿ*s۠c1#jD* J:AWf!MԦa'7*IM'2%\})•1N_闩B'i&Ioz|,_@C dmɊp[txM:V8Gϋv'`%,J0h&vX#K ):IRO~mG5S &wFB}nWc򔌥CN76A\O-"+qP+Gc^ѕПق[ + £eDət!^HQ[Mf nXW!K0Dw +o(u\Q'g3<99튯{r3cLN0K +(RDrZ+γȐ&ij`1{=S5SAJ9[3#Q-|j"0+&|+FrnhQq,kIb}DA4{P~KALj1iwG}>kF^f]fl`QS\{k[$FIԱn1A[& (P *Sij.I:hȫkX*a}Γ#ŝ *^k t);ʨYĽB!Hn +u/bFiŸa,ۢ$PEjFw$9]/N}_eU7a+f^LјTɾi4!.Rbu +Զ:|/x`{|A|jw[OB)*ڟKHk]ˇ'Sz0? *,N(J/~T VT[w<&/su|w>'͝Pt1͊p7.H,$H`^=jF,[fRtCtNcpt4b+N&i4!~2!s t<\mI*;FMNm_#0 ++O7w(X\5u}KZi=翻ƻ63TAVȘTM5uT0$um%_[ V 6 +endstream endobj 3518 0 obj<> endobj 3519 0 obj<> endobj 3520 0 obj<> endobj 3521 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3522 0 obj<>stream +saƝ0#`w rF(=u>,p¦:LN0t'єIK]V_ [ۗQxFZltKlиnc%S{h<Ƭ2 UX4oX)2G}36›޲TsQLΘp )Z2Mh.Th{h=eM2_ՀF3JToq(W>É l j6i0aAe8{!qQ_dr;}ҀYLj(eOfr##[1D3PbEC%U(+۬}]kBϗydUvrv&k4v(`g,Lc-h3\V? 8{jTgKUЪ4nfm褷s̤v`u FD^3^ ihB[!KxGݐQOd?MDR]&[凒#$! L%1:(Z@ĊY: +='%CYxNF牄(RVi4P_.Ӟ7G<|e-'ApUiR&䩃JhJ]9S)FKcq?A%0f+_K(O HAim0<2*qk*\%r;qcSIC%?{EXl6-+QT K[!d?S|.dq^=\JkfXRS>[30/Up}-u~?9 NbSVUFƒ92jvDtI8%Q%"ƯXKiW-HX>Dyafh̔QD#ST632 6Z/);ipa^m%Vii?K)YCEp:jx+2>3k{Ž.;SfwѸXT^kiT/^g_2 ȝ'tOMUNDz֫_PqhjH\*/'l`mwAD$01KWwX sv[⏤ԮPpk[ho<0fzҳԑh]o0+\ *w ߖB8c;> endobj 3524 0 obj<> endobj 3525 0 obj<> endobj 3526 0 obj<> endobj 3527 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3528 0 obj<>stream +rY[eO'^}G*̚3<7E[7oJ1RQ]W7O*MϿ̬8Z䌡ةxH"i,7GCF@N`+gVQ]FÔXjpDQw}Q K2(\H7? ڥ93 hi* lhJC(c;B;{6h$("FSK0Fܧח~@Ĵ@+4 6)m!ݞF)H\AX.;ETJTɓkl>uHY< ",,iX%E]:N$97#h*сa;p<,?hW24$%:TEz5tZˑ~OHiKƊe!2 ],)'Y/L-`"6֎7Bdg]'D2XJoX :qPl~ 6oω!e)n>"j-F7vqg]؍{VŸ D 7 ďmxSj VwHE99OI>f{"Ȯؒlw0fh1ZP@/j6;B H"6uEK`$01tZBH$ܢ(FtԹ;1$Šj^3S;I $Y; $Ej9&4^f_dUk Cv TĎuq\>†B7fΉnԁ8rEGK1 .<;$?.53{Q{@;gSlע5 ҭ"nȵPK@:\th)v#r > տG !y|ޕ+{Q@ +endstream endobj 3529 0 obj<> endobj 3530 0 obj<> endobj 3531 0 obj<> endobj 3532 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3533 0 obj<>stream +.b69\* +4ULC#iPf,?@~B. 6m@J#YZl.]h.?~j\˴dnx-C;0ì5v/‰EC]K]0tm] +A^l}TԈrFdMt`K, FHzW^w0#,r=BHdVfL[l +=b` JϜ /H|mlHh%s" }p8HJ9w5."R*||Kf=rNvp.&L8˔tQ(E*lIHءwGoRq/tkW߹!"z4<6WA^]TQ]3pzm^,LYgA\\ ъuInV0 +l<Hi>HӥMf]"zDo9DK1LM[YWtrS!FiAFeמWJZ NK J6ᤚ=(CLM+V2};[üLV +2R3i CTD7BKHWBzQ[dY sDl V!Tl28MmM 9刴42)0W51,it f/"kZ-8J7rON_4niB*w ҧ}pro`E}ʟDt/|ŋG f +%$*nT32VqpK۪$r]a57S'`@Jaw]?ġ< YM&W䯌¾aQjIQtƗYm%&uZ-cxT d~@ &q,&9yʱ^>ZU&Rj o;jhuI[g^|10*:-C73kNmu˵ixtXp,}h J9EO0րC|Y3TU7XEniĺ!b1UrheAZ{Az>_5C +LV+]mɝn’Ť{TxP)ۥtƀD=2%4aQgyB:,0$M]56֛ + ZF|J|Kw[,>P-0*{?f2B~u48W{dm\~Բ[`)Ѵ꒠tSOg]+D+n֏X3^0 0g#jD#qc1/[OHa.@zVr@ Di!Q[Mz)n2WO +endstream endobj 3534 0 obj<> endobj 3535 0 obj<> endobj 3536 0 obj<> endobj 3537 0 obj<> endobj 3538 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3539 0 obj<>stream +F'v5.1ĄtB +:\Oy U萪b[[=a"t,:2:Rϒ~N@X͢_F׼&V8r +k0RKfuK^ x$O^M]!ÑjWQ bf>^ɫ +Oci`?mA=pb?J+~5lS~Cf +1)t"?gpn`z*Dy` S0iG3.5юJR+;4D:@g$[M KkC)z#trnF{Ǝ QRei" Bկ%UG4P^t`~NԼ\N7ӵhZMւ+oL$ 41K1Ef`|Un\sVW84϶Wg5 꼕.ٶA߆rх(NA2_َ8k(]5Z3 +TKPvL2fW!eFiY#HMp_>E7tAHUȦS[J6J%s.h>d!Gƪ&s\ntϟs-iQc y>H3%M9׊9qx"-+> endobj 3541 0 obj<> endobj 3542 0 obj<> endobj 3543 0 obj<> endobj 3544 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3545 0 obj<>stream +9ݮZw/ ܊AXL9In0롺@oeTS"}s3׸'E& nۥ<@,kS *W-(C7W9r~[o]7}i4–ă#~|H$|Q"_o3d + 4IsJd0MS48hGHfZ+tYR }I@ !Խ2/?]@)娘ےtspGaUCigY}l/?h('dNLY"s$eZu_6V3(; 1$=j tS xUĪ<,mZ5$ +#3OL~%H[H θ>*YјG%;81h% 2wJ }{N=q47V/x#VJ]F'\Z+:w7/~WSy椋T7K~!E?ڈqa5w\ ?v)67M[+QI7[!UMA3:s춫Ca cCUj1Fn׵Lm(UHo|:V: )[ + -@pzjFA GB M"m_\`(~aWgMǥ@;`߽/a{ZoALQHRoFeJH1wc^:m0Qڎÿ 6C,ԡWWzɺ>gܦkK:YțbEH 0lۂRe`_mC`]TߎHO}UF]:O&!F{}pUtUG W +VRjؤ vhK=z̒5 +endstream endobj 3546 0 obj<> endobj 3547 0 obj<> endobj 3548 0 obj<> endobj 3549 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3550 0 obj<>stream +_el -4\$1 Iٓ\l_ +/ٻqz[R&"_lEHD .OR_"EdX > c9*l !`$IRax[Z;1s$v_9> endobj 3552 0 obj<> endobj 3553 0 obj<> endobj 3554 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3555 0 obj<>stream +w01䉠+˿*kd=XzCtaF9bpX$s;mGC7K2\"#agTgHDSZ}ׄp9> endobj 3557 0 obj<> endobj 3558 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3559 0 obj<>stream +tCSMY&έ +^&Nxyi흢kJ2(5Jˬ:35q{^ ]SϩKiՔNh.+aИz[K%{^|X YSƗ%d'Ct]j3:iw`iZ{ܦ_. lGU89{*6h1"Y +[^<`?IVƲ|C, A^Ip*S"iS8"ۦ-Go^s} ཱི0s9b#zn +VjVSs6qLa%o "gsm"_=rsR5!\;d-/hIvj\U„g(oBU&s.~@Zo',?56|P۝*nBVVLuvhG jz-yf$''$9,MJ w*^ߴ3IQk|F>#93j2 5Vcȵc"sHBnqhV|b#@G.Uᅲa+*{pdFJU6xaͼ +}>̘)]C Z|A ptl UQTX(W\[^X W:Eo('0nk +cA!/0;ȄOS2Utws]s,/44u2@m|Qm6Xv2`{?;I6pzM7$a&̜^Yt1,0"Ksj奔Sf8I1=M7#lג9gAat96֢la9eS8`lݒfhsoM_l"wz҃>VE ++pI;Ϡ~y6]u$2>3:x&- +endstream endobj 3560 0 obj<> endobj 3561 0 obj<> endobj 3562 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3563 0 obj<>stream +Y.CUN7 ^y 7g+⒴ +Si \DmS#E:[Wb$BPQq ZjEӚ|P,97yt?x!^^6TVؤ|ٝɖ+t-7 ;l_12M_"CWZţm_iK{@ԁ_Ě^ i J]]#rFt2S'nw\G~B] b&TđĢWPx0V]PsBd('Tʤ[m#ZO +TsT |J&檨|D Gu ;w] ,.@\EqtJeJnH(}_֐ɖi rֽ3wI48n- +'l(I93c,NnkeB> endobj 3565 0 obj<> endobj 3566 0 obj<> endobj 3567 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3568 0 obj<>stream +M1bِBklĚoXrAXg1a-q =:\5,hA^Kosol5MH/5C5_ Q$@<aќ}C9(Gڟ\OlŠSn`ss"R82#C!?,|v0|d6=[K)v:7tEEЕZ,'/V\ȝEb6p<ޓE!9\eHpqiO(6v5WVhmxϻ0N@DD2]ki @(Nؘ2_yi!79-<6MZ}#upII0Ȥ4!|ւ_U(7}P4-]gRuo4euX4i-uaH \1wtjϾ9?<2KJ;A"ݠ=#3NI8Z`5oGvƸkRIk#I*PAz֒2-@5DKUiU("hD̄r1R|^"zB*_y"Qx/e Tt_'״aKkVRi~vYh`Es<fs9ã4TxmbL]{|QJl0_cKL0aŲ(|r}f~k$_/1ʾJk14FˊskATJ>8r;wA]}d Ϧg*^QQi?-#v2e[t0-[v%SV# qIu4Ua/N݉ΝB, pȟ9ąq}ٳUAсdל *}V30kU8zZDiGqĻա"/" (WD\6Xz!,cg-Cu<% z? 0M[o"VS Vzt ЙQ1HABĊQL (Pw+m+0^"d8PeC/b0.UrD$Lh] YWƁB+*f.F[lį7 hRakl]0t,-ߒ0؈2ƵV^QjA);A|hƣĔƦKVFh`\Ĭg[ +^]N˅SBWD-|9(zBXy ۣ]`Τ[F/r^m? + 1w +endstream endobj 3569 0 obj<> endobj 3570 0 obj<> endobj 3571 0 obj<> endobj 3572 0 obj<> endobj 3573 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3574 0 obj<>stream +1خUӼSY< +"Nq5ڷ Ċ 5ǡח[k&h Zd᝟=H`B Y lP ylT꛵i0pa0Y?*Js7&)ʒ5BH>-hL!48_%<[m +؜~zȽ'Odu:(==6\9u1R8:`gYAFXMnHӰG|<^0_?(ٴ _G +GRr(.Odnس`-Zd(nPB1F=b²;Ew)Jƭ +yApf 8}E1"ϽdúB +{{Z$@ EX[P7K]/_n +S+fĂR.&~8iE/Gʮ%ׁBǗ:!' %B3 LTG :PeIٿwY5|{4 Ωheu䥤nM{%ww,b4"I`sj%3]4y\&׬͒9&.~9!:bҋ<YBC^H&3H.Gi\Tl(Cٶ[U&W>(¸ϻ&C%aHI\ynXAL:m#T`څK@yx[ U$ "%(^L!ܩt*JAX!6 "/_%u@'E42"H!BӴ+-TB;o?s.e瞰 +ޱ;+EIYL8[Uvr zT]f[5[ \n¬yW"IpŬDe=1/_P;[/$c7f2Y5[Rnqͯ o<w-@t, 61)0>HEw֜7[Zgyze\<$@[uEڇn.z䄝x~˕y9 ;; +@[ [e,q]*%܏;Y|D& cqy +U9$h{ڎ^D"QkƁ-A\d=Io+7$jC2A/jC2 g_h͕q|26%_- $* SlC&co8` Q7rL@9ZqUYl9g(ABPO:ބa1qiTE /K^}2z`J8G,A? k% b/ٚw}Ip ?! +endstream endobj 3575 0 obj<> endobj 3576 0 obj<> endobj 3577 0 obj<> endobj 3578 0 obj<> endobj 3579 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3580 0 obj<>stream +b]- +=Lw%0}.*z@-f qć9N\ӕ; \0 <%\sHZ!"|kwӘONL%u=5@,*|dVbX| W ػUn[+\V_ϣDu(B96VgJ9,*9Hym@?&f0E,6AZجHTR0.[80 D=!r,(#,c+1^Ռ@&9g4j|la{>l!B +}ֶqSI_s-MyXZŅG`$ uX;2JB(lj~i^X qb3*;W9ٕY'j3.+*c&3{eF*)S']K]YЅq]nJV\{QCoT%C8C[ \jǓStMaJ 䦊_~ +\++≕/zוW ',clâ:)F=XڨA= Q fNSĄAk^6bN0ásOX0@rF#׺d.ubbꗁ;I/'JXgPBR3bB7? +E4}aZQhw\{g`[dO,6樧d5;aj&;dAJє+gdGyC KHLMy#i8pMq!_:{Rw> endobj 3582 0 obj<> endobj 3583 0 obj<> endobj 3584 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3585 0 obj<>stream +0*ɩH,0s3rn@Y ݚ}ST?hVEk{7Ըo}|0]2Bn=WP֦ /]"LCV%Cs mʳ=-h!t|`tt#hJ5)~#k.PGU!7ׅ* 0.$ Pt=HR3z)h +4Ȗya +5) jH*5G1ڍt]HHJJ[z3W{RSq+ȥQ7q RvɐP+кT/EHBnFd@JaE{fM4\E| ,l8ę3q*~mAd ɳ*#KmP2y>^ΨS^j`F(ld$ +~tS~<9m"*!DB>otG\yU18AirL̪[ ^;t@L&jSOkmIXj, +FGjDp@<ڝvc3 M|qbxkZC'QrEWtV>te_o_[Ay֥kx+ 4PG9MOP$8Rvsugz1gh3lVcq샞Q45B4ti-S%"xu PZM4&,6+qcD5X7=7Ns-nEFUwl-bNS'LF,T9[ore#D5wkK \eE ^[ + +endstream endobj 3586 0 obj<> endobj 3587 0 obj<> endobj 3588 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3589 0 obj<>stream +jiI$&@<|u30yS,=-$:ĭ~z\?ZۚHwP@yt憔A0?LfrbВb8ӑA\C!!eәu0*'a{D) :?B('KϿլEv;]$Št0NB#@~]5W+meE<0.VG0O#"E{8eq|x`VbgDu(37ԃlAUEi-wFK`:(_\x2g5.Iu+@s$IϋqY<%.ϟ a cݱBs`كmۉr=p)%GvAP$RVDoh^~ԛ'_G58>5KX(#B4/Otwwve@+Z 2^3K6Zßab=;y͕irtq} +H@Mu ]䇈q&5%Ip1aݤ&lAUm[F&P<ڤCx+'շ0#d7I%d^-q`SRsh\8`Xݏ\!6n!Nc;Y8B2ggqp>)3R=e}oW^o9R|N~_#^TV : nsWVppn¢<){USٹceS?~#AU5qz9"?iWl&f{LHgXe)/b;+P`}M%O3g[ Dl<\ZiJqkiqb38b›|F̈́Biq塺׶ +endstream endobj 3590 0 obj<> endobj 3591 0 obj<> endobj 3592 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3593 0 obj<>stream +8s3#7<_oJ0c@cxO]ۧRXtRHlEU\<4.p &=^pUQ70zT;R X?/{ɞ +K Lqsc?bf1ڂE0^`(?c$m k\h7`M/4.+ӧtɞlΐauv(N/U{nD-$㼂EkCAOL<o!fZ`nHG,!%||˫.FRpiCB`eT +Ey`tSC'b<<;dT+s/D(;qiElW>M5+ӷF + r/aJ pp揸r b!rFDnL7rVUǻ˓r+S?vBjU xԾ5{_-H)աe} kt$OXzɈr`;NK}@MEL4Ҏ̳u6BzE^TDf2H~?] տ͗ zl.`de51*ffɎ'"|5`3+c̪Qd;Byzo$Ň8Ԥ +\*mZ^Xasf{'@ lTx E=8n \$p\D +endstream endobj 3594 0 obj<> endobj 3595 0 obj<> endobj 3596 0 obj<> endobj 3597 0 obj<> endobj 3598 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3599 0 obj<>stream +.b#pI()>]g +4,KB禃kx@J<^-ˢ +nG- eZ̏/AdSAW;g:lyoee0)s_z +a +V.AIP +j} BfIWir4 M5P2cU%^HWq.(+KϢҊz㍸0Wrb}NuoZRpTaBtMw.g;y97Vja mP *•6!.O|Z󘞅FLնk.wU/-T4[ +Uv1̦GJq69z>3ujϯ:O˲u2U]=feR~k,|%p:Q>GFɆҽ!)XbkN 8nآ +C`WR>9E_9D]k N ȟW #KSARF0Ǫ ׏Eƺ:ȷVōh j;߆Ph!-2L9ݖ|ʨb zO@ +?:zvb3g7G׈୶?yP)a .O&Мuӻ<3i HK3<[s$_*uI"x+o6~z9Sv*9W.7̔M:, 6iA[ô;VHn$L[k9'lVJoCא +)nxD_9G}C(sN +Jԧn(7\C)nda$\`f/i֪L+.-rG#ӂ-a܅q> endobj 3601 0 obj<> endobj 3602 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3603 0 obj<>stream +i:|j,Hء/}륤t/gi,dmA":&QʟkiGR+O +qh%e77Joh#6xS YR_qAf54[W{J݋x 9!{43^ ETu*kcͤa@}ro,;򮬬[uqQ{h6_iRKd7RȚ,,*߽3hCxlC<\v<(P-v.>'( yWol<>ⶥWzJJ,lGi2W[dWLSgx1{ƕU|coMs˴fRW29B +g3/N9".'wvܷ6m 4M/\8ٖ8Y~=)yz7o.ߧz`X{H%-@mC(2j +jƃ̄b(1&sZXzVVq>XggG\ +qF/6jMmF50_@luhʺ/=#ΚXڱ%H ǟ75P_ueidcz,a JQI:mz;&:ō9pg9O43k/dWCRvr^wۇߗYntAjDR4{8=S}?g  o@L8t*yRV%|((pC@5]*bWcM?\=lWRtFO˻NaW +endstream endobj 3604 0 obj<> endobj 3605 0 obj<> endobj 3606 0 obj<> endobj 3607 0 obj<> endobj 3608 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3609 0 obj<>stream +눰Ix;r,v`@`tvFB^w3EY5Jô%~N1K;ܪKZCR1K^ӫ6Glڛvv2MT6,L㕴" ]L~#ng}K}dmdNt}pD;"E/+r|0˒(.}@5p{y %:.d6[ 4|^4;T7Ƴ}#IȔn%)HBYD8^7W ~X߼U;' n=|2v]o(_ ^'k*\$Go +d:(ؖ sG̒pHߎF>ʩd=6f"j+fcЧb 뎱PZ%X #nꈂzEč1RJƲŀ.!EYGT st%y`FZ˒)dO z{1QEGb,*40Nݑ~[Аx /+ȸ1-1e]~'j")++2bWuMM'i 1}5! n@$ŨVq&!o _&0cCaʬ?`-u1s n +&LVU\* ߲Ov0PU8P0`}ьvʒLi/)[Ѕ?/tSnn v ؒK*%\92lr2[޵୽u- \?XgNly} i=(}î" $fQ[rd=uUo:U&a'4Y4RIብ KnBK&5Br2n1!Pg#row[RiefL w"ƀNoȰI5?_(042ma #TlۿGEх$%GܞcrGGj'^2@I=F FFc*l<3iM^UDB2 +endstream endobj 3610 0 obj<> endobj 3611 0 obj<> endobj 3612 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3613 0 obj<>stream +K2EŖO_N4NS67)\h^=H8輆dL+ + yq|[+'58^ڑ>ڻ,e)rIoTHns esMZ'Og^&5>G>3~![nn1`̻ +<(ΑFdyAa˽[]2T3If +Q ʈ^p)\$eIE;eksBPc7FeP|lF2knK pagBx;_OH+L<09<ޛ4{x$6t9ux|vј๚g[w)F$OPUF_lweRJ17.v&F(+kvײM!MBAgu-"4zV֧m!;$ʕ"UqZG6%zL7;?dCl\Wr7ɣ֭~8ⷻ1  e϶yP8Llჵm*tE{>3­zo˵wF͌54V =JFw'c +6_ tXLQns|nJRNT(M=,UOV_^&rW蜳&F0dL7KATNW[ۣoH~+}AcOp [Xa#xg7Sʶdt)8T29v5z~LwF0 +endstream endobj 3614 0 obj<> endobj 3615 0 obj<> endobj 3616 0 obj<> endobj 3617 0 obj<> endobj 3618 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3619 0 obj<>stream +skgP*Kɻ!SȤt"lT+GIu'2tT8Š\Tj\hM gf[*ӡ'.Zin6-⁘F^At=+t3YF\Ӊ!-1|_!I9V8u_0 +ȪL~g:@ޚ\r7ttķ:ya3vbw1{NUp*|-}5醴!\ ˆ!(^0[~ZZX[`q}X=tsZNvDLiW*_c5TJLzrlܧwMH/%/].qr=d"+bI$#cVM=gapTRU|E{ԩp:h8ݏibq4w>ĚFhsϴKؙ5â ݱ>GkK"( bL$fՉ*9/83gpcQ΋ZA;f~_%XpG + :6| 4^VA5mXb?sykp0=m]k ?I4 +ؚr),BWGVE΢yz7*HNF),z!M7JY'=٦_GMJ_Ti36.B4vKWQ$rq^yNVxy4}bʾݨrʚy#dԇ`&ʗ)pNX~72cS_J_숗,=/KoNv'yЗ5?4gYdkocR"Z@P` ɣOϳydԮ7,x x?-q@ DZ+C?a}M"tc%(0.~ +_H,tL#:ϑmPdq;l"aް@XlO?. MP-FTHn1i9LTEM hU `uRS5q/Л=nsr='xLKASs! ZsnW |\@6NWJ1CE,XY]Op0 NG0u"Mtj_ȂTەRXݡ!g +endstream endobj 3620 0 obj<> endobj 3621 0 obj<> endobj 3622 0 obj<> endobj 3623 0 obj<> endobj 3624 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3625 0 obj<>stream +Q<hnDwYu +@AQT@ +VBT"QkR)a4HB#fNt:Tzi񒰳6]qL<ބu䞹9?oVF2o2KyIGf^w цXJdf5-`Ck/bc|V~u"a +Ne*>f 3}~E+ zIB|۸~lB?&WSf76I_15}YE3J\/CBʂ^8E mV#PiT? +q[aߓ\M;y7f|m{ $=7Z^l|Fۘ/?VH>0Ű80ߍdrmޘ4deqǸI_ڱc`+ +(GH͍> Ɋo{esE*$H*zk1|OŗkAi>׷$R-aEPZ_PT/q%l&iB<)=BA p:] +6{9H(K[9NF‚~V#B%¡ڢ~ X62 O"PtP=ps{,Qϣ&&! ?-ѰSV–I B׬6h^@ϭeh^C(:sVaktd>qEYa?0Tq@dG!3B:Ou]8ՉAu<-=ܘP/.I#T9!ԍLl#ϙ&sT4@6! l~D]ĖZ9a tdOkPYq蔟BJt4T B2D9:[Mn޲>X 2ְO %KN2a= W"g0f(̀&=AŘZK +e&&^9;ZTn4G ݯN9Y(> endobj 3627 0 obj<> endobj 3628 0 obj<> endobj 3629 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3630 0 obj<>stream + Cv-9VEӵ@^>be-kgW=oxtUuȹ'lԸo]dJ{LOd%SRd{ֶv{N!I.dC_I0s;5b^pԺBϵe|R|nvYdI^lbJ"AM\  R8Ѻ$^ЄNxF9oX*#EPl~d% +0E +ݤ'6WF'8f2ֵU?f)TpQ ?OPXv^ԓyPǓ*<2 P!T˷G)B|]d?q%3B䎥j< QrnYOi&Ӹ(Û"TNӭ OF5An !ZL02w7TY(Ocԁ'Ux6lGt3LJ)NÄU4S}6+oM$-$,?ʭe"i`ܾ=@i7vǙEÛ"K4wpċ;BV>4n13LʻZh׎)/*Bύw|ŔS 4 Rɸk@y[(JE~B)#?3M⤜PV="=5&$46d*グtK=hTb:YO5J5<9;PGn~QL}scno6Ϲ rqI&?YfēFQe :s@ŽTF)[hJ51*杇.js&3/?Մ=PbA^AK,w+c/>#JӦ!ϾIX!}cea>cО}m p鍣+]S9@v˕ȉ%({ā 䥯 I ]97/j3>Y!hf>PvK, +w*ր%ئfF10K5b+GQ%FĞ29O:H諰Fg <ȥ-UZգ[ +endstream endobj 3631 0 obj<> endobj 3632 0 obj<> endobj 3633 0 obj<> endobj 3634 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3635 0 obj<>stream +ߑABC_sYc7|I~5(nqvvn:~)mZ+(ErN2Z7堘ǧM~VSv'vn(u#HbFªkTbgsR4cz>Gw';QYWK"bw*f׼ 2arl6 V^ma()e_ _em>2?&o(( 3Q Jy6Rtt tD50#Q}@F3,>4@Bh}d>;2*l~Fm+2gHvb&oU$GƩu`:Kh|i4LD!{Ʌϼ㹾i9/r~u%vltBT{8Π)!l]Ĭe RO;"Ⱥ"2_2:-|ÆR5y!IͬTh0:J cmdwͬK$&6' PЧ^GLlX>kГxl.n 5t+k(XÏ A 3[ƃ_׭j9y,%#:\gekøꂈ)V. r^Oar*?:kL:QCʪz{*CwVW'|scDXcfݸ05rJn [Ƹ+ᛷ>Du=Uq|@*E/=_q#䖨bq(IJ! OXֹDdBWaMɂ>d3Ż*\@9[,ew^¯ b dd,2)G(Sfow]#D t֗-oI 50+F[Q ,Ȭ$z#x]˓%#Ju/22ThPJA;8nhnOgoƌ-M&$TqlAU$'e-/L0AhIy+ǵu{Yd# ˂=Hu[΀]k]Taic, > endobj 3637 0 obj<> endobj 3638 0 obj<> endobj 3639 0 obj<> endobj 3640 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3641 0 obj<>stream +j7)lF=FKg||vqPvj4A +G'o<-V-;U"٩9O!V-9X?:v~Jt[z^o`B&I'S}7l( DO2q +6|,$t.ښG V΃l S}V5 2oi.qn*_bLq:§.f~'ٳR2UFЌ؞kE&~, dHs;v1WqZ?pmk7Tǻh}C&\`Ƿ`d3UǛ;cMRVV`1ۭ1pRJg7̻: +7 NomܤG6~fj,؈Um'19n*p8 󟐗@>Cxt5ZtUt zOΉ.oJXiLƏ94v09XLxz֩d-(ַ"Iyw4I7$JL26lxyQa`\`o}ې2X2rȔ=I>Oeg@Nx7-1Jj9狟ɠ<ݮI\#f?PsUqxZȻ6]͸'|3_K؋nPˇe((?Yl/e+=b. A@W }udGFřX,$'_f e tP+'j6j TAZ)(.a#@-v@)Bt%JygU60T _%OWzknj@FntVI0w}Ij9*]WzurǴP~]]]=-Q%t1r\,ďtg&0گ~$-"q\<A6@cG}RO-[=&A.j9_eeERA-sO*l0N.7|G|;'r%itم>䢏eqf弒{=f|Sb>rd8)4&f3j/LrWEu$pHф f QY =V06ɇ┃[ +endstream endobj 3642 0 obj<> endobj 3643 0 obj<> endobj 3644 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3645 0 obj<>stream +HI3lWzCz}ɵ>W)Kg{0+ugg^l@gИ`؝Xl$1>MdY-Prà JsgBB]54YQ;'%^ _,lG|%-=#$ N_vv +J.n,%[ƽWL(1}($q[о\1M |65?ɹ<޾ng*# s6._̉.XW$]KB:7'I4jxpVWVO)g\421MFz ҵ%B nTl> HJp/&T/U' CݺM 5ۂWLlύ$[a.5McVCƷڨ8Jg) Ziz[ZY +dP.-6o:me +勭UJ +K$FIS.lM{7?jےvǓ;{ lQS2o +u=RT,?xM>\1IALN@1\Z} Ƨ/07=+vS- A Onxx}\˸91kHcRk.U8]tnϔ?(n!KzIsȚ{&!}\:$G:tM>8> endobj 3647 0 obj<> endobj 3648 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3649 0 obj<>stream +wB|B1{'t3k &``a0- } '/!0)eR(1 g1 5z)#Xp\MI(mOASLh3͒LM}>JgvLl'3![Rda97g6Ja#qCH9G +W@-j#dM2Z/HP=?Rv]^GC=מI%Ao9vUM!&XZ_)wYzX݁MY.(X{w+ +qsxh*4Y6tR[_;V~iRM}7:~ta汷 vI/"*FPHԦZVHW<G]V3`1QB7pM,=b@K=I3)tZχYnT8v=$_fS[8:mb~VWzoqt7bޤVypeߙu}N[m|ty_-hFC]ǎ>EjH3f6;ps%^*I!!w%}>,^8<w:ã5IUu8qo 4Β.6fA/o 3h7\Z UU643jOkkPͿ*ne×Ndg0K]K -ŵ6jvn;V$D"ԡ>XrŻ""@~ s~sFDa#fӤm A!7ڤvx:5sHGR'X .+%2Co[!m(]m΍0+>=~єp%^)̌Sn}_#{YԄqHJz/Aef(M1{"C-qU,*ɊT[KVC7T=Mש +ݠD~+K͸grG˛> 6f}obH>ɝ\o;5&fNU]]DȂO^2DtăA^ݭ כŬYYyrOjEmE\L9rMA܇a`a&1 /nm49 +痵=)$bCo&4%ZoptE~Pk?=\JyڃP#U$Mﺺ$ ~7-J\ػt}G?>^yra1n߱_R͉a$y.ɔ3o /"2DWTRhm\i./M\~IhXGR["-AovWEŹ%g<)oە)Xa4%j +endstream endobj 3650 0 obj<> endobj 3651 0 obj<> endobj 3652 0 obj<> endobj 3653 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3654 0 obj<>stream +:C/H&ش÷W) + x_)\'sw#)Z˿K ;o޵ i> ~.\fAa6N2l0͡>ʰT!*H`1tV@"#K9Ia_ pUsju rXDeԡVRH8!l@\ Uv|1~ӲWllj|('7cNlѹH5`6o +gFR+`avqS0)4 w(ț^+15m8EU7дC~M{*{&niR?Jae@2so+'~p! +z-p,ZK|l_+[3,<Ӷm =-k{t6x ^Zm&Ҭ"K|CnfGH.0ծzIvUD5n|9C0}zyLoi +CCiVwd>|/Hk@aej[e4(Jv/ L@EIcU _4RokOc7S^ +m8L!{PE'&`@`z!py6uz;aD$pk)cWNz*=TUO^) !bJrGEu')a=_*%iF0%R~P1G}e(#y8.x0EiBɢ-ds},̶D7ب:Ɣ% M7Q+|l҇n"3.|M]Q?a>s E*jh`}.{#17;qŞx{ME}ԋʡןpfvSj f(d͕ Pf>ǃ[,MmU)mЁ >&. (+qSL]Ig%㑶؄Ū876bѬ7Mvj&߱{@ p#0T^a&) Ti '" +endstream endobj 3655 0 obj<> endobj 3656 0 obj<> endobj 3657 0 obj<> endobj 3658 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3659 0 obj<>stream +s[;ɃŮ,RH`m )NZ4}|LlMùryjV e2 p/xtVnu)?+Ri~ 0z}@ R]Wgx]AOs7mý;%'HW_L 2l|{K ?qfYsPn0sX/;z4{4cs<ŻiK_mưas UE +巬,Vsp +{f,ګV&[6Ij(?V&4~aŗF9:Ѫjf}~z + l4Ѣ\ uI?-Iq |[-(>g/TgbD{}_Z^N* +嗛qaE,+]`'<+>DW93ݬ:n'^qp1Sُ*w%MW{3lm|n[񽳓.(;iB+YzۀnAU6bF(jŒdM{FGO?G^f68gT. s7'7|7!VVU0k%G̡&HxΖq٨]OY>;(b1D/ocBJ,\t,jSHZ+c?5VއX+Ƃ6`;ժmvtato2#[֏AZe!]jݧL5RV6]N: [Eq]n.}jƌX1#4suRi6҂x,?x_Bؔ1SJ^eGa!"Ѓ9̴S rsPm_?KmP@!Ҡޕ#*JOc®YQTZmW>ېTju4S#xt6 ZQ! 7h*+ + ]fhƿ[hGr1*zlecibPH$pG"/g";^5AW B^6eP 6%82nQL4JuI+21 +nà] sn=:YR.IA{r>[iZ\`A=(_،DJF_R5#.]lj3η؀T`XǹqA3ۈR,TqװA'O2RnY}!7< 9Lfa/]LI7`جObO@J`OC?Jx\86Zί._Іw娹+7G8rTyUې 1* K`3mDJu>lhS<ƛSe69U +endstream endobj 3660 0 obj<> endobj 3661 0 obj<> endobj 3662 0 obj<> endobj 3663 0 obj<> endobj 3664 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3665 0 obj<>stream +/uƮJ݄o  !`{ɑ[`^`"\P_Q%gU&MQ̥ԓA_,4'{>~sEMܛTwHC HDLJ +4i. G$LU +:` Z$I=f}KKW5¯ۺ_aV>7c<x: BwH 9SM!`TK bDǩbAwd;㴖8۾\׸Q5$-/=y_ qjx}IOS6a+7,bif!O3xuY-xX}r61:݃Y'qZ5^4KyvwH %_zj=5Ǒ~ Ud1u`F;qc{ 7 DuM+ap~thTBf .~,pߔeZ5X~jbeJ7ʉw> $S'n9E[25݌4-!Q|SqBKe˝-iWs1&ON\f>to4.)~" =+ALN*ڄ;Iٱ^}?u"GoLaOWcZx`g+KO)4Kx{dK7[s'BU"A?Lڰtf½[ Gy'S}S;귗?lXV*X ~6>Q^}yئCCU5eL:~1:yyI"5O<$^(\|HwGY2y ZWiZUC6It(O@\hMN_ +$g'E6t\/$C8w@((`V:n =BSerAƳm~H C>L3^zv}L(ͧ!`P C`>r3pm..:EA٫цƺ?D9Ϸ(̵K˪~ +gTP)ū+$()]"h88~K&"f#f>VQewOêi %:+وZ?9/xj ~I[R +IY0b ꓡd9.cur ^vY[`5灮U]*P?cFN㦵6%^ )OM)$&"},FHCa $BE=N6Q#0 +endstream endobj 3666 0 obj<> endobj 3667 0 obj<> endobj 3668 0 obj<> endobj 3669 0 obj<> endobj 3670 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3671 0 obj<>stream +wѱQ+xty `ؕ)(}H[4{s ^ʾHom +ox=]/3x0o9 [IC2lgyȭ]#Hw$s3Je< C ׾ʠ־`VFк;HeZoLQ7_ZcI7Vu!-[+CTZuä>RL~-H;vY5N\hjN>oӁ!y]OJ +!i{SBsaZv?|ꕽ8rR(9xqQ's0rHf9J~쐂q΂=UGߵ# cj XS ә\}j Se y>ů䇨*1Mb-մ* ^L1>C8#@v)+VWEm1Z?֝RM~ˆm|)ЎخKCBˉ9鸆*`DWIW=O' ;LM~? r|Y79%"xEVUɳ5o 0im t~]eG U!w6B"9^;&lXTHax/`N0xAf=^"iJiؖfa}4f }j;9eǰhG +nRZ ~G؛lru1|o9 %*OC,DI k 0<߀¶29N&sn~N@ 8rvC#qX +endstream endobj 3672 0 obj<> endobj 3673 0 obj<> endobj 3674 0 obj<> endobj 3675 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3676 0 obj<>stream +6s7u LhL׼cER`?S/!gCT`:p)6t< ɱ)b8B8W~a^ۯ\Et;%b-FViW}&1דz kdy?2Vbe2&0)g1P>ݗF\%rx\'ᓐgK}\hʹ i띆./.3h郇J?W)(x_Ёp.Vx$֓u욽u ?qb.S϶2K D";~:n 8(E:)Ǵ +dx%":hoh&맻%-)ۭ":^fsݚFfj\AլD3. Os[hzn̍zJi:i#H#I U^,%vх;0 QE\p.( 5ح=#*[t?"헊}5ڻ +{b~ mDz#VT(l5hv;/ac @H'=G"jÍ=çomN̹VaV*ۙE:OCYE0_4GSc3R_ +^zDr>Iv.Y­'0> endobj 3678 0 obj<> endobj 3679 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3680 0 obj<>stream +:@%3yzk%#-\sQrYMwA}d(S}N&>b~qQB]mN]8ⴲd7Jm%jvT x0PڀKX_Ʊɝ1}<5AuDϪZGm>: 2, H#NF,XMi"0@쳴J|Q%BS(9[\얍OXS_:vf+oINb{W:Avx$h˓3/FRRl, 5btZCYʳF+ +qQ{ݜ}eocxb&`4-RAZv70d9M#f3C'0wڼ4Wz[?:G+B63J1S=jwy]2Rxۺ N| 8h\Q3?Iςk{gf\:/:.S!Ks3S,XT> endobj 3682 0 obj<> endobj 3683 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3684 0 obj<>stream +%&A$A2 z#xEmBAX&pA /e+^& dn; wOfej|ӕl$I`byGDNb?yI Q*cЅ,3$'o._L-NxJ[  ݘ_h#?bWزa=y cjW΀Dπ%L9 qz+A2޶7$jai4d ͞ fO`BK7iw۞_sllxdņL8#nW0瑜U%A=/pr YIcaBI(M{/옭"L[ JGb I;ȕu$H*_ẗ;X1ۙ~ KA)qܲ Րh"8o&w蟣d?vxi *'F)se8R .udcpMz:3Rz|!ٖ߹?xoE71ِsX,ZI(aAF|90OP."d4|PFh +O$l%9CźPs@{e;sydذ¯#hF%٪8P7lݺsnp3tb!?DX ++=5P`(h֪- )ap8ym Kt@,6h@'p&eoէ,ø< &`c E6h vP1rz=T:_.i]qB hEҷ"UI ﰫx81HF ~poۍ6SO) 9evF؉nZ4X7Cо&He4;;Hu< HyVBcKO|6+&[n@h*z9)RO/ +endstream endobj 3685 0 obj<> endobj 3686 0 obj<> endobj 3687 0 obj<> endobj 3688 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3689 0 obj<>stream +]kAVUК&ŰN&F]{f[+6EY^N]''`@oO]1v4Teh0Ыf'0aLF0&X YiTnc8Ɨ]5۪iy\szF& _1LW_ ‚3,xܓ?*=|_1[OD-B!BI7q̥UrF (g? 6zdDTӑf +C&4 +2OnTAIMaq}w.Β̝Vdreoȩ#"H SӉLY2}L΍A)yC\[])?UnFɴGr1"ehע2@ Y RV#I!)=Xu)+(:;ze fkhq/ ney$??@WdNиl|0ˢzev܉TgHQTAu֠R^%RS_Y4\OG*/RrGpWEs6 Mh` GǤ;K K̖F Š"}9KyC}Ѭ_eӒ,ex# +UUDL i#! >ԵҀ"f1 J=M³U=KW֩XZbgS,-tYYcoPkxxT:F)?De;݂MD_a&?@PZb0:xƶv=_f|ߠ_e86q,u +M.b'*V 0;ȁpAyٕ$tx\/Ho1t<'k#(ddhUHZtB^:69#A7-C bˣFP:=:L4rš7D"츣3zGL\\F +0}?*6񕼿P +endstream endobj 3690 0 obj<> endobj 3691 0 obj<> endobj 3692 0 obj<> endobj 3693 0 obj<> endobj 3694 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3695 0 obj<>stream +2CO'4l(FlnSXnv`PNcrAGEae6j*)ZLyW@@u0JdBr)5Y7v!U:iPJ&o4"g=pȈc@rPbF#R!0hOl'Zv FEqo+<8fG=f +v#Q]sJ ._o0~>p0uz_xviyx|lݨPS뭀2,&JFP)+뵀t^"Tߪ(XQAӔ"W*T?&x_ +U8SGKӾu6--۶A50}]Ubc\A>xw+aHgdئk:_tdD~iLL6h8sNNJ49*L{cMc!CLb}B 0S0o r\7P ($qPt>3tJ'hZ7Mo5lKVAG^z8"AK2 +$ H2Q%A_8|[u ۇ }@ P * +†U%,uo|Mm߾BsޣIA7+U u s +endstream endobj 3696 0 obj<> endobj 3697 0 obj<> endobj 3698 0 obj<> endobj 3699 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3700 0 obj<>stream +I@ʸՕ!FDB/ /Gב}&:U3/2~))U(@HˤJ\:y.Vfr{E&vʓg$El&gGQUJ7Q|ImyT Cl&_cQHK-E2 +;bXS\ߧŒоSb]na:]ᛑШk6ѹ`O\g!UͫH?'z%(}GW2v8e[| +[2υ=ni183dF/zGIΪ\8I}sSÙ4e6J}MKPmL__Ue,1ž!pU2"AG5J' +Fw1GCٵ 9Xr|oҾ "BMl'U aKAMn{2# X +&CPMdKpM7KR + ѩclߠlJR ,w:_oަki-V OskB{ dsbx][!"`HD/-<{2S+qP2\];UJ5%;xDJ(Lߚ +%otkn$V9Y9ƤU@INP`5D;@ v_vڊt= 4}jH)5,^e}]}4*YEu oEL"1W(4#~22ܜ2-AU_RREa3Md-3⭀ꭨ$,;l4yf^c"ffx6&\ Ug1g2c{xt߭[N}Y`0`a$L:ĵ٠ ]gHI +/+VkXU|5Ϊ?@`;OCo}[>RO| J w(~ rk찞 +endstream endobj 3701 0 obj<> endobj 3702 0 obj<> endobj 3703 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3704 0 obj<>stream +up1=A"gD3R{ ΄klɍMU/?E^X1bNϷΏShUQѿn.{S/ؘ~k0v zcf+)X!|?ؤE VU;.^S#VK^LDfc4w6JZ(tɺ=_.LD/d5pca!WKTk +3؊L;3e4:G*htC^%z(W`]~^W$x+Hc),(IlyZߟn$@n{컓W{۱C[>7d/[hֵՁtc QF'P;٤9@GYT e\tt=͇^iilŔ)Í=0аf'XWTQ6?AZÈG.> endobj 3706 0 obj<> endobj 3707 0 obj<> endobj 3708 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3709 0 obj<>stream +L +`<%oy_bZp2A:ř Sij& _R/RSo-\sQ)uճrC2yC߁n8Vg}ԦȒ{ CYgir +9Ï/f9~aZ;Ry`boN=E]Rfd"P zo-F>b9M2JP'WY?{p$I}4oOg/j˖Q70P##M5μko)j`BY;SVmEnox\Gv M*֜pr.zulYY +ibrCY:&JkR)NcuNZFOAw{uL~P7,%7&s_1)զ$g?#>S47l‹E-};im%To& j6' v.yCa"N%ӊF^ ;]1$MHi"BL6}2GS>ICY@q`]8t4.H\fV]cW* fΓJٚWG:J`>]6F'įysaZ 5gj0Q fx1'ne46p 4BXpLqzAv cVFR.wS_ +endstream endobj 3710 0 obj<> endobj 3711 0 obj<> endobj 3712 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3713 0 obj<>stream +P9}y*3ϲv&+yZ $ ]v[( k8(R8*pe΃ MvT4rXE[>E&@#[VMӜ0^TƷzFW:ν?~1*dNY;#X#GPkނ_.;BgeINP& T#M<ñ| p] ||1pi]c^Siy,gz*rҸe]In90vWH0E&"2xz) ԚN󒟼39EHGMk_,jE:_#+qغ+8xIJ&C85g[xoKrX!y>V@stQF!tkϣTeVgInJ ++v(%į~ZEG{$Aywkl!J `Y?VR`}>j+L.ZoͯqyH˙ȧV5Q)­E.PI%$>yX@&4zo-nga^ M>P:f|u*m $lQU_ c'y4YHY HW|> endobj 3715 0 obj<> endobj 3716 0 obj<> endobj 3717 0 obj<> endobj 3718 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3719 0 obj<>stream +<9c Hll7 !&(#~gh4RϽӌ0) + V [ro֪5lԋ@mwہqBW_u&Tk'ݚc^Ur6a"T>y'cmc.GaPxq %][3%Z`y7v׺ joI `DK"*p*CAȾKnp=@608RN|p%G}ehV?m ~RIDa1Dޛ|o u~ + ד_?Mw۬P:u7ꢉA9-]`2W0gkB*&*Wm+M5Jp3xCP4#IFwMn.w\tmv; ŹPxWfh +eliEޭ 2D(^6[3ONw*|DϴٱL8 9/yiZ6Tx(i[(^. +endstream endobj 3720 0 obj<> endobj 3721 0 obj<> endobj 3722 0 obj<> endobj 3723 0 obj<> endobj 3724 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3725 0 obj<>stream +#(_ˣCU#UCu`Ղ5¢[f#nTlg^~a7&[sQzg|`'C5G)f)$tTҐ72TurC O%IҘ.] ۏ? +.˨!G]ycg[,>L0ao2ׄ}8Ԩa<\'V]o#fE+=!?\`}6Qd8%IܫyUVdP0Mwh2F8^+72i8uui]E]D6M`q rĨƋ!>B%w?ϖxE +o'H{Ť(-ђn VundLt8g>uFo`ִP':'_tL`N}H(M#,Dą'^4!S>&ia@z9h/m$`O$ٌ20*ML-3@/:Z5V +4nL2,h"T"[{|&{ oeZ` aUsA6a_2g:>X.Iz:<#07+U⬞iM3 O+IlYC~K;mp"&(7C5(con +ލ̻^/aūgtZ]q:L8(M%LӜ̥-W"&G4Log Ӌ gHc~oL +Y 'z 7Ϥ#LR6>x[Ou)Ȱ[g–@F1B>rT,qWbH5-K}`vkg uDg.xx{9DUN36%EU'x&\b]Nׅ +endstream endobj 3726 0 obj<> endobj 3727 0 obj<> endobj 3728 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3729 0 obj<>stream +};c8 + =nVWO'By*kC͊6V:5OQqXc6]īM=Go!14kZ.9GB JC4.DiP?uW-"J6x ,@dCX3cF4G{)ؼm΄O +}A +HrZ8 W ؽfFH^ԩ\e͒h/C ׎,NXviw=iX+Td IrN&1/_Lȡ͝<4pm&HӸ (ZtNF:o/|g d / {^]hP(!{3K>=bQ&UT%؈BfiD܇@r"b .#£|+s "S-ϚRȟK2sfwş+i0] 2O0ą)Ÿ~%orJ]8 >Hf +7?M2|y'辥63(_sKW/N_fQPIoNh@l{T]-С72l:nӴ7xXE%D&*C4SqdVҘۍp#9u>;6"[[h$ѧXͦ2 C#z+Wrm`Hq@1]Si@}c{Leaa#]l${"&a팡6;;0}_mnpdww(>Ic] OYjDp6{aNdzJ/c~us%+c +ڈcrGӀ%68w.uXpY0eF/Yk;z Ȥ?D #K>b/%沍pұ*2ZګM.1g$Qв/EdK-y;Еo|f>E򳡥8j\tH8hsLjÙQ$L?ҲУR/7-r})JSqR7T?J*pRB'{^aZe-ö?.C3i"`=c| +endstream endobj 3730 0 obj<> endobj 3731 0 obj<> endobj 3732 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3733 0 obj<>stream + )@DlA4LѾx&0|- +K417S].~4Uf(uGW^_7.tKP8yZi IU8%ܱ8_c0k!u::+ҊX'W +2=moN)aЁQxuE͖3, i~r8Fp)@abEZ2M~;?WƊ+Md;H}un~ &ܔ5j5*6\ȁK:Rrm;[8lm˻r7s>Ia j- QY0e5_D=uF4xU඄@k%me:>K88cT:%bwqU#.U,h^|0 8 m06FX@ƅ?ұw=~)Lbk aq_<s҆4jɮr;2bSB_Ɇ%Rc=v6wV71Jf5,G:tǙ*2vv:PBKjڑ6F@#o T^P9`4C9`QB9pWφ\! Ug HLyj9&bVoPP +n|2ls(^A[,8kTMBa#b+ aՙi!7@f_߷¤(@S>S?{H]?yH F!^SoKJ͍^߉!je2 AR-#[YyW #j Ƚh^!TdԈ~Dh=+]f.Zq * ::< +@7'{*G]@ _ +endstream endobj 3734 0 obj<> endobj 3735 0 obj<> endobj 3736 0 obj<> endobj 3737 0 obj<> endobj 3738 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3739 0 obj<>stream +ԔGc R2XpݑG`P8.JR'S2u1㇥*5u%n(*{<<4Z(3_ Freù.c(f0QNѺ67M5{[FŸž24aQi%?5L4ρDvgC6+_BFcdlV UEr.bBXEfs h2hҩb?أp4Cԏn{3hg C$=3a֦#8 {_=1xJmާ#n, %׺#[7I12舮ILjjxcP ?V2Y-GVOE`ZYr8iv,\ Fx@~!$?G2p9JEF~NJVR mBHGslpa(Eg4}*̏ErnI8&Hc@aI Rh!bI6cfQPHQHT. ёVA +EOs@>-ZleҘ,JA(ۣ=!\קU7eیڮ춯2gEY^yfwbǤHj"^ܛsLuKI9n=uWH!ɗ O9L~sY +@Al +k0 F565=qW8IHj1ŖLUCZ#ّT娼l +%4n*G0ΖV +M -Y⽿/hF"fM*|COHm5}aq\ +endstream endobj 3740 0 obj<> endobj 3741 0 obj<> endobj 3742 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3743 0 obj<>stream +p UIRK; J5Se9JGTI&,u,(OWF XT y4[g2iߕo4pǺ]t +Y/poa6YƐ)a'*Bs(mm{.hz~~H4=TT +s|f何 Cf`އ l& O8wO{WݽhB`+G3C:4_BpB/X]?j|Dp[JW +#x'v3A|(Ύ%!"a-jyE_d2v Xٽ=y_|f)-f (=WJp%R5'gȖT6!?r^UJ~KjB@rgAFpƯi" !|^H@2sHfW[6y+H/>dhsNڣ5qdEk AƦF2;x(4MCaΝB)=њ}US0u?z! (4Ao雪r&\LNJ4R +DiEH~_;ר +zd[BSonہ{Tc~ $Eil> I5fU:A|X +Tvr!y +_Z<%P[nҺ^fվbUEt}03wF: #>[ +sv4]$H_NhqI0q$vd998Ǖmc-S#Q3ltY:|u0Jkɂl^2=Dfvwۋs˧]iWo̾Op, 0əo/~B é#}TDڌi˄_9ϺV4!BĮ[1!oA+}BO+AA@y&L~_HPRo 65Mb$br$BpPTn@EO`(>/sJ 1mį), +endstream endobj 3744 0 obj<> endobj 3745 0 obj<> endobj 3746 0 obj<> endobj 3747 0 obj<> endobj 3748 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3749 0 obj<>stream +>b7ln*4 m|.@eQCqEi-}]luJ%r: _EՌcP!>IszGX@ Kc}Y=9?N8Mw0i1l6v%w`d"Cx<&}`{X +:%\ mă| 8a=[6ŋ@!9pť +&,I) =4Mfy{'*?) ށ$[2ЍhI +CjZhM QF@Nr!0s%?a(k[Jt\Ka9f9zOنjrRJGHq儢b"lp4@^37Пhw5X&̲kl^]h̷1A<\;''/_ ARRX:Dͼwfɧ-~f6[~?iY9i pZxZP} &DdIpH{%nr6&쫔OVެ]fupqCqG +۷`ң(h~;{"n+0ϚdX̷R۳:LQËI*9'1|`ӳU,=UfwKƛ'mn Yk JC@OTx4Pah4qDsC1 tAt]sOKx|mQ!2jWވ7GmH +E[id+@ 䏷^bh9 aRŐ }A I] iTW ͛V+2"0aXdE/!5 iVP <϶_61 &a3KWȎ_}N Vg`lZoc3=͉=1\h5JN)~OcoCI&ZɼP߬WoET,2=DH'OwdHjUKrj]cA;ok6i<fޭu6Rn6Ńh1.y`bU|UQѿ寱߈=>`Y`|E4lUr em$ZL~*a(E#>qTD Ivh)^i~*n]yȋ +endstream endobj 3750 0 obj<> endobj 3751 0 obj<> endobj 3752 0 obj<> endobj 3753 0 obj<> endobj 3754 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3755 0 obj<>stream +)dwk-[!,ʁaWq>9ͧ1ߗ|ƞiҏMW!}@)cp94lΧF +ǿpڳgxZ𪏏M.02lj&ֆcQ?"Kq 䍶-x \>I6xNI؟}aL;"3wH;ߕgdDWQk#V򢰲@~oc7(.NT75kۜ4#|MVpi_޴i]KiJWAxrh`\'3u" Lg y4 +endstream endobj 3756 0 obj<> endobj 3757 0 obj<> endobj 3758 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3759 0 obj<>stream +л3Fo0AVZōdԨ{Xɑ1Y3Bparu`)ijC.yr>|]Pᘮ P8Δ!ǵ q͚ie3Rξ!c+w[fP[Lt>7;:z˻+'YU6܂ 5vb*Kqo(h??Ao/ȣQwD\m! +痕V(gd4#`>3Bl:b|y]9יC ߙ OWcR IaA?r Pjְa&c5$0e\q{]˾PXيOulYR*|ϵ:5 DUI<;M;D.;2ّ6H|Xu=B0$vhD6+H[=-Aֹ}a|h/ޚ)t"{ 7,7':ie̛txHlNO낙% +(Vʐ{l`P&̖'ApĨ"M6T$}ف;v +yyL\JBwiv3gsYO=T3Lv.uPJ"i,g1̭Z̦>)oa&uVr& :X!OG9Rϖb$ &LWPlƹ dg`"-E+BP%Y zKD?wYnJSU9j:F8.?'sFF5υD=~]> endobj 3761 0 obj<> endobj 3762 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3763 0 obj<>stream +p-9Kr=iX-@b6[+kdv +N)Ҽryghkx,ݟF3{sad7Aʂ*SaZ??wAwğ9xsS嬏iv|õ%-Lc_D9wEE_F&s\>P Pċ' \T; Y`~>-=c+K5 atЩnz8 wv>Pj龦$69"a#_oF˔ .+7:2J7"_ 9Zh.]э5ωn)R7]'q&n=DF12z^GQ%#TެL~kI$|栃8fP'%C|H~Фe?kWGLdX +endstream endobj 3764 0 obj<> endobj 3765 0 obj<> endobj 3766 0 obj<> endobj 3767 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3768 0 obj<>stream +.|q|Ɯo27UU{Ʀ`L2V]Bw.LB0l`hz Zt'}{p}S$'h6p1L9K>E)l@/0){=w6g)J"m'՞%bb.4) *u4ìR]dzN:} /m/j".ۮ E7K/ PTq!;n2cb5\4OczRKl?c#; _]W`•ryv+US]Rr<(;5|-w 촄?`v茏kapC{0;nʁ~zIMosGrTX{ uixr)qWq)n,ÏlE +S:a+:Gp +5OkJRd}7|$j5rvSZb%-TXAہ[uCW~Ҋ @ZD]kN# A4}s^ +endstream endobj 3769 0 obj<> endobj 3770 0 obj<> endobj 3771 0 obj<> endobj 3772 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3773 0 obj<>stream +(JruH +D`1pJ^$ *5&']40&% $.3虍DAΔ8w˟iNW @<"HTUyL}rM:UN*2\dE3/Vp`D<aw:P,q0/=?-rAFi!.+@WS!e 6ߟ,2;Dluӿ!ԚoP,{ie`=LZQ>2hlQ mџLnI ˋ LPqs11E0ag>fc zDuXx/T"Ii?ߍR5u}jwErD}MRY -)QX,~Yߋ\~ 㥄wD5&O?EvcÆ!U k}o,\cY AGvApEЉGjgd6$n3=Wl 2Qw+pS n7ϕ⨢ N]Hl'zh$G.{Lԕ[E(K;ZLP)P"1H/Rn{YiOM {i}PH7{nR(cKn7NFM4XĐ`XQVգz{{I+hk?#:{͜&jV4ڴE>R*r 4KR66oR GhIwa& +endstream endobj 3774 0 obj<> endobj 3775 0 obj<> endobj 3776 0 obj<> endobj 3777 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3778 0 obj<>stream +x^hOǦXitQObobPԊ/^#3+-rZqC`B<0=xkR9%2sxrl8"-vݓ T (BFA]& m6AoƄtvbJHyqKF~{ADYcXw3*]qVjd^nXPCMrl$뇧&Ϝ!Dj(vo_*2\Xe灲fn5rtz{y݊C>٩_",%P F2Ұtl&m"G|68YU2Y:t'q*y_^<_NP $j4'7\WMLsU5dgd?vx/CB} ʒSssRsLCDlk9RNb }%̕{ߚ/iUCbwJ}ϟ5EϠ:DjgW/ W!S?,f DW`Oy*E"y)Inx!ZF 1s8\"y^f0O"ꦍΈtFRp }GK%@%.e36ёDEx=BcRJpPi"ͮo$`13n gD,I:ДaCњ %%ԫ>^U4ۡFd#FF=D9n$tK8|xE.>dzLLVGK ;fbTV)Ȣ3A0q/=lz;9lrFuvf:^N{+7 L3QJHAd'0n2kcT6Ău Wz¯ +^qd+DF+E6Ƥ\<\2s$a:XW:Jo*XCУH؁`\.6whPy +endstream endobj 3779 0 obj<> endobj 3780 0 obj<> endobj 3781 0 obj<> endobj 3782 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3783 0 obj<>stream +{C]{P23LBס;tA̛{ѮYG2L.]&{QINcTR5S+0Ͱx؇ֵl +1X!#` W",}6b_Ÿw?b w*!Ӈ5Ĺofq] +- ~(TWrSN̫ _u +l"xa7\1bOtoWiĎuxmHԔf|q@bR%9]_E&IR.L9wVe1Ĵat*Om?(l)or/XN>4xlѝcbh`>+^sS\iv,ĖǍ +YIk1\Fy H2WlNI,xo&c76ƿ1 3lXK]of4CPB"(g +k`wDžbYH7a= MN}ܘ>G7UVWf)Ԯ05w/m+u.u`"Ps6K<h=9~LH$Fx$ @Q h^m٦1gÊf7#y<BO)bhVF(,3'<( 1G1w3.<PQMh-djR [Qd%Z=E#+"\upx2ο~BzCf/1҃!@N  ێ&u> kઙ<<[Rt"řSp$ڽyVlW<FEGr|4v9ä\ڿxbkܫ'*x Dн5rR,fw9}N-|T II$}@;Sw郄Q|Yo0(ma"w8ձ**@"D32E<53U@͚y +y)z82&|N{obH1{'XaSeUEpB!uiZ;)*&y8ouԔʑؘ$̞uI΀5D{z>Rj}"EzH|'T +endstream endobj 3784 0 obj<> endobj 3785 0 obj<> endobj 3786 0 obj<> endobj 3787 0 obj<> endobj 3788 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3789 0 obj<>stream +/LY0)#{`\D?ΠUA2o^؇B\UhNMh*UݸeSJf.5nt}u9#Bc4[C GE$uhN"s.J>{ Nl׈lȺ8꠵@vOUj3x0dJ\}âEaV\^vF?zh'>N?)5hH`d+HlgcO< gq5r4 S/wN[NeLeWj%&'>o$3$B~ܔؘ&~'n .*!ѣY[2:E`߷|Ɋ"aU3sji!)Vs 3,flv*))B,W#Z͸tQEQ̢r[GVt&8fK!lZROPJ%޺42 HDp` pˌ+?"!8*,t2 +sPh-Ow{̓/p |'^mȗ[[5տsZjq3'TuoiuI=ττWb 3R7A}&N{xP:W~Ll^Z}}k"YgJLE5Yo 4$_0\9=RU^RBS SmjH_~3B'=g}ΰӸQ +[:Mީ,\,G2H=4fXϐycr< |FS+/ڎhdM_iݥ௤#(?NɌ7(ٛnI$ƥm MX_\{OLC&OISnMr=2WudX0ʟ_BX>S}ht J[Vw#>@Cj +#UCdFF;vjWX +endstream endobj 3790 0 obj<> endobj 3791 0 obj<> endobj 3792 0 obj<> endobj 3793 0 obj<> endobj 3794 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3795 0 obj<>stream + +ع0U.io(#Sa2T|bV3$ 7Ga/W`jI񪥗*,(uAwo>bz; xNìiMM݋;l)~9"g&F +YYF'O?'װp< agW.2Cݻ{E))J'mBl`wǽR"YקXfj ͐Ȼp7<ǯ. Hœ<ɭ+wY!mTM`ծ6@6Ofd[ :nq_, m% +v3sN@>;BHZFajƌkBzWiѧ )%_ -qoa +v*HN;B'ѕD}1 Ptx)%RMYQ5? rY + ]o'ђPC-Wz$aA +ڜcg$+8Cy!4 +:=c°lNI2fЫ_a *__GL#-ApV+%yD:u5s /Bg$N>!RP \^PE[%wlˡ{S+¹cMJRӤ⋢[?zV42tJ>܊DZlm*{eԁVK:&s𖎀M1^Kb>BܾﳦY1,ҟ%|q-{O-K72N/s9x;]?l96⬨x(uBn?WQ⯖~vQM.#$0m|\NDQPbwo ]~y = <-Iʯ<ɌY͕%D i2n]*eCtp{fEgRg 4b=:"#1x`mge;xgF֟Bpf6TG8p9;X~H@uqlw|5[X9vӲS?L&ۜ)140xKJvG¬JUA`6@+nm(LF cDۛ 'tgݼAK]Ct9LϙzǿuAzF[JE!!by,f00tgQ +hxgwnH{(uȶ`ޟS&z*&\wc)_ z Hiв"DQd+V_Xw,tنAbmd &,:zUdž_ +וt?2 +(AW# +endstream endobj 3796 0 obj<> endobj 3797 0 obj<> endobj 3798 0 obj<> endobj 3799 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3800 0 obj<>stream +7{*?Cc nAhL;_ꂹVhl4@=4pR'~_oR>Z/JN-?b3g2N9.4ۊK(S.5-w?/98.Ag <\5H~L)$c"I v*zpNNZNj[4"szg:~6ɰ|ukW>#s$dJr3zj~[u+C;5obF,LpV,ܟ)C@:=9(lׂړlcƟx颇Mkj_":A!I(L9Sa1&^D̲Y +z\G +$ܓ0ԞKluYik*D:Xki׽\|"zb?- +Th9K!aSIF,TjAھHHy&}d5e7G)faY2=U eKaF6w}ONcQ6D4#Zv:]XHͣ9B7D-+;*u4rķFuâY"z;-E%Դ}[; if:L6gaPNAkP^uXC#}4HZBۭ0buN(mGeCC i1 t3hS|d_xN>2p_dXzf1\6p1_04 +=|]5E[ZKqTƷٶHX44aa_+ʈG^P$ "2܀QB=;K!J~P a!t;yJOJsnEsjATS|f>z>nI,k\PG&@xsoH2 H묃 `"H +<{9W ݌Vq/! 'l'&GLO>#鉩D +C:0jxpB^ $y>aI;O)>:k h|e D6Onn4z[C16IۥBߌ܉Q*K=c![0n&@"gG$c.!i>3N;6r˘ /í 1/ pB#Ϧrs AV`!]cj`-6z1; +a>f J V Ơ +8kN +endstream endobj 3801 0 obj<> endobj 3802 0 obj<> endobj 3803 0 obj<> endobj 3804 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3805 0 obj<>stream +۝OoHeI,;!;3KAVK”ʈ^Dl>~/8,w'ubDiqqM6NA*[g9~L'ſw%RFl \ְKoeuqA(Ie{l?.ic')bI%My3RKCqE>/hRb~S}lE8*_9}0T9|8AՋE'G0]9VmH4B[u-?NUX`Gc*s"J,5&o˜ϞHfWyՊ=<Vݫ,=%5(QXsޱ+&C~'al2şkb[*Sr iҟ;Y 'AS2;*nc.E UZf豚Nfw^vZcRprG*_\̉պgb 7'+0>"V]?6CP {0L8F{9O΀-w +GvJpkGRfcoiێaDHsEy<]]p8mCcF= ٛ^ȿH4z U~3 d"\?Ӊfh(\j:A`zpy؈^# )fQ+(NG}1!+DHl^P"NssG݃igAwݟiL!><۵>@ICNkN=}PRnue;9Ʉv$i<;"> endobj 3807 0 obj<> endobj 3808 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3809 0 obj<>stream +hTTMQbUN퓩>TE<xΐױn'}oIaxN[ggxߠdf3ЯT{_ R g ;]{ 9yxx%V~s'ū0kqq“m Uc6 + rDAXWOD%MEr6Q5pL ;{oG Qo?|Hln%!"TS_6"-D"0b DI*O@7<gspNT{j~E 7ܺ ~vL8B>іkf`S5.pDQX4)p<߼vN0e6J[jRq : Qld*QW(`cy|Z_ +WmΛl5R,| Ihs£ l,O !%+ʰ=@ 6,jJU"PÄl&2Q;؀OOJ5Y̝Mu5&>&,K(z~p}/OϺhya<%O藫w)ˇm۝LhkVE$ Ơ]G}ݗpyEB'HBOw[F†%0 )Hڋep6hQSseÓ) 7py$v/PaV_IWX~@wS +R=H]ɸp w*Z"%MQ5~, F ]'L)#)a ¿uBO HH<9{!NTVw8,/2W+G _I  +8GjsMZC=>Ɗ+٦)L`vXܗ'ޫXݤb7Blk\q;!#DarcH_))Eo8+x#Lҭj 8$'=лW衄zWG|g޽3v,y=e7Jjdb I= i9{^^^,rޢjfhUx%C)ХX Ur@w6ߏ7ËQ &7y:?Лk(6dQaiRߢ9#_ +D: +endstream endobj 3810 0 obj<> endobj 3811 0 obj<> endobj 3812 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3813 0 obj<>stream +H+"n=aCIP޾e_*DJ hΰ^Hbjr ꘨d ll_:hZ"[LHurV.mVmWJw!ԭFNpZbڌ8BIO_zj%2uy+'B۾jGP]qbu]c,$ʨbeAHr* lm݋d2Po2aAs8%s!u(¸dQ  gijXI\E[lFK Fu;/kHS` >oD&(gJko+:^u! v;Kp +*[aJ[9ҡcG# +cZ`QA2rC/*F•"$ s8,=K +O9Nty(Q#D-]ݸ  WUCN3蹳/ɽ";n0ꢰ1"G09^,?YKB#z!+ڪZk~as>pb:@2Pm$RI z)W >AR!XLȁ|!9ϛ BWBp (gy+rGJ޹C9#x-FqcKr n.g= |% a:J^Ha1:oV EaBS{sk9S+ZpCbU*o&ۣnJfb@d. mӱCrG^R:Tjy%v=OLHzpJFWq|Av<0*5\h-iL}_EǹkbAXYbL/^8d>לk +mwuo,ТPRr^::ByC94K4V +endstream endobj 3814 0 obj<> endobj 3815 0 obj<> endobj 3816 0 obj<> endobj 3817 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3818 0 obj<>stream +Ҫ1& áܻquwD1QQ䛪&bB)嗋m8e \LA`u.ItlBϨns"nKc3`i(K0bȖ,haŶֱ_ +w⍪%d+kQLꗔ@ОYG5h 6tK>p|ms6!2j3Ֆ#3*?#1#f%|ɒA Og@DL}fcőtLRzы9Ajr.wTE]Tە>8&; kC'ѵz 6)-IlJg/xZF=x"H(V%(ؘs ZS=ckn f-ܠ;u!&+j%BP,gZguKgqy M|i2{ή$vpO?mai2t#'EY քJ3Hp:b7$\0ݴaf_Fdzv⸳&3tRCgt$@XR &RcꛋQA@I?Mc% ׸pq Bc6M+:﫝AxAsol +d*3+a+1/noWߙP;̥@\F3+/(n{RB04p(p3JzH6~oDn> endobj 3820 0 obj<> endobj 3821 0 obj<> endobj 3822 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3823 0 obj<>stream +a7)p7,~:J?03'}w 8qZ뾁4T."×J(_ U|!^3xp 6f=hg. ݹF@5s1|ݿmNVixow-),'*++yzՍИKK2ie9]%:{{- ٶAA{ԘfgRH\J0 ݑO=mg4;B,l`Or9Ηv@xFNfr߾fW_$7e۪B,U{K{U3}`L6uOR ?ӟ 8Q * `znʽBdˣN~]*6o`?ѡB{ipDm K1}N /ÒՅ5` D8Aa.^g!NU1^vE'fxDB-y`!xiN9RޗFETOZS\9~k- %>z_I5H&YEKe 4mGdl!M^g9Pp-oFw9s@\Jw}Ts &aSa~y _RL"CM\4O+V+'b\>{xY "wldN!Q'ZͰ';N#D2@U4Sy属АO6fHaǰ, +> endobj 3825 0 obj<> endobj 3826 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3827 0 obj<>stream +GXn"r٪SzK3ʻ Zʼny<~gQW,fl01d &@~nr@9 y].|7[>5x?S:Y&%qxx>rgQp',V,\Rl5}@IH.=,v MXt L_Yeљ*G|8CME@,Gw}v#4YhgRZ+*S27b +{~@;v]m]Sˊ+ +s 4$e.:sGbyq9vJMi)xtgH=;):e\G6Iaidr~nEbf>k!h9~d= +Dh9ӥiCnrRؓ,LHҔH|5bw{~[gnpW`~3WԅF ,e\iY<U(D:3S_Kz88Neqm-Qk}g @͏ ^IQDz6}DWRahv-#8%SOb~p! l. {dݭ0?@I`t ;j1]zjux[&tڌĮ;~3UXBI_o"d$PSWmȂ['v( *.l@,S6 O y2k3yo҂`]Jw|w(U>pI%C*bV p˾8.+$)P/>1+-\IRLJv qsBH\JdJ|^d15b7>x1(ڶ e4 +¯LH;g1ǵ9)G.Q.4 +endstream endobj 3828 0 obj<> endobj 3829 0 obj<> endobj 3830 0 obj<> endobj 3831 0 obj<> endobj 3832 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3833 0 obj<>stream +' +h!z;0 G>1T@}FK԰lB,> "[m.w#;׽ RhzxSK1PTko6wKC1e8E0F cbB3L>%R[ǀa[)?"[ܑq&yVEY4y; 4UK*R1c:}Ӽafa {O00[`7e>l;ǬBwBVY3=$}G>&lMOxfi”qsRDodD!$6!1# w^teގ3d&й򒫊rny/|puzؖEHTGpL}h sסUr) +1'0E-͡I.ow<`Ьҝ*XYLes+Lۉ_s;&d& ] }TqA]Uojʒ Uci.M#e ~, +g Lw"(MOY f DjVI?{ Br E`C:VK6A+I +/}jw!&-_oF@ o|4jt5oχ>[qfPV݄\[.a!2(4h1՟$d/m5#0olQ`$٤ߘ$RW>'Lj*lR.O]Wf<6N9=1+7~LF7z{]G IQ37WAxVH;G_Q9cyδ-.Enjm/鉃>&{2dJ>jNBL^VǕ'>!+se/5xU-5!%fd{tjK>uq WO\l ˬT>n"w/+v9ω䵆KE;Gg0[q .>t.6 +endstream endobj 3834 0 obj<> endobj 3835 0 obj<> endobj 3836 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3837 0 obj<>stream +P +4t^AUF2X6NQzG(lVWxd7$9HcGJox?bG^&߂N«MA6j³@r~LKڮ'{L9M}0Ot[aVkS3K T?0rPuaV>|)+*,r#5";"bmx Z`+Fyt Ur!H꧴S^".N}$"ܐɆ|Xِ=to2v?gcErA1U?dnPy%wQH4(o鉓RH˩M+.M59|3=8e^C@i.Fh03tjWk79tb0OM $XHnHI>W]4](d9d^@ S؏m,eoaZ6$(<+F>FAcGU]NVeڤJ* @ ٲ,fl]BmM(eB `e:x-bڱ^/48v +`^BF$E3K +dwmposhzZuViG@΂9gk8&"nx'dBHߙ'zL5L'ʫ #uOxmJmn +c n܈@Îgo/!d}k/Y2r[^ظT8hcxC%@H_!$2[GM\!@N~CG(˕FQ/ϫQ8> endobj 3839 0 obj<> endobj 3840 0 obj<> endobj 3841 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3842 0 obj<>stream +Ydr?(8%!nI-"[+@sWfYQ_oEC,0Y-M?THG +j_![+P1}e&Gy.:޼`Ki$+8ӸF+h sxuo& L#"Nhßkkoyxcdao]u1-@vx˗ 6idpHZ [*݋+Yw%$g:VKSS/Xⴋ\nߜ2ΣT@2M vתּ\^ۡV3Ibj7I!bџv ,ΜY}c@Y$kG/%%Va=:8i-PQT3u/Ӓ֫s2GMZcit[3db_d* +!٦r~z݁8V%"-M>Y oM:%LtEpÉmR䓒Z&3{C,zs$\`67|Uǀ; ^x+ R-B'iqTH9 (X\$xo]oa#_W%2eN7F! 1}k9"ClF!O߂=V7o߉6UuN&O(`{#Lmɨj+VU-iTC4iURhzn9^畖W*;n<E.{F(+_NͶ)/2"Dg魢cb{/rKAЏ{br}>^΋[͖ xP~n=zxF9Vno$f&D!RL)> endobj 3844 0 obj<> endobj 3845 0 obj<> endobj 3846 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3847 0 obj<>stream +]?`s?9ʊ1j`CЦ_{4/WL^}0\ U^pU|/+\b]{h*B,aiSFko?dӴXAH@wU%l{y)cEA2غ+ RQXgh:ތeqJ<\Xq"y3ά_x[lHFZXL ٦by? +Vj6~{'swP[_g +O8~kf:; |#:E&>$@ӝ{E1@F1)᥻1A-zW#V8l}N!W*pzeC/#Yq²LZ՜$]ˆ8yFZMYriR;!wgncbۉ!F 0} +,7vF:1?:v*$`>EA.k҇)@:9Be@8>J%R"+G3MtCyU1S'H$޽bMu+,"l +>"0'R̸vR__>læ?U9]HVSR~>8dW;YWȺZ`K lFAd#\g<'B^N҂kV ;9X#+D6q;DNk3*MY0$R#e3H[[ r-:['ܴ-* .bt7 kf+`xwɍ>jkC!۵ԫėR uN'EbL.mnnF˜oI#! ^V^+G6 k?*r&۲z^xZP9jC&i]vnUz x@rͯ +'9,PM]]r.sޕh.QH _$_N1('6? y7v`%6Z?aw{# j^[Yϵz6H#xem\f>dC +}W$T1\0tOL} +endstream endobj 3848 0 obj<> endobj 3849 0 obj<> endobj 3850 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3851 0 obj<>stream +X!b{78t%`bSYO;;F +-8%3ʋ{}N4f2LoXvv1N@7<}v,]e%L}Ye g&9+bvD~9[rXw?qX`ͬ@7j-2#ܑS$3%-$-W@8RˠDž}TPxp}<| i ]`fa4M[Ih i)UҾnc|$DK}SM4gWDQ6@š_1qHs~%ܲh3T=r7+1Qˣq{0n/a}:Cڔ] +z!l05HQt 7zJ|+}@ѣ$ +Dpm)v@45FþAbHm%@ vE:Uze>C:}SW(H['(E1PHמ[ްot崈xuO͋6s8"9,ZB?K&Z'V:\ c[Nar(Ar%qĄ +O>osE(ܐXJ؉bo)~ly4muh +]դ/=Sx3y8_AO;gh{! /߮?|hűT{%ؾJd7$`gNzL.'s \@yvcZAdMSoDQR^?̹N}+G"% t0@a$|&n +endstream endobj 3852 0 obj<> endobj 3853 0 obj<> endobj 3854 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3855 0 obj<>stream +4FΦ%'`JF%%ۺ+}-)ʆi2ŧ3Ĵ#*1˥Jj)kqP@W@1hL'!+Nv$HM7|Tx!Բ)=>To}HS[Wsve!1p"fĖ)4#*XynrGWYlG͆cYv]&dw*6Cc%]l]āP +J7'-WʿdKXu8k!Lq[ ]ߡ0Edl±Iː!`ho&7^hn:D3PXD /UBϐ)<q#93E]6=̕*_@\¼//:QNєlkؔ\;ϟ8+rVKG$ݻEx2F'wtܰv*]w +.6Dc0tUVM Ń1͡;9/(djH/|){aC0>Mק#vJ| +NO),je1'4jڻp$ .6L#HQ: y$ɘ|p7anֱH1;AǯU} JArC{f(<\E'Mc@;[2f]X^ fYסN-!0GX _]&R( f11hRw\{.G*RwΚ¶quX4Vٖ,L3)=C]Ƹǘت}iPv@nIR~& ˦s%$Pn.9R^?3g~gSQImTOer/rG@6];@g!ۤ[$n))<׼zql3ןPJtpy ˤ +08 + ۔q> endobj 3857 0 obj<> endobj 3858 0 obj<> endobj 3859 0 obj<> endobj 3860 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3861 0 obj<>stream +{x>2MPw:c8+kl'2isC{[su ă#hk._l8is33 -5i372jv0zA%Xd0R҉)L8g +^ i]#jE]iE ;ҹCl _oD? d+|4h5 fZ %*~-Z`L"dv1)mIp\jn( .'S/9RO-5&j}R6`X5BlخIđ;%QSCnc"28izJcf85yJsD $u,ZȪ! +endstream endobj 3862 0 obj<> endobj 3863 0 obj<> endobj 3864 0 obj<> endobj 3865 0 obj<> endobj 3866 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3867 0 obj<>stream + p>Br5`#9kw:Dw>F!YH3lZsk4LUvĞ#?!,O)4IYV{XL]")E=qʫG>Tu4 1 3iDAS8B mk7ļI+Zk ;vw4Nvv;Q8GUcq&2QM<d;ф|0pwzXvòxǕL<#㾀)ф}H*iL£ DB+4eJ{Olt?ieEYqd%߄ ⚠ Ɋ ()Y7!7{oBD/>Agk^PH/wsN5\؀):]7CT{ qgMw!#la +42R9}餛 H#m.UGQd: oǝ/% =[G 58i9OB*,VwBR`"j=h4ۀ6bNߩ5o1WcCCiB d$zI|IaX{;C퉻츊'oPtg)u^ݦ"|l&B%27*S="S>zXTd.,#ʐr>;NzMV)!vG*͈fF+k ƲbSV^. +ҷ8+W#m3 %%nEfj/s"H51ط\߂/##YW}a8P0d>%Wq\PTQFaFXW[5Z bdOeミ,{׏" `nz?^YFxٓM} )k5NXYKr݌۟mvr 鉥exh@yBpԵ8V*JD0WHe٥6LCqt>H:tBgAє'O2-K.KbEr'7Q}zޤYƜ} +/eGuVeS3h4\-ڳd{t + ïHv7ZEGlbp-r;#{Eә[b_ l:7/JngwRQvl| BrvÀ 09"}#}wvp:ʭ +tcPUGRAVz$Qv9^^GaшWi {EMb!_NsS&lõAPgO2w{u ,aPn;(d}[O&u!#NM|mwa4ӣ&C`G*=;-v3ȿz^ ,p,bɡ);mnWIA7p2h +r6/D y̩ةIۓWUC=BO9{qPkW{vףY/W3 +|c<܆,ܘ㺄8P787C>IgQҘ)RZp>BHSt3HYl(I81޲pLΰv?`?XUm +endstream endobj 3868 0 obj<> endobj 3869 0 obj<> endobj 3870 0 obj<> endobj 3871 0 obj<> endobj 3872 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3873 0 obj<>stream +'oGrǴAhud>SֈԁO{=|fM2YWx pK (t U#ms{Eggͽ拯;wy}>9MƂ(<0|au~z(A\h#0\Ù\4%+>ىⷀ(,U#;% e|)+cgB _|5X`e !RG:+>Y J2̂/ Y[H#<4xYjh^q~İ6頮dKK$c=~:2QIss + @Seծer!]>ge|;zriH*aq|4Ga76Py&mqN*H]|eT۽KSaֿU K~ĄEWP/fm6]j9 ֈǶbwP]wMT+ cݽ5 UmC{UDd06xU:%ǞNי&4Q<.Ǝ +xuWg6SsiiPV" R0ꝸIR Vce/_W%"s5Ό8oJ_Ȼ{X&5.mf ֏?#j d?J/-/Z$'PIhŰϊ&E'r53ѧLypWgء=_ i'k9*QB x=2nUYX,xRM5n!~ +1Nd&hcl#HN=QoBzTR-tONS?{eFRF**)K}*|\S-5 9328@,j<}zR S5ݭLmIGIo/W_%H?gax3qw&( f1Ef|+ܼ>eliPrpu,CŠ>> endobj 3875 0 obj<> endobj 3876 0 obj<> endobj 3877 0 obj<> endobj 3878 0 obj<> endobj 3879 0 obj<> endobj 3880 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3881 0 obj<>stream +w!^勣#TʟWh|n n˅.0:I Qdy"# Vu7#VE:sBvbٯo^3`9 nAUA$!ԞTdkpx[iV-"vfk$!gr7ςziݗ (Ca'{=x])zr7N-fӗ8*`q)T#et2$exJU'-gh1j#j7>/eS]9N甾)X;`FT<+UZ|r(? 2 o~SMKf(uvB4"͉c.k O&)dNZ^m$dm̐C1//\:\\ +C0ۅ#Z3p2!Yऀ#_`ި2<]5D{4WVvkR&lA +as:= +ZJ]|q<&om!y䀷擊ϢyV >*j6d5[^1|> endobj 3883 0 obj<> endobj 3884 0 obj<> endobj 3885 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3886 0 obj<>stream +chCVJw]?;Sp^@[8i?/1P#drUTv=?HoRuv#jò8G|-|0(P\<)`5ވM 7"h%H‑sO_<%OzjC]6\ڛ4V%%ؑOK*oqVtw_*w(C$*5+" +ZJ\Q;8sZÝvG| BZTh6z%4)v2~JF5 d,YT)?~H)3Tu6oijTEM'djvNv >FSU<%| + y(~MTh^G a(d΋#í .']ڝ5!;Z~b+ - D=F2EU|S,7no/m}ٺ?5^WB~b>ïeX2-%{f^ | ?چXq-Ʒxh>3ʪ]#j1U}Fpf8O/\5V;S=^ymok! Vpie%'khFd +uYBa0;N7,48,~53ӭ9!ec.C:a֘.0> endobj 3888 0 obj<> endobj 3889 0 obj<> endobj 3890 0 obj<> endobj 3891 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3892 0 obj<>stream +< G9(lV-cUP&cl\ĥ,$G=[\*kmJ߮s]1iZE-v\B*՗MZ~/:6[,yCN_* 2J86y)|S+O|Ώio%S(ivpq%-E갈c< nOݰbLl=Mw+_3K1 +bAD{NNwMB{HJYn3ZM;u!xLӼMSjgRE:S9["=lH}ưVhɴ@=ƭvL :8[PڪS 5Cc [ⱸꙔIF~\ݏIb?mpUW%1gh(f1}.@&/^ޢFr/cxҫ}rNaZ"ZLAȊLxVI*nڸDt( +f;'̚5,>IehEHԂKvYzTa/b0?{hFrh +l$Q4E%6\Z&m/mFR+ E3=,ĉTeC4&[P.w"orD\WDP|Z6r]?R.ug bJe>@HI+lք{+ +JUZn9ߒJy$r^i+UoHs/N;Y3n]#YY(ݻE0!Wq;{tU~l#p .9ݣmh@RahSvR-#&nY,eVyW0 os+?^ќΟHAā֠e&@zQz)=V^" /qG +>_KR{x xCl?&^t~c;Pp;.to wo4gNTԴ8֬A泍%H$0~:Mm,n ЏLOV|x %0%ʋ؃Wz@JVZ +͞[06R/ (ȠО<J0W"9 zdPO'"r`S^μI'Pӗr`7j4(%~"JJ~\e`ۆl!Bo*$RAD(SȊŊOk`y37!" "xzo^&Ԧ\ a%͐iNyU/ 5p|234B + oQv[PI +endstream endobj 3893 0 obj<> endobj 3894 0 obj<> endobj 3895 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3896 0 obj<>stream +d; D E. @}]sfᑧD2Qy4D_:<\2rF D3yqCHVAϓN~hDZ505s-81ΡӜQ"\V'FܖnN+:Xf~ \~ŘXU[j`94*g>K;Kq9àK;ثՃ&5iǖ.JjH2X%~_{3Q&.1"(DnvF QԈ[۟LAuיY2q]t'Y=zXm0JLq05?Ƀ4iffviւYu*?ػqi8!.*A:_9[#<(阇 $ELj #i + *9(?=A#۔vơڨ{MUD8dg"b;LE\.s"@U,cD[.Sŗ5^fD92BLuW*O8@%Ksȡ xSr'kcqP|38/t}g\ +t$]̠8^w$;}kг"Z>B#M#_c*a^k^5#bƚts@͢m +JU࿍eWVa`ǒ4`-L[C& .: +F1 Z6=C~_x<$Y'Ptd4Bk;\+X$VH{ȷC3.Zfw=(TOK݆]Vh 7ݦ20H#2y?5nJ[ :U6s5&pfDn%mqDKe! +endstream endobj 3897 0 obj<> endobj 3898 0 obj<> endobj 3899 0 obj<> endobj 3900 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3901 0 obj<>stream +QAeYZbn)au\hU .p]8%XQMRʖvf.|/5,"Sԓ$sVJ=tDV&11Z b}8hvWXۓr>B).0-1Ql'n!볚)˝@OXP֑F H 2uKrXHo 'J1^yzL.i+$ +zkղL "1? W gnW KWLrfcN9:%<@:NJ1d#֐^o`PNi#F 9- UDfٖZ +endstream endobj 3902 0 obj<> endobj 3903 0 obj<> endobj 3904 0 obj<> endobj 3905 0 obj<> endobj 3906 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3907 0 obj<>stream +BU/zPrRbD=\s{>k'SQ3;鯁)+bm3;,{#`b ̩t6C >n JI *I;mfyrX +̇|%=PZ'@u^@{9)3c$IMP&tQn\|wj w,AMh Cq y[HQ:N"1Z2WA*mՁ Bģ5Me0Fm>8F;tGHgcx~n;*ځ³ƸG#,އ8v]]ɴN#a.zGt+5MayBY%/ wȠ'`5&At?&v]Z;lƱ*)~3z~ۀy<@<4[biCg-Jt +x9Ƀ!~(#'Y䏹L|h$.}|èPZn qўe8y/6>E4޶#h0VHY1V(IQ"b!z +s XMZyRUT6TW@s+c1_ jIp DI\ ):d4Ð;:WX!X_Ʈb"McVIY*N)R{@IJF= G4c;W2MKuUݳi\AK-%Yc \ftC96sUEYhWv3 N6d4 d# JFk{댴8> endobj 3909 0 obj<> endobj 3910 0 obj<> endobj 3911 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3912 0 obj<>stream +Sxݓ5r}uk֧^czS0|.pqQV| >p&4f ۫܍V'RzD@׺Lq(1,^/A\9Jj.Y݋q#Yo^[~+N~LZpJeawTcմo0{CC2vaн4 KGӶT3]웢px#GIw%\)N#~$e| m׈V# %B5T(6L$\| +4:VF}PWf +cٵiF +ޗ+]Ӯgg]8>&~s;~1/W5T"@3Zq!%aJnRR22( K/v-jsqդtnA,7:ZvN9m0 FT+E2:T{.0 G`0C:Ǣd0Y3T !yF gx񫸨dNW2U=JOIa`ڤrC›fe( LgZrzi{p[xwf5}#kͿˆK@uLvo9&x ȭ).{@<SVOH}_*.k'XU 6ТLfBTyfh&VwZW40aXn(5*{!Qs;# W$xU^8 +jƢzcj9%;b0O6Eq-[haZO$^yH +ajLyUs~[:.D4mt+yl7LA`P$^Ok]^ni=]z95tY!@4cbNjrZ-YL'#] -O"|jBf1D8CRIHCX lj{XnkK}K`V0%A?)J͂Zc-:(q협azQY~V|^7 P]qRlbBXX+ւz5\Grm֑';l,}8J|Qr.PT& JX-wO7}`> J +endstream endobj 3913 0 obj<> endobj 3914 0 obj<> endobj 3915 0 obj<> endobj 3916 0 obj<> endobj 3917 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3918 0 obj<>stream +OԜ СQv*NP ,f)ګF:T?iezJ8djV:9^:\1FYT2;tE-oY(@?E3yp_\|wB_a1<خ?vl JBy3#| +iМ]* l9zkBi^jLGe8ns-'r.r?txě +_V̧XeB{`d +֔g`'ʠ[{' + yMIORwas &=`;jykl]fY[zmJ.QQ PW|N\xr];fo&*>~Μ1 $ZVlm9ǘjMުWI.'5v)8/-%'/xuO5v֬b*6?\ΏsH/4n*_T] vq%2 øNNԖ1AK]wja +6ı]Tx]q=E"W#[kq, H`z/kӉSY &x%՛o% z5l +wPP{ pX^krPKu66PV\tQz?)ٍ"2 ZȤi VA!KuLfi393ͷa\wJϋl7r5kТ:VDI=X }DWy*Ko0> endobj 3920 0 obj<> endobj 3921 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3922 0 obj<>stream +ݲܸK//![;Ӡ$s}oy&ָ%Ҿ&v)U$gE.W$L}r?t_ #4snD+IW-+EHJaݠhn, `02oIHObP<>-_VУZV%9^,mGt|u=ߒ~J +yN3aaa-UtHbU[[lQd3x=q,F=\[K֊Xw Fr|_T~ӎxyĂ =\s#SC 6Y|r~r.#glk:4]*s]/'c nM׃!\(b`SVSKg !F՞"~9}uur^cJI:;<F*MGĄng}v?@l,Q[^vDh6|&a fuZ#f|0u82Zթr!n*C<=GZ$>ݹaMg>N!y]~r$(P5J'ɆR-1B\YRyt9>DKK*M[HCՈx qxP㏎AJ7R'Q*Ѓ"wnOX*jr8ΝLD)pBJt?P,()9~8HG]C [#F2R|PIqhiȋJӗ)<+#n~?ğdx(/7|̄;h5QK|FG|&@ , qȎkH lQr,OaVa*\~%.YxSp7V6i)Z}ԗ:qm <(ϝxϸ5Gj|*JV1y[]6+8zѹkZVr5Y@ +s,q]UFCT +endstream endobj 3923 0 obj<> endobj 3924 0 obj<> endobj 3925 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3926 0 obj<>stream +(pč پ)ԋ|V{3Mk{^:E`EeGj $Q]D}װs&z'. 'EtЉgd^7yn:#>nZtCWRV!ɔIր}fĕvj+YxѦHYWaUŁy`}>뉊׬iLv? BzK@4S#RL*y2_VKyؖK/o)fu$R®q +aՒhB wViּnV q8#CuC CϚ' +nMBMG1P?Q˺8W5 ֣pO[{ov~aE)(!}|23ơhr$Hlk|*3YOvbz) tLa^Vp nTv))xC{j?}2;*Ung5qPA^N-Y=2!nlӄzC?wo/yǡ~й[ ȪB3Dgqi}r)wÈg>&(3̼\!k$&I;s4Toqcbv~đӥHyצP>a*ڙ՞n%8 (=R[X6v4dxf8T~&rU?ň".Q1$[;)/Q<8++"X>^^C`PۺGQMvu?BD@$ZuX)/{0ip.uonҵ}# +FoFxJ.9'4[ +2G.aD2ܳ[ĿA8mxUBKMCV xDj/A53?(yp4es0A۠e)L9QYhqe`s)ubVqIыOϸ=.q/Y<O~)wMwp&_i9 N>刱oM)Z`P$#E\_z X?a--6 ecEyY@r*4th;49o)o_( +endstream endobj 3927 0 obj<> endobj 3928 0 obj<> endobj 3929 0 obj<> endobj 3930 0 obj<> endobj 3931 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3932 0 obj<>stream +Iy.A@I9 w} Z',,lzYr $c0~ ?{V9+֢'K,q'߅~pmD&K.tߦlw\- /^}VH\)=)7;@^-z,N}n,X\F‰arߦpκهq(BiClUHH pQA7b͹D*Ĥ +LwǣjJ;% 3d@sbW3T[%lG9ĝCȌyPO%({T`++@ql֥/-E©dV4`!d_1::ri(#Nꫭ}SU/u q\7 MikKKΒjF}8³lm;6SAdw(n۔q'؏y+= í +X(ja3 ?2/l5df"1!'xEn-[x$cXm+7d,H"W\$)~FJ0' {C~X0yƟH L.LSB_g`gt5ºhpG~Ƙg-<Cq./7KZ6T`.ԩ7u MMs5(`>gh<$xJZ`Oh} @GjaE)cOd75 !A݋Xԃ8cZoα5ynx]76r;i!_-x2*܋"W16i:{.](&r'9|[Ο1NiǛȟ] GLذ8@\,׸hiGVs&~VncQS׃ɁCFS㦪ƜcY' +,gh.O 2UFwh__Z.'=cɴ$9R`L ^f橮 +lXx;>N?RށS&feAYO ntṈlO|RQ(v{kS o<KP(K*m%]Zi喓V 0"r@:d@e[wn^CCИI)MFTUz|(:TFda<}A0)NwWc" NܫҮwc@8|Ֆ$IzVaJjڣ$\O|W]u /[}MA0kPn t|6O*pٯ}`H%KTg}K7 W/~+W\hpY__wY:8nׅw9'E V+MTfT. C8$Z} v/)zlU,nj=֥Ymŷ P3Xs_n6ۡ:^Hl +endstream endobj 3933 0 obj<> endobj 3934 0 obj<> endobj 3935 0 obj<> endobj 3936 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3937 0 obj<>stream +jyvrrA*5Oz^Շ6t<4rrKĀ1urqnY$> +%VBX. 4f2hKe'I:F 8f .BF_ RcM Ii"K;6P9xz=vσ+F ZVjQ7vQ +B/4ZVLmabUF³yQV?-4'W.};YWP D[)8~'U{X5ځEEHm! xF !!9g4OnUB޳ҩ)r(uU>vX7ܛ %8Kr?@ bA;ޚ6&^Ĉw.nz7'lN n?d+fLhb׮ p +o^n %UY<ع_>m>3̩|a bmaDžFe#@ヌ"Vu8~ B/ +9@j8P型#tzU̴Xk*ICZMG"o>X#ƻ8:W)ڰcEkc贉-nwҴ{ݚiq,LQx黟j/-qX(Q%DZ tkHy09;!v?g` d)(@ +S% + tғnc}:9&uQ@_KEygD+%0jkMiRGqrjӓj(>0UiqezL$w5Jl(P f?5eN4Ͻ(gљ@2RʕZ:'״ +{l:݁Yp TXbUMTx%:ӗ?iOtc(ڛTt[O.dO?^GqPn|YD6fԪqg|MUI~ z +endstream endobj 3938 0 obj<> endobj 3939 0 obj<> endobj 3940 0 obj<> endobj 3941 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3942 0 obj<>stream +8V,!]J + VQRbWSZ#*a]ட3*4_kp7u%5NsyQqkd.H9 XF48rt%Nxm\,Dsb(st;4QcvM?:h\m @'FX$)Pހ7I[7WA@ؖD4ZxYL <|y4HΜGa87[7h^mmY+WR'bu|>8?w$sO[wU\)GsQ,L btO7`S =mRx`5[fF`0_Wh=A_"g)Ε)yzhs"ьJ4Vg2 +sO[U$7Bc=O*}}^oBSAMp.RJu%[3ry<:l@+kh빏1ahO^;>D*F&MY8T +1OgG(ON|JuР 5hɩ̷ صolڮ(_]*$ qӨktEѤbe +<W wyњ-,egS^ Pq$DS;q!d)].lڣ8OeXf8Zv7<D=""iRs{Nɱx_+c@}:bd@~7ִj_JxG0&^]&c X_ ZcRM"N0_.Y©NO[n1H~l>a3_uv!c퓭wrֲPAXYC)_=ZN9ͯ[ye +8_=ސHSx#` }$F&T?UUzmiSP/Ȉ?x*`=C[h/]^UvQPqD|/aY R]&S@35EuX) 1ͻQX"u&/6nOҍF.Uu +e>^'f99|Pu`iB+8O\еA;܅(&=[z[' ZQB~VUGN45ᯝphc)U@+=3g&$ +endstream endobj 3943 0 obj<> endobj 3944 0 obj<> endobj 3945 0 obj<> endobj 3946 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3947 0 obj<>stream +rH ra'Ҝ3v<*~)OsQRrOg6B1*nvSV,I,hZqH&iy68GyРZl[Z.op'ǘܻ߻Yb\8xê`I11 ګd`ڲ9 YH`H[f2GWstA$T7͍ ǁ=mnGўY`Thz>ed;CLƼqk`=tJ)n4Tt'CuQ&m `{8CfQۢPD.MG)EMQ0ek-xtPxm`9mh?g;[^? +v/Z$13z+X$ +5ӣ5SJJ ɨM2Eu]޷1jJCz#tz+ la(t:͵a0!2UdD٬ddxalDYJ\cŀ?1O8W:^uLG ChTϡړūq3R{#I9E/B[F'x5ҫb[)/NuG e)-ܛz|Iư#tpHE\O+o~>\B5cӡh-6KS+_^-aΦؒRsq4ݗF~Y!ECt#\rZ](nnߑnXp ݝEg +x`ke*4x&LêqrJE96hZ{d!ZO4%CT>R][$]1&2] }jVv]Ɩ} +LR X:&y5F up 3݁O=}"g0NfaRvɽ/:(<$B{nJZv.D2`d+yZO'LROAN +e xXyf:j!4xeY WXeΥŘyAE4tQAa*&OI#8h$[`#[urѡA(.Pl<;)jl̃/wJ,)K6{CgH:H]:g;RPX$7Sޘy^" +B-6ǝ>3;A?=q`bpE];a+yݜ/vތfr@Gᯭc> endobj 3949 0 obj<> endobj 3950 0 obj<> endobj 3951 0 obj<> endobj 3952 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3953 0 obj<>stream +B胩#k ++7S'. `u]G !XTWF<>ȑ,\n#ja^R Wuqz aD -gFOUL5&HKϬkP)nnqSK)V +EpaLf*B$kk'/! ȇ,XՁ8r4bmlE@.!o &Ix|c|F# &Pػr_#jpZp<`nYF[ˆ0n +>, wR㹤rRMAFշYfDP:^G!=a(y_OǸ}JAANGO"1qS7(4UvM𹏫s]@īDH%J[g|J~->e0,N0J.Z,U%w2P!q|PQ~II:̅:׵ jZ) PԪ}R_YVq pl! +?=n_[aIWWz^UBWϤ6)ٳRI#Z>=>?n$`2Y- @6rV C-"T3]%;+$@x +u1VML +l/AuZG؈=b0H"z̀jI0^Ķt~vKj>)r|;OhXe]S0YoqVlϽ=!}4<й׌(J:*%[?ًyd{@ݺ@yR>V.Y&"ܼr3+Pd}Qy.8H},ǛW'?Bb`M c/X?m%M4vr'&wrEd܇jS$mOfyF,&0v\:0X$q[W%>bp!:w-U!Aɘeе'O?yCКJ D>~MYZQw{1t1{ ʐ)M/#>-xnL-A +Ovx8^Q\P-g*ay3EhK^SƝ)r x!߾i + k[+&,Њ P*w0X uks|R.Ldimbp6eɒ_ j9GHVPBy/CfrlՆa`^zz^ #mO-@ LJ`䦻FUKj }5kkn%TQCM< ⇱+Ƥɮo蓈 $Pry.0D6) Q t{O$h2[<)Pz%HldF3WXoq~_[vŭ6׎]8߮\/"* +endstream endobj 3954 0 obj<> endobj 3955 0 obj<> endobj 3956 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3957 0 obj<>stream +QIKdA 2 ؏([=m PN72 IUYڢXx 7Oֳٵ? Ob{#x +7CJ4'=I YuR +n I8P '*4m…%.UL5ge.ӊfdhlmub¨-!a*=]?C26[ +TeNn&ǏBp.Y`Uskkd(V&Kd ҡYk;Pc_oYEImIaZx5+5^ĩy4%T{bB bKn5QIQgeb98HE$S_j ^?ĪSPҞJ.}czpp@%0ZH}qWgs#9_JuW5~8Jgc0n$D@\1on~\N[7.%>Jֆ?y +P4 J?i``oG^r NHj-L<&g]߯Yڸh)+gȢaӬ +\}m![s;1lJEe! r^kQF欷M>3xcrJ8+T57TkfaW$3cPcEeF| }~6R pCGd ]?+~[11˃هaAO!wV̪2 +ai2])fyjATc2RURig +ڋ"7gϨ}F^4#?> endobj 3959 0 obj<> endobj 3960 0 obj<> endobj 3961 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3962 0 obj<>stream +w^bV8 `MA+|!JY{5 C<.^Ǝ1;1FM3\m^(ejx{/|ݢE])(=,6uV2n}aZ Sk+)HH +.CJ{pb#$*Քp"9͟ +O{9B.zbYi yΗ]dw`TZ1WV$Y824&ZqJ "HHREce Di^ˆf#[}6+C3Q׋J픸5z١䖌1@>(y*s|D{j@C-ЁsZk[ CS#2O+ظcJ|ZB5emBcwCR(HQ0&~iiQ&t;JGaTu^-!70*{AA3ɬsHp83 +endstream endobj 3963 0 obj<> endobj 3964 0 obj<> endobj 3965 0 obj<> endobj 3966 0 obj<> endobj 3967 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3968 0 obj<>stream + 8BL*]@;zn2&VHB{zL6\p4^?ɾrzzq/n$<1tz8+8YMkI2NWRNh ui3%`q_?[!S,HINbeo4;iu;>quаQ)u 2 q" jc/\/g6ZRs9U5hj<[2H4],+2C{ٞ)C[$f.CʮE-K7]e~T^2+C3GCvV #Et5ij cD*c=Tp|8IfAA&?E.?'Y0Bpk'OmxpaT$f|k1bHG)`Qu~khKG_Z]ӆ&[T8 f5$bHVoE?Lb7snD+.`!!x~ P ; +$椐5Q#zÓ_-KcZvٲb{da3R%~ Rԛۭ5DoRMvJo.*=y2qa ڦfgQF$PiHiGiqO¼M#=VW l;gMCzŚM%oA=NǍ܋&t$# z)-E[}Q0r{QU0}zxq~{ !RAJq6.7J;/LWװBɵNl^^ OW)&t=Dڲx3EWA#Y#EuY=E#BzRgj 23}H]ٕA!$wx_4CFd޻'l'`U*TU pَRҲSG..Q`}kPkӽcUdAI5ҝ7BZ/uYC"A^h\86S v<~:އAN:б=x޵xխ߽.W8DBRB9y? A}]EntE*V`A.mǖ2^jhhbUC3?E<4. +endstream endobj 3969 0 obj<> endobj 3970 0 obj<> endobj 3971 0 obj<> endobj 3972 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3973 0 obj<>stream +EA>4hY +WV'Qb4'D|`?}p.ۖ?hܥ}#m/c}>0/\`crJT#T5BWb{pv)V&GBh3*E7)-hs Y6B~B'8#Y9=PC=b#1E?ƴzrjeqdP9.f_݂!HAG)3(մ$m4WJ:1hH'C8; ot \Yᐋ +U^^0 QjSBTV +xvMiMȅF\rh;0Gv HxOb.۳\E ++j6cU9%eP + +g~C"199&uAu"+P8qz +a(ܨ+',}~ =XnJ9S*?m|Ka]<;Q5Ȃ&jT.Ax^KTSim*Klk,qO7v*'~ſRtnUԉL2 ~`pox}cia Cʻy4G aSkdoQi>ÅS{kFb5 GshwSu*+t`P@fVϫ8^CƣMH8Twu 3kS6᱘Քy!<COl".lJJ u@퍸n,864YV)4 GTsp׍snsN9<yQp]R! q}n[> wFD ,㏸w5`kt."F/B f;u8,dHL%/k,A[BZŤ9 +Df叏1LMe<`CJ".\q)Aޚ~2{nDۤUI *ά 9 ջ1{7ejO.vG"k\tunPU +endstream endobj 3974 0 obj<> endobj 3975 0 obj<> endobj 3976 0 obj<> endobj 3977 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3978 0 obj<>stream +,*7Ob%n86t@M.1bC(neܓF3D-m3)Jb㘷 BQN0;{JT}ƒ"ci &Y5ԂoH͗hZ脭}4x@eITzr:j7 +z ΐ4b ufP}vin?ϘIְt/Hq\KT7in(I/wBc+Mc@! 7H2uAT_ fǘɑ`3xh?#6JfZ +?& +۰"5e$o$M}O35_{bKr /09o*K1ҩ]wSVo8\*o> endobj 3980 0 obj<> endobj 3981 0 obj<> endobj 3982 0 obj<> endobj 3983 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3984 0 obj<>stream +-SlKI[xB=Q>V88ڦ<`w*lM2'׵3W?ChUCwW#NUTYk3p >LRjSaE6s=K#c"fw7:LZFҊ-*wpLѶϜC."-gB#KJ|W].نS +A<2c"ٳ&y3[ X;4yOA[F[b}6Y ũhb佫GM.[4'e9>Ȳzn,%YoE̾zNvB 3,\UD>&A0P<^$smʜ{%x3\ [G-ssj7YࢀZJ% ۶P` G@THwFi.m }Dd8]"7^x4HLH hxמ@AM:љVNZ/}IgĮ:Mҧ %2>uX،7.G?h>42ߣ82 >yyZ٣լŽ2LrxVƯPQ _db 97Vvu~pJ6? K\WlXֲ?ġ; ]9BN_;a}I6H|тvڵ_m1I**ψH ,&.&*pE?aVu#s%R~_ yCޔ𛱗c9pl]a⮳rae 0tij̕]Х.WSD{֝6}4W7^!^U\)7pvPo˘c&$C +Ʒ17^X!):?~e돶QFt5T8=$bb$ +FY#$ɰ5k +Bzj :FQ/g'~fUDNܔ?eFVw6y3){'@4ZC +*ba_(j?`32tu]6@$aD(˩p5Tyz.)]s*F<T,TCFX6bng9umǤbhLդeab:5NK:dU,0<*y-^$);ɂ thXv!f4}bLjHąllf/P(P#:6~$k})NmSx1D)W +K\ +endstream endobj 3985 0 obj<> endobj 3986 0 obj<> endobj 3987 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3988 0 obj<>stream +6- x׀d\Xh.[EN Gy=W!TM7Y-GˣL @B}a[@]:i=~N.cK +\*śD ]$ubգ0{ p_MppwArB$u\XCyQc;`: ɲg 9 z!:޺R&?mB&87;>s#[EL a&b?f A=% iT>g`Q^Z-5g7K*Ī*k٨0yrEDslPt{t*4G+3KZ%9X4T^'@4l P~VE 0$֥lnM ~;UZkjνpvG1(4hwb(f.Z +nͻ~Iǔ,S*IURZ; +)gcɼ=.|޷;>To_5#+>?mC]g>( +PYBJ.)l߄%ubhUw @ht[SUd*2Κk|8,&L1Zv"-6ߡaZJ5a<ܹbbp|%67.{R۰[dd9e6)~ +j̥Bs` c@n |.5eګnB(61ΘWeFml5>eU('К`$j ha/!T-ėð*:-3Ԃ A,A1l[/^4T[1T\ +]T.&4Fr/bX,<^qӐzE5KQBES??UZEYc7'g%SۇЙ0~Q(TL_w-"dfsl F +endstream endobj 3989 0 obj<> endobj 3990 0 obj<> endobj 3991 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3992 0 obj<>stream +R`ie+v;`0X[BQ1/\q2R{ nr>dss7 +p<^G- _+Mh>ԡbD?=NJNNTqXm+GAday-׶NE G8q2ciK@~~dHkm" TgV}?loi1V/]@ +xzV[+ +f$H8D4^x ȧމu[ITμ2麃+se&$D5K5^Q Hzq/VviZ6AkF ѬW6?=9fqD^R[t27+'/N1ہdcEtea +8En4^n@ocY2b[&ܛ iB.NhߝӊoM+9ȆH=ش{jS_bʙ&<ڎG#89iI1` G֯|uD7cNfb[E []3˼%%=t≮0-j /EՁ(+s A*XƸ;L=?u9(EU"daMbwfi 'gjG} NlkGfoM +4kOPOx)_ݿՃ6r +(aԎi;ˀwXn֘,vͅ^ sq4E +endstream endobj 3993 0 obj<> endobj 3994 0 obj<> endobj 3995 0 obj<> endobj 3996 0 obj<> endobj 3997 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 3998 0 obj<>stream +JTJ#"ݣ'ܨa<4`[/[ߐ#9!gna`H}?VJ|g\a~bMF67ոMKQ,XhHD:Xv~T/e8Vz`O'PݰHCe)x&cvΌ{>'`tnTJ =B6e11ND)mCŻ%X2\z5hL:?$5-N4~ńZ?nfmVze-&0=Bf_][fԆ EɼɌB°bj~+q\O-O!J[+J,D{u3o,PSSq`jIuT,zzﴋI"Wա~ vhXmU蒊!J}"1ؐ.*?$QtK:u?1GuOxc; +Lی\k3@yځNJX%So\xw/(Wq[ց.1 #V "R3Pfo)xي@ǽ_!{BT384v'}5 +В :"11<*1L e@z1a(.kfmvhl2Q0zx @pݜi +NrrX;[aVt0"4+EkO~S_]A,j ldB4kG=(2DF1y(-Xu=sk842j!tAڵn@aٰͫH:XJn5s :H)D6mwzov +؟4mpo&밂"uT&' 6T&){jQ1#YlAo6AVҦZ"|vtO=dTHL)DC- k7u#h@tҏ6%?V#3%+ :I[ wO.XZdK"NY<(GM3 A:$VKj_6/o)g{mBr EFeq"a|iJz2-[lrʻz "jbIsM.Ut0oksyrAi2ci]r8;O\{H _+i{#ǯoRͧK@ܿdeoyPRg5tvG+" +endstream endobj 3999 0 obj<> endobj 4000 0 obj<> endobj 4001 0 obj<> endobj 4002 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4003 0 obj<>stream +(&z /=;v=L 5}2XIV>XǓ>9טnN)4̯C655TY}{>ͅ=$WU Vr FF}T0hm +wrɒ}t;Bt''/GwӞXYNR q*qhǰ;`o.Ɏ3?_%U\]m{̢*~y"t4ԝӍ<;w`уfi)O +~Mk5es2_i|6}+nT|o z2k%q%r4SBy9nk21&o- .1>u5.8F ~߲p`+EP2ǭG'[7-Ko1w\r(vFM&{^hv7 ȨRbf}]vPд2 T1^w- eDky*VrWbo=}eRCkH+ l$ҿlnNw+^Q݌t)r${h7bO r"dS9//c^4RrPsN)= T6e^@@pm`]%wD0]fPBɤ6HliOp(ь*|9F0#vnKwc]HtƍumVA3)6q;0c9,JCzY_G]n/l}!|6Od3By$nֿά.YIyf: +endstream endobj 4004 0 obj<> endobj 4005 0 obj<> endobj 4006 0 obj<> endobj 4007 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4008 0 obj<>stream +a"%IȒ.֛~uO O%q>d +f II1E=YUiDE:/+8iaT pvb0]=.<iGOĽI3rBg,MxyZ>@H'Qb hV=4.;wA`OС$,*~m1}}DdA}]=G֊M$Q(FF>biףPo0FR-/Q ݋+|?[P~lſK +mmej;"o>#Qo!FMNr,Ԧ*C Rٮkdy"N ~A/~ZBYRl /{TJ1Ey0A`nS/P,Q)Y 3Oc.ؖWǀjmQdoc`7 +' b(zW[LZ,K0|j%Dp3r* 2 eVGw,A8yXmIVlsiKzŹ6J Wݜ4% 3#jɣruZԽ'ih%q XeEpuzNFaѤ)]ei^065[1dX@h)*d4.o|9_5ӊNX'e4fC +rY!?|h>ڐWRN'z;2X+ױ`Sa" 0~%nA>̜܄4^.'U Us0•q"˷#EopPź5ϳfx|j0\N[FfΐAߺ1ֲm+ +~Rrəw+J$D7J*O4dfe"J2=e7xx +–ɨCXTt=ԈY3U= =IM/gkxrĖzUf0̊ڍ&TA ^Zh\+r^1݄- +endstream endobj 4009 0 obj<> endobj 4010 0 obj<> endobj 4011 0 obj<> endobj 4012 0 obj<> endobj 4013 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4014 0 obj<>stream +%c +N.fn{c5N{kNyH)6K?(6jӑu)9UȓST33b{qќy9D]l>^bPz\\FҹRv3wXtkT{O3V.hz"=9m͒yWYİ,t2-J6]ΒI˶4ּ 5S#v%{aXQ|C$d2n0HV.?3y)~Fcb5?0tLiln +)AUbeس39Ga`pEL8{Y΄jˠV+M nc!ODy|;jӄ!Ug?{XZpEݜcrErÌ!hIP~jaʫ1#'dFJc ro_F(l%/ķg@Ju l˸кW<= %~.޸C<đZ @)-z:[ aS +Y3|A~]\',a:҄5 e-g@ љ#M}O^@$_o',BmgiL?IWH0d>`]"^Yl3^&:ngn0YlRvY1OEHpY3"㎧p(E / V7tIVTxUjڧ́R 6XjF#=z[nby.7A8ը K+܉T$C$I-rgXCAM,Pt91 +,ڊ5o9B˺WWb  ŞM=AQ@C,cDde4g'?E d*_=dX KonC&*$AU!TBWXzo Uwfjrry|?.Q+4m-UvhjD@nOB45)VMdrh pj^3:JE1B)3H8M ) +~/m`Xx}J(6@Jrgd% Μ:]>dvc9k͋+ \O)(B}r[\N_h}y?Y(m]_'[0A!,SGmlr|x=>IF%CQOA&u"OZ6NDI-k7ebi蚘w:fѓIpÞ[{$SХJǡ@Dfͷcuqq%  zwd*)? ZAZT)zH_NB09dtu.m>1 +endstream endobj 4015 0 obj<> endobj 4016 0 obj<> endobj 4017 0 obj<> endobj 4018 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4019 0 obj<>stream +D#74ROr= T0ŕoisݑ/uG~"ArrGZ3~OQ:B<Qj}]q>׃Q `pfk Sf)r1p݈3T~`4F(fXy%j@o~æoDm*dc֍R' Z!qF薩:wb r6V&%tUÜu +k,:ޟAjP_oayA](CK2;jAZHx+|!RsA<+ߥrO*Ω.?6zw=P,`=r30ž}Ek߾K~yL*b{57c}\dۚo +v@n!\Ob6_ z :-rpaYsafz"4T3>Lѡ={&rZO`zesfM;o.> endobj 4021 0 obj<> endobj 4022 0 obj<> endobj 4023 0 obj<> endobj 4024 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4025 0 obj<>stream +_S.앖e!}5 9Ϳ=q(:h s~*$ !Vr8X\:TϑlGFc7+j+T@x%醪| dRj"c'׍Yx",|HgΦN nю՚>ºv/9vѝn'66h9@v!&F.Jv;/6&c*[.^o?)ΓHϪiv +$^,WBًؽ +R/)S;G%\GMX԰1XcpI4uz>9eG?ז'k!^A6X±VjN$zpc+h )"q]^YplW?U#˓˸7(16Msl҂q%J6$|VCg.{Lje%ZjGzg;8H\JVH32zC Vå īlXw_ c? )Uw +U`SHLNLɬ7E.~i#үYjŰL0VQiIrE~4y+YFS!_P4@{NNJ.n\#nĞ/~˺@GŁeB:jЃ6;m n˦itJ:Х.?#^U7]Wq^}Gʽ igs{>3Mϼk$Y +0m1CB DgIJpeZXDzc}6e("ZC~&]cSiV@ac˿iŭ[`:F,]ɮ,{9mX&`hM1u@+&Dk-Hg6^2 PaSX0)F90^Ay0%/ +.zꨲ)5cأ4Ԇ|!@ˬr'{p\ЍᰆT]q"'jӠ2Q910h4zlebYKۋU'KdϖHg߇B4[m69!j&qIYյ[műN։%pS2,[MQ +m;i}nڶ"u+oB۩E@)^D-4]+a냣E/ PS3ǥ4#QLb +endstream endobj 4026 0 obj<> endobj 4027 0 obj<> endobj 4028 0 obj<> endobj 4029 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4030 0 obj<>stream +6RK?l`H3re Y +>Î)@4YF=q RQ4Nwjr eD~M/jrteQ *YB)Rq>p8U*_>8r($T!UxHSȅsFf}PILPڕ29}IRetݤH~C^r~> >5(-{ϢXU?@pLue(&.Ǔ꬝YT,w5&ṯ /s ޷ )V{0T[uН*2H:bn/إVi6p +.%(n%R [x{NɆN D 2>Sօy9DE(ƛl8l4䰪W5JCkI}ȧ_cPH>zfU3Y{—z1g/g%yVЦK1}c;8{%hxѨ _:j] btIh ȿ+\ +P,*E//W1*x"9&J1r;[WIe?_;^UΥ|C +ـvۃgm#VQ]'oBYS(#Ha5dP'v14|v +'&3`{޵X%{N߃ͪ +JÍN]a@t];-YPKDzacC&HH> +Q')˥&T +],b{ĔkfW)̮Txg8#;+V~lHH}T陸B/[s8VɖG9O$E6XE*L?t.KNU5U}h̊9e8.2яKN26唩\Iz uB 9obϡޱayٺIqZ9]Wz/]vŧB~2 YYSb;` x4DNW T7uC]E ">Ƿ]Ckʙ0V?>9 K&ڱS*Ւ2b"\V rJW[zOdfw[d`|yV<#f2'u%6OdMN1"fS!vEr*:H$-/i1wWp5jm-Wy?%ƋE mJƝUd-'p'@O d> endobj 4032 0 obj<> endobj 4033 0 obj<> endobj 4034 0 obj<> endobj 4035 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4036 0 obj<>stream +Nզ[ )=.:o8F|}v}CfS 3+F`0xXYȽKM#|nz z{}ersGaMY8m5V@]ŕer7ٍZ'r}q7*ag"b<|WpghnKc3Ms$"r^ ?ʷ)3T2OG]7/{rz 6[> endobj 4038 0 obj<> endobj 4039 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4040 0 obj<>stream +Ph +2\V 8̦wD1.O1~V* `7ܜ) ,d"bh8EށŨ.|ƺuc? 8731' Ǟ ~z2O~CA0W#"#3+fA"gGX&j6`fS7<2a9MOۮBe#|,.97WPOj<( =@~D2uNUXxũ1m,=T[0_դlHYɫlU^u+\" ꦪ؎3Z[84]`:6j=񙑌x+z}Td5 +J,%m#QB2<6i-pq$m<f2U5j@Ѷ3'?LW(%&ހ":'b;Atdl?ǿȺrmXqli7L!8yQ~e~D4`bO _nzBlWtG'8{Zb\E2$[Otp?ӌ8f0\񯦯LT<wj"Q(L] +{uy鶝 T95JDQd,D1M scdw~N:#HCmZb2Hw,O ;<h4 7EQ`@^F8g {>:9^ejNzNOq2 +6a8I cB/}@xpQg[İ]ː*w.RH^4kZ6KmTqۤ*2I@Z#i m_Tǚ%QU=> +FQaI+ks1 ~߮„ )0&۠BECn32 +>3:>Vi5!2u^mTFS9$ _.XhD8Ogv7P·kY Cƨa#9Q ޳=7f rӏJzN47| +endstream endobj 4041 0 obj<> endobj 4042 0 obj<> endobj 4043 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4044 0 obj<>stream +vDD;9.]?GF*QIJ]^ROlKNCMӆ%ax +$PM5(Ӡ+ID¤Ȣ9yPAY + ?OYn.or\oCN/ލGXB9cFA2,HJTj4\ӝ;]vĊIy(v/BA*uM8f?4Bӽs 0:#)@@I3ei!D#m*u?ށA|>|CuEeLSiK lQ#0w n˻~Qk$aPF0TdCPt낶zYfR{pb{{h)JIS2zp6_-?IqTםBhb\Pmd<}'i'_ Pg{k$,WKIVc> L~ҥn , +,KfZ㫃lw焵T9Ҏ$2"Aa|2qw$gai=JhQT'_~m۪-(Ћӵj0\{ +endstream endobj 4045 0 obj<> endobj 4046 0 obj<> endobj 4047 0 obj<> endobj 4048 0 obj<> endobj 4049 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4050 0 obj<>stream +ReY{QwAf{Ҳ؋' El ]b{t.Ę&˜Es61r^ȑ \;b/) D-s:.t7Xt2&RQYC N4ެKi2+q ͉V՞\hP*ӂB|:6| +9&>)H3渼((wջպJ_/_Tx;qsà6w5$-gEƖp 豿SMe Q^2B/9:iCD>NRƮ"g-q'R7=pMYY)s/!&$ҘY/BĹ4^&$y:(o>W 4^w{HlQ'zU ="0,3,q?]8PZ.<;Mc`r3`)^t W;w/'0GeaZX:/, wnڨ9Br{g[G$"~YdcQ|4kf0= Öe\KN}EN '+`g$8qo XtheD! bϯI8뛤fGˍl^[vD:gojBYA!0R|kQk{ +^d(*0W/?oCf&y#Z(Z[Nݪ?s̀)rKJȖʉ5Ge>j0 (ЋbZ}羀g\Y9oIE0+WBD"}exLri'ŴoG3>1cftƖ#]Mo00_52P idi=yˠ&`=)HGa3?T I"uvoz4/ij#E1QwwZ! *"(il8NQg͢`'\Sԕ\XڜL?/XCz"$Om Rv} Jq2#ǟ!'q򕒓ԅRBem߅A $ n,o yRDa1w!Q? fH#r%Fs8ޞaT '܃>07拏n1~ LxV2v19>>qs )E: ڴ:Ƀ-z\bEg)5P¼X;1ܽyr}%nt+ѻC g %]$Ҧq|M 5"J!μ#Q1n Cfk`{ٮw 2^T\j*P^3WE +M`\Y--KFn'ȼnIj ~9]ynPIQҮ!4ޔgo]p ίkd Qf0<ݐ¶Ur )7o NJN ]ְVhu;g.t>H:z7J1XLGKA :λ|!qִ +o+ԧpcGS$+j Bɓ{`0F.B >PǍ3GF'2ۡ@}!T~ʁ}?Dc 91,ģ16y閴r5/)]<;ai##͛sugaހv%:X۹۽54)!B5mM@vX`D)-JuwjL㍊;Riʕibs!VY!b @`m̦^ +endstream endobj 4051 0 obj<> endobj 4052 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4053 0 obj<>stream +4jn5tҳ[qsVW^r rտ_UK$ ޺xNhj&5vDșŝ&)mDjFsf/ C~ҠNMJ Sn +1vЩp'm GJu (PGm$Ua<@4l)J +hSh +> endobj 4055 0 obj<> endobj 4056 0 obj<> endobj 4057 0 obj<> endobj 4058 0 obj<> endobj 4059 0 obj<> endobj 4060 0 obj<> endobj 4061 0 obj<> endobj 4062 0 obj<> endobj 4063 0 obj<> endobj 4064 0 obj<> endobj 4065 0 obj<> endobj 4066 0 obj<> endobj 4067 0 obj<> endobj 4068 0 obj<> endobj 4069 0 obj<> endobj 4070 0 obj<> endobj 4071 0 obj<> endobj 4072 0 obj<> endobj 4073 0 obj<> endobj 4074 0 obj<> endobj 4075 0 obj<> endobj 4076 0 obj<> endobj 4077 0 obj<> endobj 4078 0 obj<> endobj 4079 0 obj<> endobj 4080 0 obj<> endobj 4081 0 obj<> endobj 4082 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4083 0 obj<>stream +.n$,0W+nX][wYv3۾tː菫D!ebZwO +T@颅Ҩ.g/{ s;Z[{Yϟ#@;Z_'ul&*+[sc%ob`> 0r +|h@sJ&Ѝ+Sgf>& % ) dq"E:m7v(c*ʓ倔&D[0ʣA19ZdѴoV?c&숟ɐi$G/_Xn5 ~sD)Df%+Ab%"@.M` :}8w(a>nd"KcrE|Q.wAqw 'vZ,JF6J‚nV"igjLl`ZM Mg'ラ$ 7REp +ys[>&9yRYULjN$ )8P$A+FS+^%H{Kiutl!fa_O4eCխwnwtNF)[x ':eLkz90Ud@EWۢx 1 + +5dM;mxztZѓ)æ~iVФ[upQ_6BTV{  D_Vk@ϰ7%rtљ5{XÑ%D=Qt(`L"Y&8Ğ;U<=O1Z⤳ņA,ݠ?]g5qY" DygGp&IkXQ$?v:={Л/ln!Y!H%NT?!dCXm 'PN[h/Z4 +Hk&C#7Xg}x#Ġ"2L?fXpƬ< Hqghu7_W&ټF1NM6w`iy +t Npjb}P ׮nRkJ3" +hWf6jηHSW1 X6ؾn +aZ>ghI kήeQbI_ +SDSGD5k#ozلURUQT" miv3r+䤝uB:xwOXLO\U~H +5ϖ(\;xJSjBZ֌(aǔVf3HRlSDHUGUZN OaK+@ DZYi0yb +HS-Qo\P2g]:qJܨl/?xQWHd5kRŗ(l ?27ˉ9:|5\{ı&c.taA j?|V lZK?E%OER_ s +Z]x7=1^1(Q)bKoOxv2nFN NR- o-ؖ8UjcǩaH+6cSAzDnK1i`x09~Owܫ&%'6 5a&}Gz:XgqehkFzԧݱѷ_i^W_.ꝕ&j!v +@V@#=bf<ŖJr* =:݌3 дp0"G2 F{4)/)'s&VYnz2v{`HAOIoj=7 sSєs$G|B$r2nE (Zze={榯ނkX>)΄_\<8C*0MJV]F 얉Ϻ LknZKx! Y9ONCGqiyq][=ۈ*0C +D(ڪ']a3jz4QiR&&-Tsi^gB戠7ޔ7yF4xv7Tyj mtS8+kCzqt.%JeCjnP Oe}E@ "@BP5/*لEpұ/΃-n`ȮGt/%,0v b7Hd;XIo}EL6 &;0s20Y_crkAU}vXg5P!bT=Е8MU@QQ缄BRNbRDHt/G(+;ES娠;!=ߤܑ +ݫ*?]8b6AJc2bUMֵ`jݻt1vDpkdW .X_K){IvRL/.wege [t4fV4# GN< ;ߺ]- 7 y*QՊRRuhd3ys {DCQ776_`rXydmlcjbb6 +ui0vNBԦe}MFvޒq!H +#nC-t޼>t__Q3o7 jdcs9l#d*Y#Lȥj 7y0d@=UbJ>oPV.A:T ܣzsSM ThW3Eg(13Ci$ZvR>Ď3FW}@/7@=%Z2|ͳѧ +ا~GJ^4%;ȋf&"30 ji# +qMd]K:^6(!DJt"~#> G<ˁ!HR]duDgզ5Dۍ 84 |>0}9MӾkJE;W*SZZ>ͤጛſsz@  +¦"}5:}p`CL|$SOWs3j$$vψ:\:R9"]4۰T"VۋՍ2`Y +;=‹0?}܅"`Fē-zZ8:37-@eD=Wfŗ_mv\z{ee9C⤉QYc`9+*Pዐ7E- ?` L0[L) }CH^P>VtrNPS\]G%?Γٿ'< +U0R?l"͡IXe Xv3X%vN~ѫXF~DӺBWfi{ןxH/ZG v =-cZI\/^$O2̳]\[H2`\3X9 XQ/l<) @Y } nfk!!#۵{*$w'o+ڡ QŇ: 5T+aVћ0²\+DGՈ`o mKBÙʅ,ͼr:ˍ+꣱[a +endstream endobj 4084 0 obj<> endobj 4085 0 obj<> endobj 4086 0 obj<> endobj 4087 0 obj<> endobj 4088 0 obj<> endobj 4089 0 obj<> endobj 4090 0 obj<> endobj 4091 0 obj<> endobj 4092 0 obj<> endobj 4093 0 obj<> endobj 4094 0 obj<> endobj 4095 0 obj<> endobj 4096 0 obj<> endobj 4097 0 obj<> endobj 4098 0 obj<> endobj 4099 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4100 0 obj<>stream +p]ڒ$ՉɹeC?Ƴ.-һy*OS8tVxOgC 7TrUg\rgwa?sgd};XLC~+-WG4c)!R?x"hf0'u[AQ{ +bpf*(=fgsE5Hzb2/]SGdd+ 'wU +%"`V<'ҵێj h._ҟUlBo?'mI:R2]\^ZPKe ;~6..[cv| + haU<1DcpwHeBG3yJnGС87~1/5Ye6M+Zh0lñ~fz<7aq ymJ#l?vf74F,,5ooG Np4-psOCѮ=- +ַk\s":1w c.&^H@eLTɹANAy'<-\H򰬤O,.? +dS"}?\,]á? D0)FUs PyEFo'rl$L]LLŇ:Xm%qm88l&coxTy+<'⼗ M}ǐƭZPJ }>C*1}sAT*IR-HvYOݒ>H/5$OSPGL\CĜ\¾UJv;3{MQ<^c\YJ;b~uw9k +3>Rf]GNcS&h 0\ _4͸Ϧ$lM͙6 1 nJ8A)tŃ5dR̩jJ4lC'*R|YG~\P`p˯R10+l/DwZ3&!5!NFV=F1{Gأh-Y 'Zv{ ߲špգΗuI3Eٙ`|nT* ]~eh]&i +y,ns:TEb(LQl .(& Òa bE5 /rpK3vpzۈ/"64:cffxӬocr#4*6,Oc~PZ鸨nlPݮ۬v Yn.<:)*@.TP樧;yh_'wAdnMtոPE]GK7r+ B +7ͯ6P&>K81\tAq3Ec)FLCݒBɢ JuVݖ(e#~a-}} _# +0 +̀+ 2a!,oMGA1.~l UMJmaq.z2G?.R>&]޷8CbxK }"'h?Z$Yj>> endobj 4102 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4103 0 obj<>stream +LS/-qǚ>e߬=BE"^+Jk +J#vܦC6:FJ4 +:^Z6_\v.;tOwR ޕ!kf3?@G~]XCY:˥r]]fݹzI'A?ۓ?ݚ"[<6Rl{d8oCﴮpaV雌*.d64hC ǀ< sÄ="*6;0ƽ;W=7Krl'i onAͼ37H)ۤ'xxk~9f0zW5G|񿥀imI]Q ¢7͘0zb: OVXnpMzD8yʕ}[gA?vږ\1=oMl"4e/izf -vюڐr_FqpH4*̛{G̽1j x"@_Cy'DJM37b _>M{Ku\W LŘr{ $*pd7 +qu+Sdt ԈƢ] ocEc9=A%;1::ʞs,u< rDoڱq,.9[@5qF}("ڀaZ<3MV퓑 >(;~χVU]7Nγ8"(T+y[JS2jts3C +endstream endobj 4104 0 obj<> endobj 4105 0 obj<> endobj 4106 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4107 0 obj<>stream +l$>@!U;8maPڸJi{d]-ƛ7)$cbM%^u6wp&4ױ@dƻ?ǪjsahS-n.V0RAQVBkd:aǎ+0x5|n[? TdяJPD zt6pmE9Ro[=^ҞgĜxZm/l9;g7+%y;5$;LT\{rAƒĝ``DK5&4k:>6[&9_Bs8dG@‹'-DjS!tgp/EX~>~EV?H0.|ԗ% @'h[Hxt6&KPBi] N`eKf +t + B, +: +$o$d ~ k뷦B͔mc,co1VCVѷir'#ϗh,*\p^V3ݗ eԜo\xʒuw|_<2GlksJ<:gBX^Ԍ6Kۊˆ'-mF8ec*'J:c\U,'5?02T Z!(*YPB8 x*`22hC$Gt6Ω]f+5lm +0@ }N1$i4\ً "Ho= &Kz1|J/`> endobj 4109 0 obj<> endobj 4110 0 obj<> endobj 4111 0 obj<> endobj 4112 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4113 0 obj<>stream +;26dg*[ +fhj[ÖĦU;Jg*fts +7Qc[304%f]l-_vވג"q ܭ,eͤ*`KZ%cs0Wd_i1_'uΖ, +Nʅ F[nk`E.wY2׵_bѽ5ujJJ{ eK|!s!$LAO a PH%i<YUn<_NmNJYp %yRs +Yr[/ ]⥙f$Rh="rd@z$+k7t&|E~gY-6v(aeX©cG "# cڹ +c3BEbo+9f Y(N?Xg,-#{(Kro$thwJ^[}x́tKaz֬i~|hW1񠍞CsD5↽ߏZ#aP*{KUua''pE{ ]@׀i 7F!)@I]hWQDy'0vsHcwv!{7')s߀"\ ?\6翋iVNKO,:U7;vYT7^.od%M/vɼZ+_r@ZlÑ$aY4p'Y{&&_;H\.JpX'Wn嘪hጚḷA +Ipo06:!&$祗s"'wsȒr:1NLbC0hJZYtT |ڋEsʓvy~C!w-2p0ݢ0{ǀ0a[~z¬Ob4 +endstream endobj 4114 0 obj<> endobj 4115 0 obj<> endobj 4116 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4117 0 obj<>stream +CQ?et܀JX*kZ' =Ry怕=SN[;aR"M޾ +:H iƱ"0BY ל迕20V-,EWRQ~ev\PxcvN y9uu3uW=L9.K#sz6R }e.D +rTyЮLbAj)O`:sن( sXp3kcቼR_3?vn'mGk-}l;Bi&@@TϵóinzT!6\b~Z +cõYL,i5q1+&Q}Ep8r;.LgEށZ*f4 r0u^ɣ?=B4 u+,Vvt@{iM;eCz$M\FWnY~U/Q;PsmΟ#' cxx*!=|Cޚ4|7~)ZCPu ӭC]z^eiR]j#?#i׷\)%k|ÀMx%Cl.󹑮'z l%=;׷LJ-VǒP笖RD%l?anˋY9Q[74z:^J<%(0yzgK/c_J%)kmiLoTPOjM2?k9+hs z,'3;vT8<ٷ8<4-1#rtT S7&g=2=p. +endstream endobj 4118 0 obj<> endobj 4119 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4120 0 obj<>stream +؛1oDёH xnhcQ:yWjM.0OA=l w}q0 +ԮM"a;UZ%#dp"gsvM׮5t(4kJ9(*BcΓ9M暹{)bcg +ĄAy*-:Ӵ(y%B@L [}81Ny\T(:2;q/^{A  >mG ODcU!kX)<6{HG^撅x} +#$Yf1 |$j[_hj8U9Nƭ钡bXDp^uz4hcA͂"fdҧU \rA'l5 b|+Wٞo+]]=7lO|T,$;Cx24&+~:2VS-PgٶvK j~@~h*`L/=o$ @qqwx>n=Rۛef'\/IC\M=R"p ,75H=rX\L 5bG/q^EK ^΃jcgƿjo@,?wR֡~N '!]|kd +,;Tu/L kiC(h= 4v/W;Ho? s<3zjy{hڊksVl[CcLAT ᡞ(9 +endstream endobj 4121 0 obj<> endobj 4122 0 obj<> endobj 4123 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4124 0 obj<>stream +mu-RIϷΦ"91.@#I,IhO<SH!ӱʱmlbސޕ+rޔ Mj4VÕ(j<α}aևDە)|ݗ#*4=XsI Ut +vLP/D x2GTTͶ88kOf +$fJġJOk9!{(W kYrehDR.>(v #oMYr=>:+CK٘E9'0ڑ|?[,-+YP;v>t +-Bfb3B;fS xD@玘* +:e⛲Y#m.lًAwg7ƿw(wA{*x nիːV@ܾ! )1"D;g_ffQjLm,^ܥ(`Ō &ËS%HM+j:,sV';aƁIP"F,/jl Nu `'uM\dy ÜўX1`W*䰷,){DOOP4fҴՌ8@9ߗ Jnʞ*aMIc:$tmPV*snUM6^YȪ-3 -&V h:A$x{0?_ 9Cՠsሺj8[ yq, Y$}IՆWU'^Wt$CI}QMkU]Jia:i}B'/2'ԭn {zq/Wjި1M ޼H Zp&kCxa}&>1%DII%Ͼ";7uG0JG4ᜆ AqMMP7tpp Ԓ@GtΈ`9- +endstream endobj 4125 0 obj<> endobj 4126 0 obj<> endobj 4127 0 obj<> endobj 4128 0 obj<> endobj 4129 0 obj<> endobj 4130 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4131 0 obj<>stream +]$z= Ov'NXɒe4N]L5У*Ŀ4W$ZfkYvYSHENF}++=n+SL~لGp*a6z,"=_ 0L$=_ck 9.26TE[{!߲~荰Ů"ma$T;nG(GXQ{ ]anT}n*SeI& +0\4n(Yk VacTFw -U(9_bJNK/0pj 2KX}U #vWM#L̏Q7鑹[({/"dבv:O +uM E >I̕\H:-ޔ}L9!gh"r[ir F^ŭxiӢ}9&asPQùAچ<%O;/r֨ _] PB&bM6㧤'S.ijq/F !k +2*;y>?BifrdR׹e: +endstream endobj 4132 0 obj<> endobj 4133 0 obj<> endobj 4134 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4135 0 obj<>stream +IHi9jM+I*j7i{Zzl_kUָ ,m򌻙xN:1rj┘ +BzK7-&bBq0؞/XO><#*]XNN-Mpf zqK@\4MM(i!#dT 2~vtVDW85WPu/]nL3܀!b(FNGDܵFBnn2;8Y.`]?Lq~Jy@9)ݼ]b6 >D +~ysUU;X 1tIK0x4cZy" %g;Qxi54"\؇xaIm`RhMB'QV/A_@jC#J +=ߚA5ᤞUUh{P vZciIcny'f^JRs{J}36Z[s*\وua芻dsnmigqn/֖m\DKPY'd<9hU.,m$c%@S\iƙ +OE PⴰW&l͇2+:7nxT6c0 [4o㧐8ӣߖ657=540N4ڷDM2yhuO od Z-z;h @*77<7"s$DUnpvrFCިs2/LЫImwCg.w~"ĸ'\N] R?3HK6xt\ +)eӿX-\~Gf^AM"#5=>vpkuX_+WOt.~'WhfOVMG8w6 }07o50A +{4e4b1=YwE[yUo};y" bS!ܫ&/k {a^6a\vX/o\m4anؼxqg +endstream endobj 4136 0 obj<> endobj 4137 0 obj<> endobj 4138 0 obj<> endobj 4139 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4140 0 obj<>stream +B΀ <|M3&vGbRboڧIim#&a-?HgeJ<$dv Ql}3]g1ȡkl=~^h}BNr̀7!pޝyheP!DM)j(IvU|^-Ş~Sg-juR?XHMJz;PN,<8(~!Q11t;k\g 6cGΊߏ eRHV ]&H%l^2?<"򋠂 ʿľbY *5d%5uWcmpoGGדd/t 7NzG.OǼHz<䐎 H11Զ§觰.}Wm|.1I!P鱦Z~?3Z/"6# ܡMq}9,b~dWXǩR3; zy. +9Z{}<T6 %OFC[Uevk_FtI?X#w}>t%ARܑ86j:f!LQ ew//!OOBUw}JW~tBX VcLէ@@ɟD;ңe1DYj~mjBJ=%jÖ~X/8͗j: 宮 +Y 1b%l|t) mf讓-T5p-N +=G>R"#{_ByXYX$] mC IvR:_!i i+,& o eToJ%]fDyDu +o\;Du:-Hc'Jtu&i8KW0sj#il[(k-'<ßk)9r0klMx*V'#2tb*1(sCfDA*L1{*:gC.HnLjΦ aUaM +endstream endobj 4141 0 obj<> endobj 4142 0 obj<> endobj 4143 0 obj<> endobj 4144 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4145 0 obj<>stream +r@Q޼ +\JpHbs0tw(P6tjmќQPkGYy%3XB̽-7{< +5݂n j<&f+@KI6g >k;Jxj rU8A;hFqu_Yt$ p_qgg0NTmF3q$igU DuVŵ[&ImTW ӞV|%D%SmH ʈM'>;0B +ߩ|5>m7&:62,|_"ݎ$D4K0bĎ^D]S+W|9M{QF&DF'}Sާ7.Iq[g\F$BzWӸVz]?d>dCWoIvX5XngA"Z;OG~KQپ (; gB4JD!h /8^8jP6f"?Հv1<T!lP!q4d]3zo`)-]Y!apN =Fe.Q!epE+!0݃pPCۧd!Qi+n;m)nlz\8֜3ĵoA(+ DjifGvRTjwܐ_qy❇:>$k$9(;Jt"jfdVwJ2\̜^R-k ۠3D&71%=qW`8#2_bŃJZWg25_`+Z=faKk'*qx-Sʥ\qIJt l10Gڀj3 +endstream endobj 4146 0 obj<> endobj 4147 0 obj<> endobj 4148 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4149 0 obj<>stream +gͺ,<}BPRTo)E/grD|!no@Q4lz825p7SڌTQ;fTSi` :!|9'7uIS#W ءjax p?ZPW*e$\KKDZI_o?e3~WTL)$9.}߉PcKy_GlTy&-J6Bg"+0WlbLj0Cݏ}JI5nTD|V lp9^Nfn6Pr&m5ַYW/7gɺ]14Eumj#*Szfl!ԾSF:'ͅoe2;FȽ| q^?+>ل^GUYPg.UKK_`FmW +8zٝw9RԌAOT} /v +J%΍d }k 1\:UOlU#mubLYCxXxpvɼ"ɕ09rbvD(f\m3ys]/h$2Lp&R_`8ͬ A5)L@gXyl>muhϐ"<~RHBrweqPݥ|AmpQ/j7A6'CwBw0×W.{s#7O}s+[eppU[g]N+:tWs>s`[YVGkڪ9qQz 9sXQ8t=Q Έz΢Z8R8&ntKI'j]cZ+O3xnDA8,: ̰&|]WL{s'-NEe x,u89Ѳ3Ye9ѻa +endstream endobj 4150 0 obj<> endobj 4151 0 obj<> endobj 4152 0 obj<> endobj 4153 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4154 0 obj<>stream +b^/^28{dnI5eHkH= +W K ;A0B'd>(ƀ <*$"[}n6dا+8Q~S  ^&fK 8%+,aPREƯZQNÖamg%YuJ}EX_"N}TJ5U?ָdczu(`Q.z&unn( +":t_EsQ}i!ԕ]s2pqv `"CkLmAGg +6>v^1RZ.4g~ Xmr*JJqiPx@|WM8!3)0hșNWiȯp)HpxK>{ +9)* ^=¾+ yv#:CbA|fT/,}!t)dL-wkN?,O16X-zLaq3[g8)pd itˌ1Z +w?՝:JhHt}-L3,a'i [O%"xe#>QサB۷ uriv:(q@y`dUHy5jHx]1eUd22,܆.?^fz4տȡ%rY)l! +endstream endobj 4155 0 obj<> endobj 4156 0 obj<> endobj 4157 0 obj<> endobj 4158 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4159 0 obj<>stream +@-QyD7ߑl)4 9*PQ' B/ K /fnбh[@3= !N>!DwĜ+nX + ܡ~SBP)W$YE@)}qH%D\++g$Ft`i>3C6yyR7*G~(3~͐+ +ܠSZ46\ bZ_lױe~7L', +Vk~ !/ݧfGLV;]kh/Nb,Lc`< $Ƕ~ +A Y"~,H;;E3-7ei~ 0 iI|vmx[<qS.eVt<9l> endobj 4161 0 obj<> endobj 4162 0 obj<> endobj 4163 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4164 0 obj<>stream +faxZ~c}iv)?yoV7ߢ!a,8?pRe.՜C_\l[U>kn>?|yFӔ1 +5$IEngTvvp$ø[wo4 w賅XQPRd$ yh?^;[Ҿ0)X#c{m'wL7Ip~*$Ss_}Du{p|HUV'`Z[UZDA#" YbmMD22sǯ{dhjʼn2< "WԪ5j`6aBE3yrN5*]y+wѵST/Jto&#&Ʌ1{`~wKl VKC1dPZQOM k5ʕ 7+o?Kv8OZs_ +endstream endobj 4165 0 obj<> endobj 4166 0 obj<> endobj 4167 0 obj<> endobj 4168 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4169 0 obj<>stream +o'[os Bduix\ֺ;޵)HP4ir3N?@g;A?soA/E3 +xV'l|S4:N08K +0vo51\Qul'2.R][=(>m?̗e,2[b7YM֗a +2L\ӾGL1^0y +PBRZ E(gbuwE>M#B@yXsën(DrBv˔£ssH+^(2Ъ7PoLG+b ٔ(QBR >F*ȳ<cƬ9 +7nI:d=MF<ȝnޥ +endstream endobj 4170 0 obj<> endobj 4171 0 obj<> endobj 4172 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4173 0 obj<>stream +M|W#T@ dPCYx8Jo#}g=y},xBT/6aK:aWUgI|y^97?:zad C1sm|\']1FY|G_ixؤd~b_FiOP۱ +#!=kU? d MP{8Pw)pb xIUkv_FKOzRrk5X{md?TߊfsϫK +R bↁkd608Uy R&B@u?'Ѐqp9DgqFL+uoJϲ,Ce<!;К? xG-x2@wRPO0 "}z0ć7Qk" +uXdv۲4ހ(=e7q[(%o qSDy@xrPXX5 Djl NӦEoGő/LĚFl~h[cXJ$ܱh.0nT ر$AO>r >p4پ~~T%]cN8hF§@sݶl_=Z4nlĹhBNT |1>[)vyYX0hb+ P@_r2GB[ `w `p. +endstream endobj 4174 0 obj<> endobj 4175 0 obj<> endobj 4176 0 obj<> endobj 4177 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4178 0 obj<>stream +.Kk ^|=Mnt,ַ +<7.<^s1~LF}sF#<괾dKC*h?X/F&oE8ЙH&`{#q]^JYxXd2{ۺ^9H^AwJ)Ͻ 6bkZٓLr 9!6]Πg_`Y\¶ygp~mRqkqד&Աy<eA^1'+ 1Dz3f ?Avyu'Y?&p^R,٨[JI(O=QD17 +Wt gM}-69~Ϗ/eJJ: @Ƿ1J+!SU1lXZ[|P!$L3xK~Zḣ#$XѪ첶v꒝XV@4o$^̍p,qԿNc;jx)Sw5rM9XΟ(P!$FoC)z0j>DeȠZ3anumiqbu" \%G>.NiGMUuT̨H@,> oee,g9A?է`Ak–rm&;ǏƜdH3UBlf;Kը{HiXy3iVIK8 Dd7НP$&QB\b9QJF3(:jn}& .')V9^oCtˎCf[GAm3UC#&0gVXɄA EscXAuY9#a^TaVy 4Ѝ BÖN}ܕ5h +; + USo;u-H):X +K +^z Cn)˻n2]z+I`i|,4`m ibA !]ϓedjO& +;WܭΫuGS^|uWyA9z^ ?|΁65vu$]>TJ) T&!<:0r=Xt`>M@]z:DyPS < +endstream endobj 4179 0 obj<> endobj 4180 0 obj<> endobj 4181 0 obj<> endobj 4182 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4183 0 obj<>stream +?бtt +W$Mv9{@f +3^?'!{*⤧f\Q}JE +$IJzH`%L-RmK!\m*ztaˡ2m: UGŋ\cHБ< +P,Pӊ QsoLhy-$Q{OY!w9'Yc]1`U'X|7۠~VbvN/JmCS؂~c>h)7M΍9ȯ9e/2_:1=N#wVJ9|l1x%1^\SO~[K9~ఁڙ ?ʼcW*Z&K$ i79X菧|a*ӡ2@v9ʬRZJ4oX6 +7o^PZKg! XK=S]q…-a:b:%fi˒A}-`؂tij-Ȣ)05:v:>nB38oDLCoC &TQff0ͳ;ו*~쓱JQɋK3OG2< =?J=Xi-!=Yw}̹ x:;=@lݚňdUicDT; x +%/:!0_cۺ\cٮBlEɑuJ_VJ:~eyU\-='T4_C)b+Nr yX9icddIp jXs;κ3=J|ElOXߐ`i{>OeQuKɂp/3ͦ6ou:/7ߙk 6ij[槴;!CReY{+2t`n~wV Pgs5]VO|[5>dP(*kx#7Lk3/(? }oCoǭ/RX"¦ȕj&upe78:`- Sf +endstream endobj 4184 0 obj<> endobj 4185 0 obj<> endobj 4186 0 obj<> endobj 4187 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4188 0 obj<>stream +-MG +A@˷:=k?/"5%qJeFPh]̭`Ɏȣuj}~ZIzS~w6`cgvo$1@Mty%+]aC!gmX y9ҧ,Mcb?ypl D {LNX5.GI*,wqϒ=F&U' FD,0ʄ[t '+I(v yR ,HT&lT;V#!4YG1a#ӵ B +/ u7/25BtʕA6A\q~znTUu]H'̕ess ājN1"1aMϵN~$y2@% +h7H4o?;\# +qh%9m~RdfSbʆW{˷!Rkk9"!s%hB} Bf `O"K D8NR cU(lP:!Ȑl_4cC]'vNI!~XEPFEךuL sڽy= nW[68V~WԻIMAaYQ$WB07_B&{li>]&~ifqc eBr>>)bz Ɇ65Boɱ'ZU&îv:-mi}-H֖4u& Z mSb90d6oGєn+$ep6ۥ'cNCEa~]AUp/JsioĜ~ +-05@?tr׺DqíGet\ 1 V +R$oK^he[:L |"S9J騌IL +~{8.¬70AuP j 7>.>K˱ +t **@em#{?A0輬Ys*a+.bi]`#'NsD$WH˾]\]WRƕv8 &MMkܪ{K + +endstream endobj 4189 0 obj<> endobj 4190 0 obj<> endobj 4191 0 obj<> endobj 4192 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4193 0 obj<>stream +nPpSʸRE=]U=TW㱪0LxK0 Kq g0-]B{KbuŽ +xP 6!eZr3_Ug +Tۡ83T Xz|Kij8,hTK(;HT(&=gy,=Ϩqx8P2Hf +h0ʡup +vЩ5kDh e~1z㠦/SI Ƿ2't>pVQkQ=?c!HWvŰ&1`3:ZY$RAD8aP8+B}O8ti3]VUG!& jt7DXrJm4+@cJС?D+#iB1~K*\3;Xs ǹdi7s5GlT֬ЄBӚHndlEŃ\6~=Eq3'CyԽ6cҁg^ P {{FKq\ HQ.qKLr`1U-8w?> endobj 4195 0 obj<> endobj 4196 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4197 0 obj<>stream +o_pd,!ЁSǰ|\}viQG[/dK߿m5D\-p E-mV  +L;[A&bLv*RS o+Ɗ7Bpď'tqS~ʘ5H[;Q |PYIX3>2Pk{ alݍ1hLQ:AaѪn0]Ǘ`Z?{[q$g:W{FdlБXF)fTڭE9"`b۶9_sW>S55_]%l{ F..x )ɍiG2{I͝yW 63iIBJn GM3F⤶kF4U,iYZ!Sc IˏXk 7Fe<ڞcx| ə9XI7Ce!@/Rw@`zV14e?crC C_G"6TPMH:clj^7[P‹ cjǵa i-/Xhiݗ@ 1{rI9zcr*UM;bz)C:يw][G-!ݳ0҄!IBhl]$QX֑i6Ú-Ll\q2ÊN(~=ߞm @lcbP*wri[cljvѲ)~Gox͊vџx?V$<{I $@~E"NQbz"#==#c]dY('^LpgG+jO8UҿQ.p ӝ̓t|0а6eL!|IX]UC*/c5j՟ +=}+-*nLwtGqldPx[@=9ϩ5:+.8TwGRV]9ja :Å?щKTѧ4+mͶ ?`hK>bqa 2t' T]O7mhrhOi ĿERu /UIIQ=cA1]'`&n%i +endstream endobj 4198 0 obj<> endobj 4199 0 obj<> endobj 4200 0 obj<> endobj 4201 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4202 0 obj<>stream +h5τy ۪ NMT](s|h"lv^'6'DX_cgWo{m4p<]7kihj{uDbƒ*XQ%h?G䥯xvU#$DEJx ½ )z^iQ/X%#sRVq, 6iܒV]NT]F +ln1Zg\Ds|>|>M&FUz+x]. ]a=6-t液ɻ6_NX +ݦ\[ +ܚ$s|]3˰S71YEǸ{::U.-9cEjfcЯD#Ͳ3qm#Vϫ/?ϯ8 ] u -p4~_Eοˬ|P'ƭfG%AN:l(s<ھ)j0쐹Dvƹl:״‘@%EB)m6zx^lzQrfy̳rtE@4ܓ Ol`Ƅ>>uTDCC3Q]L݃` KA]Ss_ǧtqߪ!")"[|>KSP߷xk@!}\ +Koz^ +^y +eS8N4Z6,iA`>_5bw㓼̊zϔ> endobj 4204 0 obj<> endobj 4205 0 obj<> endobj 4206 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4207 0 obj<>stream +hJ^ _Lxn VH~(͠@.ԨYZnw1ſXxݸur p NHiZ1E@{@]oEE۸_%ijoa3/( >lUۭ/lk+',h*Ub$X˸T$vi!Z/~B|+ō17iw[au˼`íR[rC7Hmt+[^ +&/6nTbR Ȍ6\ǰm^Ӱ4]~a=l#l6w&;O@Ez;=Tut}L/7s>=0uѪFVϽ%qoܡ5\bo^¶;Vqz!$E-v'pZ>a2]~|4^)fWLǾ%P{NN"|l"Nȧ _n|?(T܊*tf͐lzT=HJꀲn. 9k1=mg[dCF '(UJI,`6!^zS"~ѦN=aUrx48fu\23.7ִ>ٹ(6 A{53?Ō} +Qݕ#@Gb 2( uc%1wɶc^\`Dzr"{OklJRviU쒈X柦m"*@ek|KxfqBͥ.peCIv*. Nflޣ Y(=5=nJ<"aD֋B2uiWC5 A<Գh@"~%ۚ_>ˈ] ;ogiaa +endstream endobj 4208 0 obj<> endobj 4209 0 obj<> endobj 4210 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4211 0 obj<>stream +J!lbwEy)|qxB:Z + Jc;O} <ƌJMsgd{R8У;MYBtVMZ2t鸵7g4i+:[bGfvf3l &<0sbz 2Ye:n +zyTH PMrǸ&/['Hs#JZa剶AQc]"!9AőP]+1ж"5a/"J D/]>qhH8!uWI[Cn%Pu?ͪf."/w"OU0̩v j;ŗiJ(}9 +minirŘ}vdxNVhڡB0Ȫ=V!MfxwyWV3]WI 0Йr#@%bm|8!0Ʉ!vw +:@a59jVSg7?@&rzL;$41)]g$O V3o^JӳfE8w(u/C oRD;*ޤ_a)l^ BcMhWO@7C0eXUQ283)b.R3Ԛ, Ch>E?*L Fj n(sq-WzF[c&F z\xA9!ۮhD`7]7œ [92?Ü>%^R lvXS-K,,y~K:@L: +K)(AEN*.}V}#11dcP6->H;Ojf[ RZ%/fd?T}@ h?ONb5|p*qc 7ю +E{+%ʵ3Ku~&O6rv|>> ȃ̑V '5}=KE+X;bV brM0DёO$RL!F,#}s%u)n5RSӉQhU?LU)ᠼRTfQj +endstream endobj 4212 0 obj<> endobj 4213 0 obj<> endobj 4214 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4215 0 obj<>stream + ^7xP$Fa='Cm)2Q źK TRXGԃ&K^$Gœ&+U?wV㼴98-@6(xԗ-vŦ"MתcxIldhNGQXpz##"}o|FˤBO|5Xs؎7FWGc>%A>}Vgs|WXyת%r"8e&jNmf:~~:]g%NYO`Z/qo8"M` +I"Mdy޹8>Tн<*2oe 'y-JQ݁?"1xfO|Zh"4;Y29)+gw@7B6Rg}OU_AǡG gIqmY\ǣ1fv" 6\7|)DiSP<Ϭ8iQ2鞹Y4y3u+urH6Ȭ1RFO74+fg:bOU'Ȍ$ #ybm7fih 9) [I?f~I Pp ]8.ifGjר63-SIn7Qv$j?I7\;Ս`:XO^ݺ]`^לm3;~GzK.XCB byɋN gsuF HNN+La$̌lg5Jv`:l .4c%ΰO +;rnrNsjRefJ8> +_L^lJm_TgC4$b$'}af 'APXtJ4tRh@nbHMoFPxIK¶-:dӇ}?`Kѱs\=) 琺z҉^A)A1/ +k*Ҡ'*!n.M>$tfP\qjGAj璡:ٹ+/Y\1OgLr(dgb}> ] +endstream endobj 4216 0 obj<> endobj 4217 0 obj<> endobj 4218 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4219 0 obj<>stream + +h[_tiwSQ(/TA=/5G9 Tj 7F1STUE^TrԎi1SɷΌ@Ԫ|hsK#^b@F:vjU0%_ a]ئpb)BgQvmKa@r&S,|\%"6*M%/~zwsLJ +3ݥT<VPJCUQr{Q wqtaKPi|c'qhl㾬Iwxw-lX'p*e2G({} +;8/L̷*ig!s򓵝þCT@l7+J?5B M5`h߀cQ@zv!KU@Qep`[[^G~ a= 5˕G\1$vl(tf4 *P%>CwfM ‫vv|U:`2a(-̟1g]$ +:'Al;> endobj 4221 0 obj<> endobj 4222 0 obj<> endobj 4223 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4224 0 obj<>stream +*^ u6_ <fovӢ頗jBX= +im;>E@2gD=yظsȔymUNgA+w'eN=Xj?s& +0Íߨrad.v9J~\KC)Wj1VUZʏ4|2K}Y3jk6lD3o˺䶻^SV&tk?@&ԘЋ`I $碇Wiϳ hdvkO߽3'WHR*jp{ⵙCTerFt8:w41 89ݞe~&)tIæ>^֜2Ƕq/eWK.% ءo3\52'1.HQ"&,,yr<z[f;xPø2bqM2lϊ6d۩Lٻg +'6g\Qkx) Qv;JU6/}S9.DЉUf!]3u _hLز|2[,ĕ$G7Wwba?Ł\WSdž][)A3i l!~/ Rͷ- )m6yExCPm, +)o\mr$,q40 f _Fyxz$270v_*Rޔ^韦mvT/4#Kd;e =X{9v;NCٙB%?=u܆SI9zmFxV^s0pd3D4!/JJ|/|l [o:Xl+cռ5>^S9jjHv|ucez삮xO +g[R!5j9"#4tfI_iݡNKNTL P$$5KL5o3=T^㡤#ޘ,: Cgۧ1D,p R+h^1"Q Lkj0o ܃A>gX$WԀ~fU1Q`đf-}1V6yI,6ހɤ4eQ\LVUy ֝I*/N/ԛF|5P7vQ>9XG@oY + +Ej4B|[ ++p&c5u Ū$p pd EޞSI,\wkҘSq鍘> endobj 4226 0 obj<> endobj 4227 0 obj<> endobj 4228 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4229 0 obj<>stream +nKK Q xa|-X6;W Ѫvu3s%W=A)x2z(\۳J%϶(~Xr)~XHR{ vX!x7=SYW[ʾ52K&&OC҅ܬ~:ӄr_H&6KfT*ڹiLR/*dt7:(TmоOhK$] +_3qt5nڵÌ ho2YvFQv20v<; La9H؄ N +B)%o4$t`Nb KvDӌP9E;H3.+wکEOcDłW>6g$pYK(b*^E rY:ćd.0qn"kdL[Ş!oM(2#$KdpكLGj7LBJDdܩHR !39j2}H%'#}&ҍ*D;S +j#ȨqtK:H$l -YY;, ZxY[i4yꮂ@5.̜R9|dsp(o'O-Ya,"97b4/WیB`EmNw +7Iۘt~<.d's* ₨insX;_&lC0"${>ʺLI\ C&pn֍Y:9ZRk=5 ]C>gدtPz۳NsW֒`3it-Q5m>> endobj 4231 0 obj<> endobj 4232 0 obj<> endobj 4233 0 obj<> endobj 4234 0 obj<> endobj 4235 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4236 0 obj<>stream +հf{`E7 W0P8Ta8hLz87k$*i Vrts[؂vI?eޫὛ_m͉բo2@3ń:^㱩ZMBU煞]qo$e`O9 ',*hu:a5֝v;So!bN(m߹f$~9Iټ7~&+'73[,kZP]v/-n3;JE  fIR0:6af|BȾu@Xqc6idW&ݐډׅ;-4xY5އNM([qf;lp(ޯTw/{iL"=bG MQ8Ld+YX/:sJZ"Hi7Bն;VvT"ɱgF,\a >-ks~V7JI읒 @dU) #zl| +WQMjɉ/hHPAp|V.CV}q_RBz 5+uSqX q%-2rTDĵ= #8mj$g,#gO6ICXJ)7F1wI뻨:m_>jY; :?1'?d.!mika- i!ԺZDeظPiSw@*_@pHYKmvۨ)O>)[Hl}VV~|кHȂ{Y-H6pM3@#n\!0ڰ=ࠉnMOznQLUIq,h gPn wxCL^ڔ,vk.'ABiZF[QΊuƏ@Fvי505i~䐚f,oYU͋+m߯gAk6n? +endstream endobj 4237 0 obj<> endobj 4238 0 obj<> endobj 4239 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4240 0 obj<>stream +NTL$Ob"|B-/KܣY@754Bj@;U $\88-٠ztp?$@8׋(NTM mz!ll}pó("(p$q(IfZIvK9c[h'k#@ I&ڠU;ϦO؍ 4AtUnЫWnANX~73W(ŋɰ-Uw?i*\۽v^2;t (Mkd }ၖF>)c8}6XVÐtxӹN/7/uܙ!)4FQ碽'ŵ ߙ=؈ķ?GZ2^WRP-!K\B^'mk`yzS$VyR)Cb>%C_σxwI*zVܒ5;s ԄDֿ`܈% h6sI94k63pWT0 :Gv,Hʨc-Ee[}Â`t4e+͟HDwnwyTߺ!w܇lwՋ-}}ByLl HKH~-J=>e/56io\=V]ſNr9a|,]w|)||Lp-Ut<#XgRt @(muA^t+,8̎U48kq1^"-H)V$'x3d ҇[,`w;#tY wxz΂˿-ԗWE ZA9h`&poNY,,) MG9x|`&ab@X}DA1Ja':]ybo(TP9PyJ_W,-6ʍG(V q"ɠ3@M0!WBʛ\Xy}S>Ċohۀ i<mM3*9_P6OtW4?AxvDϲQo._}Y,r^x:(>c3ɮN PZƼ)\xţ! &չO, +endstream endobj 4241 0 obj<> endobj 4242 0 obj<> endobj 4243 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4244 0 obj<>stream +FG:=-|S>u:}v뼮B,x):4s ͢%z=K>$Ld#iw9w*C] WJ ՘cCP^'tx1FtdzJt d$'';OrΞƱ +!!6{8꧝x+"xϝ]\p-jM9EDDL(WҤHǣoo,A's,pg:ZKStO=a &ZUi5JlqK{{EhYqj\-x΀ ~ZnWk񤡊fN{ =Sm TKZ.0-&Tl_}ZY=2)k(M/+ksgTHS5(c.PA 6NF[~t ³MD P]=u盓 ,J('(WAH;֗$e d4v Φ<w⍓?v)*_ݘ-#~q=\ɚ!]XnY-oN-f׬0Lt\V]XGLog]}a=2vV{*K*h^}5  ]5hj+U>ZP4$h;r.Fj;59%샍']lq$1bPD/Y*bի|XJm$֖wm.i?ZCmŌͤR,uj-\݋Ұ a&"0YX:(҈Z|zTXNXɭvc4E>@gܧ<>Gyk2!އ7]%wPQ7 +endstream endobj 4245 0 obj<> endobj 4246 0 obj<> endobj 4247 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4248 0 obj<>stream +dxVV6&b&q. p=4+ H)/sRg+|:'`RPM ]E_Q&yԅrFʙ,<1U2s^OJhXb ?,(qƊmora wܯ-<9-Ai^ `@nۚ˜llFiL19Q|Rߖ;F/v{Ob3-?$H~Qk o幗 ?vYU=G;%`!01hJ3sk@D6]}T}_l ($W:J!Cd~U CFTaTN?jM*F_B)ꂭ<6A'ɪpG~t@5ex( Ip')jXZV<}xKYsOC+N8\WMr#SUVʬZc"~3`8v/_LIr(ag4&2NXz9~@%#Az2 gm<͙lJ8Vi_=8+t{ +endstream endobj 4249 0 obj<> endobj 4250 0 obj<> endobj 4251 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4252 0 obj<>stream +%-$!ٰ毺_T@v?ɲlƻ;*Ix`:{AyҮT 0U2qbթEki,H.&c<0Q/|cfhP3oNmBǤ-yW#]g I +#.r%ͩidX +&Ӥxlh2|29Y8gM_5 usPwn,/diGڇ#g^dXObH:^ZD ;QF mpA,Qn.aZԼԨ.CR/@<! N^ +XxoAB&: tJ@ ct"3(V|(zH'YH!Ѥ«smHRg]uwV'}fzRd=פNBah%i˽_Hwsַyd.#$4ipԹn)6 Qd药Gueuڧ$1 };qZ_靦 tEǷW~;_KC}>QC +G|vM,mW[UO_ +9x:T9g(ڷy&K,b~N> endobj 4254 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4255 0 obj<>stream +H]00ehg .:",KxDz28326(Ï,7 REVfxٛb Tx +<|&1eN^G0O% O1_WXwKQX7|ê/qaVG[uXdTrgf!TӵXcWv _fnI'2ҁ q],]4-wu`' +@LO9G% ++߯,Ь_l v5?9qU #)uτ)Ƅȶ(t*ff4\on1\'=> endobj 4257 0 obj<> endobj 4258 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4259 0 obj<>stream +3d +uYv_WlAŶcHW6jL$OnV5O9P3Q3D~2V˂{3YD2 !x $1U$]?dsݵ)G][$a|xZ>27osKy2+Ï-oL);u?Ma2H}k߫RSdz0*UֽMV.3pc%挛F׉B]e ?:@nѠ<lG޹HCX2)+_T^llq(DuQ,A9:%S$JloѨXV}N/KK?&9%mBugCG S”uF2=x[E^eK:~Vi#|ð0qԞ|Q_jdFȒڅfAݻC]7[[z{) 24:#쵲ӝbL5B΂ԡ⯞H:(I*ʯK!"·ꀝ?aQVCp?ӽ3R6-5l~zBMҔL3lqxJq=E{dHxe~".1̞|F ;tyn&d*Z`9[M!43a,kb,ɘsJh4@rR(k.ۿz&|)^ *V?Advta1 HKy&ZFvY:٩?i0Yy(wq>3ۉlPcӴXr+{ڎiby +) +/sqz:L hv|?llᵧP"b=|:HQ3Meu +g;6^ [Go;E=Vx|uIa4I,THW,g*Uj({`25G\RKoů'淟bhck)|VZ^]a5$QOTA!+T(֝>,efEŧ +endstream endobj 4260 0 obj<> endobj 4261 0 obj<> endobj 4262 0 obj<> endobj 4263 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4264 0 obj<>stream +J>֫ +,!`YZ[PPc  AO:uoC`%8! I.Q;~ƿ+Vl0|PCJ\uctm,?_,?6:@^&5ہ&*U^w~yݒVz=auR4c-=bϵ0d%Wv*OkX-͢q^H $`OY: Ħ^ XnTe]֦i/02զIaB휀OOg䛚&{?EHMtv`İ0ĪE~%DH{ZrDwj3X"A򡓕*x-^lip +: uI7 z^P\ +JxGdT$0V(#=!>u&sr7m֚ zzʀhL?P;.fUy~a NE S~m݃c^FC du QIV5xrU3}w/{b.'S5,̓'_JG` [#K$l:UU9W +я;BYV2-j JA )ޚ_wEo h +endstream endobj 4265 0 obj<> endobj 4266 0 obj<> endobj 4267 0 obj<> endobj 4268 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4269 0 obj<>stream +qw=Ji4g uih 31XNg9*v yaLeL }OALW}?9@c +œ m ̂Iq`z]I +o'C(5S r4u{R,LK@؁D+yF3Nz~;x1C`߻0 7J!jdʍ{ށQgm37p L܈pR^rEӴ[΃= ˦Ch7jզA/OiQDN =j͋7AC I}ĎC\PWׇ"~'V  M)%cy*n)ҽ_ߡ&C$MۅQ8~ՒMã3}ltt>P>U%ƅ8H)4J䊇۩B9Ј˞p͹桺i}CA{<+(==]8JDj.?>Ưڹc+4h-Omu@[8e޼٥}5ɁM>f籕~ Cz쫾4;?DZg,P7mej)t5JOMO\pT(MsG9YPxfn6/T0_C /s _J$^ .*WUzCPnx{[ +D]"=4zĕ#SNw!Ma\P.UIbrܖTQ1CxFSk%zW@\"9V6V+/Ν<9 97?o_'Tl't~kN:a>%R4TY/cl6vċx~︖#phfz7 +0H1mo8y(W M3Q[@ }&w[ʱ,Ņ˸{2rhDR ? )"ֶ٦ !=$Sz{w_py&Ce +endstream endobj 4270 0 obj<> endobj 4271 0 obj<> endobj 4272 0 obj<> endobj 4273 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4274 0 obj<>stream +dHHUJQm7}PJcy0nURbݯ2կfVwh9QBi668eZ=ż\>t WXyh@"Fp7("3gč(ll/PDI(Ci@R]463{lݍx M}AiFŮfC +;mʋ=Š97 +;Mz}H}Ӣ$^ +h8@!I+F0k +Nˡ)4@C+vD=ZLno\w#u3+P#tߚ ukҍ"+E hW15HqVp湍^鹂?|<!t)̙KM^L]=.}$T -ٸRףDvȦݴ5c 9J8]̼8˖hEpM%SDXW~{ct:^q9i`"J-s V0Dai@sI^2݆zu9gÄ,ԳY;T;>(oZGDcQ0P3%4B,םE(_$/"DV D^eh6F~ݩBL[B#{/tb5j؃ҬUI|cXFc@.z턂k\WK- +endstream endobj 4275 0 obj<> endobj 4276 0 obj<> endobj 4277 0 obj<> endobj 4278 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4279 0 obj<>stream +q2( 9&X_Y{$rtz #>E{h)=$->[P gFqJ~jfypt"{qp~\pVcwS^1wݦ)[b/B< kK U-dyH3%t7$c'?Tj6_= ^UF&;uoU +endstream endobj 4280 0 obj<> endobj 4281 0 obj<> endobj 4282 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4283 0 obj<>stream +q0,; ˾N w,1[.L P!HtʩxHbX֟Ứ4Ώ3Ru1 ##Eg@zʞ*"#9[ـ13+.}bA `''=M8duvNlٛj}?/չc4#.EXR ; TV)@M1*~ `,u7=NH8,Y47C,U2̋e_ƹ.rOf =0 hѫF<@ުY4% _ѹU~͉ 6)omoyZ5Sl ]߫ !xpd?H6Z}UobKd/ND$rPٲ){mo1Rse^>Db lX]i8UVt/.12Yi|οr fj~4G+;Ò#i` +v#Ha<p[07ų,]fmѯ>N씮fvtRgo F$;'ⅧtV}Sq:?R2 _1_RB{-Am`K[6mLCb2CMUf5 jYs/hl˰ 5.yϓItPul,g׷uiEgOvKD"dPt~dƧo&]ڲ"a +_l*.2W^oԃ kAȉyZKjg͖-$Bs= EoJ1 +C(E#cIP(OF%ȝŠ==[?6[l[jbt 167;|kIZh(C}(DaU8UYvL_avH/STw>$*vn䊇VV~PFDA E8Sڨ%dfQEWc!*=R7& dJbo H#Ex6Cq<M6xR+〃vN  uǏQf.Oڲ7"MU?{:ymsqM;[! +endstream endobj 4284 0 obj<> endobj 4285 0 obj<> endobj 4286 0 obj<> endobj 4287 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4288 0 obj<>stream +CD?=~~?f;>F煴4mB"aҷ#]H3f}%Kg$8ѳ3`6?Z1f_ Y7^a oJ g٥o˂95D`¢-P^l}@[y @jf,e:K&H@[jP|ZA.Q+D]rH&+c&V??$}(o *F'/O~%>>_`o*zb\]ܭ(Hu;x׾ !2g1,q .4}hETb$z 1:yD\\xX"ӆ B% Iʂ/`%5D S&n5!G(2)>=;zi ` !u"gov&H_`q/,= ޸6?vC;O2>z9L= +A|`_ +EkΨsV0.rÿlCY$.Қi> ` r6Q ~sJ]J0sVZRㆫ9=P6e/E9z쁜 v#' |&qE&.}xt J䣣),Ÿ :j[-K.Coeghrʞ}z5ͰZ8q>e݀楃Pi-$+hM .D}N8aBd90UC{yR.[j X">bnVUȢO'}1TWOPۊX)7!h8^>[8Kd㡥Z9=41 +i]`E.2Rp-ۍ@lq{&p[jÝh1֙5yV]a`-,+O8!|=6ڍOׇ? +羟2K&T}$z)FdFy-*tdSfό-Lܹ +(ICCrȔ$JgQ~Xܶ KBntdꝿzO\R=!';[C2[ϓ_N3v& +endstream endobj 4289 0 obj<> endobj 4290 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4291 0 obj<>stream +%"WQc$,2xEzBfŨ\xYE (-Po_]g‡l.(+Q{KHs> endobj 4293 0 obj<> endobj 4294 0 obj<> endobj 4295 0 obj<> endobj 4296 0 obj<> endobj 4297 0 obj<> endobj 4298 0 obj<> endobj 4299 0 obj<> endobj 4300 0 obj<> endobj 4301 0 obj<> endobj 4302 0 obj<> endobj 4303 0 obj<> endobj 4304 0 obj<> endobj 4305 0 obj<> endobj 4306 0 obj<> endobj 4307 0 obj<> endobj 4308 0 obj<> endobj 4309 0 obj<> endobj 4310 0 obj<> endobj 4311 0 obj<> endobj 4312 0 obj<> endobj 4313 0 obj<> endobj 4314 0 obj<> endobj 4315 0 obj<> endobj 4316 0 obj<> endobj 4317 0 obj<> endobj 4318 0 obj<> endobj 4319 0 obj<> endobj 4320 0 obj<> endobj 4321 0 obj<> endobj 4322 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4323 0 obj<>stream +ca~+FGK|co%Կ0].3^'}%j-2c.vfH\ UkoqSPQNfBڻC1|NiteGivMJ3҃.{)ە2uz)1wD $wtc21t>YNTH{Oi fzeI4HW c1u}&;n:~0]U4X!W;JcI+RH~9fqcd^qNмjµ菱'e +b6`-PU}#Կ$S78A֍+A +SýqG?Nn4 v08-:AIpnxQc{_ K Ӳ6 CcPKƪU$AsdYलi \_x4noD+|D,jG5xlS~W0s,,@ +“'Yʠ2PK10Mi=nEys~EMͶ7fyX!5ÍÓ<ƙ;mlUw 2˷eR0m/f@lwQIWKwR>[NZ}$а th|jlHU hQBZ?R$7hcgӸ#bv V7:^\JQިé ~ovqۑIon~!{d7pZ 9UXwOHt/t(KLTXP{Ԡx +\.5:)lgeҼҕ<8ȗka25XSAp҈XQ%@1F ?3;C".LZk]='ɍci܃޳K`OGSXޫآhd.5ϿQJkN]"aRc4p, vbW9LפcY(ChPc0,v6,7lr)*?`#Nyyr/2`btx UGpFPn`䡢.uSj#=z76lLHs!iP}xyWlxqQL6l6-Jk"WAL Ulɫ~ <]tlx"#Kq+~^o OE [tV UR""U?6.j6v3AZ_O~|>d/DKJ®zcq؈q1=f{cg?L}}#P0Qtm~^|̶^F)DATjYYll ~1S0JZVQ5,e,-Uvj(휺])?~+5ݭbOG%$TL0#%]P)^3F]*7}Ø4nwD*AlFgۆs~ +xco|"Ͼ>ut)vsNc[HᒓtM^BuyT-W#D\x법7Q|͜+{x\Ӳ:ȹ $x +cYlvszEp]䏖s|Zg9Ϥߙ8!'=ӺHES3Q<2u9UYI06.bϏuN约rE].lzǯ߾یu-N#-bW )+Q34, PHP@O$ @0fkaDWU|d98n,j&MC>\l0'>/\' ˠ92\ibrz2r~^; Y擒2bbVZуd"tz`Hv2Pu ibl,҃K-(W_f*f}`20~, ?i# Qb/w+Kk{+b:MUhr?Qm$Zdm,v7qD',2kvF +\n@}`,)Lm"E3F16V"zLsx;dK@]OR_m i:h)anXΞ-MuZ3^QR 2?Rﱶ䨈JdoP]0sȯU^~Qml$,lw `+n@jIQ: IC'MccK"XbMn><Ը|P{h2pkC +I^Ц|z*:I_F~ZFJNJhJbg\g((`9L$5cJhu< !TZ\Hx%u[ +ohߝAImGNyȘL$ۗ6 +ڰW܇\9xAŕq5:()”h 96N$n5bj7UO L$ڇ1Uc1ٵ:Y_.;3ȠPT(AVⷭc,|` Ƀ.-WlQQ^Ta6 z$ Ye%n;ogJU4hNt;q&*C9o(er(0O:T1+v8oVulԝll/fSmΗl|&Mvjii%EX> endobj 4325 0 obj<> endobj 4326 0 obj<> endobj 4327 0 obj<> endobj 4328 0 obj<> endobj 4329 0 obj<> endobj 4330 0 obj<> endobj 4331 0 obj<> endobj 4332 0 obj<> endobj 4333 0 obj<> endobj 4334 0 obj<> endobj 4335 0 obj<> endobj 4336 0 obj<> endobj 4337 0 obj<> endobj 4338 0 obj<> endobj 4339 0 obj<> endobj 4340 0 obj<> endobj 4341 0 obj<> endobj 4342 0 obj<> endobj 4343 0 obj<> endobj 4344 0 obj<> endobj 4345 0 obj<> endobj 4346 0 obj<> endobj 4347 0 obj<> endobj 4348 0 obj<> endobj 4349 0 obj<> endobj 4350 0 obj<> endobj 4351 0 obj<> endobj 4352 0 obj<> endobj 4353 0 obj<> endobj 4354 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4355 0 obj<>stream +y];!X7a41PnmIaX` =/0OT1Nnr GR5R]@ +?b?Kh=+3 lkPvp8yo6}g5zRyEdS] b%p0dBOpf+iߍE7hsNMedm_wQ=xA0;Ss=IDœVIzcn>*%jdF}OWtLÀBba،B} yhKu)\,E +AA5Ucfδ@)X1,˒UұwK|)\?ʈޙx{:F\؏[d'c M\Fe.v(|,֌fs[FBXD`p]RL>Z#{1YJ4ps`=2k8ZQk;G_$(3~{1Ԝуe[2p4wޟ ?tzNΉsPnRUTIa;9 ̨:_Tzhو͓$,85m +R܆> 'kP\&U%duͯJOAoX +Cv䴧?dl +O:yx;2G2gOfHВvNH%9j?X<}n ~=`ԵѴ_韃NdK6dD*h!ǵ1>d{0QVB2AD_$o kRW&MpSy,_fxmld/S1pLa|:!Cf۠Dm|Yg K&BT4N0elf-iEPBEq=)A*YU '|33>&!bRFahrt\8;~P~\LPf$Y(hke +`eK̰_i,̅#,ۂdTbḬ!I<EMt#,i0%l!7`$OQuAiG7ľJ^DN0lZ hc)3$@#hА8YՔ:O]O"\RiҵH}Zn[&i' +xCIHJv +,X6D[?xfgS?-@n\yœ~2Ѕ>3&,-VG3_Az[nn\x¾&pD>6jlC4a$뜣ӷjcNh7B"zvq~=>~Oeef!m'Dc+h8|V>9 (qdH-\Hgr7٘ +5ۅ9kZ (u-֝ySx,q}x/JPO +S\OeBCdtj[gKoF WXc/ѯh8=>7KUC< +h!ʊ¡M5}w2x%e=hPpK|ďw +|B9oIVF &JiMLqм@"L@`0};,W *,A짇moj<nk[,NBzbƍ1ԢOu+\tI5-{&,'-}0p~fF;eXdoN]vHK#W9pmԥUZ%Mzy8Lk?pbn dDyپt7zƯ{65 @HZuW+W=hOt*@Sr˭ (XKzS[q&v +endstream endobj 4356 0 obj<> endobj 4357 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4358 0 obj<>stream +acF,]KRWC1XG/1"ۅ5A%P1+Ǖ:YWZU`eN{TӶQT_U{fm cQS[U^9?YWEt%|SN mc\NWEOeE7oJ,\I(x@O2$u<(@Q-YF>@쒊Dp'䉱z#~(Л |Bš&'Mv-/E;\"Fy5՗s?7ؠ,e6n3|c_Apam>_E"uZP?$V,~C|F7cDQ7Z{<\K@ğ׈t' LdYú{<Ԋ~mcJѢVD@eq !vőMz?״U/55c8Z}qZ<[>ybҗZ 5.́4%tU~w7+dOEdg;q]X[րlLLBhb ר!&V$ij~~Nz +C>4CuudFѠhVh'h ȫAaz4&xF$P *?UdkPxD6ya !(gHWRN5İRΜ!\ 6ǽ _AԥO:QJS +l~*ThVk -|%鈩 Uǩinw25,p} V*| +EsQ{R~,-\wMru*RJS#?ǫ> endobj 4360 0 obj<> endobj 4361 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4362 0 obj<>stream +`gyZeBA/6ط)^ZQDx@Y< K}G0xQK +m邑sc;>6jV ԻiZz,5nA5%DLj \c +Md"!2ݝ YWi&S +K>F мbכpYqCяt -k2_@1PD} q9qOhGV Ja2x"P D)iɬtdG!$f6;#ڣ[{'*%.tYMgs(R5d +Q|`l|rsn6G1I?P4Q論`9$97Bl5Oh.$#5^;]ܘe xX@vkVYeZ~3Tz,[eJ~56={8f z5Р×9fÅ'b!\Ao1^c\+9notK(|\e_g>7M-=q'E?^5kNj] ]ivئsBq3E"I],&4$IvVhյUS5G +m1kCae$?1K,elͲexLC;W_G!Gvh}RwDYus~RsWsx}&<5+ޥԟK&:N5˽ֹ< + 4S\"1fi9oj'G/. S5 +h$}.mb\D4]ԆLup"Z9(t5+U6M/!h >{\L|P$Tn_z +endstream endobj 4363 0 obj<> endobj 4364 0 obj<> endobj 4365 0 obj<> endobj 4366 0 obj<> endobj 4367 0 obj<> endobj 4368 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4369 0 obj<>stream +`kXZL滏!U>? *[n<2_[ pE|JtE7?ڌ"FS LAG&:l!J 4.z ;sFI^U~Q1gDt@ge_'q?>IK7"l.yy؁Q٨rrȿx{-fqn~꾉5b3Z0rVGi@{[1 \G5tSehRRwx} tAMB ҍipꡭ@v"y8ٕnfiFAx}u96Mh+m"});o!3ΝJn0>oK!W})U9 fB٢G@8IܾHv`aeBzjAE _ֲq-s+bD2cN8tKM.2 ωʻݢWZ4ffJOGsqlCH/k0> endobj 4371 0 obj<> endobj 4372 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4373 0 obj<>stream +QM˛L0 C N5Esh 6Uc%ɿٚ; +:ޣtT2h1" ̏U)"\:[/dgAP"8>"6՘e+ac8(-ca'VhC{UudŮ&P=Y; jeԇi)[A殢s![@7g09Uzu/[eCl617=73x$cG;Q3>э9݃\CczVܧM> :k/^&`YDo4=s5#wu[J$YVx@}!42u1䎴xX76N + + ܫ@xU<# /)MnvhIJxG&YEY}36`!Sx=CH6+ʽE "&&-Oyu[$Lykp$` fOZ,<S* WI-$*AC +Lw}klm\Co 3`p1&&ß<3&sYwXAմ={UҰYOV7GnUMfvRd:gӳ'㿞\ ^TָE(FYƐC7n=BfӭV4[nBi!t.Ҳ/C>hנĄX%$!<)O :q^ a.C$|; [:kV=J,l>ة`nRrɮK M} HP<+oYL(KL)04A7O$=7ȗ48N!Sӓ*'M/GV$j?f,RC 8л3mKI)D4z]aB\~]c[1?$8#bUŸހG ;Zk"ZxDÚgf edeX dc!I5@t +endstream endobj 4374 0 obj<> endobj 4375 0 obj<> endobj 4376 0 obj<> endobj 4377 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4378 0 obj<>stream +p8xnbɪsXhDSL +Rt +\~;" -G +B;d=}G:v6t31&Z"3ܰ_Zev'NV UB2xYni%H5-kPF?ECvUwew71r+@k F$Rzsqo65% +([YWbFnM\M}ML $x; XXxŗj=my^ڢ8-ԳI8tɳI{>Ԗͳ oZ2Ql*Y @Q7Я0Vo8So 8J*'$Ǵ!sO+@>Zm˄HE!![X8>m8b|#{+ .U YI&h :$!%%~D[E(n5(El8ɩʧr{mD'\0|o*Z] (M{N\40³ +c ?2Aʌ-*cS3so^od1j"2eONT7}Dlu zC6֫M}є!SzMp[mLyv묃-nTײy-2I7!(y\80?DV 8ASdrJX:mBfBZTSvCS.g)BU +mʏ4mTg/^ K1NI{gi {}|^b*Vhf9׻cLy# ޮY:EP@p)q}CiA5Ogɹ]T[ -͐DStk$ +52EoW~h(,%LUU< u̎nu, 2xE4IwfITKӘ' + gAOPI bҡl +/t{*hONWN>YgvwU`01Py,$*NiPV_:#mJ@'cgU+Ձ +4e8X4޵VjIN+= ux&h`C%.dsH`> endobj 4380 0 obj<> endobj 4381 0 obj<> endobj 4382 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4383 0 obj<>stream +BBc˸1]=\N3?gTYmt} sde^yU + >3M`1'tIg aaOP^$mO5Cնi`GM97U<}.3ZH,a{N칿+)Ե'M^g +̭ۥ6 {Bcұ2FB*F%lJO/:">Sъ7ÅSaLHD,soLceQ°[zw7 Q~?"jU]2yV5U.xgYT7lh^+z=bC>ĠC hpOIˬMz`2 <:boC У 0񮌴L68_x @;=gBvOL]HpQ>pr)MM60LJ6cXHA f킟xq硿}85œNAoy* &SخeiDhAwK^E~@tQ +~ԇePmtN[FRq%WE/!NY:zky>Aa%%B>01bmCdl\gPhDɑ겁3&,B< ~`$c!e{1L̺G[@1o:::7RsycDgKEIU8,xSqJ#{צVHi|"?NvEw-8 ~*% sH K¸~9CtĸZ.u}(%{;fhg>n|8BYl#fHףe|`\S͸]Ok"~pa bbḄw6xBv'l:RK̈dIYSj-SHS +endstream endobj 4384 0 obj<> endobj 4385 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4386 0 obj<>stream + +낁V`(' u{4tc >;GL܅I`$|g"f3Rb?t޾UmI М#zӝnwOخdkPAҽκ^LƕL3Dekǧw\ `hUP9윩3nTX5U<n K>#sM04%41X5goP9\Adf) mvs:ԣ>@uNъsjTTHYQ%ZGv)@l1_VQKxN\ޅ-PS#IYP8lz?@k܃d[J1Tym#jH`J%xz|v d K:sdw]N#RfBK|ibxFؘy ئ;J90'M_W26.$=H 3#7b% q\3Z. ,hUy',WF09+(AtxOplH;/M3RV`("˦0-0* ޱ}[׏t^`b\/cnjd&:J ڊƏ!7kgWXEױ +W$Bgi1+L)Q,s]&a-CǦ&YݫS7-ah*Cu> M,VQp"IŌ1$䞋0AiE-$ +>Ƅ )s vRG}>AM>nL״4xSAY'\ʳj\EaMxEWf~ %' +endstream endobj 4387 0 obj<> endobj 4388 0 obj<> endobj 4389 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4390 0 obj<>stream +aZu>tva5@ZsF>8pweEc:%t#/~ :o|XʺS"4uݴmm+žG*к X?E>7čGsolJ;wMe{汽)vmYn A h$īJcvz~MChkH3Hpg/ t#AXQʌ{|E9gg0[#Vf=Tx$i `mٖ`{IJkJ0JSC1JAFLm +#H5bW\K{KaljQ"W"iKuۉ#?pHEbmQ C,3]^epq7h2NFk U30yrُchmtan}KDڕ4G#LAu. C-`s)|$d{2 5 "n.!ҧBl& Y'i(d\ִ]؃@70ݶQi7DpM@yoxe:l륩ЮWVmp'^o'gN;z}j_8uHqy.q-&jj^w-tdfS)]YUjɇ9ˡ77ΰ P5g;z#f{L|Ϙv ~p +:e\K6+IF"K 87$B ӥ#2x,DaIŸsMR?a'C'5<;lO,,2zۤQq|y5ykrC!jBm#\4ZB3cr> endobj 4392 0 obj<> endobj 4393 0 obj<> endobj 4394 0 obj<> endobj 4395 0 obj<> endobj 4396 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4397 0 obj<>stream +<D$ S[>X4^pߖ{xwm@͇99dџ("S*cSSKBj??H+ҭn\0?%X62ؠ +;ВG!$2 +t7e@dGO.Qtp뤃ckʇn2WJN\}."9նڮMdc] P!/DؠƋY :Z&Ӗ+zS$3青!)_m!hրf?\;^paK.$Reg7E0&=䌂-?gq"7-d\L6es3Nk癢M=+iԿ|*cI`B3? +Lktޒtƍ&_vy9d琞o6EJ}09:[]eIIFրw'궧>DZB}2ROq{*Lf_+u_!\V_ kݑHzi}{kU03i[D1Mqѫ*cOjv +KP*Py9LM..~z0 vj }ClV 0凇3t+A;TI/<&?ZQz6; !`#!tI-ǎcSD3*eL!lyI\9 P;Lŵ_?˂a8IZɅ q 5CTS;HF:~2t#:40n"=pJ +䔜ڂvl1L^,Ϙ +4K'u;J=5IwѵE3|#0#YI0.VEXݻ'2 O `Rk.&{uPWc&ksϒ~X>݊Z(r&,Bѝu+n"=jv9h߯ +endstream endobj 4398 0 obj<> endobj 4399 0 obj<> endobj 4400 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4401 0 obj<>stream +`E̩V˥q\;`2l"3s?@[XVY9ϸfFWݻ~DGC#, pxRh@ѥ!]BIE JUlJD1^,շ j +• "lD5I +ca|vx!d0AދpAls^Xmԅ|+GGi"*ml1'ϧ-g$YUGӧ2ŹO0bI(Pw[9d%>|ZENMP.2lL֟$o-]c=f4Yp=z5y'%%I9˚8ī]ϐ_|KXw!c)^q"qO5aYfj|z@7&s2wڝVFzu=2o?CJ@pk'ZSO`n_Y-zb\63Qs+$Sn@H)~,;ȥh@[E_mo~GvG/_}~.NfZ;jwU׸US츸e_po dqܧfٵS͋ 86fĆHl&pA\Aʗ-8'"q`74,<>3+e~_o/i9s|[CEj9ry`-.:2>BmzWAbQg /9Zp"8 PV̒&2 Ϝܫdy^KҎ Z_ĕ&Gg?}N1ZMƅ0۔ߣ?ݹegkHb>phӵ2^8,}vө,δ-_ +ݪh<V?kCee:tN]iq5i!OC^Fq87ߔȴC6bpiw^0LG >> +endstream endobj 4402 0 obj<> endobj 4403 0 obj<> endobj 4404 0 obj<> endobj 4405 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4406 0 obj<>stream +,Sg6`|^2>}>Ӈ^V1IݽX1 WDl=G mpٍ_n,(bLzV;Myl#'ӭt )%l y/9h2`$|9ݼ~O +>õ޻׎snnC oqck \Ydk(r$uYG~)%l:r2@a-i=Y7Hzؚ>X3XcTI?i#Dy lXmH ۋiİ\u *=1wKK0W4)T屑ef S;A/)E?o_$9W`~TYnPuB=ꚼsLU~Y<>vC=ivU'#{­hg{KL:JB7JsVMp,fInbOfs^&ShKg\=.9"yye/SPDؓ6rĶI{ڨ=Ҵy-Xm>cz^oӜ$ +2Hf* L=/ ഥz|F30<:3RD H$)O5khwHjCOW,aP;ןϻ;K$5g+Q&"MFD+) !bWX@y6~>F"lгqLz&35lfY-TO|TAW9oDDB%_ݿxDHAi%_1\l0>ɰ:Ȧ.3Ģ lx6-K\,fpsAK d]R +endstream endobj 4407 0 obj<> endobj 4408 0 obj<> endobj 4409 0 obj<> endobj 4410 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4411 0 obj<>stream +xƮRjd@ݡ.y@mF p }POHP*G42Fbsl,K\M [S7 +M/(Lgıt"1f/!2 :"ԅ{ /3=wLj [$h y@dkҶ۴SlгK ,1+B!;fr= +x)G[L1f[zbC)]tS63v {,\TV/IV\ +w ;s ٙtSHk/k%,ͦT6l|$F Z-z]N  ōAm`Tr:ʰ縍uqE,Gk'4 ޙT! ǨU?,[0lcP6gQWO1 +[y|T!@ko?77m,TMĢÿC]" /L<{ت4.ٲUv(-b"ku{RGzqq]&A1UӬ߶:vi\,U@6ʚgo`x2bB ,4A=0flu(ߓ*v3wK퇅XEψm1:QEZ՚l#sȷA4TEpb?Hrna6V2f#ڭhʃoõGɗS9@1wn2H]X-'*XRG<oYX*TQb*vB3j+z0` 7SJ@+vYH|HzNf7(.t{FfI=7gwd;tqIfwbv(70hlamţh bbOn̎B8"vεu!8x>G3H]K%V5{~{ߡ 允dNRΊꅹ+pĻ9K/rMjXU|j+ +ՇhYU&sNRmB[.juݙrvTJ%C4ۙ\ 8&ߨ5U}).9HT͘~C~20`)i1 @d#|TC_{ +endstream endobj 4412 0 obj<> endobj 4413 0 obj<> endobj 4414 0 obj<> endobj 4415 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4416 0 obj<>stream +lT|m +I, 9%|0x?k&\0Ks}t%-.T:xt6|?ờq81á㻺+g{Y)ʥ +/ۥKBಠ?\Cf]ǟ_(oOԃ|>:Z{Kli(۪o2u#}۪qJ (MKHcL[ŋd.ϙŵUk&⎨˵?Y-▗c%*Jp||s;І}> SV=K a+Waba7xbtَNO| Rt7m8|-oX5vaۍdIN-u0;n + )Zh̓}b0V׽n w οZώ)9!ou)A z+l%@wƪƙs;&/l}u{ e@!i0UR,WBHZ3y2+o]i)Rcsxv؅43]v$݋}۽?b7?ϏxC7_yji57 ˁeSRU[WLA;X=] J9ҵl,M:Oԗwr-N +4hY +ъB_i=͎q8Y' t@،b(pJ'W ^^CGxfQt`Ɣ TvW\P1ȧU ,YPKTn݈&Mf*|[K; Bݸ}~ sI΀oMWbaLJFQ߳s9fƋeS~p}W~Iɹ +endstream endobj 4417 0 obj<> endobj 4418 0 obj<> endobj 4419 0 obj<> endobj 4420 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4421 0 obj<>stream +dAS!މC|ǰvkaP Lf~;v8qWxcE~.?*\aIΎvCa8gh#VlַzQI<.\7HUe`ΜPl@1x)&pWWY.Tq~ w:/Ҕ% a/E}ѹ5QߔE^wR+q>X)Xxm0V5J>ljNzG**RB9{dRwE +y iRnCpK,ͬ@Ex}(;}*PlmAN~1UB9:/mgp9d}vIFlIEy,rLֳmPa[-a93T0fVO=sI|J +4վ.p`D=R\t좒\ii'8J +*J2̈́Z\$VW2wy#X߃=q(m*&G_͵`6TBBjYU92tS{_X#N]T!+Q]Ed}6uo3)Xhb7Sh +endstream endobj 4422 0 obj<> endobj 4423 0 obj<> endobj 4424 0 obj<> endobj 4425 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4426 0 obj<>stream +ہe$EF8rxh}PE|_[3H{Ċ#e1f;^EcN aVy' 4RKi)A9gG"eV*Ⱦ5qn VVRoZ}3EHԭMX'[;ѳH̙YfS\ TLgJ:KjSѩ2eŦ g\_H ӳ@=7u#D j!6\z=XjٖKm!.24bl_*t~*0(mtfG/L8H +yzٗ ?`s'2`ҝޞ-TZdie]W-Cf@tq#X|aJ]xw`o>nh!Dͩ+UsEP.%įe5 c9QzٷJ0^HÉ0``L/<#6HNTܹ8ʟO(bZ_BA1hN +n/py3\^7v7чdVF@"ͱĈ1 ^L\uS"OX3߭I)E@V9.y\Dt}Й|=mJXM6r6-ė +vz\&(:j(Ar#c:-`1GDNi,UL7R/Rݤ[2)3'<@W k!dtc^3roeɩ fӖ{93Ϯ-Sh^jdokũ*|(L;> -rUlɠ"*(,HSyP,"V1`%1!xNVn糘`4a9]ޕen'KvA%Q]+,#p!i سERoW aqhӈ,`7G|aMd1\~>b͒F78& }WCѭKcEۡ$u^h%-=:Ēg$LY+g9?ȭ. 4BCiLتg]`e+ > +N [^SJi%BJP2[+G~VӉ?-̑zPl~(.-Kښ[> \Jbi= +endstream endobj 4427 0 obj<> endobj 4428 0 obj<> endobj 4429 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4430 0 obj<>stream +Ci0LrqPA -IM+ bn{'Ƨ/3q3 +Z;Sk&هDO0xIշ;9_"3\:y5o Yk +g+RRe(B[#% +?L<}bKd.SHR''a 5Qf vyE_4s9U*nuµR~X⍴p@1ɠ"[>/#B6WEو6ѣ ϏX\ $W;F /hHMV8ǢZ >~z(\Z+t;jr)p:~2 ˠA-s`dˮDY|+^Pݜsu +"كin l?*GZ4컐Lj}kr,C݆̼+H J`ܢ# wZy}x:9y'% 3d"szrC23v#Se@UCǛ wO`SL6]3S9`]`66%5v g+49<}LqG8BRn+ xDt`EjEЕ%}n" \ Iʮba1'ѡ΃x_^yr{"V/Dwq;«ʒ;&ukzl\x)KRy ߕ(st 7١a.E~n.^2|0\T7*љőumK"Գ:j3'״b"R>P!#Te1SWXXnp@+-s{-Ty!In/CLI#b عcLY^>i۳W`~<׹* )d5CA,02[7sM'EEG ̯iiM8^~Slbs7$^d`$pTE;,2n`{쐇fB1?9~z0׋eL78_y\ +endstream endobj 4431 0 obj<> endobj 4432 0 obj<> endobj 4433 0 obj<> endobj 4434 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4435 0 obj<>stream +5v~])r`+vj ۿ\ 0( ?]{ /o\pqchڇ#6M2Fߠi5|8"y^M2*L@kuL$(I!4bOBxEgm{qۨ^S^ #LH]qL@w+| aA@ܧA +yuF5 V`6jjvA%Kcf3BtviwTӸ*Z8x'Oز:UW]hwT0*W_5_RWN}Z[ӄL'&3cc$Q,hcA[S3´qGZw=ToMEEyx<PP&u~b+C9 -L5dΰ҃H&A7_p̨gK.l̵<[Ći,~Ew:- v@Ε*^ rCܦOy4rSC:'CJY lKڋc|9BŨlQ˛i2+4Q'V5UWmX6mɊ +ş13f$Gj8KNSQ<+B~~*cm^yI@M{j|f(6JɇR'uX#^! +nV@ՓN G#G>bU%DWb +esZ `zW6H+-\R10g!=OjYwBk@kWt+\ai' +Po{wng.eW=c#l= NuZ,пew|PT%K-l5lȁ +&u٬ݽV#!AL9р#^^A4lլWe3YހTej̕TKA&StydjP8:AJ ])‚hHV :9G)+o~)Cb|[  +endstream endobj 4436 0 obj<> endobj 4437 0 obj<> endobj 4438 0 obj<> endobj 4439 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4440 0 obj<>stream +Ym)n-W+;&eC:8QZ0'QE,,cN[~ǧB,,ErYƭ g?wa̓-?fQw Zl|!Ifm+7q1ܐ*1!_W>$XBkDSn3lbbxDKmq﯈uy+Z_u"Z~SBh܌)*k cfuIMMw-5zm7PNSv'IO+:p^à7a6z覸_.۔GeMl)RWrqҒ P@O޴F,4r%lgIgNE26KRU2lOXO +HรCSJ}1Pw{Cʁ[>w8_,_&ܳKw-m20UC*0n{\ד)&vw]pYQYp0Y{J&YRD 0a; 9@W/suȸ\Sh轴վӋOOkP% s' Sya'C> endobj 4442 0 obj<> endobj 4443 0 obj<> endobj 4444 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4445 0 obj<>stream +=0#MpjK÷//7!Sڊ+`F%5AMUXPLjE5L)o=ms:qnmad KdΖT|+Xtc珽nz/:oT1(> aPxW^?^߃$kLV^~D92n V'g[?gNZ`kN@M OoZciƍ_{)ͼ!BNVLt]้P'ssMi@v\YOpbWSEZ)+MIG4R~JQma(jKUю!{qcYYOCNUBԈ#'|\GR#f>$ uf˚:4 vx|_zJxJ򪶜Si> endobj 4447 0 obj<> endobj 4448 0 obj<> endobj 4449 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4450 0 obj<>stream +7HH%wXفfꀄ:?}岜_\^,VX+*&7Up@AjxT:ZXE+D)X%"VŸa9}_6_Ajg ijQ;Nby0baC )38;$Vk.].?W21mw-qxR{Z{b*U _nRr"+8b5l'o3U@>L.jo,YsT^)Nw$WYdh ZLJvad4 -gKzE^ᰑ~31ë_%mꧢ؋5pc5=8B7 G4ňv${TT|/aڸ H'MN)މ[ +/_ɴS fC5bXb:VQ%z:,T Z jLI#I{~*I^(9|S0l'$>b'}K$m@4?0M4 Y{Οl[VbPXDm#y!д'DNP+]"ۇP[VUe #RSΙgOMHE\s#G<?s+`ϦKN )^:<1FbEXɢf=x[{wUƭ0Z2 +;Kwe,SׯSj3wd.o?΁IN*ϥ3`FEZv?^1<+0g|2@dP\fI +ʀՐyEcUmSt|ҸHgC|6 Y VN0j sVUXgޣjK.'j}tt<Ǧ8MBY4.y +}QbZM/mX tSm8 +endstream endobj 4451 0 obj<> endobj 4452 0 obj<> endobj 4453 0 obj<> endobj 4454 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4455 0 obj<>stream + +e2"ڤ $C&W$^7^'5=q_q>//y-lLK(2@Y>;rM)0Te!mkL~=رRѤ)[Kj:06MA:ꗨMdKV̡dф@^:f!H{g5jR%i!mDfFa^j| #9Z{@5sE"A=vRi_HT}A2lu9Bu\wF˚b̴z{=/7W5qAwiSӫ|UO~pלvP. <+Gm # LT2>L;`84om g(g kҶ7ya\m8 #{~sg˔ ҹԞtS/bE`q?`"# CTz{ F,bjP9YE U.m&ȘٶP?U%|L`vbzyzE V|vzBnƛ08/UnJ;Uv7E@/ vM_}C掠}7qWր-yoF`_0됅/@J}(is+,"ټv[%}wBGb / X\<(zi3(bִg'tK0sU;:o][!/{l d}P1/vKӵ\b ATAÉ%x1B΢dH}6V%ϡ$9UZ {H+gX2PCEȨGm ͕BrZI7^IC۽Kd0%UW.2&-dT%+/M#pdaAu8^A)[Pز;E\ +1QimꕕB\^c3X>r/+ls\:+k:0ǿ4\dǚi;MG7ܠuer1 +endstream endobj 4456 0 obj<> endobj 4457 0 obj<> endobj 4458 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4459 0 obj<>stream +~M!k5P YDteɓv%{kDG4F|d(r,jACֽ-Nk%t>_|R,IU,iCJdh?p$1_4[70މO2ArgfDy)y}19SIȯ1l+[._ϡF}EoN׫~Ӱ@vMGuu l> +wx$!P_[}H6"_ f)z!G㺥[HRZLNT,4?yD,cܾ`\ ~կbR 0*uZ}XkxDV.r[@R W^$M0NWJFL3_ú7J^< [GYR<"T #_pm7-J(ew2wfFkA +"9ُ2C>_*I,K=SxؿsG^'hn9v6= tJ1NavA,lQچeHh_?rcP+t){IdE⠳&sr +(r|m+悢x6y80 (E#f\#@L LMUUWgBllҔHNuUH8X}6!!-e8f 4JƋj~~LPW)?v(tWVyl3Vyv#NxvSp77ꏐr|ǜy֖ܽ?~۫;|mA~};=+p*ӗ !<:9I\ywk/ha6bl6BR!I> endobj 4461 0 obj<> endobj 4462 0 obj<> endobj 4463 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4464 0 obj<>stream +@[t$DL6Yq$_P7(r-祷\F43gpի -DBY+H f#v][!ij @DpzED ,=ȼ +׼70Lfs +b`Q̏o#G + |qC' p}+Y(5+QӱaJW (Pƙ$\ +pqR֩hڱⰰC.r\IniU̡跼kZ"e >U 2<L _ nʄV{)@ jY\dc%kP(mpqJڱ[u~ړo +al %iD +%[n=-@uԐh0m=_5Y*TO XrоД4ɉ'Nw݄iCw^eqlTe<.LӴvnpُ`f,s~[IQ\]x4.w[Vs;κiD*&9W\5hNa?2s +endstream endobj 4465 0 obj<> endobj 4466 0 obj<> endobj 4467 0 obj<> endobj 4468 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4469 0 obj<>stream + PpiP8cƭz:y|4,lqr$ϧ|51PӒ3= Ya"Wx +/詮Nf֤]|\DG F!Ro}Kڠ+zfm 6 zo nVk†"qV {Lv{|69`Ge +/݊T{_o6Wj1¤үN+& +Y;AX=h$!YK{ ܞ*|#c)-0%svae"( "׃W=!^e*aYֻPތn~epkaV[ɕ.:N"ڜ74R+tY,@"oWP?G9߬WAPaf7O10 4] \,?yY\[?2aBv}$qsZvH +TPʆi-k3 [?UQldܲN$z MNlFxǩǭ<|x_ۈ X0{x%~Wd4MiPJ!0}RĊgY*M?ZsQx%aS! Gbf +4fB|㓫iM(oY9O  %?@1xqMItw(K=-1 +>-!!r<:HzEN; +sЈW}?MBNt*)cE*D,y>Z8Lӛбr$YDzjSx6~&ENHWJ$&!mSi[3+*CU#]'w oN6dYZ| 겓.DqaΧD.A8Ů«%@PQ.ڹnZȣ6$mf tm@1,鄉&䔻Jwޑ5Q vBQaAc p& +endstream endobj 4470 0 obj<> endobj 4471 0 obj<> endobj 4472 0 obj<> endobj 4473 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4474 0 obj<>stream +#cM+>RIR +>v6y(1D-5};Nem54Md୊ <}3D+N)h=`T]2CDbaUxF'Lhss8Z%5tLB W\bC1zI!p!Ɠ{`l/_sѷTxURuMC">0vݞdP=o0 z0/)8H:2q"\= .(:ʦu +Dьߣ1dWād91"QA;Sk"pWJA!iJ*+ư_WvGAAR.jʙht~,꧑t^yj{ʯ +9}R9x +endstream endobj 4475 0 obj<> endobj 4476 0 obj<> endobj 4477 0 obj<> endobj 4478 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4479 0 obj<>stream +rMϢP EP ,Bp[{r%ÃVtYD1 S<.䬛ՍAf$8ވPhuY`v;%#֠e4( EN,FHQAU!a3m޽4a9kDHF^>%Kgsc0`@ "0yeSE+[U4RP|~6$~)~*x 7Ks/qAVxt(Ӑ8(DV4W A0~:NEF6^˱dIz,E SKv$T*,yJ\]b9eA)uNGh a[njX7ñ`0)^=l- ^qk fKĥQ;A`;Ҟ5e)/b!.=g3,ظL>ȇA Ǣ<`@w9#pg,}H׀'ŧǤLC+KϺ.Tgve6#n "۹) KPc1ߏw +p@Uk96?K^#x*sn $Nl@;QƴpYX7`4~J`NT9!٢լ"a2rV".yl9}b[ ٦TGh66pdͤ#br2B%z]NxW1 +ެi`)[ƚ|R9zKF5pb g~HA^AZn6)ђ*xiP=[ .u8& +#"3/ 'UAu/@gE%#KeZR&ɭR( O]inT/fu,+ޭ:KZ$D[">FBX8S};B!P,DH|So/KW*GD=/{:! iȠ2rOi8k2a{ E ?^I9Z3c +?IįC*Q+ ¦m^ +endstream endobj 4480 0 obj<> endobj 4481 0 obj<> endobj 4482 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4483 0 obj<>stream +Vl5t0!N(ݏo` PUhy s7f 6\h)(,n:lK97jwcܑC и&g+;ܰHI5m8s~~ʟRTltڕxHʏOłOAlq k +.5$*S +ά/Q*8q^sF5" +cĻLp,D ?hvow5Qx6ہ-YS x_ۓj5ĴJ%(fD<#. ,+NBҽY}f qͧΩ%e s(1hjΓ`dC'% ho +\Zk1VC'plteA2+R'g7Ra رbC,[s:XtzBI q YPܤ@Y7π\:yQB:n0IZwHtC0րs Crjf/˞JS8ߞ/ο cj XMawB\>6^x/u +1?cɜMx5X rϯ0Y3fJPe侉@\ K?HrAZs+4|~T٪;>EN舎+lF~=nC4p~V⫁r$ L?YߚZA6fsh!Wn$ )ŲRכ`D71FO,eR~eXm?s?#{B>-P mnC.>(|ecqvI(K(DD}:%0=3Pg‰liC`q*΄uӘ*ڊkk*'> ;Jkx6-O*vܚd܉gC)ffMV,vz=d`; h!`aj5!Rm݇1e/L8.#/җ`i+<%BOCYT=x9qπ6穬q=>ti~+;F *5x _+Zk6AaJ> endobj 4485 0 obj<> endobj 4486 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4487 0 obj<>stream +DD=ř9-"FE[iCZ#2E-{3 6hחDei{9+CdVnҒlԥgVAt[Iݒ -牶rI@S華ϴbH3${مԇ}!xDrU)zsؿ< پw% w0=X-i.gxr{S8 '|jŹl T)Lp&~i> +z}P9 c_o6V;t8!cqIvөzK* +endstream endobj 4488 0 obj<> endobj 4489 0 obj<> endobj 4490 0 obj<> endobj 4491 0 obj<> endobj 4492 0 obj<> endobj 4493 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4494 0 obj<>stream +TxeA|}t81M\;%E ؄xs'Ix3rKZ1Kߪ߳v5^a(Puᳪp1DIloqswC=6$7ƀogC ᥧnL@ߝd&SSÀB f= +FRfz NyߙI u+ɜ ˗.Q>AOw]לəoLJV7'^Y[^/>ԣ]Qc8%+c&Li4sszǍU8ʫ +X}3‰Xct/)ylc(d3χf $7Ox!,ϋB>=W/a|T $uS<)3%P70JJD +9@'ƹg[hfS*g]XeVe(%Y|٭􌣆a @܃U>[%ܞeQաM: a]h sv$#W}nU1c*uŸdJ#OŒe_nt 3*pk +=EXXө[r].B;F8^jMg:S\^|ok=3#vSV;RqXdI`-"$-DZ6i9;ZL-:q8ވ +Gh^RQ ܩnDvU踱[ub'z&mJ;/ H6bf,n#=%C6]V¥ϖI&ͱ)7o<~v& +(Q{rF!=c&]ϛRŃSqj8Sݣ 6Æ(m[ 8dmP*!SCL +e_Ӭ_8xEXЎN%^3>Q6$>ÈL,d5sUHgr҆oŠ}s|'7!k##g'7:!*?~qkA;AOE\;_IMX|Fr87V$j˄+ͥ.pW%q +endstream endobj 4495 0 obj<> endobj 4496 0 obj<> endobj 4497 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4498 0 obj<>stream +:kꝭ|@a0ަ."a~^">_sqI;.e^oGE­ k>$.K[} GpsjOm],0HH@1jt׳ Z# !onR5Z &ZE 8'[)w)ѱc/c޷Gz_䟜.½{yX^ Pq813 _^(ɥ +kg +@Tϔ5}SS#Fvj17}$=CgӲ-.Uo4|<&wx[)%_#cq{)5H[2NCwK/GjBA +9=ZJn@dG$F}'ig2p܋F)zD.QRq9a'fĢn8[ +;dݠ[&O#78$u"O{tڵ/)TT-׿8׳wy hce/9/zpzGw .N[/:bJ9*hH;lb T\SdvAhE먭L^aZ+[њJ5 ɷ UUVn>|e]c[HR;]j|ޯl]b.>f\zFf}m|G~{ʼnd:x"E#%O5BcU2^`NZ gXǕdJ ;C?8k>Z.mt 9jrTV9iv]S޻+#;=@k2"}ٞ_VJ"d%GߖE6z+2 &~#UUVO-xH Ri9E㛨[ţ/zWBp__c^6i8㴞 ]‹ri2 v{L8g`=e`WaUvԪZٮa17!c ޴T -6}@"W({ +MlšDxpnƙS>,-}b>.e"Y9 N VWnmxuS7mѥ +endstream endobj 4499 0 obj<> endobj 4500 0 obj<> endobj 4501 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4502 0 obj<>stream +m NNz-<Ӿ5t%yW(fd|"Za)rxO_DVhA@5;1 3S#]@(*f17skhcsx9Sjqo_y%?jo$/w| 5t9#-@+-gk['|`U85t2LكfBg,L5c7qRS0Ǭ+('Ӯ[|aռkZ3Ȍ*GXp/,bhg'OL:GxW+ 5 $4-QSCTtSu!hoNr ۩񤐷ׂXU)\ϝ)cD]@*n(Z"a#J&=[W3i5)ef/"a5Z0cd6(VR@(E,Yb>/&njdCHҔa_JQ>$T !a/죹; +yl+|{.&:8ǵXl3,mL\` Td ?3~`v"C@ ;űmTFp=-sU{5#ŕ1M / xiE+拕E N/As66 i{0nFG%#ɂuW&̒"5@:y +endstream endobj 4503 0 obj<> endobj 4504 0 obj<> endobj 4505 0 obj<> endobj 4506 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4507 0 obj<>stream +i3CsR1  +bF{uaN0Wm 6d;|[4ǶKHR*pTI;2RշӦ]P$8U}72Fvc#KҰKquGDe'_+ke @G?u,f\ ס0Cv NO;T*3?s+aABn}\Q i'-̅5ʾ~(%|׶r;͔_G"̆g_߭ +IŠr- nj d5)ENϷtg<ت(E=i9D%7j *Do!k~M_t{4x5ڄ5uKHnFuBN>=[[HO,xFe]AyB5{|N]ɠsv!Fqe;L|M~%S4 _dMw#B9}9D Y>hRJL͋KrL|9)o@`ޥ6 +1.9$ +Ⱥeh ~*:D>m^ HTJ#ޖUC#¦+aHgr2F70KC0<˚tWv&Ba7hղ?g#W'ٌ߸G@.XZnTU;hO&؂&lAT:>H4j#`#_jÀR(P7gHɀ'i +Uv[ݡȅ\Cƛ|F- +`7d<P1Op>f2oԜX*!7~"9oEde%!"ls*c]O"j?'K+M I-XߺKPݵaJ +endstream endobj 4508 0 obj<> endobj 4509 0 obj<> endobj 4510 0 obj<> endobj 4511 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4512 0 obj<>stream +ݤX)!ªJz,Ґ-URO]h=JjA.E/ .ݓ}YYfp[_Gc-i)nV [dn}"65nW͸$)30 ԧL;.􆢗ohՆF a 2:*&]"Pr}zqszpvMD.S +0a'XJjqދ ++dXgmryA62Fk~1#pw㍘ߣTEp,,!5x8cQ ";`.%JDupjV#|aSվrN+K5쉏<ׅ ǻ14Gjm}˵.ZK4 + g/r*q]u+ǂ^V'C0CܤYq"6};?(Kx,:OSњn#)3u~|vXy*BݐMp6}%y\x{aak0xw`݊2w)L ,WUl'$D|n1ru;Uױ4F lMO똫rb;@WigY3wY3 (8l A2yIޒ9gm/G/ƹr{7vV}4."-^^"uw*B]:=ʼf,Mk]R4WmWT[@Aj7\P=dO +M?#X_ 3 [n0!B#d6:oLaE'ԉ@"uR]u|ku]-(S8z܌4VÂNڲuٜV?C"xcvYZ5ग़>)ڊQ|@]!Ԝg +#pѦ/īvm%FEbt|bn$lháo]ₙј (\~6j,kHKэ a+j{YT֝/?ꬒxi4L|]ˡ׭ga_ ni@-ly.HJEzsh&r+966D6@CU +endstream endobj 4513 0 obj<> endobj 4514 0 obj<> endobj 4515 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4516 0 obj<>stream +? HsGrqNNI{ּG#o.Qw]`Ǡؔz|aOf[&(aɢU]*_%=፩0N({P1ԢNd"KS=vPG (%.-#BaX*&gީ@ʲ^Iz564(fGPX_|/f'qxc['v!Ng>2@%.aXw6%z;Xt&Ď'X\eK͹oʇ4tJ<\n:Ƞ׶';Ї 1V©B<|☹ͼ(P4W&b_aQaЮz:Ev>p$9R6zS14i)2A9IVX|Y'`dZKUؒ%Sx1_K47@^J;1S9;c"?jZ|ǐAwy[l؊UR)A4O]u=o*}xZb#ueˡ0 zu,oBȄhDtVS=i7)]5~fȈ+WC'\m ?/FB hZxeC. h -3)ޟ@0jqq񙍦E|Վ I.IS/aAd-zdK5C\TCGL[ ga@L-cU8pR?%N7ö9Wcm~2`GhuY82W&NyN(\alM,Tr#$m^Qb20"O״bSܯSd2kC#n]‚*GK:!^2 IܴG+ ۏc<ű5>héAvŒH!! +EBqm1gp'@Pt*&cmNZ>1DT@%r ]d<r \Xlc3?)$ +nR:; +endstream endobj 4517 0 obj<> endobj 4518 0 obj<> endobj 4519 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4520 0 obj<>stream +,+<@hO]R){,i<5uj07)zNu/ّz0r-HXd4)^0MnG~|Z!jci,C p'WhΤN;s;NφӠKҷvOr|~ǒf+ߠkoZbṼ( JbUqQ\1} +%NDjZo% +Yhkh׃DȘJo _.hbyE-T}S܉x68Ejc;V:X#߇czj{<2KR4to"AQͳha=p<a4sΔxqvC|9$o.X9(z;D_ˉCmM7(+CߝW7!pΗh{fѸ\CDo(`v˪\|bG_EM]TJ%4d$Beb|(j`ίeH<(SY(\$(`WR]{#dG[]]j1/}UТC\eg#&7Њ (y:'] 5'!C.dko&M;Y wг@ȞYgccg`wA, H\茰9yt fBJt#m֧Ts uH?~A|a( SݐXTf/TP%xg1i/F/=z}H(W~[f|}kFCK* e4}60X.%Gyt< Ӯt +JFNwq.3J%$(%vWAUD%Il{6$cUxf՚iht7;=ֿ,dғh;8 +endstream endobj 4521 0 obj<> endobj 4522 0 obj<> endobj 4523 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4524 0 obj<>stream +/ׇ>(t V'O6ndťI8B+wg63b_Ek`~<-(Zg>/OF:=;UDn1~26b5d'B+ph ˆO?- 9Rۼz1grlm4@O$ݱ2Fڿno;K=͢ +;}Me n} ˀw" rzW~q~{f+m4agF{MJd3khTgJli6h (Ռѐ7^EӐ};&֊M?ە3 1[ /ķr5ɐV'41^Lk=$^`,&y3fA|[i޵auە%&2&x2=#ncq낙.$8ݎ.%j:,X5B'@2ZX3ST`{;/G|/{mF}f'K旇E7mM/TjG;} TګFJw2 HGNQi%uO t+[RhMt{ڶ,C2p&N\s7!Өր&]]!I3 _8$@%}k +ҰxrVX%("\1&Η$!JTQ$)CrV]]ِuCwEѕ zod~'y|I"K5 CsFn`ܼv.[?Dq)`Z_Z_^ +ƽs_'jT +Gp6/KȓPUOT I M9_m mS|* (RU>\nܯZz]y ~e> +]ܑglُ`&,8t2>+J<}O'X +|Rf 0o&Ta8;LbUr&^W}.Je)8?6ؠŵteCn|#d:@}i +"$E}R>t:ŊM|fls<[ +endstream endobj 4525 0 obj<> endobj 4526 0 obj<> endobj 4527 0 obj<> endobj 4528 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4529 0 obj<>stream +7xaƈ?ʽIO}dtQ),>$9e|: XF&bٛ J4mHZ!Ȭ+נ`4]äDOwO*/)H_[PTxz κ_;lUU9ESML.ax|e{P֥9pr]2ǀMVцpAJ^a# 3mui۬4%1YkbFxӀr,=RZu!/U +|,37{mg@r-8$fS&d=Oo _Y:uO7n"púS\R&RzSRbɶ?Yi=34V҃iGxا(ז 8X.N R)6 P;>I?i!Ǩx .JcD 4OTx:2[*Fy5'GDt& +Ek\AavPg^ n^-!<K?m7^>w5X<JmLz΃tVDNN`0HFK2v:Dqhmaݯcw}UT>Qpj5-IQ1  QXt f|.t 5 z5|=4/vd!r˾BB^)Fjy}Ȉb`sW=cr9 (yޏj0vK8A{,'zrcN4A/C,JƼ6%PM::;Rks5'Lr\o)u9qG圯yM7w4ЮmPBZ;,-,o># קܯyRҰ*ceoc@x;$lיS2[4Zw'g{,IEp,WJ`Y]8p19ˆbzɘ) U*1BB^  G%BQ^DN=nFT!8}bWnBkQK>Qªˊ<#xEg㿽k| .|Mkl +endstream endobj 4530 0 obj<> endobj 4531 0 obj<> endobj 4532 0 obj<> endobj 4533 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4534 0 obj<>stream +.P2QKӺ&S}E}m;JYF.䝉EUgx3MUwp2eov3(*TLReI|#NZ2tG'n疨z_ +EК(a@=MnW/W¼0vW%ĉS<ǮK}D'h̓r׼k +#+v(+5fj!r` +;@|(1 Tz]3>(J=kto.V2:{T zt.^y<ׅHNd^heh4QKO.w0QnEשbۚ[l;V$w#.(k{{jw0L#.s̈́6cE!:y.ʍ.ʙ# Ctx v>_;? *ó|jKrv(Q?*w-p37>7 ק ̈́Qo1 *`~LDcǿbPǙ1܇~r rq`R=Y +_G|CMmFۢMmؙ'AjзeoĜ)?TD˞zIűjf4| v*7JK0*,|O9_> endobj 4536 0 obj<> endobj 4537 0 obj<> endobj 4538 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4539 0 obj<>stream +zQ򅄵JO!g:ǢlrT&;F~څ{L)Y=Y5B;Fw&$۰~J aeY-Y&1OQP3i!Bq:*uH3a tek4HB-e~ SojF9aaJCN~vlB>;zMƤ +@' +˅z{`љ:GwnՉ!GȽ1;ј;|+Cj~*N¸xES$D:CA:` n<ɶrf$f<[-) hDWhFdx048 O[ٍ96@\ÐD)Q6Q?sB{J*׏k޿XAI-]v3ߟHJ9S hU[*EP퐑)?D: *I;yS82!dyx"ύg\dA[(EH]sy-?XY,z<<S㤻&3Jub_2LyKR2@N.`.By -k3.%OzgۄF~@y\)|Fiئxu-*^#ï) <rv/ǩ +' 3G#VOԻk4L2-("yKݏ.~SؙĀ7C$'1w6^ӛRXHy#DC F^$EKMK[Iwd&̜&TlRsÇ jm}zLsAD?{YyKߺCy.Ñ$r#+Njv]1t迆%YQ8+RQW[*(5FBZaU?@ˑvk>n?^)UXC4eET>* ~v?;ӕ rO Lz N8D'F z6kvr!sGeYx!r/+rh}7Cw\p6<~b(](6LDK-~ěOAt/f=Iۅi[JD(XT-'8d1Y4FUj,B qN VXGؼrÔV^dM܉woItWxƺqZZW 8yXD1'ؑa<5C` _J4"]vuA +endstream endobj 4540 0 obj<> endobj 4541 0 obj<> endobj 4542 0 obj<> endobj 4543 0 obj<> endobj 4544 0 obj<> endobj 4545 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4546 0 obj<>stream +,ДS,X#UIj| + %Q _ a)@.`ui7so]$d߭X),Kn1lljδ f˪o9Y`?+AܜsbɭAl͐,q4B"tg-V>&4QJnI-ǔb;1HajHe5 z4a?$_ȂꯈtQ v<,PP`樬ۮp*gXŰ;7nDa(gi'Z?Tu޹K!"3T=B)jHXAnMm6UA|g=Li~E qlQcjZN[2FY Z +!l2I}U x' +endstream endobj 4547 0 obj<> endobj 4548 0 obj<> endobj 4549 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4550 0 obj<>stream +j/r#,vh@?|̆Sq<իȖ<Pl?!> +5jhVW"1eWTL*]m&gg'>_0.lVL+߉&5(hHg_yNj# l:]86 ͥr_;[:Վ'3= q.8^ro h}O ;yHl]{@ UyMwuVe"3 G?P'$d㕮)9WVo)Lae䲇0 )Y}neS9A4L4-%x;{mqO?;P3X,í "~0+eE;/ jGn(`Ô8bot4r9:#{a'?s.˳;$8ƴ<]`ޮ_F^HzJ`PrKZ̊OP 89C=sW}(|& 姻,%"H6i#2t/`{GYa0O<8Ihjñ#Fs- XHKDeɹ;t(}qm@# +UZWzv X:o@s%}{eM/ 6b_ՒLyZ$Dl>ŲMtR?rxᜇk`%?"t&ޱ{SpK}]KI]e&d`kVݜwjY]&ɑ. bpduF)x3 3VFܸM  혂3x:4KC{uGjd=fH܉n#F +;IQW=$gq\;ۣ1Zbzuv"d^-oY]Hx+c?=yzoZE kxD6?^1 +endstream endobj 4551 0 obj<> endobj 4552 0 obj<> endobj 4553 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4554 0 obj<>stream +iUK8w!kH}C^!rƎ7t}k"7A)ѳ!= )+S΁;_e+Eϒ%eeLEBU֕$5EخKduVF~Nݶt7<`6Äj[bH'ART1R >l (K;'`A@bMtZ}|Uw13|)E"eÜnVxpio_z~\c ]ei Qs2+ƽ5%//[sҙblVϑ&<-p.CDЙAėe-|_XDk)Qu}Hn4$Xev_J$n0tqȨHzxYYMt8d+^ : ~tMeqAQzϓ?HdoҙR/Agt!yKk(ckFiσ֨ +Qnʦg*]d?-ErT}k$y4Y?؎C;ݰ!6>^BäR.NyWxv¤dx5YSEUߖ0p-Q>JExr9#_Β Ӌf +endstream endobj 4555 0 obj<> endobj 4556 0 obj<> endobj 4557 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4558 0 obj<>stream +ƆWiqvl}0ٴүk/I"kNhG)iӒO v_ߗO_D8ή'@J↫0= vE}o*ӓRH&BvMA:M% G<߷].{zfD@8|q?pP9 Ŏض mYۆGrPa_v;Y9P%ުns%ݔ ;@׋?r 7l/-&] $LaC4=h]A?sY6N&~v;-WPF:ip.{.3F\|h]'->0#~3b0mm*[|;P>z ;`-C %s*40dQ4GKY'V +`p[ +L v{kZ?\dyA׷} +j[R.n:E"I9IUC?I=v! ϓZ$Zp4`i} uc?Tt ?`Ajщfcwj"N[țQbEv0*Ƅ^>]3BЯ?ul# +>n*/r;:Xes̞8lwLH1,6a6A˪f;R*"_ʉ7Iv=[Y oo?eueCs߆K=*6ˬs`~~(±,yؙMx0.R4:PtQ3)`Kj܈a.=RQǨpg"Rtf=l07ѕ|5M&ฃ"R]ȩ۞%w +endstream endobj 4559 0 obj<> endobj 4560 0 obj<> endobj 4561 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4562 0 obj<>stream +gv>cA,LLڢ;zp4odKyh8aK 5خKK2I +na͒{g@v{s H4>q$n/1ϑjI/7vpg{!Yi_-O=`?UeWUa]44S:v>_Y̼Q G\?2{(M Kz`D(`r +zU5I˻EECضH}>F4ӮD; Pc@6@j&mMEǞ jprq`'p%6TbYCh'˄y_:kh33QW CW=\XzEWe ]FZ0ϝ ;D^^&賬l9Er1V1y; +ێ~wkFMғ9ћʥWJOQ I kf %CW<_8Poc̪eҪۜyK_ L0GD~; DKWe1,:lA +HM9G3.2Bz4ҾQ}/>Rkuv_Ơ)ࣼeXqؿEKn)*h^AfJaSsN<7 MTNs-|\+Ɛ +endstream endobj 4563 0 obj<> endobj 4564 0 obj<> endobj 4565 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4566 0 obj<>stream +q"g'< L>DC;Zesl}u"5 οα]96!5@=G1H*)1CZCM/-Pd)KJ <ϾAx&p{*.. +htpaj~|jQCw\j­MCs rf4C["pqaZ 9mQ*Q(P"bXe0J4qL#Y;nmSaTjҸ_]L p[Yry]fqOz17C~5-">Y%9ûRVu‚Q3Zp辶d7벹n%i̢_E1ӄoؒfg.8!^爽}q8vZ՝@9G!/&6S(3A2&]D#%6x(d[bG8;R[--$ Ѳe= $!*+:g6ڏ^-R:MΟD5quf^4엦?N~eH3 amI+;lXv@]E =~N|;xm-5҉*ȕD]ڣ<T~_Ec[B;)9?-Q$oapЋ7 su2tסM{8yFi4"{~%s4Ҧ]ȭx% +,p'o %i9Dz'#)/|J|ytEàg,n;}X8"4H^RaS[n-"/P +{ٽAUNo}P812 ם}|j\8|vW_RbpmURi(k? @ZO~wvA^0ke䦆XGNe +endstream endobj 4567 0 obj<> endobj 4568 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4569 0 obj<>stream +DL7I[1< 1,wְ M!S.KsP90ZIKzVաHzY-{(?\>'C 7$TS1nVqJ|+Ͳ5tLj9;d}f4*L틟:s2c=>E{i"\k}|M&3ْ0< `qUԯ 4)Sưu ,h{|˿$!;iio q!ľd/Aj>YD,v2pGR"zqw'v4QQ'qe֑T%$zIfBm7BwRQzyk5yaAji>nӢ%9~w,ZQ$%0\!}ˊ~zvoWiI% vPʷ~U.O~8V+1߫UfY΋0@*8țٞ +Oy/6q6Q!dmOBa^ 4+i3O%Xc? +%m7, +endstream endobj 4570 0 obj<> endobj 4571 0 obj<> endobj 4572 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4573 0 obj<>stream +3gABsq"7fNN%)[8{# +T׮V +PfQ89>joF@~+884fNٓ۟ ,Nߍs4[k)U0!J{)"g|"-BRXSZ8-dLYpd&[RCUHHȽLkSjL +ЅM{ydvj\9zTjkd![q-9`h\^!tgZ|TZK/8r=09^Z7-G#iixo+Qh| Ra_BnKwL6RE?h_$U Ixz{a <WU]'gtfo?0!lWF9"{k(B/=ʂ` +endstream endobj 4574 0 obj<> endobj 4575 0 obj<> endobj 4576 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4577 0 obj<>stream +ibxޝ&7̔tq2\QOd6)-*N4`T顽kZ1˓$ )2)SV9k&xͦ7n?<iӌy,(c+r&pen?*?yEA`[s#f-ɾg_n"l 0:w{@:;W #dl>[vq'M=xI$ AX+ sfv8c&tLo4ϟ7{]C&F}niq#.FO4mjD'6RrJM8 - 7zi1$jfV{vb}^ZX(#sVS]]`]hp#7y^k:t~YEqk_C0V.3Sh{'RfR +endstream endobj 4578 0 obj<> endobj 4579 0 obj<> endobj 4580 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4581 0 obj<>stream +RIh?fMEҼ2Ի:ʏQ; y XZz"t^d _@.[.G/$Gƴ +""@J<b~x*\ϼbʽi>ذ5+y2w"C2G3e/'Jˑߥ2e5UXoУkhk:7PEfb[sr v!k`Ûŋ@x76zO/3̧4/.JI2FaQn6f.2*,f$P/RR=Ri+Xwþ>H+q8WltP(?s +Z8 SmcjMDOcVi:i?h6`&#u{ݭ|Ƙ)]rZv7>dh +"ӿ +endstream endobj 4582 0 obj<> endobj 4583 0 obj<> endobj 4584 0 obj<> endobj 4585 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4586 0 obj<>stream +oT@&QQ8[ /~+[бq>H7U98u-=q,96DB9O0}2\Խ9TQg$g +ƭy:9i%Ň/W|r~X ~ I +HHщ4v|?50t}/.8듥V{R+Ʊn wcH^&Ba 'Irl}o,-"8!$(ta"UXVFoJة +gk -i _Q~ Cn0GR1poz{J 1OZ2aTv| =e0E ʭEz(/NIT.!aẆ'PAMrH=u@eK*RX D$~tzAG6\BmDIw?XՎRVЀc\/bPДVOy%XvFy;Z)G_!KGLjz (ɹ r U#r~J]*tJx#XW5r3[[ 2C\,stJYvݖ4f|i1-P|OnlrU7O3d&DdH(duDG8IL&7 EZ$ +ܻRJ4<%ue5g~HgQ_τ&I[AQrбE@O;J%>Yu<"Eb0Y T&ZwE5ϒ +V $K%sRئq֯xv;n-_eE-1jܯ8l;>&Qob0rڠYH=M5,ZE775QMpI.k#lgzi"g yI+)<sy&el +endstream endobj 4587 0 obj<> endobj 4588 0 obj<> endobj 4589 0 obj<> endobj 4590 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4591 0 obj<>stream +iO7~d +&_?/6L,pp*b2kc!#^mVz-`]p⿊hFcoaGV?5@~8gn*%>@-JK+jQ-J{ l_ub {[dv5-e9s3%" p:dxEJp2{-;! 2c.]+ZŜ 18>?b2Fcv|('ճt0$34"W3x|<؍6,K=Izc죿0tY +x=np_lSn箣ǎ&Q;6gkB.ZyRb$e ']Y4%bw]xDw0#g"cچ_P~~U}٣a-_;p\seXA{ez +Zf3=lWeƱjڎx"p&ju.~h:R##Xm'*~`z}i!?^tON-[;0 9_ )k0"oY5ˍy r>Z5`Ͻyg=]_&&K:`1žC8l<fq8xkQ>˽:̾: Xo(%;`(џGDT,T!|pvn' 0Kѭ@=sy!%8?k=M'*Ɩ(϶ZM ^ODi% I3hOx?M(h;bC@y7.g~/5@,&G.{wE2㌕-=+D&q > endobj 4593 0 obj<> endobj 4594 0 obj<> endobj 4595 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4596 0 obj<>stream +]Ot*^{\ Z-K$G[6.˧\ 3ֲ8t'V핺Cب +:Xj$=䜱yK9U'SuWzCCdyWx؋Fsϣ!eq(7) YDzEwTLlV(EJ pdR:hTx&cR69)c';)oQ.x~ +t6 +>JS&w~30M %@')԰F8L4R`y, C:Ei[Xlu6g]Ŏrf3O{r5S M]]6)G-R8879`ːo*#v?Pt Qv=07sa4\60۟^e~gn*՛4C\GZbL *5ZTF+k]L >tգԬ ǩIsK˦'__tjATxV^ +o;6܋gK y +q*#<(J3H}_?к +}RI#e8͛K8SֻOvR%gVF)\yy~o$ +endstream endobj 4597 0 obj<> endobj 4598 0 obj<> endobj 4599 0 obj<> endobj 4600 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4601 0 obj<>stream +19[1yR)nd7{"S+9DA h _@ ڹ|>h\J85J6c`Ibrq`a(iߵuR_+Jx71/#[dsn#7ríH^̂/|î\*'}9'[(]RU<мM}6d;w h +e.5a!}ga%J@JVHYe" mFO8Tp"FM %B 3QFxƨCYkk8健7Nx*D5ՖZ!Zn iEYᐌ?#tk:SO'm_̿%p$yr-y |}_/,5@~%3Z4m0tʺ؅mti[cwt.}e$P23Qm(] +ۜiQ55=B#IDZS6v_wA6<@j)G@ H2n)+ >„t-vG9Aذeo[~PxpPL*5:KW|ZG9/~m=A.o39eòlzAK:۬q񀯥B&YbQ*)DfªՎb/"ԠG3`O^R3C/-lej9nQӓLrO;yxDoON¤ <"I4?w'(GSV#T\=Ag b hjhX&3c4tZA#+_=%juۯ F B.C`j:E◚S8_yX+Щzp䆈W/\Y[{?LP.xD5uNgU@oW,]"X֘IΆaXïH)qYTNlߒB "ٛ|^2[Db(D\;gk2pvV-T{eW=} 6QCJ uy{ƖYkM +endstream endobj 4602 0 obj<> endobj 4603 0 obj<> endobj 4604 0 obj<> endobj 4605 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4606 0 obj<>stream ++ +2 0e!_pPLBVAGz++=v);(J[8avuE"Rܑykk_~m6~-]E,6H}9ܥ YyZH)qU,+P9XSߺ;Б|M4w)zU0A66-v.%'pAѹ٥[2y[7 QMe)!pԃp|%Cʩٲ 6UJY P[zP^ ;?FW֐5I 6ZX*cOTqɽF:6Qn| +(^>#ZccGO_&'nB!VϏ7n\:M ZTޑuS]Wއi`@ +ۉzc8Q` #a}79PV`"*qoY{_9`郝=pQsT$})i'kT'Q5KZM. +Z ְpdZ{~=1{IBL|E +endstream endobj 4607 0 obj<> endobj 4608 0 obj<> endobj 4609 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4610 0 obj<>stream +\2!v 0s A$bNU|h+2DVC )% V +Aqe8]}])qD&=!u4,T+(|677`}X BvL1C@t5-<\ +F[2Ό,CAOjDO,g?ʽqiM{}~ݘ;rJm,ovT6/hgPԙ4}~G> XjǛ< [5MB{ch%Jq-IHj|w[1On&J)/q,c K'ّ=yǞߚ_,8Q) Zon{8$ei`u6ot"o 3Flj`H6q)mj3K5]_@CZ"1Byo+|M +hHK*iS 3W)vFrdvtVU~AMc2(^YOMS_sxt"@ .a;`YU$C tFʉ׹ /w=a=Q&gAk Az )3?O@nx rܗBs{N%9/CRR:ERg$PTX%5Y"Kih!f(Um19KJ˱G,mXy:E?>8AHsggd²-I؀FYLhЧ@ ugؙ%:*ߜTPkÜ~[=bGo\v +OϢY'cD Cn͐!ZiSSNB;JHDL=׽L3tEtLrc:g¡"$ۀDJ}Mm$Y|a%&c$,ۅ}?.4S +endstream endobj 4611 0 obj<> endobj 4612 0 obj<> endobj 4613 0 obj<> endobj 4614 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4615 0 obj<>stream ++dg1:*7={+CIJ=BqFYd_nƽKevi3gSG^3{̴EG+2,b#^xE/t,0T;ԩ:gS,i~#`8Jy&٧<3 2 +\H$e6SW6g&vǓCpw.|?u9 bh`#D $^(w!L[6pہiUȞD]nj;*t:sw[q$̘ޡ<9>oYuj1T¦s#OkYNUDZ36K<;J!/)h&$Iȸr;q"籚g?u^{[p),Hծsxz gL5MqՅ9jpKHŚT|`$$o9-7辖+ +endstream endobj 4616 0 obj<> endobj 4617 0 obj<> endobj 4618 0 obj<> endobj 4619 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4620 0 obj<>stream +oyp.wTe]bb,~6iusB>s!ԻL$azl38rkr{_C-0CB+&>l. 'l|/|ʾ .̠\qABS2*_l(#Dc/8ɍQd@ 8Q26b(͡l + +_\0glPG33[5[}Q -FB7XNNp;N,#{X+Uc1;\"Eѫx͚~gM +D8z) ?l O%Ѹ4߈gް 1iue5! +YE祘˷#PR$}Hq(|>yC7jwG^K\r9-rs@JgPC^Ųo]]E +}rߑ"M׋q0g˥9~w%5*lTr},>BFuMz3 Ku?\ ;-*MU܎b~=Hejf!S9}plB ==Mt gol,*񳥱L j[(=6vAM6gV=L߯&x6QNVWL guou(lPsSe-qȰU[VϘ 꾬oݖRO,h,N͐5]jٷןqxy~r=Pr%TSe~8t, +# S|W3kx(k\98Ӕj ÌfqrtaLf/8*R^ Gʳ_vogRpIw'kpsX$u4P xE؜! +endstream endobj 4621 0 obj<> endobj 4622 0 obj<> endobj 4623 0 obj<> endobj 4624 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4625 0 obj<>stream +Z-MD XoZɳG~p daJ 5IW*먃#&//#ːi_ zdv6R%qx gl51NGkoSYES~RH Wq B.j olAv\Yx,X"Rڑ +b9 |>𶾮6 +5{.㜍jq0dD9_/VQO^hl=yDoį? KeC@I&Nq\ @HGmq \ >+B #"S$#*',:~mN #72F.<}iσA|JH?;S&-vdvhLڧ:aS W8᷸2آk]Yn^*Z[ !GI0A"DdMy i?3Bć:rbcp"`=b6ej^ڲRd;~|׼3h373!g+G8 C{zJ Rsl %}.3*XOsf)B꬇AB?ƠL#g<?  ϛF\b0Fo^M$ҫUKC?B2@,|fTFlI98w O/yoqՋ^EZCٔmmc{ `­qz' KAZ%7&|J=b9=TS|r;O|tCS3y]HNh'lqJ[Hfĵ iIW̛gey"ܞrF +endstream endobj 4626 0 obj<> endobj 4627 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4628 0 obj<>stream +Jr[A{.d|&Nv p;/& |Rh]\KCqi!| >g3uWխb3ƔFߎ +2UVǒ"iO GVްP5 =J$4;%5́JL@l!Ais2l㹲&|L@l!I]ç[}x\Ǭ zC Uo^!0L7)Nb'V8Kwe]HΩVOsWSQRPgS|ΰI`i] %\Hr>RU@x_` G2T +Esh  +endstream endobj 4629 0 obj<> endobj 4630 0 obj<> endobj 4631 0 obj<> endobj 4632 0 obj<> endobj 4633 0 obj<> endobj 4634 0 obj<> endobj 4635 0 obj<> endobj 4636 0 obj<> endobj 4637 0 obj<> endobj 4638 0 obj<> endobj 4639 0 obj<> endobj 4640 0 obj<> endobj 4641 0 obj<> endobj 4642 0 obj<> endobj 4643 0 obj<> endobj 4644 0 obj<> endobj 4645 0 obj<> endobj 4646 0 obj<> endobj 4647 0 obj<> endobj 4648 0 obj<> endobj 4649 0 obj<> endobj 4650 0 obj<> endobj 4651 0 obj<> endobj 4652 0 obj<> endobj 4653 0 obj<> endobj 4654 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4655 0 obj<>stream +b%-nR)R M[Y'|c 8u]v`[0!6 ##>?tN@:uǧI+M ]R#щ%2;Wqԟjd\ffIzu a732Ё~?kR,P!W7 yQt5Z.`|S+ŶCc0Yp 놚`(BT\<3 A7N%eȁr陵f*$ϖ\ ~Ɗ+xb.)=/Z 81ϸ5E{~)V-!!ZvA6~Q'~MFUO?v۝vB^_tABVqwbTX(Hϙ#yP1֐tu&Ȋ&%wƃu^Ͽ=dojstر[Vgް !Eek+m/#hʏqUQ%rpm")yD^[((@LNҤ@fDaGې<TVuQ[0-0KD>dH% `N,!ނoUHghf۬% +jQQQFįe'*O 7(r'9e] +V[4ˉIrfe:'i-I~tQ +j &zScV:C>y(;K_l]V%,c8*Wh^'uMc0aFg/EȤ[:.Ӏa~:Vc[0FK|HZk%hnYU 7x=擶=;+4< $I)a?OqB&Ě`SMDҺ qCL!)rJI]1x\ 'a^rJ`egSFi +Q8_D/H<\~f]+BT8_2.s%xmÓ+SкW26 uf\uR i|4bܘuڦ,ِJCB-0˕{27nlS?kO' +SeB\3OD'$>_f?x9`h Px.Fm$FKEtcEHL*;Liׇ*YHz6h[M&)Rn"EoLXD'8evԒ~CT;1k6yg_Xc?n¸}#q7uEpBkHrm 'GrOb/ 3-0'Ʈά;.s5VqO86j7kC(; s{ VތABL/ߺοCW%‚ff&CpClQ>/xE[+L~Dh})snpX𿠚[>_*VSrU:.~ej])* +"Kg:`$tp䝯ŝ~z6 okP/4͵ڎnDsTfB@BңR72x3C֤Сz30&|qJ$;4dν=WDY;S 1P7rlHJ!=?\RW-8'TbACt=&};Jإ@P9.W;r=}딅lۨ?*D9 ,I̺ٲ\u@cpڡ2`}[acxOD,f"3.2~ Ѻs\b Ǖ@d:R_*tLc퍈;KHDDwW5t6o*wKp +V*Gacv')q܊Vk(J]H<yZs^z`ql_C8UwfXJ! sf4U!4 պ80$]RM99S^Iy|47Ơp*>wPH x\3_[Q@#0d\h*[/% +oYJ%3??~SK2{XpoȯW)` 0V%5ӄJ\Ey3"M">"ط zY='k/!|m +uI;6 ĉP=yן#%?ЋLȼ}FV܋M9n|JcK—YC$Vb./ĕA $nELtu4D!mW`4paHbAmϒzM&ܥ&,)327>O +kT?ʲk?kx=qa5Jy-E PͳIN9$CLLUt@[wi+_m $c#Z$[u.ZiRִ%VoxQPȺbP!p%o!BV]] :L|MPtp?vۣ )쉚uU!'T -&&~Bvް_,m؇G[ FTclCln=%> endobj 4657 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4658 0 obj<>stream +\7WSBo;i_PWҶG޺=Gxq M&[1LDZQőhhY9]C XQVbqT+XUB]˼?U!n3T\{=Z?Z 6joMV7$='*;\hnV"͠%!HQ\X Ou@j|4̎Wy + *p|qh?~=|U&&rxNзwyC;J7FRLHSz_oͥd/λ- s^/~jv0on0cCJ@,ߪs%L)g`. o˽wNp,l-uXK.l,5a&r@VzK q.T4 I^T +֍_5O0/5z2ĪH[∱,UM|J<,JvoAu+kLhB2d7uSm#{uf/8;!݋fxYKLEfb}Tcg"3L0TRe3QI\z!>^VYTBm؂A?(t>,h&e +endstream endobj 4659 0 obj<> endobj 4660 0 obj<> endobj 4661 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4662 0 obj<>stream +lTː/A(IPLsnqI@;D/Y8.Yix<ӆZ߯bEP8)@pSE"-*tF!Mz6g7ZY,V8W# TFXok:"M -lv0q XN`y^` +eıɨPs{.'tr*.·\5+o Z«2*{2NWnraC@Nfږ50zBC_ߜE3OSl1&w#qP㼞9QV;&HZڀmP'&9giN^7eJL%=6 +s8V XkF~gխ"ɾZXP. y'?3aX 9~ ?J6Hd%O#f\k*bG0|GGn- +_j?1e[W!&@<>!T;pz܋vp|Y +jkH&sgRI1YɋDE›%\ m@۳%:V]R; 1#⺌ !,*N뒃1 EW JYx5l5sNŧ&Ca,4FFX5\ AhR_ϼN[s;}nvyŖF-Q仦uM5@ޭ}HKfġXܸ v)Ŕh{8bLLvmxl75mߢ +endstream endobj 4663 0 obj<> endobj 4664 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4665 0 obj<>stream +W)nF~M(}؅=J"~0#rhbZN#tK6[o?'X;Sٝ.rű9%yWdvVjhۂl橼ꈜ ڤ7C_썦qjQl%C8hw\le/AJhi,[QS-19}t^.-6TzyR!k\i!<=.K}Qػ^gO^3 #E=^ٱ(-{&^U$ŝ{ܑ90%wMUgSo:tE9^kMMOC$!TaBN;?F/ݸ+ B?π"jKq./}m)M uJ,]D'=\11!zɭmYOA9b>z]K[\JEZ \O槺+ UW;!|btPyM Uhlb\z0{yv[-U"Cɜ;uG)dնM$)}7R4TObq3DN kA /߳^xʠ(/${L>yXكsySsV.*ן}> endobj 4667 0 obj<> endobj 4668 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4669 0 obj<>stream +ظ:#Gdd^ը_ºx +4r(C. p5_*ޮAwCZo."èFVd/'z!>(*ɾⅷ9C_ +gp> m}56 _ZcM.,,be0YN^CU K*w봬ȍvLT[)tVX]dp\MT +$JN~ Q1B_)P( K +Cz>Q]ygHKZ$|dz乽@cd|3wɹ~fX(ub@oĥSGުSW $V"#RDEr ؟ ѷɒ=E\4Ig('KPl~;]Wg\*l-N{l> endobj 4671 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4672 0 obj<>stream +32y* 7 ̺'PAs fO4}٤4_0VQPja aZŻr5ohLUAams5sE]Ham#[*\lT; |;i0MYq6ԻP_wY梘CuXhNm fh{.K xV\hr9F؎^0 CX}]|2}=抜Wj|V՛`!('T!b  RX qPy7x{_tuRF\~e<uM,z~쯀F(ʔ#bo|9$KxQt,ima̶Gn~w/T**ҿⷚPڥ0T'CS4)FuM3XONfn5 ϰ~t ?33ENFy~fH7p>͇ާ~~mMCu[K^9k +`0 zA(>)+a'(jZ+Z0G.F,*^]iEu\?-sʾsS7f3kd9 bt7\5aQiew .G9'}^uq;j|3 +endstream endobj 4673 0 obj<> endobj 4674 0 obj<> endobj 4675 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4676 0 obj<>stream + *YTgR+*E;$=?x]5`h#1[gF +@d5+l*1тF ')nhk[3^ʗ +ژ&(AE' ԧ7q}Dg0YMIT$jIY0PԧvI +õ#ʾϝ~$dbHxA^U{'g?f KqVRo +46* +JHs1ڒ!%Z; +jŹx/ G\E-h=>vuL7zAێ&J9 ϰ^ܔ?-9oDd ˒TK Iȴ +#ە<{!*g)W REdUT"5)gj6izeSGvM'FL!o >ظ \Zr/*!U=P\u^3^tK |vh/Y@BfeO`ԓY7)C5Od|Z }][ CH2>9ߔD{;9qT|l_z4-1yĂ N* y~^Fz# _-+5)X-CvdYre +$#ۘsיH#s ZK#tX]4Ք>65*EQuMͶr.T1>υޭZJVZ<: +>)_x{Ti%Uqqʟmo $ Fz}/,Hl3XK]K? +endstream endobj 4677 0 obj<> endobj 4678 0 obj<> endobj 4679 0 obj<> endobj 4680 0 obj<> endobj 4681 0 obj<> endobj 4682 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4683 0 obj<>stream +}/˽4#ew;nsWq{(j!MJꂾviV1.Xz5xeܢ.G ۵Y#Jn\_#fP$N"po$"Jo癙nxenLz([Q_/ 68BmzDcIs\GZepl F?cKUgR-SPrA'IvؤϊB8"ԞxNOdD>'*%%hHB*砥-W3oʍ:bwOy/sh3b{qT[$fx{ mx'W;=UmSTRЉ,bq +.vM(mc.D"B,'9= FL=f.˶se6Rs?2Գ5FBJ|$2POܘGqzŏ3Anq[?o :ғ )Ie&Q' +Ƅ[r#/?YTjNk>=x`(1M +-<U(v*|5ܐyxpQaI㰌 28W0Gw>=ک 8N680Ѻ[CG/6|Aˌ%iu1gί}1C` +l6c-$##^LUjYp㢼:PgvCvаt&^-֓fS=h\|H0g45(<]TV獲o쑳-}gUUꐎ;:Il-+*I WAf1+W2{;؉zbu&90e/0=ߥu^"TMa5φKMJOL{gSc3?Օ?G^v2t487,r;׏ҍ(yuТ:ɺ +endstream endobj 4684 0 obj<> endobj 4685 0 obj<> endobj 4686 0 obj<> endobj 4687 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4688 0 obj<>stream +RŸnQ%M=qEkK:L\O'>IPψ-h] 9']W+-0ΰmyFa2wW*%͒~Tb25eSI k8)(SVEzV_ZϪѭāWx NHFD C[yDx-drvEwk聕v|lzx5]0_tQtY{^LPI0_%T_ w`AX13`MKJ1S +*n]7^B_b 2#uP3롆@C.߀5{Pbw(&R vNU?[/C8|Yr KÐxCgu^@IHj V Aܐx+ ff$,oU&Hןq?|Qxavϱ ]NV)Z~uw.Mn]jÍ@%DYMǒ~&cf{+l0ÊüBޥLXxΞ6mE\|K^VK'BBWr#f6G~_1:> endobj 4690 0 obj<> endobj 4691 0 obj<> endobj 4692 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4693 0 obj<>stream +}F!H KvFh)zol ʒNT۷{/AC/q~AvdLR&.`? g ʡ]E niwu]?9 ς4bq49ֆח6 t5aB&0A4!;O̭Іh +[?U /e C8!^cI(z"JT3\dZڠ 馂Z(YS5p2:}/KN +*$=C _EF?}CUޮI!2mV1t^1~ 'Jj]*d\U_:EZEU.a R@\W/V/RTPШmiͶ/@g*8Y"(Pr,^KJ&gX")BX",\NAZ`8sݓyQ F嘰e]SŎZΉʺFF>O!XhTWŤ4U˭9FchKSp-?0BҬ\v3,"3RFl?Ik i뭹mцǤ Bb`*^kp޲Bos#u$0^1&0)uBه 5 IGY| +endstream endobj 4694 0 obj<> endobj 4695 0 obj<> endobj 4696 0 obj<> endobj 4697 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4698 0 obj<>stream +5p2^z3@tR⬷@ۥrG>LR5M^Y/Yb[GAfD/>$pq0`- ,SB3wl>r%y1$kGiq0𸀬*?$F<^?g=ahq q\Dǭ"Z6A YgYHfmo\Z(D-U}rI%)&\Gl|CuNY^ͷ5.֛.hI H[ß$ֳAhC$vD\h,fj»ߧ&-?m}A 0$'a!Ԟ$i)txWBf|N5Zhd0Z׶ +B@'<3{^6H' ֦_1vArBlTa"+ESnU=cn_1Óܧzgb%Hy =\5x dE ɶCI%Y%k{cG_p5p<)F2v֓l+E5 . +oPdL6uMU[FIC/etДh` '`gu)no _*T) {iP/`upn$=('öȈh& 4{\䆂fJi(?\81/'6)>qȔ+"> 3T؊ş'=APb=歁2%^X@`;5uzX +J!/kNF E9>Gcف@ko%X#R γ,$B3B!KA#'{01d[]nF ?3Wjg`&95k C +~fTa1bPaVׂ5+CQENvF^H*k<#0>{C+[@-@nKPIOsjȮ,74KUVu=#Y4sbB;0 sx|Wl!6[6ȢsSu4lͦ?Y7+I"7'E\qE ~ +endstream endobj 4699 0 obj<> endobj 4700 0 obj<> endobj 4701 0 obj<> endobj 4702 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4703 0 obj<>stream +'_ʤvZKyF +P#hc_Ԋύv歹plqZ@Ӎ/=6 >E4g ό([K22$H$i Xp7B2:KWv\7I.:HIEϘQyVT%Wcl,*Nax^W#=-#mtbc$|qHWT#L4ykȯw"@vm%OTQŲصǭPO:( mGnHLKRl+!;@I7f +. +îl͈¡6,(2a!8pڠͺYI:&U_b; mtk8 +m^{Gz4XVDIe"6OJUW!6ԞWLZόUZ'3/+ ?6 ,5H:Ǭ5vLVuB4ݬU]&(f# d4 0OE /ST90NC+1Tm vO]4ySӇ-?Ic[*"+%(?w` +Q ~zੁVP9ʇ4sk AjsIV`cOU +O@*S= %$"(E*v?V x=DcJI€?aRP؏b5Z]gDr2E1 =LwI7[U]~O7se]TG ݄Dt%+PW V)cA #kO{s +9Mz듋"SѿiS {b]R$ +/Mzj8Zf>32EmmRV5GRHt-ޭ][ssulo) 3@mii~G\kK֪EݏR\ᑛ?W\8+j4ȍEc%â6a}T~1UeBԓ#1PM[%W2s +endstream endobj 4704 0 obj<> endobj 4705 0 obj<> endobj 4706 0 obj<> endobj 4707 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4708 0 obj<>stream + /9Gw:۩7V&]!7y^u=aVO`[0?[R@X}פ}N$o{+ qZ[f +L/NmӇd~n%)C3AJ˜ +OOekK?-2 0Ʒt +nVA=m&A2UnsyU*CS=JOu~5cÏ`+đ%NEz$iVh,@.SXNoA%JZvMdoVG=rR`.(.L+3봓5pFl<*vs{EaU$;9T&j1' Qrݔ~ax M?"rkLIڪ #VVi<4k]Od ) fVYQD#> 5Vs5o؇N\xl 1qUET3mKS/#q5@oň! ^B7xk_7Vdz0oveoi om ER0N5oeN+nԫyd.,vUjZTQw"`ZiOQ?H|Aъv&09 e-Yb@#cFAk4vEگ!KZO| +YV8BH39f~oT9kGXOLU5CK`:Yf*SƭE]30I 2 WUws Fil +endstream endobj 4709 0 obj<> endobj 4710 0 obj<> endobj 4711 0 obj<> endobj 4712 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4713 0 obj<>stream +х4#EK:vG8335c$9dd3 7[0*|@=Qojv+%(j2}Jٖ1[X-9a!!A~oőQ ӳ›{xׁ,8)i\㶻j%fFQwt\^Ԣ̿yv}wGUqUo2vmæ22G(/.St Y fH( + ƻDrrHci x ފ!*<`gy=/髵> endobj 4715 0 obj<> endobj 4716 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4717 0 obj<>stream +Eg\ !p}=OC1}]IzFIÛG$u\_5_i <тoJ@2hX19k_R > 5?պ1f8mQUY}m +>@es: (&B&,2 _ޘ:Q2MZ'js02 .;S5İ #٘e2< *T|8=G$M~<z_4,Ƕ: -I75i[ζŵ +C!. +e%GtT3۲ +~AD $@~sxo(*\Rok@Bh(|/> endobj 4719 0 obj<> endobj 4720 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4721 0 obj<>stream +yχ:Us)|Sr|f|D8{sNU>o <dxPqP@"%f(0K6c,cYv(~ *T&pdWtj Ni޳mlABU’ eV Ahlkjj+ͱ9Y;l?ƒ*֎fPSMś% VҎ/NYfy?a+\#˜:t@f*ٺ5gј|ݬR[}?i+!VfVC{zNY j kx>Gcĭ(ѧyΜsb934ObMa8e}cI[u{KRBmD"='M }Teޘ`zűhr'rs=c" fy6ҥmi&gP'_& |hHE#愈8otҀ$V=(ڂ6o"e(" +w1qW^8qd:Eɿ<͸xR^k=8:RClN9^X5_%Y0XW>r +R0jyz\:5m2vɟEmD8[\lSٜ` +1E[Vt P`&Ɍ_\ML`9`qI +Fv4/RnLbOK8؝^8%"Y,eMIM +endstream endobj 4722 0 obj<> endobj 4723 0 obj<> endobj 4724 0 obj<> endobj 4725 0 obj<> endobj 4726 0 obj<> endobj 4727 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4728 0 obj<>stream +|g"'3hX{7=8^1 ~ZȌuZcV:.K aoz=6Cx}HG@.AKcΪu@ ]'%C7]ӯ^a1}Ʒ[]E!ût["AqFU*q"g*A6^ރYKOR:ćgJ* miWr&"#uʟ<-a 8򅐡?>jcf(:NB^ߊ!C(h9/0 L̹oQC 9L^AraesĹY%hUR|3CYˋ^!agΦ &]ޝ|d&>T]k774u*"o;Mcg=fS1$ck(PQUP;h'4%/v. L_ﻀ+ӿXSVv3i!~#Aث| y>,VRwm7I1}{秫 a M3b|[6 tD#c1xw`olҲO|șjXeew_>'րyK;\%eOHy28ǰ?52Feo~>:0$B=}sv8ӝN;3p#6 T# }-w%#LK](~Mn K2VdwrDHjKp^o!i!ڕFQ]FHġV㛑ϽIWlrt:Z͊ o{I ߶5u#"kgG8D$QAEm {R3DR.!AG> endobj 4730 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4731 0 obj<>stream +YTsTb[yC wjX*ff_t?8@2^K8= ~0o WiL%LM&D.״V'JZHZ"&ͮry;z5)RJiἭ:|0 Jܧ[# 4pQ2kJ+i1=&*k#i8.+h0BU;#9aE4O 4OOiSD|͍+.8ճ I}Th/>m~k)FfsuHT2G +ӝG,]nljN[b VZ?9/ꞗOpiF[w`bZ\?_0= $O8,ϒ& ؝RnqI"l߆3θ MgNV:XuF<_adM?hRlLuۀ;䚙spzDZRbWܥ!75T"Ec&4xXk*ӌE ~)L|F1dɞl*e 6%mt,4[ਭ2iՖyQPh,P=qj%WT Yw Rz15u<-ru}*wh(%g**$;u{@] ~v`=p'GZ+;nB4 @ kQ"JݥŸ&Ҟ!Km0YLT4(L9Q4Fu<e^<JCL#8Fz-G7I jꫠ<,4Y6nF`yڎN;%B=|XM |f;1u:d.m}~N_ /m|n9i![DSk~-bT,[ؑrˮ] ZF +endstream endobj 4732 0 obj<> endobj 4733 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4734 0 obj<>stream +f\]bN 0l($-p |_("$'~_`9ʞ ~wB9ZWY"E-*&A,T_m^ΝG>C%]`߿(%LCz2?Ti eMi_I_q) gE4p]LTp\"7ۂѻs|"& !n7`2XhEzYZI +b6B!"1V%q1Hl}y+# g"` 4hwffnP &ʥ:u#9Z(%th!_.1SauqL<5+E;yp1%|>_@f}%!/\s-p6ǸBrL ylWṶKM@s(*ƽRJc>D)2ᴑ,V0VmP 5skxm&qlޱ_ʼnU"25=%={{w\hq?KQՃZ97Mþ.:s-g=vH hM׌>aO%43EIsJs']fHx =ȥ\\ +endstream endobj 4735 0 obj<> endobj 4736 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4737 0 obj<>stream +݄Vu+;뇗HFU?MDqg18aN{#8< +EAmiavw$ݹVhW#*(7 a4Wߗ">bZUYv8^ |*z+h#a +~ڦĘ$ߜ g"/C +]?}CcgVf᚞&# ot3}XCOO}l+7=ӹQ=6AۀN뒔{EskVow@ɒy**/6+ȒwwJDžlf xs[_Eݒh+9 = 'o=ʑAw-PllIk0;T_#rlgs^f޾2X@3[6.W*%c_Z<ʒ"Mx/~R5yyອz)7ʏ>㉒=p +endstream endobj 4738 0 obj<> endobj 4739 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4740 0 obj<>stream +Ŵ¼[ {$6j"[Mnw}kOE")А=) "%ss5T4)m*/'Dr +Z*~b{H8mBLX9kq@M:DM"r]ս %g+PUd))"Kϕ6QTw9C}Qd**t^lt<г.Dc4W#j*mA <2XΏ87ю(YOU'?fv4:h^| &*{2uʙ}ߣ [=*,RgLQ!^*Е?OU.D &WWpT\ϋ˽<+oT7/Ȟ[:NW6#'\rtӪ+Y[NxDPѪ^~`+gY rt<6s=LOFv7 +endstream endobj 4741 0 obj<> endobj 4742 0 obj<> endobj 4743 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4744 0 obj<>stream +j|5hqq4_g|Tci~*Zf׿I!}bV|O%MFbK.^ƻTS%^@}:PUP<33Ӏ$EGTw!zݜJ[²68cByWB u\Kd 0ȧ WCrLT<%Q _oѧ[gt)e \Uxa7T^7efsBI7۶:K鈡oǑZAV$ Q罁^D[d0×g'k+TB`JW`ϱjw~fcCM(;HXh~x_~&òpwM-Ώ=KM rwHL*Y墉9k=0,;xe'~46=8φ7n7`;]5FR3/UxNobJe 0L_:枕h[& Sz_`nyo⼖=f&T-~̮mgQ <i9iK UjθH$Ն2N}-"6!2laȯ-)]ٗb0WwDl|`ZB)F<e-[w|4Ys1B-an`@T3'ҤM=5}qp1l~*[h񭘘&nZ)$C]ٚ-豜7lJMjT>`|/W("`L4L$HBj՛?hCO&}u#L}z*_FBݳ%oQ@#P>3.`EsPtA*2^gysA8/yLD:矜S/5lL/b)4e|Q8"+> endobj 4746 0 obj<> endobj 4747 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4748 0 obj<>stream +n=c@˙[{cwڿ?wj $aD +*x)ɷ".|TWkqwHF9l)L + VTr͆)6XTĩ4wW_TnEpS4g5򐡀5^Ł92:Ck"6Zo 2NV% +[1 `tOEV;/(_xG*w) y¼ͦC5o %0LNrBh +`לIeb +X1p{FjzAR錇Q6&#Zv}N1MaI3ac +s/*SǪPpej\Eˀ,,K ҪSv[6hٍ9*vq#/f9o.$Yߡ?= l~i<&FBPܔEx+u8F 0 +XW>wd4 +Sώ:6 ĈK?\jgVY#ϔ>E[4=0AVlCtv9 o\\ޏ/ Wu6ާ^wտEGyAGnI]?y:.ˇUF7jfXH1OL9`Ωtx5jF5';f= H>xf7ZҫWeR%9_Bp̋x A ~2p^YH>ao앒œ4pW'hm=־k閸G1ZI kJi| +8[$2 H,96u)綍<_H ј +endstream endobj 4749 0 obj<> endobj 4750 0 obj<> endobj 4751 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4752 0 obj<>stream +R˫P0] ly[%. NލgCa 9aaV&Nhaj0˺ +D +1ߝyA ++FY'?M_ׯvWn8TrgtD&6cKe5VhcZ1Ϫw ΔZnO`Ƕy4D_yw7VDzFl:b0$?UIpy@M~ZS>^)cB bcZ(pAyZ2"`~f?iE(kxbKܠp)CPS~ϱ2$v6(B U/Lm?Fz"rJi,p_ 申"ҞcB^^p`; +0g +7->)*?\88L~,m0G"O V^Tf^?:̍|Y.C)u+lF#eg"lV' 45R OkkcDCW'*4Tx{ξZN~$3 =[X0jKob͖qsjf'GOZHI6uh1M&g|)_40ɖ e!v+V2XO쌁eJHhkg_D@ +endstream endobj 4753 0 obj<> endobj 4754 0 obj<> endobj 4755 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4756 0 obj<>stream +=UYbC[P.*c,be?IKl69c<=rTϾqi];Qp +83Տ鹊\v3%[s8_{ħ b#~w_1egAcLfzPIA{c}̟&/9n_z)A#/Icx3QL-_`|znRNkL@x +!\朔EQ<47ʢ,5w"+#},0[WJa_N DG^Ck?i0 viD.Op9AW\xoSXTH j@i6Jwm6hN@xѠop=@'_,l78rg~8`|3`Ei.v+ Ϩ2jgt@սT| 2oKTƽ W"7׀j0X,pQۜHKKk715^޴̿wR{5/7~S&Z(S-(|:&$gYnWOvmi3:ݏeL**.e[o$Ѷ/qչ$wKؠ[7̰Ƴz -SYozAV_x[<9Fw+׌gٯ|oZ>;4vZ pT| rd k-jd8[C`݈<\1K1uJ~YhqqQX ^.e!{f':#=5[hDfEOh&A o )Fǐyv`+SWqd{YfqX7KQ> endobj 4758 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4759 0 obj<>stream +7.1i ;1.D[yoGxxj-ra^ۍ=iN#2nkӋE8M;;ɪ}Qf4m +Nܑ^7>m[ӘޅB&w2TV6b=S}I("u=5):ziw?nso.azh[ݍ^t9ҴkF^ +;|x<`LV`gLU}4K6gD)Z D!9,-|@i5EPW0-j wO7 )&EDfߌs:ԳYA~͖o2ue&ƙ%r`P ?X9+};A +endstream endobj 4760 0 obj<> endobj 4761 0 obj<> endobj 4762 0 obj<> endobj 4763 0 obj<> endobj 4764 0 obj<> endobj 4765 0 obj<> endobj 4766 0 obj<> endobj 4767 0 obj<> endobj 4768 0 obj<> endobj 4769 0 obj<> endobj 4770 0 obj<> endobj 4771 0 obj<> endobj 4772 0 obj<> endobj 4773 0 obj<> endobj 4774 0 obj<> endobj 4775 0 obj<> endobj 4776 0 obj<> endobj 4777 0 obj<> endobj 4778 0 obj<> endobj 4779 0 obj<> endobj 4780 0 obj<> endobj 4781 0 obj<> endobj 4782 0 obj<> endobj 4783 0 obj<> endobj 4784 0 obj<> endobj 4785 0 obj<> endobj 4786 0 obj<> endobj 4787 0 obj<> endobj 4788 0 obj<> endobj 4789 0 obj<> endobj 4790 0 obj<> endobj 4791 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4792 0 obj<>stream +)JU=ڏ* +I’BDr_,Wf*HD5bw-IV"-*C04j8=W^ʡ78E8&,Hu5<ǢG4'!J&w[Siv(:1<\O-.汳$kcI|5 ;dEnzpl۵R"j>ʕʒnwlXuAGrCۅrOE4%m2Çŵ-QgU/`@72I(ܫ3bLT-Nn=fgqBM1s.0<9ULa\zƧyqVeM@;҉e=9ƠtWNI3H#Lڣ !vrsҾ^ %7@]ȳٽIbf +}'KQb}/S[>@RPhb\+g-ٗL<( +ǂPer uZ2G*Ќ/ 1FoA3vXCGiS/feB=5I4dr2eP<7?aH\YI{EwkVX׷eWoS}iN`HlQi,V"1,VJvD1œV~4Rh_Pz5 jER`S;͔|*]+&&nRq3ql0trėDƾV|['p/N} +$wn ,ݶ՗Xnp6v\ܲ֠q䆆{QPz=)a$ks&Mą#lzVhrS$$σDe"_dmޓ9d;0EWC_13HmN˒]o-qI({38?:6wKQA`pO[c 4iY\О6mSG8h}!s9?Le,Ĺ i:3߾9vjv7[$w0Xk<]c=YxT6ߙMz^ rzdR 0dGIS % s֦F $5Srj<Pv4Dsfy=ܼ37}=V% "LvjSs1ՄZ  4`r +R L]|֘•BB|cIjPP`|Qq1:-^%)x ]ج2+Bsv.\sU =[C0g@fo֘).%IAlw$l0YzNo"'a 2jt3b*#Q"x#fPN:u5~*O*)sٛE<$"xZ.Ln99 aT;28[=ҖG,wCԮ* roiÁڹLR?gU^,rr!JnWtcȶ(sjN"mϲN4h1(C쀇4@{b?,lH>;̀EV1/uh[Mv;g i1M/mWex̵^l5b49{~lRUhf`MCn闃B">yvSI&p:Q0;Q>tIp?y(] ڔK,07DFa@&FBNnum\It#g5t\cje3M6Nhg4w#=Jn.kL2is⳦;s>9Ç>vzGyKMX Ds>ܨ g6nBM[0߀ YvyJgW5nOmJ׌u0 _O9܋G[l`q6(GRBƞf +)O( PKԗZIv=t0mZ$Ǐߓ_] R/Ghkn$ 2h,y7rZ)Pv{:oNV0}0fʁUׂgұ鰸Qc$dh;™!92;*sQ"PS>J\*U]Ԥ9TيGh[qUyqUe'tZ!>j +[9c߻rNyiL4x5R3-a9]ފwTMNA%;o"c&FQe4&T- DYIq[({-#rcjEE\Ez9f"[5TRɐQ KQ̮;R/T1k{^XEפi#8Mx*n$&ll16I# K{i"/˱HJ;+I^/oO< > endobj 4794 0 obj<> endobj 4795 0 obj<> endobj 4796 0 obj<> endobj 4797 0 obj<> endobj 4798 0 obj<> endobj 4799 0 obj<> endobj 4800 0 obj<> endobj 4801 0 obj<> endobj 4802 0 obj<> endobj 4803 0 obj<> endobj 4804 0 obj<> endobj 4805 0 obj<> endobj 4806 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4807 0 obj<>stream +Fo,ɆwZ_9`OX'/>7W b^1(zmp33RT&#sI@Xg <10ŧMVTGpe'udBIı&0 1{  +zH{ +2 S3xm::^H-TnPLyae|9lSVˍK]"EYԛ4CDz>&<%sˢ[Hp;~}ސZ6<52&a~h-hG!ElLRQ:F>m!M'4d.Tɳff.b}eڧBkhozK]̒Ϙa;ͥpdu-{#Ʈ` O@vl U gMG0.bf/2.1aBeN%QtPhr"#ж*ΥP}VͲIn˕В-Wb|wC5zU 7GtZyg:u9=n:ɀ1ytUXȞKd=x4() !P+;7YcΟul̑'\19A5 ڷVM-ZwQ#<7PzK;xKhm-^33-䛼sܟ_!ZbCӢ`gh>Hx<d8,Jpv0֯}>O%Mî+L:%'@}!PaU HCCW?kVQ<(PR"aS?s rK]~8R#q + +0̪͐ + AjDHIǨbM ۨt:0޾7l%) aʁ_~hsJItȰ`kۣ{Tɵ\sG8xgj:@ߠ56+ B2 +.fRC*2*aT=Gl2x-*9̉v{|>M`AZ@q +?m Й5%5<(Kک`\%C{Zb,[ַ&?'mg[.Fen_kӠ-"u rWE}5iȊ: lU[9DFtl@z$m{joXz-QN{8٫8f<}6bizd +STp`B"5 &绨AՕ +endstream endobj 4808 0 obj<> endobj 4809 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4810 0 obj<>stream +T4 @^\4QL`;"Os :*&yR`3p2ꃒ'%aM1DVUe7"" /+<1O.axtw*O'f +̕ٽĠT@=?~`)Cd0e /y(ZT\2 GwZ4f +ҿTu? _!8Yq^9ҰqT7`ikdasc{rT!'+`PtU|^I"7 kL]B /.s/"THĚ}<:#UFG(.=fVtt!eMhnH vݙ {+`rk Hip&]C)ΝW6IG(Sκ+{L NSpa8 *rHז/7Q;٬\KՊ w F*uŶz\08?87i,07 ~tÀzmx"Cv9TK +z,mOle녎o߻LȯJ3Q *BZs ՚ɣu +{$@a*MI 2s-L0~W`+SJ].ɛVďv5jpBT},a<l뀖K#9ZÄUv!eu(Tb/YSN\4-PǫGqo.*6О/oE /GOC{}]I&.ց<;eӮUMffG-}`JOt`1jr!FW2@ vQAXfv?#hF: Gp|t{Z]{ +endstream endobj 4811 0 obj<> endobj 4812 0 obj<> endobj 4813 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4814 0 obj<>stream +st]K+|J'maAKoI\y_6yk}K5ޅk/YKB?1ߖ3Su:z.!(w?~otV=nǴ|҅ R*7&iPК~.V\qBjxT9r4eme%63n; O8B. '."N3i̘84઺':RὛ9Z+_J1 +f\wz rK Iz8b:аKH m} +&/z f4nOїϞQ_CV`ppYKel-dbtf4k00,c{ND6yt#-8^ 8=Bnt45ip3Bv40 Aw{֝1"giۥdϑHB -ۻSVSP^RokJ ͅ_= 2[=ϺjLLԔX4@o - )z|b{5*y 7QEA4 TJM }f4n#0mIL'Ω0 +R΢\d&4%a"*n-4=ޖ1Ej$":ZH1|f}8&P = "㝛r$(*< +Vߐկu41\A:J_Άy0> endobj 4816 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4817 0 obj<>stream +@*Z4HPM + +pV,o Ӎ TŖ +qu:'Ì}5 :͓5Hwt3=Z&zȝG48mƼSE3"X?3)c@ԕn6EKG3 +q\ G wV||(0+oU!+Z6gc޺f̡۷M-`Li$ *~NѧC=2K:b&k.з,p,ib}y +Hgg&eY\h] f >Ut6c՝ĉ1X˪^f p>f!^ڻ7_w`q{l4牿#\p{bEI37̸Ǧu Y;O] %3ƇTd㭨 xi{dT1_mT>[Fi*C_ӂ]7 QB+!dz"βډ DL~X?!08/3cBW ߻T򠞱 =c+0^nJa| w ۬|-%JW^'03/z8 EX%Q1(9G}77`>!+> endobj 4819 0 obj<> endobj 4820 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4821 0 obj<>stream +/LK_p~k'FQ7龶([̧<mi(>z^3-T1َ->ǘ㼿r{T&HT!ވ1Hhkf֑pnxtP̶-lNSMz3W0j ] +](ʟ|E 3^Ol=%(h.ECm憼g-GR!iP?g+mop `TM-Rybߧ1bb"df#t:PVb&_q^ҏ?@eH^U}ȃ:{)n943lP3B%<:i55N@1Cl( +ћ$KLO+끮mx1]ׄ!ts&/y{!Ӆv8RmOtwpUwo MgB7Jɝǚ>dO9Ql[/1 P?Z^}gZrx]9n~N-c T/cC +[s,l@[Jϧ缛ӖZ^:P! Iҧd.n)X i+\ɍJpU\;GG]+p.qʝY>1D ^櫒L& +X2Ri('~TuۭɷY1yTc '*f>B^f}8,E`'nz}+ ]^_R׸뉓TCz'˔ $7IFRJfE?yEsZO3i'tBL_S~bo}hn +eOOH;;}" +cUrlug9y| K,tμ}#A,,-Hc`#HN4"U2qc,tԺ&`}>[Ś9͸kMItNZJ0㳯BLN/27x7͊lD[ i~rjwe s lՅg ;3 +ѵr0"nNٍaS= eV#[0]"ևĊo{*9TIʂW)W$2.9 +endstream endobj 4822 0 obj<> endobj 4823 0 obj<> endobj 4824 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4825 0 obj<>stream +b TN$$[op3A24m+s">p H՝H2+$6FbQbΩ95=G*욀z҈Q}uHj܀˟cA7 +!HD%DڮT\l?||C+d鷡GBđ k>y>g~pS @D{.+ (_? 1f$#h Piy9F;o#װlOa*c&Ðf㉹rrp@P/;2E2>AY__dsDu %rR'0Cml)UCAqf}Z#Sރ\e\2&=S + O?wCPO@`Ch^ ^tSViۻ(QW?MO U^ܳwᝑVjl||Ia܅ӎ&1,&U?twU 3+ϙ&4 OAI e mC$0?L.TkĽhAMl5B +bBղّr;tH?+9pFA/$=?h_!}"׾L,M3&VgH'ֽ1Cec&%"L,*+\6XqsIRsڋ^Ƨ =ko4LY=k({~)HܘJu][ǗA7ubJA3$p#@B 9< 9ɼm1RkD>"WKXM5z?֥/ +,F<50LLXhu]WDF +endstream endobj 4826 0 obj<> endobj 4827 0 obj<> endobj 4828 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4829 0 obj<>stream +2 5^(6n~yy49ٳU}T§(j̶%mI'ȭ±*7Ъ?GgMd [cl5&`Ѝ_Vx Hty!x3Өa1.F;<*Z=E5@7!x /r (߮XjD;CL~Oﲮ2 +;B|_e[w4>-#d%EWDߟV/ґN=d',3xۑM*=4" AlLɺ*8T4_Z[f|T\Q>y  t7K|S z4MIW1Y?fLSoH1J1ɞ16gi\3aK_fC,5k*wB>8 {w'(TAD > ?D9`2HL[ צ;Wl#+ ^Fő6L&_J0ijzh)pR{#2mc‘Y9>8,`""a h)3r݋)q0uC( +B=34^`!i2 QX$oPSf7kJΣfU6 ?sOici6k1(EZjB aUE֮WKPl'mIf/b}$v*<ą3c҃CO~!ˢ^ A~!\x9Ul=,T 2yä(Ṓl۱ǹL.2U5JcO> endobj 4831 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4832 0 obj<>stream + ҟ':Pi9`ƐW;ŃT +oV >_!5X J5Ez;~mPT@ץOVdd(AC5S؏N[X&sRuafq&L {WJG2nb1|,?H[Z4eP6=-ᬤ(pqGZՄDzC6\?x[#7 |TUw QK wb2Q k܌l׉~/g59eō UE^#FL;b_L嚸)qd×q87fA<U+j2" f~V9᳝%(17Sx\PG Q57PKMúY¸HArURDM(\g0d#Evz뾴pCs`p}֔2G jЦ 1sYDM\nfj + (.\ZEump;˟tDS8r@|JB{j_04_54g%6Ɯy>B+rC =Eb51ఛH@zmɻw{NĠ.F?ڞ*?RU@nh2|;wE\5ڏ.|9O9lvVe櫞q}Īo84CWfg?TBٜ}Bj@m[a9hjƾ!QPj$Ns($C|Fz_Fi ϵ3;43c}*X^fZER|Q )793.@C"B +uuի`t%tOE.y2cž}k=Fj2z! ;~g1sC2rЮFd776&>i@#lMDsiV9 +# +endstream endobj 4833 0 obj<> endobj 4834 0 obj<> endobj 4835 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4836 0 obj<>stream +n'Y,% (p!qWOhܟ$ay(WBFFN_ե$.Ȍn ^ˆwg$-1LVM7 @ `r( ;®iK[\9.>{q㯺aJ=Ggg*8lt`F9)?hN: +ݐ3E^z4{*)F\k Wn,͢ԏ Zi7kˣXR1M&J͞-uy#SDjjoFwz!7 =6̰ۡ H1hZ'*;gTdj+-+2UΏB.jDok:!{@_5S^ 6|&k1mmd~6k?>D;58>Mp,LKAH1g9#$`@^fzސŞ#CJ'/ґ}Fb5_}?oQ+g0w),"'ڬq^dmFYr:=rǜD= +5$$,TL'љhdH7wx&fstl .:E˓6-BP ^ꪊڐ!-٭$dȓ3 DO=ՖAɈ?VGr\Lo{pkb_H%X_|Ydk#!6&bmyȝ?IQ&#B` /ʈSY^?E+rj +]ܨciݽ װ-̊d[pH8M(HѥpB 2Ц疖9 %J5 +endstream endobj 4837 0 obj<> endobj 4838 0 obj<> endobj 4839 0 obj<> endobj 4840 0 obj<> endobj 4841 0 obj<> endobj 4842 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4843 0 obj<>stream +›I{R͡,/1Š̩A%j~ܾf+Kvʔ~6sypX5 `r~gMbI9|9:-uO ب.W4C3(o 9Dv~F" +4yBO\JPrQĖhv˜ (%iV_q^N7`jZj9^M/3!*W/,B +aɽM#CoFhJH0ˉCp+wOl)W(Kܤ%oGS;*9fh#^#)JDMel&1xhZ:Vṿlr2ǵPB/_hDJob)pn @I=ٗgs>іyƒz}VXx6&Q0Pu Dlr2PJ=Duqer*@%2&#ȆS;> +#rΑ[ ~62 Z7K%ˆuq9䬜{Q #d@ȀTBͲXvgnѮb~ Mܾ!+fjEtk1 nyy6uqWxf5픗s+] $97_;ɶ93gr`',C3gw/ۤ6_$)zǗ5|9"ж0AW8EܲD,|> endobj 4845 0 obj<> endobj 4846 0 obj<> endobj 4847 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4848 0 obj<>stream +UٳEG;&ٻDZ(3}Q=Lm +ǝ~Y^bQ2oC0 +Z|7Q—dĠPNDn0RY[\a{Ys\.6C1)6疞vӍrاDC{0;|="wl/sc]㟏.Euͨ2ه߳59NQ,KE^{,C)'@gIGFCȨ2UBb?k7i6 Dz$K "9;)9+2-vu)g>0>>[㶳ջJa'B&@HŠ<%vV +XgFb;hΏBd,[.}蛭 .: + + k`vC"|g{Rr@SZ"nz]45gt6eCdXAAmd$-i x9(iZ8CM/`b;'͵1m4!@sI=!L!GD\w]`oUti{Ѱ>kiJ;x3 +#5-tFb* +|PI~ףab*Vl?mDA3b#Bc;X*r)et_ +endstream endobj 4849 0 obj<> endobj 4850 0 obj<> endobj 4851 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4852 0 obj<>stream +DnDZ₢zK\ ~ r`4WK*SSGPY9Pg<^~h ͠?6)`5oUh8ݴ(RqzKC]Il<αׯ:`X=!zw)g1249$FT*5;NɈ-Wͳ?QǙ} BQG M8 5T7޾H7{*Pћm*4OŃx +D'.7t^\j:¢.3%'ͤRshc0eC?f:3Ƴ,".?_Q6VbRn!ZAԯJx١5Nr8,񍵉 j +\Bɜ =Aѣ)3M \UßJCw.5{MTp]h+9+UND#‚PsTCJF<;xlk 1' p/l&ǒlPrhGxCl +j'ВԣTǏ=Ν-P;(2LH* ^>t%Jdd1XtYV|4. L? K^[aO*5U| $vyB#޹N+p |ˑϖt?10ig6EiQ3+\'3er܉NE5~w3[ziԳw}S<i*,\eƒ_h W3N¬ O7;ܲ[;|4>C#ٷldd:BէC.quL䢚Gf*5sN#K'Ohm .LeHB2\S$tJx4JBٶ3o q!쓕Pv-eIVt^Ab*{Oeh5l +2 `:8)ww +?Y +endstream endobj 4853 0 obj<> endobj 4854 0 obj<> endobj 4855 0 obj<> endobj 4856 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4857 0 obj<>stream +55Ш'411(bQ;Z Rrrʘa=m0" d- Gd$4?]Q'Ur/;*:t hTIf2ihRHS+DĻ"D/Fz(qSc$J%$dC[?ڐm  +]<%bSRO!5NMUZo~Oy+0[DlVW6>3UoEᅫԵK6#W'pA)P J;S&3ѮY(Q%, i!#.E?Oec? 7 ‡u[o7'<܀_|?ʡ_Xm->dF}X?QTK*lۭqձ`]ԇ>icE4#gP衽ЗG>±dk/RoGMB&0A_ E. M Ζw%E&D{nHσo^.Ѓ=— +]B-Q*JA+苻q淺9㧧aG`Ȫ@ !A◷7ȧ4 \^ Tf޹Q'wB W|]=|s:lL'gø_ʬ `W_)D q;܏e +!8 zy>u}DBNoȼ_4\Q&oP]P}wFS&CԁPr S('R# %։nnF.O +ԨJ0toaҊ~4"dd:ާ.6nJ!mJG*Cћ|ԭ3'٦Pߛ0]nA7AjH5;7seL743j=`>'hU+3sݎٶ \:}3yơ0ݜq΅H&:( X'_W2>Yf+,t +endstream endobj 4858 0 obj<> endobj 4859 0 obj<> endobj 4860 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4861 0 obj<>stream +>!mfvZuͪ,N;%R+gZc|t+hAkӲ<+f] Z;w@=rRl c +x`%$3a2_ *:'X0@@$2_7س6Qfio&o-Pܘ~|>9Ll H˝vܸl qɲlMmלe.PgJA:W=YҞhɎ!R!_6|P +~Dǫ9b ظԵL&O7*@:AZb  (]{r{rܺPk- Q4dJwB7b.=x}B +endstream endobj 4862 0 obj<> endobj 4863 0 obj<> endobj 4864 0 obj<> endobj 4865 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4866 0 obj<>stream +#>;٢$.D39 7wh Oo_|8?=3vgnF}E&OrkzƷh,5ɵ.[iohs|ia*w|Ӕ'j:>g}D=:܀xZ/MPQyHk^iI>Y:] [6N]Ǚ*Mq*u>c-ਝ>:$x- M8Cd>~&r8='$Dc SS;>`!g0~=a/{0!.j*4@ZlͲݽm5,hco1: e&Vꖽ %ly'9,:bbΈ‡鏏2҃T7|GP'C[Z! LT~Nԣgw9jwgTZv<  N-V^_ +$*i-;7($la Y b }l: 1r>ӵMvnv'}@@1Y TNW'rڑ33ZriALR> endobj 4868 0 obj<> endobj 4869 0 obj<> endobj 4870 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4871 0 obj<>stream + +NWQ) 5 yhi:o"o*1ݔ72NpD%{@ӔRFf \fu="WDAJ!Ñ40 N/E5=Σ`B&G %.%TI۩[- h.ܵQʲ+ӡ+@8nhx8W>@UWY~8Gj$8 KݵJK^~=,#b7hVd>;01hckM[KW-G; +?t䖹%))CN\_( kw&,r-71y:D-b33.O{{ȯͽ}.+Js-»䡞Q\}:%5>֓NDOľWMǮ555'li;/Ginnal\> +endstream endobj 4872 0 obj<> endobj 4873 0 obj<> endobj 4874 0 obj<> endobj 4875 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4876 0 obj<>stream +A/x +L,u,*4=UMq6rS)Amg%܎{,3_U~oXx>\Jj75mCgx}GSJA1|g[nw\rl3߶5Z[3ίnƮEӁ 35IJ|d%I_>+M80Ut3qKy+% ΐ'w+wt?Q1~l!%W{\d!5eZLfQ֘BInp1cfZ4x OFt 3!-cKoOH>Vwkf>˸f +B +1gG h$5WB /[$sޣsB0~}6￐Z=qOo0OHs'u\\R`IO'ۜST@)5f>J7?|&ϩLOim=il$JGQ54b M.WB†(LTN(Us &q҂b`E9ąelU[뮳 3:Qz.d^o9  +endstream endobj 4877 0 obj<> endobj 4878 0 obj<> endobj 4879 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4880 0 obj<>stream +ƪ:دdpGQ~?X+Vb=;6oB̖IX`QhC{E>w]G{_<ɶj #֎KXKUrtlw4v?7DQ׃z~"voi̗Ӯpޭg95{ŵAma> /CVl*Vᝠ5jrk@EhC`fK=P|\('-83"&.+n(`x9pȆ +1+RDJ'CoVP4=5nT?&odW.6PwZ %9=ճʪ?űqƺB MI5"[Viئg1izD ދR'~de0,̰{*珉]Б61V(]!vrJ'}HpQ=B/#K[dЀbs͞i`zvl?G/) E>b䑺= %uE@?<5@Xd]|͆s.|Oc""(膳ҭ]MʉU1D fN|D +E 6`*FK@b )eNɍ&4UtNk. +endstream endobj 4881 0 obj<> endobj 4882 0 obj<> endobj 4883 0 obj<> endobj 4884 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4885 0 obj<>stream +ƪcZ]iWYi§HA[+H̹JSS}LԢ$c!TIg'\AXCӅt+#[ڮι&o'-"6TgtYkU@1a:̄L3Zm1+S7Uz#ӽ&>ʘl:"7|w\>qp_\-+ם$N3iܪ:f1@&P[wN;#|싑ݨ$q&*sr>U=%)"B q bw͆]TL4%Do[7-2'EsE7{ š4cKXx +ۯ巰>w>9;m Ǥ_븫[hzEnLeX"aV?c7!uU/mK.$钨=ӕJ7&,Gܦiɺ$3M:ԊûҼ%JLNw˯uLvָt |&+0be֙,YUE}(cmV_BUtڝiGo|߇5%-3[[Gٷz IA#$ňFGBYEQ@x/QErERWXANFt3hS 56)lFc`HʄurTA:%DӤ߅wh,ɄTCy%F>g.f'o%{m6ɼRE0u vvE[ऀN)Z'X'*UN ed ̌*|KZCq_X1ޤEXf05b'Q6F)r"{!1me 38Lt0(ٟ63 I/B87? 31|0#1vm0ٍ ֧N1jO1"TޒizmiI/բX5|0)uf>v~> endobj 4887 0 obj<> endobj 4888 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4889 0 obj<>stream +x +wm_88If8imD>8.DBjkI3Gy2e2M|ռt +ā֍CqE*(e`ty!gh\@okPΘpcN%G@)~b&1Dք"8ZH-׭> endobj 4891 0 obj<> endobj 4892 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4893 0 obj<>stream +Y<}le0}οyST0_}q44 2s \|~'Y!78qD!&x{ex?]˓hP#J;DgspNɜNuTRS@[̷%C~iL)[{&udM9;;x6T"QH([̎j/GsCk%K~mO^[~'PuYƃ>5Y:\6hʭ5ՠٌ'PѰB\j<^k_5{ِJn1f}ثt@u+ptۀj%NP班p3ǽr K츬ubHCCQ m&jgJur>0Qmiy+ۄO0hJٳW`FbK΃ߟq\>viyU> endobj 4895 0 obj<> endobj 4896 0 obj<> endobj 4897 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4898 0 obj<>stream +>3w5zAht-?'Cas-o冤\,?!4ٟyW1BdOVoYofJ2pE]< [$|r¿{H**gƵpDke _{wQGaQ+];5r]\Ѕ^F~9W3 ۄc/ +9mR.AS+%\K@yCp.8О6 ~VL05EZі}B+1l,W.V\~NwA;G@P=Lt~Bwds ֛aQY>25Ngf[4c«EAG\fk ?ұ:̶Ѱ36k`dq +d#+Q1~MxcwriRTb̳[ q[GF'n!Mi|\\Jw4P̀ +3‹&eNs)9ApsJ폣ß6+֙=בÅOāQzYOb0bOִ!,"_rE fCy A*}'ywSx~r+lgI{z]2>&^W ]*!'5E\1i)3«!C=TR WPZN(]BƒR DA2Bm +@kh x_ﰱ i + O$)v ҹ8 B)/m%}70}}tck@k&QeHH(}5߷Q',Ch\ɪn,yfӬ bSidHhf}uf8X ppBI$oHi=b!DwN&Ȣot`1`{aFpIZZFrnbc^9 +endstream endobj 4899 0 obj<> endobj 4900 0 obj<> endobj 4901 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4902 0 obj<>stream +=e=x us<\}閙U]myA6EH֌fZ }Y^}.ݟ)=o?eSi2F:M䦽I@$&$B'5Ϡ;WDf9u0uSEA ̇_Ij:^h+z1[r\sXܸ+AawEݭ;6y6{o-}; 12h(z[7(]#sJʉHj!7rQ cҔ 0`͙M/KeXf("VOO8M)\32_L*MH%e74iH[G'ZYt4PUE(0$l߉L̷(vKABdZxq,S1%v3dΦ)/[b&Ҡ*#UP rl~M`= cqx@u"m,cp3>whW禚3>لNAS7]U{ >fAKEtJQ;&n p r+MpIƕ>nCOeSC1ƇNS>{ӉgX,kٻ gqrgvI.NW%5$3᫐82f#9Ȼ7}KRkq/v7PT+  g٥. +{F62I&f^5ftZS/~uQhv6 n#4^lgJ^] +.3-o\iH| ukmѱ*ͯ 8 J.:kA +endstream endobj 4903 0 obj<> endobj 4904 0 obj<> endobj 4905 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4906 0 obj<>stream +mgt V'#ǤYQElZ|z*-]!AO7jv"ɊZTh4Kl!θ0in$d_QvEt+}TJIKUJ&E3.gUo?F;sjJYL4)1><q٥CI:?$ٺ,n֬=#REWvAQ|~b:vB~xQO?[?3GSQVӝm4Z/5 + P#{zQ"MOxK +'8bԸS*xZZ̝ڌKdtGR1{'';>[2B AaDg;!j޷tfȖܨ5F3A,!+v8J-!^g 8g G:o0ie:B!™K编9(4g r/!K^(o{-Xn$%٤)rjN199X81%̔&&H0Ȕ&U{M̻P`:iK%6njC5I;zĻE1G:b=v^wLH+O1M# +endstream endobj 4907 0 obj<> endobj 4908 0 obj<> endobj 4909 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4910 0 obj<>stream +3{?ů+V&N?02,D\1ZzǏHI?Ծv .^< >*sޖ\$='o`50+Ȯj>^J HqYlɀ't iM=E&B9kTxA/w߬SAzt>{:֤}.9G(1cA-(GnA !d^[ѕp`$Xinچ1}M\>N[Gߵ;w-79Y-x@/pCiyNj񸬕dJ\lYXk]rr[lCؒ1t sp\R5-{XIVbz|MHB^EyrOG[IvikPv. 'zΚ=mW՘W }rc;Cf7d"g*F %"W$JT<|3P@QITt\Fnd& qZ[hw~W?D-+#9-QOeBole)x8H;gJ]lgxW:X ,;K:-$9JKgX }\nلз`wǩy+]dlz[. $H@Lh %,"p_9Ngr,e]/v]) -PBMސ6)Wξbf> endobj 4912 0 obj<> endobj 4913 0 obj<> endobj 4914 0 obj<> endobj 4915 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4916 0 obj<>stream +D*v;e_$ +HB  +.&!ҷ +΢&/~K NL5|*[5L)>I83*%ի$Xao$a~2펛5ng{Ț< vk<W6JuwfꁍT$48lMKq!DEG_֓eŠ:r.TWF0X ܐZH7f!E6c+Ĕ0SRx+227Sl sz\ f@VѰ:F4kes@q6zF{#A\;d֩&s,UG$$c{DWEGXᆋ{hDNjף@Kmp:^A끬TO=2u!eOC*sz}\LtJ&dhpWg=q3e;:3g_C ^(!d;KPi 6z^Lv p;w1l^z>(}*O0_8M͈ж+{l*^Ј+xTn'kLjԾz.s+!!#9D,;9QIhoSaEW&n8V:Tuw§o +endstream endobj 4917 0 obj<> endobj 4918 0 obj<> endobj 4919 0 obj<> endobj 4920 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4921 0 obj<>stream +K*I}4ugkWn9z{,a2{ P^ P&TKĽm7؈S͡hkp=-(%sIv + @? hNxJ䄭 q=M>|U,%_rY曚٫а0{ =f,ԯ5LsgAQCbqeg9 +IVp;E+ӈq#_Y# EҊ9p'nH 1$ЀɄy躆@LE.y+`cgFQ[MMtq?۲wmx' Iۘ 1 @JF,`]5{Q؎}Fj׌(2@j/B#/{#*@StpE-NGS&Lt$s`%7$CSLQKp'xW)(d 鸞Mo1{J㚖 za AxEA:n$x"L? c߈ȏr6?U6fwD/C)!҉3oXƔ5qB>gUt$%vcoW0uŔܔzCESIqoLɛ +$Iֿxj &dԟ*QOit#7 6/?'Do~̒=U7u;|OCSZlxø| &2AUFCNi7S)B#꼧k%yK*gHw+8= +ݣ!Jʦ&̜ ܠ +endstream endobj 4922 0 obj<> endobj 4923 0 obj<> endobj 4924 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4925 0 obj<>stream +-n2/6h]' $-rjzmhYMC\fTCV5c}U2ظ^|k$Gna4;/JbPk[)t7q3PҪ +E r!-S`YMZ9Q͏5Ed:b.2-SQ#d(6!> endobj 4927 0 obj<> endobj 4928 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4929 0 obj<>stream + Vo/t9g$ 0R9T̛m']iR1҃諪0GBz1 d߄[OU3M1ަ-ZPR]@MTC4 +ڤ= jTWarv>ƥԱ[C.|aFhY4Uɭ+ѽl%t09t>ڨ> v/G9d% u3_ulր9ׁ.92EX'[@ @bfT'uÀ/oMTi?Სt /0:lGyS0Ѭ={DoVor_pMd៰nИb©++OPpY#vFKѫ"깤y_zQ ۊBVb8H0^++ +.L+IjIb/WZA-۹5e5̵L\]%(BCۨ(`"l<3l9]\YWųDhu cl߶R(ZA`ơѬm19Q!(џ7G!<߻Lw^B)n&uL IW$ + +IYi%VCJՅ|*Wi˅ =V,m]8vsZ dȑ~1OreU6藘DY$o8^=p( b~0~ bp puCax;+5M?zH҈gc,paa=pcs!d2 oi+ ,a" +endstream endobj 4930 0 obj<> endobj 4931 0 obj<> endobj 4932 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4933 0 obj<>stream +t +8)ݍM3]3(fQIIIPSڷ/jjgUaW +AU4+k/UJ/lpzd4_*ke"tk qa`թۑjy˹ +Uփ"3Fi"ˠw':L`&Ri:p4t\dyHugbs60޲;[tv 9[ygauu Y,xebPwS\jgfmv,̫rP~E;!iyΖ}:TÙBN@vJ`]CX49fdM\^c5}3XАsy(h<4lqޜEUG@pok ;tE}&WI# Hr? pͿɈc!{4&RY[fU&nFZokpb:cfNvw<Ft2ic]`-\9XF&D`ȰzHZ+w!52a*RCW8 lr"S4fŰ.\UBt?*zuŘX&]M.;h/WJ16AI&%}UvAS,'|,0L x2DzUϢn(FYSVA*)m%.^3Sq*8"UC:zVE=KtZ/S(Xꄐg% / +6SQ?G%@)Ԛ + cCK-NW%-w佶DWOV=Ot;JPtY9 <[\o4t/1i/E( ; +ƹgdIPD4E߅br[bUx2@ح EJ wɋ~ߍxE-ePᐰ5S@Wc@~Gȗn0h|SVKHπ"{9"Ft2PL|B/Y[W϶/pp]Kma`w"tE'!7 FvZw +endstream endobj 4934 0 obj<> endobj 4935 0 obj<> endobj 4936 0 obj<> endobj 4937 0 obj<> endobj 4938 0 obj<> endobj 4939 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4940 0 obj<>stream +dd WY\ZJȞMRTHhmMIlkvUI +'壴MK z=E&V@^3ֽDo'xmt ++ +VtKTLKH F.9V58 gH;J5L'8O'[k1]NP}Y/)>-)m-zY\7=#yG/ji4cG4TIj)J&C[GE"ocQ[@ty]ZyM&/m/#T*4w^N2٠j;◝l >yR=8)953$nzTnθ&"Pmf͞hEQIOaoAmꡝ*^bK7՚pqRP׳1MGrNKut{{J57ǎDI>ɷ +ZЙO-G&$J]Ka ) oɥC`$adJFKw9Rd7WJgX#4u6xRWJ>ҊH?\,Ip2诒B=؇H4U J^H>Կ~8R\w&> endobj 4942 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4943 0 obj<>stream +ۏ#_ + `aS ( <(\8LzJoxAtD w=ڄ}[|BLrD0PUd- H_èFWz36)8c' f&ܗЬo/5iQ(~C<DŽБHHyUlƞQتnXj 7.<__ ЍjŠtZ3$6|JP~C9ɏǿnAjN^=p{bt9;c.=.]ȔwQٍޑlE׶f*s_J_4*aR> /{XfOQ Y9AQɛX]?v_ +I즶n{#۳Sm6aJUh :XVUqҳab"|v /zz(v9,]y-vPXA)H!:ʼn, BJ1*gnTz:JllFvglJs)h3 ,;1XCF-k#3*)mdEhs(t@aH{+hJcWp_q7Ŏt'K ])V8'kMW2dP|:$yr(}AMvK +YVKaP~m )VKnf_DV"RcFI χ[eQ`š65ݐ{9y@4FCɞxZl,2 oK塐8)f'~(tT<4[xk|I8,g|P̞!a R +½zb{]pCvLF!Zu:=c)=K;X`?]WҭzpWO9<v=zH$C9q @?ʍ!64>1uQ1Q]ᵛkX@dz+etY O=c/׎G=b$ +fcYZ=f#mS7B D+_Jn_y[}Og^8gv(! f ޓ xq=rlC4PLa&+  +endstream endobj 4944 0 obj<> endobj 4945 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4946 0 obj<>stream +;DNj=^G7~wȪMDZPX`̄Ãeyȶ&2U eBsQ@; :mJt|pUAEʶa+#9͈Gg 9Mo/씇"˱EfЅܟՐ]r!t//捺awAz2L H^pG֝イ3 8lAͳXm̱B,q&x|h[;;nSXƅ{9$"]Q6,\]<P%kUuR#j>Ӱ?E^yZ*'ʟOj3x%;氣b=hʱtUܘu%l(+mv,ŋu5;gފ-;(݁Q瀓>* "/;#E'2EMYHMV-)Ǡ,d -..) +~[Da &U8ie>!t{bMcժ>}>X<ǜc(5_9^6Y(+ډXEmsׄPu`+=•:YXy$r +endstream endobj 4947 0 obj<> endobj 4948 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4949 0 obj<>stream +r]@H =BZSZ|}xY )?<{e4(Sv}_vb3;?nsit !>s(58R0Pƴ}kjHIa{whoQf0ܶ dӠӖJCc pò{~缍2 /g0pN>llAal" } :y_ J(OTLᑛn0V”%WR1ᠼfa>pGY_dxVw2t" /G 2_L)<'ODBRdXB@S<Kv@\VጯuF޲( ;z\zm<Op\1$'O;(=/_xx"P(SE`8Et2M$kO0̫+;#j? -k^z'Q x y {#M68@BXj[.tpѰҸ"֚F8pgn}G-,* Ysj.bjpxOL! }nqK2vK> endobj 4951 0 obj<> endobj 4952 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4953 0 obj<>stream +31f7,^~cfL}0_lj&to;J:>@Z`~i7UXW+z\VܒÈrRC`DiUn!sezr3QwM+2N7ۖv18j6vLM~_ǴwFCN)岅O;%q-^YjYrn-E- =05[7^vҪ}r6 ;d$zR:|[d,GV _@4)W9*4۝RwpW?w^@E]`D +lG9(iW]N̤֠fYBF*H +?Am:O83ZLt:˺G((AD2 +u󦋲2(͕\6fH?z:FaOb*tg^t2imC+ ?\cs^lK;v:^. #9A1@eD'&x{\9E%]>!ͱr5yNNXK}}&*@.iE+q(8n. +`frqfݟ+ "\/L5S>4ˠA5)'(A^&XGUSґo)IfVrI4@mE9j2M}|: +rDUäYKy "S(DwQc@W"4 t9n)Sٿ%,H4Zfj C`ZHU gΙq<,kPXyMa RNET&t)4Ƽ/э+RPm!mg@+\9㰁 . +B8DﭑB21m.;67->RwQ?VL-o +endstream endobj 4954 0 obj<> endobj 4955 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4956 0 obj<>stream +oJS4řpßG9XWh+U,j}nnE\U7WLRǀ8~MLmNҗ*RqN!33#e'3f%]5v O1@~D`F|…xAPуY˫A\DyFХvsٿK׆N=hR-N|=1-Yh2Jzrl"?1n"Mħ^ja9 U#C~ad_GPl/Hd+οj~T;?M +)Ŧa<,$HXY.K۝#uD]~<|boQ'ZMM㫍 (Z|lH`N:Qsc)WԨhm+Q;XxOdr0 PfRFsKHq;N'kM t :}p+Զ[䀸5zEye/ yw^, ꍝ;/"as)s,~'dXwHyGhF8<>\SjG .> endobj 4958 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4959 0 obj<>stream +J^?wB\NE~L3Yt<-7#yY 9&{UQł@X?aMa:Z~Jʻms@z]-tS`5ڇvlظ/_5qS-Zv$#Iȿ^W"&IyWXy5|U6U_[+ϓ^\1X:K`]?Dk)Jal=2И³$0e +$2bH7#*7Q6ц~y!tJ'y >sdPS$cSp}kyfX*<-)B`>2dݕaW/V,0(׆rD%1z<-/d*LLVņ<0U}[NXO4v+OB"1T_VT`%(T\|`b(,}:3BdU7EEQґ_h-G«hSɭw ۧ͢wMY>{ܜ_]8=ߓp&/b +"K)%Ötnjv+xy/]VA.g*aLgk#PA߆sAKDb5IDZ@X\jTʂv*\a>^Ǒ{?\`n꽮svm@JcM"MZ.Sⷣ\d5j/*3! +?!veiӀ_r^Nz#2*@&Re/nh09kP]x?(R(^>'LHOM{O ۗF@3ƽ(\v +endstream endobj 4960 0 obj<> endobj 4961 0 obj<> endobj 4962 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4963 0 obj<>stream +sIx5lAO=GݪQB84 4@7]ebJPwn4řLWD@w1c8v<]DH^=sK4~ӸUOa+HՓd5CD '9U( +Y,ʫNU9TwU66=Y_/l?> &ǻiI70Kp϶`V@9ȪS0h9z0_ BȏrIܠEvygvw'yx@n~~*Q?K.JuR("usiQ#>ZۥT[IûwAڙu{[pjM$ލ+*[P;=> I|c`Q=dD+)C$%GbXrQgH%>T+ԿPnd@}04^Fj xݤ$cX89 : @Iacʋ%ey/8m'! C<_%X;}0tw6 +_=6i̥V04%DxYh8[&$0o s(u Z =:ˎzHQvQHǣGǧn r|dz_#V+P…ȫyڊtq+w]:g#yy#y`dLH&B")qނ\k8_:8(mj::b¯iMr܈M&pWT4cs}$2hr/:mj=rG.bѥsw6"0{XpAdRP`26#F7,)4C"/kN̩beǼBe;ehB5P U)  E?7 tiR~ 7/Z؇ +ӝ$}RwvSOWx쉦gkqM7o'ӭWv`K_+uN Y=lbj9:'>H[fA._Reb~^1vv7Jq+k heV&.eac7F஖OwѦ#QU\R`x8V[%Ϯ@rkY* iyRqӝ?wN2|]ɏNjW) 4)Ǻ79* +endstream endobj 4964 0 obj<> endobj 4965 0 obj<> endobj 4966 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4967 0 obj<>stream +#-6?<ߔ*މQ."aՏ\Gsb~Qb0RTI9B9oVyZ1r=ko盯 sI |!pP8'/L 0 J`;u=R~7M_H*` ,{5FOc{JDF%b_sT*Қvc LӗRHT^^ mJ~tZ$9&iPMo9J$VU1-/gFpo)X< QOٖɤIj*`; L /ַOɋ8a,XD *ZoiOQ L9*uy1=ao0x@ 9O<2뎌`%O{h78~gF;z"FR|^Amڈ(cETh7b +Ne^mE1GڟW+}S7kǢbn)D@ p$uǸǧ&*z2zP*\ +0G T*Ǚ,_9ሕ}pE|bpDu*Ku 0:ذRv;zRC\+nOP;]t-ejŻ+麾^? 2\_[œU҆1J4_4lџf_0") +EMoOڳqLP)r "7q82f "MhR!qЫ~(TLc aAnr0s%$!n!<|"dFP2.c +AZY; iʢczR.dA(8a\6)# uQLeA +endstream endobj 4968 0 obj<> endobj 4969 0 obj<> endobj 4970 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4971 0 obj<>stream +p4BQ ˾L*WRn܁W +0" T̂C! ďE9we'BBp:ɗ|w3ں5 L5]~Xu ?+bvH} rZlyi ͒MO>|(7~eϮ5N7JX .;bM@#;b6*H߮"t!t, +{S=y#K3$n%4Y(!p5q*1q6Rj}Oղ^o\R(L$%ơ@Ą1903TN-w6XC 4+n $az"M2h/?D-9eDq~ EKdVGNb=zpXv[1yڦ_o0EňT }gEGSp!ac> Mw\H + ef)C;|l@r<̋Y6s\];mSYhҫƃ]nh"yTSaUkpu%f uF]w{*Rhc&4Mgp4C6ײV6ܨ|s~CO&"}cûk/mS PDYpRw9Xk!M=Gx֠!;ذ h8ä$=M}wUrL{鉵$@A(T\]h2y=D5лr*U`jWIԔQ-q6"B !K,/mU2MY(~J1̕O_EbԴ#^J~jvWgS +aZH#g\c_\= +B +endstream endobj 4972 0 obj<> endobj 4973 0 obj<> endobj 4974 0 obj<> endobj 4975 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4976 0 obj<>stream +2.̥sNVd8ٟ!i y=K#7WgTX⒵ZE.d!6&.ޮL^Eg2pァJY(MNv(>|khTGqi~V +`sxt*dmOr7Wkbx䃜J'e'] 7_k&/"\D2b8 i`^xe +C|Mmu<%-`y"9Si ɥPΝ.i)4r-AҳoP(nԖ2cTh !~=p'Tg?b%g:pUrh8e 0"ez0 ȺvP\keD*E]ʮwm:nC/W\T3FMd.Lr0曈`\e^DMʗ{so-hZDQ8+TU,_YwƖ܆+J`Vn]6:P ji<#i{i{K({<ő7m-UJlQEڐJY}"L(mk~PYoNg9e@vhDF%W~1x:R}+ԗJ +!pu4*9z\nk^W) +bW3U4]&6xRfjZ[~M^DogQ?;|Pk+Ң/QqY0a8M!5,6'b׊($K[*rHt]%V;<^7 @fhNo +ԥ5RoX(hX_Gr゙#J?#n? _ppA|gXt7/t0yn.qFkp}EKα:SU:!xG8wW#qJ\ B|=0"`kjaYڅC)z4Ym4n "C!!ǿkkV1!@_A +ηjyXQY, +pnyMelddNm +endstream endobj 4977 0 obj<> endobj 4978 0 obj<> endobj 4979 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4980 0 obj<>stream +s%sGD'˾_`/ .O ֌%Qf|Aέ( SuD#Q5%2V|uc+aaJj|^]M<=e!C@_;\4/j:ѿ9]P4DJ +0s NG8՞wA кpiV'Փlf+y8 5Op?h]@CxlqS%%s!5)@PW[b=>Y6:io8L(zbb;1v0^G 6,L dRC!e~g`3{eL5.7"M+S r`#ɳu)^EZccs$Bx`׼֨/HQ}wL|k QST%^ÁaJ&ka 499J|Wf`v0Г~$ \{hz0S6%niIVm!݉b[mvV,TlA1n *"U[JghϦMjО& enj$ $#@P<\9~JeMޘ;Q-`+w3Q"':}5 ^ +kz :~'D>d0"/Hpk5 Xl4,Tl:KspA!V;,Vef@l1M1BaJ1vdXI[wI|8tݸU&N+ vE*R(aݨv/VB1-*z ,Z4..$""2mX"T9LgiBBgxW;%&F#duҋE<ă{$ phgU^[$2υ%G>ڏ "; n +xrέyupGl|z<>=ȫx; +v JT#?ؐk8j +nN΢ +endstream endobj 4981 0 obj<> endobj 4982 0 obj<> endobj 4983 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4984 0 obj<>stream +q4>>`˥}sZ?ApٌKW{?,T2 Zhdxw; =-p0e& >9=:;67'w*ۿXxwc sfɠQE8JPjR!2 -@ji&tr-A&, +>gB>D.il]vđi G/;;` [V}Q┻n*aof6x&;(o8|p$,b}c7NEijx8 Xjm'^C,< v 2p>xиP`%SYѸI$?52 z  6[q=:5v6H>q٠؜2H3$C)]ޭ*>f_KH5XVBb=H,JְwEtt%qJ + kNIHXܹ-I9jE8`u\v26L@.<@]@(@8[c_冿 +*˱8 ,>* D5~F}l5truʹSR9OzMF';k:s*C`ם)=y+r[Dz30j1&}Kd\uYu +*>.46f`* K>P$8z mG}Oq%\͎o2}vRaH$Z{&> endobj 4986 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 4987 0 obj<>stream +G]OJ?{5OvbW]ilnMDj8+.JRr̅"Nj'yk[VN^Jf[L=xgH̒#뉎 i8/20h+fp+~52 +lnGa~nMz:qk*q;:U/4-\ΐ^ x:'Tj"*\cg`` +FM]pbh +endstream endobj 4988 0 obj<> endobj 4989 0 obj<> endobj 4990 0 obj<> endobj 4991 0 obj<> endobj 4992 0 obj<> endobj 4993 0 obj<> endobj 4994 0 obj<> endobj 4995 0 obj<> endobj 4996 0 obj<> endobj 4997 0 obj<> endobj 4998 0 obj<> endobj 4999 0 obj<> endobj 5000 0 obj<> endobj 5001 0 obj<> endobj 5002 0 obj<> endobj 5003 0 obj<> endobj 5004 0 obj<> endobj 5005 0 obj<> endobj 5006 0 obj<> endobj 5007 0 obj<> endobj 5008 0 obj<> endobj 5009 0 obj<> endobj 5010 0 obj<> endobj 5011 0 obj<> endobj 5012 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5013 0 obj<>stream +C >[L]Rޏae_9Ơq@q1=;*f(\O(c8mQ`oQczL$>ADbn|\j%~ US-N|rSJ3\b<\/d0ʵp!#xnTY#4^ɛ f7 *xH]rc"Gy]hXC<"#qͤgk"Fl28 AvJVD +Hy6 f4BV-V/RɂH{tjlvYtUM%"PYxR^jSHc~>M"Hy HjsA+Zl,˄S$ A$( ?Md߉%/M)$TE猣)!l`ɤ}~+dN[Lt)s +1֭[ҏ_GT cK[l]YPtAf|vDˏ)XK~m‡uژLc}bTXMYԐFFw朸&V*”ԣk,&v KƧwIYѱC!hG|y !*!HApւ i'R ◴RLSed!ZtwTۧn%R2P,PkuM}M 0}.b f!ܱx_3~&< ,ˌ;g.B5kH!/HA*ć`u1e5! bJ|ևr_lʩ>U0ð6^7M= H-(aa筙sYk\++kq + E풼tFZH[ mYCڞZIe6`fmݵŠ0}O9JJ)*A2\`B_ ~|s8[LCM%)~Mf#udJS%"CgD8x,o *9 ŀŦ23{y;da6f$?J'}7UDŒ]D,#g<*"l@}KdPwP\ZȮJ͊Pˎ%}\KSKc#U?{+ ..OB`5}|&t~\LĽ|LR{s^֚Lga-|=X.ˠh xB2NLYK(Pɽ I%g^vMr8 oW;*Z' 1eAΔxhԮr-\1NrIJ7ECf@`I(FóK1H5Ҿ"pr`ݛ1XYAT!5r~%+x=6Lܮ=-jɔ,y2\% /3Wv:|*HBLe EOq(IbШMFD^b`z|u[m!dQ^O$Jt$7" pU:;SFF `YoݷxȭuM0t|`=&!ϟQkeT2cOvyvQ8RWTIxO{rFaQf^ tTG {rރA%aFd2qe>t"SApWQ"P+J +Kɴ$mHmCoHhzV$"'DZEϑTBβ˙g +hi2|pF$NfE\ଧhv-IxW:]$SUDrkLf;ڂlV8۴OHٜ)0:騎r3ᣴ +oCn%lG.ke([EpA9cd:>=JI@bWq!>kif-Ë" +"j JԌ+sdWf?MƵ;cy@:k2EVeww^ZqCe W~ȴ:xj %qY=þ,p12p>ѨF@yFfQ~_ \*2!*QG'.l*V;{``$|o lUr>h$|> xOtXc,Nk}ȩ3\ RQ `gh5xX %X#ILa~GejH-"f WC?i $(/LߒG]&V\oϞaCݼwhV+KUsy!+&f VyGD?*@ˆV]ib}[xaY`d򝹐i |gHy{ ` !6%$i̜hsBZ3Ͷ!1;)Â(" K\*}f?'f8K.F3%3బ'Q}2L3jyӕ"m:v3dM;oPb}zW"ԲB]JdI@0Þ(DKa׹h*W q7h3bxuxpZqblC[r$>Հmv+#\wXq@~8 3dT`` R>.|I+N +vi"!+BOBV &# +vSVV-OZ4 J*ySMkŢ:'OC]ȂR?{|t\wYdr5%Au۳=t !x8y`{C\4C/LOAG9j7A WǙ`oW1bbmQ-:" >{XkB4Ou#K{6sʔUz*4U%,ejCG!*l玑p}%"1|Z6,3s)҄A"hhuװ_:qQi>f:İsQ#50[VsUv'Z)=3` >gnut|ӌ ܩ4sl l.mA +IZ?_u:O10Us2!'d=$az'j7׍t z:#nS睆F-iZv^XβNX5\.OE>[;5PHђtP܉G [`9 Ґ;Od]6pQ_|@* +LSb_IG>L5&<O8\)9T@o> endobj 5015 0 obj<> endobj 5016 0 obj<> endobj 5017 0 obj<> endobj 5018 0 obj<> endobj 5019 0 obj<> endobj 5020 0 obj<> endobj 5021 0 obj<> endobj 5022 0 obj<> endobj 5023 0 obj<> endobj 5024 0 obj<> endobj 5025 0 obj<> endobj 5026 0 obj<> endobj 5027 0 obj<> endobj 5028 0 obj<> endobj 5029 0 obj<> endobj 5030 0 obj<> endobj 5031 0 obj<> endobj 5032 0 obj<> endobj 5033 0 obj<> endobj 5034 0 obj<> endobj 5035 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5036 0 obj<>stream +Xr(Y~$#<'.W>nڌªif@><#|MM,*Uo&Dʲj(U"/1s>i(x@e퓤D@*\i#Nd FZ&=j@y(y`k,>[^懺L)#M%osqzX]9KEf4Oa#cB f=u0S&2\bI8Џ`n\\Ad$x4E+9" -"楇EDJp@i舎L?컉{i=NTĻq" d{Q9'>ն5y?WT5 F'8i'Ins]3DA1|dD4d-"4𮓃#Cuu:-4y}󨈸Z{,<.W2:@l+Τ LuoGxדTSȘڑ^K\Gy@ ~\W7Feʤ,~Բo E{1RGfE`B&tI;ÝHUX%e5 +1ͪ TPfI8t%o,u +\=V4 |j]`P^"e5V՘OB İ:I)~,VIs2 + uji؎2 +9zǺE3Q! #;p%8D-Ă?@i0}S{O: +20exhN49DVϔ$@"'}:1$~yoђ-T2j祛 <%6F }`Kߕd|;K S2 )*0r=VK&D{ ,[zo^ǯC9gRIWyyP'b `vN.{ f;Hkg0aǣx}ƨ ^s6}J{,`?c#1m!q2=p]L/[r7߾(40_PU11;\tE$虭D)0 Z6Uvi)W߆yV m8dM$y]f}ѶobhjeI$O]}č٘+' M꾒 m-O6̛U|tđ!-G؂*)SZL^-gO g^sq?@J(銆7j&.aCVP9TZCd(i}% +. ܷ|}[ G|)؁dϻATP7R_6c hUV~Eu1W?<9^V8Vq8^fClc߹Sn-Nn©򍒢ifAxQuT'P_lȻa *'DGˀ/#s4Ia\O(V~Vl4zk5\ "Vy-s,Ehh-TӆKmmkF:%ɱS̏Nqy}mOCdU|9ʊ҃gF eiR9'"E.%wYgjf5(ي6sVM-`Ȓ05ęKG8XV–-y{K i |Rm`gڅ~i%=')T2 Ғl1%a?>J7x + .|V,o2uSpHcUnmTt*" =ӕC鸤üI&f.$<^ɬ_C/AK2L)xS}>|X6q0uhA,!pՐikSr=pObWKdhۤ + #%?,FP eT5O A D֧.ꂌKK EL@z[]TAB#(T[ ɧڼR#7ZC?$R[n/!}U\[^ZS§O6zz`& J'u~sCo]H;b[eu|9wH+dpepB.iAL..bwɝrk@N?%C}PtӪucD(ۥȝa>VJʝbe0;"~[L06G)骤u΅`vLp\45YES7L1ϏJx2 +Y+ oWI`wc;TzaWJ-!JfwzFC譀CAr0WJd4~Hɕ=31ē调;viP$|d2_&d-jN_Jb9!v1J#!,Mm,R9\Qe*!G{ "L@Ӡ|VП`ׄ26XV&] +endstream endobj 5037 0 obj<> endobj 5038 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5039 0 obj<>stream +"vLBZ0ЃSΐ'h. #D +N d2MS4_{6R +DE-'H2i!C%yΚeP'U]P3DǶE{4^:< Q{rZh^qQdj;p6 Lsvg46?4`Ś@~z ˯j K?$+m3>IQ#5ѡ#jSh^Cɗd8**S6ރY=Bmnzd*L;wVDU_E-Z1d:k^5^9Z|T k=0Q gX"!u'wMw85 :VCSNz^_Vy< 6M(#^gpiVl*O i_U59{tZ4HcFo(YT㨌 07z7SJ$ ;Qb(*[})41g2Q#O?Zu;'fA2CM: 4HJéZ"ab3 OZ ~I#[!ER?v\=cw/k)\:h,2]i OY8tI/M 9B}X;H`Ju{{ƀ;1`BWXoo ;d8$:!V,]dIg XY<ߟiZEbUKZH![n( Rl␉ AmܒD=[SW%ٳ +endstream endobj 5040 0 obj<> endobj 5041 0 obj<> endobj 5042 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5043 0 obj<>stream +$_=xGR'm6nR{lv4Fcs d=70LKG̅`WcIʡ!#*DOf~W" SeW/J@1>V`0/ܫaZ$-%|Iū-Mmw9 }DjNA&0(8 3,\q;A$FO*X_:hMƌ{Q2L0w=jgB'B[t;ڣ ]WAkO%pνZLHAe6 !B3RT~u殾&Ѹ6%h[kՖ^af vK6aW,No?/b|8ثGDC³)сQ?ZƿVRbvz&L֦3k>?#`xpz)-ThÉLF5ӌ7Ajp)*8G|&{`(q`,Wo +)k,wC7\m߇([\b? d!P65AB=1AKjଽỪf}r0 +mOշc +endstream endobj 5044 0 obj<> endobj 5045 0 obj<> endobj 5046 0 obj<> endobj 5047 0 obj<> endobj 5048 0 obj<> endobj 5049 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5050 0 obj<>stream +8<.]ܛ#. M`+ gZ@xC@й@ + *CaM>  ?=KJ \-.j7 eEgHG%*>ZfTbM_w zImNclm*D3x'qEEV5ًGc5ƒbZçMQ$C8Av1W~X `d qxjձpDiSzyk:d~UdJ+{"IPt$}\$vY&G`|IW_Hd-l_=31(0Ee14k&8ʐN! +?01%sp #Z ǾlaЈ~-r -; _ GY:C >6E(c.fug'k3)AtEOwW'>#s(,aX-lrfy$~Ke'L;rO.N6kx[#AC{0 xg_Q9*+|,}E 6T&Ql A .&d^g7(ᅦ89P4,l斃{cb+fզf{joYYu6秈S?{^r7$\'(q5УnE~2akIm>")&~|D unxx`l4nO9 +m)4R5lYİ 6 OpEq4IڦDZ#B.k߼j'U|GmCc}-a}lq`V# /IE+י:OpWye4 Qv*Jdn f'"$kִ$bkȤ/ST"b9](aA2al~FYDD3.^N]1==wi'k> aYS7@ V.@F mb{ +]Znk㷆A8) +endstream endobj 5051 0 obj<> endobj 5052 0 obj<> endobj 5053 0 obj<> endobj 5054 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5055 0 obj<>stream +I/bH5h0CkW]O H !07ņ IˣM؜m A2#x*3#z,BP~^g mX$#qP.u30W #]n^ϸvEF,ZT\нsv7 [N JËRuԟ R%UJ$BBi5~#ZWW)Y^rX( )r:dЌ5n&q-(ۆs]*$ >r6 5APokYo"pK]E#Jƾ/ʷZ]MشFe+t2WT,@6r*F2+HR"ZfϚJ. ,lvHH= Uz# m!fcs#%O>jQX13q2\)s0瘎,#1i Y X:\V٬a̮N4?/Dalnq, g\tu^78.NTo29^HҖ{s5؜nt=0tG +NVOr`9絪$C~8Dr5P WMYht{{6GY?p}`;)RF;ǖuO<2D>l^jvJtgf$^µXe6hTriE%@uT*m%Yr.鿦Ћ2ܝܮ EνW qZ8_; fxC(3hO&ljSWH , OcfHt;M"C%9\д4`, +6L=NBb̗5Eْ;[4[ ,,XYt> endobj 5057 0 obj<> endobj 5058 0 obj<> endobj 5059 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5060 0 obj<>stream +¥V>>;z:d98YL+Fi)ˢ88]/bM)U-} +si02*M OTYt +~Z= +HXqz3I9XS%cw5]gDCQuz_ #&p9RԊoWj:j?og|[IŦcMr/SC?1)YKp W<9*teI t͞-X5忚Px3E`8ĵufoM;R;,d{i=i[Xǟgqu>fHm(ỜV=Uh`Y`P1̲ pm`~sf\KPh ;xȽE,]E${,9Yj6r_^ RZT11Pb#װsqv^o7B(ٍ>)e&5XW?hꕣ.283RzoTM/ۆ9}}VKJgTWA׬uRIlbұ+D-PWPQooS+L1qͶcoyYEhnݶ0vXzWe# )t |V=(3 _Uocd%O*3Kp1>=V22O[f&/S'aƂ6A2|-jJ&ꞈH3xfjMA!s3MCM;c(`f3O@#dHcI X:zGd>|QBTGk:"tg_{B'Wm^ҍp +MGq,KCC+r{ y/B}IۏaZBeF.9zxF{Х^$bXi/|3pXrrG@J*`~T"SRr$!q᲏|!ju8$kAZCBM@Fstr7 Wpdɒ'"$QL9_*nCB-LVt Ba뼳]iJW.ˈ/ mxy@ ,+ {Y 0jq1M^"Z0Tezq EV}BpîﭵYTN4~I)fkɕymu%qmQcƺT{ڕ^3Nved7O?ִKgG)Ƨ09X2GQz\SURC +endstream endobj 5061 0 obj<> endobj 5062 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5063 0 obj<>stream +>`Mlz3~KWQrT$641lMx ΎT[˦VjqjUR`﵍  :Rr:W- +4/غ.&~4 ?o!D]`s4| p}yדlaEDY刦Y*%!x[_$mƱYviG1V7Q&PnKiDAt#xs/؝/|SPx-G*7ʷrE5\D6]%wo̽.2:d-#cώZuMqBD$I#;d2'=h(]E@}lgfCn(0djPfa@뮣% +O1YzIr弣6µ%2W.t rϮXIhsUe>|YH+V :JVh2eG{xikliUϦiP}#,@%KN?G +w.s5ϓC"_m.H^ߩ%FJ]|j +qUÿEZaUiz0+ky)(tf̃=R(`h8.l}[ƺ7^Vm"]9V6e-]aX©TppH->ύɗ9-s}r<%4䠿piZ`H8Qp ZC߱* s~Eݲۼce-,3!+1@(/!vnA&wgMz凣U'ؔ +endstream endobj 5064 0 obj<> endobj 5065 0 obj<> endobj 5066 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5067 0 obj<>stream +itkc +]fgK!(1ezC`_I>w7@e|V.֪LEaP3x2r8kZK +[N:N3Cqu)1,Gx6W4  (ժjbHLjWi k ";?,n.WA깑<}R 7p&3{ɓ7oz1Du-7wX3uu2^kƾ\a.&2Hi+fmUz}o5tFֲ^ݹ \y_C\!GiBnFSR1^D&H;sQ:E8F1MDkrk8@^%]*vmTM6+nHW[ y +#aA1f8NdQo2AROQj2CY%XMY4 z$#0snnͷxd"j獋ˤr vÈaRbP0+e+s4jnzut XcFU$> endobj 5069 0 obj<> endobj 5070 0 obj<> endobj 5071 0 obj<> endobj 5072 0 obj<> endobj 5073 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5074 0 obj<>stream +3yKWXzoU-•4݅}Ke2. _|T0TVN PiM}0X6:䍮p9jإe=Wr`2}ݎQCy]vP^Jz';-LJvl}HT+qr}Ŕ@@p_wnk/,J"tAcQ`sP3g #0 4oag++쨬G@P;(t뭳Gg튣l~ c%-C(CaT5 rNTVGoO:H]& |½?b + h&Cߣ$'(_ Vęܚ¯C0i5<;)i)]$),5NBTd`|svK.؋Z}MK +endstream endobj 5075 0 obj<> endobj 5076 0 obj<> endobj 5077 0 obj<> endobj 5078 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5079 0 obj<>stream +E 21Hk G#pQx>ЬٯeFm-PS=]CiCG4G6'aLG{x'i[+,O2`t|^ R8/ LpT{Sbh*p u' <ɫ`d9%p0-+bKj(~VaB_ŭt\): 0*n|{HF/} L +/>J?x8YّΣy0x1c}9^23B'Y{[X!)>طWqOm mz {$<~Q=.yL,W9SB•q"M^Jn3*98͏UZߦƙɛJ[a4,A)EZV6o/ʛ$,mK(^WL{٩,ts)$ƮƘ.|CG!ttKa 7A]mdΓ{>{7-;- Ծmʜy՗ +ԍ@ +3yNKgZ5@} +endstream endobj 5080 0 obj<> endobj 5081 0 obj<> endobj 5082 0 obj<> endobj 5083 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5084 0 obj<>stream +{HA/Jm#\]@p,`- 뙭.rܟKqA?uB<6ގdَf[  jcI;'aOqw3ٕ˭J[-Rvv(z6+ѳXTtWPTpc[ BimOr(i_ +~𛻖Otߊpū%4c W VM-adNHY:iSڍrXi7jP%e|Z9X,F!;TM;m)W|ӝyI͈ha0T"T䍵ڗ՘M䡏"qZ}XQ~* +s +fNfa 1A, ٠>MC7jhxC"Zv^Iy":3Ta4rktɠP>m"қ25[v8dkt%I5/ 9*s}seIofaraffUP!a g^uWY؀檆^7$- +endstream endobj 5085 0 obj<> endobj 5086 0 obj<> endobj 5087 0 obj<> endobj 5088 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5089 0 obj<>stream +7URX\6fV!TnG'-I+yk؎ NΥ5Tli ݭt3&)[o +k'}O1.q'd.]}J +$L,]re#j',gUBFOEyCkњW{*BF=ҳoh<wZ(#zigK)vcYtѠW%xz58#QscOOgS4U!6RHdz1hZH~7B"HDi*z)+6\<#~c" 0NebM[*TMwfllh$;2#S4iY=c @M)V)^pc }YتHR)J(}|װB*32{tGXX[͹ͽGJ 7U`N弽[2w"S ,mT=n\hqt3~ (˔^aU.aT]OJ)||N\ȳ8d ߹c˽)5]`-S'Џ +endstream endobj 5090 0 obj<> endobj 5091 0 obj<> endobj 5092 0 obj<> endobj 5093 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5094 0 obj<>stream +|,nA!0ӊzХV&*;\cAGEr㥲/5>Bdzu^8}'2D^y 9=m5z\orkL` $sBrE~']K{orQJ44_0@mi{2ΕqVauu.ܪ ni\kK pG)1vVtG*&<?%T6l?WmxKa0IUƓ޸>uGُyTc7Y) 1WB' r@i>%׵ʦB6r  +S:x]K{IOdc:>&?{0c)ipU^~%O4n S@!8l)BH6:\UiBi:]G5 A*MAJ6Cm2=K4uOkTyCѧGC۔$߀ E@3}uVJhb.[JcH2_q +ˎ m1zL3R+H\*c +endstream endobj 5095 0 obj<> endobj 5096 0 obj<> endobj 5097 0 obj<> endobj 5098 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5099 0 obj<>stream +ԽN:BIiAHn#ɹŽo JGZ,f@ӕTbRQ|>ia_Cjumuzd\%m~HɬM"J$ĮrcBg]QslX%E a (KxQ}Sۮ"㔑'~1"vC,c(7ljg'`X5B*)DOѝ_Rzdm| 36SAnU|GFv~~y䃙 0d.#]ZeٱYqNy^(HO(!þ+Q^R:MX/?ٙ9O}_|TlaՒs3tN ,Š2>PV dq|ybI?c6r!+zZ.6;ծhCj&vÈC$6e Q(( ^u~<⁋ e GHfG8|HH0D> $DW^њ .Cy ܹk= ^Uo5y]Aםy\Encٴ˯vf[PmzB YE%E.מ"w4j/NG#qc5~IihFUw,1Ir崬 6*- VNG?[0(oEf'v~zŀ kh^Rk I/*(FY~S> endobj 5101 0 obj<> endobj 5102 0 obj<> endobj 5103 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5104 0 obj<>stream +H|F-BD.5JrT- L;a~TJ6FsRqyxUaԏcX ow/ Zn?Gc;38D)+_ghIS>v*Ϛox:q!c(X anog󐻎GȢ 7&cmaN!5D_9}w +zƭ GzmsyKwlkHqg ;KFNx^KB\!p+sayج˂pXۭ5qF55!f̖(&; $Ńr]xVCsPuZ"pNTɣXՓJ5(exSؠd;~2ԸVGGӭjh5wn,Mgg8Ubj (N +O:mN&Y&t^٣Np1[yoTRd ӽ!DneCnr_Q__ue>*3 !WC<(rC#)|G&s]_E,?! c\?JQ ~$&GS`)EX +ժOV1zCŠ$%1r"bxhx7'h 4E6VgM )oI $ɕAL(8AFU> endobj 5106 0 obj<> endobj 5107 0 obj<> endobj 5108 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5109 0 obj<>stream +@Do0'h=bl +oRj3Q,ĵlԟ!-&e'm)gD5cD=Կci",9 7G*ۂنho^ʃ8Q Ҵ"7 kTܚg=k̞q7 J@c͐-/}popKR16NNl[,&T;P14'ⶹ-Qȃ!n;(J1! +{S˛xwdƸݚ-Ѹ[vz>nHO}چ_zIup|lE?}xMlbAOзPfmdZ0iL *QQ,Vy"ԛÕZ],%b8! O[H#as9ǻ8 +Y^I2I&!RT̃cTCgg~!!X9ƚcGdH &wՖ1'-D\"A۪r&  +,oN3YGXE1_D2ĊB*]D`MX^jVaNIsIf;ﲾ:S+&PoRȣJ"'tO GYwru5RǐMc?!m/ctU"6.bbһH-J`-pķo ɠ բzH=L~yC@¼w1> endobj 5111 0 obj<> endobj 5112 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5113 0 obj<>stream +G(B!M]ޑ~ɪC?%NEĒaiPdLYT8'uw?rv$z@0&%go&9YC`-Lr ᤣ:U\snn]V(⤠D&9p  LknmÙET"V +NaSY(3[ϏE8PHdoJWpTĤD *߇ +6?/R= n;KJZ+^)LN${KtṼX?mfSIlN=- 'Gu'{샜+$6O8uJy˙[Rie68ϰ_tC +)n$!mn>D5#2KWWh7QQf6(=/.R{yg*M)G#k.Ğ!8[ QxNx\joa'Ojt$6nWX-fX(2øP*ǁK,\Zܥ *C?ADG~QJ$^TBɠwi+̡Vd[la?8;KH:3|pɤ\?cFr4ǔY~ ΃-:m;^!}|/]@dtC1!.՛*Ӱ.DNo pp:'T}`4Ed"67$l+HB鬨fO([,-<cIq9x(yyزlվ4Pie(PZ pc#r~{h3BsxtwOqk+u=LJOrk*M+8QN&dgRHH@0%` Vh&@(i;뷄%o}A0̴~ Qžk65%iJ?D o Z\bO[C6s8U`FG i +endstream endobj 5114 0 obj<> endobj 5115 0 obj<> endobj 5116 0 obj<> endobj 5117 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5118 0 obj<>stream +mNDxz y;+UR%b3@bM\FbU[sC2kdkFf=ҁޫV.pM,)DDV+-AV vO`ܺXLLA +~Wd<5B*X'gj!paWy5y uH)tŧ>aPndf>Ćf +endstream endobj 5119 0 obj<> endobj 5120 0 obj<> endobj 5121 0 obj<> endobj 5122 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5123 0 obj<>stream +P)e1cPSu&ޜ `O5-" griǵ&d H{]?P0-J&wˤ<[f7YXRKs'/~A++,mMX܂!1Cٟz{<=' ת-y k'UKUoCw +g$R\%S]r&:wH0Am8^}-Ž( +Ѻ͟a|{B5G +{<j˗ًe'%{ZOnCKkHZUGGH(kZ9@ף1"ix ~d!L_v@'h#Q[vX]a} 5]Z2BD +So1f~zfٜ&6D1Ą 7J w4RG8*&[˂*8AA@Dr]"vl̇iBb=Mh:>ԖZwIp+?2"0B ,9/ɸUB +7021H36QxVmeNamR$e9OT Pȭ^[à-P@I 3b7&JN! 0\.ܔa%Kd(˸RRMHyX,VmcϭƧޤ]? 0;AUqgHKK0I+vL'7,.F6<jQm,n1wpS2r7zQ˟,e::bLX>MvGj:u] I`X^B AوP;6)(P͝QtZr?uFEt!E> endobj 5125 0 obj<> endobj 5126 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5127 0 obj<>stream ++cD0q4ז\>HF6͕w]#48"TӗF>6 /܄Cd1j ƾns=D*H>$pgAuttkw'L)?Kk+[p 9=BJG\s J좰4F%{V$՜6yYko,o uY_P͊xC_>0^fݚ y$W1*Mlm;ӜVi|BVa7et-UQHVS[0`nq7 ߎ>AGGH?܅FyvjB?KL:/-)MҨg u? Egz{ ÛzdηNN?T6ӿ1sKܞ6=_ CWE-|Yx٪L濖b ;"3(3SIk!@jSJ,^r 9a&G("B7w}e?Qz.HN {X, 9N.Wc$2fG[ʰ-~Ԅ_c[1*+]4 VC"Tk P=`UbiںVh;SJ;><r!r` 1wQ>{3.Džғ4 +B "T8CH/)' +;aمњ 3z D縥^f0b)I> C +8.-C@l ̑a 5N^ח]ک{t.޹~W F:ZV?"P{nQc%KBcs+ QGm\FݕAM,x~Uh(< +.]ROG1t,w#K=r;4lCڲb٫ i 9eD+o/B~VQx!YC[V="Hb{l5K[d+rR?%`DK_߱~CLH0_z{mr +endstream endobj 5128 0 obj<> endobj 5129 0 obj<> endobj 5130 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5131 0 obj<>stream +AW3bt1,r:e DΗe?CM;~lWo^KdK󘔙]Vo-UA} ;Tu7(ż.puv ϰ)6*n۾ѧҨrϦa8ǛV"xƩqO$ໟ0[|PQo{|އ$Qcy~1gg\X$= +~e|up@6P_"skD$2u]@YSxht{{|k ܭnKЁ;~MY+-%m6t`N͋ ^=)k}M!l/UPEBHAǹ  (e3gy',S`Fib9xXǝ9`X~LR`x=S.nV0N;@idѝr@Lsd-8/?ͱ)FrJR&6E'1uD{ ">8.=_@$0")| EOb1qމLTtqlHsPxnGZ/VVui~-Z0v*,(U`³>v F\s u>-Θ2j-Ѽrቻ-ڷ@>XVޅ֛#%%3u}x +G={{@ᒻs}_tT??;V.V=Te*tơ^^m\(Pܒ]tWG?x^1Vx_V-}+&mL"ջ*ݓ6vvjYZ#墨.lٿ`"5)|<]IS;μii9+L=ҩPh!0hZ'oI-^j$7 n/?4:.c [15ĹM8ZUo +endstream endobj 5132 0 obj<> endobj 5133 0 obj<> endobj 5134 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5135 0 obj<>stream +^qz*x}G4[^Rpmuę-PܷלYo8|NvL,#~"?>P; ڎ54R< _C@̈́iGEYrUFrnfx u+ v:Wպ%B ^a@#@ׁ;5]5Ocܻ88| |x(O/4~M 1"4^׋Otk}'iGHGtO,BaӉeJ4qQ4Zb. NGU +w$ ?Hnal_lͼ1|;Qmk46R(s=;zk$0`kM?cIIQ#?- 3U@͑Ki}cNDUeAiHӼrȈQlP2~\OL~ >A2])kb8!=ei`#raD47v̯l#t68sUg=#΋M('9Rd7 `vD\MɷSRyq،.:f.GaV[~g{0@(Rw1MY58UX#@PؒJZ!w?0;te)%jH]S]<SOŊxflDFUL=)h{UO݈vDS?Wa\+,i;9'nA"3"wZ9\^+zEn|H7UuyC"G#>KAm,̙sg3@e5{iP) {6p%(zSR`[&v|0O)Y)ѯ*R{_;!:ԛ"upk#i\w^#8?$Za^(0R#[X,)rv_CAO|̡idmbC2hC6+k~{Wϳ,=!ٜXVq(&RZB$sKijIbz@ qSMIEo/MBFCiq-QB-'Z|Q1VL5)%U%8NW)' Ick@ +endstream endobj 5136 0 obj<> endobj 5137 0 obj<> endobj 5138 0 obj<> endobj 5139 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5140 0 obj<>stream +K}< U~%vިk.͝}g B4NU\4Q:$ JNQ2lP1l#* #_}&5kۓO=gtmgs* uHF*aUDT~3"ăqal/:R,\?Vm'+bA%赤NP<}xֺ{>T{x׫Gz͂hYJ~=GwgFa۴|O;I:Ϩ;ѤB Of*UnP/XK!Py鲡8`~t3::xv-D8R }VG ?Gcu6݆/!&ucW4%{q}80'(/؍d+甄>‘LM|uύ:,hJy{!E~X]>4sR9qJd}_åԺ6XpZSY,?3[SVP.MZu' /eCUvQ:ANe[}:l6"C'iAPh XhX(1΄HUs,+@)c%:ZA 3`-bW +@-Ujw晥Cr=]S>>_!jO'hvw?7RbYb]$$prx/ FTIɲ`(' 8eZsK.A]e`p +endstream endobj 5141 0 obj<> endobj 5142 0 obj<> endobj 5143 0 obj<> endobj 5144 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5145 0 obj<>stream +!e"@ކ?iWEB u DȲ8^ ,]/~4zofuCHq۽m48dz-L\w7(tp'|aOH×lz{vL]NYdet`X1"/ˆ @鋍}xGRYQT S *Qenu=QW. {hysl_=ִ <˕gUYvQU\|C/D|D?e~*T=2;͟Rh ݥRա@p:`a"& bh&6WwI7Hԗma96{1_%6uAUzVn^t\d3F1; +\PWB Ǖw Y閨>rhZD 9JAXlս?ȵtzVlÞC leRx߻d[_Jrl|ù 5wRKۉ6 =++j D)יƒd1 ++0kn‶B*?#RR,ctzz$qԬl ?Bٔ^~ȧTWG~2Rvi\Ob]k/J+G>)&Cc.(We-C9O}ݐL'7 +ܒ@dН%R !OGYNI7]*mJGiurǎ0")H' +W&"-"ɩ2"]6AT͸1Yp~9wAEѣ\ذ= G6Q)\Ekڴvgnmҹ'0~W%u^*q +endstream endobj 5146 0 obj<> endobj 5147 0 obj<> endobj 5148 0 obj<> endobj 5149 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5150 0 obj<>stream +dbWDM`.̼;H P/0|եc?-;:Kw]F~ȰɆ Ad\Vl12}P O?zMڹG&#xJ>x<,t.&Ȅh}NXXۺGA + C~Ņ'utٞ,ѻ? a#.cAʏ2z:[fݼLUge?*s$d%HH'J>Ca4 +kиNG)y8:>u}WQӚc. a^SOuEHXqEn-cfK/802ɭ U|EtVJaX8ýKIϝ(p%$xŞ`)'#lN5z½l;&< ~}CE/"=,vx[=VvQ6 k^ȩ:GJӐH{ ]N`csU-mQƐ|I}<$" Œr1x;0#h€= /~M.#"/s-}Ϩɬ-x"C +endstream endobj 5151 0 obj<> endobj 5152 0 obj<> endobj 5153 0 obj<> endobj 5154 0 obj<> endobj 5155 0 obj<> endobj 5156 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5157 0 obj<>stream +`/;S+*a)(A$t'+d7/!l&lMCѥ/} z};{IJO,(05B4{d 99ir<պKY?~X ]G~ O䟆1ayB +]mPyxX#<?l D(#]ck#Gc#avs|2P赕 +@\cPyûF\{}`O&MjA#$}ic-<ÙQ(E_-y'7 1bh;|XlE61y`TFGي:_4\tص07ej#Kq4ag 4jD>ّ`[Fy]b(FC_B@O513<ꦔIɦ"En(`d|E^&%.QkNO_|QyR役 i'o\٤i[A.ROΘ#/8n-nlj@o[1JWYoբtҀLOr#qɎ\yDjwur/xUE‹J`8RadqWT +3Ƚf +?IQQ(N>KNHEʹHoUjTO,Uh3Yt*RB<JS\\^.ܵ4oOFt&i)L' cy"lDt`$do3ʙ^cn4&fp4z}(/;x݋T0'dMM9Cqr }k)1C,S4koI +ti=ƈ +hl$E=i"je{, 3P# k4mS4Ō6fYa, +`hu`_~PR έ!=nrx7s4޷.abzH/Կ>h Cv{'=h/y_!Q٫jخm_"C`5X2Odkd ڪLJi6V#u#We@ڑ"Ide +4)HO~vk^Z2ݔ?eq@6FbYVGYΤCYTv+|*GsFMy8\-]-\FE6݅>fSֈd 2+eJD0h6&!u ]1G6.OyG +И,)t׍ du&XԅTQ-bK9Hv[ \C'*t7.t؛^qw3D@C3:nox =_KE\: 9 +endstream endobj 5158 0 obj<> endobj 5159 0 obj<> endobj 5160 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5161 0 obj<>stream +bqSl-ռa\z-kkCr΃X mk 1{7vz6pp +\L86XG|{*QxKOJ1V ?{hM͚ PVcw!rȒgskZ"X$=2+ +Ȟn)Ǹei"|v GpfS9iL:e9EžqiOX+f#7 NQ+!ź7.xxzerД딑Dl'S"G惛Գ]zD%IJ:_FޏiOUXȵoϜ 衘@oփ38(Ddp@jQ[{e!Sc/ a #Jy/{BmP2ckx4 §, նphm&9{֨k=*`trA_^ p=}hCz{$M.ik#uЦY; /mo2vm_ 򓚝) Winϝ5\h_R] A&O>IznP06;:Q-ƭ\f_&mJ/w)l9eFl4⦩yZ%f#RYx;e|j{0$~l*e#?YnRݞjL ,Y3-yѠ`h,p A"3HUQRjݦxmT +endstream endobj 5162 0 obj<> endobj 5163 0 obj<> endobj 5164 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5165 0 obj<>stream +"( ->;?IPu!,.MI!戎 +8ˀq2€yǶ32P||a3<1'Gyɴ>6{ ?' Yh}0ɒ6?.'KVaߺmNF'H-STh>,?=>jdxLf|_}W H}]^,b7+k&x +  +Ǔahߢ5پ7n;-Blք'r?EV(F}iJ0<Չ΂ʕ*a*%:uv)fOx=V^+iRy ?0U4 TCKƇtLQPׇ_==9ЇnlP, R>eVn13 )al)qJ'Msˉꄂ]9~]"Ļcu{*xrJY[::P2)n<~ H` 2aoJ] Bī=讯L3\J L)͉ l$ :Q[M"(0N{`3oQg3FtZqt][v|k\K Bnop +][WV],}D|3 +endstream endobj 5166 0 obj<> endobj 5167 0 obj<> endobj 5168 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5169 0 obj<>stream +ox%]tb*G\U U ڃ2qFnEFeb]pD:n\|0N20CQ T(7Uh _(ftX ",ZTK~LDH W:͜i*d >oUZ_tCьPnIPAnM8XL.3s* +cǠGmxwT> ZaM|հ[6HwYČnsb jQV5'Y* KzsdH[娝+9أώr<\SF\AT&d}Q-{lkWܽ61uT14ϒWmu|X3, .bO^/x[Nw1'%R1R2!Ee a\g(QiA>$\pay3pzDfRr,Z!SDԡ^.݋'5y+xtgX +hK\l5;Z# +gƗm݆~|ykU Vm%na +pg_qodce8Ӯql8ԸХ'fr|"&?> endobj 5171 0 obj<> endobj 5172 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5173 0 obj<>stream +,%rMN@N#fk g`<5H_VF10}qO_ƛ|tH1 ?:t-ўu=6TFPaHA}/,GO6 ")%K\=Ѣyv tU1Q5'XM^t%_* se|ؒ,z lŏ/4Bp;D+LL9>\m(br7P +IҒH]{2%7, B2jz[(5b>}7 -hi\<~WALjAY׎Yr*U8["_)j߶v1wEx[IBxe, (N01u"O0%TgAK?BbN ՘~n!1kWi{O0(6E uF +^  + D1ΠH0\bP=uYvj μ'ذPSt^h4 +AEq2xl:7x"ԓӪH9X|rj%5D>efvZV +|TВ@jH%ꡲYp2{$P_]Q!#d@SL%b>Z3 &hiV5mg$fɡ{OMkFhz"s>_i(sș_ Knѵ7 tD=΂Y +endstream endobj 5174 0 obj<> endobj 5175 0 obj<> endobj 5176 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5177 0 obj<>stream +dZvw $Xo>#{ejdl)C!pxhz+%AHN1aN}/QB{qXm;zY쒔AI09+v4}7|l6lo=ᝤ>.5a;}JrPsNnԗ{6I@ʬ+l~ &ڙ`G hdf9!K&] +BU~`rHn^|{YHByFZWkQb¬Fes.l8uw'e$KDH($L4a I8KrjQbLQx^U*&԰ D;ڞ-n^ @|\9{^[* S%Hz!T ܃Tqٝ^.kEi6dZ<8gME-uO[H-rB$\(0 a9^JGN[&,vڰ*қ(Ȥa\)!Q8 +{rSYTޣf}aHE#T'\X)ơ뺠 jr4:w8XLݽ:EO`Wwu +?*Wt{r̡  E=r! I*L]0Luu3\X(fٳb׍ ;7\fO ny16 AJy}U +endstream endobj 5178 0 obj<> endobj 5179 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5180 0 obj<>stream +ۑ+Q} +̿|<α\~y1{-71]F39~),P#?쩿TWV( Ve%~~vs6>.kVQ9W# O~ L-]Y^kݺ颶3QC—_ ߧt_F~ Jv)0o+@eR,֬"<-t>0.5<,78j [ rqmDdb@Jإ”Wi1x\)eEp`™km +ޔȭWu]%T)h]tu*($`p9}?c"N +SHxFXFa@t"xD#샂 Gcً/ +9}TuԮՂ4;13  U +Qķ {bH8U"Yj\b8{j=SH&-cSWIBڊfT;IWPi]9}NMWo +DXA\s!&c{h]u#3NvlR٭Z Wu#k(G'mQ(x3ps"$5^t>9wC?cmڋXOfOH۩9H!UU]\p*-Kso=xvZ=_h rhOƗTJå 7atoó\01kfr2qqg20x3a B7P4EK_ +IB/(Se3"ͣVX%(@~JbW~ԮN5U t]wJ͍ۘ}Ao& }s@!RN y V ܰѹ5 +A4j+:x4> endobj 5182 0 obj<> endobj 5183 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5184 0 obj<>stream +]THOu%8F{TC_s6)~4> /OSp$:9 莵p ii v}>Bk nPx5JЫWG}:ę?{äUO|X"Q2Eu=P\> endobj 5186 0 obj<> endobj 5187 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5188 0 obj<>stream +DqԱ҅Ĉ*% ^6{o7w&q,}xfJUhlY ]+VE5q !NA:H@;ԗ$ QMc Ӕ6D'ydkGœ&LYtl U {,=)Nڿ[Isy\b1 "=~b +k3Uhni"v['$*Wq Bݰ + |"VŨ7KkTkypo{ 룕*39 xEv/sa[R%34}A椾1_S$)1,#$? D%nDDXF2{WR%=+:׀vҪ9UWluok?\)5=]'(=>]ڲfCط.nHO$*8Q +!N4a'^sҳ@ӵJZb<= TKg) +j$oa` +Rw'>ʕ'Z(|Jذ7e孭 )> >嵳pk0HoC>ko`9mĐ6'\hӠJBຏF]wȉy.3?]G <ߋ5YByP GPzWv^{XgRoV_qU;dL՚a8$1wX%06r" +`of$]^%<~JnCy\_5jc,1FSZ3 +endstream endobj 5189 0 obj<> endobj 5190 0 obj<> endobj 5191 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5192 0 obj<>stream +F] |')m^=Ydw1ӲR5+ ۔ZoS+nJd$a>.,a@k?mApӋJO'h.j^j '3y!Fwa\BzJ\ی}A#^])`"{@Ml,rMt.IڹDx/ d8` eN"7$HZ3,Rw"'K f56,z5ViASʵ[k  ڪ{XD<; $. @z>u}yuhQfI42~y;iU(JXlQ4a"&<,lAqMSc6dz1OWX?%N=,06V#ݤ\Hπ 1ޗ2p`ucHP0Z+|]z Vd)gmp,JG,eF J/B@]jo*ᒵE:HW3M .('bJ/^7ZG_ԉB6LWs#򒋷L + xCMNJkt [o a)֊}Y܌՞}lO4u/ev05#>:L% ["IEch"_ NrEz +endstream endobj 5193 0 obj<> endobj 5194 0 obj<> endobj 5195 0 obj<> endobj 5196 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5197 0 obj<>stream +hU+{;jG/}1 +q`^߅wxX! >NԱ UfhDzFQ P&K&faTê&դZO(E#{'t4A5m1썪QeNN@ &ꭹ#7D>DGg)27#wBeCu;D0L|i4pq =]hv F$VHYra$0 h m}$?X!Ć +bCrj+ V2^Nl?O]eCLԀOQv҇4m}>4qRJL*ip7,<ݼp#Kx +4W`+ +AiR(841FCDW࡯^@Kt+R*U~/+֖F(Yn)d"uF;o{UhS%>yU KE ^'3 ,}_:~q=:>$ڛE3֣y~GwEG-ԋtZB6=:Ciyb'K^ Pur'ea~ ox!~ˀwvSv<Xи}EBes[T4e?^qG?H߭, ].U;rLºA"[sLu0202;GpfgR`+F^y shu)tn\&-RH+@6%;FBX7?u[Z7FXґO}Z +`;OT -5G|up9Gd!= +endstream endobj 5198 0 obj<> endobj 5199 0 obj<> endobj 5200 0 obj<> endobj 5201 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5202 0 obj<>stream +&ČY~64H'wo|(VNѭc̗+9t6¦:{QlKsJr k^Pq1݃P=//_?uTlN\tcDTN#x䝿NE6\kvNĻζB@&SR7t^ݣC1t3Zv?3Y޹D[Y:B +'fJܪ!nڝℜN-2ur*'P.Jު՗jah {8UIZ]&{]-W =xG^~I_!+ E y:n-C;aBGOI:rgFK:rM٫QCPMiUI tdEP=Ei¹$LU1"l<3װWYuW<`Q@$PFCؒ}sX`YO +yg45& +g+K((ـZA̚>'Qbọ9C*@ωz*G0/eiY Hv+nVTֽ/c].jC1[7߲b%g@Æ;>]׭OץKP[%Jb҂XB(SP&hJEv&t,*]P;fػ[,"Tjk,%c=M5$ݱgpk̙"YXN# +gu'/c ߨw70-EmVWCkq]EQĆ|UaO6 H~MUX W> endobj 5204 0 obj<> endobj 5205 0 obj<> endobj 5206 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5207 0 obj<>stream +֫@E$3DXQ̵ڏs>فT}&a!ǸLxNJ2%xxʓ 4?S" +m|-<&m f3i?$l \NkR+C?/71=5(PS'ԏ"k>M}^X%&Hj8[M ,"hg<Ǔ8dYgw#;3j`;HRp$x~DAPP\s/ cz #Krt{8%" D/!Xgj,8`uK]܀|in +,.Qѿ.^cVQ l88) I(V'F#]+mܮ`蜖J?N[dv~^:8b]ؘOT [XtMG2c".*V9˳Z}xrcAR[YSɖ BB zXǯfVK Hz].+@q 5C{{.Xu:FKq==)xl~:v>Eet2P ـZ'@HkC ۘ^> endobj 5209 0 obj<> endobj 5210 0 obj<> endobj 5211 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5212 0 obj<>stream +NeLH14{eT3\V)mC-WYbDX^oyxsWvtݕKŭb;?m2ZYz^"ii# a׻tPy*[Vw6]i>< +JS W zEBډcz7i?Ҩ[ٺ !Ud%8#u){|I +jЏ)Uኌ7d(Ε YGw$V̽"Ħ\6 Y[* +ЭtnMq[+<"O EG w ҇Ѩ2M콐~J=C(q3`\S4gLSDhF}ˣNHrD W=zD06yKm[Dsq0Ǚ85iIFtٴ  U5Vi +ŅX~*X)GßK&rI5$BK[NG4"-  I$]cv'HY(ߜVX$lf۠{k*4On,-QH00Gy1VY=w(l[0#EܹٖpPUjPHAߠk +ZAz 62ltK?CB| @r1W@ԠZ妆7ʦ_O:Z MGd!9-aAt09Pgd@a,(]F#F6u:5xIWy8'by 5Aj Vj}"MoWuϙə~#dSi +:5x-4ϵf1O(x2U[5ll1ccn}09uEIa& K:7=m 0B4En%$y|A fVbpDN'A4|``&ϰ +Ą+kho +gj`9[qvfb4ߠ:}U6C+Γ!S,aaм1yC""EW"Oq$O߆מ h'. M]B }_'/SZq0' /%^D|'A{R[>|E}2cN;`DsR11$_G:p- +endstream endobj 5213 0 obj<> endobj 5214 0 obj<> endobj 5215 0 obj<> endobj 5216 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5217 0 obj<>stream +ߟvL,.JꮺJwLzM 3ӗQ}C%<{pʃhxzyXһy ya6BwLDx^YjѠnh c?DRA\Xtmw,uY#(~ 0O!ܞYۉootAy84T$VLEwЋ|G]BqLdU4qZ)"HD a@; 43E ^ F&˜;Lڻ/:̓pȧCւt &z r>3|L n#.c_YF[53%#^dhC" b^-*_r `'Rg!E:(m.@SxFXv~xMR~UM(Av20Ty<8~M2YֈjK>{qJִ{6O "P''LPF/쿪ujzFO ]l +<յ(,먤l  t-U%UU[c!O/A5xmPb%H='&w +b5PWzJŕo~ti#@F P}ӸP'oUL0iU'GȆ˟nS8bY[O$d̈́OMRM!$k~^Cim F =[nIc(XŏTI>:sXU}*dFd4gqDɇ?0*@D.'e e^'3=tavE_gpn? +Ȁ$frPv42)GݩyVHRXVRH`m>5%fA,4fxm=@2DbAU:8bUe? DNxS+ն>B7Z\I]&qX{=¼dr;'֠2%UnTsSo*e} +d{7e~)G ?λ3ɝ_[` ;ZBzVm |T1̄__TݸLEâ3GNWl +endstream endobj 5218 0 obj<> endobj 5219 0 obj<> endobj 5220 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5221 0 obj<>stream +tbwRđ`0uQN8 @ƿj$x6mcR5F%UALWC,^ j̏8 ż/z"+lZ7u*J8n˒Q#,/-Jf`^j*Li=51*(]Zc suee~~8[|$Lgڗյ2rկwT- *x>k !q*cF#𧬰jnCmmU_ ] =## 5\r;? + h}i(kas]H#v0%i:>Ri]E)'Z*L=,q{nU+pϟ*GBxErs_#$e%Z?)fƑnϣV*Jfa׻j:xa,6% v6m\v,6V$ќSJur uҠSU4&j?F>梦G 9ncXs0 !1 NBgu,=Gy%`'-ah1$Y٬hQʄ3( +&=3ԵdlBPLy1i 2 Cd'q;h|b |dk4җ愞|uu~X3arβ~9e1(9=Xj}F<))<#faïX8bKٰȻVm `6 +endstream endobj 5222 0 obj<> endobj 5223 0 obj<> endobj 5224 0 obj<> endobj 5225 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5226 0 obj<>stream +zc,C$ט? h}}~F6rf)`]Yd47dKN"QpmEB?-s%fIGx;Bj3SWjx8EoAK XQbfLe~1ڦv5Rc~˸͈ HEY-;)2lPK"Wjj+Ƴs^V  ‰ba){O#K{p"͜x!8r ys0,xˤr0M2-qV*<WC@t_o!ոO#V*CV\:íFh뤮w mքSYG-?[|ηywO!խ7*)i|>- l.(ΤؐTP f=Ga @U[7kJ@o*ݯo}G%Qq#N?J.*DޜdF@W<JejأD DLX٨@Ȥ,cMr;1XA*,ɁlZ֢x2{&%ZxN(>FucIZR]LϒU"5 ݤժ+.sc%$܉G[r^x/7^T'ʉ@192"r4[o`oY{dž¸$Fq‡4p2|)YBJrYpgC BQ[drќ]X f,5x\Zn`pr-hIS3uucƉdxX7r\֨_iPvl]IdBty`FQ-I2 iiN\K(5Gȳ6x*(I"KJs$cX>%{dS_ͶK}E^ӥ84"}0՛׮8%1*Ě;)̻^QK>@g9(c׫%g􆵶m$O +endstream endobj 5227 0 obj<> endobj 5228 0 obj<> endobj 5229 0 obj<> endobj 5230 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5231 0 obj<>stream +lb(oH./.wbs|H4E0_fj,UN>Q_؀K҃!r6^#Fߠgg kv8a$2Y|)@HÕ%-pBa}E֍㬖d;3O/.jadʫ|$hG:^0[3 +(xqV>@P6ּugB 7ɗ. +[dv?֚̇zRq@z@? -kOHC pO=bNc'鷟*D;oe  x;gۤm1I}oޘ +BZ"[Wݐ6!Cأ+cӰ3][|aHF2@ŠzgwkhShxb8"h;bϠ|bVY#5C8JCJI r -Bkc \؍9S8<ӼƳE އ軷*= +ٵv5Xd#8adocAM>8:qumcOֻ(d<9_n͈C/QC %S vtdGåᩣ*͞^G7eo[(_Da͵"Tm{:j{h8\kɘ{ PIh &]xds=`Aa=,vaxIp մՓZu@~V7U!yӂX +endstream endobj 5232 0 obj<> endobj 5233 0 obj<> endobj 5234 0 obj<> endobj 5235 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5236 0 obj<>stream +,G }Nm\ ĭ {DOzFa%Js&ޒH0| Mq 0-7!.M-[`lt87/l2bh'~h*qY1; +NX]*+m#x7de 2P* 18&!m}&b*T IxzRN%'OHnW؊(.Y4ܟ쉋?5J:Cz:䁱^ƺxLqJ7hw 3X2$5BEjBq'lt:"]YB;Rm, ./-.0n1siL3FAD66|-RWD&'.D5Zg0t %w<7V<1TT$J4Vfu L$-ŶfhXF|VYJ85|]~7I\7+kĄC?To(gFY5q+]ۓ95&Sx"S5[.cƄ iUq!+,'Vjn^! cEIc:{S!$dZkkMzjl$a #f9L.IVA)4=cu5<\wsK1kF̴K.TAʰjeD#(Jްc SuL^FJ(-.ۀR/9,(5~ʲBy##/1gBnAhuƴ*2<1$v~K?TwnURνNBI2Ȋz|fHUjT -V5y\|3obQgMܦIF암8̃Sw|-L@&5"HGx?8!`pwYmV0V\/fmu0|q Wynh$D??R66L&" +endstream endobj 5237 0 obj<> endobj 5238 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5239 0 obj<>stream +?J +0\rƱ Y9>wtf qÙ +,<jYr)N03?0V=*)jN@8Ra0wf[ac\[™(#i㬺i> endobj 5241 0 obj<> endobj 5242 0 obj<> endobj 5243 0 obj<> endobj 5244 0 obj<> endobj 5245 0 obj<> endobj 5246 0 obj<> endobj 5247 0 obj<> endobj 5248 0 obj<> endobj 5249 0 obj<> endobj 5250 0 obj<> endobj 5251 0 obj<> endobj 5252 0 obj<> endobj 5253 0 obj<> endobj 5254 0 obj<> endobj 5255 0 obj<> endobj 5256 0 obj<> endobj 5257 0 obj<> endobj 5258 0 obj<> endobj 5259 0 obj<> endobj 5260 0 obj<> endobj 5261 0 obj<> endobj 5262 0 obj<> endobj 5263 0 obj<> endobj 5264 0 obj<> endobj 5265 0 obj<> endobj 5266 0 obj<> endobj 5267 0 obj<> endobj 5268 0 obj<> endobj 5269 0 obj<> endobj 5270 0 obj<> endobj 5271 0 obj<> endobj 5272 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5273 0 obj<>stream +VÅ(V]B^܍NDPr6vEx>$mK=x^ݑљVW{~_tD8@}ix}%ƜvMd6\k, P3 /dB qw暅qE˒kv!#=RAr-r3F^ + 7Z;x?v 59[3YIi$:ʿ!E ZJ:נx<O}[/GDIbeOnʢrk/ -@r1t 8l~$AK6/X4wZRxKqCX>mAB)赶5 :äJ?/$3s2Rp<0&H~KAMIy\j=ɣv<)0nQRMǎE2qga7(ᾤF)kؑjSӪ^.GșD@*ﱋͤ!i5eYg`6aٗmci:1Un}o7x‘ h fݢNzLKqymB2R.-es[%QS2zbd͸K*?F`9藩XjnS wv&&i|#ZcP¸Azo(jRU/K9&O5@ϯiwO Ix[y/604ZvP`a-} 9af,5@o >mI =^Dr߹p0*6Ttt)>pX|N`̈5I/Xoiau74!~#j(잗`|?xdaw̼>I`c_UJ\#+~D +72FK]]WT!J{`>W'5`,$}TF{w~v"9Z6~;8G[sx@76+ab|}}6 )!l/?`LPœ{]jDgDA.cv +}[Pn#oyӟ.FrEtF22jy]/UF)9S~c7< %+̰uWCoۭN]{.:'Q0ɏܸ| 3.-MeJ(BSq/L.گ ʖNMз/>Aa0.EgTﵞq`0!.ೳAU` HśEv+ ӭ= &x3uAҼ=h&B&ߋD9g·ٶl1qyԅpI9r"?-#S(^kB;uvpCLg} _pִ-wj#4PfA%I>h4nae>X|tft{^=?b:fBoKGii|/mvv@G(-GTy͓^fjoHчZzj)uB.Uh#;>C̤ uuS4^GA. &Z63j_,N nzY:IrY+l)F,V3°&g) Fw!2wvNgp=Q9`}C,N+4=4eڌMޕ]U0/X 6:oO6qYJfL=l@KJM*3@f;N-:޲I^nF{9QpVWo͚c7F拽8G/TS5#Ll܅Tsc#(gHp^=abQU9"l~foxCY3"={#v(/bO)9ܔ*"jjڬAf,ϕ#"Qny$X), @@Dҙ/L=lg*],fq<{+:`%^5a ~C|dϦzKȪ |_\]I?x塛V {='3 %ן)"iNÛ`I I X6 /Xax5/<96LFAsx ^=N&lzZP/&G!=,:ɎUWNb n;@)sL'CR9QLy*ؿjஎ?jXVĀmcxV j#=2|qraDzX!.qƞHC 9=iYTkt׹P;كQ~_c!)%jFm7 +,7UHл)lՍ} A%9N[5D%G:4rǴ#N_05{fcnS1 MA%ŽtqxHL%܉ w%i ۖ~3h!"2ߨ49'mX 䙴4iHdD O>%;> endobj 5275 0 obj<> endobj 5276 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5277 0 obj<>stream +%L1jezLˆBQP C[ؘ;\!MT^R;Ќ6"{l0Bߥtc`'S*F6ayomҴ{"?ڹZ6Oqr< a.b̴s 3>*m߭$$x1.9hn:J_7w ǫIW\lMϤH 5cQ<_:FW8> endobj 5279 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5280 0 obj<>stream +7]0˔SCZX6rntm4m?QĤ{F+q&V`e@e +p-5g#HO`I2LE2b3aE3^I <<ߟ*;vˉxOs|hGc"k_Bzݰdu+#dB"#W~zL/Mer5\FumU9Q.U2?FD*i L>^&yچi`=CZYIUvy6ϣ}z:.g}ZʑSIq$"pwQ>26Z@gƒ'o++iDT +;xRh 6;$)~Gjډj@]`w8Ė:]Fޒ \㉐x X;Eu]:!؅5QqG(p +޾V̵])hD:భ \~e(3V h=XVO$O+o<ZCɴ8Ź;c!;J.Z>ZА5T.(_6~0lBGWдMrx[빻moJv!u)8z3wNF_1shkY E'E^ z@Qr+*$EuAXC"EvKZThW Ѹ +endstream endobj 5281 0 obj<> endobj 5282 0 obj<> endobj 5283 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5284 0 obj<>stream +7-^[J"v䇤)ƨ +WEhD]Y+!Dc5|R`{0vy0 tMv @;%2#H7iq9hCC}oE9:XH uaf(!$5̟6#oFTUƪ$1YPڞBڃgRZeau#ahN)T״Dr`Jwcvs1䍿ٖt'˒=WiX!lA'JmH+Uvm)S,Clh Ϳ8)tubӓt43 *mUݢ=:*DKEBUEP6FkAAdRZP +?Ji4.t x<ڑa/B߻I2nwcXdK ! c&`ߛ(8\W 0[G483ڴ1ɥgF qC̽($JTD92 GUb G~祡+;|I$ЅCJ׈ن<+f\}ID ]cJ`vP)/nfbZ71IX9nr빟F +endstream endobj 5285 0 obj<> endobj 5286 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5287 0 obj<>stream +I((>hϷ ~ ~P\ɂNrL9 B羾2qh#>}J񛸑Nt~fpI{> LUs)CDnʥQ aƇkz +pC'-d*`mC_<"4xj|Áse]>mHA8c]C4H#IdaZ+2Wٍ)a*fe3p*D2z[{hY^ٿ,3"I͗WVo(B@% w^yUvRo3g"`Wr}#hz%ͩLt0 v@ۿ˺6 θVz_lJ9u3mFAXuclU}iRC]4&XlN&1ƕnekH(uRa#&Eg A + sQ"C%M8HX ߈^</^'B%5Q(4CDjr(d-n ݜ`&s= \񢣃svV!P٘q..X%P +.B<ÞGH/[oΡ߹H$ܐؙ#5Q@tldGf4/b??‡oْݦ5d@=T;6~͈ tP9&8^ & JO?E'Oڏ9>=fmefzL,^_ET:LE. D'}HL ,Jq#y0"ƭ(~%1Y7CgIy}{X֔‰΃ȍcnA*?,Nn%KV? q!]vB QU7ġ10T?K3MlygQ +endstream endobj 5288 0 obj<> endobj 5289 0 obj<> endobj 5290 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5291 0 obj<>stream +a-w+~\W]y oDR ɦ+GO-d̅戀Is;v?#b(,cƃ(99#DVkZ:+֦PrOS]~w$fo~Wzԁ_?ښpQ=4H:b}jhQp)Wˆ7Opce@H8 +>%;"BӝmCV~P`9G9: pK{ehAB-7}05',x6;-o"ջW-Δ۞=`Kܥv{9RF5/M +q}90|ux?>Ir'WI,{N> endobj 5293 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5294 0 obj<>stream +ob8{xTe0,s%|{s4l + +9ڹ:J% (TQA[wgdychc A"if Jd.P1֊")Fdg !ZGn6+ $.T2t*ʟolhah01yB^AR-U+n2[FP}3Cw1#Ar'7sH75Wھdg-Bilg 9ެuA7]+٠K6kFTvk}0U'U G&AfT<&P" OJSHldOS<T0NIl +YK ̯V yOk0J+~>NvϤI7džB"5<2& +si%?y> endobj 5296 0 obj<> endobj 5297 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5298 0 obj<>stream +BP+jSd +mw\Ep#Xga8RlKOQz}AEg}r(G);OJy3k'V!DZv9Bc6jD~!W)P7I{q!˙b qXS Hfе=]$`+SG޶neZҭM$5~Av%0:*2;7<<^~eMw_KOE>UM'(ïCZz[֞bŒ.ѼvšŢ 5,uB[Fr c*gsvPd`w@L%Ut%½1B#@YMC\Z!$6}>aU3m Td8Lԏ(=ğ{w7\,'r2421YLɧD7Db?jZT +b=~ḋ-[K*SǮvKmSnRu8{3R>SЮIݽpNu_jsJ>c-`7ĞUOz'sZ|֓ORW\d,@e\ݮ*pMd?9=|!7%|4(Tu, +`F#C1]; 'AP!zl!fRM,1(%UژceáE^h+f]C+9{F +1,a2p ZHYKqYUT +:Sn/?xcv uĺPtl\iSAZrOy%oyfq9;6$,Sot}2 +]PydzuC6N WګQ̓pwh 0dh?ՙQɭ[8KHP''9j6 +īXՓTG`*5E +endstream endobj 5299 0 obj<> endobj 5300 0 obj<> endobj 5301 0 obj<> endobj 5302 0 obj<> endobj 5303 0 obj<> endobj 5304 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5305 0 obj<>stream +ےz@'f9Sj <*+'=_xR٢L<|޳;MɭqW_0rDuу~(U;jݷrA[2Qn;mb{]WJf)xDq;;ߌ o[ۆ`4F* ~~6SċʢGK tG{)8W]# WxΐNxA& +endstream endobj 5306 0 obj<> endobj 5307 0 obj<> endobj 5308 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5309 0 obj<>stream +gMv`rs_Ј>s.^C->+$2ha '%cйIdXHgTS!KyWeoM0up 4Y5:+Au$4# 90twMʭ0jT}Zrԁ'$JU Q"tվQD6^ppM7_2KKHx蕆i nFNˌs9xϠ + ߳赳AJyL8MTݮ҅H h#74EEA{Г|Y4܀e+F7$iGN9qx l,99%kenBVo&7v~ LHRˡ~H +.=ÀAv!fzV\6z ]t3Oë5%DT9ŷ~綕FSb9Axo5yw. =j?6z]o~-> {0>$Vh7U]X/dQbɨ&gptOhb{+Ǿc;uXh6Z,YrnܧEvep%`ٺcG*9' dC)|[L‚v"ZS (5 Ȓ 2U t,# BK9h2%◽\a#@J͆h[S{Hؼ|ynOsPWb@W51׭C=V@i $ +yEyui#5tQ#eMH灟 +)Ol~@YX tj)acx lKy*<|z=ynt[x˽\Q5h>jL98ν:u#ڦ] +endstream endobj 5310 0 obj<> endobj 5311 0 obj<> endobj 5312 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5313 0 obj<>stream +#++1(Tͱ}v틕" 5⠺JMD%]ʶݪ߈z~~:&wumڬ,,g"QsCV=t#{3&}e1Lm曆 ΅&TDA'{蚎VT~i -sBaPD*\(QD$?CzLۙSB_SpnGۄ8bḓ']y47o#]j#25T.nd@6 Mx#Ey +JQ8 `Ds+G|2Ҫ +Ğk$3 v?8I7Q4]Xq MN*8KZj1*PԃS`FջVn)-ӏ{tN 8~.㦏Q+bKՙ_cZF)pD|l<<ʃRU{ ̟8gF>(cWOxfgo$NY`NCA ` +z5K +W wY\wI}IY5'bXq0pSʘ_;&Fj]&̝# +:HI^6tFd}췞ֈ!) ?^Bt++̿o>ol뾉\wB479[D4 Əc!J<0;0f>@f!f[Zj98F%_ З9 mտG)H~h#5!O +h&,^^XOieމna ii )Y9z. vxŶH$̈́ڷY3 +OUؼ]` H ^&m2O!1@uŧ[ӷ:6W^ glYRvT4Ԇ^0xf- ]@?6?1}KጒcQTu4<"ͩJMa&)&_ OF=ъC&._)vQYwc▐QOVLQN +endstream endobj 5314 0 obj<> endobj 5315 0 obj<> endobj 5316 0 obj<> endobj 5317 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5318 0 obj<>stream +3C)jT˧=tx#x8Qr(ehĩ"F'X]MВbH#,QA5rETwcٽY"sp w hܚy̶Ņy-!3p&vo +o"8GeǮKٟ${wȰqyC՜["z2@.߹TocXD64/LyHH'8q V8$iN[3jLTi*z#V:9I71#!Fs;0l?ZXqQ-,F`񟆮E!^-Qa*dQEk/7l(eW672T~dGhնT`os\}jC,P&ʅv7h:IG*ΐ pfkhu`q#$x,쏃 \ԑbq20Bv r;X0L +(vhmFAzWbG{ G3AE ięU6ϐ gfSA0.2[țH W"-xb+'PkŌ\ +endstream endobj 5319 0 obj<> endobj 5320 0 obj<> endobj 5321 0 obj<> endobj 5322 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5323 0 obj<>stream +Gɏ{oH@!1njYuAZ@A!O0ut%͇#)'ƌ%hUJƇ]^Lhݠ>YH7pܖ%noG$ ;f;4 +j_ 0ߨ4 #6Mk3w1;r4GME3D /@`n/ojbe;"_F @xzrT,V?"ۡInYI!o \/\hX@DT `r4i5}; .73s/w[Y`wQYJ[o}Cnv$z80j +endstream endobj 5324 0 obj<> endobj 5325 0 obj<> endobj 5326 0 obj<> endobj 5327 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5328 0 obj<>stream +>G.i#!_oe#Ƴ"`h + +9x̋>VbΫi!"Y |7\.w8R=^ c/O;uWmQ4ly2)07@vR6; 錠\ L̍#ϊQN&#>dgՄ#ۄ::+zgI$ՏdFwr -~qS9ieL6P( L6~fPG.K +272זּub@O {"j,F,l)X!Fzpc*! #0#%G<3"-r:-/RBa?8Bm9QC/@l6dd T1)ɩݑ%-̓QI`u7)8ۗ"yH̸/%%gFр'hNyY1@>2DڒP8GN|o!>+e[(vX0CUT61#=޽I! Lvd{;3 EV0q1ӠפC]oziNPUPW.ҒU2Agz[Yg4b{o=y7g#B4/[5OmadÝm0kY| [ +gqrc3cfn0! 8Recw1zx&Ij,tlVt$4N4_ZQ bR3)d7T]<CoGfyPXH!u +-,~Uћ'z =rC/mpAH aDz}2i̚mЃNbS%Q_5I%huFKAʸh T@etϨ5Rn&xɱ]J:| > endobj 5330 0 obj<> endobj 5331 0 obj<> endobj 5332 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5333 0 obj<>stream +gD'w+|aw8-C M+)"$CvnE{~ }f#_l_Hlw6 pDbVT4mjW r(UTa=ư7%L n{v| ?QZ׈tZszLou9=$, lQ0EܶP3sOpqU=Ь?F>g]xL 132_RW5Q__G?]#%"h^̙KHfa7QxxDiwx y>zD4(BH7f窢ݶcqgZ|H']#zs-N +M?d}̽Ъ5N +D).V%Q@fo׍ÝTU0O?x. :k1x0rsIG׭* [mi^=[)>L8!`G Գ4j֓S՚E* C$|ݛN5黃7 B'3)<<-9~6K@Di;(w5Yk筫W %-2$O@uV)QꤹO!LrYwZbZ= +H^tv$2gVg)3@j-+d)\Q˛aJ듸"Z^_:5.Aq'Q!{"bdvT -<{:ed |ծ):VM+;* =g_ALAh +',LUrHN2Y_2OHV~ # Kk(gA +endstream endobj 5334 0 obj<> endobj 5335 0 obj<> endobj 5336 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5337 0 obj<>stream +. +<ϰF(!M˪MYȋ8 L s ^pi0|engttEi)<ŰcƆ9=K_[qAWFUR욟FAO=.H4"ƻshDʭ8X 3L(Kr72 1$](UURRC^wWP'\]e_9Bx,g6r;D4j&87כDD.T_hcmCr_i-.O%TyyY 6 +x 74"gxe4,׼Ј +cAL'+{tKdz`,J4| +C|8TjdFgW/\nV 52`3xɍ_ 0XXN맇BPBL=#R7F g}4aQ.+]V{a8MѾ Tѽ idtn ;7yr馦0hHL n8m>(V5; +.'Wɐ1@I;8 e1ZUTL,YpVό`^rqmu +l@.Ps@>,Fh=||;u6zqgkҬ>9/mv^drw{ʥ}N.x#\x1'`nƩfԴdW`*|9[dj5bwܯ'CeCKUD[QB==*J^ +c)v$'cKo%p 'd*/sDKj[*Z N18 > + '˻Sܾș6Drp): +endstream endobj 5338 0 obj<> endobj 5339 0 obj<> endobj 5340 0 obj<> endobj 5341 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5342 0 obj<>stream +rAiT'0l'rz[m;^d5/AR4xQΓ1#Oz,ej.V\?*WPcA_?G#eOV/XP7 yfkJ')⠏47icz;`B" }X+S}$ܩf9;\IKgg}w<'~>ɸI*Isѝ688 G^R%8w$ܝU&(sH@7)#ͻpQHdזHPT$&@1j7%yBJ G3-xTd IR0Uŗ\"i7!C\BpXDJF.ư#qaBMƛӈx!O1nB{Ҹnx5,FgžV`]5{2sgq)igKS@G_(V!U,{g_܃0Z B"22rH6xO +(9hW =_+, O61.F.$O0!ѭR<=YB]@h{jVJ%\N.H sL;΀9r샑+ָ~K;Nirk8vdGAT^h!of i5QEleRqa+0"6WO5VID^h^[u?ti!F["{3bO{O Xrs eg|x@asP2hb-t-PD)'=ȀU=TE$puu H +UXHT=SE$e0yٲm𙋞 +endstream endobj 5343 0 obj<> endobj 5344 0 obj<> endobj 5345 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5346 0 obj<>stream +@xOEw5 gUnPrлz +%LAPa}M ѐW*℠yKRe@+=WWb eW[' ["mj<Jz/dvJ9CIdga=Zgf"V6]=1ˡABnX- vTknta ~Y=e .`5ݘ3 +&u\LQnq_Z;RK?n!YM9lqNϋm;ɓUEnXm uzx36b4D >" ?hP|H.P&n +6=*:RFeEb.~ +gzTu%xpajE 8T7xdݞ +8ʩI#j[Z +La= pzW/CNb휩G5-3Ϗl~S~$FD;uܕ|9}fZ8/h{/v˨n}w"1>߭Z^؋݂,Q@fJX^$KCbМ%^c* m`LgP<ڴ;|gHΨaL> ʊf5hf1V8>e8޺f. }&Cx+;>M_~N8T"4YL\o-B'q|N +k}Sg~5g[Ir-U?Sb7e7f},yo/xؑ[ϗں4}1^ +endstream endobj 5347 0 obj<> endobj 5348 0 obj<> endobj 5349 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5350 0 obj<>stream + d:,‘N[ $l}ìAA.nT!=JbdDoH:1bi5Bdd",<יִb&AL1SS'T1τ:#(!f*V8^>vd6_o7sAqHb#X#ې:p l<-13 \]D8x0C2R:+k>J8_'}W _icoV3c +'4w*1y(cFoCɘ"wfg`jf 1:j뾍 +A澇b3I [>[{iIJe+r=8z㷺`};_[8/[QgU)ծ0] VRf.ٟOYgh)VŌ^Ϩi6n1{i*nqLʒߙ͔ +˓AVbg^eE=TOAp@DE`GGIj5E5k'E?bܩzaig­{;z1J3T4J#xcYy@L8rpK-:qvH,[>5U|QskٺqZΙTbhn>1{.۟Nh릮K7Pe'\q#&~&؇ʟgPL W^9jѰ! rzg0v)]?x35+Ѭ16/+O n-)K`^léG4L; 8,9!$RL/r{Rj;.YEZV,A=ޜ/Km`Nc fz]> endobj 5352 0 obj<> endobj 5353 0 obj<> endobj 5354 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5355 0 obj<>stream +!a^L"E=[ᶆ+A*pv18yfMKD?5CAm񮥜凖"*11?X 2f}ޗɝ %p9JZ&AI[4ez)XJCg'*J33h9@ 1)NVOD-R$,ا=vE`([7 ġpҀW +1' Vǡ|=>ˑôϨ%[fWI9F VmapN}ډJ̊MaN"u!<T[AOAO1K$z/'>oj1I@"&zO*0h%?!'(tSyzD%탤nDyDׯ-%4rNEej@V2>ċqHE2Yw1.Yb?HAœ?/9ZtŨTOR!dSM sJ\v,__{Hرn_Ωǫ|y0X'>Q^m)I'Jp +MiTZ4W]}ژa=%٪(qo;q,{:*_!YNFɤ!c6 ttu$% Sl ck(|7Bq4ѥZJ |pm.Z\-,j. 65* rCa5OW\C;i9Wd}!XBZ$3sy Ntp@ fxK{^8eĀz8V4e "tRҜ`YWSnn:=juDE +endstream endobj 5356 0 obj<> endobj 5357 0 obj<> endobj 5358 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5359 0 obj<>stream +ٷV5%^jHk̤xobӤ[ +-T H9k9GC$w:j +$ tgPaJK pI|c vc>K<Gג>ن-W,hzF7֜A} uChƜ5wH-bJ$ܶm5waA3eZB9jsZ{tdjm:?45oyS]8HbVh@34 _u6`e!1sH$' .MW4]it稢${?*0hYm{L*)5S"A8b2"1΍3ГC͖]dKi #^h#}aܗ," 3P|aIA- %l} Rz|hb4n=֐yC _FWkIz+~?6hi.?# 4K _Xy}՚xBLWm#ed/0+Nr,0EC%fVԅ(`xkjOaYf CCk@jN)u6ci|Y9=[|dbz!zvG$?;[%m'LŨ{ ʝxi0'r5ng.Q9@lt]YI%K_ΊEV*Ya9)HOPβѸэ!h81g;)@t"4ΦxzxnxEQo-m-#КoQj5m#}ctK<ʪ_b7ȣ̩St;8 %,U}-ln0tE>L%BdڌGz)> bU݅[ <ʣ1o"W tQk):bF@zXM`ꇓRI&a ɀ5wo.9N0%o#jZEJF&Ⳬ.(2Zp ј-ޥ'UqmBwhq.n1_Y`Z4Z +BL}uS[ +V !Q2A[ko: +endstream endobj 5360 0 obj<> endobj 5361 0 obj<> endobj 5362 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5363 0 obj<>stream +Q6 1 ّX+=aӬU?dgȩsGoH OpaDih{G5-0so<и$!Y|V.%Eh%#֌xT?&r p6b !A"+г1M\ ;Sw 8͍k YeAy'.L'f0+< Pèа7 myR> ^)]JYʆ âY4 +yc(>dP{@9YGnuo|=)vٯt?+Ap +>Cƕ^T҇já*cL6r~ )KrCGpŬc&%"Ne3zP0l2//)=uR#P _Z?G?\u#hma<[}3$U +endstream endobj 5364 0 obj<> endobj 5365 0 obj<> endobj 5366 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5367 0 obj<>stream +A>ݦumW*-Ȑjwp7cy Ӫ;i{R_+BRZ)1`Yի(PaFΞry`¦˖UIU%D e |Ԏ*>s -=y-P )Ϋa0%4?)(tS;n"m֮%/b(`"Ȝ-z +endstream endobj 5368 0 obj<> endobj 5369 0 obj<> endobj 5370 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5371 0 obj<>stream +)M8nM.Dy&d7$שTio.&O,%HkB2-#A3X!Ԝf$sXS/ΐ#k|Ǧ +pĞ>w*[̰E!;S _5d ˌ~ajr s|NiΖއ?FN⟕bb~D腱}"#(nQ+1 dAg"u +l bԆ{HH;/7̈́w$vr|_Dk_[ 3g\E2\d]O3,>'HV6ɌM=.O9,ׅOU~dAuyoz0\[KGJwN 'sX%Is8QL=^h°E~J:ZCC/%$Nq#OJH<|rFyv>)VG\kՀ =k]6vX{og~>F;[c$X|qc4[>r7͝SR@vkWOHm{]p E%G{\}" +3d΀N,`Ɖ)ؙ2Ic`! mm=m܏^7#hHw/C T` b"P¢Y,M >1xjM.(HXr0(#v7w}Q h\ctw+=j_c֣EwBY[tO!DOE^ad4~ +endstream endobj 5372 0 obj<> endobj 5373 0 obj<> endobj 5374 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5375 0 obj<>stream +15qٗ3zJ0SsLWշΘ$p0h ɻSz?@܅ [xt6ϹojQE"!eA|%nQ[:WSe!b"j7Nv1M\A DŽ%g ." p&@`!hr')4bYwlKmPU0L)^fЖϡΝMMu4A9GJ^azhWd +wu. Oj֝74oXPaʶt[Ikd4>Íb| %|qѕ4$F_UܑDo3 ϲL!I?n +SMCsQry=Ir|=+7>G 9-4`V!Jm*49Z>N8(Yig;:2 oV+ѣz⫊Ce#lR!sֈ%^-ljI=gir7j W%s%GOAYSW)xo(6X&ڋSuL:\1L>l*DM*bsU*%RʵL6S U=&v HvJV#E g +endstream endobj 5376 0 obj<> endobj 5377 0 obj<> endobj 5378 0 obj<> endobj 5379 0 obj<> endobj 5380 0 obj<> endobj 5381 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5382 0 obj<>stream +;ր%xm=:Y_;M]kw{~,[խ+vV|1~X}Kk>tL 0 u _q.L6 {/} d]69+-N3*۾E:ͼNͤHЊȄ|l0$KFHLq}* f8uͰ*(HssRqZo8bGЗRVǩ@n=% +lQ}1Ms&I= Y#Zbp-1Ɩy ¸zek̒ќz%#Q(l -c R ^U]@0i`&xB+s2Y;h~zKSA-ù#vmT.a"q%u=e$ +??w8?EqpRB^=dMG*L%Aqp> endobj 5384 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5385 0 obj<>stream +ї!ģB aM-\q`!W8ʳ} x:yߓ!2 gj }#hƼd`נNw< 9CN{@xƦ@Wyp܋w#8z}Eel"Y_%?*SʮlΫ7#سq[`:Tx{pR[\WJ6 oO.\D6Y?H6EB9A2Gb13Af. ~Cgzg vxLcErO K4xi<FOu3h$H~XYԇK-eEn *\y[HZmL[pq ƺ0PZb5?5Dbh9 h/{iEmrTWxm㏑A4o΁XlqlW%QI= `Sw.?q6 u7{RVuMxtZ6?.s4Zt33?u|жhM;?6l +Ty 6[[&ɄN ,Nhm9,-~enZǧe F>nG!%`)h݈0XI5n܉03~a#͏ }*Z :K)+Sרxf=Wv, N2l2k'VQGO^DMS3YBO%9&}x?п__ű*h` }گeDWG{Uly)k+[TNEC3j0&b4.Af@k俗q=' 2[&WhՍQF:{ +endstream endobj 5386 0 obj<> endobj 5387 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5388 0 obj<>stream +)"ֻ \)W K.(Z@ }CěFH;'b6uw?>VJċkT()ŌJ $Os !W]Hi( +:g :leQC'ba\b=(C"q٦H\ +G Ej ͈|n0Ml ]E|}y}Ppiuz6Y]+ؚؓrۤP{mc$!1oxtÇyײ-VYsQ?vf +m/4$݋tZ_/8{ʻn sT7dwd:%,䤄y=;x~mtev1/ PTR~}||)F7Ovf>CXKIӃ!ύjŵG) 󔊆Ll1_ކHL$'FUx49rjdӤOvT hۀ->]cɁ fW$lUusCE#//_M*9nUXH>tޓ1$ii~J!!UN10IؐM-=K.؋I54e[.k=h_G<6 +*xeW|-0Ќ'ZOS݈UoP`_\ipԩBµY}{UPO`زzU˄|Re}&*-e:(DehhdP E|"je/ %FˍUŇ~ +[ᐧFֈBΰܣ>y" oE! +endstream endobj 5389 0 obj<> endobj 5390 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5391 0 obj<>stream +?s-6-'/{܇^3, +duPoƽd<-z3ƙ:Md4cP{x*>&Kpk;O@ +$4Ev*sJ\T &&5]- S!h0KFVI!rxj0ɟ:~p^kF(S 7ʖ UmU?@|ƇI 6&|B樒yJZ5]XDV.+}d}\mm"ӸaMIl:`AfVi/yR+Ƭ.7 +j~E#뢓LSY&Y6zm4\}neE2,vGh*I|1J&_ +wѸ=!=?`Op $CFJ1Eat3ִлlIUL)ud( ķjzf Wz'de7o|]q L{=].;Ӻ gFGѓ˽` #M?,K=|^ +J|8 +endstream endobj 5392 0 obj<> endobj 5393 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5394 0 obj<>stream +C0:(D1}FDSWV䞔ICLo|>O}{S?r Gh9yKd~z q{5!ۖ74*XN&k^L`GZ% g422 +DަETP֮0[ ,Lw/la.^jf,̝1̍)s*aHKix'Bg~XvFZq'AץFM,lNr0N[| >_mUsg(gM@q'id3^V"k;zJ>}!zbսwƔ=3 R.4syؾ [xpkeCq@ +=!u;-AJ@m!Oa1aMvN~Goaϗ [7gqh|Z6ig8QInw7҉kM%> endobj 5396 0 obj<> endobj 5397 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5398 0 obj<>stream +ܑfPFPF5Uӻ.dhy|QfdZrg@E֡t?%Bv?sYyȀv +G9;gB3es'>܃]Lmcir? +TV :P蜶#䉪7?2 eǡ+LΦ䩬ׂuoͦp9 h7}$g*,RHbR{ ?L)2w#0B@OmlRӦOiA]pljc_v9ojTaI.piQ1q +%sѝݵ,d`f oeO6[ΪH$Sh aλ_}Jy;L(|/ I޷ +Om*B0AjPAo^69Y pzeT9gb *Z``dL5 ~R"O3n}uBvͦb|ցZMȷ)k嵽/KpD56ǹ_lV/d+8>/M 9Mt-DzB\a.W{V+ 4D\J緄(4t "%WO؂nt#5"0y&fP(3%)ykіlE"4G5Gy eUˇLyA&"},G]*KFgrQ28^!Z1> endobj 5400 0 obj<> endobj 5401 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5402 0 obj<>stream +PUiKwGĠlA"T>/Y񥀫BܫzL X,~Y,9<}gKrN-['Oإ<άo:A) .{n lj*!Ɏđd;'C(mr |zBB +n4 WM5 c!eVZ #W׹u/)_V>WCBT GC8{a +endstream endobj 5403 0 obj<> endobj 5404 0 obj<> endobj 5405 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5406 0 obj<>stream +y T/('T3q Pl)Gi+7XCT2.EyMVn[:35.ThfkD>]w>Q~#'0UR#g-T2- +cn>t9F33w̫˻'fBc:*My脤;'oCoA9r  7ߢr*'fАAI.uq~A\Q~S4vX"LsTBPeM(^X"HG3%7Ltu]Q~E&嘯>_T熶44+s)c|> *. NJ<Υ2ߓ9Yەc,e|XT՞~YVǞ +Elيȃ +endstream endobj 5407 0 obj<> endobj 5408 0 obj<> endobj 5409 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5410 0 obj<>stream +7'(}-9C|,11A)FLElIa¨W" +HFMg5BZruY6}Pu l%N +: h@NX"KJžTo'mi7yw2y~;%R-AuVzk29?A덇EibBkwC ’Jtuj[*jN uSD"`Ҫ)D01n([[CAџͅWd: Ajp  ']6Wџʓ}ױO}[A_o_➋޿ez;V\Z;Y*ݕ1oI܉N)B0JYW1aNR7LzbƬf9-.CEFG^j.>7 &"lU)ԇg#q|ex&O+_orf:kKdВE_-ɀPro'?efP@Z)' TU_S"3&tkCO[ +endstream endobj 5411 0 obj<> endobj 5412 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5413 0 obj<>stream +~Zuue'(7ivi.2Mj>SE׿7Љ8P-mrawjЉJ##U@n8?׺شUfPpS5zӾǠr};v %Dy! t_2†%u;XdȪ!0;qыh[B/y^բ3N2hW(Vm D%z R`<_U&,mOllՃ|fn֟/,l8a'RKjV)a2i\&S),^貭0`s&㄀Ty|uiNڿs¸JB3 +endstream endobj 5414 0 obj<> endobj 5415 0 obj<> endobj 5416 0 obj<> endobj 5417 0 obj<> endobj 5418 0 obj<> endobj 5419 0 obj<> endobj 5420 0 obj<> endobj 5421 0 obj<> endobj 5422 0 obj<> endobj 5423 0 obj<> endobj 5424 0 obj<> endobj 5425 0 obj<> endobj 5426 0 obj<> endobj 5427 0 obj<> endobj 5428 0 obj<> endobj 5429 0 obj<> endobj 5430 0 obj<> endobj 5431 0 obj<> endobj 5432 0 obj<> endobj 5433 0 obj<> endobj 5434 0 obj<> endobj 5435 0 obj<> endobj 5436 0 obj<> endobj 5437 0 obj<> endobj 5438 0 obj<> endobj 5439 0 obj<> endobj 5440 0 obj<> endobj 5441 0 obj<> endobj 5442 0 obj<> endobj 5443 0 obj<> endobj 5444 0 obj<> endobj 5445 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5446 0 obj<>stream +EcV-]z2wY$8Io!Vյ kי<`7'ciG_g +_X\3HPp֭@U cyOz€eS`ZŶ4iĮC3|7&OJ/KY7e^Sw Vz^aV,2]@pcGNfv]M{D.]i$+~`jxHoJEYSW%s =OU?Y}qm΁:soxj~?FYGTj$4QAk{9o PJ3?7 bˢOwCrsBa3c +Daq\ʧ171̔GNW:仁tt”&wH u&V"})'uF}҅2(>5膺{IV9 1H" w +Ȝ:K";Љx|&o+4岶 Y*VH!A]:8~LN1`a9os>\-T#AqKY*ֶiU\0Pk4 ')Bq,~KDo݋Vih!Z a"%XPNMÛS{o篡RjW`[n"`s䖣ԛ唡9oT`=}wN:955t+*J M}?x!Jh޴9,bRLyȯȆ#G-b!WpG}NW +ם/iA !8qtQ&6eN\QkkB4+jAkJeLܲtRSCh9r6ڂLE JSpp#~m;ZfzZqeq_BJ8H7h`ZO9u_Q If0FQLC[qaፘ#H.CKL-ak}b SWeOꠦmJМ--[W.HRtEŗrt'uifl_FSM}$xS7V%=OTUײxx bHKN{,{#7`e`;uEZuwҾ#yۺfm] +4G/h8dԵР_SJܔvDyIw57TvF72Z}' ?ŴZ)JCl6rMG&CzK [r^ixOEaPb""ĘƋWdܨ$?pո6ŠXcbY.ԿC›'J[ގWTiJMmV.̇-xhqQǦצ~.x~۪75F`!8hK0@' 'J"~\׀ X YqCEb ش8˸_ +Y U yw c|zwYm`!tm O:ʹ| *&%=tS+ի``21tKY^e; 9.)1Q14 bØRWx׾ṄDWV|+JJ{O7vʡ QlBkOWXEDK*1">4I-؎xad~K-T]8cS͹5&^ G1'3dy={% E_"p\HPl-  'q9t3KV<ֱ8ţs&^H[Z QXoW&=_']tB!+Yҟq7ACC{(XNLv魁x`\#VQs%r4آȍ [҇tInqgUu"Lح®V5>˻̖s͑U#Tm/2 ȶ3!UcQi =8*"ךST:B/-ٚcحDlt@%TFMjq=֒##n즔ޣoM1E1r3*:R,39589B ָw2ߠ XʹHv`)-E<4RKXl +A9faʵQao-f\-E#t'+t9:{6'NS]彵vJOPXz^$ȏ@Fw\UfO!T]%s#%$|::5%@>AfbгMyYFUFa$}!n}8{hlGm-%&ɧy ׸[q 8k1 㽝eڒE#ǣ!ѣG5va\+>/8:Ig}84KQ?x3EG+9v U\4(!xc4C~$j5nEM"{A>i~J'eR|Չ$4~1ߜNqO|]6PqC%:J )H]OZy骕BW)"U|3()J pgJնM|eF40 ʝb'BKgoPvxg|!`F- +q0.5>t},Pat9I5OT1mW'(Wlwx!^ ?)(j{~TB@4ɵ;iX`:i?3xjUCq/h3֥众>heκ y j֜+X`!FW=t/54i8"#>I G#"-<̴Nl +L{jp(Gn?'“@723fP]24&HTmQk0?1k/L`Z2P̦,~* +"G3,֚c*D/V]+:,G3C3~`˘c +endstream endobj 5447 0 obj<> endobj 5448 0 obj<> endobj 5449 0 obj<> endobj 5450 0 obj<> endobj 5451 0 obj<> endobj 5452 0 obj<> endobj 5453 0 obj<> endobj 5454 0 obj<> endobj 5455 0 obj<> endobj 5456 0 obj<> endobj 5457 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5458 0 obj<>stream +Rg*C=WlNT_ `r놃pp)V,ݵT"541UiұxszV{)P*~P; +roiك +P2o8]^p>:y;\j,^6yxb#8N~e,%P1axײ}YfLԔ^ֺ,7iQRAM˗wFg]5m܉.ɀp#*j + y%(Fve`N4aFkp1E^]Mvll,>+p%x莩5#9l "GܗG9^,.,=d+ˇ'Q7/$2 Y05FJߕz0vP_|-W;TǠڦX熇}J<aV\Oř{͗MC&@_;:a`YAWrquUspgT.#ұgW.5S-!xs3)EKP߁*15-x:W+<ʮJ_>5&M.]n14x!HL^(\.|͹O!,'}#l$6y'D DJr3~c/~9=o8/snR.AÊJ'w5GϸKu-КJ]1Kd&\'eJYHZ`ߤʍ({`|x?<D)GI"đZ>03[ܕ {^N 0aw`4?{`[P*PXȮkڒHhR|o7,:}L >1o.OPfy. ;\D0%{~0%jD@Zrh)L:ׄJ@ {y0 }RU06:TWToWFfS 1L,7gcY}/øI3HS8 BB_=J;Dx +_'v'XPnbYƭU*汃;Ms8.F` d :Opg vhS 3(I@(x03w7aw$\AԴrN )ITlpJHy%kjP,Sx-:)/79徽Ur6$;l)q^:f9^|fuVM뿋 C $sa*W` ~̊G+hW3&cz8Op=T +/!sBO6Bϲ +endstream endobj 5459 0 obj<> endobj 5460 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5461 0 obj<>stream +L5 F߾6P֏ ۊLpJ!~J&_ + s"ӧO恴[4kR_Ƿҍ"{2 ꨁ-eˡQRP44:w +kP{N`]$M|&;5@bTQ%@"NjmYUzou.{TS+"֜;&{jMte∔k@vVRֽÃp3-wY'AxyMᘿ1dbš^kaDE,Ռn}@c=vyƛŴ޼o4f"wXxkj۠;8br߸ +wlQfUu%-]a>hb:t=8nhB QיI*9ُoc4򰞝;Vmrdҋ,(T +HAs`#?ٻ*!kvns\3&DSڗ\=jwz%^/ȣk3}$ød +MC:t ?۔9־iD )]q?f*%vM"? +m$KOiAb4}>ImU e`cd A]VaLAo +ӶzP-O7r77snlij$M> endobj 5463 0 obj<> endobj 5464 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5465 0 obj<>stream +\Y/5* zEA$b:ma8_bdQj NI%t! Ͱ9h=6@,*ʁ;* %d~4{'I͗GA8 |LIm.in; +xEZKl=匆-MզB.p d{75RN)w#g54E_4fFaG +> RxNGBnR9v栞P"# 8 wlDcz料)94'tL :>ri_Xz[:xD&|aΙ'[]Xڸ-tK,L 쿧Ojv]Ȋؑ锇NE +[ǙSG6}[ ȠOFm(U CU]MkeEc%d.%,Z>Z[ ndve뜪S8Zx_}Ɓԃ3p\~sX cVĮ?Oƍ2%3Н(U̩HIb*`+EA# jH+X'M)`ɓBb:eK `DT0^ykp=NBCq&LSnڊ0ׂ.o J;$J2΅t<[V즋U E |<뚦̸JrH}PyC +Qj> endobj 5467 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5468 0 obj<>stream +]#B3?ۊ Ԗ>qW3Bo$6Wq_XvS5L4\>_^%gf,vw,pyCa8!xy)n Ȋ{mY9ÏՋONSWzз2@뉨m>-ȐɒT*7ק{In )Kڃ1+ M;7Rg8K=ɳ犉SN:n=n44g*Ӛ4ȡ@<?b2Fڢ0Zay0=o$Exw pC2 O6‘8qy*XO+i{Vz6}Yg254䰮Gw76=N_̷EtIc[VT/5CvϦ4n(OMi1s8!>//0ArB] [Oh :{lrG=ԅ/2~8ߐ>ʲwOӽWAyWEm,  qW7ߖD.dYPwI@:I92n!ϻzA$YYVr/Ng[;z.g~!5]4ɞa*x +m ~ҹJi6tz+)NpAc0 +endstream endobj 5469 0 obj<> endobj 5470 0 obj<> endobj 5471 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5472 0 obj<>stream +y ~IؠI:mK"-օm8؛Z|,l,|)zb +i +6rp2?6|{C o̜:[*am#1H&Tשۯݮ +TsE^/DLSoj<; k.& +\'I`V082!#B~1^[Râ>v2̫#/hkP,ɉEϲ*yRG&ُS,IY|ol\Dd[:ZmV5-Mu A}'9rYgaat-HQx@2DQ0oN$kTIBd8%Tlx,ᥚ'w:'a$Lsq_P#u"~ ng<Ȳ0h̕[׆_gL}U(h@ "PSz2AX+86͈ۜIѾs4_"J[C+293XJ=DE "W'ϴ >\%XȂ*Vjj.\eG532M:e+5Nh! e^ pG_L=VQKu\YGnm]Y@QJlD [Pвw4 1SE͚DǑ.$¨JƉ|'DSE 5iϕ@+?듮^ Ay M0n$w}f4jCDTnk";æ*,UoQ] wn ~]kTNSZiZ+4mT-Ŀ&f +endstream endobj 5473 0 obj<> endobj 5474 0 obj<> endobj 5475 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5476 0 obj<>stream +]Ǒ6WVU;F}W0~7;/%T__Q\xQrpocJ" ;6<ٴԮzNAtig1>s̋AzU3сJeYRkvS2!az'Albm]f9MX]HtYfu +''D TW' _q |=<_H?5MgF~=fJCH4%ij: XjyG/sâtm[ |^[;$\_m9˜8/o>+FU+43QQZdT%" #׳YK>c a;0rz^ll6VB~vmLm +u`ex2Ik] spYvi.tO;PHwt^6ߗ\VIÖ0ʠRL ~CM)PnUFDp 1T=pof)hĊ:W֗'y/’ٺ3jg*?36Y%u[x)" +endstream endobj 5477 0 obj<> endobj 5478 0 obj<> endobj 5479 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5480 0 obj<>stream +_7Rq1ӌ0-bu]*fg}x< 6 T Zu@嶴5={PmpAwCiIaɛekf:$$UH%1[[tFs ;?p&G)8GF!U Uj`%uqC+9jutַ# P2"')\;QUHTʂ]33{lwј9&PfY@K aLꢗ[JGt^)rIϹ3 PY[-&/ :NjO?@3eK +Tjp<%>ǏiHϚ~٣GS|: $!!6qιgDXmYhЋr3rY +%0C't.C UmUk@\WBZ&PJ綊 +f+FK-gł떛`R-kL&[[ܿi^^T ziqQk}=Úq (]/Wotr6D,8s F\%|'Q_lvГžZ{;і$~n6I=~5ÅOnƴ&/G"*o!/DFN* ++)¶/:MvӾ@Y-Mk[5=3^#KE=H4mRI[rw1M* R+&[Z+/D#u)+fp + c9Ml8Q.mI +endstream endobj 5481 0 obj<> endobj 5482 0 obj<> endobj 5483 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5484 0 obj<>stream +T+2_ O](Ic½#̈{l,NI%%ǎdS%x?il]ԧ!2H8U!n$?mK3EN:^/RTacKxgOjx+C˸_lI*/Jw02G@q%bYo$eԗ }bs&-x-_b +<7zR>փ+.0b+6)x_9{WT ]U/NE%jYfH\:q<0QX5_eKq4WwͩK| 9*1n& "lB;y poE0e2 qwMqbtfcn]R`U$vƝ8FȆ~|?l'nb$}CcC*^xG~44}yZ2zsBi?9sYQFZKaSp!jx% +lTFz%B\^zR^vsщ?M7mllKHKPDP _95."G t@w=#wN!ܗesmӦ"g{A}l\3̩i#Q\o`1FNn,F*A1+͕'hvTjw":8d +endstream endobj 5485 0 obj<> endobj 5486 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5487 0 obj<>stream +]FٕErNz(' +c{==0z/Pz@9T3]=) 0|'+ p)ъG<}5d f7 ++O?5!rw?b۱1GUsipB6U5E( "e!{2)DZYjwmS +endstream endobj 5488 0 obj<> endobj 5489 0 obj<> endobj 5490 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5491 0 obj<>stream +oE:2\mk @3Lʵ0+x1!1޳U,e9%yC™ҳ鼶?nc˒Y?5j!ehCf:B3z(u(69dAv/bέ ț˞=(w5;zz/>Ϡ#8gl{FD{|L>h4&Ip% ״C?HB/989.YR#2r[#Or]WRէ!Zj3Dg$ S͎P +ox#Zٱb剔$V#ԇ#*jjN +DyCܐIb,m  %m7:XЂsjGB D? g,N!-a <&=Շ +yn1\zaL~iއLCV}͑>:.wjʟA0Av'ϯpu X3$m4hpqB* (HscSZ*Hc6B"Y#ْ~#L0o|0m x<JljK^M76;gWC}4ɚ> endobj 5493 0 obj<> endobj 5494 0 obj<> endobj 5495 0 obj<> endobj 5496 0 obj<> endobj 5497 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5498 0 obj<>stream +iգQqO.V ]@]AѠnyn?;N}wIjMJĮG^S~v?vsz<\X7|3`ԹkΚ9 !J94igQThخq2{}@*DKF'Sv؊g'H9V> leX0C|:vY:Rܼ{{O0ྊiJɌBU( LG/]|z~XNyV&:}o]1 "8n..fdw0 5ם^#7Y\S@ˀHL*rA22aåg>5#;HYcmK;`g^N{Ѣ$~|ؚ9Ҩ!>ց`IdKؽbpњe"lȱ~$5lJ0FJy]r:v{NW1>#z_ + J@HECw%_1隍qwYDjfZ*Ϯ'VB]B&4w1="=W!Sn@+Q +'L60O4T7(@ Iq:/ĵL;pJA0^vC]&9kqvVlSUQ 1({~|ɾtf:{hJMkͰSIݟi$hy{=.ƙ(e-esTx ol ~ !_ gT܀5q{A."ՄK{ãO$5霑M%OƓrGVkSդ-{g>Z?grZ;!7{΃?_IOE7Ku +NGCI#DMǠ8\vm\3bU!x!3F{]7z-e 6 +gw5EV (n"DŽ+*.DȒ[ s,XIAYcSr4-ii-gF^} +endstream endobj 5499 0 obj<> endobj 5500 0 obj<> endobj 5501 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5502 0 obj<>stream +v))܌=.$czf?=DdL6o/ls}8پUTY Z71U*KP'1?"ԥh1mŋ,/4MB֑tڣoSY_UI;4[n0QWݣ-`uݬNk1 +MxAl|@my M{@4v4|>Y(:,JeHwKGO"d RJJ2Rd'~Sӈ|^xTf?X\c}d>~[ wQfa9ų- ^0Ҩae.3q G΂7+U OZ&4AnQR2oh̘'rE@$CׄB~*Jړy!\fJ 's QO$ǁW) v~<!2| զ⺅mMn ~spE6mKo?cwk&Р"Qz ._o7**uγl9vepHҽ[~=4w4s)7 H=e<[ Iӕ 1<ھd2%38VTӟ4 Bn@jWjMP]v +a6ob4暩4jFQ83*z>hD% \i]!h6P,)#R[/cŨX_R#} 2`W a~bsӄ%MR.oBЗt\)s7;l]oBSb> endobj 5504 0 obj<> endobj 5505 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5506 0 obj<>stream +dj:@|sE^wq=ߐTʜ鹪:%)#=*9yMՑ2?X+)+pV^ۮHIK*$8OI`M1*>X`;m~0$Ƭ$Br}0S׭bJ6D$nn0^ ]yL`ĻTSǣEp5!,B!m|^%YQZɋ 'm.hGp#D8Ws%,4 :3iض(Ut?8큐ցC-eŜ|=&Amg_g'}xn#LהbD+U|?@¡l|˟+R׹ZʐPyƻSUo>V6FCv3BcC]\V7-0";Rlǣ!@1 6vʬ&%,s*rW'"s x]}17VZ\\ +n+0ikr˕ -%ptZ]@Tnm.з5y>49ʾU.ؽ+J +;::#F(o~/ EKMB|1IF8%Y?>(ΐyQ8_%&qδYQT?PBܵHkAGe[ť$k@"ae(3ɭOe$rԑ}"'V3.ӻ$~uSlz'Óyme%,>ea Rs8Yu$/-I@*5h)=Lu'j|z*aL_Eķ ESx4fZJRzn,h\lBvxĽZsuLxEeE]tE]Ara6>oHZWAB sr6=6ʢH*:\v +k +endstream endobj 5507 0 obj<> endobj 5508 0 obj<> endobj 5509 0 obj<> endobj 5510 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5511 0 obj<>stream +ze +6HIPl']EE*@Zd&hƌjC.Ou( Ut$:Pwt3Y@P- _;?U X79qFoaOȰCR#w ޹}d|}.w-;36TsA4 |$PpZΛ/8ZN: E_eS>vNms_(v-nX/:u8m3q]mɨHeEwJ逊0C[ѲUxSrѾ,~˳Z6G:pF. +֫wuQj&K{k + k|lxa W%c qjp?F5GovMuSCZ +`VgyF#t1BSsHaZ"xA/f'Ro"Zoi2H"9Ooc=GҰN +z5֚MCqapS!<PTTzV2 +A4? +eNϝwGL\픮)W;9)0/#`?&MGٯq}M~3NF3:14j/{Fg'NGL;0XPut ðCBSg@˻pSzsL uE3i߮*!ԑ-qgȖ]ʡ4_+]R@O2) BrvM/TJ,IyA;phŶ ,M,,۞9jd^" d9mSX5wjGʲEn_I/ZB\;H9O3NK񈀲zID¢ڷ'8kCr,`zP +7]9PY$ +endstream endobj 5512 0 obj<> endobj 5513 0 obj<> endobj 5514 0 obj<> endobj 5515 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5516 0 obj<>stream +PXVT6IU LFG˖37Bjqv4>^4 uًyyn#!HoT?04zZ0 m;W;YAT%bG1ZI#e}VĆ3ݦK[T@M PI\" hl]2)6H\ūSз*_IT̓`4;exB{;H@뮞u-y!x$U)0w7zVyT{*W Љ{{KhD{4JX6.k{)(0Xe%MɤsHdžKt@[k*vd!!<t[?2n吹@KG,e<ݡZmlOAW]-қp;0(MMQ@S05|Ψw&4 + +c8}n~'nX|!N-; #Om{W"v94_9\"G]ukpM J1:GNn;!QQih$ &(USg$2ZȥY!:kz0$/EJxン^p.d&j*Mq KXR5R;5%n]Xb= +}_[qQ9Lp;kXCH=5il%.2˸Hc{5a^5`*ņ"H^•75#!@Q"ğ!n>sKMˮ FqB/epK5;urޘkuśD+qZ_dX8ivנrˏ^X-.Xe2nSh]NuNj#~$Ϸŵ+_U]KeLkf!vL%X̚2 D(rO煯p"4[%Ӳ2*MyV]_fo|5S*Q~6-$vtv +endstream endobj 5517 0 obj<> endobj 5518 0 obj<> endobj 5519 0 obj<> endobj 5520 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5521 0 obj<>stream +3ͤy^܍", SA(fX]?Ik@=Y'uQ3_!XDc}zH#Fݡ`ڿ&FhK-WշX3؞ 7:Dk kqɤr y&I[*[w ?qRf R?6]vMvkXx4:O, Zt'y5Pٝ݃ύ7m>$=MxtG a52z0 s:7:ߟOp4T3jAScBg3 d768KR7MEyS{PP:!Lڈ@ ?hYHU'[L]=gO&-l#*J_K "=aCJAmZ-E'dH`jBM Ā2'\4spLtD|ݔo o1MF([Ŗx @B ]oY+qcvI{CH+fm e"ȍGѼa $0nMB*~_$CX۰3ɐfƁۢ M5!b.z1` "[2],\>߬'wN.clr9g4ţΦmtTsO|]o;(c򜇶$߮XB^[{"!#0abwI黀ﱗ Y } +i:x5eIO)HMI6I'1 e:}w?'fF/F9~6INuO2+vH{ +c#Ť4A9|x:|%iT흮P(X ߿^lY"YP!>ـ%PHP_k;vXO OZ~Y<ܬ&MT.-LVYvӜ_+VzDG>-Bf|ep?.!z $p#kh +endstream endobj 5522 0 obj<> endobj 5523 0 obj<> endobj 5524 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5525 0 obj<>stream +]RabO@,>$ɩ:? Su?! t: ~NbE chƠZH3]A:,FC$S%-ΔQGbByL@7A +T%7Wj5 >:;?7&ؤP?;k5 +dZ t<=rmJQ?E$e-"݂\3F2nhWۋ.,),5b% +jdWyMp`;`)^%J&OޯQu#TBa8j^@oW؇nyl˛{|n?̊znD$_ΡX+B4WW +r%A%҆ye#Lg|)aD^W"; +ug ;\ܾJ Z"&`N P<; ;rH?) (6J3_xsk1Óg|C~]dG5):ws0Ks3{3&Z=&Coލ71cd#ܭ@X]|wJ*8I!<_MX0i"}H+KE2vsWBRp=j!@R664MB'Y(,rQh!; 0.P(0wfO@Mvxzhu-{=Bf\2,>Ȣ1{7\x'o~$<2—#J$<8 k7|+~˲;ڏHVI -3\'pwmJvUƆLM$T{fG:'>Bj',U9,^2 |Z}? 㺺>jInN&:J/~ ,Ǒ{1$8ixVj~ߡA pj9 +}E"1[Q # +endstream endobj 5526 0 obj<> endobj 5527 0 obj<> endobj 5528 0 obj<> endobj 5529 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5530 0 obj<>stream +W 8 ."- ™sLy:B8/w؝Aͽy'/@nym|EVݻ5Р9=_^qΉ=K3J{v7 +"Hh6 V4ڳ +E|cʦR[ •iNƣɛ!ò5lK.%ROwEv9(<.WX6yU 2=h)b!j39 w&PdwBNrwyUl28J5J$SzQ>۠94H--͈҈!*FM-Yu[QˏWɘ~v}\DyҢt0o|_-]wܣ%A2ȗ&A~hs1璯5Qm`QCY˾Sa\ bŌn#otZaE`-+Y*ڒ ^C5ܟO{%0' +$|MZ|sϘA@ F <w K6>ې4Q/vE'qO^4ZMKゟ,'}sy[ҵ#:D1\P[>h ƃ]!n1s{W +6<#2\Zb( + +IΑυu9"1@+F_6^:nzG!t͏oYݛ"G.؝5hqgWCKqH#;޿ӟurXt-<1iPYYؐ@٤$j w~$kyc`*ُN߮j>TE:8ݮD/ɳ`<{a;0GZҜe` C)M2/~_Ѻ5CgE eb;Z8abzԗts4MMqR҃ebld$`<]B9TIvf9S9 X S"$KN9XfctCyUun_D7Lt@ ;z)o{SoAd@R׌ci[Va 8— +endstream endobj 5531 0 obj<> endobj 5532 0 obj<> endobj 5533 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5534 0 obj<>stream +oIcSy~]7(ljxeÚ]q%V.栾YW L2FRyG(ř5ŌmJIj HOOnH8k*aZoK1 Se Xh|8wZpGx }V`c=d[9w./9X ZAj/<'5hNf<-*J CA ״81b9 +݌7!0Ds{.ơx۰@8yyïAL,R;KedPvI:b ebv0F[Uw{+> &q]xK}.NڿE  +H27؆eWNr]O|G3U'Lk#\HRs飅_5҂*賲 7B +6d{j/OX \Oۣ+P3YG}H Ț _vLhԠ#bKIR,tQy@ThQ +endstream endobj 5535 0 obj<> endobj 5536 0 obj<> endobj 5537 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5538 0 obj<>stream +5`{;sÆPy7R[s0C9cR@Rv #H#Ige+m "$R~og +34o ~,JMD=otfH"+̅Ë;ԥ^bI{fV1#w W7ڵ o{p 1 +[(y.#=׋T +pU5&A+לHf +/wa~WP;_QBڛO]}G:6.(c@G'uRR%u#YV=eTNN @~>% #lbbǚ•U1uT;]8(NXl$c x3v|¿$ZK] r8_& yPEXg{*\CB[d +άl ByVy'~{u0!|)hh +#ky%)S +gw( R㧞9UƐ'--1$&f +3zN0噍~}ؙ,V}OlVES>.r< 긁^%~ۘEI{&}'6mCWwO; Y!^S/)(=[?}xF ϲ ^Qu\bʖ /&8Ʊg#foиL`96R?J̊~KU'9&+ZQ b`Q*z +?e֜efg"g#?rXɅo>WTbn{±7sJm,[WtH6Nb_Bb[{Æ_5 +r { KqQy%xCnBZ5*]lrMBj\b; +endstream endobj 5539 0 obj<> endobj 5540 0 obj<> endobj 5541 0 obj<> endobj 5542 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5543 0 obj<>stream +,GKUaafe;cO;ADj[7(fNwW)|JymCpujy- +Q ~v9*|8+w$hyR1.?#Ywb-c3cPjy=x'=L0i [Rm@<iیy{zkg|7\ ۭati"L Jm:ջ&^%Z^0q,|vZ)X̉rz{YyqU"s$ޠ5&_ieJBىH;HAt q^6L^!U/̨Yk7Aoh =?%NFE0&X4~}@~SczG5Dj BZ]%8Nٚs+@heb 0__kwSI+YmPۘNؔ=BHn$ 3cLul-@)Tsyc>uAb"LD m0S7AAMQُكIjW0o +}"[z*;/B;X"Z ~P0H qYQ0YE~}G׮~ش5= +endstream endobj 5544 0 obj<> endobj 5545 0 obj<> endobj 5546 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5547 0 obj<>stream +4x`IRvEVg{LRz9ꎨAGYZ ̡ hL(,j3YMpEy'|D#JCq):Z9I!ʃȅ)纲y<[—Oyus֤UfaEw< V`Y&^۾>OL@F Lڱl;GHXkM7K[_B[=A-@()'&݀~Q&][<<#%"Y<1;*bsEГ$//N[_E_{NqyK}/$pHp> a3Nmy>F ^BEֿoU(㙹C ymvϥ+2~%#J/tB xJB@W*^U?Pdalw% ļ0u '\ +17ᬜܹ:Q6Nyl5^o&,*#4]e x;M2~b.,.^|v&4{'ZU+\=(؜\ޡB+\^HWd nIJݐ/R6*ͣ3v*%CUl[aF(}i$P!U}'Bz;OΗyo4OcB`}*!)qZILyWd2+7j]G-ףl=kV˛Gଙ}>$]Pl|oP2m7 bR*]/BNa*NJ,8v)Zc\ 9縎NGOp +ߵE6 +endstream endobj 5548 0 obj<> endobj 5549 0 obj<> endobj 5550 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5551 0 obj<>stream +M9;Å*jBIc-fe[~O,рϽ4^m{GǕY5lO:u~|SXׯE;#SDA:kEzqX2j2!q0dp/w l8bbِ$ T;6 Cs0\LU JVjaTp|~&<ӣQ#ܐqBSsKAFť# =2SLRe˜L/:luψQ0o8ԛ[v^NEc6sLFg6ʒ0pP>QH~r .2[6d1vXD]ɛjlf 5d3??bGu$سkw9JmB(^coH x 7-@աRγ=EΩͦ1`1_vDܔ}H64ݦ.iQf>`V|E&ok{ +GX2aw}K GߜcqLJe}ZvQSps|pJ;i69BNɄ6_)C2B>aߪ'0pH+< :W3FP z 7 I +pJ?Fxd"›<l~=K*{7۠iϿ_g71ӧ>rY&Zv]9CVþ:[<)X.u/QF BWhN-eN=GX@sd= rY 6z ZFՓuYmԓ6: +r0TȵV'H-OP<-H1rx9Wyا 1C&+ǡcRl* \)Ŏ^hGBq?%z}miTз$7e *;Cm8y_I0$Nc쾂LȤ JI:vś!1.SDZH3 o6l+XPK6V{ 4"h1R~>jp+ ?YTko9A5Ә)N[김S|U<MR +endstream endobj 5552 0 obj<> endobj 5553 0 obj<> endobj 5554 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5555 0 obj<>stream +3 &&GȗXQ:|.[#>E +@.W!"y3@ G7R1],K$PF ~/{DT`fiؑ| +|ݔmHW)fp.q^Q,΂m9<==YmbnQPQ&deM-6io{{ +T Q nQ;K :۟ۨ24]`.|[e܅Β:p CiU)xE$I; >&vxq{lON{gӖݢI)Y-!ud +y *kmA#{ dR^-0R\Q*WI 4r ! :]Old&3nʠZrn2p~?ʳĒs+tr-W4!B12;@i- i(:wlo"t07 :)o &W BЊc﫝̂>°l o#b;`iRKL`#gd) +AB|w&hr^-4z߭TRb +P 6Xx{MUX\4K +6)z.QW;n?) u=+Wf*:|.:IE~0~mz& +sypRb܏魳W +y(-̊ß- +endstream endobj 5556 0 obj<> endobj 5557 0 obj<> endobj 5558 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5559 0 obj<>stream +&=o6Fs o{lr20 RƟ "J-Vivqvq+(ȃs,g%~mwCErIфZrJ0fV:d0rP 50L=7=@*{c^ !c,vYJ? +o/fʪ6+(Rb^2 m>fXis?4U=ć Dc1(+)OsO:r3 g8mNhPbb&M6wE"Z=E/QS䷚h8ˉĪf2&)9s %ImE7.R4Z1}L -.5yw{[fyҕ~-R@U#jn+5A?R(&M#*w{R:{Z„7CǔoHEQ.贈(tr,!NċNXlPTݦh}>2s+@keoF"P&,c)A϶:Azas6(i( +/Z+YO{߂V+ĪYYDZLmt3W4GnŻmGf_f/1 b;MY9?~c +G그H +p|io:,ӈ}jihJ! Mw~eCryn<JꘑtK/x0p~!6'Ιݡg* *n7: ]\6 wrn^i{Ю> endobj 5561 0 obj<> endobj 5562 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5563 0 obj<>stream +oz$+B,tw2uwP2[cNFGv+]oHS>4keZJ %6SmQx54]Ic|T=<-YVF9Ȁ θy4F537{Uu u +~Khw1ɍO(KB}+7% @%bbP@RDUݪ(Tӏ:#XcGK,r.4U>Ļ9{&;|kκ}= ܧv$R}Rfc>)bsZ^_?YkK| 4/k=P- D_{NP + S{Z]b`eFBp c5cG1tG +#|s'w0ڸ W7J RC-j2wj\Wms!ЁIfkf)/|*ݵV~/#a2Q}d61wIu۔=rHbDBQ2ig3Lx4" }y+^*/;.}dDƩްyN~@'բhHӛ|Um"9|5=ߖ^X-~U[F]mn UF'e< 9܇;7*&< @ f]y uYGފ].wT#Zнc1G>#Lm5.5T?pPK[2f6ځN˼ly<%XKd@G_Ro0x*w3"i­A&gFEJCwD{KdHa&q>o +endstream endobj 5564 0 obj<> endobj 5565 0 obj<> endobj 5566 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5567 0 obj<>stream +ӣtCQB;u;nm;J%sa<1J~0/C>#崕_Hb*˫@^씴:p#&g:4f0AIM; $<2~+f /h߶oYں8{L^(0aO>>k՜ZNN[,cIgNITN x>?ɳ~W"Hm"S JwCE|"DH b=dn4zHP~ԣ*OXԯ?LtC.•vD}Og<Yx\.ILlXEq 4*|ᴠb4cGXƺP +^} ꠈ%G6GQEq0+]ޏ2*l*v_so CIj;3=xA;T8.P!W JGޖ +endstream endobj 5568 0 obj<> endobj 5569 0 obj<> endobj 5570 0 obj<> endobj 5571 0 obj<> endobj 5572 0 obj<> endobj 5573 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5574 0 obj<>stream +#E]X/z&{o3 e8.&\)|&Ֆz=[>C213lAuo6*CiIPTyq|x pDs6=;pM񵘧N뵝aTMK~F`_uzջXϨ1ox'.yTX[*bB" +mٟ'W:p+Bɉ +Y`5z´Gxq%rŦ\h yD<⤑VG+)a}DYWNNp?47i=Gga"p_cÊP{eqi8cO(utF%+6 \\J^W*<>W +\|>=ܦpCQlu1cr@=J$ID?TћNߐ&hJM:^ +@$OANBS+QYF+<%U}_Zߢ 8`U5 1 +endstream endobj 5575 0 obj<> endobj 5576 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5577 0 obj<>stream +)t{pr>٘4mx1vw@}` 8 }01r/v 9mbHyܶs svkҫz.4T@sڝòLñ'w\@3^)Ԩԟ$%zˆ8gje< HBsY-r- OY%$2R~4Dg! ~n ->GM±#tLJKbm u"٣[ݳ#XŶrL(C ]k)Bz;|J\KtY~["2uNI +&+I,|~׏EʾKa hR\A$hL,x+5@G8,WH>cm A>xû>:FtRd t ݠE r;G/؈IVD|?],h v 3v -/ĈrD~w훗"@S'?LɤdQ}AyנIÔ>ތ  鈗d1sE:z j* +wcQz .AhHw"~}2I[m*aՂlm26%xoÉ9F6?k/Mc<鳫 ~=F̴F t.{ďt&d3fr|iyH݌ +endstream endobj 5578 0 obj<> endobj 5579 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5580 0 obj<>stream +: +ђXm4f)6dma ᳵU֥.} +9[cDŽ;`/%-p(* O!UFэ+/h4n$#,A4qUћ]6x/G MAv>+&UFH|9pbd)pY038d*/P 5nۤ8ze`$عgVےwk&0\ B|$W&6xQ1Fpf (\l`KD.9_%e7E"a5-)hעn;">ȋ]/?p]rbS3e2yȆdɗ9ZvywwrЈōV1p=J= T6(윔 R 8&4knV;1\#_H+ /UէH[%m@ߛϠX9n9)b@2F|YO`C +endstream endobj 5581 0 obj<> endobj 5582 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5583 0 obj<>stream +shu+~~xթwL:_++7 xN!̘ftN] +"T7ezQ 'k9I]T᎑#%ܫʹxK^hm-㛭u.{eӮ$H5$D{OĮKX428#iC RhrM~"u˲uP =T}LE c&L+<Bc&L!9LHͰk8̵C,BU]}n1 xKN'|HW"3]9&GwN YlO2XtQfd2;52"1̫s-WŲ<¼-kٞtiG o4 +6̗Y"Uu)L&ŗ03|G ퟻe[a槩F1s&]g|>c?G,_:º!pu k̭vÑar +`%w=xj+5?;R\LiEϜ*_4e:1Kϭ"-VI^ϒbYaq]+X#(0M;hhe)BLwc!x4!S o](GB9{ 5O~POk>X낓✰%͍ZSI\G8V{GD?YX;;Dc`i]ƲOF90E658 EɆ5؄㥾t9ngWC +endstream endobj 5584 0 obj<> endobj 5585 0 obj<> endobj 5586 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5587 0 obj<>stream +"+}b7wC=:؋(CBJv`i@t +A£;U3Eӥ=k9*vց*+[JCO~#B*,.$$0#ވMKxG,sl Q8vQ*iRu<̼t[ ڜEM` d%qnX\gz 6YٯM@b̉(rGuYP^ ƣ\XMp6Ff1QKO!s n?tP6U´BZ[> E;uuBEs3kus"ecU.co/| \'1;FV$'E8(pMu}k?/{Ԩ?[zK1CqSUީT_C˰MWdd$*4daz':76}^ PtV4GeTpdm!mf? ~! + Hjj5߹=Q5 1rS>ԆeT~k/NTjrC1RŶ<,#"GvU!i+{I3!BBy]CSZM8LBc)˅ )=V\ Z88#PG&Eػ3/6+qLPRe`}? S?L&.!N]%ZXRl%a /OE7d7$G-7:f#? yyydgZen7GPNj@\f'y'*OIb ґp۾WUv7+ټya>;>Ag#-HxMVPBfN'D~\rbтͦm|2*bNNyh֎=G'lFP)@mLM/E^ *ۊky[e\TЁ;P' i8afz/| +endstream endobj 5588 0 obj<> endobj 5589 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5590 0 obj<>stream +&$ꞝ~:^X.,C rLӅ6^᷒ёɞH9, *NEx:~⸕MrP }t,ǡҔ_ lAǛv +!ҙ9Y d%Xce%ܳAdY@VCwS\8'AԷ:V6ESfǯ<1saL$+n +vҝ˔D03[ק|nǒ"OC#[͕ڻHWF?tCT5^k4DpW!)7D͂<%yTnHFFlpܫ9zTR-=C淖`]duTU.D-% % yS}DDcE@sf4,=v&*lQ;jw{7׍ *S F;E I3 +!Z !F˨hQ/C-w2AkHs ϕ8iKQ؊K{v|&ka٠!AZ?v5Aq4 2["ٴYg iJy z[Sg2{GI7E7_5*,N]Nk`DEuuA14+ #C;gٖ(O8(F.B" )O\O`z^MnP⽐-(Ho20lguQ~"Pc+BG9p4tj:L'Jvj^6;b() i.;Y񃽘g7 TlvM2z.]!t1?h +endstream endobj 5591 0 obj<> endobj 5592 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5593 0 obj<>stream +0[`t/j8VI D4=8]Usza߉ }N'jwt+;jj^F˭K"&$M%n 0|=+twh8Vg4m l,BH}ږ +rg"`s;YǀvT @ի.6w +4kn)J^DMorP hJqrAٸaDk IK^ɀai_kjR@ॻxeݺK*,B ا޲ufyֹK|O +D#kxiJ6dLRW@_ޯ"՗W8Pl%3ow6'tN\C*[8T0)5JQMo;c~-xK%kԔ659km4g0oӆ>u*,p!Gp+хھ9L_]f)hE=/DTؓU/%ZY*I]kK{T-^Qp k~` +endstream endobj 5594 0 obj<> endobj 5595 0 obj<> endobj 5596 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5597 0 obj<>stream +0|bt|ImH&q5aZM;:fڄ2DPjyGa7˨#Q)4]wS_Z/3PS+BnϘ|BFЊBQͪr x.$+5|TeTt>ZB`0ۣ_X6sE~RíRo:8Lq{$ˮH㗻0YΤ$M/ُe(æTIJ@*lm ]5Ns9`atd;D(ΟԏcHEChr`plO>db|o;0Y'3̷!>ު+($;5JzY@UT+E?o!gģ@%nh`%Q~fx-뫑ޫo6P$GΊޠv|]@aB[7@A+?-;4fZ f$iPqyA5F13ٳ+ p$OsiJوs5};6q6l݆߭r\Nq +endstream endobj 5602 0 obj<> endobj 5603 0 obj<> endobj 5604 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5605 0 obj<>stream +s m5#63CɖH/ЖDǻUoH73ϻƜ>b\jV΃op*nN.ZfZ_ ;N:|@0ԕKR¬kFd-['Ƴ!,-QEq+%3:-W-磨.066sD:(+Ւ{ȂNl_Z5μQMk{5N;|TGgl=2i7hj t2wr9I%A=glO.SӠ5Ƶ2uOu aͣDi~7/M +A'T%bWk|_j":I]ipw1R(]jW'$z\bq"?;Ȫd]Pٕ.+"zLv,7($䜫mٗ^gEk6XQslmd[BəmY „Y,U]\*h;5F_%Trsi`L.G14mvkd>~a«/j NF|\Hߺ!۫u6}45C0n3+Wu+9 j<#-|A\nw673^ +endstream endobj 5606 0 obj<> endobj 5607 0 obj<> endobj 5608 0 obj<> endobj 5609 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5610 0 obj<>stream +Ag9[n$}?77jYNdm<7i ,@ҌjF1kN;#NCggn$(j VjW>&/_nAWwF^[S"Ϣ}@͹I$7]Iä"=:DkgbAonKSWgٍ;XwnHŁ;;;Թoۻ/K0FWCgK_4pL$| *g=;'ԮhVm0ӭF'Տowd-&@VSfg>rX7#M8b:ZWݍr~ز䳷ɾKNH6i 9ω6mH@eҊ<'bسP Tt$[q| H2qV'yxi|t,[03b7A}Iq@{f%26d(PsFv ȼA1)봟D<?MuGhzJ LYxt;+:])j/F\IkluNNŊ3 f }E>Gr/e*mk`޸_,ԅg@Uv:띄 ol Q<?.@Í'Zi8@ϣ3lf!%N $ +tdM}bo듷g2[ CJ, +<̓U]v5Aw8DԠՙ3۰ J6"o]*4&YF ftwuZ} t= Ͱǹ:용pZ7&ZfӤg£<"`J4W'ZX S`?J΅,;9{A 6u ++*hјq'Pڎ6@iSD{" [4UD_+\ꜹ%ue7arj<_PNjs;U&oiDWf \ +Ih#ˡK׳ +8 0.Rrv۱!E2 Π(h-5GN1ǡ|}٥.s,i%m1) +Y^d7} +endstream endobj 5611 0 obj<> endobj 5612 0 obj<> endobj 5613 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5614 0 obj<>stream +ZަqcUstx=E-/9iiUJu5dN%uZGt= ͩBKobK7BU5#QE?AB9~NY1!04WKKQ.WSTM#BO,@Pn7!lC;_ngHSL1c$Z'mp8h eItvLƂxw1Ӫz6[!}}'jPfR}&xkfI[->V)|7?|i5R.CD*(r6lUZ!+T{V]4b{fy=y&K*fP޷\uݏwmFfX4?PpY}]lKZ;CsDw#r`-";sOA837pcS,'!朖ΓI$Gj-,l1ky]P#ˇj6H>;',kZ7n{ l|ͯ$\.y ;мֽU)Qɟ4=1.~3)[ Cax $5٩=#02.6Z'})HJe4ήJܭ$K$ALxck")mLMjx^%j7mJ-U $t:Su|8laWɔG1 +endstream endobj 5615 0 obj<> endobj 5616 0 obj<> endobj 5617 0 obj<>/Font<>/ProcSet[/PDF/Text]/ExtGState<>>> endobj 5618 0 obj<>stream +Bdb%zkIxN -?3mLjOۻ(ix3镃eQ +@fƾ㼼7nR ZÔR])AM:vb{r캃8&{YA \qDS\5E8uc1e̘D{nY+agaCS=^ kBvkG߷R2/gb?& +$Q61 ItR'({l5lWG7O%#ƅ7/me\Pcvo[q~QwdW4Z(TiZ~Z)A9B,bY^Plȼni-2۲-u)D}s2#[˂ c(YGUQ}=N[?e)#eo?ǛV}ME|WߑԳV6.xG[rL1+nŧWCbɫAroNjkh4f.w!Hͯ-JI''N[ ܉YmdhMRqa}>hj3h,? #{\<ބ&9$Vu\҄' 0į}͕MPӹ^5D1NBun"6G*Ls *u5-'nك}t%xa|{Uʡ@q]MJ:{smTXQ48$ ?>ORO6ҕGBYypJHB?2c4ca[b"W_}Zo`$Q"ӕnxk37<24M"LhU-?cT0dZyOZ9Α=0I?+₟|N$Qpv$I +UE:@+1/>]6a۞2^V#a ài<\i|s-{wcHyyl hApXOK. 4mЗce>stream +{5rq^ Ȱq,6gMlãToAlWWDӯ]9 e;4Pļ,qEpd,%ܕH@Տ ^PWBeC!Ш3q6ÅwEHWEa2*kzɚpc;t-8^5eFsO ei_Fiq +O_84Iu|+gU=D>w_Vh&d<",Y$"dyP)mT8*a'\f0z+zwL?b?I1)=fÇK3; <7bG칿>e7:"⼜\z\[BDRZYWbgiuZV~_]efR9q[74J%*F(?Dhyٛ=к< Vfq4rie2 !h{h(ר`&9``Lgg;Z."'ldZjm%f tu=^ֺ kvZ]AJ-#rJ앴S8wO+-! >ses}^>n**+r>=)rB0gS.ab0U NeՏL$_~]qGP?R.9( ~q܄[2ԼmR>}*,(pO!=r_F%̚JcrO# °A"dw Fp\,JS\_ͪeV] 㒡Rh6qۯT Qgu:&?ίƄ4HOz1*< ֫OxLT.Fr=3R/-/ ^ +Xt}*^x_;Ȗɔ[害遾Xwz,\8|A!} 9+xQXV)Fp چ3tt`^ > t$Lv?6U_KAe.gfql Y6JV1ߋ~\Uªu椮? nI4JO>G[\0Oy.V aw2o֩EW;h|&ݖ +3zA9MɗG77.%6& +R-rYT_a3a.eEAnmbJds1Ptl()Z(OJWu`Xֶ%1LNs =NtZU +594@~DRB( [b1n| 9C7dD5vJo 16Ɵ-4&5;Sc~F{͗ЪrԀG##.xuh[*ʨ!asQrCL)뾌"ftFs8%.UwDzˬD7GG]wS03ľh׳{9l֍XU6 ~U[Tf@4\R(ͪu<<1EV m{הM0([N3t1X[+]c@w:l!!~ذp 8CL5E Vm8Yyrd/ڈ +h|pQkgV1Z?Ġ7C2hϏp2}4_M0bv+p$9"⧥fLakgϖ\wX:މˌ@lJ܅E~|0Jn**Tj|mdDM>N*]]Wchk/8qoF7J#S|VVcqPoiu)৳xءrMr/CR:qٹ@)4cXX"Iv\ᙠNgXRwN ڂ &Za,N6뚰 SuLJA 6rxCscܩGihDl>UT)Ey ovɢECOJw*ˏ~}('%eڕ`J vڍ!9$4`\"֫ΣS(2JX^D_;$ e,x.^I/y+Yֲ-7XԵ׃Jؤ ~!Sw$ 5 ӽ睊wdTp`xO%4,.")Z9A*UrEΣFD|BTDZ.x?7I@lI;?K'K?Iv3< bś#ui7xIv\iEWX_!h4.J-]^VGEFy(UN0g]DOSIʁaoCi؟\_'< `vFouXSԾ9QP1ZG+N-3KD#o?~;S K%2\4U,^r@^6A fqLjU\>*:5|9K=Nȱ/ H)N\at~1nT9v~ {=;n `mB*f܆*D> R߲؉صGxBWhZsY_pCj[nJ=, +KO֣`zqϐh+LV{ZΜ ~J7((BѨqL* h'f,3E+"=' g(ױo +*M6HwJ^{Ȋ(&@Bly7m^ꓮ}PZri.I s.URIw-hZt̻ $i4dIpav`bUʻ OʘBh˴}t/|WG %-2xHC< +:-+$.P#]ޜoH_Fz>"#\Z&v3YC7fF5iȩÁCs>r()d Nޣq2}w{Q*"A){0쩞vXBcN3|($_FpVYDDЛh k'`m'} C3HAWw`db55w9J~1s04~N*K\M?#S]_ ʤW[ϾmE o ֮{<>JoI3' at3bqՉ82yXa!.F`,6%na, VQ%קGEb}3} !] 8sHAnCEn>P-S)coxpiͪF7nPg{7y%bkyqb8 Vp0t {_rX[{] +A?chuhD00͠f<3_ |۴C<,YɸFѕ/ jϮǙL5y,^ӥT`b~ot=?i]QTUq#*P\81˒[LKnDcW +_Ϙ1J81AMBA#f3uq]_D,C[`ږ.3r?ᕍ: W{*Nպwil#S*9Fې?'PFMoLg*@\}3'm(?VY PXP+nRm@zKIxߚih{r)&. :Z7\yґ찫IRJLodcLW{Hw-IMzx iøbBΝ?g;Iϳ2؆X&[NOtgsM{4c1?OIh0ݴoi +;#7yT)BYw%*Na +}g~+e:$&|d ;aMx`!.jbZ߳ak?c߀ v57<)J3JKQ2bs) GъLD?i̬LJ[7ڌSplBG״>7;$SKi[DpTܨ[ +FpQ.n5 \ճxfBZV`\J"f+ RFah}\y5~AKtl]xe.VZ[&dg6mmF +F2ҍal.sW"C +-H;SԂ# )k8l]|Xn&gv}Cn:r |c;]u!n5V$k%s"}U o4?bJ݆`xc/㇑7!bD1Af^DA2!͔āɖcN(&$kh)Ƈ-1q3.Wda4*%zOsrUbwR EৢzK<Ҝ@SQ60ٸAsyž.,]1k_Clᙝ2'H"J4? _mXws[PWYoPŌY<">]y4\^EOqiIrS-f+swlPa[OځʱOBl2=<[if`*%QibP<fIۀ4kص{\T?aj_xGoi~Q_P;1u ~H$.ى>meq[l827'JwA +8qS> +ibq$0e_k;V7Sֆc{Lюy'9VyE_K27m4 +L!*`Xp +*bEsXaG}l iu!2riB,G׫) rfd28(Qo\\EQ{Zu}%!.Ğqf.dʃX^5c+V[g< ׊3'vun8m?وCB.T*zۗU݅F׊cj:$|#|/W kπŝu3F*hG=@ҿbql:8 XH y6;0(QLtd|qV5m֩F WR>M8_ +al;Dx;K\ +U^afiN[ -ϓHl^Ml:- J# Ő !Lgi_#xmr莻hII.1!CvRwXGϢ{eh4 ?ŭf84,!r\-;0L0Ͳ7[sv!ifĕyQpꂢ܌} NMAf""r%B6=De i{XZ 9~8 dD'5DXpbnH27vty4, +B?DG=LI.*s 9zsĹp-Bl:M ++vOA\֌ ^aO@ܓ:jR$S%kjKB;B<%+VaUשt\P>Y!tU P;mx8еG:lحa6]tbLz :x>P*lբE*Qa`Y? og:zE Y^3ߧ'^Lј FИRA9Czjw{9SPZhtP}^_ç:O\&:C:kQ̋-R3@ |RwUo/dS'*;$࣊=/%p_);rJ<4b칑}^KmuvҲ.3.Ly1D*i5[[>6k' +ʕׁXYܒl/WTrZ(&9߮UG224vD0UcawOk˓=*l 2TGH$ S{s;W/o5c 4Bڟb8"l ꀔ!EhU-񓿤)U+/b V7 :D -SRx~n~yO==>!)Q<{RA#SII"olX2vQ +#F:ٜP Zd9Kw^O `b +OV\{H/>\@IK>ht(4Yf*]k& +so %2s Vvs5xH6V{\l%KQJ +.]5wt]2?3zK4ڴŜt_kj7nxnBa/v٩p,R  +Jz -s" m+`!xW+Ekw)5-7 FK\cW@'?b^ Ok\-q +T{R ~hv۰bv ~ +b#^@\I3+W¾u˖ -ڹϏ yPr,H;cZ=G+BA[ = ge̫=2Μw3e1 +lX]n/ +\ U^(C#i?*E--o:hd[`>T0h(dqFOcľ%-Mf;a*º@RH + ,C03Z]1aRl +Er~n(3Z +rd/x +elv!0crh6kosAZaZ Ts~nDbnxjDP5P3F)Q+Zp`I+VEkh4JtQC0i 48 Xe.W = Gdeqw㌣QGgؾ v`ɝǏޟ}3rqd47\:(rI?s99y3G{A_NrQrܳ*H;Ա$YI79Rrʰ9hqe cmH|<6Td +510pPl, !4b +L'n-x[P5wT *|)5|5kC=˨;/Y4~SKKw=ӟtq'uhc-Xv_+@ms%=};Y,8U?vHaõ6;4(ys1,ɥ +R827 Oewe0 D2ċxt]ukɦG6>\gžְWK=žȟmXFU,ԍĘ+ZFPte 9QS'-7yiFQЋsp(qCu'7A)j7̏#0/ve&u^DL׆ +l2P>4a^ +!qbw&Mb%s:';·?{Wcp4ÖZ>CW3'wL޿6ټ=~oBOх`(=\Aktֽ ,x[A`M-u"׫^G.Fui݁etN -1뿺Ba\d><% ta6ZYefc+MmbyҰwXz>y/lAX&Igڲ,Q~DCy_iV1= xK~4%P! wk Qc^s;l"d^]l `qґL骲B|- q <'ᾎWr>skϔe-hV}v5@ܛ:kVja:7Y$9djW; M_h9M(]bv^]J0/z7( :9s&*5&lÅ,7^.8ӉvXSdMW\DžCjo/ꬍefsnqi H7+YW~LC3~;ш֖ .x7 Ƽ "Iϖ[j5a6iJʥ$Oq$K5ߗKu[n%w4E +TTHNWkG Ҫ_qD/D^ N4-d6Ǩ&f@W ? &-oiŗB:50\J~5lDPjHm-gf"tc,E/ ;A;# "Զa0@*W^ U{q +,^K37^t}5Z3(g%v0ld!5NN(e9d.Krm4E/*k=E\#E(̮#>yK)M (M=Hq_0%i(.NX5,nq3Bg"]of|rk3MVMiSCnsnוdxC75~ xK肄7'/`YS["܉{DrդX;$' `3*_t[mi6#8-K@AKh[O<=Ⱑ657\wu濹%BhZ1Ɯ a)ȇMpFa 4lsAlY7NSj9\{vGf 3RTPlgĆ"+ucwCᜅi~K/A.RE!bK0va&(饬[&  +e^&?K +^TVҧly: 2NpϽdqѬ~jZ6|6\=Q4ZLD"člӢP wXT7b9v{ J?O@/?[IY~13.nZWTc3JSup^RUǒ6ĢXbn `peB-ڏB=TFB2)`8 + 7yݿy PARPVolDYW[Sg"31ԛTܚ*56sp61M%n lYYOTInԢ|ӘxQCNK)βDV5zԥ; @lם4+*H;,fqPM +-PWa;pa((rLd{!۔$ۛi`.AP,{sw (B[գ>jL6<]%]oU]Gf,XԦWfBUSǼ\spD6r73oUR3by9Oj?Zq>)5nkAo$gB?DT묙V5#n[TCs͂q<ِG@_҉z>iq/n;%u\<5l `1p86]ԊmU7Q:LWz׷N~U P~f+"pC r"lX]…NͣQvafAVlFc3k6]oj{ۉ*e Z خ#อ +Pv Վ*rDTWL^yVٝ@;2[(V9@X8iP &ܮF$= +Xjg)imihxjdE7i9q-A}cDx1~S^7NVLڲ댒:VY%߃gnFUҔߪ:aVV8 d"4}۬2PZ,D>%E*Ph#j^TO',|y,;<2_Z@3we#IFƞ%xpgeFa~ _?-[*eOR0ReWeQ))=jZ)G%UE&'ޓ7$~rHZP y cpQD)C!؍;xƔXDҝO'i~t~qEMaŻ~'hY$Pm-'T +endstream endobj 5621 0 obj<>stream +5$'(͐7' 7J\CG$䫳ջ Pw@7j]nIcx+2hD6ZPⅧM ad"!njg@5V/뺷[ SM.5mO<VRt2tyS?} IsZ;t¿?C|~A Pи%Ԝo\w6ǺR ;K.)"WRb푬p7`tݻwTtBĉV9ӓ*=) Ƣ8=3މ̝6zưP9`SӠVt?p0e] +Ӭ:~DhธC:;vձvkwzB8cCH鱪PVZЋczhN+T6׆V 7v |K'itio +ʑd=|f>4 o{kMW<5ަ*vOЪyL +Ȱ <0 cD$sלj=G4-VM 6.[k%5Uv2:zl怒A6aU'V!ޯ NQyT;cŃf +6C>fskW_fP}Ħ'vX 1uscmb &[kԑaWynE@Cf>{r >iӃ9ݭoȞ÷õb +JP;9#G|Bph0֝O"'~@Sp +@QLqAP7ÀqW[alփ+?--=Tx97Adnw$ +F5ZYBL}wp?-A15uѹkWM+Ϛ`"6)?)ӥ')# w%/Mg +Y5zs\)},h0@ +KbBF?Lqq̒tp%좸D2\ROb{7 5JbdRƘvV@8١|3iB* `AuAF5`{@bJM(xN wTgGlyKn-OYS"xҥ^ɚFT.yv()o སr +.0,% X DCfv؁ۜQmpY +(=#ql:'yTnߍ*Dě)e~]>l$6}Rԡ*hRO!|&"/2*ZxǺ|`@^1O,1,LƺbJML3D)Vx@'/ +endstream endobj 5622 0 obj<> endobj 5623 0 obj<> endobj 5624 0 obj<> endobj 5625 0 obj<> endobj 5626 0 obj<>stream +Z#]D_#Saw-tʂ׿mM;o+Ӵ)Ye/pQr佻+_kA럎jAchB]IOi!A@mx)jc&":ʰO[4Vile=p)r 9(0"'>u2;h;$%4L[} +My#N]%u;!2p)G[7V`Kwma`fx!UWc|Rً^C1橏+y)q AmqY@>0Cq^șh= ^W L"Mf`R%G\m3 ׇ*LLBOLQe* &rW% *"p{Kc5 +FDR >^-:}*&Nźn<(]R{tɤ\DU ݸbrEV=ݖx B M{+`>tw:VM{IƁ*:k5q`VRdH9>%ڹ#wfFiWTYYYUQeEt~^zٹZ#uKYs?B+mcsBX.@5JG?=֯anwO|yU_;QÒWA8yvQ UQZ`}smo5N2αɏ#~z>,|WuOL^!DD8gk#/p?VӘcE( +iӷ}qZ3D*EUux#ҷPsVsl'Ih4qr u6_S' V0Ȍ-omf1l,S9/ZrhhL/L5Vt\`!9Ɔtc%{7.&Y-оY7. +eGJHIMt٦Ʊf?*Ay➊w>jS'O$[B_&{eM{+ +J#KwW~yJxj-/> lw9vF,Cكc 0ĬuQ,zgFN_HZ{꜒4?mlK]汾˘~ ufl.8/A7A=$Z sB>:v&+ɞw.I]ģ}֚D)*1:ŅjPn{kʚ +J.h_?5ZHRyX@Pm-Vmk/2k,Lc'W&BictqAX+ۜ3n s^Il M]#yhH8#gf+; Rpٺ7Ǎ]΋.j``>j6߰Ծ\`~ +Ԯ(DȮPb.KX#* KF]udm4#9+\!He5g"=`N*Kw\*i䠙&I˼gV;MUV5wu54+:":j jՎ!MuR̦FrrVPXN5=- +ϛNèHCzHT=I9HNl) q|h(a&Ge:㸍~92&*X09[`L">o-6K&[xMw)OY{(r|1qY=3xϓ^uCEB>ðn=+ExMGChj \2*^N4Il%Eq-9. P/PRzq!316&cl,sn[ŔPIWqk= fhoćw 5 yn Hb>YS +`v~,{:ᒝO} {|SҨEuA:%ƪ?EϚ^3SXS Kl|ZX\uDWtO@+v\#%y GO,p9falhת[:D9Z]L5׹ԷTҭNO탪sfNA4Z⺃A]2H|.LFi#™aA|S eM1d B͓ᡜɽSMIg>4Yn:ޒthmKf§:Ǐ [U8Np;AڅcP]@zeSӒ 6ڕqyI^\cVC57*R;2KԪūّտCҜ$yN2TA'1&ÉJ&U}7qjYԌᡙN;# *hpB2g}kBqVi^y/Jpc 2UƵtO(9$Z,f>J௎LVu4clbx:d7Yz(=ff"{zb5BnR55.T(#DVI(j+h mrS"{H׉"CF=vѡSWSϹͿ z>:\qu/0LEJ!vq>y]6p"J@NyVfݭ\# Zc ͩU>ٌ>pG+&%ó* +kzĹ qi2-g t\c!c e!Ow1~^컝!4֔+0|ox7A̭e$P9(݉j?)f9Squl߮>>T6YuшbM쾓0Cj [˨tʶPe:._T`sq#V2 AevQz96CeʖTQS0Ty-손}0DCsĥ[ +z-Ai}{>/ c!0Fkm^Ss'^.U!^Qg[]2]{wg|^rKp\jm %XMtˢ*:遜#Kkcm?0qYp{58?CY2Vue|\Kӣ*@L Exaŏ PeV¥ +pc!C0YfR򯁅ꪶK憗q1JЅ)70D!J!W_>Z5)&DJg{1f@F(p_*fo$W@ܳP>[q lIҲ+KVj$qqdUl`Ȇi=b5 +` 1+Piz ]bsZJϞH(,)_)1Zi*&WafvjH۩QB{ +؅sR8utaR+ivw]c> CZM` 8 +S( fQو8AhHnMUChD2$] _pyl|;7ͼ$TqHeZ׻A_5S'&qh=Mջ쪅DH|%ஒQMWM*iK8"V!GGq5`Bf;lx) +R84thy(v +a '-ܐP[5JMR*L畾\ D'ԢeߑE+9uoRP *-87\3GffaؠYlvc(&Q6C.kǪMR|a\TK?1)څӍ%{Mkg +{¿y$I {+ў^ 44 +UW10Kޯ$u4E5#{>Pk|sVu]5yFtYc{f.rgd3Ȏz 4˻IIF 0 [,锖f^ȯi-ҧ 8lC*ʻxRJVɇ +FJ*#+֑TXU({H9O3 :ZǗ2󲞃c?1)h +(JzkeGnЈ^ĉQ}Xc2^]]ssma`Tǎ63s0&'Ϲғpș Cb!)oK MWqTl %΍sA,\rH/u5"kNW-$?bm"Q=&HhUՍڬ\eJ6 N1.Z?(XyˍѨk}]pD$2jEu~ȴH' + b (-$Pft@!jC$#UQ"ToچD:tk1ktA6b s8CGgWY3a M _:~1FKCwj0ZANWʹ +Xj6bM7j_)`8+*Kv0˜p{ Hv_ :f&7,Zj6%6}wAg09[!d08#(1FaFǜo?#Lm FY+gqԜ8GЋ]bh(| u%?Bډ QpeXxC5:bi rb=w8JU*gp kLa|gMUC'ct/BcF[6DlO. +Fa(^LL{Br.G.kd3O1:B_сe½ʗbXɌ +d%=[qΐc`-Ď7V.$,}xs'1ng*ZHO̪_*],,-q Kgob_FBE-#!]~`?- ~zF+e%wO4Y5ܕ^xQ~djQAZ-+zwG@-| \4K#z\0{#"\X\oXH?,ˌ0>V >(Q.lij̚RˑʻDq_=^g&J6`H,ulV4K߸4" 𴌅2pgf3it<;e{dv"B$|VY* WZEH+vNi4%>_{ح .CR_(CTSJwdR:Bʹ{l+~`2?E.qָXxZ 0Xm-G@HCup./ks*Ԩ{.5 ^*v0]wr1sڙ"\P)ĀdtWq8JIj1? kZG!˟ _:ۉ#Ac5)&-$W. +oy~YOo| $ez&T 3; +ɧ5Ȭu(3h# G|?hx?}/m쵵 i@vqʲ)!P:*"(Rt *iږOm"&[Lrmg0qNdQYWrE^E["L1Iʾ\N_/zA"Z@-* 5aNz +r֩ړ( QEW9|۠xmQ,TvAж.z+)pSROcJLמVJ8&& ay)u^r -J$KHgx{@$^;C:_z̑u%. :(m@1qn\ 7y`Fd.5ŵWl8蕻Z4#XB!^ эϸpFoCNn"ZM4ة Jq 2'E/﯋eutbD91xxd'P(^FAxn?Q^%_ u0CeHKU'&pv.UArUBA%hʤSDIVa mwGM r ~$2hm"q 7#arKJ#ǎ=@4P F<-(CV$ +AR9^pœDjlq赚Tt@M`㮓~b!u8T뉼4SɂPM lmd2FHUg"A ф0u,xCQca{E(\҉LGqJVI-ȿ +k8 9li{m@X6i`J ݨ!?I}N_s/JG^\W4Oȍ9BX!ɋT +UfWSTg:gpYwF^Am<( +B/NZۚ>3k' g:̩z5cG,c ]r(n5(4v,*Ed*/r1y`z#=?{O@F%l5[q=J6c.\e~ ֬Z!jo.DTK`;.Ի4 S-a璹ZtjA JP9c2}5+3h xqg)UTudD+a7lV+A׍֝ G:UL%X_ع74nS2*0ZY1@ + %>8>"?}_|w3 l~4Lˤu&w{B#2ã;^ŭt>teuS3i[X֋q dLced{ReHTo ,n^år;&sR@L=DBY;x.hd{71z<۩^N?r8o-KdETylV񵄰A$/5OPyRj4tDp?&ZT<: +D3,[Uwfa[jw`9cSS Hp^a?eFw-oI68Bo^9V/<ŅkWeRuw0HY,&5eutІ#gV!Dq:F`ww +9bwfLJoEPꖖ-|LG7cwŧ=ҍDGUzԘAs;ũ%6Ulgٌ +{]q77C$Ji\oͲC>@47p;RqET~p*CvAVFb򝖤4( +58ͮ뤕yrݓnyzVQu9?I_7e$tu{C2iW!]4HϽㄎ*TGpcU3yīw^|C}At?SMtV[5j=Ah gfξҔ`\ɜ/4 jJBqKHf{NK- T 5-w޳ci| dE5o&'-jSD/d&DLbښo{շsF +*i: MiAT!Hp0FWӨ@رo^$'pIΞnUeXuyTnX!lWٌ_V>Jx&rtEQy=R$XevRe&Mִi?Szqu6*jĈVUv}} +Epࢆa oz'FTp_aJ< eLVhSk' ƺ=ʆ +RJ%WUIa$Ex)D,{6n?  F3i(1v%?m 3t} H蕒ǟIrNmOVRT;Fv)vX1#yƋ J6ǐaɍ|B-CBQP>V̫YỈ ^u.Α ~14N!Y-wL4eBzxT6<Yx*V>m}{r_8nmfn񦜲^D$֢QYa;#p|Ѫ_b姲.w`yP/u]N5Ƌ6Ma_ےھ)eskYu0Y.7}Y-1$n}X́l8EKa:.Kl!Q-n\WJu󇺏)m=31nTr5+5%h#s& 'Bghd@ <H\ b^?@wx8t9Uy +Yz [j&> 2rk!dIӶ2b?2ˮ7CU~gv>8Ñ=xl?cb!*"zN$}A]٪ـ6`O?xArC.I*IφDg%/zoAJR# Fv@.#L^_Sz-w)+#YH7e=^^K,ǐzCy'?Y<2SoD5?Jv=DY!5!eծ +D\.&d>fXR (l_ICe'G5LXrYI7Z *u ؞iɱh,_f-v0tUKֹY%3_BE>qu i/`HƟ~g!Vzѐ&2Gy836$DD{-UV5",hjhNC}X3_󄺒<>r8%$;Ga59?]MF;~HQK-|g^۔u'\wbs>HVk6y?갻Gʲ*hZO6&>QtTq@HF>[ Tɶ#6gSl]~@D!ӲW'GvAB~;RHZKNUtexفi;z%~q>iS#*:?F E4,/NL206ۇӛ]ۅ<DП~[JG}98ҜP側Ly/YTC8}]99W#v3Um176#sGYl\ +DR32TOW$'t˄$gu4 ІvLI0Wq^KVyiʹRU3'(|OTP^)R2RC.~ា՗#؈q`@DKdl +!#ȤJ1Eq f|yМDf%|cIY-!o]yP=<줜xvG@ \_6^GvXE?6^ gy(-H>stream +rw|  fZ:l׫k2\147^qwr_^vڎ`a6SK  9k?3W5HͨPað / +{j(PMso&#NpCs? +M=Ao'4dtEdc~ҀqR +Äȏ![6#㭲ߩ}Nt,d3M.+x(T)=}rva~ U#_4SgpGh("仫tjJd2ǃath ib:L`nxWr8XMRȁoyw+]fTm 7YGFujK9ܿys!Rqr:᧵HVQd؋q)''9!CC|rή:<"rbJpXL g2|bD䰛鏧mm@Ms3z7FqS +YB w8,=T#ۈ5M$' +\Y^M!\gYh଀c/%r)"m|P3 4a/˚ 0is7v3vLa5w=? a4! եZ)Wþy݇[:° +ԝouDVٮ{#լʮc}B8uFeb4o020\O -UޣmO-ဵq`ڊp%kt)5ܻq=1~JNpnrH`ܧC۬ߗ`O`ALj#@s fK Is^ޥc 7C튾ZeIGBBX_%ߧ> + rQ?gZ,/v~iߩMŸҪI_Ȟe"&VnC5u5#c]I9s:?q0`4 \hgxgĩnlq O{ =S&F'q5j4$W*xa4TxHPle¤PCw&_/?C wbًF߽T3R[0Cs 5 >$N&/ :[Svb=îDUK5*b`̗&Jg9hQJ=wN;xcrnfm>L 9+AۛKtBN`?~TH1~2KTY{oUCYbY!h$xO^>'Nd3{Ω1ۥ@0 T{0f֨Sщޖv]NRDm)X _UzwX&eZԷO6`L;jCd%}2Ɔh!Ӓ$IOCCBEwrf`-Ӆ~u/sZ,ʧ^$$8; M?v*.͹}[Z>Y8eٲtT.V݃P%VM;x&;|L*l3f01bvu8X?xVu4/(|<*h5">ΰ=nVNN8X0ǶDK-. 1v]ִԯί# +8TyfX{kLN4J59W1<ͫۺmч'4* 8p̯#pJk曈UyWPG ._1?L34j0kuOP9Ƅ1!r +*ybpn9Rps%W\1aУH>*\[^eJ#م `G=GZ%i-X}v_ +.j +X9>'7eaiEPm&$eiӶ16 ̳F1iYK^=M,IqHEn$MG\KPEH:L\YB8z~JlQ{-: +'ŤV^&MAd1P39;2JM7)"轚p~%ξm25ٱEefCZZnCy_y|V{<PҼ,q lOM{qdm6AOVfq@mfq./zfW`בsknzϟN="@ 9SN^mVЁ׈Acm&|(;yG$A(lZ|]Rf%~ǫX8e̘Nko{Aeҗ f:O6Rsԟ#~?/}s<M9uem"ː4 Ν0z5~ߴ{c3hN"%i +sIEyM7 ,|v[N(NΩwT"m +8䒢H)]ga*o;2_{{/$ |%iQsR{+QF!bՖSy-ېwTXENIz1|OJU9OF^YQc1ξSly@c"D|uj+pvkd-A OnO U#΄+̸\oxz:.ŒF#)|ӭ^2!p"/6 jpx3=^ljT%bCE)G-GgGk8}ǒRS+ߖ"B#sP)H"3k5^k 4ÑBʗfp8u ЕҔfef]ZR˶mHxjH,cjZVu`e=UMzog |hDŽ1^2\ O 3UpgPq\*;2+etŶ͹L{ˏdx +N@: ءP8/cIHʦp3;A}FO +O^')4IJDꭥo-+lJ ­K~-f >Kn$ۃǩԩTO⊲ma:g|]تbiɁcO\EspRJ-3Gm ',_oM)Eo rH36KTB_1z>E(sk a%roh/CF/πI 7_,P`s=am-D<ӐVD|T[w -hKQ|9gD P-k;PB}&p ]3%mQ(/p/1x~W0ݘŰ@aR[? ml]` 7{G-UGң9`^p;I0D8Ј.-Hپ%Nj$)2h_v5I)\ң_l?` o\fTVȸJiġU !Jf()͗s_$W6-ڒᆙ_$m.nI˪vj  .AA+tA (u2qGT +zK_eM\ C]Bv"X:,KmdU!d3F~ꎸ!ɺc %hoExhA>Lvf՞3-ߜ8pQ\C7YR&׾mBϊvm3A#ap֡+[uk9|}h`aEsH ˈ q. v O M^WC|.h]6I6\̗r=B Ei۪稦:~JMߐc j_vpB4 تu\<&򌟿GP*H#TtHY*oD%{砣(;ދ ]fVt/=xӮ7QĥH&Fbn|iN_af#? hUZWH <E_ %:oadH̜}^'=k}ep[24J0tl4$L5?c*㍿ILn62UE0 Eb%CC{I$:S,%Z;$xLoXIFQf RCJ?ǡ^l(cY_d>!y~\DZ01q*< +verXo s&3 'CϮVvQ!?ٙv}6\Kuԝ:&Yakx"Ηݫ UX#1)mV( 2X?Rd4 bF+B9Fw>$/ޭl;(Dtf/'(FD*Ir~`|̅-Q:c?ޓy R̤:N +y3Z-Qv +;.2Cux{1q΍j;?Y8,$ˏ_ +&;et߿H6j.[C@|B\*~rX343ґnZ*UȓkR kvY!u!=SAI,r$gٛk)P#'BY,'`z/ `o rIGME5K 1 Dpv{t#@UXV4TGҴܑ)%ͦ17h̲,qHjyQc7|JpR3wu #ҵ5+|6XboگE;0i0~N53&e3=Л!Ceq$R >E?h+OCBIQ\(*A'Z &JBjt~9XJ:`${ChQaI{ ,:QKAB픋VnNuJNvX/*9 LUK:w n`N5ڇ'K!3ˤIޤZfϾ@w`w bP6C뽈lUgq$k~~s'D?"TPbSPKZַe)18tvx\n<[^@N;*-K,8H~}bƶcԜyJ{5SWCH} 411&9@Lob-K]_,ӂniL2*׷7`X{֍7(vkz94-VdBNۣvg/N"l^ߌ)>He{ț9Sĵ/{>UDGŠ?l&G<3{]MaUtN&ZF_r%VU6E ~?ou,uPKE8nyBk_~(/~\Dh":MFM(NdziEQ\Xざ۽ pK+_*ڡ |TRaPbL>IKSҚh(JImia?F>|!Niͦל^_N\ݚ/;VoB_K;Х15C& ׀nFNwjT,')2P}-ILaE*se͝v/0d)#'pYZ@^L[32lWdL5O" d,ɔl'x[P!*,O8qHx#i1IDZt.j6H~%o(A/Ͳ66LW .<<4ksU>sDo٣D>I,! oĮQpmlyQťw\nnjZqI|5U6=yl Dˮߥ3t[뒥Qυ%KQrD ,%wnb%y9K*3ˡx߈Va gXD/)O~)۩/`m9?[30!*M9=zѨOS(Q0ރZUk -SD<Ϭsq XkhpDR@^Z}<+R@*6s1nd(oۛNeAO( +q[6 +*yL1gHKrI#7$w~F@qac<\񎹻 \'Exe$֗+-&1xv4RzTn*\Xcl}1+)\?r "mlH! @&cFRB"s@yix5 4@(g9WoB1]mA\ XޡFmt5}Gt [oYlPߑ_]  +g@qb7@-yhmVnЮK.P +!H O2j3B99)}(8\؈&\c^È}5sV>75IJ+(g&9V3f60X|F% +m% \T΁Ml%\/J:D\9Eك`7zKs||$v+ZV>IP 1V69n؈PZ|{GWtjiHsCHQ"C.,y,^sP4,IJ6 ZgG5X' EqR%([G!3vDT6k9l1V4i&iV8W~()¦:!,2™JJj1/' "L;Q%Mhŀȅko +'q.ZvhGͪ\p|{<=|S[eBOEOL̤3L.\5S sBtY 6tZQ`^Mtb7wID Al@*hUQj !XV$iAj[^ܿ2QA1UHt. [Ju^Ȑ311oaS;V>%B@'9d~tCLUǑd}M` '<035rЃ}\ވ[b#c} {.Ttl|dqoDg_DHkSWj')^ӣ,C}Ԓ.{N=k9ںhcxFEp'HBVr0I.fӰ86gߵYv ę\y.&<&vnHh:A$]J4tkJ)mfԼ߷σG^8 rag!w% [)\8T"quIFD . 4bDZ"8/n ӱ)ogeCe"Ɍ0RB@rHH:D"59X"]PҖmV+8VcHT{Ymh hf>..c@mXV&m{|x۳x(I14 el+jp;? P`5z[k+*B}%QCҢˣDDG=kb9~LDb**;DM\tAW #7qFE G+*Nx]㻝9n6oF#M|Y )g7)lí$%c5JZΙ,}&o;c[ΙV;NR7{l܍_8׺FrrVFcYK:GM#k .(KSƻUF1n ,aT^m RҲȇ(Ґ2=&eJAczBx0]\#c'}֬SU:tHdei߿ S;8&9€ER-SvzO=^ZpOvgiДG;{є[:d7u]7\D=9hvgFPEGd]XY 2!+r÷51$&HKQ{D|M}Z4V]4Q^9k,޾JlLLIfIL=Lv*i.+{ׅtl:H;O3YGW \1+xZRM1;|(꧜ə%0 0Rq=g,q9W%-[Ҥc }p]vi]]UV{_Yv{:1D}DugLu5^b*G~/w gTFxvT@8 `}z͂ 35?6 3x Gn? v'-cEFZj`lb^J3zunghZLt"\%x['TP8_u}hfu>'}敊;A-YW)bԓ5cr׏饛`9)Q }}wKoxj=Y^av dsdG}GwJ+n,GJNelx4T^]+Wp9A@l(j9H^m)!~ձFu#ڴ7e`R(lZ{8mj-h|UX:+"HؾD%z9_9z(6S%:UG(خ\aa<&K$4c ?`,tlg*__Ǝ$jS'!Vp[}*]6i7vV7B擱$ꙁ40ъ?AF W%%>^=d +ۍǀ 1B~r'FQ#~%Tm!\ed)>oSaΛ!S[7$,(35Eʒ*no )&3X P=~Fv\S'AܽH#)"fqI܇U1m;*i'u66:1Bx:40O  !Q> G\u>i3Ax{F91 ù@pe?:G(\JdP +f HLC,H=@l}twr=jILd] oЙQk= \6{$ ZZw,g)g t"AVWp&*6TjAuMx1ΐdIhMP`!dzu!\`ޠ'0 hqǞ'!s5+_0/i +50+FE{ڿ21RA@0:#oKDkp5{\\f +Eyt@:F>VtVv_$R68*> vxY[ ]U9=Uƹa(s\sxϱQmpqmZ4Eb66J7&w؜M@v#GK%KJmTLQ&84$CC U;[Yx;;j +偔!D'T\q;U4r +C%[A+xjl B4Ғ읎PL3 H T64F4"Y/yq tv?+$d&#~*(! <޽!Z@;(WU +)[[eᐺFABQKi%HBR +>O cipj-~` #X/u[ `fEά)-e` 2hVq=/hl_}p(9[K'=11g/Wd7ġ~Cr4݉b-љ1DsR*sQxӌG5g2Zb6b@ssr;nE!Ư#\`]ŧ(Mڧz1r9MFxN 4l//]lL>oˉ_7q^ N1mfas!"_3xu]0;Yi5ÚxOZttOihz'K/x;Mм>İNړJir1e!TXq U"82mjeTWXDZ7ff:c5p14̟ao.s[Arjϱ檛H֕gypq4-j~m1N- z<)O~let69bПn:U?m`_ƅ[@σE)/ʃ-;<S=@bZ٦~lrn\iGnFW"jeYh=$Q< b~T2d1M95N]o;,a7w*,Rs1!law)F5A%{1 6o~<z?R%2B3HPn}=㠱J;w5 kqOs%h65y2 /R>?G} צs@QHSz.QMQ\hJŮlȈb]H?Ղ~ p;CJzVwC.#X#L޵=]odBoLզOehY,>H[\U +p("QUa^!U\ ;X{^Rݠf*(; W(4l rRff%14p.3&F9 ռr Ί@f}mEQ֕+bHݏ0.LȤhS@m2s@Ay6lS&Rʌ"|IdVfHl^8(yVKQ TYE]og޲L+ !nV͌LF\tM}W]#2YxKYRlSȬm_Dr +mM̐lQM\c"~!nzBvj3PC8_|tzd *VAP()8#7sd7;]G)NcT S|eG\Z X}M_ClhV)Fm,r6*[f"\:N%Fg~TH}3M/lU <b %D?Pnk/.z[4E}Ev=ϗ([;&&!Р5`f}0Qd8L>Q9*Ρ\ +}8ޗtsRs9:XcO`&elUoc,U_Մ(Qua F=PU{=:!-A=h4}%j|ӗ.w%r5_C7^]Ua"iɥS؉ySI%նE:^P tN]+fsn8qZLMO R@wL+gqxxT0Hױ!f2KܮT.'R!k)T-9\~Y/Lg6j.K{ܽC9Xz@hJufE#I\(Ի6B7τH!7b9B/Kvq9(N.!aDfA,Na_9)Ϯe>Yc0Bـ+CNnxz 9NKe^B#xMNYĨG6q-(,.5k+ejܭە4>8[WF!Dri9Qؤ>$ -[OtL3sߋldWܵ԰H;}%_{6F^,ʑ~q`XYtt}11DR4MKe-Gݷ1d.ƒl;B;>S-q#eNݟHA#X.jЋ.J9UK:ePN&?ӑ+N\KɄb )9ſ8ΜZG.l:vm}I}v#}!^g~vb$>[r;d!{, }_U'_%֡pc\-z [PyGLwctO+/vAQ ]TO +/G9`vb;'51tu%NqhL i __jf^E0do68Oa׈DpE\i*Byx6 (߼!YLk.[b܅|TkXӽ~pUĦ76%uG j(kv'iGHv.b.Z/8ݪ'zp|1(.~5μuvRT\Cӈ9z> PjνUڽW}>ұP1ed&aǔJ\`6yJt j9x ?]u:o%K_BE+x}ĕ?= ioh +tZmR{~Re79zE߸E.mZtKzQ|dԵx;<nοb0Jϸu.o&CPBiy2Z96$<=qf8Lv~GBW%6™]IXl.u%8} > ȏ'ӮO AgD"REn% +:b8V:4~ ++m➁ . pq~!K~$#Q,iTeQWS k{N UBZiAn֌ǔ~ܱv%D.L/Dֽ6Ϻ֛>gԼB[4~lvz,>K +;z?w~# x$备 +/O?~K ,H-gO +^iٻ0lfxB{9Vy$׫W;:Wƪj`>XK]`-㋸rlp@0!k!#neWQo$◵51vN5?ÂkUm| [i.47(NyVBx@f75۝O7:wqCInxFž + 5502>:͒'WP>wzl2q4fVJ"/N]H1mWD|׭kpAİٟ.PͶpm_e԰6e+Px2a%WN4?)H<.v`T17eR^>vQ2yڞYftN|g]C,_t0@>&rV_5&Dnܷm;4ga{DEEfj95"^ Iu֢CTZtFճ?88=3e,h\i+zk;K{B :hpd;mxP1(WV獰o.M}(/)#.Nm zSyѐ +1v56TP" IUDXiL + •w$ɴl|0k[~Ya~FNтp} :|UaNjk m->ir &; Z9YaOwhDyT,{{9e/\oPS3`O/], vM6&4l2y_qvqG|0 A:-8;1su5mSit `oқ=еQ5(R,B f`Nݰ40qF:TwNdI WsI^Ҿ㺍zW6*Mu`YmRhX/cGWI{˙99liiB3AԧT[PFL]ѕ^odqx8z۟2ĄiU7TV8g0j )]cA}SͲ4j:%[Io lNy (лJ!,BL7&-}@ < +tPXte\Dv[-[45% z}Zt3M,_I!KYL WO M܏tTTLJ&/;lSQWj"ywkH>2>mxtrε^P48In =~jl Fp ^NƚzDY4*naGbW%e:[Z>Ķz%hC2#f ǿ)Qs-cX#ymG u(`"F%tyX]^qz!;Y_I1VwP#O)US4c@kvXd`v*Oe&CoPTq?* +띤`oC IHPv2tt؉rH1JE>Vq`?t.N']AεCFq/5}M·3.(/6 !#|:Oyu8R")$eS6}7ub-3Ҩ +[ݤguF7ݕ9]Yg5Vıs{A,:lQKx1Jd#Itl O埕czS#u `Y-@v \\IkܦS'; mť6׹W=sdE"7A2`6N_Zbft #VLyb">͔DIQv$€9 "^a YndjqϦQ%:m/SX]{ʙ<9)s% ϭ6V;+*_pWO4?=(\Qp ,MfO +nzJs5 &#kf\`]3`lqJI?\{8̧%%wf'X"$HwO ~M=+]>hA?<˴nW[Pw-ZLso3&oSƦĿTEvoܯ?z XwkH~fgZ!nr݀G7B9-*JٱyƲ -;x"}CXR(<Ƿ;T9JةtUk\\? УxBDVhU)* ."<Z+d_|r6eწVXiNf'YaA: V)3H"\zh](!'첕hʜ:0j*05ʜ {F:֜r q4eVX/));=)W}ZV͉+cxDI3mGT]Z2zR"Xd1zp|rhTvS\ 8k)z?7cf+m1'ēeCN;Vdґnr*+)`g2fR0tC+vtu:=r]R*%ft7^>8a(" +XUJXEӜ.bL;q^"0sGriU8\CY+U {3Wd"jrJ{g(pt@#imJF {(>9 WoG\'Ȭ +*,狪O*>=MېHW/G$_Am> DFrv{Oor2 *Rd +k2ߚx0ܵ"Fq}Cs@:\`+Uy%X-Y|9 OzEHzrgѺ*JuέS/@=~l29tp!?ʫuc +&k Ƹ/ ^T#:s7w;T@%ta]6>琹c79Ȉ 񻭺a|6Hg[l>a#ub|>Vή8yAfLUf HVcĐ ĺ\-Nr)h P5+' +ͣ;a.mٝ-'ES%$m g:RP]y}\F߮oQSgL~_xp3ׁa4}KN:g:xCɰw|lm +ƒ3>iמέ dѭG|PAP?) )>NįĮ+Du}62ﱗ @1;mòXkL$H tΤu;i1ϣ"NOhGS XcZiTJ'3s)H8 Z=o"r)swh>R4)'lbl=9u~cjknk(M׋ǣ.sIiN?no;})KN{?wfSȧ#gJ V/7Υuno1BdOрXt%jE\j@O*tǯ`%rܹMmNH"`ZePm!ZE7(r:*@Sުa&VP*uN`EXfP'R\V<վE'9vӝ[(nwWn(&2Vt`~aUY;b?2&G M\hyMR[v9@HS 7d̳atٕ6Dn2nܸc +S񄄛zUpf +w=MQf;-$\#((v tXr~"4> +ۛ{fشֺC]{߹Kk(`O'x3X9+=ﭱQCU,b|0V+ { EܩCKWIĉ]$?7NOogz`Aݘ'?MZd,@YJw}%> m*ѥ*}K"N_y(=b\G?`,X:"3D~HӭUcիu;?sLd,|)IVHלo"=eqC-bjm|܂FuRdRoLMm_Nm_p*2}Oi}@ b ˀq`>/6@f7䓔Uac*%cݥEaWYk`l]n +n3ǍYK趓cȁB9ޱ7Eeߙe)gg<ΑI /)a׮E&*a665FGo%zc€h ]bސ7cLYJya- +U9ZοqR͐3CY ?tt@&ut]s[6 _+UDE/rメJa]"ejAKEha0T rStp!?$kQǭ,:0u& rjV-F෪ERtɈOr<Ѷ>C?a,n 0g' է†䟖d+"@4Ln~Nly}kYV 5$\1\te‚=f%.m<5Nڞ_6d5{rIe7:%2Gʄ:ڋ7H1P|.O<,1Z?:w6RØIZ0P ۣqķ˃ U~vVn6>9tqI j +Ovm~3 +)!WPf;-҆OQe=U*W6KH[!DKh'>rq~ZYe(JLAKs[eRd4QejOlĆ6:6P)0*aC|^S l[`mEi 61hi`dnJu/ {pQqi@`;1USK봬)yE}oɳcclv֩ۺ.2?2ʲV"vU8,͗c=%= bq}8*3e~8.*(h CMϯ[E^*U;5or-0XcRf7)撊]vCS|N)gEN37#p*uTc$Kǎ0]kE];~ nA 1$d?Z3|b-JnJ-thŰ7TC}>zeY]t[BwY;䣟qrJR]~]sabLj >lbrgMGXؠ(_A wPY\" Kޣ njOO. Da(ϑjһP`B.,;Y[#T4wwʜbS'*ˌ=ςUnd!eyMݨ*-d6rqϝkf匙.~7:#aBu|g-c0OCKg<*5K%0}xW >ޝ/P2#gt sLtWhXDB^%;+Q_VG8!SJ@KV<~A:3̅i-1N(AZG Vi +"?L +Yp|I ۽\!sVTfw\ܮ0JQ4hR*-Z59לd@40wVHe}iv,\й1懠Օ#c/g96ȢJg-("m"(r﫤 +r¬^k? zv1ٰ`߸Nj$ :԰~gXr2kYh>gI-'/#.PD1^^v˩J`BeFHjd7,D.:,"'y 9Z0E&1=\Z=0:2؆,@ +g-9exaԕt{R_^o" 穌%s)l_[vE3Ř%D8cb]%t٪I(0D} &rUޮϥ EnXGz=@u2fX_Ol!c\ܟzIwF r)Ã=a^i J}"7&kP#d) _XT߈{נ/tU0 H?0w,6ؓ`y-242  +}$pS;j(R\v?"4cdpX6A 4%D)bnPwO>C4Pj 2,hiѭ$ˤ@VxTЕI.| |!" h_C~-c|+`]1AJ%ݶaPT-/䑫5:#O[+2YzwS`EW EVw}ʜ09l9dc)2#nui6 Q}j2U-'xd͹,rr0V%}ؙ')$ RW3Mu)`4"@}٢dMB d^QTNm iΉgO ~؇f>? Ykѧp(7lkD'7ȥ`6Ey5&ASy+@s=xá6!J⎹I!E+~,y\d$A1$`SqoCz;Pͨ@Щb[8$ES{gmpO?fv'QMӚ*Iiv𝍤&Xs }44VILpI_u%6.99 mB`dW{GO.w)-GZ|c=|Ǣ8 :{y}*ssXaw 0ǖ):07hATRtO$I 55͞!KqFމVbD ,[{g/Ma@. ^7!"˲Sg +cQ0zܩ nGdS%}-U FP6Yzj{3 p'@L]s\vwmM59V-9u{E3FA@k 2nVC;44 +#Ik[>ҞR:7j|xb3T]nw:n%{esjZ.L)K`k1;$8}A)] JRDBIIe'`DQ JiB#]UO_ yB{3f``W3$q5g[!s#fSJi@up~EO/DܼjQ }㊫r5j?mcVܲb{i(^:x[o?Co :)'&0 +o`nzzyX'п*;`[N#M?r7Ak =P2~T\v󟪺r6FzIhRUHx3C"¥=7>YUv5f}c-<[=)M:C2#X->?4nA(]X7)g(EԝăPXn̚SUI~ +/R0?O9m6x8Clqś_6 E䠝g5_Y^$hhgpx;kMmXllдsv$sB`"M;j_&&q{>@v9(z&Lٸ0Ě{R9hI5t[~') ;ŁOgX7+f׺𸱶Tx~mbZt=ZiD)YTaLKnvރL :^*̺dTUl{a1i5#M=ij4vKoW VrNRjMwe*^#wj[ BˬAV?hOH +`gPDŽ*IWa x%ot0vb˯杲X97 +^4}*yF9Vtmmw8i2 Y5+ +=b ]ݳɵj{7ih<8gf='ĤD ൕ,dYn˝VӦ9j\fl,u ncHJ+\x'`egrí8x#f6,8]f;Z_ ++ՀϨ1VH 5 ++C^ L)nmU8Urf;u}Ҷy5Șݷ~|qb$DǼdmOu +~&Z O G-H>K*eF:$:5v!6Hs$F*?Nk$>AmpS[<z䮨6C fSq0D,DhW<2\-w yDr1!`:0p`B׳ vf8FW0dAD #i42@e*kaG!p+ +&wU|Vw#Z^6&dSl^>2i3AޢZ0c3}S|(x9D14:ErwRbΕ Щ_ [.*rMۯ޺2,F6uL48s`QE5~@S\ʍs0qN@a._(R 7D;ߓ&W.R)?Ngy)U6 X Z??%5v= a_' ƃԖ `MMΠL3iRSXAF}T^3j0G렰G1яqLXzӲ|wp޽oe1 't>ebʏc̵>@tw/1}HqvH>$6ٯ1PC &kU[vɏPuZo0WGvJe }e ՚ZSoCPݒ{m߫'`šOwPR#zXasME6uSxLs&f,$QoР:CITam^5]z;"֨΍|\f#z:kx9:b5^gLSHQR?Sޱcn8t=t$x@Ɖz^vGjnLf[p$߹ep/^>_i bK:GIMC яPG^tl .ɋu{|^ 'W*0S Dhи$ 9Do߷]YLVf(VhCUN8=56`8q#E)Lٌ54_M5.`)ȼҍk1pq5Yf)N^Pz|q^LO&s*z\!bMG >J+_@هbJ$~oMYSO~Z;4,yͭh.0vfcT4`piS2:6czZ%AKl{H# - wC,I;Jw:KY0޾"OAMb.$,s;V<5oc(g8vR. } +endstream endobj 5628 0 obj<> endobj 5629 0 obj<> endobj 5630 0 obj<> endobj 5631 0 obj<>stream +ςAPBٶY;,:$I QȩhYjF*/韓J6k&?}[qwI:WtQKW Do.6[:mzqlCVq9m0 =[ޤR*ˤ~@+t\K5=wI!%h3sc))l$ofedv xz%nQVwru$k8:'M b ^dٙ8k5ypF&vD!e`5>lȖd!8 h)%aj?cՍ4-=a],-p.A_B&6[s:ZF[fQR* ,[4i~ +7[L'osVm \pF\qE@0rld9d-XS \+`S@:0Tϣ`; ̗~+!ֺ%qpv F_aeӃ fujV9 î]xZOZf7HU)X>\Vka0&-kQw,u|3?n?pL5 >TZE0DQ4GFf&"(58%=4yQN J82 + ٦HzR3BY΃,P'i*겗~(0-L^ѝJRΓ>45*ph_Ŝz/Kwfp2IV9Eq4Q$0so_󉝶xA +kYׁ@4QGB9~3' 7W$-eYEp \snAJ,l>| #s w| 4HA9 >2@t|jf&:nn/NןgN8<%O3VcS~s.'ߺE!+Rһg'} E!.)rHzPs~QgV9"˵'EWOsStgPGD )h4ujYDCH8m݋gQtsЏn@*g^˫JH ؈t]0PbbSk +>>p@OiY}ӗWQ")# +7/ǧ(UP>?!-V~¾PCK xyϭW`=Dϋ&runZ|4)Xfm.{\j#_NI$Iڗ'n!7Ip~x +*)M:ECJ ',֠FPNٷlG(ECKv/u: AWדv\eVæZZ06c;:ZGx+aD%ՂaV ;ۤy>PU3r_o*U;;ܽ'w_/ +õzX9dM}KGi.EouTxCTE&bˡ(jA aEe]lgO0%}:S3nђ'ƵRDOoο) > DB5ɂinRu+jJfXGz$zf^=ohL`}pFf1^d+?USD5 +?JaNoκ{/YNR+4 ̭Ϭ>8Ee-feTW#ԇy>ǽ +|eAl۱Z7ޚ\}( +!"|'"mK6>a۽|aIU=_ _}/Ѓ\"+2jkͶq*D"* KN{F)-$k |gurep%6I u.w"2%kxFTP?hY)?۰L; y뜖Xpwa u e +_>hwd V!i7ǑB 8"*i8l{^S4ٚjn>hkSD*Z/뜎vɁ +yH_rK vuDN:okYGR[֛w =xdƞb]4^rۀްSGj/`u3U;4ɬ ]Lj#SzY +GeH#QZPA*SSD?Zv2!Q!VɿΌXwe\[:6)yoU$$Cњ;RH+Fł@X#u);hJꗆA xݟwl2fy -gGs,7~q g5騊MޓzАGghj )Q旮F!y=8xh>AmOu9h_V@.ӋK oaB>n?^܊EN.s!:8!nJ䨃:'GRL lfFbq227NkAJi}d 3! +e y?)qTFÐ w|A3j{ĝǺZh~Ң4yۜ $Ö.&3 aud).V +o20U[WٝɇV= +JP +]-]@H&XP+`.&+gB԰*pruxp^q6KY _صۤ'620. 2.FHs]GAaO%~k>C7Ӥ"P_d;6F8V7"l f5 UԙE2 &!HT7}R7"|*:k,{=0VePdԓnDW*1!@.Wj*Ȱ'vɒbW+O?~EN<?] |+3G)MwO˭:Δ+R77y y=3VDbKQfUU6oa۝-s JcED"f].CZ)-LڙЙNu\)9!eўiĽᜱaeq/zY0Yޙ/CR0%NV՟⳰7a!X v588@'~dR>} +Pfz%ygF!UoR۳?5UZ|v@)YDE%n[UcKBwvå1g;˝`HhIxbݝyw',ņW^p'(QDԺK~DJȫ ʣ!pU}cLMQyz+ ({.@%}/#cx>t | /` +?&|Dlj()B^6@s~L=8e]Cd8|;Զg@Ȧn{tL6/ӲSCj^).l;!RgQ=Ӳ4 {40ES_y)HRwE[ i%pWqAvB}BP=P@Zsh*-v`cI(95j=ʇ>6׃Bag .L?g6/g#yUR/{}%AB S:;/ḲA)7.򻛨M9ճFD D(hq1"vQvpсtDX134BeG/lX-R1PKSnz\QmxamM*+|kxcMSfc@7 xɨm'WrAo ptJ)ywR^qX\dc[M>!.QpZ +KqIvҀ3r7@=a2N'ns6,3hHZЎq1,77._}'60$ +ݲH=5[ mDICxXG!`j*%H~հSk-@ +ou28n">nφ HF;LC$ǣ޹0.\7(3W*ܳm!::wҲv%eXi9=4s 8ndퟷYa8+ J^0FЦcg`xq>nՍ<3p lHNAH!8T' Wjj"-4(8|, q!AtύCQl:5\e@+6G`ϗW<~%iWW7W](`d\6+!`:=G)Tk%5AOɍrƘ١HRnQU*ˣ!F)u-t=-'&46Ei,9%EN!|,"!bE_%2s$ޓYͥa'鑧8Y*ymNzqBɮ{̭p]v k,lNfxBuU2{ O]*{ڐW.aHf}LV8\ڱ[`eQg~b?4?#Ọ{a/ Ten9*vKdsHIL)o|^ DIߗb^B&̺Z,%EQI0箣s|ER34/ M19*캈Wm՝^s w*onZ6릡Zl #/k19W;93cTSX 2?+/Oq%Ժ3hXmOӠeQu"#ǥt'5Rq2>{9Mi_xu`3WT rÜ;(f&, =+w)1U>"B6P)~ʈi;v+˕*n.+5+QMh=; +WU{#ٯ)@@/ւɞVU;{\ɮ`Uh? "xļ%+MxATн#3^{j@WF)iD;E;%.aT{ӹ&am&KOܦbr˰D$+e!K 4ubxw~/vhd_4XWO[ѯ{n'.N"TKIz%`6[X'L70Q9!}ck;`%S9?iU2[8̌ZET ^dPgn`Jd kJɉh2(#֪eQ φK<$.VOv5WMnxrnep,b7HF٭aKޡF8#4q#s*[-qIi9p s9#I 0Ɉq:gBTB Y~^cF>'lYpPQvyqy zgR@JxH +}r( gD9Z=e B~Rv ?ʼ=m,) +|s9DR~JGIA+Ġn%DB''h~8 лkTL\/-HxWO$w2nZ*Bش P\]HiܿtH@;,H-+u$?F3kyޘ&k/%:Y玤 4ftJ-TS`9DhtKr.KHۣn1y {5mr@tV!n +ю*w4o?H8MNtJ/9@:+|Q4I( ZfgYݸ=ueTsk"(cy4?6B 88)Χr:Kah +!`I33OdbmАf}{ܺz0!bUF_G#Պt䟏ᅴ:DE7;!yigUG 74xDs?ÔHOA;)ZAUsd0u_,/_N}( //ؿsKUCd% )PW+{A9)|07^ +vS*(M[e25.l[JUydue36 4u-/j)u_FC~*(# $G̃4qbdPvP:B^+]( +h[EV\5Ӈz]NhY=%^j/t`Hƿ֮3~GνNӫXlIfcd~u2 +^an:Q6l. |G:s|/p.ap,0^^lP4q4TΔ{!Čs0rR)" Jmm9h%̋L*oL.BDNb&SV[n #Q/1xȂ $-^(4^/&On½x8-׌8V ASS%hÑg?ڹ^:X̸EoU lH+e[!vHN'SC}]SHo(;Bq(CA1">V$?C, +PY&&;_ tL/{r[@Y*' _^ݱRryR+̬ZӘswy0 Pog,&I2<]%̀3EkRw>-δc=wpǣV߬q )tG!RT-v&O;ipGxbJY/p@t}hSU48/RH N khGX&WH)a?:ϧ:R{FsKǁ,zbr3cWE=gK_4ZTBk5Q4l(r6k-D(DRP\D>ԬAWh7$%C\N j&{ufg\aԌCdJ%hr#0mBDwQNivw v;A2]P5ʞB8 w-*V̵$1n?^j;U4[ss~|឵ +P\swo$ =5}At 5h'|J(;nFU Zp?VT8@>+4MA!h7 Yů1}ǡpt4!YM/CAD9Qn+0rED>R=sPHjPx=2/5K]ة`{f>+3":/?oȿRYlD 0,0q)c6jd`\ * +\oL߽ CgEjmI4proR)'"%A tFAq~2!iKٱSR[3<-"_Jݟ +AI&09NJҼEN\"qmfQUx&>ܟ8UCoXD__lհUSFEڝ`(ۛTo+2dO!+qVCwT&gO=B\覢c‡'/R֦ ̀SkOd2ҩZ3XUC8aQA1Glw~#Rm:ẓ )Jg.?N xڬKyfI)NOGȊ~ < clyőMeiB^.=[&2'?yJB7 tM)76ۢ9+9ǚHX+i,l#fxl2;7j|`B6N?3(xv|c$_?s#hp ELvu=O*2&xʵ>*S-`H1_tZ_^ƴ_8c6mLR)4O'9^}i. aƤO`28ϙ^>F :rŅm̊w/? ( V}6F٭ 9A`{TIszCӡV ;#ۜ(2FozW,!*t(VR#^O,%îLܨwe!bLU4nkTONN86UΨ‹!am&5<^qeA{M*C[uEgP ڜGK¨@Nu3˓[2?[(?;]`"qJP|$0\d߇?x`@3'Yj>= ymoYMeԼn6Tp>>95XԀ±kwWxqzUtp&q>)I,N vC/N$KǗJ^0GKឰzYSeڌct-5Jiǘ}ײ7Еة@jr[[xl| Xf@ѹ5fڰ8奒]A<@=To#suظkaDU5[R6gNu'A9@Fbi^]gp+BC2k;je[%&oM JXg VedẼH6rS51( Τ~_Vff} +S& Є'5<uzQʯ)>D`Kl9& ψ{ܵRw'S9ƺT4 0S KH'3wmN)H@A<10`BdHZז6|o ,GtQ&x'=ؔv7Dv/F-s;tO`/H1[GȞ yq.ւ;\ou5stQzw!7J3w(/*e1Vxڴ3nKN&GI\s})D{[ĶZvGx_&Cj 2C1ѫnj)b('M%LeOsҢ6 +_Py/3+-F uX=o˿+ż{JwH 0?~ˣT}~aܖjaW+aD!'78(Bv`N@Y+}ɱ~ї8BgOq]毬OI Rg&ݪZ?x%W +.kEm܅:`J_"w$ +l\^rυphъ4poՕ2*ݘhNad<[ G5P"g{3Gt & +%ڞ,{v%>m%Q^?|D +x'Ng4m}QP ZUB2vKUhv)mЋ׽u4Y3:9W{x|gG2X'k9`xfh<\hslk|Y7W.fv:pFlb`fk?ƞXfiAwH~w@ \Ք,])ko۪d(Q^Ta/Qn0-D\ S8.ueH"JU=*x +KuCtХ5qG'gkYF} VIp5[/~t&q5Ѐqհ`S]H scWv 34QgNAд]Aێ>yP,.Dtpp ~etIK?0'iJ*hN >dA8^}bDF7 KU#=;ZCΑ/SJD0;0 [|2r +RʌBQS+dj0KMOkgd3PxcPHƬ>n(xSEeͻ+Jݔ]&!AD +F7赂tSə|Sdތ8\_/8G؂_uQի^R(bTWytbmlFU)ǘIn)IloĒꆪ %n0m: +d 5 y蘑6뷏葈ipg@LX(A7mf1_Y{62PR¯p _29+<]eRiA;1C<dɜsvJ9GFGuf}"D*jQ +/3~bX++2C7nfj0ߧ}搄N1Oͧ2(T!yCŤLk*U_#ÌS1}x>> 4+>9mA2,єK9u0(Blq@4|CkB^x(Нά/ I%!l?cƶ >ZPN}U`sgw%j%2vLY߭} +T,9n]$8\D'\v^ f2K/U\)LaZvIqd>Dsycsԫ Q g^DRu׉&TS8,EW7?O)/ eQi 'ݰϺ~[Q! F!`~Ycw~}Z8b$6X3VaLE3h/ߦQ51U=1zΈdyCJ'Ɩhi0 ~%9֍ Bt"keռ`1…)m^` (GP($~]IL/h;wS㨽Ϊ;N:# !ݗ)D3xDGZI<ӂڥͬV)y$L Ҕ<3s[Rj>U +穐ݻHuCX?ЙX+qKn'\qC(=#asD$ל)* ٱ^@]W#rZf&8r?zx?$>YYV_ snHPwxk>*W|J3+{{S0vbٳPް^{8/v2n,aWhiisʓ%%9i + nGTEz0Ҭ>q +ݔ~GK-nM`R7ꒀ2D-~|F\P+6G!pd?9u[C8֊n@47KEqOiJ \qTZXlQ.m[Hy^DjsЎ'Pۢ%{ I8710(sBYēN;<|7u  MGrB«ϵ֭ 3EoK8c5Uz(<iH:i6m}3{v,~CZH |SrNhOd/v.#UIWOJͬ9%atSϐc< ę[0P[vryw'Cp`zy~䆾5HFM}BE|Ly-T`{|Sa?t+CI~ +X"QcYL:^.V hr4Za#o{쿴·GLj6ZOJhßUGS)^tI\_>mj ,m:%_]ɹVakN΃aI]);:ƊB*9WJS1ջ$ѢWZye},a_W h_KL>W3%F3(rdb(g7;CH8.s&kGZa>yVp 棐"ZAz[b>xgBT}xQm@"n5l]qp=dSw璓=mg:iP}O;󼂕Ae]CȂdЅV9=9c%5ĝ +-X*Rsq0!x0KE|ޝјT] fVBsNt.[ibRM\ e'>[Ez:7,c|L2fgb;'sfEDR:7Ό߮ +Kppe}Ztj> Ԕ2K"[;A17&<= 쥂w0V-K)fH LW돢o׈76anG]准rCpi?%V%N k {6c"U̶Q4z`W eᘳyԛ]8 (>~ +״|a ys$xVH AƯq^kJv<:DRb|{k=6JgJ#°Zz J7'g }E׉Wz ) }:(IiIpNejn*nHifUhnqh^PEZbׂWNbDsRp5c|tz6wzRH5r"U}GpNRj5teAM縄aQip)ƢLK~~Vɀ|}GL'qCylg62(9*9/ Symb V- ++]e]/tN.ϑzhau;դRk9kDcJw~+8!#銕N䚅 c-?E0Q# MV}]$f؈c%y)! Hx/9mkR:N?_EkX ̝\0?\M?lNȧnc2w= ӯz@1^ڸ 1D3'yWF\Rc uj^w7#9{2=nAE5aj&1rgOk%X{%7z5\}:JѡY$DIg=\q0E_riGԧ+| -U:[]wSgtt A/f׾_B:"|] +SXsu{T!'oc&zMhF1<\ư-KMJWv^k=mG|6M1+o@"}窈 )jqD'")Y"Gz3qy +hXy]oFݒXk*],K][} aZ-@ڣ9Y:b(w&?X#m!lqJg@O!A[o,y;~ ==+nÄ7|-x ^?cC +*R\53_䂵Xry4g4pn|ZG6EnJ#_ͼxcX)z%£Ffn~=1D"xnԪ5:Ig:@*RAMKLC8ze\ q"IKCv(X=0}cۤc^,=}O4Q _Ѝv#ѕ83TeAN|DXTԒوN:E=m^{_<D;"R |BxD 7ԶjBo4S={rbHuD2bDT)TsaM/N #Fn]Ȫ1 m8҆"ܫke ױK\ $%(S $aEr#< l]v(3,iF!DR|;)z吽&[{4N))Hhl-y.$+ɗ 1_̦D5Ǡ;g2>x,K!Rx >|/+YHzKƣC]+Xau75&\zY.Ԇe0Jz f"K%l(Uol[A^?Oy#B'qGFvY= h~[bIh7H-.Z(6Gccv7{\pk})aŪT +[y00 tas?Õ#a{x0 'w>dYծ kiQ+REiZh[9ܽXƍ4 [S7',aWBt̒p (m62R,`X_[qO{ɁјeMN1Zu|χ4-EAIrx l +DNy/WG:K%TP̔qc"'.;I7 k_ghd2 t/PL›fغ80=? +#n6d +A,mݪ¨6K-󦄼+e +ZgUʫ)<n( { !Qn tVö+ΕſY<"dnʯӘ̙̂Jl;C)Ŭ4oTf/=]]y ̵ٯKEV锷 %.ڕ^e*=MW0\LJ)t]DJn~%88nf3C@շ`*t%8|HmpS&6]^c#(  + ΉZ5ijqԟr%|\a x FZk QۂcN#paiF2i'&Ab+n>]f "}:gl4S1oP; =+dUI'} .Ѡf .”s"ډ$;&#b*Ns%S 3*hpދpKN4dJ29Gd_) L%-,M h%e3ͅU0\ɶWf)F +ek|!5&V&z@ RZlȇ^jh` Ϭ"\na!`͜92FEn>EP;xt6<#k5Е'gv~ Ӟ-8c)~=u;ԹJvjdnxVb +^ٽyK"[~n_[|baDfpJpM`(l~/5>_E`Oa,@ufŨtI^St GNdžċo@-<oI?žîw:85sQȌ VuU!~. iγ-d@%6\!M+'iu_R@{JE:Vnu$wag]bj=l߁c;]t9 csN `Э~1$jU=giWbxE:Q*LB.*{*u- N*@C|9z^1Uܚtre]`Mz.ȪViy('Z"q5kfV3R:lTϮ& ik;]4!~e߇0y[fMnۉ*UnmNY^jBv*d&:g.J?ǛxNE' sWMwP5}#Shr"_l7 e"Lqti" kg @gk|cIi[^r8[-!6`r"MЅ2|PL  ixBVʳ]f=)za>j" FzC. /,`js~ItƤԜJg2pZvGPQ**o[|yS r Xrt9hlGϽ;y 0 +붳b,$XÍBR`T/o Tb +@a/$ɳw~?6Lc$mqoI#&rBt!̥"!{ڷcAf}2{52LS"/6Hjڎ4ȝޙc>p-S뛴uСmݿ-دU=-N`F衴ըz+Bd2n7bv`]M;GlBF5f#VؽX5[(W4}Bdz؋ RhJ7DAUh8u+ :AVrG71rvhU{y}aHŖp*uZUҼg8I("eC;h+{..NBD`Ob_#*M6 :c c s_֏fモ`wS] D}(O2W=q%;UlS~jGS"%0=x#i]ڬ y`:֗ fQh=!8RteT(ƛS'<9x-j dU,|B:G|&%*+P%3 +܎̵WC_i*na q\p$=aT BE;? 7 PhՍƟpZiw.!fϕh zYfmp0x8eySdD1I$-' iȐMlIN7GR/Yw#WèkFWy*op nW1&ԓZoh̽9mFFYR~NŤkURxOJ+mM{G) VSUm۽ +7їZMMLkZk&8絨gc^@N<Ɵ1(Bߚeу>Mc&3Hnυ8Ί *vщK FNybo^6%z0ݻ`p.kFʉ;h +endstream endobj 5632 0 obj<> endobj 5633 0 obj<>stream +&=+HODdSx[OӸP8:\ +Aީn;,iPIVr랢$gpFn*\I!ƜHp?3×fP#j ߹zDO4ttx KU΄-݉gQ}Mdxc׵wy|zvZ$>H\!FWIܥt:Z%>Ch\J[cÁpXzl=z]o`'=L 2x#q'5絍a)f'S[N;N2EQnT Gff5f`c5^xf&/ܙ/,|FS?03r;9l:!SX8%i'JlLyP}BXIIj4\Ĝgz6fL$]zfLeWo<@^ݐ@2UyYTm^h`y%m6;ӭ*$/`Ã>Č0%n#D9Kժ!긶t%Sӑ 9  %ȝ>iraic!7;3iW@ahgyDRC^]BE%jCy;E߭b6patE_h"IgSxUlOBi)[-)""au hHî1.Ok9vr1^ȹ p{P0u7܄j +!IS2 Z,Λ4 S6FGH搞=ϸ!C|دxj*]txoYQm3 50/|aad@}ZX<&S=6̆z\]Sy#5 Uuwٞ,嘫9I&.I8SB=Xn_$?^s9ŵrelWϲ%;ߕ9"dt$-eKŘOpp:-|-->>g--#ޅzBc W*f)aGNLEhW|jV":3_ +lkzNs8{ xZCM^>\Sɩx רM7   {/ '9oɾIa3iUeT sU팮8RO-FgkIGZXNott^gYՆ:ԙĥsqdZi#fE{٘DWcu2-bUlQ}q[xH7j4NW7QM0Dz㶣P=sM?8qyY{e6aU$+ J'T̤ lΉ7W5 <@f+Cwhx w<3p44 ϒgH.l@ +1|Ǩ4oiBN C9/ y~~[s^`I5D(^oгm ہa8#Y@-R!D93kWBIUnGbQi&W/n.Pݻo mꍰ:~IBxoSYICdV1n6NCkk,x@v8zjR5~ņ Z]/}dDS|}җfx^B щ9x&$yS~{mWpl\vJMR/(_&OA {D,Fn|J 띫`VHBSZHґmϊg%lxW|53Id౳KrW7ь`QI8W씪^k)?s\$qkhZGھdpv>屻<ĽCG^1X/Ku07_GHv2P8ąQ9*X𤿇GB/!n6:@YNy-H?BnzH͓McxlopYe8:t b8DzDʿ˛wA桉G[.!8ۏ>)[DJq8[n%9G!}xpcVm9lwYHIǸF9̥*/קּ*l%FA%X+OOid(vq:ۆ25y!E_+b'ԋx NLU |õ݆10Q ~Y tWt7;id$MWv EYfZbzoIg[\K,:ɒ~ /=`hWxx\D-0 `'r𸘗^V"X^!MG,$$JCTpq86|:. $O/VHy C-dqxA}+\w\2q{Twu f"3ꧾi4<ԃqNtx*EUIp˛ D/LSA|Q*:!\zl]9pE5Vx͘VAd3m#N?z1Fx-&m}˔S ET!bw47G')+צMˮcd?LT4~^"Y%`hBJ;"s&%yiytrM>.?GnHK{R|hzrμ<0)b'0avVC'Q6`L`Vw &&M ]!/{[L֮>Xez9Ļ] 19Az!vKGL~'vC_vJ/@n"i6WB$Sjpq$1؀L>32Eᡁ +SiH3(UPӍy<jqӥҩ?d&B|,>ēz%Q\o|$06׊?]JT_QNvC;؃g?Z\FsV)hCoBL0,a%Fυq;\ͪx(2B2%=ZA<0&g"19aVN?6qhbxXZ;׮Uk,'Ңlm 34OVUk“V*%\x h_M:`}O0I-j:ͭ 1 lJs_G,:qr{*ۏ^Mf'9)4ZXGtg, i,bZG5 D@&ԛ]shLon,ƉEl\yJtC$s}kF:4|_L[!Ex1 7JnU"ܝ↙zlCw.2>d6tcŽ_t'q@xlAT8drh3 N'8G(bW‰BHkZq{>n-4/6+tp^7KP DFTvD!/fK8  yv.?(mU^%JD)]m !]<{OS'%>uJ,pD|`ՍפHb,|p&r-HTZ/u82p]X>L5XWPI ]=R p"SMMwl + a=IU.`(ڗ3ꈣ}WP?_ -eoj*~З_+,0ѷNr_3;nA0ߴt%sl|s]MxxEeb_D`2R,Q҅Tͨ2iy?xItt+f糞3<~"<Bu.2-Xɗu",'E_A&,\ŕ,dsA>_^L-.j#sh&E#{hN_yyNs?0 tӜ$o~Pv0T<g@t-7ȺwX~\W WGqK[-BR +5;xͼ덶-:E9>Uzpk{5s~ okRCks: TA;3`]m%P;z䎓SB#y-VH.?N[B"L`FUˑAi?URe J8e: +A7 + rE l# roxS&﮼er:n +t/Ȍ_CMEO;qm*|9۝NDWh EO2l+iSL9ESEXCoG!(JE#ЮՈ΋C659a*^ڼAv{N~Hɝ-UAFT@7+3_1nc,g$(&UB,=g;22XK}ܡ-0ڤVgF +/к){)X +-=):™Gno9_;50s 0{ & + ſKd^m%k6 vERwJ%in !6E$nBз[0BAuSY]PbX94W!1u'}x9X@ `HW,͓2t.0~8ewl MdUN҉1,c;"[9[CSJK惌cfHoL^'%>օvm~m=mL^0&t4Ts|a8"Y 7CLhl\%3Xm7^W/,ϐ <ÎkG>!XgwCe!ǽwq?"ڪ%<1:4qpKm=5nӛ}fӄOk$QicZ!TNQ ; E3rJd5U7$~1j!q1'L38';fNK 'TIk^j䩎]/za)q7$uj<{;ls(oTJs"e,GIߑ6oJf; k}y=L (gk5e3Ah@ +9ߕY L)bYSp'QK}ZCg}H©l?MِFp21t+Z_EƯO7nٿ7Ka$2&@hK5M%/Y} Y6``;qz"@x-+DL^*}zڠS(2Z,kPVg/Ui$J+n+=j_W}FptFHidܚ#n"MPeM|bz_t,*1MehJUIU"er{ש=z!67sX|OCUIx v$XiJ=/,.R(j P de/00 +[qtEOvi~>@ceV9sZMOu68_M[Ae\w;<().q-}z/+V=mjYٍ{]Te2HKbWO~gJ>7ȥg%ߩb@譩BaҹpRET]Ϗ +MM [Ffgl5 +2fMipd][{R"&~s"vM_#T.~L7G9CN?Sh-읷a >[,;\Y&ӌ ׳-=P:Olˇ֡ltꛘlG|>ꪧS9OSvW^XHl7)'d _+T2G.dۤD4铕/g"OSѠ,sw_Q,$s4A7wvr`vAZ)DT zgޒa!l'ZL̀ZWjϳ>a6Z<~[ܥ%MX `] )f-R>b 47B& +ϩ|nC##i|h>ђ'E`dLD$}VPUg6NyꋠmzpPXz2]53y(jFXJ 0e| $oXKk:n0$n/Ԃ,WfSYIu՟s)j+?a>(\GV( * 1g!M8-ˡNe9=m~PX2v!_LsqEA3&(5dy6s:K(^ViLp^cF0)NT`RvQrZ9LȈ"d]qFFv)-Ls]]an6A35k|-F3_ËZτR&"% cD!Sug;$Lh~DPցo[zZs 4~r{8R;2ŷfl2N8@Ѵo ;"E命 BpRT{S~:TzCABץ2gz4(p[7H~ߵ +`a@Bտs`MHQ-UT˨W#*dB\tu(@XTG +eGJH3ଂ[;P=$VmGG(0_\i+yYx);C\Ŕr$tOC*n(7%Z}$O$x}sǫ_B~璁RWͤRO캃/_+nqK~T Np(۝J-͡TH4@t#]m%eFX;?+e-X485|%-i#'yδR{BZs2 [dqaX ¥pn0QeZqh7gAbQW:uK)S }hdt= 9"Oa b.VV++e +WIyj[2MV'u"08Z p:';5؛LGe5fDx{h`-u<*P>^bHI.% 6 c/TMk}ޡ/Jt߰u ^v##k hһG kO ѓ尯J5>0Ĉc<taq#_?wLZeVvaAH/%bgq yr/%N-P{\@P f07 \xIw]d 7Ir)rvp*x ᅦ @q(uޢ:ϝ'跰eOkiօOs>Stު l:\H5[{2 +0Ęb/-A-iIN?7vv6\k< 1pkxЖԽg7qYѱb׋ַ~Q4`-:/-D$5p?92&&@H|B߯8^≸Fu% ||7dz5%k ־" +斎[5+ƀO^j5 Cg_#äиTRҋOf&ؾ;o.P)Z#˝d>N&Q/ O҃#IychtՎ:7ҲL.xi}\+ՅبT+E-5ƻn=.=#aLЌ SoIWY,eQH#OT$uvii39F6^@ +&R(SQ)SE 'ϻ޺z9EMؕ W]gAVCu4~r0FlIp:1한H{ӮݳI6\>9skGίLtr)t(ƃդl7~o' +#滯 Ǘ )^*ۉ7@+n q=v+GF'Ѝ|Xek{(AG7P;MN"\l> pk'|fcw +V@`iWzq`X8d,źBrU.(dۀr+;V cThq%gEL +O偉hjbKW? s E wPgamNMM8jSkUˎ r}p1}Rr>S?[0j&_p LR04b+NlT/XI8 5k]kb SVq5hE m' Iatv%aZ4¢\cr0YHf*͞25p̘d[?a;ͣ4K*1\KٵN(]<}N=?L\qSr]p& ^ +0!y2j MEi`Ը/0Fa{8{jAKL3v137'Duw%j/&9TmULr;rxr8 qn'U-]s qh| )Q;D <JhFcH5iDgx HFPQv+qqX#DjMѳJ۸ś!Sx 鵻Ɍ)4j)J@/ziQ#lg6&B\^W)!2&zBty(-_=ŒNE  z|: S G6룡Nd6X Tԕ4ʏlHQ4=Eo Z#VxM +SV0, ausbE=5[5VO;dFw]rtl_1Vv+U VQj6*=]N𩢭.J~t6v9c4J4"tc~h' Z!iDݚj|67a[3Baغv60tNVENd㣥=F>0p^_ҷ vaJôUڙ)m0Ғb3R{TJ۵ed <1l)|G9h l[Oj~L&1ӊOff%gWK)SñiU( ϱF~;I4FU3- f{N&z[tVG$Vȟ +@`YCi_-gx|єqp_j?>f>fk:Ditw'K5]OgMj'?WDBބ@\}cҞyqtGPk3#"MQĩ%SA9vdTHDB5eqILg!X_[\{w;nQLN5ƵWBEdpQur焾EX5(nW}:rJN>Nϙ$(7CU6d*$T2?<,O0| dEw`݆L[I  u6lc.L4b_<|rMX+<Ʀw +=GN-xFPK 4'>]L/5|]܆hIg vmSaC]tSD9c!peދ#e%lZFgl^zKТg%BEQw[{o+V𜉦yT2d|SI"3qñMXVKF3rl(z8/ ܲSkL{W'v{h1gG"/g'VY*@BZdu#>G}VD5lyjGUrr#H/%0Qz :"\4s/i,U2Z(2.>2-abWp3p6Ei쪖mғj4aϼ S-ts&!1l Qj .Q2|?'#-Nk)YՋ{&= +x:CkrF0~ +i@M_.ѩUz0ϯ{\]HG,@2ЁΎ.M3F}9k~CwQ( H#O"њ^4"дq; [74%EEH$w*f +޸\]t] "(cw2g>ۻ.ǫ82H!<[GBG51qL+pl˭A%0Ĥ!'{sj;efV¯S\nCu͑RN4޾!Tf3)maK kA; G͋U +4~XPJ#~X~[-k(u2:m/ iP 6žLm*sؖqcq36%^v'W>\#d}5χXv9<p1 z^ Ҿ(IoNSPLbhi][t)'߭;T{-e#’{J1P2WA`;~U'p*UbB|F,`(՟ϴ +) +k跱ZsGSCa|!wo}17 ӡ"o{q`9v=?.pp5g\1`e6h͍X{7l99[H1&l  jNJ'nEܸN"w4) :/Tdài$9nᗧ#ţ 򶚄M͌g |$?nz7æCirDIhү5kS*woȞB>L2{Nt^BbjzJ՘::MSW}lǷ,~!R.(I#U,+$6GGz柜Ъ̯Qd9ܾOMU`\/LٌKG%jKN#T!/ل[r qvך`Є H)ݨ/ 𘇚ܥC#t֯ 7tpPoo'a *o2+RNGY)5=[4 +K :q4bPo/;3YUUE8ˎݠEcHV7$H3pX#y#kW9!utK3Hr Y22(FksrDQEƽV[%Lg!uQ\- I~ wցU'8^_Ȕӎ[%_zFlq 캾$7="< +|,Ƥ͗L5zYr33dW_E*$K?٨o[cmQ|uW3}N*{#TBpykdVY'u]>PтSxdi-q"k G5h7(# sQ~fKT1u:Z\js+ꋇ#{-)jVE̛*&a-':sR]PئjncԈdL̀u +TgT_˨v94V+&/ S7}T_߀U]6WT;^~)k lR1w 8 ci%x,B! +aǛrumB'ZCj}eZ"LIi䪛 +nuɤrEBG# >7+e? n9M \qcjߒ[?R>n l#9~i;4c#ܺ `e wJU•%"E]K {BZ YZ пYkq>^njQMwwGѪ)o@GO +Y`Hc('Թ/*EuηEe\kQSz` \z)Q ayIlS +ʉRFYaDѡ+HךHgMЈA۝* P6J;j1bˋc@XHco@j R6hD'zN 4̷&T;[})ga39Mgىt2x%g'D˯2:mwn: 9p#K.u|H0%{V=놹 `t:z #\3jB#ev}-DiWy+Pm0+LRG,,)صCN; %I-^-\$7xYi|y~>j.9Fd6U۠YP,nġL+NgNU56i!L@ng1^ҫQ`z!xIdi|%a|:JL,*MkOS[eF$xBl?;%6#!=k + > V9(]XVYѫv3TMxjv!Kcغ" s 8p | C#/5#SȭMזkCA˲ 7k?tRɟG滚ϼ\ȶrrtO h9zB[ m+)bϵn!x -Д''a'.孥8@gH@#Ch|3-զBg1W`/xKCъm0R%1>v79sO& &Stw +wtX$ףÿ/KuoJ%v8.p7턳Jnl7Wt0EKӂMaKbf\+/͊Qyg&}ld%Dܑ?HR~b??[̕mDitY^4z/.616~r׺T`ٱдA̕>^cҰ ƯJkH hb[ Pr<K\ +2+5I;&e+(:*oV^;!hoRx5]*b ⇈.F^T Z!\bJifH-IV(uWĵIG3YRDH"ZbNE^BqftTF}[OZHa`@F1n*) +L'lLm>5dԙDfd`o n8*fP]8^-,rlFVǹ +trdyr)߷he)؆&1@ZXŎƪVsѨTf>#I}J/ɏo=[u@3gWE{ >8 V=GՒ=5hI] XA/MệԚ +xm6yx?\Ud>>3Rb{ŖWɋ + fpB0.dIOBzEJ&҈\;8H7|EP*X~ +ԸƅLe|d{ju"D`::Qb›tRI Gr@xR\j׃]4ViϨiLq3sIW+-2xov$\F6BlULjօ#3gE +{n#˕;L_c8|fіE&:I}!ڒuf)S!A+4Gc'Ie6_c Wm>W +B2جfո<VLoѠ:B;"{PHU}AbVTsjҦAEcV 'sO+['MGn݇<8cP4 1 +9h5fTߪiR`u}olw<;kt8wKꢻ}\- ԞL>Q^jN\(3hg ./Z z{m=>P`\AO``M A޷FCƲ|Eht]] " -20DM*ܺ>I*Ip,[&V ʈm +u g}E4x.e._:bԏv6/nLӓwH0d Q L 񙌕I4 W>?nA| z>Qb=oqdÓiY?X },{q祮#h=;mTnTNusԡJfR &m +m }^0gzʇaOEW=cIyk:H.b8o[K݄Y +JΜxʋ@69[Bmv5]HnՄ"e YՍIa*YK& fcB/ Ǵ$ Sq0rз9SQl p +q0{J3W QL2L}74okύr*^;^8tv?p_׼K[kbs1JIlIj`Kćejxo^ً^R9`ticT:aؽrT3˝HQk[l@KM)я +]tQɁƄYE^咲mc.e.k°0>B?Fj}d?Y-fi1"&Y%Vag-  +D'+ǒjdOf0J:H+n8wя n$E{34+#|Qto](kDsòTe[Jb]?ĪɰJs,TݮUAC8l:Yl֛KA=+,O{x#5Qc( pP=Y{kA+,n[O)Ь(wݖ"̨֭ZJ lin`+"gIxP< iY.\C*z}/HAul CztȸQکH yJu/A{%rdq fD=q0k-7ꕌ^f,Yv1n?0bKjș3]`$55eЅ>nU!۬$1d0J$a5j.nR"ΗGHئIC(+ΎvbdU/`PjI +J@+^"!1%אrjT}Z>`NTd6a`x<M_Ә`ȡhg;YTz'FCw7KmhC@_9:o$ +a$d; \.GքfVTf\ۘKюzgOky#VawB'.quV67 }$)LAwPYՃ2df!Eh>bm$;@>'0&=$RNoLحE?Li{{+_gDpL +ɜު7Q*sQ+.+#FjӷG$tTl481otY|Q]nMQqP% R\Q*'$z&&kC1 S[0О@*+LáZOgI$?l$1&H2 l,' vOWOLw|&{"ߙ}(UK?T犜}3xzȇt[`R_+ ! }4f.GLaJy`ޟV%P8P/i$^r<1^ԈهYpfǙ[~p + o'uژjpCRɆs.t\%EA$N1W=ѱ2c8<jmZN{^NBwk~Z29oO72.ly{d}ak{`B*e+łAyhxO@cxpmR,ّVQfV_U$#ݑ/:);<4q#x<:/ÎE%Ey? F`0 ܞ-l5)HbЮޛ+jQcQ%AQHu9R\3k S 寈#ܙ,D& Lbg3cr/#9icwvcjY/I#7_n= l2aQk8*tXU~Ptk)F:I^tmMjL,5% ܩZW JTfv|DŬ1 [wJ%$tl :4>rҸ7{4պqkCe!!i`K9W%`{l"gPJB;VR*j {ü;P(i8YE1hwjIY[K9!L'Abs'"@ {f-j>53{ʟ)s+XXVc01dppqk5i '4$;V%aS,Ex5B!AK!Vo#sbzNb(Rnzj }zV3ٟw2*ϛhނb=:Wb;w +4l 0ȸu@C*-K c!OB2WGNtXokbǝ:^mcCL??x% ;#Ԉo;þt ^Ǚ{4DD =$q-q?xDq\Z=Cl5Z%keCg,$rAQQ~]+鯿 (44M~VsY6P;ԡ +Ҟ$`CȽgA,M%nBeӹ<8PK1r>IWM_@n_/4e=~%Sx,l|U2ZVwLx7k  xsm9;ش|͔Bb ;dYޞ\Nj2,>MRrȵvG1DǠߎ` +ESi+Uf@s^Y{}] (Rb/l +PRhKz/U^!Uc*# +hmoy|/3Rt +[&1D& CxGex[Od-ѯ8uhy#98IF茵|jjZ<&" Dz䤣$*<)gAJ(;JFբ+^rUR_]nV +]$z.@#}G+qWAvGČvzds762]L-rpg֟rIOy|>cQwWU1+K$ͪHdu#X\!Mp)~Ym8CFgQ[-d +[J0_,F,ep +ts)\WI|%sJhl ''~dᘨ)340Te%l-9V(MLy  6*+L9{=r^E 4}mPk5?ZiyQʊ/G=`YDjCTi kBYXSO,E@EZf;{+HD<*U njf.j&c^>=ac K +6f{_39R:@urb5A!dx-2o$Q!5%=7V*VOBp(?2M`-Ѝ#B6wK7q6 zпp\ Ja/;-]k,,%~IrlD0FyvQR_Y0K5yCEwF!HPn0]eΔs/bi@*I +` +#¾{N,+vس #XN*^{KpB +3k>8~4B~wG5?;)S.}7c4EVA+Ra7ІףL!n'o4lEsgXW<^z>iVP|ÿko7 {nn3n&Yv-m87ᵶ9mHd!摏p +0ƫ +ϔSgg됤'iNkU YLR;,DߐC['Ct\$ډvu~ +E&wo7\Cь о+(L)y~fqq_h?s xi--RC:w}%`8قWt vޭh4&?FvH_9S HZXEYui"JxȚލ?VIT6ٗzi?`΀+T5>t a0l'uP5[^ia4z1RKmBbwh7a*NB8O^lti99{RH̪/QҲ#vBY|֗o[X+E48rA A93Dm┈&te݄TyUCh261F˧~=Z@vљɨ +0VtJTA?Aa$U>LD2fB[`IKr|h>"u]">}Q5<{g۰+ 3 @F*#t =wYg#?Vg0/*>L +;NH3M~6 b~`,pDK*'Vo !Y +Z&j,濞H SYhe枵ae5 -H[8T.&6[OU]E r LȽhgN| A^W=ߘG7Yq4ҹXQ)BubʤeW YE}ɛnp>SK0ªo#60Luғ& +*TroJgQlGZBt0$@dE-;]#ju14|l~G65-' hy(PūS4F J/&k5!S'䵕Q +YFcm[سִ:7RqO~y-בjO{ r@`W&5Ț^Q'.!s䋛篑:ua->8x, JoUo0~B#ܝh.V)~~1u>l8E:bZ0Dz.f3GEW66\,M.G };L 3\==#G:"RcQ~ PU[ f(9Ql:vV3Q=1]aq'"1OK2dWYkv&;yq?&GBcZ=>9$)*>5wu~ $q(e0^sq 7hޮ2:E8 (6l3ex0sGR,k\>T%y-_d>Lҫ,h` P[ݠL- ݑF-{M9E7KbRt:gvIx&"L#(Jtsҙ:aN}t&=bKYB\eV>us?] :)im`6LKWA\@nخ0pqYᴇvPpW"a]D|C'JH,pObs1ڬШ7=8:'uWm)v$,PB"Bh +:r7@ t9*—5Zڏ?tD~+#@kj*S+\:7>iG޾ %eփ,"T>9L `36F7fZЋ5vᄾPo'* +ƞi6geQ@ϭr۸xU؎*[l7Wr +"N-"`_Jo׉@"+A}?_kWChe&}#tTyIt1W![ޑkƖ^Y%4[ l((> +:$ oldLn vUKT̵r-{2ѹOLս*~AZrgˣ?Ry®1jKq$GH[SF|+$AEZ u`Կ씝3P:c@^倹sg} o/5 J7[ZSpJM13ޚD>+B'VhNPbceO9Fu00X*M@eY_>q6h(FOܩ +7ns"rx &YwhMGڭ׃_tm]^N +lG%n)kaEqKAHd/P#bA$ )!QؾlIjL6>z5nO?t{f lɖ@,?ީ}5Yix^ѰǦ.6?ubasll ZU3FYdC>k9M7P ߆@q(8e\ϯ/Nsՠi].'XZP.[$QP? ?^).S6vߦדӫ?^/ ~ߏ'!|d=tWD׽: d?ma&b{BK"RkhB-iB‘6M_ƾirj*=֍SLp@5q90 Z^9C,14ǀ}4=M1 +tpM:ܢzıcM[Ҟj7sQ{ة{|&Hꕻ᠑8[0,Xog9rvmb񣻼sg.aA,Տ m#*JD(Mr-6kOԩ߆B˭zfSdjVDzB?C/뎝ҝ̡@J A#۾[ \]ɑ\eWZ9K*$v©55^?Ԝ=1T}жh*m|WPG.B[mk!?d<WRrRCEٸ'0$>rʬM"b#'ef@+bIAe%:øTMJb>*mhZ>Z\,}hƇ3%ekB_Lnݩ@OMiISFϴk>\ٝ}vC]7Kdߎ*b: [iT>2 ƚbUfi0 +l*\"Fb +<#pFQzƠ٦[fi|/o@5y#K_ c߂1ߡX'd^j~G\;V297lc"ޞ51!Wxɨڦ}pWiyl\4N`#ˍC*Ϧc$J;Ǵwӣ;ԡ*ڋ~n7R[}yG7ahu"|[4߻3VreqoQvt}=}i}!DI\P@bblmq+ՁyFҶ>-zz՚AQ5Z83mQJ҉H! 7w$:}g L͒Cn"ʜ `cˇ~u/&+1e7@F8 Ue?IOJ|I7$΋gаɊC{hVZsB"9H뒚@nfQ_5_g7(AhQgl`0-퍾L4h~,~d ٛ W{&2'[XPܶ'iڃq!ɁzҮ&)-f̪5~ MH㟇+?p7%U/ܦYWQÝ+f'-Q_HE |aEGe$5+PȕWt6D&9lL lFU} + ߓAXHh&ƀEE?&VI<彶l_4[5*VY.d> endobj 5635 0 obj<> endobj 5636 0 obj<> endobj 5637 0 obj<> endobj 5638 0 obj<> endobj 5639 0 obj<> endobj 5640 0 obj<> endobj 5641 0 obj<> endobj 5642 0 obj<> endobj 5643 0 obj<> endobj 5644 0 obj<> endobj 5645 0 obj<> endobj 5646 0 obj<> endobj 5647 0 obj<> endobj 5648 0 obj<> endobj 5649 0 obj<> endobj 5650 0 obj<> endobj 5651 0 obj<> endobj 5652 0 obj<> endobj 5653 0 obj<> endobj 5654 0 obj<> endobj 5655 0 obj<> endobj 5656 0 obj<> endobj 5657 0 obj<> endobj 5658 0 obj<> endobj 5659 0 obj<> endobj 5660 0 obj<> endobj 5661 0 obj<> endobj 5662 0 obj<> endobj 5663 0 obj<> endobj 5664 0 obj<> endobj 5665 0 obj<> endobj 5666 0 obj<> endobj 5667 0 obj<> endobj 5668 0 obj<> endobj 5669 0 obj<> endobj 5670 0 obj<> endobj 5671 0 obj<> endobj 5672 0 obj<> endobj 5673 0 obj<> endobj 5674 0 obj<> endobj 5675 0 obj<> endobj 5676 0 obj<> endobj 5677 0 obj<> endobj 5678 0 obj<> endobj 5679 0 obj<> endobj 5680 0 obj<> endobj 5681 0 obj<> endobj 5682 0 obj<> endobj 5683 0 obj<> endobj 5684 0 obj<> endobj 5685 0 obj<> endobj 5686 0 obj<> endobj 5687 0 obj<> endobj 5688 0 obj<> endobj 5689 0 obj<> endobj 5690 0 obj<> endobj 5691 0 obj<> endobj 5692 0 obj<> endobj 5693 0 obj<> endobj 5694 0 obj<> endobj 5695 0 obj<> endobj 5696 0 obj<> endobj 5697 0 obj<> endobj 5698 0 obj<> endobj 5699 0 obj<> endobj 5700 0 obj<> endobj 5701 0 obj<> endobj 5702 0 obj<> endobj 5703 0 obj<> endobj 5704 0 obj<> endobj 5705 0 obj<> endobj 5706 0 obj<> endobj 5707 0 obj<> endobj 5708 0 obj<> endobj 5709 0 obj<> endobj 5710 0 obj<> endobj 5711 0 obj<> endobj 5712 0 obj<> endobj 5713 0 obj<> endobj 5714 0 obj<> endobj 5715 0 obj<> endobj 5716 0 obj<> endobj 5717 0 obj<> endobj 5718 0 obj<> endobj 5719 0 obj<> endobj 5720 0 obj<> endobj 5721 0 obj<> endobj 5722 0 obj<> endobj 5723 0 obj<> endobj 5724 0 obj<> endobj 5725 0 obj<> endobj 5726 0 obj<> endobj 5727 0 obj<> endobj 5728 0 obj<> endobj 5729 0 obj<> endobj 5730 0 obj<> endobj 5731 0 obj<> endobj 5732 0 obj<> endobj 5733 0 obj<> endobj 5734 0 obj<> endobj 5735 0 obj<>stream +sm@,cgщQ-ź~6GaNDN,oĚ-, Ldd]gI@iz,nJ[i&YU :P{˖c HN00e@,)g6VXOOɡq2;Ijtvl<ʦg!}U[lnB#LˆYsմ2 + +Z)grqq;zehY8S/(t[w9u1 AS$a^+;keQqyEk5G>YחApXfU -ĚNi]zɕeu])0ȸn:! ϋP B;Rҥ*gOMTCE֞ }k/#Mfz._ӡXz+Kk֙3 9 2D=zk4[+dF$chDm1,7ZKЗo*n|+áqMM^IҐo'Ɉ[ixωxgT#$,4QEfr*, A^8 <JrB^'fdvIvJhJ +:61 {szOZ4/MxX6QncP4gΆOeBg뀤с*.]VStf"*|6wgn~C>nSbȘ/)QOi xD\G+}zM𯆎DsFcfo#r:.Ny=,"CIKa( [\Wu,cKW4g vÞGpORԜ})ҹyroupti}(G # 4scU 5_wSHgQ NUZ>+pP69"Zuܵ`;/Wt׎3yȍqoKt@…u! U1s5fmFMe +F7>=kK=vcbm*ry$5Dy׻m;hl:11C-/HB$ï v#=.WHq +5zڰ =8m^}ᣦ=pV}ę FH=FO".n >rbCC\N[K9K)FT`M|,ʹbQX\S u&b~Kl0vӥ*7LtU_W7`V +D/ +Uv]IlPNHGy6ND6v/nU7{?y6:?c&^^@7')lJc|۬`qE7fe߮K"yA0*'fBյ~Nt֒˝j Ge2Ң'9CoaV `=2^o!E#.4 &.l-0F/JrQbtY-nM:mQ4 @?[#p*"W^̿y1a bkJ7eMڒ?mM3fxX}W~I6Iu7![ܦrI@Yr&D?id +L!=;%\?31|J  +bn*Jnv>TXru؋tkVGu?*^6;dP:i 3n S5)JE^p}'eE~4YTk^[˄Wp ֳ)fA#GU~t?3=-Lu#1|Hx1knFvf"}^%ѣ9j [KPpp2X[& 12t*.m~SH"|`1ŃI Ƹ9v'/JBk赥w`pRQrEMYNfǥ뎨QQ!z^wA`YѕV3#hCQ +}]V8Ƈ!Dz nls +C!a#figk\JW~8F&v%2m.@VnmNLվ$sUZC&{MDo(@`-T; |k)NƄQn*?bbq 2F(};jcJp-q@lhPRc9h^V^$SmP'^*EVޟK2+CZ=^jD1Yo + GYӤH?o,~nاUa$QɴTAg-q{>Z,mHЖD>}"ۛ9Rp=N +endstream endobj 5736 0 obj<> endobj xref +0 5737 +0000000000 65535 f +0000233052 00000 n +0000233490 00000 n +0000233612 00000 n +0000233734 00000 n +0000233857 00000 n +0000233980 00000 n +0000234103 00000 n +0000234226 00000 n +0000234349 00000 n +0000234472 00000 n +0000234596 00000 n +0000234720 00000 n +0000234844 00000 n +0000234968 00000 n +0000235092 00000 n +0000235216 00000 n +0000235340 00000 n +0000235464 00000 n +0000235588 00000 n +0000235712 00000 n +0000235836 00000 n +0000235960 00000 n +0000236084 00000 n +0000236208 00000 n +0000236332 00000 n +0000236456 00000 n +0000236580 00000 n +0000236704 00000 n +0000236828 00000 n +0000236952 00000 n +0000237076 00000 n +0000237200 00000 n +0000237324 00000 n +0000237448 00000 n +0000237572 00000 n +0000237696 00000 n +0000237820 00000 n +0000237944 00000 n +0000238068 00000 n +0000238192 00000 n +0000238316 00000 n +0000238440 00000 n +0000238564 00000 n +0000238688 00000 n +0000238812 00000 n +0000238935 00000 n +0000239077 00000 n +0000241240 00000 n +0000241715 00000 n +0000241839 00000 n +0000241963 00000 n +0000242087 00000 n +0000242211 00000 n +0000242335 00000 n +0000242459 00000 n +0000242583 00000 n +0000242707 00000 n +0000242831 00000 n +0000242955 00000 n +0000243079 00000 n +0000243203 00000 n +0000243327 00000 n +0000243451 00000 n +0000243575 00000 n +0000243699 00000 n +0000243823 00000 n +0000243947 00000 n +0000244071 00000 n +0000244195 00000 n +0000244319 00000 n +0000244443 00000 n +0000244567 00000 n +0000244691 00000 n +0000244815 00000 n +0000244939 00000 n +0000245063 00000 n +0000245187 00000 n +0000245311 00000 n +0000245435 00000 n +0000245559 00000 n +0000245683 00000 n +0000245807 00000 n +0000245931 00000 n +0000246055 00000 n +0000246179 00000 n +0000246303 00000 n +0000246427 00000 n +0000246551 00000 n +0000246675 00000 n +0000246799 00000 n +0000246923 00000 n +0000247047 00000 n +0000247171 00000 n +0000247295 00000 n +0000247419 00000 n +0000247543 00000 n +0000247665 00000 n +0000247807 00000 n +0000249844 00000 n +0000250369 00000 n +0000250494 00000 n +0000250619 00000 n +0000250744 00000 n +0000250869 00000 n +0000250994 00000 n +0000251119 00000 n +0000251244 00000 n +0000251369 00000 n +0000251494 00000 n +0000251619 00000 n +0000251744 00000 n +0000251869 00000 n +0000251994 00000 n +0000252119 00000 n +0000252244 00000 n +0000252369 00000 n +0000252494 00000 n +0000252619 00000 n +0000252744 00000 n +0000252869 00000 n +0000252994 00000 n +0000253119 00000 n +0000253244 00000 n +0000253369 00000 n +0000253494 00000 n +0000253619 00000 n +0000253744 00000 n +0000253869 00000 n +0000253994 00000 n +0000254119 00000 n +0000254244 00000 n +0000254369 00000 n +0000254494 00000 n +0000254619 00000 n +0000254744 00000 n +0000254869 00000 n +0000254994 00000 n +0000255119 00000 n +0000255244 00000 n +0000255369 00000 n +0000255494 00000 n +0000255619 00000 n +0000255744 00000 n +0000255869 00000 n +0000255994 00000 n +0000256119 00000 n +0000256244 00000 n +0000256367 00000 n +0000256510 00000 n +0000258643 00000 n +0000259169 00000 n +0000259294 00000 n +0000259419 00000 n +0000259544 00000 n +0000259669 00000 n +0000259794 00000 n +0000259919 00000 n +0000260044 00000 n +0000260169 00000 n +0000260294 00000 n +0000260419 00000 n +0000260544 00000 n +0000260669 00000 n +0000260794 00000 n +0000260919 00000 n +0000261044 00000 n +0000261169 00000 n +0000261294 00000 n +0000261419 00000 n +0000261544 00000 n +0000261669 00000 n +0000261794 00000 n +0000261919 00000 n +0000262044 00000 n +0000262169 00000 n +0000262294 00000 n +0000262419 00000 n +0000262544 00000 n +0000262669 00000 n +0000262794 00000 n +0000262919 00000 n +0000263044 00000 n +0000263169 00000 n +0000263294 00000 n +0000263419 00000 n +0000263544 00000 n +0000263669 00000 n +0000263794 00000 n +0000263919 00000 n +0000264044 00000 n +0000264169 00000 n +0000264294 00000 n +0000264419 00000 n +0000264544 00000 n +0000264669 00000 n +0000264794 00000 n +0000264919 00000 n +0000265043 00000 n +0000265166 00000 n +0000265309 00000 n +0000267237 00000 n +0000267763 00000 n +0000267888 00000 n +0000268013 00000 n +0000268138 00000 n +0000268263 00000 n +0000268388 00000 n +0000268513 00000 n +0000268638 00000 n +0000268763 00000 n +0000268888 00000 n +0000269013 00000 n +0000269138 00000 n +0000269263 00000 n +0000269388 00000 n +0000269513 00000 n +0000269638 00000 n +0000269763 00000 n +0000269888 00000 n +0000270013 00000 n +0000270138 00000 n +0000270263 00000 n +0000270388 00000 n +0000270513 00000 n +0000270638 00000 n +0000270763 00000 n +0000270888 00000 n +0000271013 00000 n +0000271138 00000 n +0000271263 00000 n +0000271388 00000 n +0000271513 00000 n +0000271638 00000 n +0000271763 00000 n +0000271888 00000 n +0000272013 00000 n +0000272138 00000 n +0000272263 00000 n +0000272388 00000 n +0000272513 00000 n +0000272638 00000 n +0000272763 00000 n +0000272888 00000 n +0000273013 00000 n +0000273138 00000 n +0000273263 00000 n +0000273388 00000 n +0000273513 00000 n +0000273638 00000 n +0000273761 00000 n +0000273904 00000 n +0000275842 00000 n +0000276368 00000 n +0000276493 00000 n +0000276618 00000 n +0000276743 00000 n +0000276868 00000 n +0000276993 00000 n +0000277118 00000 n +0000277243 00000 n +0000277368 00000 n +0000277493 00000 n +0000277618 00000 n +0000277743 00000 n +0000277868 00000 n +0000277993 00000 n +0000278118 00000 n +0000278243 00000 n +0000278368 00000 n +0000278493 00000 n +0000278618 00000 n +0000278743 00000 n +0000278868 00000 n +0000278993 00000 n +0000279118 00000 n +0000279243 00000 n +0000279368 00000 n +0000279493 00000 n +0000279618 00000 n +0000279743 00000 n +0000279868 00000 n +0000279993 00000 n +0000280118 00000 n +0000280243 00000 n +0000280368 00000 n +0000280493 00000 n +0000280618 00000 n +0000280743 00000 n +0000280868 00000 n +0000280993 00000 n +0000281118 00000 n +0000281243 00000 n +0000281368 00000 n +0000281493 00000 n +0000281618 00000 n +0000281743 00000 n +0000281868 00000 n +0000281993 00000 n +0000282118 00000 n +0000282242 00000 n +0000282365 00000 n +0000282508 00000 n +0000284583 00000 n +0000285109 00000 n +0000285234 00000 n +0000285359 00000 n +0000285484 00000 n +0000285609 00000 n +0000285734 00000 n +0000285859 00000 n +0000285984 00000 n +0000286109 00000 n +0000286234 00000 n +0000286359 00000 n +0000286484 00000 n +0000286609 00000 n +0000286734 00000 n +0000286859 00000 n +0000286984 00000 n +0000287109 00000 n +0000287234 00000 n +0000287359 00000 n +0000287484 00000 n +0000287609 00000 n +0000287734 00000 n +0000287859 00000 n +0000287984 00000 n +0000288109 00000 n +0000288234 00000 n +0000288359 00000 n +0000288484 00000 n +0000288609 00000 n +0000288734 00000 n +0000288859 00000 n +0000288984 00000 n +0000289109 00000 n +0000289234 00000 n +0000289359 00000 n +0000289484 00000 n +0000289609 00000 n +0000289734 00000 n +0000289859 00000 n +0000289984 00000 n +0000290109 00000 n +0000290234 00000 n +0000290359 00000 n +0000290484 00000 n +0000290609 00000 n +0000290734 00000 n +0000290859 00000 n +0000290983 00000 n +0000291106 00000 n +0000291249 00000 n +0000293177 00000 n +0000293703 00000 n +0000293828 00000 n +0000293953 00000 n +0000294078 00000 n +0000294203 00000 n +0000294328 00000 n +0000294453 00000 n +0000294578 00000 n +0000294703 00000 n +0000294828 00000 n +0000294953 00000 n +0000295078 00000 n +0000295203 00000 n +0000295328 00000 n +0000295453 00000 n +0000295578 00000 n +0000295703 00000 n +0000295828 00000 n +0000295953 00000 n +0000296078 00000 n +0000296203 00000 n +0000296328 00000 n +0000296453 00000 n +0000296578 00000 n +0000296703 00000 n +0000296828 00000 n +0000296953 00000 n +0000297078 00000 n +0000297203 00000 n +0000297328 00000 n +0000297453 00000 n +0000297578 00000 n +0000297703 00000 n +0000297828 00000 n +0000297953 00000 n +0000298078 00000 n +0000298203 00000 n +0000298328 00000 n +0000298453 00000 n +0000298578 00000 n +0000298703 00000 n +0000298828 00000 n +0000298953 00000 n +0000299078 00000 n +0000299203 00000 n +0000299328 00000 n +0000299453 00000 n +0000299577 00000 n +0000299700 00000 n +0000299843 00000 n +0000301840 00000 n +0000302366 00000 n +0000302491 00000 n +0000302616 00000 n +0000302741 00000 n +0000302866 00000 n +0000302991 00000 n +0000303116 00000 n +0000303241 00000 n +0000303366 00000 n +0000303491 00000 n +0000303616 00000 n +0000303741 00000 n +0000303866 00000 n +0000303991 00000 n +0000304116 00000 n +0000304241 00000 n +0000304366 00000 n +0000304491 00000 n +0000304616 00000 n +0000304741 00000 n +0000304866 00000 n +0000304991 00000 n +0000305116 00000 n +0000305241 00000 n +0000305366 00000 n +0000305491 00000 n +0000305616 00000 n +0000305741 00000 n +0000305866 00000 n +0000305991 00000 n +0000306116 00000 n +0000306241 00000 n +0000306366 00000 n +0000306491 00000 n +0000306616 00000 n +0000306741 00000 n +0000306866 00000 n +0000306991 00000 n +0000307116 00000 n +0000307241 00000 n +0000307366 00000 n +0000307491 00000 n +0000307616 00000 n +0000307741 00000 n +0000307866 00000 n +0000307991 00000 n +0000308116 00000 n +0000308240 00000 n +0000308363 00000 n +0000308506 00000 n +0000310504 00000 n +0000311030 00000 n +0000311155 00000 n +0000311280 00000 n +0000311405 00000 n +0000311530 00000 n +0000311655 00000 n +0000311780 00000 n +0000311905 00000 n +0000312030 00000 n +0000312155 00000 n +0000312280 00000 n +0000312405 00000 n +0000312530 00000 n +0000312655 00000 n +0000312780 00000 n +0000312905 00000 n +0000313030 00000 n +0000313155 00000 n +0000313280 00000 n +0000313405 00000 n +0000313530 00000 n +0000313655 00000 n +0000313780 00000 n +0000313905 00000 n +0000314030 00000 n +0000314155 00000 n +0000314280 00000 n +0000314405 00000 n +0000314530 00000 n +0000314655 00000 n +0000314780 00000 n +0000314905 00000 n +0000315030 00000 n +0000315155 00000 n +0000315280 00000 n +0000315405 00000 n +0000315530 00000 n +0000315655 00000 n +0000315780 00000 n +0000315905 00000 n +0000316030 00000 n +0000316155 00000 n +0000316280 00000 n +0000316405 00000 n +0000316530 00000 n +0000316655 00000 n +0000316780 00000 n +0000316904 00000 n +0000317027 00000 n +0000317170 00000 n +0000319240 00000 n +0000319766 00000 n +0000319891 00000 n +0000320016 00000 n +0000320141 00000 n +0000320266 00000 n +0000320391 00000 n +0000320516 00000 n +0000320641 00000 n +0000320766 00000 n +0000320891 00000 n +0000321016 00000 n +0000321141 00000 n +0000321266 00000 n +0000321391 00000 n +0000321516 00000 n +0000321641 00000 n +0000321766 00000 n +0000321891 00000 n +0000322016 00000 n +0000322141 00000 n +0000322266 00000 n +0000322391 00000 n +0000322516 00000 n +0000322641 00000 n +0000322766 00000 n +0000322891 00000 n +0000323016 00000 n +0000323141 00000 n +0000323266 00000 n +0000323391 00000 n +0000323516 00000 n +0000323641 00000 n +0000323766 00000 n +0000323891 00000 n +0000324016 00000 n +0000324141 00000 n +0000324266 00000 n +0000324391 00000 n +0000324516 00000 n +0000324641 00000 n +0000324766 00000 n +0000324891 00000 n +0000325016 00000 n +0000325141 00000 n +0000325266 00000 n +0000325391 00000 n +0000325516 00000 n +0000325641 00000 n +0000325764 00000 n +0000325907 00000 n +0000328078 00000 n +0000328604 00000 n +0000328729 00000 n +0000328854 00000 n +0000328979 00000 n +0000329104 00000 n +0000329229 00000 n +0000329354 00000 n +0000329479 00000 n +0000329604 00000 n +0000329729 00000 n +0000329854 00000 n +0000329979 00000 n +0000330104 00000 n +0000330229 00000 n +0000330354 00000 n +0000330479 00000 n +0000330604 00000 n +0000330729 00000 n +0000330854 00000 n +0000330979 00000 n +0000331104 00000 n +0000331229 00000 n +0000331354 00000 n +0000331479 00000 n +0000331604 00000 n +0000331729 00000 n +0000331854 00000 n +0000331979 00000 n +0000332104 00000 n +0000332229 00000 n +0000332354 00000 n +0000332479 00000 n +0000332604 00000 n +0000332729 00000 n +0000332854 00000 n +0000332979 00000 n +0000333104 00000 n +0000333229 00000 n +0000333354 00000 n +0000333479 00000 n +0000333604 00000 n +0000333729 00000 n +0000333854 00000 n +0000333979 00000 n +0000334104 00000 n +0000334229 00000 n +0000334354 00000 n +0000334479 00000 n +0000334602 00000 n +0000334745 00000 n +0000336846 00000 n +0000337372 00000 n +0000337497 00000 n +0000337622 00000 n +0000337747 00000 n +0000337872 00000 n +0000337997 00000 n +0000338122 00000 n +0000338247 00000 n +0000338372 00000 n +0000338497 00000 n +0000338622 00000 n +0000338747 00000 n +0000338872 00000 n +0000338997 00000 n +0000339122 00000 n +0000339247 00000 n +0000339372 00000 n +0000339497 00000 n +0000339622 00000 n +0000339747 00000 n +0000339872 00000 n +0000339997 00000 n +0000340122 00000 n +0000340247 00000 n +0000340372 00000 n +0000340497 00000 n +0000340622 00000 n +0000340747 00000 n +0000340872 00000 n +0000340997 00000 n +0000341122 00000 n +0000341247 00000 n +0000341372 00000 n +0000341497 00000 n +0000341622 00000 n +0000341747 00000 n +0000341872 00000 n +0000341997 00000 n +0000342122 00000 n +0000342247 00000 n +0000342372 00000 n +0000342497 00000 n +0000342622 00000 n +0000342747 00000 n +0000342872 00000 n +0000342997 00000 n +0000343122 00000 n +0000343246 00000 n +0000343369 00000 n +0000343512 00000 n +0000345563 00000 n +0000346089 00000 n +0000346214 00000 n +0000346339 00000 n +0000346464 00000 n +0000346589 00000 n +0000346714 00000 n +0000346839 00000 n +0000346964 00000 n +0000347089 00000 n +0000347214 00000 n +0000347339 00000 n +0000347464 00000 n +0000347589 00000 n +0000347714 00000 n +0000347839 00000 n +0000347964 00000 n +0000348089 00000 n +0000348214 00000 n +0000348339 00000 n +0000348464 00000 n +0000348589 00000 n +0000348714 00000 n +0000348839 00000 n +0000348964 00000 n +0000349089 00000 n +0000349214 00000 n +0000349339 00000 n +0000349464 00000 n +0000349589 00000 n +0000349714 00000 n +0000349839 00000 n +0000349964 00000 n +0000350089 00000 n +0000350214 00000 n +0000350339 00000 n +0000350464 00000 n +0000350589 00000 n +0000350714 00000 n +0000350839 00000 n +0000350964 00000 n +0000351089 00000 n +0000351214 00000 n +0000351339 00000 n +0000351464 00000 n +0000351589 00000 n +0000351714 00000 n +0000351839 00000 n +0000351963 00000 n +0000352086 00000 n +0000352229 00000 n +0000354048 00000 n +0000354574 00000 n +0000354699 00000 n +0000354824 00000 n +0000354949 00000 n +0000355074 00000 n +0000355199 00000 n +0000355324 00000 n +0000355449 00000 n +0000355574 00000 n +0000355699 00000 n +0000355824 00000 n +0000355949 00000 n +0000356074 00000 n +0000356199 00000 n +0000356324 00000 n +0000356449 00000 n +0000356574 00000 n +0000356699 00000 n +0000356824 00000 n +0000356949 00000 n +0000357074 00000 n +0000357199 00000 n +0000357324 00000 n +0000357449 00000 n +0000357574 00000 n +0000357699 00000 n +0000357824 00000 n +0000357949 00000 n +0000358074 00000 n +0000358199 00000 n +0000358324 00000 n +0000358449 00000 n +0000358574 00000 n +0000358699 00000 n +0000358824 00000 n +0000358949 00000 n +0000359074 00000 n +0000359199 00000 n +0000359324 00000 n +0000359449 00000 n +0000359574 00000 n +0000359699 00000 n +0000359824 00000 n +0000359949 00000 n +0000360074 00000 n +0000360199 00000 n +0000360324 00000 n +0000360448 00000 n +0000360571 00000 n +0000360714 00000 n +0000362759 00000 n +0000363285 00000 n +0000363410 00000 n +0000363535 00000 n +0000363660 00000 n +0000363785 00000 n +0000363910 00000 n +0000364035 00000 n +0000364160 00000 n +0000364285 00000 n +0000364410 00000 n +0000364535 00000 n +0000364660 00000 n +0000364785 00000 n +0000364910 00000 n +0000365035 00000 n +0000365160 00000 n +0000365285 00000 n +0000365410 00000 n +0000365535 00000 n +0000365660 00000 n +0000365785 00000 n +0000365910 00000 n +0000366035 00000 n +0000366160 00000 n +0000366285 00000 n +0000366410 00000 n +0000366535 00000 n +0000366660 00000 n +0000366785 00000 n +0000366910 00000 n +0000367035 00000 n +0000367160 00000 n +0000367285 00000 n +0000367410 00000 n +0000367535 00000 n +0000367660 00000 n +0000367785 00000 n +0000367910 00000 n +0000368035 00000 n +0000368160 00000 n +0000368285 00000 n +0000368410 00000 n +0000368535 00000 n +0000368660 00000 n +0000368785 00000 n +0000368910 00000 n +0000369035 00000 n +0000369159 00000 n +0000369282 00000 n +0000369425 00000 n +0000371321 00000 n +0000371847 00000 n +0000371972 00000 n +0000372097 00000 n +0000372222 00000 n +0000372347 00000 n +0000372472 00000 n +0000372597 00000 n +0000372722 00000 n +0000372847 00000 n +0000372972 00000 n +0000373097 00000 n +0000373222 00000 n +0000373347 00000 n +0000373472 00000 n +0000373597 00000 n +0000373722 00000 n +0000373847 00000 n +0000373972 00000 n +0000374097 00000 n +0000374222 00000 n +0000374347 00000 n +0000374472 00000 n +0000374597 00000 n +0000374722 00000 n +0000374847 00000 n +0000374972 00000 n +0000375097 00000 n +0000375222 00000 n +0000375347 00000 n +0000375472 00000 n +0000375597 00000 n +0000375722 00000 n +0000375847 00000 n +0000375972 00000 n +0000376097 00000 n +0000376222 00000 n +0000376347 00000 n +0000376472 00000 n +0000376597 00000 n +0000376722 00000 n +0000376847 00000 n +0000376972 00000 n +0000377097 00000 n +0000377222 00000 n +0000377347 00000 n +0000377472 00000 n +0000377597 00000 n +0000377721 00000 n +0000377844 00000 n +0000377987 00000 n +0000380035 00000 n +0000380561 00000 n +0000380686 00000 n +0000380811 00000 n +0000380936 00000 n +0000381061 00000 n +0000381186 00000 n +0000381311 00000 n +0000381436 00000 n +0000381561 00000 n +0000381686 00000 n +0000381811 00000 n +0000381936 00000 n +0000382061 00000 n +0000382186 00000 n +0000382311 00000 n +0000382436 00000 n +0000382561 00000 n +0000382686 00000 n +0000382811 00000 n +0000382936 00000 n +0000383061 00000 n +0000383186 00000 n +0000383311 00000 n +0000383436 00000 n +0000383561 00000 n +0000383686 00000 n +0000383811 00000 n +0000383936 00000 n +0000384061 00000 n +0000384186 00000 n +0000384311 00000 n +0000384436 00000 n +0000384561 00000 n +0000384686 00000 n +0000384811 00000 n +0000384936 00000 n +0000385061 00000 n +0000385186 00000 n +0000385311 00000 n +0000385436 00000 n +0000385561 00000 n +0000385686 00000 n +0000385811 00000 n +0000385936 00000 n +0000386061 00000 n +0000386186 00000 n +0000386311 00000 n +0000386435 00000 n +0000386558 00000 n +0000386701 00000 n +0000388593 00000 n +0000389119 00000 n +0000389244 00000 n +0000389369 00000 n +0000389494 00000 n +0000389619 00000 n +0000389744 00000 n +0000389869 00000 n +0000389994 00000 n +0000390119 00000 n +0000390244 00000 n +0000390369 00000 n +0000390494 00000 n +0000390619 00000 n +0000390744 00000 n +0000390869 00000 n +0000390994 00000 n +0000391119 00000 n +0000391244 00000 n +0000391369 00000 n +0000391494 00000 n +0000391619 00000 n +0000391744 00000 n +0000391869 00000 n +0000391994 00000 n +0000392119 00000 n +0000392244 00000 n +0000392369 00000 n +0000392494 00000 n +0000392619 00000 n +0000392744 00000 n +0000392869 00000 n +0000392994 00000 n +0000393119 00000 n +0000393244 00000 n +0000393369 00000 n +0000393494 00000 n +0000393619 00000 n +0000393744 00000 n +0000393869 00000 n +0000393994 00000 n +0000394119 00000 n +0000394244 00000 n +0000394369 00000 n +0000394494 00000 n +0000394619 00000 n +0000394744 00000 n +0000394869 00000 n +0000394993 00000 n +0000395116 00000 n +0000395259 00000 n +0000397222 00000 n +0000397428 00000 n +0000397553 00000 n +0000397678 00000 n +0000397803 00000 n +0000397928 00000 n +0000398053 00000 n +0000398178 00000 n +0000398303 00000 n +0000398428 00000 n +0000398571 00000 n +0000399235 00000 n +0000399369 00000 n +0000399499 00000 n +0000399921 00000 n +0000400199 00000 n +0000400323 00000 n +0000400447 00000 n +0000400571 00000 n +0000400695 00000 n +0000400819 00000 n +0000400943 00000 n +0000401067 00000 n +0000401191 00000 n +0000401315 00000 n +0000401439 00000 n +0000401563 00000 n +0000401687 00000 n +0000401811 00000 n +0000401935 00000 n +0000402059 00000 n +0000402183 00000 n +0000402307 00000 n +0000402464 00000 n +0000405158 00000 n +0000405295 00000 n +0000405426 00000 n +0000405848 00000 n +0000406011 00000 n +0000406136 00000 n +0000406261 00000 n +0000406447 00000 n +0000407806 00000 n +0000407943 00000 n +0000408074 00000 n +0000408502 00000 n +0000408899 00000 n +0000409024 00000 n +0000409149 00000 n +0000409274 00000 n +0000409399 00000 n +0000409524 00000 n +0000409649 00000 n +0000409774 00000 n +0000409899 00000 n +0000410024 00000 n +0000410149 00000 n +0000410274 00000 n +0000410399 00000 n +0000410524 00000 n +0000410649 00000 n +0000410774 00000 n +0000410899 00000 n +0000411024 00000 n +0000411149 00000 n +0000411274 00000 n +0000411399 00000 n +0000411524 00000 n +0000411649 00000 n +0000411774 00000 n +0000411899 00000 n +0000412024 00000 n +0000412149 00000 n +0000412274 00000 n +0000412398 00000 n +0000412584 00000 n +0000416352 00000 n +0000416920 00000 n +0000417045 00000 n +0000417170 00000 n +0000417295 00000 n +0000417420 00000 n +0000417545 00000 n +0000417670 00000 n +0000417795 00000 n +0000417920 00000 n +0000418045 00000 n +0000418170 00000 n +0000418295 00000 n +0000418420 00000 n +0000418545 00000 n +0000418670 00000 n +0000418795 00000 n +0000418920 00000 n +0000419045 00000 n +0000419170 00000 n +0000419295 00000 n +0000419420 00000 n +0000419545 00000 n +0000419670 00000 n +0000419795 00000 n +0000419920 00000 n +0000420045 00000 n +0000420170 00000 n +0000420295 00000 n +0000420420 00000 n +0000420545 00000 n +0000420670 00000 n +0000420795 00000 n +0000420920 00000 n +0000421045 00000 n +0000421170 00000 n +0000421295 00000 n +0000421420 00000 n +0000421545 00000 n +0000421670 00000 n +0000421795 00000 n +0000421920 00000 n +0000422045 00000 n +0000422170 00000 n +0000422295 00000 n +0000422420 00000 n +0000422545 00000 n +0000422670 00000 n +0000422795 00000 n +0000422953 00000 n +0000427571 00000 n +0000428112 00000 n +0000428237 00000 n +0000428362 00000 n +0000428487 00000 n +0000428612 00000 n +0000428737 00000 n +0000428862 00000 n +0000428987 00000 n +0000429112 00000 n +0000429237 00000 n +0000429362 00000 n +0000429487 00000 n +0000429612 00000 n +0000429737 00000 n +0000429862 00000 n +0000429987 00000 n +0000430112 00000 n +0000430237 00000 n +0000430362 00000 n +0000430487 00000 n +0000430612 00000 n +0000430737 00000 n +0000430862 00000 n +0000430987 00000 n +0000431112 00000 n +0000431237 00000 n +0000431362 00000 n +0000431487 00000 n +0000431612 00000 n +0000431737 00000 n +0000431862 00000 n +0000431987 00000 n +0000432112 00000 n +0000432237 00000 n +0000432362 00000 n +0000432487 00000 n +0000432612 00000 n +0000432737 00000 n +0000432862 00000 n +0000432987 00000 n +0000433112 00000 n +0000433237 00000 n +0000433362 00000 n +0000433487 00000 n +0000433612 00000 n +0000433770 00000 n +0000438274 00000 n +0000438563 00000 n +0000438688 00000 n +0000438813 00000 n +0000438938 00000 n +0000439063 00000 n +0000439188 00000 n +0000439313 00000 n +0000439438 00000 n +0000439563 00000 n +0000439688 00000 n +0000439813 00000 n +0000439938 00000 n +0000440063 00000 n +0000440188 00000 n +0000440313 00000 n +0000440438 00000 n +0000440563 00000 n +0000440721 00000 n +0000443420 00000 n +0000443583 00000 n +0000443709 00000 n +0000443835 00000 n +0000444021 00000 n +0000445343 00000 n +0000445515 00000 n +0000445641 00000 n +0000445767 00000 n +0000445893 00000 n +0000446079 00000 n +0000447528 00000 n +0000447700 00000 n +0000447826 00000 n +0000447952 00000 n +0000448078 00000 n +0000448264 00000 n +0000449356 00000 n +0000449519 00000 n +0000449645 00000 n +0000449771 00000 n +0000449957 00000 n +0000451161 00000 n +0000451333 00000 n +0000451459 00000 n +0000451585 00000 n +0000451711 00000 n +0000451897 00000 n +0000453284 00000 n +0000453456 00000 n +0000453582 00000 n +0000453708 00000 n +0000453834 00000 n +0000454020 00000 n +0000455391 00000 n +0000455554 00000 n +0000455680 00000 n +0000455806 00000 n +0000455992 00000 n +0000457077 00000 n +0000457231 00000 n +0000457357 00000 n +0000457543 00000 n +0000458528 00000 n +0000458682 00000 n +0000458808 00000 n +0000458994 00000 n +0000460028 00000 n +0000460200 00000 n +0000460326 00000 n +0000460452 00000 n +0000460578 00000 n +0000460764 00000 n +0000462056 00000 n +0000462237 00000 n +0000462363 00000 n +0000462489 00000 n +0000462615 00000 n +0000462741 00000 n +0000462927 00000 n +0000464406 00000 n +0000464560 00000 n +0000464686 00000 n +0000464872 00000 n +0000465988 00000 n +0000466160 00000 n +0000466286 00000 n +0000466412 00000 n +0000466538 00000 n +0000466724 00000 n +0000468049 00000 n +0000468203 00000 n +0000468329 00000 n +0000468515 00000 n +0000469593 00000 n +0000469765 00000 n +0000469891 00000 n +0000470017 00000 n +0000470143 00000 n +0000470329 00000 n +0000471650 00000 n +0000471822 00000 n +0000471948 00000 n +0000472074 00000 n +0000472200 00000 n +0000472386 00000 n +0000473612 00000 n +0000473775 00000 n +0000473901 00000 n +0000474027 00000 n +0000474213 00000 n +0000475407 00000 n +0000475570 00000 n +0000475696 00000 n +0000475822 00000 n +0000476008 00000 n +0000477191 00000 n +0000477363 00000 n +0000477489 00000 n +0000477615 00000 n +0000477741 00000 n +0000477927 00000 n +0000479157 00000 n +0000479311 00000 n +0000479437 00000 n +0000479623 00000 n +0000480813 00000 n +0000480967 00000 n +0000481093 00000 n +0000481279 00000 n +0000482671 00000 n +0000482834 00000 n +0000482960 00000 n +0000483086 00000 n +0000483272 00000 n +0000484697 00000 n +0000484869 00000 n +0000484995 00000 n +0000485121 00000 n +0000485247 00000 n +0000485433 00000 n +0000486768 00000 n +0000486931 00000 n +0000487057 00000 n +0000487183 00000 n +0000487369 00000 n +0000488825 00000 n +0000488997 00000 n +0000489123 00000 n +0000489249 00000 n +0000489375 00000 n +0000489561 00000 n +0000491097 00000 n +0000491269 00000 n +0000491395 00000 n +0000491521 00000 n +0000491647 00000 n +0000491833 00000 n +0000493325 00000 n +0000493488 00000 n +0000493614 00000 n +0000493740 00000 n +0000493926 00000 n +0000495343 00000 n +0000495560 00000 n +0000495686 00000 n +0000495812 00000 n +0000495938 00000 n +0000496064 00000 n +0000496190 00000 n +0000496316 00000 n +0000496442 00000 n +0000496568 00000 n +0000496754 00000 n +0000498343 00000 n +0000498497 00000 n +0000498623 00000 n +0000498809 00000 n +0000500194 00000 n +0000500375 00000 n +0000500501 00000 n +0000500627 00000 n +0000500753 00000 n +0000500879 00000 n +0000501065 00000 n +0000502455 00000 n +0000502609 00000 n +0000502735 00000 n +0000502921 00000 n +0000503975 00000 n +0000504138 00000 n +0000504264 00000 n +0000504390 00000 n +0000504576 00000 n +0000505898 00000 n +0000506070 00000 n +0000506196 00000 n +0000506322 00000 n +0000506448 00000 n +0000506634 00000 n +0000508083 00000 n +0000508255 00000 n +0000508381 00000 n +0000508507 00000 n +0000508633 00000 n +0000508819 00000 n +0000510191 00000 n +0000510354 00000 n +0000510480 00000 n +0000510606 00000 n +0000510792 00000 n +0000511879 00000 n +0000512033 00000 n +0000512159 00000 n +0000512345 00000 n +0000513330 00000 n +0000513484 00000 n +0000513610 00000 n +0000513796 00000 n +0000514830 00000 n +0000515002 00000 n +0000515128 00000 n +0000515254 00000 n +0000515380 00000 n +0000515566 00000 n +0000516859 00000 n +0000517013 00000 n +0000517139 00000 n +0000517325 00000 n +0000518441 00000 n +0000518613 00000 n +0000518739 00000 n +0000518865 00000 n +0000518991 00000 n +0000519177 00000 n +0000520502 00000 n +0000520656 00000 n +0000520782 00000 n +0000520968 00000 n +0000522046 00000 n +0000522218 00000 n +0000522344 00000 n +0000522470 00000 n +0000522596 00000 n +0000522782 00000 n +0000524103 00000 n +0000524275 00000 n +0000524401 00000 n +0000524527 00000 n +0000524653 00000 n +0000524839 00000 n +0000526066 00000 n +0000526229 00000 n +0000526355 00000 n +0000526481 00000 n +0000526667 00000 n +0000527861 00000 n +0000528024 00000 n +0000528150 00000 n +0000528276 00000 n +0000528462 00000 n +0000529645 00000 n +0000529817 00000 n +0000529943 00000 n +0000530069 00000 n +0000530195 00000 n +0000530381 00000 n +0000531606 00000 n +0000531760 00000 n +0000531886 00000 n +0000532072 00000 n +0000533263 00000 n +0000533417 00000 n +0000533543 00000 n +0000533729 00000 n +0000535120 00000 n +0000535283 00000 n +0000535409 00000 n +0000535535 00000 n +0000535721 00000 n +0000537150 00000 n +0000537313 00000 n +0000537439 00000 n +0000537565 00000 n +0000537751 00000 n +0000539206 00000 n +0000539378 00000 n +0000539504 00000 n +0000539630 00000 n +0000539756 00000 n +0000539942 00000 n +0000541478 00000 n +0000541650 00000 n +0000541776 00000 n +0000541902 00000 n +0000542028 00000 n +0000542214 00000 n +0000543706 00000 n +0000543869 00000 n +0000543995 00000 n +0000544121 00000 n +0000544307 00000 n +0000545723 00000 n +0000545904 00000 n +0000546030 00000 n +0000546156 00000 n +0000546282 00000 n +0000546408 00000 n +0000546594 00000 n +0000548052 00000 n +0000548206 00000 n +0000548332 00000 n +0000548518 00000 n +0000549572 00000 n +0000549735 00000 n +0000549861 00000 n +0000549987 00000 n +0000550173 00000 n +0000551471 00000 n +0000551643 00000 n +0000551769 00000 n +0000551895 00000 n +0000552021 00000 n +0000552207 00000 n +0000553613 00000 n +0000553776 00000 n +0000553902 00000 n +0000554028 00000 n +0000554214 00000 n +0000555299 00000 n +0000555453 00000 n +0000555579 00000 n +0000555765 00000 n +0000556926 00000 n +0000557089 00000 n +0000557215 00000 n +0000557341 00000 n +0000557527 00000 n +0000558653 00000 n +0000558807 00000 n +0000558933 00000 n +0000559119 00000 n +0000560256 00000 n +0000560428 00000 n +0000560554 00000 n +0000560680 00000 n +0000560806 00000 n +0000560992 00000 n +0000562379 00000 n +0000562551 00000 n +0000562677 00000 n +0000562803 00000 n +0000562929 00000 n +0000563115 00000 n +0000564438 00000 n +0000564619 00000 n +0000564745 00000 n +0000564871 00000 n +0000564997 00000 n +0000565123 00000 n +0000565309 00000 n +0000566802 00000 n +0000566956 00000 n +0000567082 00000 n +0000567268 00000 n +0000568397 00000 n +0000568569 00000 n +0000568695 00000 n +0000568821 00000 n +0000568947 00000 n +0000569133 00000 n +0000570455 00000 n +0000570609 00000 n +0000570735 00000 n +0000570921 00000 n +0000572004 00000 n +0000572176 00000 n +0000572302 00000 n +0000572428 00000 n +0000572554 00000 n +0000572740 00000 n +0000574071 00000 n +0000574243 00000 n +0000574369 00000 n +0000574495 00000 n +0000574621 00000 n +0000574807 00000 n +0000576033 00000 n +0000576187 00000 n +0000576313 00000 n +0000576499 00000 n +0000577683 00000 n +0000577837 00000 n +0000577963 00000 n +0000578149 00000 n +0000579549 00000 n +0000579712 00000 n +0000579838 00000 n +0000579964 00000 n +0000580150 00000 n +0000581343 00000 n +0000581506 00000 n +0000581632 00000 n +0000581758 00000 n +0000581944 00000 n +0000583417 00000 n +0000583580 00000 n +0000583706 00000 n +0000583832 00000 n +0000584018 00000 n +0000585495 00000 n +0000585658 00000 n +0000585784 00000 n +0000585910 00000 n +0000586096 00000 n +0000587287 00000 n +0000587459 00000 n +0000587585 00000 n +0000587711 00000 n +0000587837 00000 n +0000588023 00000 n +0000589294 00000 n +0000589466 00000 n +0000589592 00000 n +0000589718 00000 n +0000589844 00000 n +0000590030 00000 n +0000591564 00000 n +0000591727 00000 n +0000591853 00000 n +0000591979 00000 n +0000592165 00000 n +0000593604 00000 n +0000593821 00000 n +0000593947 00000 n +0000594073 00000 n +0000594199 00000 n +0000594325 00000 n +0000594451 00000 n +0000594577 00000 n +0000594703 00000 n +0000594829 00000 n +0000595015 00000 n +0000596597 00000 n +0000596751 00000 n +0000596877 00000 n +0000597063 00000 n +0000598489 00000 n +0000598670 00000 n +0000598796 00000 n +0000598922 00000 n +0000599048 00000 n +0000599174 00000 n +0000599360 00000 n +0000600763 00000 n +0000600917 00000 n +0000601043 00000 n +0000601229 00000 n +0000602299 00000 n +0000602462 00000 n +0000602588 00000 n +0000602714 00000 n +0000602900 00000 n +0000604051 00000 n +0000604214 00000 n +0000604340 00000 n +0000604466 00000 n +0000604652 00000 n +0000605758 00000 n +0000605912 00000 n +0000606038 00000 n +0000606224 00000 n +0000607209 00000 n +0000607381 00000 n +0000607507 00000 n +0000607633 00000 n +0000607759 00000 n +0000607945 00000 n +0000609233 00000 n +0000609387 00000 n +0000609513 00000 n +0000609699 00000 n +0000610744 00000 n +0000610907 00000 n +0000611033 00000 n +0000611159 00000 n +0000611345 00000 n +0000612566 00000 n +0000612729 00000 n +0000612855 00000 n +0000612981 00000 n +0000613167 00000 n +0000614361 00000 n +0000614515 00000 n +0000614641 00000 n +0000614827 00000 n +0000615896 00000 n +0000616050 00000 n +0000616176 00000 n +0000616362 00000 n +0000617637 00000 n +0000617809 00000 n +0000617935 00000 n +0000618061 00000 n +0000618187 00000 n +0000618373 00000 n +0000619698 00000 n +0000619870 00000 n +0000619996 00000 n +0000620122 00000 n +0000620248 00000 n +0000620434 00000 n +0000622019 00000 n +0000622191 00000 n +0000622317 00000 n +0000622443 00000 n +0000622569 00000 n +0000622755 00000 n +0000624170 00000 n +0000624360 00000 n +0000624486 00000 n +0000624612 00000 n +0000624738 00000 n +0000624864 00000 n +0000624990 00000 n +0000625176 00000 n +0000626500 00000 n +0000626663 00000 n +0000626789 00000 n +0000626915 00000 n +0000627101 00000 n +0000628396 00000 n +0000628568 00000 n +0000628694 00000 n +0000628820 00000 n +0000628946 00000 n +0000629132 00000 n +0000630737 00000 n +0000630891 00000 n +0000631017 00000 n +0000631203 00000 n +0000632256 00000 n +0000632419 00000 n +0000632545 00000 n +0000632671 00000 n +0000632857 00000 n +0000634066 00000 n +0000634238 00000 n +0000634364 00000 n +0000634490 00000 n +0000634616 00000 n +0000634802 00000 n +0000636038 00000 n +0000636201 00000 n +0000636327 00000 n +0000636453 00000 n +0000636639 00000 n +0000637856 00000 n +0000638028 00000 n +0000638154 00000 n +0000638280 00000 n +0000638406 00000 n +0000638592 00000 n +0000640159 00000 n +0000640313 00000 n +0000640439 00000 n +0000640625 00000 n +0000641852 00000 n +0000642006 00000 n +0000642132 00000 n +0000642318 00000 n +0000643789 00000 n +0000643961 00000 n +0000644087 00000 n +0000644213 00000 n +0000644339 00000 n +0000644525 00000 n +0000646063 00000 n +0000646226 00000 n +0000646352 00000 n +0000646478 00000 n +0000646664 00000 n +0000647743 00000 n +0000647906 00000 n +0000648032 00000 n +0000648158 00000 n +0000648344 00000 n +0000649639 00000 n +0000649802 00000 n +0000649928 00000 n +0000650054 00000 n +0000650240 00000 n +0000652008 00000 n +0000652180 00000 n +0000652306 00000 n +0000652432 00000 n +0000652558 00000 n +0000652744 00000 n +0000654350 00000 n +0000654504 00000 n +0000654630 00000 n +0000654816 00000 n +0000655869 00000 n +0000656032 00000 n +0000656158 00000 n +0000656284 00000 n +0000656470 00000 n +0000657679 00000 n +0000657851 00000 n +0000657977 00000 n +0000658103 00000 n +0000658229 00000 n +0000658415 00000 n +0000659650 00000 n +0000659813 00000 n +0000659939 00000 n +0000660065 00000 n +0000660251 00000 n +0000661468 00000 n +0000661631 00000 n +0000661757 00000 n +0000661883 00000 n +0000662069 00000 n +0000663766 00000 n +0000663938 00000 n +0000664064 00000 n +0000664190 00000 n +0000664316 00000 n +0000664502 00000 n +0000666070 00000 n +0000666224 00000 n +0000666350 00000 n +0000666536 00000 n +0000667764 00000 n +0000667918 00000 n +0000668044 00000 n +0000668230 00000 n +0000669701 00000 n +0000669873 00000 n +0000669999 00000 n +0000670125 00000 n +0000670251 00000 n +0000670437 00000 n +0000671975 00000 n +0000672138 00000 n +0000672264 00000 n +0000672390 00000 n +0000672576 00000 n +0000673655 00000 n +0000673818 00000 n +0000673944 00000 n +0000674070 00000 n +0000674256 00000 n +0000675698 00000 n +0000675870 00000 n +0000675996 00000 n +0000676122 00000 n +0000676248 00000 n +0000676434 00000 n +0000678049 00000 n +0000678212 00000 n +0000678338 00000 n +0000678464 00000 n +0000678650 00000 n +0000679959 00000 n +0000680131 00000 n +0000680257 00000 n +0000680383 00000 n +0000680509 00000 n +0000680695 00000 n +0000682032 00000 n +0000682195 00000 n +0000682321 00000 n +0000682447 00000 n +0000682633 00000 n +0000684268 00000 n +0000684440 00000 n +0000684566 00000 n +0000684692 00000 n +0000684818 00000 n +0000685004 00000 n +0000686616 00000 n +0000686770 00000 n +0000686896 00000 n +0000687082 00000 n +0000688422 00000 n +0000688576 00000 n +0000688702 00000 n +0000688888 00000 n +0000690452 00000 n +0000690624 00000 n +0000690750 00000 n +0000690876 00000 n +0000691002 00000 n +0000691188 00000 n +0000692813 00000 n +0000692950 00000 n +0000693081 00000 n +0000693517 00000 n +0000693896 00000 n +0000694021 00000 n +0000694146 00000 n +0000694271 00000 n +0000694396 00000 n +0000694521 00000 n +0000694646 00000 n +0000694771 00000 n +0000694896 00000 n +0000695021 00000 n +0000695146 00000 n +0000695271 00000 n +0000695396 00000 n +0000695521 00000 n +0000695646 00000 n +0000695771 00000 n +0000695896 00000 n +0000696021 00000 n +0000696146 00000 n +0000696271 00000 n +0000696396 00000 n +0000696521 00000 n +0000696646 00000 n +0000696771 00000 n +0000696896 00000 n +0000697021 00000 n +0000697145 00000 n +0000697331 00000 n +0000701339 00000 n +0000701592 00000 n +0000701717 00000 n +0000701842 00000 n +0000701967 00000 n +0000702092 00000 n +0000702217 00000 n +0000702342 00000 n +0000702467 00000 n +0000702592 00000 n +0000702717 00000 n +0000702842 00000 n +0000702967 00000 n +0000703092 00000 n +0000703250 00000 n +0000705132 00000 n +0000705269 00000 n +0000705441 00000 n +0000706447 00000 n +0000706601 00000 n +0000706727 00000 n +0000706913 00000 n +0000707957 00000 n +0000708129 00000 n +0000708255 00000 n +0000708381 00000 n +0000708507 00000 n +0000708693 00000 n +0000709852 00000 n +0000710006 00000 n +0000710132 00000 n +0000710318 00000 n +0000711470 00000 n +0000711607 00000 n +0000711793 00000 n +0000712846 00000 n +0000713000 00000 n +0000713126 00000 n +0000713312 00000 n +0000714578 00000 n +0000714741 00000 n +0000714867 00000 n +0000714993 00000 n +0000715179 00000 n +0000716333 00000 n +0000716496 00000 n +0000716622 00000 n +0000716748 00000 n +0000716934 00000 n +0000718044 00000 n +0000718198 00000 n +0000718324 00000 n +0000718510 00000 n +0000719678 00000 n +0000719841 00000 n +0000719967 00000 n +0000720093 00000 n +0000720279 00000 n +0000721500 00000 n +0000721663 00000 n +0000721789 00000 n +0000721915 00000 n +0000722101 00000 n +0000723219 00000 n +0000723382 00000 n +0000723508 00000 n +0000723634 00000 n +0000723820 00000 n +0000725019 00000 n +0000725182 00000 n +0000725308 00000 n +0000725434 00000 n +0000725620 00000 n +0000726770 00000 n +0000726924 00000 n +0000727050 00000 n +0000727222 00000 n +0000728274 00000 n +0000728437 00000 n +0000728563 00000 n +0000728689 00000 n +0000728875 00000 n +0000730058 00000 n +0000730221 00000 n +0000730347 00000 n +0000730473 00000 n +0000730659 00000 n +0000731769 00000 n +0000731932 00000 n +0000732058 00000 n +0000732184 00000 n +0000732370 00000 n +0000733572 00000 n +0000733735 00000 n +0000733861 00000 n +0000733987 00000 n +0000734173 00000 n +0000735336 00000 n +0000735490 00000 n +0000735616 00000 n +0000735788 00000 n +0000737002 00000 n +0000737165 00000 n +0000737291 00000 n +0000737417 00000 n +0000737603 00000 n +0000738930 00000 n +0000739093 00000 n +0000739219 00000 n +0000739345 00000 n +0000739531 00000 n +0000740749 00000 n +0000740903 00000 n +0000741029 00000 n +0000741215 00000 n +0000742397 00000 n +0000742551 00000 n +0000742677 00000 n +0000742863 00000 n +0000744026 00000 n +0000744180 00000 n +0000744306 00000 n +0000744492 00000 n +0000745684 00000 n +0000745847 00000 n +0000745973 00000 n +0000746099 00000 n +0000746285 00000 n +0000747652 00000 n +0000747815 00000 n +0000747941 00000 n +0000748067 00000 n +0000748253 00000 n +0000749551 00000 n +0000749705 00000 n +0000749831 00000 n +0000750017 00000 n +0000751305 00000 n +0000751459 00000 n +0000751585 00000 n +0000751757 00000 n +0000752723 00000 n +0000752877 00000 n +0000753003 00000 n +0000753175 00000 n +0000754141 00000 n +0000754295 00000 n +0000754421 00000 n +0000754593 00000 n +0000755559 00000 n +0000755696 00000 n +0000755882 00000 n +0000757068 00000 n +0000757222 00000 n +0000757348 00000 n +0000757534 00000 n +0000758712 00000 n +0000758875 00000 n +0000759001 00000 n +0000759127 00000 n +0000759313 00000 n +0000760570 00000 n +0000760733 00000 n +0000760859 00000 n +0000760985 00000 n +0000761171 00000 n +0000762296 00000 n +0000762459 00000 n +0000762585 00000 n +0000762711 00000 n +0000762897 00000 n +0000764022 00000 n +0000764185 00000 n +0000764311 00000 n +0000764437 00000 n +0000764623 00000 n +0000765748 00000 n +0000765902 00000 n +0000766028 00000 n +0000766214 00000 n +0000767466 00000 n +0000767629 00000 n +0000767755 00000 n +0000767881 00000 n +0000768067 00000 n +0000769317 00000 n +0000769454 00000 n +0000769585 00000 n +0000770021 00000 n +0000770409 00000 n +0000770534 00000 n +0000770659 00000 n +0000770784 00000 n +0000770909 00000 n +0000771034 00000 n +0000771159 00000 n +0000771284 00000 n +0000771409 00000 n +0000771534 00000 n +0000771659 00000 n +0000771784 00000 n +0000771909 00000 n +0000772034 00000 n +0000772159 00000 n +0000772284 00000 n +0000772409 00000 n +0000772534 00000 n +0000772659 00000 n +0000772784 00000 n +0000772909 00000 n +0000773034 00000 n +0000773159 00000 n +0000773284 00000 n +0000773409 00000 n +0000773534 00000 n +0000773659 00000 n +0000773784 00000 n +0000773970 00000 n +0000778056 00000 n +0000778453 00000 n +0000778578 00000 n +0000778703 00000 n +0000778828 00000 n +0000778953 00000 n +0000779078 00000 n +0000779203 00000 n +0000779328 00000 n +0000779453 00000 n +0000779578 00000 n +0000779703 00000 n +0000779828 00000 n +0000779953 00000 n +0000780078 00000 n +0000780203 00000 n +0000780328 00000 n +0000780453 00000 n +0000780578 00000 n +0000780703 00000 n +0000780828 00000 n +0000780953 00000 n +0000781078 00000 n +0000781203 00000 n +0000781328 00000 n +0000781453 00000 n +0000781578 00000 n +0000781703 00000 n +0000781828 00000 n +0000781953 00000 n +0000782111 00000 n +0000785708 00000 n +0000785845 00000 n +0000786017 00000 n +0000787020 00000 n +0000787174 00000 n +0000787300 00000 n +0000787486 00000 n +0000788530 00000 n +0000788711 00000 n +0000788837 00000 n +0000788963 00000 n +0000789089 00000 n +0000789215 00000 n +0000789401 00000 n +0000790588 00000 n +0000790742 00000 n +0000790868 00000 n +0000791054 00000 n +0000792349 00000 n +0000792512 00000 n +0000792638 00000 n +0000792764 00000 n +0000792950 00000 n +0000794378 00000 n +0000794541 00000 n +0000794667 00000 n +0000794793 00000 n +0000794979 00000 n +0000796434 00000 n +0000796571 00000 n +0000796757 00000 n +0000797810 00000 n +0000797964 00000 n +0000798090 00000 n +0000798276 00000 n +0000799543 00000 n +0000799706 00000 n +0000799832 00000 n +0000799958 00000 n +0000800144 00000 n +0000801300 00000 n +0000801463 00000 n +0000801589 00000 n +0000801715 00000 n +0000801901 00000 n +0000803154 00000 n +0000803317 00000 n +0000803443 00000 n +0000803569 00000 n +0000803755 00000 n +0000805010 00000 n +0000805173 00000 n +0000805299 00000 n +0000805425 00000 n +0000805611 00000 n +0000806721 00000 n +0000806884 00000 n +0000807010 00000 n +0000807136 00000 n +0000807322 00000 n +0000808650 00000 n +0000808804 00000 n +0000808930 00000 n +0000809116 00000 n +0000810284 00000 n +0000810447 00000 n +0000810573 00000 n +0000810699 00000 n +0000810885 00000 n +0000812107 00000 n +0000812270 00000 n +0000812396 00000 n +0000812522 00000 n +0000812708 00000 n +0000813970 00000 n +0000814133 00000 n +0000814259 00000 n +0000814385 00000 n +0000814571 00000 n +0000815688 00000 n +0000815851 00000 n +0000815977 00000 n +0000816103 00000 n +0000816289 00000 n +0000817489 00000 n +0000817652 00000 n +0000817778 00000 n +0000817904 00000 n +0000818090 00000 n +0000819239 00000 n +0000819393 00000 n +0000819519 00000 n +0000819691 00000 n +0000820743 00000 n +0000820906 00000 n +0000821032 00000 n +0000821158 00000 n +0000821344 00000 n +0000822527 00000 n +0000822690 00000 n +0000822816 00000 n +0000822942 00000 n +0000823128 00000 n +0000824239 00000 n +0000824402 00000 n +0000824528 00000 n +0000824654 00000 n +0000824840 00000 n +0000826042 00000 n +0000826205 00000 n +0000826331 00000 n +0000826457 00000 n +0000826643 00000 n +0000827805 00000 n +0000827959 00000 n +0000828085 00000 n +0000828271 00000 n +0000829896 00000 n +0000830050 00000 n +0000830176 00000 n +0000830348 00000 n +0000831435 00000 n +0000831616 00000 n +0000831742 00000 n +0000831868 00000 n +0000831994 00000 n +0000832120 00000 n +0000832306 00000 n +0000833813 00000 n +0000833967 00000 n +0000834093 00000 n +0000834279 00000 n +0000835765 00000 n +0000835919 00000 n +0000836045 00000 n +0000836231 00000 n +0000837644 00000 n +0000837807 00000 n +0000837933 00000 n +0000838059 00000 n +0000838245 00000 n +0000839572 00000 n +0000839735 00000 n +0000839861 00000 n +0000839987 00000 n +0000840173 00000 n +0000841391 00000 n +0000841545 00000 n +0000841671 00000 n +0000841857 00000 n +0000843038 00000 n +0000843192 00000 n +0000843318 00000 n +0000843504 00000 n +0000844666 00000 n +0000844820 00000 n +0000844946 00000 n +0000845132 00000 n +0000846324 00000 n +0000846487 00000 n +0000846613 00000 n +0000846739 00000 n +0000846925 00000 n +0000848293 00000 n +0000848456 00000 n +0000848582 00000 n +0000848708 00000 n +0000848894 00000 n +0000850191 00000 n +0000850354 00000 n +0000850480 00000 n +0000850606 00000 n +0000850792 00000 n +0000852144 00000 n +0000852298 00000 n +0000852424 00000 n +0000852610 00000 n +0000853899 00000 n +0000854053 00000 n +0000854179 00000 n +0000854351 00000 n +0000855318 00000 n +0000855472 00000 n +0000855598 00000 n +0000855770 00000 n +0000856737 00000 n +0000856891 00000 n +0000857017 00000 n +0000857189 00000 n +0000858156 00000 n +0000858310 00000 n +0000858436 00000 n +0000858608 00000 n +0000859574 00000 n +0000859711 00000 n +0000859897 00000 n +0000861084 00000 n +0000861238 00000 n +0000861364 00000 n +0000861550 00000 n +0000862726 00000 n +0000862880 00000 n +0000863006 00000 n +0000863178 00000 n +0000864197 00000 n +0000864351 00000 n +0000864477 00000 n +0000864649 00000 n +0000865719 00000 n +0000865882 00000 n +0000866008 00000 n +0000866134 00000 n +0000866320 00000 n +0000867577 00000 n +0000867740 00000 n +0000867866 00000 n +0000867992 00000 n +0000868178 00000 n +0000869303 00000 n +0000869466 00000 n +0000869592 00000 n +0000869718 00000 n +0000869904 00000 n +0000871029 00000 n +0000871192 00000 n +0000871318 00000 n +0000871444 00000 n +0000871630 00000 n +0000872755 00000 n +0000872918 00000 n +0000873044 00000 n +0000873170 00000 n +0000873356 00000 n +0000874481 00000 n +0000874635 00000 n +0000874761 00000 n +0000874947 00000 n +0000876199 00000 n +0000876362 00000 n +0000876488 00000 n +0000876614 00000 n +0000876800 00000 n +0000878050 00000 n +0000878213 00000 n +0000878339 00000 n +0000878465 00000 n +0000878651 00000 n +0000879910 00000 n +0000880073 00000 n +0000880199 00000 n +0000880325 00000 n +0000880511 00000 n +0000881823 00000 n +0000881960 00000 n +0000882091 00000 n +0000882526 00000 n +0000882869 00000 n +0000882994 00000 n +0000883119 00000 n +0000883244 00000 n +0000883369 00000 n +0000883494 00000 n +0000883619 00000 n +0000883744 00000 n +0000883869 00000 n +0000883994 00000 n +0000884119 00000 n +0000884244 00000 n +0000884369 00000 n +0000884494 00000 n +0000884619 00000 n +0000884744 00000 n +0000884869 00000 n +0000884994 00000 n +0000885119 00000 n +0000885244 00000 n +0000885369 00000 n +0000885494 00000 n +0000885619 00000 n +0000885805 00000 n +0000889194 00000 n +0000889331 00000 n +0000889503 00000 n +0000890512 00000 n +0000890649 00000 n +0000890835 00000 n +0000891913 00000 n +0000892067 00000 n +0000892193 00000 n +0000892379 00000 n +0000893495 00000 n +0000893632 00000 n +0000893818 00000 n +0000894875 00000 n +0000895012 00000 n +0000895198 00000 n +0000896257 00000 n +0000896420 00000 n +0000896546 00000 n +0000896672 00000 n +0000896858 00000 n +0000898099 00000 n +0000898262 00000 n +0000898388 00000 n +0000898514 00000 n +0000898700 00000 n +0000899883 00000 n +0000900046 00000 n +0000900172 00000 n +0000900298 00000 n +0000900484 00000 n +0000901618 00000 n +0000901781 00000 n +0000901907 00000 n +0000902033 00000 n +0000902219 00000 n +0000903364 00000 n +0000903527 00000 n +0000903653 00000 n +0000903779 00000 n +0000903965 00000 n +0000905123 00000 n +0000905286 00000 n +0000905412 00000 n +0000905538 00000 n +0000905724 00000 n +0000906807 00000 n +0000906961 00000 n +0000907087 00000 n +0000907273 00000 n +0000908457 00000 n +0000908611 00000 n +0000908737 00000 n +0000908923 00000 n +0000910055 00000 n +0000910192 00000 n +0000910364 00000 n +0000911433 00000 n +0000911570 00000 n +0000911756 00000 n +0000912885 00000 n +0000913022 00000 n +0000913194 00000 n +0000914108 00000 n +0000914245 00000 n +0000914417 00000 n +0000915318 00000 n +0000915455 00000 n +0000915627 00000 n +0000916557 00000 n +0000916711 00000 n +0000916837 00000 n +0000917023 00000 n +0000918316 00000 n +0000918470 00000 n +0000918596 00000 n +0000918782 00000 n +0000919862 00000 n +0000920016 00000 n +0000920142 00000 n +0000920328 00000 n +0000921430 00000 n +0000921584 00000 n +0000921710 00000 n +0000921896 00000 n +0000922978 00000 n +0000923115 00000 n +0000923246 00000 n +0000923681 00000 n +0000924096 00000 n +0000924221 00000 n +0000924346 00000 n +0000924471 00000 n +0000924596 00000 n +0000924721 00000 n +0000924846 00000 n +0000924971 00000 n +0000925096 00000 n +0000925221 00000 n +0000925346 00000 n +0000925471 00000 n +0000925596 00000 n +0000925721 00000 n +0000925846 00000 n +0000925971 00000 n +0000926096 00000 n +0000926221 00000 n +0000926346 00000 n +0000926471 00000 n +0000926596 00000 n +0000926721 00000 n +0000926846 00000 n +0000926971 00000 n +0000927096 00000 n +0000927221 00000 n +0000927346 00000 n +0000927471 00000 n +0000927596 00000 n +0000927721 00000 n +0000927845 00000 n +0000928031 00000 n +0000932236 00000 n +0000932471 00000 n +0000932596 00000 n +0000932721 00000 n +0000932846 00000 n +0000932971 00000 n +0000933096 00000 n +0000933221 00000 n +0000933346 00000 n +0000933471 00000 n +0000933596 00000 n +0000933721 00000 n +0000933879 00000 n +0000935512 00000 n +0000935649 00000 n +0000935821 00000 n +0000936825 00000 n +0000936962 00000 n +0000937148 00000 n +0000938313 00000 n +0000938467 00000 n +0000938593 00000 n +0000938779 00000 n +0000940039 00000 n +0000940193 00000 n +0000940319 00000 n +0000940505 00000 n +0000941677 00000 n +0000941831 00000 n +0000941957 00000 n +0000942143 00000 n +0000943303 00000 n +0000943440 00000 n +0000943626 00000 n +0000944691 00000 n +0000944828 00000 n +0000945014 00000 n +0000946100 00000 n +0000946263 00000 n +0000946389 00000 n +0000946515 00000 n +0000946701 00000 n +0000947887 00000 n +0000948041 00000 n +0000948167 00000 n +0000948353 00000 n +0000949460 00000 n +0000949623 00000 n +0000949749 00000 n +0000949875 00000 n +0000950061 00000 n +0000951254 00000 n +0000951408 00000 n +0000951534 00000 n +0000951720 00000 n +0000952880 00000 n +0000953043 00000 n +0000953169 00000 n +0000953295 00000 n +0000953481 00000 n +0000954528 00000 n +0000954691 00000 n +0000954817 00000 n +0000954943 00000 n +0000955129 00000 n +0000956294 00000 n +0000956457 00000 n +0000956583 00000 n +0000956709 00000 n +0000956895 00000 n +0000958012 00000 n +0000958166 00000 n +0000958292 00000 n +0000958464 00000 n +0000959489 00000 n +0000959652 00000 n +0000959778 00000 n +0000959904 00000 n +0000960090 00000 n +0000961254 00000 n +0000961408 00000 n +0000961534 00000 n +0000961720 00000 n +0000962864 00000 n +0000963018 00000 n +0000963144 00000 n +0000963330 00000 n +0000964482 00000 n +0000964645 00000 n +0000964771 00000 n +0000964897 00000 n +0000965083 00000 n +0000966151 00000 n +0000966305 00000 n +0000966431 00000 n +0000966617 00000 n +0000967792 00000 n +0000967946 00000 n +0000968072 00000 n +0000968258 00000 n +0000969384 00000 n +0000969538 00000 n +0000969664 00000 n +0000969836 00000 n +0000970963 00000 n +0000971135 00000 n +0000971261 00000 n +0000971387 00000 n +0000971513 00000 n +0000971699 00000 n +0000973059 00000 n +0000973222 00000 n +0000973348 00000 n +0000973474 00000 n +0000973660 00000 n +0000974989 00000 n +0000975143 00000 n +0000975269 00000 n +0000975455 00000 n +0000976596 00000 n +0000976750 00000 n +0000976876 00000 n +0000977062 00000 n +0000978235 00000 n +0000978389 00000 n +0000978515 00000 n +0000978701 00000 n +0000979885 00000 n +0000980022 00000 n +0000980194 00000 n +0000981289 00000 n +0000981426 00000 n +0000981612 00000 n +0000982785 00000 n +0000982922 00000 n +0000983094 00000 n +0000983992 00000 n +0000984129 00000 n +0000984301 00000 n +0000985208 00000 n +0000985362 00000 n +0000985488 00000 n +0000985660 00000 n +0000986722 00000 n +0000986859 00000 n +0000987031 00000 n +0000987938 00000 n +0000988075 00000 n +0000988247 00000 n +0000989174 00000 n +0000989328 00000 n +0000989454 00000 n +0000989640 00000 n +0000990932 00000 n +0000991086 00000 n +0000991212 00000 n +0000991398 00000 n +0000992493 00000 n +0000992647 00000 n +0000992773 00000 n +0000992959 00000 n +0000994066 00000 n +0000994229 00000 n +0000994355 00000 n +0000994481 00000 n +0000994667 00000 n +0000995876 00000 n +0000996030 00000 n +0000996156 00000 n +0000996342 00000 n +0000997434 00000 n +0000997588 00000 n +0000997714 00000 n +0000997900 00000 n +0000998987 00000 n +0000999124 00000 n +0000999255 00000 n +0000999700 00000 n +0001000061 00000 n +0001000186 00000 n +0001000311 00000 n +0001000436 00000 n +0001000561 00000 n +0001000686 00000 n +0001000811 00000 n +0001000936 00000 n +0001001061 00000 n +0001001186 00000 n +0001001311 00000 n +0001001436 00000 n +0001001561 00000 n +0001001686 00000 n +0001001811 00000 n +0001001936 00000 n +0001002061 00000 n +0001002186 00000 n +0001002311 00000 n +0001002436 00000 n +0001002561 00000 n +0001002686 00000 n +0001002811 00000 n +0001002936 00000 n +0001003059 00000 n +0001003245 00000 n +0001007294 00000 n +0001007583 00000 n +0001007708 00000 n +0001007833 00000 n +0001007958 00000 n +0001008083 00000 n +0001008208 00000 n +0001008333 00000 n +0001008458 00000 n +0001008583 00000 n +0001008708 00000 n +0001008833 00000 n +0001008958 00000 n +0001009083 00000 n +0001009208 00000 n +0001009333 00000 n +0001009458 00000 n +0001009583 00000 n +0001009741 00000 n +0001012291 00000 n +0001012428 00000 n +0001012600 00000 n +0001013613 00000 n +0001013767 00000 n +0001013893 00000 n +0001014079 00000 n +0001015193 00000 n +0001015374 00000 n +0001015500 00000 n +0001015626 00000 n +0001015752 00000 n +0001015878 00000 n +0001016064 00000 n +0001017273 00000 n +0001017436 00000 n +0001017562 00000 n +0001017688 00000 n +0001017874 00000 n +0001019252 00000 n +0001019415 00000 n +0001019541 00000 n +0001019667 00000 n +0001019853 00000 n +0001021323 00000 n +0001021460 00000 n +0001021646 00000 n +0001022760 00000 n +0001022923 00000 n +0001023049 00000 n +0001023175 00000 n +0001023361 00000 n +0001024778 00000 n +0001024941 00000 n +0001025067 00000 n +0001025193 00000 n +0001025379 00000 n +0001026685 00000 n +0001026848 00000 n +0001026974 00000 n +0001027100 00000 n +0001027286 00000 n +0001028479 00000 n +0001028642 00000 n +0001028768 00000 n +0001028894 00000 n +0001029080 00000 n +0001030360 00000 n +0001030523 00000 n +0001030649 00000 n +0001030775 00000 n +0001030961 00000 n +0001032150 00000 n +0001032313 00000 n +0001032439 00000 n +0001032565 00000 n +0001032751 00000 n +0001033938 00000 n +0001034101 00000 n +0001034227 00000 n +0001034353 00000 n +0001034539 00000 n +0001035704 00000 n +0001035858 00000 n +0001035984 00000 n +0001036156 00000 n +0001037432 00000 n +0001037595 00000 n +0001037721 00000 n +0001037847 00000 n +0001038033 00000 n +0001039397 00000 n +0001039560 00000 n +0001039686 00000 n +0001039812 00000 n +0001039998 00000 n +0001041251 00000 n +0001041405 00000 n +0001041531 00000 n +0001041717 00000 n +0001042918 00000 n +0001043072 00000 n +0001043198 00000 n +0001043384 00000 n +0001044583 00000 n +0001044737 00000 n +0001044863 00000 n +0001045049 00000 n +0001046249 00000 n +0001046412 00000 n +0001046538 00000 n +0001046664 00000 n +0001046850 00000 n +0001048272 00000 n +0001048435 00000 n +0001048561 00000 n +0001048687 00000 n +0001048873 00000 n +0001050235 00000 n +0001050398 00000 n +0001050524 00000 n +0001050650 00000 n +0001050836 00000 n +0001052211 00000 n +0001052365 00000 n +0001052491 00000 n +0001052677 00000 n +0001053975 00000 n +0001054129 00000 n +0001054255 00000 n +0001054427 00000 n +0001055436 00000 n +0001055590 00000 n +0001055716 00000 n +0001055888 00000 n +0001056897 00000 n +0001057051 00000 n +0001057177 00000 n +0001057349 00000 n +0001058358 00000 n +0001058512 00000 n +0001058638 00000 n +0001058810 00000 n +0001059819 00000 n +0001059956 00000 n +0001060142 00000 n +0001061379 00000 n +0001061533 00000 n +0001061659 00000 n +0001061845 00000 n +0001063047 00000 n +0001063201 00000 n +0001063327 00000 n +0001063499 00000 n +0001064533 00000 n +0001064687 00000 n +0001064813 00000 n +0001064985 00000 n +0001066061 00000 n +0001066224 00000 n +0001066350 00000 n +0001066476 00000 n +0001066662 00000 n +0001068001 00000 n +0001068164 00000 n +0001068290 00000 n +0001068416 00000 n +0001068602 00000 n +0001069802 00000 n +0001069965 00000 n +0001070091 00000 n +0001070217 00000 n +0001070403 00000 n +0001071603 00000 n +0001071766 00000 n +0001071892 00000 n +0001072018 00000 n +0001072204 00000 n +0001073403 00000 n +0001073566 00000 n +0001073692 00000 n +0001073818 00000 n +0001074004 00000 n +0001075203 00000 n +0001075357 00000 n +0001075483 00000 n +0001075669 00000 n +0001076983 00000 n +0001077146 00000 n +0001077272 00000 n +0001077398 00000 n +0001077584 00000 n +0001078897 00000 n +0001079060 00000 n +0001079186 00000 n +0001079312 00000 n +0001079498 00000 n +0001080677 00000 n +0001080840 00000 n +0001080966 00000 n +0001081092 00000 n +0001081278 00000 n +0001082567 00000 n +0001082704 00000 n +0001082835 00000 n +0001083269 00000 n +0001083684 00000 n +0001083809 00000 n +0001083934 00000 n +0001084059 00000 n +0001084184 00000 n +0001084309 00000 n +0001084434 00000 n +0001084559 00000 n +0001084684 00000 n +0001084809 00000 n +0001084934 00000 n +0001085059 00000 n +0001085184 00000 n +0001085309 00000 n +0001085434 00000 n +0001085559 00000 n +0001085684 00000 n +0001085809 00000 n +0001085934 00000 n +0001086059 00000 n +0001086184 00000 n +0001086309 00000 n +0001086434 00000 n +0001086559 00000 n +0001086684 00000 n +0001086809 00000 n +0001086934 00000 n +0001087059 00000 n +0001087184 00000 n +0001087309 00000 n +0001087434 00000 n +0001087620 00000 n +0001091599 00000 n +0001091736 00000 n +0001091908 00000 n +0001092908 00000 n +0001093045 00000 n +0001093231 00000 n +0001094304 00000 n +0001094458 00000 n +0001094584 00000 n +0001094770 00000 n +0001095889 00000 n +0001096026 00000 n +0001096212 00000 n +0001097260 00000 n +0001097397 00000 n +0001097583 00000 n +0001098652 00000 n +0001098806 00000 n +0001098932 00000 n +0001099118 00000 n +0001100350 00000 n +0001100504 00000 n +0001100630 00000 n +0001100816 00000 n +0001101970 00000 n +0001102133 00000 n +0001102259 00000 n +0001102385 00000 n +0001102571 00000 n +0001103631 00000 n +0001103794 00000 n +0001103920 00000 n +0001104046 00000 n +0001104232 00000 n +0001105357 00000 n +0001105520 00000 n +0001105646 00000 n +0001105772 00000 n +0001105958 00000 n +0001107127 00000 n +0001107290 00000 n +0001107416 00000 n +0001107542 00000 n +0001107728 00000 n +0001108840 00000 n +0001108994 00000 n +0001109120 00000 n +0001109292 00000 n +0001110296 00000 n +0001110459 00000 n +0001110585 00000 n +0001110711 00000 n +0001110897 00000 n +0001112036 00000 n +0001112190 00000 n +0001112316 00000 n +0001112502 00000 n +0001113577 00000 n +0001113731 00000 n +0001113857 00000 n +0001114043 00000 n +0001115185 00000 n +0001115348 00000 n +0001115474 00000 n +0001115600 00000 n +0001115786 00000 n +0001116835 00000 n +0001116989 00000 n +0001117115 00000 n +0001117301 00000 n +0001118483 00000 n +0001118637 00000 n +0001118763 00000 n +0001118949 00000 n +0001120085 00000 n +0001120239 00000 n +0001120365 00000 n +0001120537 00000 n +0001121610 00000 n +0001121764 00000 n +0001121890 00000 n +0001122062 00000 n +0001123005 00000 n +0001123159 00000 n +0001123285 00000 n +0001123457 00000 n +0001124404 00000 n +0001124541 00000 n +0001124713 00000 n +0001125773 00000 n +0001125910 00000 n +0001126096 00000 n +0001127223 00000 n +0001127360 00000 n +0001127532 00000 n +0001128429 00000 n +0001128566 00000 n +0001128738 00000 n +0001129633 00000 n +0001129770 00000 n +0001129942 00000 n +0001130877 00000 n +0001131031 00000 n +0001131157 00000 n +0001131343 00000 n +0001132589 00000 n +0001132743 00000 n +0001132869 00000 n +0001133055 00000 n +0001134140 00000 n +0001134294 00000 n +0001134420 00000 n +0001134606 00000 n +0001135700 00000 n +0001135854 00000 n +0001135980 00000 n +0001136166 00000 n +0001137248 00000 n +0001137385 00000 n +0001137516 00000 n +0001137951 00000 n +0001138366 00000 n +0001138491 00000 n +0001138616 00000 n +0001138741 00000 n +0001138866 00000 n +0001138991 00000 n +0001139116 00000 n +0001139241 00000 n +0001139366 00000 n +0001139491 00000 n +0001139616 00000 n +0001139741 00000 n +0001139866 00000 n +0001139991 00000 n +0001140116 00000 n +0001140241 00000 n +0001140366 00000 n +0001140491 00000 n +0001140616 00000 n +0001140741 00000 n +0001140866 00000 n +0001140991 00000 n +0001141116 00000 n +0001141241 00000 n +0001141366 00000 n +0001141491 00000 n +0001141616 00000 n +0001141741 00000 n +0001141866 00000 n +0001141991 00000 n +0001142115 00000 n +0001142301 00000 n +0001146403 00000 n +0001146611 00000 n +0001146736 00000 n +0001146861 00000 n +0001146986 00000 n +0001147111 00000 n +0001147236 00000 n +0001147361 00000 n +0001147486 00000 n +0001147644 00000 n +0001148934 00000 n +0001149071 00000 n +0001149243 00000 n +0001150243 00000 n +0001150380 00000 n +0001150566 00000 n +0001151705 00000 n +0001151859 00000 n +0001151985 00000 n +0001152171 00000 n +0001153398 00000 n +0001153552 00000 n +0001153678 00000 n +0001153864 00000 n +0001155019 00000 n +0001155173 00000 n +0001155299 00000 n +0001155485 00000 n +0001156635 00000 n +0001156789 00000 n +0001156915 00000 n +0001157101 00000 n +0001158226 00000 n +0001158363 00000 n +0001158549 00000 n +0001159597 00000 n +0001159734 00000 n +0001159920 00000 n +0001160988 00000 n +0001161142 00000 n +0001161268 00000 n +0001161454 00000 n +0001162690 00000 n +0001162844 00000 n +0001162970 00000 n +0001163156 00000 n +0001164310 00000 n +0001164473 00000 n +0001164599 00000 n +0001164725 00000 n +0001164911 00000 n +0001165971 00000 n +0001166134 00000 n +0001166260 00000 n +0001166386 00000 n +0001166572 00000 n +0001167740 00000 n +0001167903 00000 n +0001168029 00000 n +0001168155 00000 n +0001168341 00000 n +0001169454 00000 n +0001169608 00000 n +0001169734 00000 n +0001169906 00000 n +0001170910 00000 n +0001171073 00000 n +0001171199 00000 n +0001171325 00000 n +0001171511 00000 n +0001172650 00000 n +0001172804 00000 n +0001172930 00000 n +0001173116 00000 n +0001174191 00000 n +0001174345 00000 n +0001174471 00000 n +0001174657 00000 n +0001175799 00000 n +0001175962 00000 n +0001176088 00000 n +0001176214 00000 n +0001176400 00000 n +0001177449 00000 n +0001177603 00000 n +0001177729 00000 n +0001177915 00000 n +0001179097 00000 n +0001179251 00000 n +0001179377 00000 n +0001179563 00000 n +0001180699 00000 n +0001180853 00000 n +0001180979 00000 n +0001181151 00000 n +0001182227 00000 n +0001182381 00000 n +0001182507 00000 n +0001182679 00000 n +0001183623 00000 n +0001183777 00000 n +0001183903 00000 n +0001184075 00000 n +0001185021 00000 n +0001185175 00000 n +0001185301 00000 n +0001185473 00000 n +0001186421 00000 n +0001186558 00000 n +0001186730 00000 n +0001187792 00000 n +0001187929 00000 n +0001188115 00000 n +0001189295 00000 n +0001189432 00000 n +0001189604 00000 n +0001190482 00000 n +0001190619 00000 n +0001190791 00000 n +0001191689 00000 n +0001191843 00000 n +0001191969 00000 n +0001192141 00000 n +0001193215 00000 n +0001193352 00000 n +0001193524 00000 n +0001194420 00000 n +0001194557 00000 n +0001194729 00000 n +0001195666 00000 n +0001195820 00000 n +0001195946 00000 n +0001196132 00000 n +0001197429 00000 n +0001197583 00000 n +0001197709 00000 n +0001197895 00000 n +0001198976 00000 n +0001199130 00000 n +0001199256 00000 n +0001199442 00000 n +0001200526 00000 n +0001200689 00000 n +0001200815 00000 n +0001200941 00000 n +0001201127 00000 n +0001202310 00000 n +0001202464 00000 n +0001202590 00000 n +0001202776 00000 n +0001203870 00000 n +0001204024 00000 n +0001204150 00000 n +0001204336 00000 n +0001205418 00000 n +0001205555 00000 n +0001205686 00000 n +0001206115 00000 n +0001206512 00000 n +0001206637 00000 n +0001206762 00000 n +0001206887 00000 n +0001207012 00000 n +0001207137 00000 n +0001207262 00000 n +0001207387 00000 n +0001207512 00000 n +0001207637 00000 n +0001207762 00000 n +0001207887 00000 n +0001208012 00000 n +0001208137 00000 n +0001208262 00000 n +0001208387 00000 n +0001208512 00000 n +0001208637 00000 n +0001208762 00000 n +0001208887 00000 n +0001209012 00000 n +0001209137 00000 n +0001209262 00000 n +0001209387 00000 n +0001209512 00000 n +0001209637 00000 n +0001209762 00000 n +0001209887 00000 n +0001210011 00000 n +0001210197 00000 n +0001213997 00000 n +0001214565 00000 n +0001214690 00000 n +0001214815 00000 n +0001214940 00000 n +0001215065 00000 n +0001215190 00000 n +0001215315 00000 n +0001215440 00000 n +0001215565 00000 n +0001215690 00000 n +0001215815 00000 n +0001215940 00000 n +0001216065 00000 n +0001216190 00000 n +0001216315 00000 n +0001216440 00000 n +0001216565 00000 n +0001216690 00000 n +0001216815 00000 n +0001216940 00000 n +0001217065 00000 n +0001217190 00000 n +0001217315 00000 n +0001217440 00000 n +0001217565 00000 n +0001217690 00000 n +0001217815 00000 n +0001217940 00000 n +0001218065 00000 n +0001218190 00000 n +0001218315 00000 n +0001218440 00000 n +0001218565 00000 n +0001218690 00000 n +0001218815 00000 n +0001218940 00000 n +0001219065 00000 n +0001219190 00000 n +0001219315 00000 n +0001219440 00000 n +0001219565 00000 n +0001219690 00000 n +0001219815 00000 n +0001219940 00000 n +0001220065 00000 n +0001220190 00000 n +0001220315 00000 n +0001220440 00000 n +0001220598 00000 n +0001225217 00000 n +0001225776 00000 n +0001225901 00000 n +0001226026 00000 n +0001226151 00000 n +0001226276 00000 n +0001226401 00000 n +0001226526 00000 n +0001226651 00000 n +0001226776 00000 n +0001226901 00000 n +0001227026 00000 n +0001227151 00000 n +0001227276 00000 n +0001227401 00000 n +0001227526 00000 n +0001227651 00000 n +0001227776 00000 n +0001227901 00000 n +0001228026 00000 n +0001228151 00000 n +0001228276 00000 n +0001228401 00000 n +0001228526 00000 n +0001228651 00000 n +0001228776 00000 n +0001228901 00000 n +0001229026 00000 n +0001229151 00000 n +0001229276 00000 n +0001229401 00000 n +0001229526 00000 n +0001229651 00000 n +0001229776 00000 n +0001229901 00000 n +0001230026 00000 n +0001230151 00000 n +0001230276 00000 n +0001230401 00000 n +0001230526 00000 n +0001230651 00000 n +0001230776 00000 n +0001230901 00000 n +0001231026 00000 n +0001231151 00000 n +0001231276 00000 n +0001231400 00000 n +0001231523 00000 n +0001231681 00000 n +0001236445 00000 n +0001236698 00000 n +0001236823 00000 n +0001236948 00000 n +0001237073 00000 n +0001237198 00000 n +0001237323 00000 n +0001237448 00000 n +0001237573 00000 n +0001237698 00000 n +0001237823 00000 n +0001237948 00000 n +0001238073 00000 n +0001238198 00000 n +0001238356 00000 n +0001240394 00000 n +0001240557 00000 n +0001240683 00000 n +0001240809 00000 n +0001240995 00000 n +0001242318 00000 n +0001242490 00000 n +0001242616 00000 n +0001242742 00000 n +0001242868 00000 n +0001243054 00000 n +0001244506 00000 n +0001244678 00000 n +0001244804 00000 n +0001244930 00000 n +0001245056 00000 n +0001245242 00000 n +0001246335 00000 n +0001246498 00000 n +0001246624 00000 n +0001246750 00000 n +0001246936 00000 n +0001248145 00000 n +0001248317 00000 n +0001248443 00000 n +0001248569 00000 n +0001248695 00000 n +0001248881 00000 n +0001250250 00000 n +0001250422 00000 n +0001250548 00000 n +0001250674 00000 n +0001250800 00000 n +0001250986 00000 n +0001252361 00000 n +0001252524 00000 n +0001252650 00000 n +0001252776 00000 n +0001252962 00000 n +0001254053 00000 n +0001254207 00000 n +0001254333 00000 n +0001254519 00000 n +0001255512 00000 n +0001255666 00000 n +0001255792 00000 n +0001255978 00000 n +0001257021 00000 n +0001257193 00000 n +0001257319 00000 n +0001257445 00000 n +0001257571 00000 n +0001257757 00000 n +0001259054 00000 n +0001259208 00000 n +0001259334 00000 n +0001259520 00000 n +0001260897 00000 n +0001261051 00000 n +0001261177 00000 n +0001261363 00000 n +0001262484 00000 n +0001262656 00000 n +0001262782 00000 n +0001262908 00000 n +0001263034 00000 n +0001263220 00000 n +0001264550 00000 n +0001264704 00000 n +0001264830 00000 n +0001265016 00000 n +0001266099 00000 n +0001266271 00000 n +0001266397 00000 n +0001266523 00000 n +0001266649 00000 n +0001266835 00000 n +0001268159 00000 n +0001268331 00000 n +0001268457 00000 n +0001268583 00000 n +0001268709 00000 n +0001268895 00000 n +0001270122 00000 n +0001270285 00000 n +0001270411 00000 n +0001270537 00000 n +0001270723 00000 n +0001271920 00000 n +0001272083 00000 n +0001272209 00000 n +0001272335 00000 n +0001272521 00000 n +0001273708 00000 n +0001273880 00000 n +0001274006 00000 n +0001274132 00000 n +0001274258 00000 n +0001274444 00000 n +0001275673 00000 n +0001275827 00000 n +0001275953 00000 n +0001276139 00000 n +0001277337 00000 n +0001277491 00000 n +0001277617 00000 n +0001277803 00000 n +0001279199 00000 n +0001279362 00000 n +0001279488 00000 n +0001279614 00000 n +0001279800 00000 n +0001281232 00000 n +0001281404 00000 n +0001281530 00000 n +0001281656 00000 n +0001281782 00000 n +0001281968 00000 n +0001283209 00000 n +0001283372 00000 n +0001283498 00000 n +0001283624 00000 n +0001283810 00000 n +0001285271 00000 n +0001285443 00000 n +0001285569 00000 n +0001285695 00000 n +0001285821 00000 n +0001286007 00000 n +0001288074 00000 n +0001288246 00000 n +0001288372 00000 n +0001288498 00000 n +0001288624 00000 n +0001288810 00000 n +0001290306 00000 n +0001290469 00000 n +0001290595 00000 n +0001290721 00000 n +0001290907 00000 n +0001292326 00000 n +0001292489 00000 n +0001292615 00000 n +0001292741 00000 n +0001292927 00000 n +0001294484 00000 n +0001294638 00000 n +0001294764 00000 n +0001294950 00000 n +0001296253 00000 n +0001296407 00000 n +0001296533 00000 n +0001296719 00000 n +0001297782 00000 n +0001297945 00000 n +0001298071 00000 n +0001298197 00000 n +0001298383 00000 n +0001299706 00000 n +0001299878 00000 n +0001300004 00000 n +0001300130 00000 n +0001300256 00000 n +0001300442 00000 n +0001301896 00000 n +0001302068 00000 n +0001302194 00000 n +0001302320 00000 n +0001302446 00000 n +0001302632 00000 n +0001304007 00000 n +0001304170 00000 n +0001304296 00000 n +0001304422 00000 n +0001304608 00000 n +0001305699 00000 n +0001305853 00000 n +0001305979 00000 n +0001306165 00000 n +0001307160 00000 n +0001307314 00000 n +0001307440 00000 n +0001307626 00000 n +0001308670 00000 n +0001308842 00000 n +0001308968 00000 n +0001309094 00000 n +0001309220 00000 n +0001309406 00000 n +0001310703 00000 n +0001310857 00000 n +0001310983 00000 n +0001311169 00000 n +0001312290 00000 n +0001312462 00000 n +0001312588 00000 n +0001312714 00000 n +0001312840 00000 n +0001313026 00000 n +0001314357 00000 n +0001314511 00000 n +0001314637 00000 n +0001314823 00000 n +0001315906 00000 n +0001316078 00000 n +0001316204 00000 n +0001316330 00000 n +0001316456 00000 n +0001316642 00000 n +0001317968 00000 n +0001318140 00000 n +0001318266 00000 n +0001318392 00000 n +0001318518 00000 n +0001318704 00000 n +0001319930 00000 n +0001320093 00000 n +0001320219 00000 n +0001320345 00000 n +0001320531 00000 n +0001321730 00000 n +0001321893 00000 n +0001322019 00000 n +0001322145 00000 n +0001322331 00000 n +0001323518 00000 n +0001323690 00000 n +0001323816 00000 n +0001323942 00000 n +0001324068 00000 n +0001324254 00000 n +0001325484 00000 n +0001325638 00000 n +0001325764 00000 n +0001325950 00000 n +0001327149 00000 n +0001327303 00000 n +0001327429 00000 n +0001327615 00000 n +0001329011 00000 n +0001329174 00000 n +0001329300 00000 n +0001329426 00000 n +0001329612 00000 n +0001331043 00000 n +0001331206 00000 n +0001331332 00000 n +0001331458 00000 n +0001331644 00000 n +0001333105 00000 n +0001333277 00000 n +0001333403 00000 n +0001333529 00000 n +0001333655 00000 n +0001333841 00000 n +0001335907 00000 n +0001336079 00000 n +0001336205 00000 n +0001336331 00000 n +0001336457 00000 n +0001336643 00000 n +0001338141 00000 n +0001338304 00000 n +0001338430 00000 n +0001338556 00000 n +0001338742 00000 n +0001340160 00000 n +0001340314 00000 n +0001340440 00000 n +0001340626 00000 n +0001342089 00000 n +0001342243 00000 n +0001342369 00000 n +0001342555 00000 n +0001343619 00000 n +0001343782 00000 n +0001343908 00000 n +0001344034 00000 n +0001344220 00000 n +0001345525 00000 n +0001345697 00000 n +0001345823 00000 n +0001345949 00000 n +0001346075 00000 n +0001346261 00000 n +0001347668 00000 n +0001347831 00000 n +0001347957 00000 n +0001348083 00000 n +0001348269 00000 n +0001349361 00000 n +0001349515 00000 n +0001349641 00000 n +0001349827 00000 n +0001350995 00000 n +0001351158 00000 n +0001351284 00000 n +0001351410 00000 n +0001351596 00000 n +0001352725 00000 n +0001352879 00000 n +0001353005 00000 n +0001353191 00000 n +0001354336 00000 n +0001354508 00000 n +0001354634 00000 n +0001354760 00000 n +0001354886 00000 n +0001355072 00000 n +0001356461 00000 n +0001356633 00000 n +0001356759 00000 n +0001356885 00000 n +0001357011 00000 n +0001357197 00000 n +0001358525 00000 n +0001358679 00000 n +0001358805 00000 n +0001358991 00000 n +0001360423 00000 n +0001360577 00000 n +0001360703 00000 n +0001360889 00000 n +0001362027 00000 n +0001362199 00000 n +0001362325 00000 n +0001362451 00000 n +0001362577 00000 n +0001362763 00000 n +0001364088 00000 n +0001364242 00000 n +0001364368 00000 n +0001364554 00000 n +0001365644 00000 n +0001365816 00000 n +0001365942 00000 n +0001366068 00000 n +0001366194 00000 n +0001366380 00000 n +0001367720 00000 n +0001367892 00000 n +0001368018 00000 n +0001368144 00000 n +0001368270 00000 n +0001368456 00000 n +0001369683 00000 n +0001369837 00000 n +0001369963 00000 n +0001370149 00000 n +0001371337 00000 n +0001371491 00000 n +0001371617 00000 n +0001371803 00000 n +0001373208 00000 n +0001373371 00000 n +0001373497 00000 n +0001373623 00000 n +0001373809 00000 n +0001375005 00000 n +0001375168 00000 n +0001375294 00000 n +0001375420 00000 n +0001375606 00000 n +0001377084 00000 n +0001377247 00000 n +0001377373 00000 n +0001377499 00000 n +0001377685 00000 n +0001379165 00000 n +0001379328 00000 n +0001379454 00000 n +0001379580 00000 n +0001379766 00000 n +0001380959 00000 n +0001381131 00000 n +0001381257 00000 n +0001381383 00000 n +0001381509 00000 n +0001381695 00000 n +0001382969 00000 n +0001383141 00000 n +0001383267 00000 n +0001383393 00000 n +0001383519 00000 n +0001383705 00000 n +0001385800 00000 n +0001385963 00000 n +0001386089 00000 n +0001386215 00000 n +0001386401 00000 n +0001387842 00000 n +0001388005 00000 n +0001388131 00000 n +0001388257 00000 n +0001388443 00000 n +0001390013 00000 n +0001390167 00000 n +0001390293 00000 n +0001390479 00000 n +0001391794 00000 n +0001391948 00000 n +0001392074 00000 n +0001392260 00000 n +0001393329 00000 n +0001393492 00000 n +0001393618 00000 n +0001393744 00000 n +0001393930 00000 n +0001395078 00000 n +0001395241 00000 n +0001395367 00000 n +0001395493 00000 n +0001395679 00000 n +0001396787 00000 n +0001396941 00000 n +0001397067 00000 n +0001397253 00000 n +0001398237 00000 n +0001398409 00000 n +0001398535 00000 n +0001398661 00000 n +0001398787 00000 n +0001398973 00000 n +0001400256 00000 n +0001400410 00000 n +0001400536 00000 n +0001400722 00000 n +0001401767 00000 n +0001401930 00000 n +0001402056 00000 n +0001402182 00000 n +0001402368 00000 n +0001403587 00000 n +0001403750 00000 n +0001403876 00000 n +0001404002 00000 n +0001404188 00000 n +0001405378 00000 n +0001405532 00000 n +0001405658 00000 n +0001405844 00000 n +0001406917 00000 n +0001407071 00000 n +0001407197 00000 n +0001407383 00000 n +0001408656 00000 n +0001408828 00000 n +0001408954 00000 n +0001409080 00000 n +0001409206 00000 n +0001409392 00000 n +0001410718 00000 n +0001410890 00000 n +0001411016 00000 n +0001411142 00000 n +0001411268 00000 n +0001411454 00000 n +0001413461 00000 n +0001413633 00000 n +0001413759 00000 n +0001413885 00000 n +0001414011 00000 n +0001414197 00000 n +0001415616 00000 n +0001415806 00000 n +0001415932 00000 n +0001416058 00000 n +0001416184 00000 n +0001416310 00000 n +0001416436 00000 n +0001416622 00000 n +0001417949 00000 n +0001418112 00000 n +0001418238 00000 n +0001418364 00000 n +0001418550 00000 n +0001419845 00000 n +0001420017 00000 n +0001420143 00000 n +0001420269 00000 n +0001420395 00000 n +0001420581 00000 n +0001422168 00000 n +0001422322 00000 n +0001422448 00000 n +0001422634 00000 n +0001423692 00000 n +0001423855 00000 n +0001423981 00000 n +0001424107 00000 n +0001424293 00000 n +0001425502 00000 n +0001425674 00000 n +0001425800 00000 n +0001425926 00000 n +0001426052 00000 n +0001426238 00000 n +0001427473 00000 n +0001427636 00000 n +0001427762 00000 n +0001427888 00000 n +0001428074 00000 n +0001429294 00000 n +0001429466 00000 n +0001429592 00000 n +0001429718 00000 n +0001429844 00000 n +0001430030 00000 n +0001431578 00000 n +0001431732 00000 n +0001431858 00000 n +0001432044 00000 n +0001433272 00000 n +0001433426 00000 n +0001433552 00000 n +0001433738 00000 n +0001435209 00000 n +0001435381 00000 n +0001435507 00000 n +0001435633 00000 n +0001435759 00000 n +0001435945 00000 n +0001438026 00000 n +0001438189 00000 n +0001438315 00000 n +0001438441 00000 n +0001438627 00000 n +0001439706 00000 n +0001439869 00000 n +0001439995 00000 n +0001440121 00000 n +0001440307 00000 n +0001441603 00000 n +0001441766 00000 n +0001441892 00000 n +0001442018 00000 n +0001442204 00000 n +0001443972 00000 n +0001444144 00000 n +0001444270 00000 n +0001444396 00000 n +0001444522 00000 n +0001444708 00000 n +0001446296 00000 n +0001446450 00000 n +0001446576 00000 n +0001446762 00000 n +0001447820 00000 n +0001447983 00000 n +0001448109 00000 n +0001448235 00000 n +0001448421 00000 n +0001449630 00000 n +0001449802 00000 n +0001449928 00000 n +0001450054 00000 n +0001450180 00000 n +0001450366 00000 n +0001451601 00000 n +0001451764 00000 n +0001451890 00000 n +0001452016 00000 n +0001452202 00000 n +0001453422 00000 n +0001453585 00000 n +0001453711 00000 n +0001453837 00000 n +0001454023 00000 n +0001455720 00000 n +0001455892 00000 n +0001456018 00000 n +0001456144 00000 n +0001456270 00000 n +0001456456 00000 n +0001458005 00000 n +0001458159 00000 n +0001458285 00000 n +0001458471 00000 n +0001459699 00000 n +0001459853 00000 n +0001459979 00000 n +0001460165 00000 n +0001461635 00000 n +0001461807 00000 n +0001461933 00000 n +0001462059 00000 n +0001462185 00000 n +0001462371 00000 n +0001464450 00000 n +0001464613 00000 n +0001464739 00000 n +0001464865 00000 n +0001465051 00000 n +0001466130 00000 n +0001466293 00000 n +0001466419 00000 n +0001466545 00000 n +0001466731 00000 n +0001468172 00000 n +0001468344 00000 n +0001468470 00000 n +0001468596 00000 n +0001468722 00000 n +0001468908 00000 n +0001470506 00000 n +0001470669 00000 n +0001470795 00000 n +0001470921 00000 n +0001471107 00000 n +0001472416 00000 n +0001472588 00000 n +0001472714 00000 n +0001472840 00000 n +0001472966 00000 n +0001473152 00000 n +0001474489 00000 n +0001474652 00000 n +0001474778 00000 n +0001474904 00000 n +0001475090 00000 n +0001476725 00000 n +0001476897 00000 n +0001477023 00000 n +0001477149 00000 n +0001477275 00000 n +0001477461 00000 n +0001479059 00000 n +0001479213 00000 n +0001479339 00000 n +0001479525 00000 n +0001480866 00000 n +0001481020 00000 n +0001481146 00000 n +0001481332 00000 n +0001482897 00000 n +0001483069 00000 n +0001483195 00000 n +0001483321 00000 n +0001483447 00000 n +0001483633 00000 n +0001485841 00000 n +0001485978 00000 n +0001486109 00000 n +0001486545 00000 n +0001486933 00000 n +0001487058 00000 n +0001487183 00000 n +0001487308 00000 n +0001487433 00000 n +0001487558 00000 n +0001487683 00000 n +0001487808 00000 n +0001487933 00000 n +0001488058 00000 n +0001488183 00000 n +0001488308 00000 n +0001488433 00000 n +0001488558 00000 n +0001488683 00000 n +0001488808 00000 n +0001488933 00000 n +0001489058 00000 n +0001489183 00000 n +0001489308 00000 n +0001489433 00000 n +0001489558 00000 n +0001489683 00000 n +0001489808 00000 n +0001489933 00000 n +0001490058 00000 n +0001490182 00000 n +0001490305 00000 n +0001490491 00000 n +0001494545 00000 n +0001494816 00000 n +0001494941 00000 n +0001495066 00000 n +0001495191 00000 n +0001495316 00000 n +0001495441 00000 n +0001495566 00000 n +0001495691 00000 n +0001495816 00000 n +0001495941 00000 n +0001496066 00000 n +0001496191 00000 n +0001496316 00000 n +0001496441 00000 n +0001496566 00000 n +0001496724 00000 n +0001498819 00000 n +0001498956 00000 n +0001499128 00000 n +0001500134 00000 n +0001500288 00000 n +0001500414 00000 n +0001500600 00000 n +0001501644 00000 n +0001501816 00000 n +0001501942 00000 n +0001502068 00000 n +0001502194 00000 n +0001502380 00000 n +0001503553 00000 n +0001503707 00000 n +0001503833 00000 n +0001504019 00000 n +0001505182 00000 n +0001505319 00000 n +0001505505 00000 n +0001506562 00000 n +0001506716 00000 n +0001506842 00000 n +0001507028 00000 n +0001508115 00000 n +0001508296 00000 n +0001508422 00000 n +0001508548 00000 n +0001508674 00000 n +0001508800 00000 n +0001508986 00000 n +0001510211 00000 n +0001510365 00000 n +0001510491 00000 n +0001510677 00000 n +0001511946 00000 n +0001512109 00000 n +0001512235 00000 n +0001512361 00000 n +0001512547 00000 n +0001513711 00000 n +0001513874 00000 n +0001514000 00000 n +0001514126 00000 n +0001514312 00000 n +0001515421 00000 n +0001515575 00000 n +0001515701 00000 n +0001515887 00000 n +0001517058 00000 n +0001517221 00000 n +0001517347 00000 n +0001517473 00000 n +0001517659 00000 n +0001518879 00000 n +0001519042 00000 n +0001519168 00000 n +0001519294 00000 n +0001519480 00000 n +0001520598 00000 n +0001520761 00000 n +0001520887 00000 n +0001521013 00000 n +0001521199 00000 n +0001522396 00000 n +0001522559 00000 n +0001522685 00000 n +0001522811 00000 n +0001522997 00000 n +0001524146 00000 n +0001524300 00000 n +0001524426 00000 n +0001524598 00000 n +0001525650 00000 n +0001525813 00000 n +0001525939 00000 n +0001526065 00000 n +0001526251 00000 n +0001527434 00000 n +0001527597 00000 n +0001527723 00000 n +0001527849 00000 n +0001528035 00000 n +0001529145 00000 n +0001529308 00000 n +0001529434 00000 n +0001529560 00000 n +0001529746 00000 n +0001530948 00000 n +0001531111 00000 n +0001531237 00000 n +0001531363 00000 n +0001531549 00000 n +0001532711 00000 n +0001532865 00000 n +0001532991 00000 n +0001533163 00000 n +0001534377 00000 n +0001534540 00000 n +0001534666 00000 n +0001534792 00000 n +0001534978 00000 n +0001536316 00000 n +0001536479 00000 n +0001536605 00000 n +0001536731 00000 n +0001536917 00000 n +0001538153 00000 n +0001538307 00000 n +0001538433 00000 n +0001538619 00000 n +0001539806 00000 n +0001539960 00000 n +0001540086 00000 n +0001540272 00000 n +0001541437 00000 n +0001541591 00000 n +0001541717 00000 n +0001541903 00000 n +0001543099 00000 n +0001543262 00000 n +0001543388 00000 n +0001543514 00000 n +0001543700 00000 n +0001545089 00000 n +0001545252 00000 n +0001545378 00000 n +0001545504 00000 n +0001545690 00000 n +0001547004 00000 n +0001547185 00000 n +0001547311 00000 n +0001547437 00000 n +0001547563 00000 n +0001547689 00000 n +0001547875 00000 n +0001549258 00000 n +0001549412 00000 n +0001549538 00000 n +0001549724 00000 n +0001550887 00000 n +0001551041 00000 n +0001551167 00000 n +0001551339 00000 n +0001552305 00000 n +0001552459 00000 n +0001552585 00000 n +0001552757 00000 n +0001553723 00000 n +0001553877 00000 n +0001554003 00000 n +0001554175 00000 n +0001555141 00000 n +0001555278 00000 n +0001555464 00000 n +0001556654 00000 n +0001556808 00000 n +0001556934 00000 n +0001557120 00000 n +0001558296 00000 n +0001558459 00000 n +0001558585 00000 n +0001558711 00000 n +0001558897 00000 n +0001560153 00000 n +0001560316 00000 n +0001560442 00000 n +0001560568 00000 n +0001560754 00000 n +0001561885 00000 n +0001562048 00000 n +0001562174 00000 n +0001562300 00000 n +0001562486 00000 n +0001563622 00000 n +0001563785 00000 n +0001563911 00000 n +0001564037 00000 n +0001564223 00000 n +0001565354 00000 n +0001565508 00000 n +0001565634 00000 n +0001565820 00000 n +0001567077 00000 n +0001567240 00000 n +0001567366 00000 n +0001567492 00000 n +0001567678 00000 n +0001568929 00000 n +0001569066 00000 n +0001569197 00000 n +0001569632 00000 n +0001570038 00000 n +0001570163 00000 n +0001570288 00000 n +0001570413 00000 n +0001570538 00000 n +0001570663 00000 n +0001570788 00000 n +0001570913 00000 n +0001571038 00000 n +0001571163 00000 n +0001571288 00000 n +0001571413 00000 n +0001571538 00000 n +0001571663 00000 n +0001571788 00000 n +0001571913 00000 n +0001572038 00000 n +0001572163 00000 n +0001572288 00000 n +0001572413 00000 n +0001572538 00000 n +0001572663 00000 n +0001572788 00000 n +0001572913 00000 n +0001573038 00000 n +0001573163 00000 n +0001573288 00000 n +0001573413 00000 n +0001573538 00000 n +0001573662 00000 n +0001573848 00000 n +0001578105 00000 n +0001578511 00000 n +0001578636 00000 n +0001578761 00000 n +0001578886 00000 n +0001579011 00000 n +0001579136 00000 n +0001579261 00000 n +0001579386 00000 n +0001579511 00000 n +0001579636 00000 n +0001579761 00000 n +0001579886 00000 n +0001580011 00000 n +0001580136 00000 n +0001580261 00000 n +0001580386 00000 n +0001580511 00000 n +0001580636 00000 n +0001580761 00000 n +0001580886 00000 n +0001581011 00000 n +0001581136 00000 n +0001581261 00000 n +0001581386 00000 n +0001581511 00000 n +0001581636 00000 n +0001581761 00000 n +0001581886 00000 n +0001582011 00000 n +0001582136 00000 n +0001582294 00000 n +0001585945 00000 n +0001586082 00000 n +0001586254 00000 n +0001587257 00000 n +0001587411 00000 n +0001587537 00000 n +0001587723 00000 n +0001588767 00000 n +0001588948 00000 n +0001589074 00000 n +0001589200 00000 n +0001589326 00000 n +0001589452 00000 n +0001589638 00000 n +0001590835 00000 n +0001590989 00000 n +0001591115 00000 n +0001591301 00000 n +0001592595 00000 n +0001592758 00000 n +0001592884 00000 n +0001593010 00000 n +0001593196 00000 n +0001594598 00000 n +0001594761 00000 n +0001594887 00000 n +0001595013 00000 n +0001595199 00000 n +0001596665 00000 n +0001596802 00000 n +0001596988 00000 n +0001598045 00000 n +0001598199 00000 n +0001598325 00000 n +0001598511 00000 n +0001599598 00000 n +0001599779 00000 n +0001599905 00000 n +0001600031 00000 n +0001600157 00000 n +0001600283 00000 n +0001600469 00000 n +0001601693 00000 n +0001601847 00000 n +0001601973 00000 n +0001602159 00000 n +0001603428 00000 n +0001603591 00000 n +0001603717 00000 n +0001603843 00000 n +0001604029 00000 n +0001605192 00000 n +0001605355 00000 n +0001605481 00000 n +0001605607 00000 n +0001605793 00000 n +0001607056 00000 n +0001607219 00000 n +0001607345 00000 n +0001607471 00000 n +0001607657 00000 n +0001608927 00000 n +0001609090 00000 n +0001609216 00000 n +0001609342 00000 n +0001609528 00000 n +0001610638 00000 n +0001610801 00000 n +0001610927 00000 n +0001611053 00000 n +0001611239 00000 n +0001612567 00000 n +0001612721 00000 n +0001612847 00000 n +0001613033 00000 n +0001614204 00000 n +0001614367 00000 n +0001614493 00000 n +0001614619 00000 n +0001614805 00000 n +0001616025 00000 n +0001616188 00000 n +0001616314 00000 n +0001616440 00000 n +0001616626 00000 n +0001617888 00000 n +0001618051 00000 n +0001618177 00000 n +0001618303 00000 n +0001618489 00000 n +0001619607 00000 n +0001619770 00000 n +0001619896 00000 n +0001620022 00000 n +0001620208 00000 n +0001621407 00000 n +0001621570 00000 n +0001621696 00000 n +0001621822 00000 n +0001622008 00000 n +0001623157 00000 n +0001623311 00000 n +0001623437 00000 n +0001623609 00000 n +0001624660 00000 n +0001624823 00000 n +0001624949 00000 n +0001625075 00000 n +0001625261 00000 n +0001626444 00000 n +0001626607 00000 n +0001626733 00000 n +0001626859 00000 n +0001627045 00000 n +0001628156 00000 n +0001628319 00000 n +0001628445 00000 n +0001628571 00000 n +0001628757 00000 n +0001629959 00000 n +0001630122 00000 n +0001630248 00000 n +0001630374 00000 n +0001630560 00000 n +0001631722 00000 n +0001631876 00000 n +0001632002 00000 n +0001632188 00000 n +0001633818 00000 n +0001633972 00000 n +0001634098 00000 n +0001634270 00000 n +0001635357 00000 n +0001635538 00000 n +0001635664 00000 n +0001635790 00000 n +0001635916 00000 n +0001636042 00000 n +0001636228 00000 n +0001637754 00000 n +0001637908 00000 n +0001638034 00000 n +0001638220 00000 n +0001639714 00000 n +0001639868 00000 n +0001639994 00000 n +0001640180 00000 n +0001641597 00000 n +0001641760 00000 n +0001641886 00000 n +0001642012 00000 n +0001642198 00000 n +0001643536 00000 n +0001643699 00000 n +0001643825 00000 n +0001643951 00000 n +0001644137 00000 n +0001645373 00000 n +0001645527 00000 n +0001645653 00000 n +0001645839 00000 n +0001647025 00000 n +0001647179 00000 n +0001647305 00000 n +0001647491 00000 n +0001648656 00000 n +0001648810 00000 n +0001648936 00000 n +0001649122 00000 n +0001650316 00000 n +0001650479 00000 n +0001650605 00000 n +0001650731 00000 n +0001650917 00000 n +0001652307 00000 n +0001652470 00000 n +0001652596 00000 n +0001652722 00000 n +0001652908 00000 n +0001654222 00000 n +0001654385 00000 n +0001654511 00000 n +0001654637 00000 n +0001654823 00000 n +0001656191 00000 n +0001656372 00000 n +0001656498 00000 n +0001656624 00000 n +0001656750 00000 n +0001656876 00000 n +0001657062 00000 n +0001658446 00000 n +0001658600 00000 n +0001658726 00000 n +0001658912 00000 n +0001660074 00000 n +0001660228 00000 n +0001660354 00000 n +0001660526 00000 n +0001661493 00000 n +0001661647 00000 n +0001661773 00000 n +0001661945 00000 n +0001662911 00000 n +0001663065 00000 n +0001663191 00000 n +0001663363 00000 n +0001664329 00000 n +0001664483 00000 n +0001664609 00000 n +0001664781 00000 n +0001665747 00000 n +0001665884 00000 n +0001666070 00000 n +0001667259 00000 n +0001667413 00000 n +0001667539 00000 n +0001667725 00000 n +0001668901 00000 n +0001669055 00000 n +0001669181 00000 n +0001669353 00000 n +0001670372 00000 n +0001670526 00000 n +0001670652 00000 n +0001670824 00000 n +0001671894 00000 n +0001672057 00000 n +0001672183 00000 n +0001672309 00000 n +0001672495 00000 n +0001673751 00000 n +0001673914 00000 n +0001674040 00000 n +0001674166 00000 n +0001674352 00000 n +0001675483 00000 n +0001675646 00000 n +0001675772 00000 n +0001675898 00000 n +0001676084 00000 n +0001677215 00000 n +0001677378 00000 n +0001677504 00000 n +0001677630 00000 n +0001677816 00000 n +0001678947 00000 n +0001679110 00000 n +0001679236 00000 n +0001679362 00000 n +0001679548 00000 n +0001680679 00000 n +0001680833 00000 n +0001680959 00000 n +0001681145 00000 n +0001682401 00000 n +0001682564 00000 n +0001682690 00000 n +0001682816 00000 n +0001683002 00000 n +0001684252 00000 n +0001684415 00000 n +0001684541 00000 n +0001684667 00000 n +0001684853 00000 n +0001686118 00000 n +0001686281 00000 n +0001686407 00000 n +0001686533 00000 n +0001686719 00000 n +0001688031 00000 n +0001688168 00000 n +0001688299 00000 n +0001688733 00000 n +0001689094 00000 n +0001689219 00000 n +0001689344 00000 n +0001689469 00000 n +0001689594 00000 n +0001689719 00000 n +0001689844 00000 n +0001689969 00000 n +0001690094 00000 n +0001690219 00000 n +0001690344 00000 n +0001690469 00000 n +0001690594 00000 n +0001690719 00000 n +0001690844 00000 n +0001690969 00000 n +0001691094 00000 n +0001691219 00000 n +0001691344 00000 n +0001691469 00000 n +0001691594 00000 n +0001691719 00000 n +0001691844 00000 n +0001691969 00000 n +0001692094 00000 n +0001692280 00000 n +0001695848 00000 n +0001695985 00000 n +0001696157 00000 n +0001697166 00000 n +0001697320 00000 n +0001697446 00000 n +0001697632 00000 n +0001698662 00000 n +0001698799 00000 n +0001698985 00000 n +0001700069 00000 n +0001700223 00000 n +0001700349 00000 n +0001700535 00000 n +0001701663 00000 n +0001701800 00000 n +0001701986 00000 n +0001703046 00000 n +0001703200 00000 n +0001703326 00000 n +0001703512 00000 n +0001704586 00000 n +0001704767 00000 n +0001704893 00000 n +0001705019 00000 n +0001705145 00000 n +0001705271 00000 n +0001705457 00000 n +0001706656 00000 n +0001706819 00000 n +0001706945 00000 n +0001707071 00000 n +0001707257 00000 n +0001708513 00000 n +0001708676 00000 n +0001708802 00000 n +0001708928 00000 n +0001709114 00000 n +0001710304 00000 n +0001710467 00000 n +0001710593 00000 n +0001710719 00000 n +0001710905 00000 n +0001712053 00000 n +0001712216 00000 n +0001712342 00000 n +0001712468 00000 n +0001712654 00000 n +0001713812 00000 n +0001713975 00000 n +0001714101 00000 n +0001714227 00000 n +0001714413 00000 n +0001715577 00000 n +0001715740 00000 n +0001715866 00000 n +0001715992 00000 n +0001716178 00000 n +0001717268 00000 n +0001717422 00000 n +0001717548 00000 n +0001717734 00000 n +0001718930 00000 n +0001719084 00000 n +0001719210 00000 n +0001719396 00000 n +0001720529 00000 n +0001720710 00000 n +0001720836 00000 n +0001720962 00000 n +0001721088 00000 n +0001721214 00000 n +0001721400 00000 n +0001722781 00000 n +0001722918 00000 n +0001723104 00000 n +0001724236 00000 n +0001724373 00000 n +0001724545 00000 n +0001725460 00000 n +0001725597 00000 n +0001725769 00000 n +0001726671 00000 n +0001726808 00000 n +0001726980 00000 n +0001727911 00000 n +0001728065 00000 n +0001728191 00000 n +0001728377 00000 n +0001729674 00000 n +0001729828 00000 n +0001729954 00000 n +0001730140 00000 n +0001731222 00000 n +0001731376 00000 n +0001731502 00000 n +0001731688 00000 n +0001732792 00000 n +0001732946 00000 n +0001733072 00000 n +0001733258 00000 n +0001734342 00000 n +0001734479 00000 n +0001734610 00000 n +0001735045 00000 n +0001735460 00000 n +0001735585 00000 n +0001735710 00000 n +0001735835 00000 n +0001735960 00000 n +0001736085 00000 n +0001736210 00000 n +0001736335 00000 n +0001736460 00000 n +0001736585 00000 n +0001736710 00000 n +0001736835 00000 n +0001736960 00000 n +0001737085 00000 n +0001737210 00000 n +0001737335 00000 n +0001737460 00000 n +0001737585 00000 n +0001737710 00000 n +0001737835 00000 n +0001737960 00000 n +0001738085 00000 n +0001738210 00000 n +0001738335 00000 n +0001738460 00000 n +0001738585 00000 n +0001738710 00000 n +0001738835 00000 n +0001738960 00000 n +0001739085 00000 n +0001739209 00000 n +0001739395 00000 n +0001743571 00000 n +0001743824 00000 n +0001743949 00000 n +0001744074 00000 n +0001744199 00000 n +0001744324 00000 n +0001744449 00000 n +0001744574 00000 n +0001744699 00000 n +0001744824 00000 n +0001744949 00000 n +0001745074 00000 n +0001745199 00000 n +0001745324 00000 n +0001745482 00000 n +0001747342 00000 n +0001747479 00000 n +0001747651 00000 n +0001748654 00000 n +0001748808 00000 n +0001748934 00000 n +0001749120 00000 n +0001750127 00000 n +0001750264 00000 n +0001750450 00000 n +0001751619 00000 n +0001751773 00000 n +0001751899 00000 n +0001752085 00000 n +0001753356 00000 n +0001753510 00000 n +0001753636 00000 n +0001753822 00000 n +0001755008 00000 n +0001755162 00000 n +0001755288 00000 n +0001755474 00000 n +0001756634 00000 n +0001756771 00000 n +0001756957 00000 n +0001758030 00000 n +0001758184 00000 n +0001758310 00000 n +0001758496 00000 n +0001759560 00000 n +0001759741 00000 n +0001759867 00000 n +0001759993 00000 n +0001760119 00000 n +0001760245 00000 n +0001760431 00000 n +0001761637 00000 n +0001761800 00000 n +0001761926 00000 n +0001762052 00000 n +0001762238 00000 n +0001763435 00000 n +0001763589 00000 n +0001763715 00000 n +0001763901 00000 n +0001765013 00000 n +0001765176 00000 n +0001765302 00000 n +0001765428 00000 n +0001765614 00000 n +0001766812 00000 n +0001766966 00000 n +0001767092 00000 n +0001767278 00000 n +0001768439 00000 n +0001768602 00000 n +0001768728 00000 n +0001768854 00000 n +0001769040 00000 n +0001770098 00000 n +0001770261 00000 n +0001770387 00000 n +0001770513 00000 n +0001770699 00000 n +0001771869 00000 n +0001772032 00000 n +0001772158 00000 n +0001772284 00000 n +0001772470 00000 n +0001773597 00000 n +0001773751 00000 n +0001773877 00000 n +0001774049 00000 n +0001775074 00000 n +0001775237 00000 n +0001775363 00000 n +0001775489 00000 n +0001775675 00000 n +0001776845 00000 n +0001776999 00000 n +0001777125 00000 n +0001777311 00000 n +0001778458 00000 n +0001778612 00000 n +0001778738 00000 n +0001778924 00000 n +0001780079 00000 n +0001780242 00000 n +0001780368 00000 n +0001780494 00000 n +0001780680 00000 n +0001781755 00000 n +0001781909 00000 n +0001782035 00000 n +0001782221 00000 n +0001783408 00000 n +0001783562 00000 n +0001783688 00000 n +0001783874 00000 n +0001785003 00000 n +0001785157 00000 n +0001785283 00000 n +0001785455 00000 n +0001786582 00000 n +0001786754 00000 n +0001786880 00000 n +0001787006 00000 n +0001787132 00000 n +0001787318 00000 n +0001788696 00000 n +0001788859 00000 n +0001788985 00000 n +0001789111 00000 n +0001789297 00000 n +0001790637 00000 n +0001790791 00000 n +0001790917 00000 n +0001791103 00000 n +0001792248 00000 n +0001792402 00000 n +0001792528 00000 n +0001792714 00000 n +0001793892 00000 n +0001794046 00000 n +0001794172 00000 n +0001794358 00000 n +0001795542 00000 n +0001795723 00000 n +0001795849 00000 n +0001795975 00000 n +0001796101 00000 n +0001796227 00000 n +0001796413 00000 n +0001797779 00000 n +0001797916 00000 n +0001798102 00000 n +0001799276 00000 n +0001799413 00000 n +0001799585 00000 n +0001800485 00000 n +0001800622 00000 n +0001800794 00000 n +0001801699 00000 n +0001801853 00000 n +0001801979 00000 n +0001802151 00000 n +0001803212 00000 n +0001803349 00000 n +0001803521 00000 n +0001804427 00000 n +0001804564 00000 n +0001804736 00000 n +0001805662 00000 n +0001805816 00000 n +0001805942 00000 n +0001806128 00000 n +0001807425 00000 n +0001807579 00000 n +0001807705 00000 n +0001807891 00000 n +0001808990 00000 n +0001809144 00000 n +0001809270 00000 n +0001809456 00000 n +0001810566 00000 n +0001810729 00000 n +0001810855 00000 n +0001810981 00000 n +0001811167 00000 n +0001812380 00000 n +0001812534 00000 n +0001812660 00000 n +0001812846 00000 n +0001813941 00000 n +0001814095 00000 n +0001814221 00000 n +0001814407 00000 n +0001815498 00000 n +0001815635 00000 n +0001815766 00000 n +0001816210 00000 n +0001816562 00000 n +0001816687 00000 n +0001816812 00000 n +0001816937 00000 n +0001817062 00000 n +0001817187 00000 n +0001817312 00000 n +0001817437 00000 n +0001817562 00000 n +0001817687 00000 n +0001817812 00000 n +0001817937 00000 n +0001818062 00000 n +0001818187 00000 n +0001818312 00000 n +0001818437 00000 n +0001818562 00000 n +0001818687 00000 n +0001818812 00000 n +0001818937 00000 n +0001819062 00000 n +0001819187 00000 n +0001819312 00000 n +0001819437 00000 n +0001819623 00000 n +0001823652 00000 n +0001823977 00000 n +0001824102 00000 n +0001824227 00000 n +0001824352 00000 n +0001824477 00000 n +0001824602 00000 n +0001824727 00000 n +0001824852 00000 n +0001824977 00000 n +0001825102 00000 n +0001825227 00000 n +0001825352 00000 n +0001825477 00000 n +0001825602 00000 n +0001825727 00000 n +0001825852 00000 n +0001825977 00000 n +0001826102 00000 n +0001826227 00000 n +0001826352 00000 n +0001826477 00000 n +0001826635 00000 n +0001829631 00000 n +0001829768 00000 n +0001829940 00000 n +0001830952 00000 n +0001831106 00000 n +0001831232 00000 n +0001831418 00000 n +0001832532 00000 n +0001832713 00000 n +0001832839 00000 n +0001832965 00000 n +0001833091 00000 n +0001833217 00000 n +0001833403 00000 n +0001834626 00000 n +0001834789 00000 n +0001834915 00000 n +0001835041 00000 n +0001835227 00000 n +0001836579 00000 n +0001836742 00000 n +0001836868 00000 n +0001836994 00000 n +0001837180 00000 n +0001838664 00000 n +0001838801 00000 n +0001838987 00000 n +0001840103 00000 n +0001840257 00000 n +0001840383 00000 n +0001840569 00000 n +0001841785 00000 n +0001841966 00000 n +0001842092 00000 n +0001842218 00000 n +0001842344 00000 n +0001842470 00000 n +0001842656 00000 n +0001843963 00000 n +0001844126 00000 n +0001844252 00000 n +0001844378 00000 n +0001844564 00000 n +0001845993 00000 n +0001846156 00000 n +0001846282 00000 n +0001846408 00000 n +0001846594 00000 n +0001847912 00000 n +0001848075 00000 n +0001848201 00000 n +0001848327 00000 n +0001848513 00000 n +0001849706 00000 n +0001849869 00000 n +0001849995 00000 n +0001850121 00000 n +0001850307 00000 n +0001851587 00000 n +0001851750 00000 n +0001851876 00000 n +0001852002 00000 n +0001852188 00000 n +0001853377 00000 n +0001853540 00000 n +0001853666 00000 n +0001853792 00000 n +0001853978 00000 n +0001855165 00000 n +0001855328 00000 n +0001855454 00000 n +0001855580 00000 n +0001855766 00000 n +0001856931 00000 n +0001857085 00000 n +0001857211 00000 n +0001857383 00000 n +0001858659 00000 n +0001858822 00000 n +0001858948 00000 n +0001859074 00000 n +0001859260 00000 n +0001860634 00000 n +0001860797 00000 n +0001860923 00000 n +0001861049 00000 n +0001861235 00000 n +0001862507 00000 n +0001862661 00000 n +0001862787 00000 n +0001862973 00000 n +0001864180 00000 n +0001864334 00000 n +0001864460 00000 n +0001864646 00000 n +0001865852 00000 n +0001866006 00000 n +0001866132 00000 n +0001866318 00000 n +0001867523 00000 n +0001867686 00000 n +0001867812 00000 n +0001867938 00000 n +0001868124 00000 n +0001869564 00000 n +0001869727 00000 n +0001869853 00000 n +0001869979 00000 n +0001870165 00000 n +0001871547 00000 n +0001871710 00000 n +0001871836 00000 n +0001871962 00000 n +0001872148 00000 n +0001873542 00000 n +0001873723 00000 n +0001873849 00000 n +0001873975 00000 n +0001874101 00000 n +0001874227 00000 n +0001874413 00000 n +0001875847 00000 n +0001876001 00000 n +0001876127 00000 n +0001876313 00000 n +0001877487 00000 n +0001877641 00000 n +0001877767 00000 n +0001877939 00000 n +0001878948 00000 n +0001879102 00000 n +0001879228 00000 n +0001879400 00000 n +0001880409 00000 n +0001880563 00000 n +0001880689 00000 n +0001880861 00000 n +0001881870 00000 n +0001882024 00000 n +0001882150 00000 n +0001882322 00000 n +0001883331 00000 n +0001883468 00000 n +0001883654 00000 n +0001884895 00000 n +0001885049 00000 n +0001885175 00000 n +0001885361 00000 n +0001886562 00000 n +0001886716 00000 n +0001886842 00000 n +0001887014 00000 n +0001888047 00000 n +0001888201 00000 n +0001888327 00000 n +0001888499 00000 n +0001889575 00000 n +0001889738 00000 n +0001889864 00000 n +0001889990 00000 n +0001890176 00000 n +0001891512 00000 n +0001891675 00000 n +0001891801 00000 n +0001891927 00000 n +0001892113 00000 n +0001893317 00000 n +0001893480 00000 n +0001893606 00000 n +0001893732 00000 n +0001893918 00000 n +0001895123 00000 n +0001895286 00000 n +0001895412 00000 n +0001895538 00000 n +0001895724 00000 n +0001896929 00000 n +0001897092 00000 n +0001897218 00000 n +0001897344 00000 n +0001897530 00000 n +0001898735 00000 n +0001898889 00000 n +0001899015 00000 n +0001899201 00000 n +0001900519 00000 n +0001900682 00000 n +0001900808 00000 n +0001900934 00000 n +0001901120 00000 n +0001902431 00000 n +0001902594 00000 n +0001902720 00000 n +0001902846 00000 n +0001903032 00000 n +0001904215 00000 n +0001904378 00000 n +0001904504 00000 n +0001904630 00000 n +0001904816 00000 n +0001906105 00000 n +0001906242 00000 n +0001906373 00000 n +0001906807 00000 n +0001907231 00000 n +0001907356 00000 n +0001907481 00000 n +0001907606 00000 n +0001907731 00000 n +0001907856 00000 n +0001907981 00000 n +0001908106 00000 n +0001908231 00000 n +0001908356 00000 n +0001908481 00000 n +0001908606 00000 n +0001908731 00000 n +0001908856 00000 n +0001908981 00000 n +0001909106 00000 n +0001909231 00000 n +0001909356 00000 n +0001909481 00000 n +0001909606 00000 n +0001909731 00000 n +0001909856 00000 n +0001909981 00000 n +0001910106 00000 n +0001910231 00000 n +0001910356 00000 n +0001910481 00000 n +0001910606 00000 n +0001910731 00000 n +0001910856 00000 n +0001910981 00000 n +0001911105 00000 n +0001911291 00000 n +0001915368 00000 n +0001915522 00000 n +0001915647 00000 n +0001915805 00000 n +0001916542 00000 n +0001916679 00000 n +0001916851 00000 n +0001917851 00000 n +0001918005 00000 n +0001918131 00000 n +0001918317 00000 n +0001919335 00000 n +0001919472 00000 n +0001919658 00000 n +0001920736 00000 n +0001920890 00000 n +0001921016 00000 n +0001921202 00000 n +0001922333 00000 n +0001922470 00000 n +0001922656 00000 n +0001923707 00000 n +0001923861 00000 n +0001923987 00000 n +0001924173 00000 n +0001925249 00000 n +0001925430 00000 n +0001925556 00000 n +0001925682 00000 n +0001925808 00000 n +0001925934 00000 n +0001926120 00000 n +0001927336 00000 n +0001927490 00000 n +0001927616 00000 n +0001927802 00000 n +0001929038 00000 n +0001929192 00000 n +0001929318 00000 n +0001929504 00000 n +0001930661 00000 n +0001930824 00000 n +0001930950 00000 n +0001931076 00000 n +0001931262 00000 n +0001932336 00000 n +0001932499 00000 n +0001932625 00000 n +0001932751 00000 n +0001932937 00000 n +0001934074 00000 n +0001934237 00000 n +0001934363 00000 n +0001934489 00000 n +0001934675 00000 n +0001935851 00000 n +0001936014 00000 n +0001936140 00000 n +0001936266 00000 n +0001936452 00000 n +0001937575 00000 n +0001937729 00000 n +0001937855 00000 n +0001938027 00000 n +0001939031 00000 n +0001939194 00000 n +0001939320 00000 n +0001939446 00000 n +0001939632 00000 n +0001940779 00000 n +0001940933 00000 n +0001941059 00000 n +0001941245 00000 n +0001942327 00000 n +0001942481 00000 n +0001942607 00000 n +0001942793 00000 n +0001943938 00000 n +0001944101 00000 n +0001944227 00000 n +0001944353 00000 n +0001944539 00000 n +0001945593 00000 n +0001945747 00000 n +0001945873 00000 n +0001946059 00000 n +0001947253 00000 n +0001947407 00000 n +0001947533 00000 n +0001947719 00000 n +0001948858 00000 n +0001949012 00000 n +0001949138 00000 n +0001949310 00000 n +0001950383 00000 n +0001950537 00000 n +0001950663 00000 n +0001950835 00000 n +0001951778 00000 n +0001951932 00000 n +0001952058 00000 n +0001952230 00000 n +0001953176 00000 n +0001953357 00000 n +0001953483 00000 n +0001953609 00000 n +0001953735 00000 n +0001953861 00000 n +0001954047 00000 n +0001955386 00000 n +0001955523 00000 n +0001955709 00000 n +0001956839 00000 n +0001956976 00000 n +0001957148 00000 n +0001958050 00000 n +0001958187 00000 n +0001958359 00000 n +0001959258 00000 n +0001959395 00000 n +0001959567 00000 n +0001960503 00000 n +0001960657 00000 n +0001960783 00000 n +0001960969 00000 n +0001962220 00000 n +0001962374 00000 n +0001962500 00000 n +0001962686 00000 n +0001963773 00000 n +0001963927 00000 n +0001964053 00000 n +0001964239 00000 n +0001965336 00000 n +0001965490 00000 n +0001965616 00000 n +0001965802 00000 n +0001966887 00000 n +0001967024 00000 n +0001967155 00000 n +0001967589 00000 n +0001968004 00000 n +0001968129 00000 n +0001968254 00000 n +0001968379 00000 n +0001968504 00000 n +0001968629 00000 n +0001968754 00000 n +0001968879 00000 n +0001969004 00000 n +0001969129 00000 n +0001969254 00000 n +0001969379 00000 n +0001969504 00000 n +0001969629 00000 n +0001969754 00000 n +0001969879 00000 n +0001970004 00000 n +0001970129 00000 n +0001970254 00000 n +0001970379 00000 n +0001970504 00000 n +0001970629 00000 n +0001970754 00000 n +0001970879 00000 n +0001971004 00000 n +0001971129 00000 n +0001971254 00000 n +0001971379 00000 n +0001971504 00000 n +0001971629 00000 n +0001971754 00000 n +0001971940 00000 n +0001976018 00000 n +0001976244 00000 n +0001976369 00000 n +0001976494 00000 n +0001976619 00000 n +0001976744 00000 n +0001976869 00000 n +0001976994 00000 n +0001977119 00000 n +0001977244 00000 n +0001977369 00000 n +0001977527 00000 n +0001979040 00000 n +0001979177 00000 n +0001979349 00000 n +0001980349 00000 n +0001980503 00000 n +0001980629 00000 n +0001980815 00000 n +0001981833 00000 n +0001981970 00000 n +0001982156 00000 n +0001983299 00000 n +0001983453 00000 n +0001983579 00000 n +0001983765 00000 n +0001985003 00000 n +0001985157 00000 n +0001985283 00000 n +0001985469 00000 n +0001986636 00000 n +0001986790 00000 n +0001986916 00000 n +0001987102 00000 n +0001988265 00000 n +0001988419 00000 n +0001988545 00000 n +0001988731 00000 n +0001989867 00000 n +0001990004 00000 n +0001990190 00000 n +0001991242 00000 n +0001991396 00000 n +0001991522 00000 n +0001991708 00000 n +0001992785 00000 n +0001992966 00000 n +0001993092 00000 n +0001993218 00000 n +0001993344 00000 n +0001993470 00000 n +0001993656 00000 n +0001994872 00000 n +0001995026 00000 n +0001995152 00000 n +0001995338 00000 n +0001996575 00000 n +0001996729 00000 n +0001996855 00000 n +0001997041 00000 n +0001998198 00000 n +0001998361 00000 n +0001998487 00000 n +0001998613 00000 n +0001998799 00000 n +0001999873 00000 n +0002000036 00000 n +0002000162 00000 n +0002000288 00000 n +0002000474 00000 n +0002001650 00000 n +0002001813 00000 n +0002001939 00000 n +0002002065 00000 n +0002002251 00000 n +0002003373 00000 n +0002003527 00000 n +0002003653 00000 n +0002003825 00000 n +0002004828 00000 n +0002004991 00000 n +0002005117 00000 n +0002005243 00000 n +0002005429 00000 n +0002006577 00000 n +0002006731 00000 n +0002006857 00000 n +0002007043 00000 n +0002008121 00000 n +0002008275 00000 n +0002008401 00000 n +0002008587 00000 n +0002009732 00000 n +0002009895 00000 n +0002010021 00000 n +0002010147 00000 n +0002010333 00000 n +0002011387 00000 n +0002011541 00000 n +0002011667 00000 n +0002011853 00000 n +0002013047 00000 n +0002013201 00000 n +0002013327 00000 n +0002013513 00000 n +0002014652 00000 n +0002014806 00000 n +0002014932 00000 n +0002015104 00000 n +0002016180 00000 n +0002016334 00000 n +0002016460 00000 n +0002016632 00000 n +0002017576 00000 n +0002017730 00000 n +0002017856 00000 n +0002018028 00000 n +0002018974 00000 n +0002019128 00000 n +0002019254 00000 n +0002019426 00000 n +0002020374 00000 n +0002020555 00000 n +0002020681 00000 n +0002020807 00000 n +0002020933 00000 n +0002021059 00000 n +0002021245 00000 n +0002022584 00000 n +0002022721 00000 n +0002022907 00000 n +0002024090 00000 n +0002024227 00000 n +0002024399 00000 n +0002025278 00000 n +0002025415 00000 n +0002025587 00000 n +0002026488 00000 n +0002026642 00000 n +0002026768 00000 n +0002026940 00000 n +0002028014 00000 n +0002028151 00000 n +0002028323 00000 n +0002029221 00000 n +0002029358 00000 n +0002029530 00000 n +0002030468 00000 n +0002030622 00000 n +0002030748 00000 n +0002030934 00000 n +0002032234 00000 n +0002032388 00000 n +0002032514 00000 n +0002032700 00000 n +0002033785 00000 n +0002033939 00000 n +0002034065 00000 n +0002034251 00000 n +0002035338 00000 n +0002035501 00000 n +0002035627 00000 n +0002035753 00000 n +0002035939 00000 n +0002037128 00000 n +0002037282 00000 n +0002037408 00000 n +0002037594 00000 n +0002038691 00000 n +0002038845 00000 n +0002038971 00000 n +0002039157 00000 n +0002040242 00000 n +0002040280 00000 n +0002053406 00000 n +0002056077 00000 n +0002056344 00000 n +0002056513 00000 n +0002056887 00000 n +0002057158 00000 n +0002071367 00000 n +0002104400 00000 n +0002104843 00000 n +0002105109 00000 n +0002105577 00000 n +0002127941 00000 n +0002128201 00000 n +0002156629 00000 n +0002156905 00000 n +0002157361 00000 n +0002157400 00000 n +0002157426 00000 n +0002157556 00000 n +0002157711 00000 n +0002157852 00000 n +0002157996 00000 n +0002158147 00000 n +0002158301 00000 n +0002158455 00000 n +0002158609 00000 n +0002158763 00000 n +0002158917 00000 n +0002159071 00000 n +0002159225 00000 n +0002159380 00000 n +0002159534 00000 n +0002159688 00000 n +0002159842 00000 n +0002159996 00000 n +0002160150 00000 n +0002160304 00000 n +0002160458 00000 n +0002160612 00000 n +0002160766 00000 n +0002160920 00000 n +0002161075 00000 n +0002161229 00000 n +0002161383 00000 n +0002161537 00000 n +0002161691 00000 n +0002161845 00000 n +0002161999 00000 n +0002162153 00000 n +0002162307 00000 n +0002162461 00000 n +0002162615 00000 n +0002162770 00000 n +0002162924 00000 n +0002163078 00000 n +0002163232 00000 n +0002163386 00000 n +0002163540 00000 n +0002163694 00000 n +0002163848 00000 n +0002164002 00000 n +0002164156 00000 n +0002164310 00000 n +0002164465 00000 n +0002164619 00000 n +0002164773 00000 n +0002164927 00000 n +0002165081 00000 n +0002165235 00000 n +0002165389 00000 n +0002165543 00000 n +0002165697 00000 n +0002165851 00000 n +0002166005 00000 n +0002166160 00000 n +0002166314 00000 n +0002166468 00000 n +0002166622 00000 n +0002166776 00000 n +0002166930 00000 n +0002167084 00000 n +0002167238 00000 n +0002167392 00000 n +0002167546 00000 n +0002167700 00000 n +0002167855 00000 n +0002168009 00000 n +0002168163 00000 n +0002168317 00000 n +0002168471 00000 n +0002168625 00000 n +0002168779 00000 n +0002168933 00000 n +0002169087 00000 n +0002169241 00000 n +0002169395 00000 n +0002169550 00000 n +0002169704 00000 n +0002169858 00000 n +0002170012 00000 n +0002170166 00000 n +0002170320 00000 n +0002170474 00000 n +0002170628 00000 n +0002170782 00000 n +0002170936 00000 n +0002171090 00000 n +0002171217 00000 n +0002171371 00000 n +0002171525 00000 n +0002171679 00000 n +0002171833 00000 n +0002171987 00000 n +0002172141 00000 n +0002172285 00000 n +0002175931 00000 n +trailer +<> +startxref +116 +%%EOF diff --git a/Extras/vectormathlibrary/include/vectormath/ppu/c/mat_aos.h b/Extras/vectormathlibrary/include/vectormath/ppu/c/mat_aos.h new file mode 100644 index 000000000..13f482150 --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/ppu/c/mat_aos.h @@ -0,0 +1,1833 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_MAT_AOS_C_H +#define _VECTORMATH_MAT_AOS_C_H + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/*----------------------------------------------------------------------------- + * Constants + * for shuffles, words are labeled [x,y,z,w] [a,b,c,d] + */ +#define _VECTORMATH_PERM_ZBWX ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_Z, _VECTORMATH_PERM_B, _VECTORMATH_PERM_W, _VECTORMATH_PERM_X }) +#define _VECTORMATH_PERM_XCYX ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_X, _VECTORMATH_PERM_C, _VECTORMATH_PERM_Y, _VECTORMATH_PERM_X }) +#define _VECTORMATH_PERM_XYAB ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_X, _VECTORMATH_PERM_Y, _VECTORMATH_PERM_A, _VECTORMATH_PERM_B }) +#define _VECTORMATH_PERM_ZWCD ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_Z, _VECTORMATH_PERM_W, _VECTORMATH_PERM_C, _VECTORMATH_PERM_D }) +#define _VECTORMATH_PERM_XZBX ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_X, _VECTORMATH_PERM_Z, _VECTORMATH_PERM_B, _VECTORMATH_PERM_X }) +#define _VECTORMATH_PERM_CXXX ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_C, _VECTORMATH_PERM_X, _VECTORMATH_PERM_X, _VECTORMATH_PERM_X }) +#define _VECTORMATH_PERM_YAXX ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_Y, _VECTORMATH_PERM_A, _VECTORMATH_PERM_X, _VECTORMATH_PERM_X }) +#define _VECTORMATH_PERM_XAZC ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_X, _VECTORMATH_PERM_A, _VECTORMATH_PERM_Z, _VECTORMATH_PERM_C }) +#define _VECTORMATH_PERM_YXWZ ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_Y, _VECTORMATH_PERM_X, _VECTORMATH_PERM_W, _VECTORMATH_PERM_Z }) +#define _VECTORMATH_PERM_YBWD ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_Y, _VECTORMATH_PERM_B, _VECTORMATH_PERM_W, _VECTORMATH_PERM_D }) +#define _VECTORMATH_PERM_XYCX ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_X, _VECTORMATH_PERM_Y, _VECTORMATH_PERM_C, _VECTORMATH_PERM_X }) +#define _VECTORMATH_PERM_YCXY ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_Y, _VECTORMATH_PERM_C, _VECTORMATH_PERM_X, _VECTORMATH_PERM_Y }) +#define _VECTORMATH_PERM_CXYC ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_C, _VECTORMATH_PERM_X, _VECTORMATH_PERM_Y, _VECTORMATH_PERM_C }) +#define _VECTORMATH_PERM_ZAYX ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_Z, _VECTORMATH_PERM_A, _VECTORMATH_PERM_Y, _VECTORMATH_PERM_X }) +#define _VECTORMATH_PERM_BZXX ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_B, _VECTORMATH_PERM_Z, _VECTORMATH_PERM_X, _VECTORMATH_PERM_X }) +#define _VECTORMATH_PERM_XZYA ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_X, _VECTORMATH_PERM_Z, _VECTORMATH_PERM_Y, _VECTORMATH_PERM_A }) +#define _VECTORMATH_PERM_ZXXB ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_Z, _VECTORMATH_PERM_X, _VECTORMATH_PERM_X, _VECTORMATH_PERM_B }) +#define _VECTORMATH_PERM_YXXC ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_Y, _VECTORMATH_PERM_X, _VECTORMATH_PERM_X, _VECTORMATH_PERM_C }) +#define _VECTORMATH_PERM_BBYX ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_B, _VECTORMATH_PERM_B, _VECTORMATH_PERM_Y, _VECTORMATH_PERM_X }) +#define _VECTORMATH_PI_OVER_2 1.570796327f + +/*----------------------------------------------------------------------------- + * Definitions + */ +static inline void vmathM3Copy( VmathMatrix3 *result, const VmathMatrix3 *mat ) +{ + vmathV3Copy( &result->col0, &mat->col0 ); + vmathV3Copy( &result->col1, &mat->col1 ); + vmathV3Copy( &result->col2, &mat->col2 ); +} + +static inline void vmathM3MakeFromScalar( VmathMatrix3 *result, float scalar ) +{ + vmathV3MakeFromScalar( &result->col0, scalar ); + vmathV3MakeFromScalar( &result->col1, scalar ); + vmathV3MakeFromScalar( &result->col2, scalar ); +} + +static inline void vmathM3MakeFromQ( VmathMatrix3 *result, const VmathQuat *unitQuat ) +{ + vec_float4 xyzw_2, wwww, yzxw, zxyw, yzxw_2, zxyw_2; + vec_float4 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5; + vec_uint4 select_x = _VECTORMATH_MASK_0xF000; + vec_uint4 select_z = _VECTORMATH_MASK_0x00F0; + xyzw_2 = vec_add( unitQuat->vec128, unitQuat->vec128 ); + wwww = vec_splat( unitQuat->vec128, 3 ); + yzxw = vec_perm( unitQuat->vec128, unitQuat->vec128, _VECTORMATH_PERM_YZXW ); + zxyw = vec_perm( unitQuat->vec128, unitQuat->vec128, _VECTORMATH_PERM_ZXYW ); + yzxw_2 = vec_perm( xyzw_2, xyzw_2, _VECTORMATH_PERM_YZXW ); + zxyw_2 = vec_perm( xyzw_2, xyzw_2, _VECTORMATH_PERM_ZXYW ); + tmp0 = vec_madd( yzxw_2, wwww, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + tmp1 = vec_nmsub( yzxw, yzxw_2, ((vec_float4){1.0f,1.0f,1.0f,1.0f}) ); + tmp2 = vec_madd( yzxw, xyzw_2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + tmp0 = vec_madd( zxyw, xyzw_2, tmp0 ); + tmp1 = vec_nmsub( zxyw, zxyw_2, tmp1 ); + tmp2 = vec_nmsub( zxyw_2, wwww, tmp2 ); + tmp3 = vec_sel( tmp0, tmp1, select_x ); + tmp4 = vec_sel( tmp1, tmp2, select_x ); + tmp5 = vec_sel( tmp2, tmp0, select_x ); + result->col0.vec128 = vec_sel( tmp3, tmp2, select_z ); + result->col1.vec128 = vec_sel( tmp4, tmp0, select_z ); + result->col2.vec128 = vec_sel( tmp5, tmp1, select_z ); +} + +static inline void vmathM3MakeFromCols( VmathMatrix3 *result, const VmathVector3 *_col0, const VmathVector3 *_col1, const VmathVector3 *_col2 ) +{ + vmathV3Copy( &result->col0, _col0 ); + vmathV3Copy( &result->col1, _col1 ); + vmathV3Copy( &result->col2, _col2 ); +} + +static inline void vmathM3SetCol0( VmathMatrix3 *result, const VmathVector3 *_col0 ) +{ + vmathV3Copy( &result->col0, _col0 ); +} + +static inline void vmathM3SetCol1( VmathMatrix3 *result, const VmathVector3 *_col1 ) +{ + vmathV3Copy( &result->col1, _col1 ); +} + +static inline void vmathM3SetCol2( VmathMatrix3 *result, const VmathVector3 *_col2 ) +{ + vmathV3Copy( &result->col2, _col2 ); +} + +static inline void vmathM3SetCol( VmathMatrix3 *result, int col, const VmathVector3 *vec ) +{ + vmathV3Copy( (&result->col0 + col), vec ); +} + +static inline void vmathM3SetRow( VmathMatrix3 *result, int row, const VmathVector3 *vec ) +{ + vmathV3SetElem( &result->col0, row, vmathV3GetElem( vec, 0 ) ); + vmathV3SetElem( &result->col1, row, vmathV3GetElem( vec, 1 ) ); + vmathV3SetElem( &result->col2, row, vmathV3GetElem( vec, 2 ) ); +} + +static inline void vmathM3SetElem( VmathMatrix3 *result, int col, int row, float val ) +{ + VmathVector3 tmpV3_0; + vmathM3GetCol( &tmpV3_0, result, col ); + vmathV3SetElem( &tmpV3_0, row, val ); + vmathM3SetCol( result, col, &tmpV3_0 ); +} + +static inline float vmathM3GetElem( const VmathMatrix3 *mat, int col, int row ) +{ + VmathVector3 tmpV3_0; + vmathM3GetCol( &tmpV3_0, mat, col ); + return vmathV3GetElem( &tmpV3_0, row ); +} + +static inline void vmathM3GetCol0( VmathVector3 *result, const VmathMatrix3 *mat ) +{ + vmathV3Copy( result, &mat->col0 ); +} + +static inline void vmathM3GetCol1( VmathVector3 *result, const VmathMatrix3 *mat ) +{ + vmathV3Copy( result, &mat->col1 ); +} + +static inline void vmathM3GetCol2( VmathVector3 *result, const VmathMatrix3 *mat ) +{ + vmathV3Copy( result, &mat->col2 ); +} + +static inline void vmathM3GetCol( VmathVector3 *result, const VmathMatrix3 *mat, int col ) +{ + vmathV3Copy( result, (&mat->col0 + col) ); +} + +static inline void vmathM3GetRow( VmathVector3 *result, const VmathMatrix3 *mat, int row ) +{ + vmathV3MakeFromElems( result, vmathV3GetElem( &mat->col0, row ), vmathV3GetElem( &mat->col1, row ), vmathV3GetElem( &mat->col2, row ) ); +} + +static inline void vmathM3Transpose( VmathMatrix3 *result, const VmathMatrix3 *mat ) +{ + vec_float4 tmp0, tmp1, res0, res1, res2; + tmp0 = vec_mergeh( mat->col0.vec128, mat->col2.vec128 ); + tmp1 = vec_mergel( mat->col0.vec128, mat->col2.vec128 ); + res0 = vec_mergeh( tmp0, mat->col1.vec128 ); + res1 = vec_perm( tmp0, mat->col1.vec128, _VECTORMATH_PERM_ZBWX ); + res2 = vec_perm( tmp1, mat->col1.vec128, _VECTORMATH_PERM_XCYX ); + result->col0.vec128 = res0; + result->col1.vec128 = res1; + result->col2.vec128 = res2; +} + +static inline void vmathM3Inverse( VmathMatrix3 *result, const VmathMatrix3 *mat ) +{ + vec_float4 tmp0, tmp1, tmp2, tmp3, tmp4, dot, invdet, inv0, inv1, inv2; + vec_float4 zero = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); + tmp2 = _vmathVfCross( mat->col0.vec128, mat->col1.vec128 ); + tmp0 = _vmathVfCross( mat->col1.vec128, mat->col2.vec128 ); + tmp1 = _vmathVfCross( mat->col2.vec128, mat->col0.vec128 ); + dot = _vmathVfDot3( tmp2, mat->col2.vec128 ); + dot = vec_splat( dot, 0 ); + invdet = recipf4( dot ); + tmp3 = vec_mergeh( tmp0, tmp2 ); + tmp4 = vec_mergel( tmp0, tmp2 ); + inv0 = vec_mergeh( tmp3, tmp1 ); + inv1 = vec_perm( tmp3, tmp1, _VECTORMATH_PERM_ZBWX ); + inv2 = vec_perm( tmp4, tmp1, _VECTORMATH_PERM_XCYX ); + inv0 = vec_madd( inv0, invdet, zero ); + inv1 = vec_madd( inv1, invdet, zero ); + inv2 = vec_madd( inv2, invdet, zero ); + result->col0.vec128 = inv0; + result->col1.vec128 = inv1; + result->col2.vec128 = inv2; +} + +static inline float vmathM3Determinant( const VmathMatrix3 *mat ) +{ + VmathVector3 tmpV3_0; + vmathV3Cross( &tmpV3_0, &mat->col0, &mat->col1 ); + return vmathV3Dot( &mat->col2, &tmpV3_0 ); +} + +static inline void vmathM3Add( VmathMatrix3 *result, const VmathMatrix3 *mat0, const VmathMatrix3 *mat1 ) +{ + vmathV3Add( &result->col0, &mat0->col0, &mat1->col0 ); + vmathV3Add( &result->col1, &mat0->col1, &mat1->col1 ); + vmathV3Add( &result->col2, &mat0->col2, &mat1->col2 ); +} + +static inline void vmathM3Sub( VmathMatrix3 *result, const VmathMatrix3 *mat0, const VmathMatrix3 *mat1 ) +{ + vmathV3Sub( &result->col0, &mat0->col0, &mat1->col0 ); + vmathV3Sub( &result->col1, &mat0->col1, &mat1->col1 ); + vmathV3Sub( &result->col2, &mat0->col2, &mat1->col2 ); +} + +static inline void vmathM3Neg( VmathMatrix3 *result, const VmathMatrix3 *mat ) +{ + vmathV3Neg( &result->col0, &mat->col0 ); + vmathV3Neg( &result->col1, &mat->col1 ); + vmathV3Neg( &result->col2, &mat->col2 ); +} + +static inline void vmathM3AbsPerElem( VmathMatrix3 *result, const VmathMatrix3 *mat ) +{ + vmathV3AbsPerElem( &result->col0, &mat->col0 ); + vmathV3AbsPerElem( &result->col1, &mat->col1 ); + vmathV3AbsPerElem( &result->col2, &mat->col2 ); +} + +static inline void vmathM3ScalarMul( VmathMatrix3 *result, const VmathMatrix3 *mat, float scalar ) +{ + vmathV3ScalarMul( &result->col0, &mat->col0, scalar ); + vmathV3ScalarMul( &result->col1, &mat->col1, scalar ); + vmathV3ScalarMul( &result->col2, &mat->col2, scalar ); +} + +static inline void vmathM3MulV3( VmathVector3 *result, const VmathMatrix3 *mat, const VmathVector3 *vec ) +{ + vec_float4 res; + vec_float4 xxxx, yyyy, zzzz; + xxxx = vec_splat( vec->vec128, 0 ); + yyyy = vec_splat( vec->vec128, 1 ); + zzzz = vec_splat( vec->vec128, 2 ); + res = vec_madd( mat->col0.vec128, xxxx, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + res = vec_madd( mat->col1.vec128, yyyy, res ); + res = vec_madd( mat->col2.vec128, zzzz, res ); + result->vec128 = res; +} + +static inline void vmathM3Mul( VmathMatrix3 *result, const VmathMatrix3 *mat0, const VmathMatrix3 *mat1 ) +{ + VmathMatrix3 tmpResult; + vmathM3MulV3( &tmpResult.col0, mat0, &mat1->col0 ); + vmathM3MulV3( &tmpResult.col1, mat0, &mat1->col1 ); + vmathM3MulV3( &tmpResult.col2, mat0, &mat1->col2 ); + vmathM3Copy( result, &tmpResult ); +} + +static inline void vmathM3MulPerElem( VmathMatrix3 *result, const VmathMatrix3 *mat0, const VmathMatrix3 *mat1 ) +{ + vmathV3MulPerElem( &result->col0, &mat0->col0, &mat1->col0 ); + vmathV3MulPerElem( &result->col1, &mat0->col1, &mat1->col1 ); + vmathV3MulPerElem( &result->col2, &mat0->col2, &mat1->col2 ); +} + +static inline void vmathM3MakeIdentity( VmathMatrix3 *result ) +{ + vmathV3MakeXAxis( &result->col0 ); + vmathV3MakeYAxis( &result->col1 ); + vmathV3MakeZAxis( &result->col2 ); +} + +static inline void vmathM3MakeRotationX( VmathMatrix3 *result, float radians ) +{ + vec_float4 s, c, res1, res2; + vec_uint4 select_y, select_z; + vec_float4 zero; + select_y = _VECTORMATH_MASK_0x0F00; + select_z = _VECTORMATH_MASK_0x00F0; + zero = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); + sincosf4( _vmathVfSplatScalar(radians), &s, &c ); + res1 = vec_sel( zero, c, select_y ); + res1 = vec_sel( res1, s, select_z ); + res2 = vec_sel( zero, negatef4(s), select_y ); + res2 = vec_sel( res2, c, select_z ); + vmathV3MakeXAxis( &result->col0 ); + result->col1.vec128 = res1; + result->col2.vec128 = res2; +} + +static inline void vmathM3MakeRotationY( VmathMatrix3 *result, float radians ) +{ + vec_float4 s, c, res0, res2; + vec_uint4 select_x, select_z; + vec_float4 zero; + select_x = _VECTORMATH_MASK_0xF000; + select_z = _VECTORMATH_MASK_0x00F0; + zero = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); + sincosf4( _vmathVfSplatScalar(radians), &s, &c ); + res0 = vec_sel( zero, c, select_x ); + res0 = vec_sel( res0, negatef4(s), select_z ); + res2 = vec_sel( zero, s, select_x ); + res2 = vec_sel( res2, c, select_z ); + result->col0.vec128 = res0; + vmathV3MakeYAxis( &result->col1 ); + result->col2.vec128 = res2; +} + +static inline void vmathM3MakeRotationZ( VmathMatrix3 *result, float radians ) +{ + vec_float4 s, c, res0, res1; + vec_uint4 select_x, select_y; + vec_float4 zero; + select_x = _VECTORMATH_MASK_0xF000; + select_y = _VECTORMATH_MASK_0x0F00; + zero = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); + sincosf4( _vmathVfSplatScalar(radians), &s, &c ); + res0 = vec_sel( zero, c, select_x ); + res0 = vec_sel( res0, s, select_y ); + res1 = vec_sel( zero, negatef4(s), select_x ); + res1 = vec_sel( res1, c, select_y ); + result->col0.vec128 = res0; + result->col1.vec128 = res1; + vmathV3MakeZAxis( &result->col2 ); +} + +static inline void vmathM3MakeRotationZYX( VmathMatrix3 *result, const VmathVector3 *radiansXYZ ) +{ + VmathVector4 tmpV4_0; + vec_float4 angles, s, negS, c, X0, X1, Y0, Y1, Z0, Z1, tmp; + vec_float4 zero = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); + vmathV4MakeFromV3Scalar( &tmpV4_0, radiansXYZ, 0.0f ); + angles = tmpV4_0.vec128; + sincosf4( angles, &s, &c ); + negS = negatef4( s ); + Z0 = vec_mergel( c, s ); + Z1 = vec_mergel( negS, c ); + Z1 = vec_andc( Z1, (vec_float4)_VECTORMATH_MASK_0x000F ); + Y0 = vec_perm( negS, c, _VECTORMATH_PERM_BBYX ); + Y1 = vec_perm( c, s, _VECTORMATH_PERM_BBYX ); + X0 = vec_splat( s, 0 ); + X1 = vec_splat( c, 0 ); + tmp = vec_madd( Z0, Y1, zero ); + result->col0.vec128 = vec_madd( Z0, Y0, zero ); + result->col1.vec128 = vec_madd( Z1, X1, vec_madd( tmp, X0, zero ) ); + result->col2.vec128 = vec_nmsub( Z1, X0, vec_madd( tmp, X1, zero ) ); +} + +static inline void vmathM3MakeRotationAxis( VmathMatrix3 *result, float radians, const VmathVector3 *unitVec ) +{ + vec_float4 axis, s, c, oneMinusC, axisS, negAxisS, xxxx, yyyy, zzzz, tmp0, tmp1, tmp2; + vec_float4 zero = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); + axis = unitVec->vec128; + sincosf4( (vec_float4){radians,radians,radians,radians}, &s, &c ); + xxxx = vec_splat( axis, 0 ); + yyyy = vec_splat( axis, 1 ); + zzzz = vec_splat( axis, 2 ); + oneMinusC = vec_sub( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), c ); + axisS = vec_madd( axis, s, zero ); + negAxisS = negatef4( axisS ); + tmp0 = vec_perm( axisS, negAxisS, _VECTORMATH_PERM_XZBX ); + tmp1 = vec_perm( axisS, negAxisS, _VECTORMATH_PERM_CXXX ); + tmp2 = vec_perm( axisS, negAxisS, _VECTORMATH_PERM_YAXX ); + tmp0 = vec_sel( tmp0, c, _VECTORMATH_MASK_0xF000 ); + tmp1 = vec_sel( tmp1, c, _VECTORMATH_MASK_0x0F00 ); + tmp2 = vec_sel( tmp2, c, _VECTORMATH_MASK_0x00F0 ); + result->col0.vec128 = vec_madd( vec_madd( axis, xxxx, zero ), oneMinusC, tmp0 ); + result->col1.vec128 = vec_madd( vec_madd( axis, yyyy, zero ), oneMinusC, tmp1 ); + result->col2.vec128 = vec_madd( vec_madd( axis, zzzz, zero ), oneMinusC, tmp2 ); +} + +static inline void vmathM3MakeRotationQ( VmathMatrix3 *result, const VmathQuat *unitQuat ) +{ + vmathM3MakeFromQ( result, unitQuat ); +} + +static inline void vmathM3MakeScale( VmathMatrix3 *result, const VmathVector3 *scaleVec ) +{ + vec_float4 zero = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); + result->col0.vec128 = vec_sel( zero, scaleVec->vec128, _VECTORMATH_MASK_0xF000 ); + result->col1.vec128 = vec_sel( zero, scaleVec->vec128, _VECTORMATH_MASK_0x0F00 ); + result->col2.vec128 = vec_sel( zero, scaleVec->vec128, _VECTORMATH_MASK_0x00F0 ); +} + +static inline void vmathM3AppendScale( VmathMatrix3 *result, const VmathMatrix3 *mat, const VmathVector3 *scaleVec ) +{ + vmathV3ScalarMul( &result->col0, &mat->col0, vmathV3GetX( scaleVec ) ); + vmathV3ScalarMul( &result->col1, &mat->col1, vmathV3GetY( scaleVec ) ); + vmathV3ScalarMul( &result->col2, &mat->col2, vmathV3GetZ( scaleVec ) ); +} + +static inline void vmathM3PrependScale( VmathMatrix3 *result, const VmathVector3 *scaleVec, const VmathMatrix3 *mat ) +{ + vmathV3MulPerElem( &result->col0, &mat->col0, scaleVec ); + vmathV3MulPerElem( &result->col1, &mat->col1, scaleVec ); + vmathV3MulPerElem( &result->col2, &mat->col2, scaleVec ); +} + +static inline void vmathM3Select( VmathMatrix3 *result, const VmathMatrix3 *mat0, const VmathMatrix3 *mat1, unsigned int select1 ) +{ + vmathV3Select( &result->col0, &mat0->col0, &mat1->col0, select1 ); + vmathV3Select( &result->col1, &mat0->col1, &mat1->col1, select1 ); + vmathV3Select( &result->col2, &mat0->col2, &mat1->col2, select1 ); +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathM3Print( const VmathMatrix3 *mat ) +{ + VmathVector3 tmpV3_0, tmpV3_1, tmpV3_2; + vmathM3GetRow( &tmpV3_0, mat, 0 ); + vmathV3Print( &tmpV3_0 ); + vmathM3GetRow( &tmpV3_1, mat, 1 ); + vmathV3Print( &tmpV3_1 ); + vmathM3GetRow( &tmpV3_2, mat, 2 ); + vmathV3Print( &tmpV3_2 ); +} + +static inline void vmathM3Prints( const VmathMatrix3 *mat, const char *name ) +{ + printf("%s:\n", name); + vmathM3Print( mat ); +} + +#endif + +static inline void vmathM4Copy( VmathMatrix4 *result, const VmathMatrix4 *mat ) +{ + vmathV4Copy( &result->col0, &mat->col0 ); + vmathV4Copy( &result->col1, &mat->col1 ); + vmathV4Copy( &result->col2, &mat->col2 ); + vmathV4Copy( &result->col3, &mat->col3 ); +} + +static inline void vmathM4MakeFromScalar( VmathMatrix4 *result, float scalar ) +{ + vmathV4MakeFromScalar( &result->col0, scalar ); + vmathV4MakeFromScalar( &result->col1, scalar ); + vmathV4MakeFromScalar( &result->col2, scalar ); + vmathV4MakeFromScalar( &result->col3, scalar ); +} + +static inline void vmathM4MakeFromT3( VmathMatrix4 *result, const VmathTransform3 *mat ) +{ + vmathV4MakeFromV3Scalar( &result->col0, &mat->col0, 0.0f ); + vmathV4MakeFromV3Scalar( &result->col1, &mat->col1, 0.0f ); + vmathV4MakeFromV3Scalar( &result->col2, &mat->col2, 0.0f ); + vmathV4MakeFromV3Scalar( &result->col3, &mat->col3, 1.0f ); +} + +static inline void vmathM4MakeFromCols( VmathMatrix4 *result, const VmathVector4 *_col0, const VmathVector4 *_col1, const VmathVector4 *_col2, const VmathVector4 *_col3 ) +{ + vmathV4Copy( &result->col0, _col0 ); + vmathV4Copy( &result->col1, _col1 ); + vmathV4Copy( &result->col2, _col2 ); + vmathV4Copy( &result->col3, _col3 ); +} + +static inline void vmathM4MakeFromM3V3( VmathMatrix4 *result, const VmathMatrix3 *mat, const VmathVector3 *translateVec ) +{ + vmathV4MakeFromV3Scalar( &result->col0, &mat->col0, 0.0f ); + vmathV4MakeFromV3Scalar( &result->col1, &mat->col1, 0.0f ); + vmathV4MakeFromV3Scalar( &result->col2, &mat->col2, 0.0f ); + vmathV4MakeFromV3Scalar( &result->col3, translateVec, 1.0f ); +} + +static inline void vmathM4MakeFromQV3( VmathMatrix4 *result, const VmathQuat *unitQuat, const VmathVector3 *translateVec ) +{ + VmathMatrix3 mat; + vmathM3MakeFromQ( &mat, unitQuat ); + vmathV4MakeFromV3Scalar( &result->col0, &mat.col0, 0.0f ); + vmathV4MakeFromV3Scalar( &result->col1, &mat.col1, 0.0f ); + vmathV4MakeFromV3Scalar( &result->col2, &mat.col2, 0.0f ); + vmathV4MakeFromV3Scalar( &result->col3, translateVec, 1.0f ); +} + +static inline void vmathM4SetCol0( VmathMatrix4 *result, const VmathVector4 *_col0 ) +{ + vmathV4Copy( &result->col0, _col0 ); +} + +static inline void vmathM4SetCol1( VmathMatrix4 *result, const VmathVector4 *_col1 ) +{ + vmathV4Copy( &result->col1, _col1 ); +} + +static inline void vmathM4SetCol2( VmathMatrix4 *result, const VmathVector4 *_col2 ) +{ + vmathV4Copy( &result->col2, _col2 ); +} + +static inline void vmathM4SetCol3( VmathMatrix4 *result, const VmathVector4 *_col3 ) +{ + vmathV4Copy( &result->col3, _col3 ); +} + +static inline void vmathM4SetCol( VmathMatrix4 *result, int col, const VmathVector4 *vec ) +{ + vmathV4Copy( (&result->col0 + col), vec ); +} + +static inline void vmathM4SetRow( VmathMatrix4 *result, int row, const VmathVector4 *vec ) +{ + vmathV4SetElem( &result->col0, row, vmathV4GetElem( vec, 0 ) ); + vmathV4SetElem( &result->col1, row, vmathV4GetElem( vec, 1 ) ); + vmathV4SetElem( &result->col2, row, vmathV4GetElem( vec, 2 ) ); + vmathV4SetElem( &result->col3, row, vmathV4GetElem( vec, 3 ) ); +} + +static inline void vmathM4SetElem( VmathMatrix4 *result, int col, int row, float val ) +{ + VmathVector4 tmpV3_0; + vmathM4GetCol( &tmpV3_0, result, col ); + vmathV4SetElem( &tmpV3_0, row, val ); + vmathM4SetCol( result, col, &tmpV3_0 ); +} + +static inline float vmathM4GetElem( const VmathMatrix4 *mat, int col, int row ) +{ + VmathVector4 tmpV4_0; + vmathM4GetCol( &tmpV4_0, mat, col ); + return vmathV4GetElem( &tmpV4_0, row ); +} + +static inline void vmathM4GetCol0( VmathVector4 *result, const VmathMatrix4 *mat ) +{ + vmathV4Copy( result, &mat->col0 ); +} + +static inline void vmathM4GetCol1( VmathVector4 *result, const VmathMatrix4 *mat ) +{ + vmathV4Copy( result, &mat->col1 ); +} + +static inline void vmathM4GetCol2( VmathVector4 *result, const VmathMatrix4 *mat ) +{ + vmathV4Copy( result, &mat->col2 ); +} + +static inline void vmathM4GetCol3( VmathVector4 *result, const VmathMatrix4 *mat ) +{ + vmathV4Copy( result, &mat->col3 ); +} + +static inline void vmathM4GetCol( VmathVector4 *result, const VmathMatrix4 *mat, int col ) +{ + vmathV4Copy( result, (&mat->col0 + col) ); +} + +static inline void vmathM4GetRow( VmathVector4 *result, const VmathMatrix4 *mat, int row ) +{ + vmathV4MakeFromElems( result, vmathV4GetElem( &mat->col0, row ), vmathV4GetElem( &mat->col1, row ), vmathV4GetElem( &mat->col2, row ), vmathV4GetElem( &mat->col3, row ) ); +} + +static inline void vmathM4Transpose( VmathMatrix4 *result, const VmathMatrix4 *mat ) +{ + vec_float4 tmp0, tmp1, tmp2, tmp3, res0, res1, res2, res3; + tmp0 = vec_mergeh( mat->col0.vec128, mat->col2.vec128 ); + tmp1 = vec_mergeh( mat->col1.vec128, mat->col3.vec128 ); + tmp2 = vec_mergel( mat->col0.vec128, mat->col2.vec128 ); + tmp3 = vec_mergel( mat->col1.vec128, mat->col3.vec128 ); + res0 = vec_mergeh( tmp0, tmp1 ); + res1 = vec_mergel( tmp0, tmp1 ); + res2 = vec_mergeh( tmp2, tmp3 ); + res3 = vec_mergel( tmp2, tmp3 ); + result->col0.vec128 = res0; + result->col1.vec128 = res1; + result->col2.vec128 = res2; + result->col3.vec128 = res3; +} + +static inline void vmathM4Inverse( VmathMatrix4 *result, const VmathMatrix4 *mat ) +{ + /* function implementation based on code from STIDC SDK: */ + /* -------------------------------------------------------------- */ + /* PLEASE DO NOT MODIFY THIS SECTION */ + /* This prolog section is automatically generated. */ + /* */ + /* (C)Copyright */ + /* Sony Computer Entertainment, Inc., */ + /* Toshiba Corporation, */ + /* International Business Machines Corporation, */ + /* 2001,2002. */ + /* S/T/I Confidential Information */ + /* -------------------------------------------------------------- */ + vector float in0, in1, in2, in3; + vector float tmp0, tmp1, tmp2, tmp3; + vector float cof0, cof1, cof2, cof3; + vector float t0, t1, t2, t3; + vector float t01, t02, t03, t12, t23; + vector float t1r, t2r; + vector float t01r, t02r, t03r, t12r, t23r; + vector float t1r3, t1r3r; + vector float det, det0, det1, det2, det3, invdet; + vector float vzero = (vector float){0.0}; + in0 = mat->col0.vec128; + in1 = mat->col1.vec128; + in2 = mat->col2.vec128; + in3 = mat->col3.vec128; + /* Perform transform of the input matrix of the form: + * A B C D + * E F G H + * I J K L + * M N O P + * + * The pseudo transpose of the input matrix is trans: + * A E I M + * J N B F + * C G K O + * L P D H + */ + tmp0 = vec_perm(in0, in1, _VECTORMATH_PERM_XAZC); /* A E C G */ + tmp1 = vec_perm(in2, in3, _VECTORMATH_PERM_XAZC); /* I M K O */ + tmp2 = vec_perm(in0, in1, _VECTORMATH_PERM_YBWD); /* B F D H */ + tmp3 = vec_perm(in2, in3, _VECTORMATH_PERM_YBWD); /* J N L P */ + t0 = vec_perm(tmp0, tmp1, _VECTORMATH_PERM_XYAB); /* A E I M */ + t1 = vec_perm(tmp3, tmp2, _VECTORMATH_PERM_XYAB); /* J N B F */ + t2 = vec_perm(tmp0, tmp1, _VECTORMATH_PERM_ZWCD); /* C G K O */ + t3 = vec_perm(tmp3, tmp2, _VECTORMATH_PERM_ZWCD); /* L P D H */ + /* Generate a cofactor matrix. The computed cofactors reside in + * cof0, cof1, cof2, cof3. + */ + t23 = vec_madd(t2, t3, vzero); /* CL GP KD OH */ + t23 = vec_perm(t23, t23, _VECTORMATH_PERM_YXWZ); /* GP CL OH KD */ + cof0 = vec_nmsub(t1, t23, vzero); /* -(JGP NCL FOH BKD) */ + cof1 = vec_nmsub(t0, t23, vzero); /* -(AGP ECL IOH MKD) */ + t23r = vec_sld(t23, t23, 8); /* OH KD GP CL */ + cof0 = vec_madd(t1, t23r, cof0); /* JOH NKD BGP FCL + cof0 */ + cof1 = vec_madd(t0, t23r, cof1); /* AOH EKD IGP MCL + cof1 */ + cof1 = vec_sld(cof1, cof1, 8); /* IGP MCL AOH EKD - IOH MKD AGP ECL */ + t12 = vec_madd(t1, t2, vzero); /* JC NG BK FO */ + t12 = vec_perm(t12, t12, _VECTORMATH_PERM_YXWZ); /* NG JC FO BK */ + cof0 = vec_madd(t3, t12, cof0); /* LNG PJC DFO HBK + cof0 */ + cof3 = vec_madd(t0, t12, vzero); /* ANG EJC IFO MBK */ + t12r = vec_sld(t12, t12, 8); /* FO BK NG JC */ + cof0 = vec_nmsub(t3, t12r, cof0); /* cof0 - LFO PBK DNG HJC */ + cof3 = vec_nmsub(t0, t12r, cof3); /* cof3 - AFO EBK ING MJC */ + cof3 = vec_sld(cof3, cof3, 8); /* ING MJC AFO EBK - IFO MBK ANG EJC */ + t1r = vec_sld(t1, t1, 8); /* B F J N */ + t2r = vec_sld(t2, t2, 8); /* K O C G */ + t1r3 = vec_madd(t1r, t3, vzero); /* BL FP JD NH */ + t1r3 = vec_perm(t1r3, t1r3, _VECTORMATH_PERM_YXWZ); /* FP BL NH JD */ + cof0 = vec_madd(t2r, t1r3, cof0); /* KFP OBL CNH GJD + cof0 */ + cof2 = vec_madd(t0, t1r3, vzero); /* AFP EBL INH MJD */ + t1r3r = vec_sld(t1r3, t1r3, 8); /* NH JD FP BL */ + cof0 = vec_nmsub(t2r, t1r3r, cof0); /* cof0 - KNH OJD CFP GBL */ + cof2 = vec_nmsub(t0, t1r3r, cof2); /* cof2 - ANH EJD IFP MBL */ + cof2 = vec_sld(cof2, cof2, 8); /* IFP MBL ANH EJD - INH MJD AFP EBL */ + t01 = vec_madd(t0, t1, vzero); /* AJ EN IB MF */ + t01 = vec_perm(t01, t01, _VECTORMATH_PERM_YXWZ); /* EN AJ MF IB */ + cof2 = vec_nmsub(t3, t01, cof2); /* cof2 - LEN PAJ DMF HIB */ + cof3 = vec_madd(t2r, t01, cof3); /* KEN OAJ CMF GIB + cof3 */ + t01r = vec_sld(t01, t01, 8); /* MF IB EN AJ */ + cof2 = vec_madd(t3, t01r, cof2); /* LMF PIB DEN HAJ + cof2 */ + cof3 = vec_nmsub(t2r, t01r, cof3); /* cof3 - KMF OIB CEN GAJ */ + t03 = vec_madd(t0, t3, vzero); /* AL EP ID MH */ + t03 = vec_perm(t03, t03, _VECTORMATH_PERM_YXWZ); /* EP AL MH ID */ + cof1 = vec_nmsub(t2r, t03, cof1); /* cof1 - KEP OAL CMH GID */ + cof2 = vec_madd(t1, t03, cof2); /* JEP NAL BMH FID + cof2 */ + t03r = vec_sld(t03, t03, 8); /* MH ID EP AL */ + cof1 = vec_madd(t2r, t03r, cof1); /* KMH OID CEP GAL + cof1 */ + cof2 = vec_nmsub(t1, t03r, cof2); /* cof2 - JMH NID BEP FAL */ + t02 = vec_madd(t0, t2r, vzero); /* AK EO IC MG */ + t02 = vec_perm(t02, t02, _VECTORMATH_PERM_YXWZ); /* E0 AK MG IC */ + cof1 = vec_madd(t3, t02, cof1); /* LEO PAK DMG HIC + cof1 */ + cof3 = vec_nmsub(t1, t02, cof3); /* cof3 - JEO NAK BMG FIC */ + t02r = vec_sld(t02, t02, 8); /* MG IC EO AK */ + cof1 = vec_nmsub(t3, t02r, cof1); /* cof1 - LMG PIC DEO HAK */ + cof3 = vec_madd(t1, t02r, cof3); /* JMG NIC BEO FAK + cof3 */ + /* Compute the determinant of the matrix + * + * det = sum_across(t0 * cof0); + * + * We perform a sum across the entire vector so that + * we don't have to splat the result when multiplying the + * cofactors by the inverse of the determinant. + */ + det = vec_madd(t0, cof0, vzero); + det0 = vec_splat(det, 0); + det1 = vec_splat(det, 1); + det2 = vec_splat(det, 2); + det3 = vec_splat(det, 3); + det = vec_add(det0, det1); + det2 = vec_add(det2, det3); + det = vec_add(det, det2); + /* Compute the reciprocal of the determinant. + */ + invdet = recipf4(det); + /* Multiply the cofactors by the reciprocal of the determinant. + */ + result->col0.vec128 = vec_madd(cof0, invdet, vzero); + result->col1.vec128 = vec_madd(cof1, invdet, vzero); + result->col2.vec128 = vec_madd(cof2, invdet, vzero); + result->col3.vec128 = vec_madd(cof3, invdet, vzero); +} + +static inline void vmathM4AffineInverse( VmathMatrix4 *result, const VmathMatrix4 *mat ) +{ + VmathTransform3 affineMat, tmpT3_0; + VmathVector3 tmpV3_0, tmpV3_1, tmpV3_2, tmpV3_3; + vmathV4GetXYZ( &tmpV3_0, &mat->col0 ); + vmathT3SetCol0( &affineMat, &tmpV3_0 ); + vmathV4GetXYZ( &tmpV3_1, &mat->col1 ); + vmathT3SetCol1( &affineMat, &tmpV3_1 ); + vmathV4GetXYZ( &tmpV3_2, &mat->col2 ); + vmathT3SetCol2( &affineMat, &tmpV3_2 ); + vmathV4GetXYZ( &tmpV3_3, &mat->col3 ); + vmathT3SetCol3( &affineMat, &tmpV3_3 ); + vmathT3Inverse( &tmpT3_0, &affineMat ); + vmathM4MakeFromT3( result, &tmpT3_0 ); +} + +static inline void vmathM4OrthoInverse( VmathMatrix4 *result, const VmathMatrix4 *mat ) +{ + VmathTransform3 affineMat, tmpT3_0; + VmathVector3 tmpV3_0, tmpV3_1, tmpV3_2, tmpV3_3; + vmathV4GetXYZ( &tmpV3_0, &mat->col0 ); + vmathT3SetCol0( &affineMat, &tmpV3_0 ); + vmathV4GetXYZ( &tmpV3_1, &mat->col1 ); + vmathT3SetCol1( &affineMat, &tmpV3_1 ); + vmathV4GetXYZ( &tmpV3_2, &mat->col2 ); + vmathT3SetCol2( &affineMat, &tmpV3_2 ); + vmathV4GetXYZ( &tmpV3_3, &mat->col3 ); + vmathT3SetCol3( &affineMat, &tmpV3_3 ); + vmathT3OrthoInverse( &tmpT3_0, &affineMat ); + vmathM4MakeFromT3( result, &tmpT3_0 ); +} + +static inline float vmathM4Determinant( const VmathMatrix4 *mat ) +{ + /* function implementation based on code from STIDC SDK: */ + /* -------------------------------------------------------------- */ + /* PLEASE DO NOT MODIFY THIS SECTION */ + /* This prolog section is automatically generated. */ + /* */ + /* (C)Copyright */ + /* Sony Computer Entertainment, Inc., */ + /* Toshiba Corporation, */ + /* International Business Machines Corporation, */ + /* 2001,2002. */ + /* S/T/I Confidential Information */ + /* -------------------------------------------------------------- */ + vector float in0, in1, in2, in3; + vector float tmp0, tmp1, tmp2, tmp3; + vector float cof0; + vector float t0, t1, t2, t3; + vector float t12, t23; + vector float t1r, t2r; + vector float t12r, t23r; + vector float t1r3, t1r3r; + vector float vzero = (vector float){0.0}; + union { vec_float4 v; float s[4]; } tmp; + in0 = mat->col0.vec128; + in1 = mat->col1.vec128; + in2 = mat->col2.vec128; + in3 = mat->col3.vec128; + /* Perform transform of the input matrix of the form: + * A B C D + * E F G H + * I J K L + * M N O P + * + * The pseudo transpose of the input matrix is trans: + * A E I M + * J N B F + * C G K O + * L P D H + */ + tmp0 = vec_perm(in0, in1, _VECTORMATH_PERM_XAZC); /* A E C G */ + tmp1 = vec_perm(in2, in3, _VECTORMATH_PERM_XAZC); /* I M K O */ + tmp2 = vec_perm(in0, in1, _VECTORMATH_PERM_YBWD); /* B F D H */ + tmp3 = vec_perm(in2, in3, _VECTORMATH_PERM_YBWD); /* J N L P */ + t0 = vec_perm(tmp0, tmp1, _VECTORMATH_PERM_XYAB); /* A E I M */ + t1 = vec_perm(tmp3, tmp2, _VECTORMATH_PERM_XYAB); /* J N B F */ + t2 = vec_perm(tmp0, tmp1, _VECTORMATH_PERM_ZWCD); /* C G K O */ + t3 = vec_perm(tmp3, tmp2, _VECTORMATH_PERM_ZWCD); /* L P D H */ + /* Generate a cofactor matrix. The computed cofactors reside in + * cof0, cof1, cof2, cof3. + */ + t23 = vec_madd(t2, t3, vzero); /* CL GP KD OH */ + t23 = vec_perm(t23, t23, _VECTORMATH_PERM_YXWZ); /* GP CL OH KD */ + cof0 = vec_nmsub(t1, t23, vzero); /* -(JGP NCL FOH BKD) */ + t23r = vec_sld(t23, t23, 8); /* OH KD GP CL */ + cof0 = vec_madd(t1, t23r, cof0); /* JOH NKD BGP FCL + cof0 */ + t12 = vec_madd(t1, t2, vzero); /* JC NG BK FO */ + t12 = vec_perm(t12, t12, _VECTORMATH_PERM_YXWZ); /* NG JC FO BK */ + cof0 = vec_madd(t3, t12, cof0); /* LNG PJC DFO HBK + cof0 */ + t12r = vec_sld(t12, t12, 8); /* FO BK NG JC */ + cof0 = vec_nmsub(t3, t12r, cof0); /* cof0 - LFO PBK DNG HJC */ + t1r = vec_sld(t1, t1, 8); /* B F J N */ + t2r = vec_sld(t2, t2, 8); /* K O C G */ + t1r3 = vec_madd(t1r, t3, vzero); /* BL FP JD NH */ + t1r3 = vec_perm(t1r3, t1r3, _VECTORMATH_PERM_YXWZ); /* FP BL NH JD */ + cof0 = vec_madd(t2r, t1r3, cof0); /* KFP OBL CNH GJD + cof0 */ + t1r3r = vec_sld(t1r3, t1r3, 8); /* NH JD FP BL */ + cof0 = vec_nmsub(t2r, t1r3r, cof0); /* cof0 - KNH OJD CFP GBL */ + tmp.v = _vmathVfDot4(t0,cof0); + return tmp.s[0]; +} + +static inline void vmathM4Add( VmathMatrix4 *result, const VmathMatrix4 *mat0, const VmathMatrix4 *mat1 ) +{ + vmathV4Add( &result->col0, &mat0->col0, &mat1->col0 ); + vmathV4Add( &result->col1, &mat0->col1, &mat1->col1 ); + vmathV4Add( &result->col2, &mat0->col2, &mat1->col2 ); + vmathV4Add( &result->col3, &mat0->col3, &mat1->col3 ); +} + +static inline void vmathM4Sub( VmathMatrix4 *result, const VmathMatrix4 *mat0, const VmathMatrix4 *mat1 ) +{ + vmathV4Sub( &result->col0, &mat0->col0, &mat1->col0 ); + vmathV4Sub( &result->col1, &mat0->col1, &mat1->col1 ); + vmathV4Sub( &result->col2, &mat0->col2, &mat1->col2 ); + vmathV4Sub( &result->col3, &mat0->col3, &mat1->col3 ); +} + +static inline void vmathM4Neg( VmathMatrix4 *result, const VmathMatrix4 *mat ) +{ + vmathV4Neg( &result->col0, &mat->col0 ); + vmathV4Neg( &result->col1, &mat->col1 ); + vmathV4Neg( &result->col2, &mat->col2 ); + vmathV4Neg( &result->col3, &mat->col3 ); +} + +static inline void vmathM4AbsPerElem( VmathMatrix4 *result, const VmathMatrix4 *mat ) +{ + vmathV4AbsPerElem( &result->col0, &mat->col0 ); + vmathV4AbsPerElem( &result->col1, &mat->col1 ); + vmathV4AbsPerElem( &result->col2, &mat->col2 ); + vmathV4AbsPerElem( &result->col3, &mat->col3 ); +} + +static inline void vmathM4ScalarMul( VmathMatrix4 *result, const VmathMatrix4 *mat, float scalar ) +{ + vmathV4ScalarMul( &result->col0, &mat->col0, scalar ); + vmathV4ScalarMul( &result->col1, &mat->col1, scalar ); + vmathV4ScalarMul( &result->col2, &mat->col2, scalar ); + vmathV4ScalarMul( &result->col3, &mat->col3, scalar ); +} + +static inline void vmathM4MulV4( VmathVector4 *result, const VmathMatrix4 *mat, const VmathVector4 *vec ) +{ + vec_float4 tmp0, tmp1, res; + vec_float4 xxxx, yyyy, zzzz, wwww; + vec_float4 zero = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); + xxxx = vec_splat( vec->vec128, 0 ); + yyyy = vec_splat( vec->vec128, 1 ); + zzzz = vec_splat( vec->vec128, 2 ); + wwww = vec_splat( vec->vec128, 3 ); + tmp0 = vec_madd( mat->col0.vec128, xxxx, zero ); + tmp1 = vec_madd( mat->col1.vec128, yyyy, zero ); + tmp0 = vec_madd( mat->col2.vec128, zzzz, tmp0 ); + tmp1 = vec_madd( mat->col3.vec128, wwww, tmp1 ); + res = vec_add( tmp0, tmp1 ); + result->vec128 = res; +} + +static inline void vmathM4MulV3( VmathVector4 *result, const VmathMatrix4 *mat, const VmathVector3 *vec ) +{ + vec_float4 res; + vec_float4 xxxx, yyyy, zzzz; + xxxx = vec_splat( vec->vec128, 0 ); + yyyy = vec_splat( vec->vec128, 1 ); + zzzz = vec_splat( vec->vec128, 2 ); + res = vec_madd( mat->col0.vec128, xxxx, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + res = vec_madd( mat->col1.vec128, yyyy, res ); + res = vec_madd( mat->col2.vec128, zzzz, res ); + result->vec128 = res; +} + +static inline void vmathM4MulP3( VmathVector4 *result, const VmathMatrix4 *mat, const VmathPoint3 *pnt ) +{ + vec_float4 tmp0, tmp1, res; + vec_float4 xxxx, yyyy, zzzz; + vec_float4 zero = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); + xxxx = vec_splat( pnt->vec128, 0 ); + yyyy = vec_splat( pnt->vec128, 1 ); + zzzz = vec_splat( pnt->vec128, 2 ); + tmp0 = vec_madd( mat->col0.vec128, xxxx, zero ); + tmp1 = vec_madd( mat->col1.vec128, yyyy, zero ); + tmp0 = vec_madd( mat->col2.vec128, zzzz, tmp0 ); + tmp1 = vec_add( mat->col3.vec128, tmp1 ); + res = vec_add( tmp0, tmp1 ); + result->vec128 = res; +} + +static inline void vmathM4Mul( VmathMatrix4 *result, const VmathMatrix4 *mat0, const VmathMatrix4 *mat1 ) +{ + VmathMatrix4 tmpResult; + vmathM4MulV4( &tmpResult.col0, mat0, &mat1->col0 ); + vmathM4MulV4( &tmpResult.col1, mat0, &mat1->col1 ); + vmathM4MulV4( &tmpResult.col2, mat0, &mat1->col2 ); + vmathM4MulV4( &tmpResult.col3, mat0, &mat1->col3 ); + vmathM4Copy( result, &tmpResult ); +} + +static inline void vmathM4MulT3( VmathMatrix4 *result, const VmathMatrix4 *mat, const VmathTransform3 *tfrm1 ) +{ + VmathMatrix4 tmpResult; + VmathPoint3 tmpP3_0; + vmathM4MulV3( &tmpResult.col0, mat, &tfrm1->col0 ); + vmathM4MulV3( &tmpResult.col1, mat, &tfrm1->col1 ); + vmathM4MulV3( &tmpResult.col2, mat, &tfrm1->col2 ); + vmathP3MakeFromV3( &tmpP3_0, &tfrm1->col3 ); + vmathM4MulP3( &tmpResult.col3, mat, &tmpP3_0 ); + vmathM4Copy( result, &tmpResult ); +} + +static inline void vmathM4MulPerElem( VmathMatrix4 *result, const VmathMatrix4 *mat0, const VmathMatrix4 *mat1 ) +{ + vmathV4MulPerElem( &result->col0, &mat0->col0, &mat1->col0 ); + vmathV4MulPerElem( &result->col1, &mat0->col1, &mat1->col1 ); + vmathV4MulPerElem( &result->col2, &mat0->col2, &mat1->col2 ); + vmathV4MulPerElem( &result->col3, &mat0->col3, &mat1->col3 ); +} + +static inline void vmathM4MakeIdentity( VmathMatrix4 *result ) +{ + vmathV4MakeXAxis( &result->col0 ); + vmathV4MakeYAxis( &result->col1 ); + vmathV4MakeZAxis( &result->col2 ); + vmathV4MakeWAxis( &result->col3 ); +} + +static inline void vmathM4SetUpper3x3( VmathMatrix4 *result, const VmathMatrix3 *mat3 ) +{ + vmathV4SetXYZ( &result->col0, &mat3->col0 ); + vmathV4SetXYZ( &result->col1, &mat3->col1 ); + vmathV4SetXYZ( &result->col2, &mat3->col2 ); +} + +static inline void vmathM4GetUpper3x3( VmathMatrix3 *result, const VmathMatrix4 *mat ) +{ + vmathV4GetXYZ( &result->col0, &mat->col0 ); + vmathV4GetXYZ( &result->col1, &mat->col1 ); + vmathV4GetXYZ( &result->col2, &mat->col2 ); +} + +static inline void vmathM4SetTranslation( VmathMatrix4 *result, const VmathVector3 *translateVec ) +{ + vmathV4SetXYZ( &result->col3, translateVec ); +} + +static inline void vmathM4GetTranslation( VmathVector3 *result, const VmathMatrix4 *mat ) +{ + vmathV4GetXYZ( result, &mat->col3 ); +} + +static inline void vmathM4MakeRotationX( VmathMatrix4 *result, float radians ) +{ + vec_float4 s, c, res1, res2; + vec_uint4 select_y, select_z; + vec_float4 zero; + select_y = _VECTORMATH_MASK_0x0F00; + select_z = _VECTORMATH_MASK_0x00F0; + zero = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); + sincosf4( _vmathVfSplatScalar(radians), &s, &c ); + res1 = vec_sel( zero, c, select_y ); + res1 = vec_sel( res1, s, select_z ); + res2 = vec_sel( zero, negatef4(s), select_y ); + res2 = vec_sel( res2, c, select_z ); + vmathV4MakeXAxis( &result->col0 ); + result->col1.vec128 = res1; + result->col2.vec128 = res2; + vmathV4MakeWAxis( &result->col3 ); +} + +static inline void vmathM4MakeRotationY( VmathMatrix4 *result, float radians ) +{ + vec_float4 s, c, res0, res2; + vec_uint4 select_x, select_z; + vec_float4 zero; + select_x = _VECTORMATH_MASK_0xF000; + select_z = _VECTORMATH_MASK_0x00F0; + zero = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); + sincosf4( _vmathVfSplatScalar(radians), &s, &c ); + res0 = vec_sel( zero, c, select_x ); + res0 = vec_sel( res0, negatef4(s), select_z ); + res2 = vec_sel( zero, s, select_x ); + res2 = vec_sel( res2, c, select_z ); + result->col0.vec128 = res0; + vmathV4MakeYAxis( &result->col1 ); + result->col2.vec128 = res2; + vmathV4MakeWAxis( &result->col3 ); +} + +static inline void vmathM4MakeRotationZ( VmathMatrix4 *result, float radians ) +{ + vec_float4 s, c, res0, res1; + vec_uint4 select_x, select_y; + vec_float4 zero; + select_x = _VECTORMATH_MASK_0xF000; + select_y = _VECTORMATH_MASK_0x0F00; + zero = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); + sincosf4( _vmathVfSplatScalar(radians), &s, &c ); + res0 = vec_sel( zero, c, select_x ); + res0 = vec_sel( res0, s, select_y ); + res1 = vec_sel( zero, negatef4(s), select_x ); + res1 = vec_sel( res1, c, select_y ); + result->col0.vec128 = res0; + result->col1.vec128 = res1; + vmathV4MakeZAxis( &result->col2 ); + vmathV4MakeWAxis( &result->col3 ); +} + +static inline void vmathM4MakeRotationZYX( VmathMatrix4 *result, const VmathVector3 *radiansXYZ ) +{ + VmathVector4 tmpV4_0; + vec_float4 angles, s, negS, c, X0, X1, Y0, Y1, Z0, Z1, tmp; + vec_float4 zero = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); + vmathV4MakeFromV3Scalar( &tmpV4_0, radiansXYZ, 0.0f ); + angles = tmpV4_0.vec128; + sincosf4( angles, &s, &c ); + negS = negatef4( s ); + Z0 = vec_mergel( c, s ); + Z1 = vec_mergel( negS, c ); + Z1 = vec_andc( Z1, (vec_float4)_VECTORMATH_MASK_0x000F ); + Y0 = vec_perm( negS, c, _VECTORMATH_PERM_BBYX ); + Y1 = vec_perm( c, s, _VECTORMATH_PERM_BBYX ); + X0 = vec_splat( s, 0 ); + X1 = vec_splat( c, 0 ); + tmp = vec_madd( Z0, Y1, zero ); + result->col0.vec128 = vec_madd( Z0, Y0, zero ); + result->col1.vec128 = vec_madd( Z1, X1, vec_madd( tmp, X0, zero ) ); + result->col2.vec128 = vec_nmsub( Z1, X0, vec_madd( tmp, X1, zero ) ); + vmathV4MakeWAxis( &result->col3 ); +} + +static inline void vmathM4MakeRotationAxis( VmathMatrix4 *result, float radians, const VmathVector3 *unitVec ) +{ + vec_float4 axis, s, c, oneMinusC, axisS, negAxisS, xxxx, yyyy, zzzz, tmp0, tmp1, tmp2, zeroW; + vec_float4 zero = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); + axis = unitVec->vec128; + sincosf4( (vec_float4){radians,radians,radians,radians}, &s, &c ); + xxxx = vec_splat( axis, 0 ); + yyyy = vec_splat( axis, 1 ); + zzzz = vec_splat( axis, 2 ); + oneMinusC = vec_sub( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), c ); + axisS = vec_madd( axis, s, zero ); + negAxisS = negatef4( axisS ); + tmp0 = vec_perm( axisS, negAxisS, _VECTORMATH_PERM_XZBX ); + tmp1 = vec_perm( axisS, negAxisS, _VECTORMATH_PERM_CXXX ); + tmp2 = vec_perm( axisS, negAxisS, _VECTORMATH_PERM_YAXX ); + tmp0 = vec_sel( tmp0, c, _VECTORMATH_MASK_0xF000 ); + tmp1 = vec_sel( tmp1, c, _VECTORMATH_MASK_0x0F00 ); + tmp2 = vec_sel( tmp2, c, _VECTORMATH_MASK_0x00F0 ); + zeroW = (vec_float4)_VECTORMATH_MASK_0x000F; + axis = vec_andc( axis, zeroW ); + tmp0 = vec_andc( tmp0, zeroW ); + tmp1 = vec_andc( tmp1, zeroW ); + tmp2 = vec_andc( tmp2, zeroW ); + result->col0.vec128 = vec_madd( vec_madd( axis, xxxx, zero ), oneMinusC, tmp0 ); + result->col1.vec128 = vec_madd( vec_madd( axis, yyyy, zero ), oneMinusC, tmp1 ); + result->col2.vec128 = vec_madd( vec_madd( axis, zzzz, zero ), oneMinusC, tmp2 ); + vmathV4MakeWAxis( &result->col3 ); +} + +static inline void vmathM4MakeRotationQ( VmathMatrix4 *result, const VmathQuat *unitQuat ) +{ + VmathTransform3 tmpT3_0; + vmathT3MakeRotationQ( &tmpT3_0, unitQuat ); + vmathM4MakeFromT3( result, &tmpT3_0 ); +} + +static inline void vmathM4MakeScale( VmathMatrix4 *result, const VmathVector3 *scaleVec ) +{ + vec_float4 zero = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); + result->col0.vec128 = vec_sel( zero, scaleVec->vec128, _VECTORMATH_MASK_0xF000 ); + result->col1.vec128 = vec_sel( zero, scaleVec->vec128, _VECTORMATH_MASK_0x0F00 ); + result->col2.vec128 = vec_sel( zero, scaleVec->vec128, _VECTORMATH_MASK_0x00F0 ); + vmathV4MakeWAxis( &result->col3 ); +} + +static inline void vmathM4AppendScale( VmathMatrix4 *result, const VmathMatrix4 *mat, const VmathVector3 *scaleVec ) +{ + vmathV4ScalarMul( &result->col0, &mat->col0, vmathV3GetX( scaleVec ) ); + vmathV4ScalarMul( &result->col1, &mat->col1, vmathV3GetY( scaleVec ) ); + vmathV4ScalarMul( &result->col2, &mat->col2, vmathV3GetZ( scaleVec ) ); + vmathV4Copy( &result->col3, &mat->col3 ); +} + +static inline void vmathM4PrependScale( VmathMatrix4 *result, const VmathVector3 *scaleVec, const VmathMatrix4 *mat ) +{ + VmathVector4 scale4; + vmathV4MakeFromV3Scalar( &scale4, scaleVec, 1.0f ); + vmathV4MulPerElem( &result->col0, &mat->col0, &scale4 ); + vmathV4MulPerElem( &result->col1, &mat->col1, &scale4 ); + vmathV4MulPerElem( &result->col2, &mat->col2, &scale4 ); + vmathV4MulPerElem( &result->col3, &mat->col3, &scale4 ); +} + +static inline void vmathM4MakeTranslation( VmathMatrix4 *result, const VmathVector3 *translateVec ) +{ + vmathV4MakeXAxis( &result->col0 ); + vmathV4MakeYAxis( &result->col1 ); + vmathV4MakeZAxis( &result->col2 ); + vmathV4MakeFromV3Scalar( &result->col3, translateVec, 1.0f ); +} + +static inline void vmathM4MakeLookAt( VmathMatrix4 *result, const VmathPoint3 *eyePos, const VmathPoint3 *lookAtPos, const VmathVector3 *upVec ) +{ + VmathMatrix4 m4EyeFrame; + VmathVector3 v3X, v3Y, v3Z, tmpV3_0, tmpV3_1; + VmathVector4 tmpV4_0, tmpV4_1, tmpV4_2, tmpV4_3; + vmathV3Normalize( &v3Y, upVec ); + vmathP3Sub( &tmpV3_0, eyePos, lookAtPos ); + vmathV3Normalize( &v3Z, &tmpV3_0 ); + vmathV3Cross( &tmpV3_1, &v3Y, &v3Z ); + vmathV3Normalize( &v3X, &tmpV3_1 ); + vmathV3Cross( &v3Y, &v3Z, &v3X ); + vmathV4MakeFromV3( &tmpV4_0, &v3X ); + vmathV4MakeFromV3( &tmpV4_1, &v3Y ); + vmathV4MakeFromV3( &tmpV4_2, &v3Z ); + vmathV4MakeFromP3( &tmpV4_3, eyePos ); + vmathM4MakeFromCols( &m4EyeFrame, &tmpV4_0, &tmpV4_1, &tmpV4_2, &tmpV4_3 ); + vmathM4OrthoInverse( result, &m4EyeFrame ); +} + +static inline void vmathM4MakePerspective( VmathMatrix4 *result, float fovyRadians, float aspect, float zNear, float zFar ) +{ + float f, rangeInv; + vec_float4 zero, col0, col1, col2, col3; + union { vec_float4 v; float s[4]; } tmp; + f = tanf( _VECTORMATH_PI_OVER_2 - fovyRadians * 0.5f ); + rangeInv = 1.0f / ( zNear - zFar ); + zero = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); + tmp.v = zero; + tmp.s[0] = f / aspect; + col0 = tmp.v; + tmp.v = zero; + tmp.s[1] = f; + col1 = tmp.v; + tmp.v = zero; + tmp.s[2] = ( zNear + zFar ) * rangeInv; + tmp.s[3] = -1.0f; + col2 = tmp.v; + tmp.v = zero; + tmp.s[2] = zNear * zFar * rangeInv * 2.0f; + col3 = tmp.v; + result->col0.vec128 = col0; + result->col1.vec128 = col1; + result->col2.vec128 = col2; + result->col3.vec128 = col3; +} + +static inline void vmathM4MakeFrustum( VmathMatrix4 *result, float left, float right, float bottom, float top, float zNear, float zFar ) +{ + /* function implementation based on code from STIDC SDK: */ + /* -------------------------------------------------------------- */ + /* PLEASE DO NOT MODIFY THIS SECTION */ + /* This prolog section is automatically generated. */ + /* */ + /* (C)Copyright */ + /* Sony Computer Entertainment, Inc., */ + /* Toshiba Corporation, */ + /* International Business Machines Corporation, */ + /* 2001,2002. */ + /* S/T/I Confidential Information */ + /* -------------------------------------------------------------- */ + vec_float4 lbf, rtn; + vec_float4 diff, sum, inv_diff; + vec_float4 diagonal, column, near2; + vec_float4 zero = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); + union { vec_float4 v; float s[4]; } l, f, r, n, b, t; + l.s[0] = left; + f.s[0] = zFar; + r.s[0] = right; + n.s[0] = zNear; + b.s[0] = bottom; + t.s[0] = top; + lbf = vec_mergeh( l.v, f.v ); + rtn = vec_mergeh( r.v, n.v ); + lbf = vec_mergeh( lbf, b.v ); + rtn = vec_mergeh( rtn, t.v ); + diff = vec_sub( rtn, lbf ); + sum = vec_add( rtn, lbf ); + inv_diff = recipf4( diff ); + near2 = vec_splat( n.v, 0 ); + near2 = vec_add( near2, near2 ); + diagonal = vec_madd( near2, inv_diff, zero ); + column = vec_madd( sum, inv_diff, zero ); + result->col0.vec128 = vec_sel( zero, diagonal, _VECTORMATH_MASK_0xF000 ); + result->col1.vec128 = vec_sel( zero, diagonal, _VECTORMATH_MASK_0x0F00 ); + result->col2.vec128 = vec_sel( column, ((vec_float4){-1.0f,-1.0f,-1.0f,-1.0f}), _VECTORMATH_MASK_0x000F ); + result->col3.vec128 = vec_sel( zero, vec_madd( diagonal, vec_splat( f.v, 0 ), zero ), _VECTORMATH_MASK_0x00F0 ); +} + +static inline void vmathM4MakeOrthographic( VmathMatrix4 *result, float left, float right, float bottom, float top, float zNear, float zFar ) +{ + /* function implementation based on code from STIDC SDK: */ + /* -------------------------------------------------------------- */ + /* PLEASE DO NOT MODIFY THIS SECTION */ + /* This prolog section is automatically generated. */ + /* */ + /* (C)Copyright */ + /* Sony Computer Entertainment, Inc., */ + /* Toshiba Corporation, */ + /* International Business Machines Corporation, */ + /* 2001,2002. */ + /* S/T/I Confidential Information */ + /* -------------------------------------------------------------- */ + vec_float4 lbf, rtn; + vec_float4 diff, sum, inv_diff, neg_inv_diff; + vec_float4 diagonal, column; + vec_float4 zero = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); + union { vec_float4 v; float s[4]; } l, f, r, n, b, t; + l.s[0] = left; + f.s[0] = zFar; + r.s[0] = right; + n.s[0] = zNear; + b.s[0] = bottom; + t.s[0] = top; + lbf = vec_mergeh( l.v, f.v ); + rtn = vec_mergeh( r.v, n.v ); + lbf = vec_mergeh( lbf, b.v ); + rtn = vec_mergeh( rtn, t.v ); + diff = vec_sub( rtn, lbf ); + sum = vec_add( rtn, lbf ); + inv_diff = recipf4( diff ); + neg_inv_diff = negatef4( inv_diff ); + diagonal = vec_add( inv_diff, inv_diff ); + column = vec_madd( sum, vec_sel( neg_inv_diff, inv_diff, _VECTORMATH_MASK_0x00F0 ), zero ); + result->col0.vec128 = vec_sel( zero, diagonal, _VECTORMATH_MASK_0xF000 ); + result->col1.vec128 = vec_sel( zero, diagonal, _VECTORMATH_MASK_0x0F00 ); + result->col2.vec128 = vec_sel( zero, diagonal, _VECTORMATH_MASK_0x00F0 ); + result->col3.vec128 = vec_sel( column, ((vec_float4){1.0f,1.0f,1.0f,1.0f}), _VECTORMATH_MASK_0x000F ); +} + +static inline void vmathM4Select( VmathMatrix4 *result, const VmathMatrix4 *mat0, const VmathMatrix4 *mat1, unsigned int select1 ) +{ + vmathV4Select( &result->col0, &mat0->col0, &mat1->col0, select1 ); + vmathV4Select( &result->col1, &mat0->col1, &mat1->col1, select1 ); + vmathV4Select( &result->col2, &mat0->col2, &mat1->col2, select1 ); + vmathV4Select( &result->col3, &mat0->col3, &mat1->col3, select1 ); +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathM4Print( const VmathMatrix4 *mat ) +{ + VmathVector4 tmpV4_0, tmpV4_1, tmpV4_2, tmpV4_3; + vmathM4GetRow( &tmpV4_0, mat, 0 ); + vmathV4Print( &tmpV4_0 ); + vmathM4GetRow( &tmpV4_1, mat, 1 ); + vmathV4Print( &tmpV4_1 ); + vmathM4GetRow( &tmpV4_2, mat, 2 ); + vmathV4Print( &tmpV4_2 ); + vmathM4GetRow( &tmpV4_3, mat, 3 ); + vmathV4Print( &tmpV4_3 ); +} + +static inline void vmathM4Prints( const VmathMatrix4 *mat, const char *name ) +{ + printf("%s:\n", name); + vmathM4Print( mat ); +} + +#endif + +static inline void vmathT3Copy( VmathTransform3 *result, const VmathTransform3 *tfrm ) +{ + vmathV3Copy( &result->col0, &tfrm->col0 ); + vmathV3Copy( &result->col1, &tfrm->col1 ); + vmathV3Copy( &result->col2, &tfrm->col2 ); + vmathV3Copy( &result->col3, &tfrm->col3 ); +} + +static inline void vmathT3MakeFromScalar( VmathTransform3 *result, float scalar ) +{ + vmathV3MakeFromScalar( &result->col0, scalar ); + vmathV3MakeFromScalar( &result->col1, scalar ); + vmathV3MakeFromScalar( &result->col2, scalar ); + vmathV3MakeFromScalar( &result->col3, scalar ); +} + +static inline void vmathT3MakeFromCols( VmathTransform3 *result, const VmathVector3 *_col0, const VmathVector3 *_col1, const VmathVector3 *_col2, const VmathVector3 *_col3 ) +{ + vmathV3Copy( &result->col0, _col0 ); + vmathV3Copy( &result->col1, _col1 ); + vmathV3Copy( &result->col2, _col2 ); + vmathV3Copy( &result->col3, _col3 ); +} + +static inline void vmathT3MakeFromM3V3( VmathTransform3 *result, const VmathMatrix3 *tfrm, const VmathVector3 *translateVec ) +{ + vmathT3SetUpper3x3( result, tfrm ); + vmathT3SetTranslation( result, translateVec ); +} + +static inline void vmathT3MakeFromQV3( VmathTransform3 *result, const VmathQuat *unitQuat, const VmathVector3 *translateVec ) +{ + VmathMatrix3 tmpM3_0; + vmathM3MakeFromQ( &tmpM3_0, unitQuat ); + vmathT3SetUpper3x3( result, &tmpM3_0 ); + vmathT3SetTranslation( result, translateVec ); +} + +static inline void vmathT3SetCol0( VmathTransform3 *result, const VmathVector3 *_col0 ) +{ + vmathV3Copy( &result->col0, _col0 ); +} + +static inline void vmathT3SetCol1( VmathTransform3 *result, const VmathVector3 *_col1 ) +{ + vmathV3Copy( &result->col1, _col1 ); +} + +static inline void vmathT3SetCol2( VmathTransform3 *result, const VmathVector3 *_col2 ) +{ + vmathV3Copy( &result->col2, _col2 ); +} + +static inline void vmathT3SetCol3( VmathTransform3 *result, const VmathVector3 *_col3 ) +{ + vmathV3Copy( &result->col3, _col3 ); +} + +static inline void vmathT3SetCol( VmathTransform3 *result, int col, const VmathVector3 *vec ) +{ + vmathV3Copy( (&result->col0 + col), vec ); +} + +static inline void vmathT3SetRow( VmathTransform3 *result, int row, const VmathVector4 *vec ) +{ + vmathV3SetElem( &result->col0, row, vmathV4GetElem( vec, 0 ) ); + vmathV3SetElem( &result->col1, row, vmathV4GetElem( vec, 1 ) ); + vmathV3SetElem( &result->col2, row, vmathV4GetElem( vec, 2 ) ); + vmathV3SetElem( &result->col3, row, vmathV4GetElem( vec, 3 ) ); +} + +static inline void vmathT3SetElem( VmathTransform3 *result, int col, int row, float val ) +{ + VmathVector3 tmpV3_0; + vmathT3GetCol( &tmpV3_0, result, col ); + vmathV3SetElem( &tmpV3_0, row, val ); + vmathT3SetCol( result, col, &tmpV3_0 ); +} + +static inline float vmathT3GetElem( const VmathTransform3 *tfrm, int col, int row ) +{ + VmathVector3 tmpV3_0; + vmathT3GetCol( &tmpV3_0, tfrm, col ); + return vmathV3GetElem( &tmpV3_0, row ); +} + +static inline void vmathT3GetCol0( VmathVector3 *result, const VmathTransform3 *tfrm ) +{ + vmathV3Copy( result, &tfrm->col0 ); +} + +static inline void vmathT3GetCol1( VmathVector3 *result, const VmathTransform3 *tfrm ) +{ + vmathV3Copy( result, &tfrm->col1 ); +} + +static inline void vmathT3GetCol2( VmathVector3 *result, const VmathTransform3 *tfrm ) +{ + vmathV3Copy( result, &tfrm->col2 ); +} + +static inline void vmathT3GetCol3( VmathVector3 *result, const VmathTransform3 *tfrm ) +{ + vmathV3Copy( result, &tfrm->col3 ); +} + +static inline void vmathT3GetCol( VmathVector3 *result, const VmathTransform3 *tfrm, int col ) +{ + vmathV3Copy( result, (&tfrm->col0 + col) ); +} + +static inline void vmathT3GetRow( VmathVector4 *result, const VmathTransform3 *tfrm, int row ) +{ + vmathV4MakeFromElems( result, vmathV3GetElem( &tfrm->col0, row ), vmathV3GetElem( &tfrm->col1, row ), vmathV3GetElem( &tfrm->col2, row ), vmathV3GetElem( &tfrm->col3, row ) ); +} + +static inline void vmathT3Inverse( VmathTransform3 *result, const VmathTransform3 *tfrm ) +{ + vec_float4 inv0, inv1, inv2, inv3; + vec_float4 tmp0, tmp1, tmp2, tmp3, tmp4, dot, invdet; + vec_float4 xxxx, yyyy, zzzz; + vec_float4 zero = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); + tmp2 = _vmathVfCross( tfrm->col0.vec128, tfrm->col1.vec128 ); + tmp0 = _vmathVfCross( tfrm->col1.vec128, tfrm->col2.vec128 ); + tmp1 = _vmathVfCross( tfrm->col2.vec128, tfrm->col0.vec128 ); + inv3 = negatef4( tfrm->col3.vec128 ); + dot = _vmathVfDot3( tmp2, tfrm->col2.vec128 ); + dot = vec_splat( dot, 0 ); + invdet = recipf4( dot ); + tmp3 = vec_mergeh( tmp0, tmp2 ); + tmp4 = vec_mergel( tmp0, tmp2 ); + inv0 = vec_mergeh( tmp3, tmp1 ); + xxxx = vec_splat( inv3, 0 ); + inv1 = vec_perm( tmp3, tmp1, _VECTORMATH_PERM_ZBWX ); + inv2 = vec_perm( tmp4, tmp1, _VECTORMATH_PERM_XCYX ); + yyyy = vec_splat( inv3, 1 ); + zzzz = vec_splat( inv3, 2 ); + inv3 = vec_madd( inv0, xxxx, zero ); + inv3 = vec_madd( inv1, yyyy, inv3 ); + inv3 = vec_madd( inv2, zzzz, inv3 ); + inv0 = vec_madd( inv0, invdet, zero ); + inv1 = vec_madd( inv1, invdet, zero ); + inv2 = vec_madd( inv2, invdet, zero ); + inv3 = vec_madd( inv3, invdet, zero ); + result->col0.vec128 = inv0; + result->col1.vec128 = inv1; + result->col2.vec128 = inv2; + result->col3.vec128 = inv3; +} + +static inline void vmathT3OrthoInverse( VmathTransform3 *result, const VmathTransform3 *tfrm ) +{ + vec_float4 inv0, inv1, inv2, inv3; + vec_float4 tmp0, tmp1; + vec_float4 xxxx, yyyy, zzzz; + tmp0 = vec_mergeh( tfrm->col0.vec128, tfrm->col2.vec128 ); + tmp1 = vec_mergel( tfrm->col0.vec128, tfrm->col2.vec128 ); + inv3 = negatef4( tfrm->col3.vec128 ); + inv0 = vec_mergeh( tmp0, tfrm->col1.vec128 ); + xxxx = vec_splat( inv3, 0 ); + inv1 = vec_perm( tmp0, tfrm->col1.vec128, _VECTORMATH_PERM_ZBWX ); + inv2 = vec_perm( tmp1, tfrm->col1.vec128, _VECTORMATH_PERM_XCYX ); + yyyy = vec_splat( inv3, 1 ); + zzzz = vec_splat( inv3, 2 ); + inv3 = vec_madd( inv0, xxxx, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + inv3 = vec_madd( inv1, yyyy, inv3 ); + inv3 = vec_madd( inv2, zzzz, inv3 ); + result->col0.vec128 = inv0; + result->col1.vec128 = inv1; + result->col2.vec128 = inv2; + result->col3.vec128 = inv3; +} + +static inline void vmathT3AbsPerElem( VmathTransform3 *result, const VmathTransform3 *tfrm ) +{ + vmathV3AbsPerElem( &result->col0, &tfrm->col0 ); + vmathV3AbsPerElem( &result->col1, &tfrm->col1 ); + vmathV3AbsPerElem( &result->col2, &tfrm->col2 ); + vmathV3AbsPerElem( &result->col3, &tfrm->col3 ); +} + +static inline void vmathT3MulV3( VmathVector3 *result, const VmathTransform3 *tfrm, const VmathVector3 *vec ) +{ + vec_float4 res; + vec_float4 xxxx, yyyy, zzzz; + xxxx = vec_splat( vec->vec128, 0 ); + yyyy = vec_splat( vec->vec128, 1 ); + zzzz = vec_splat( vec->vec128, 2 ); + res = vec_madd( tfrm->col0.vec128, xxxx, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + res = vec_madd( tfrm->col1.vec128, yyyy, res ); + res = vec_madd( tfrm->col2.vec128, zzzz, res ); + result->vec128 = res; +} + +static inline void vmathT3MulP3( VmathPoint3 *result, const VmathTransform3 *tfrm, const VmathPoint3 *pnt ) +{ + vec_float4 tmp0, tmp1, res; + vec_float4 xxxx, yyyy, zzzz; + vec_float4 zero = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); + xxxx = vec_splat( pnt->vec128, 0 ); + yyyy = vec_splat( pnt->vec128, 1 ); + zzzz = vec_splat( pnt->vec128, 2 ); + tmp0 = vec_madd( tfrm->col0.vec128, xxxx, zero ); + tmp1 = vec_madd( tfrm->col1.vec128, yyyy, zero ); + tmp0 = vec_madd( tfrm->col2.vec128, zzzz, tmp0 ); + tmp1 = vec_add( tfrm->col3.vec128, tmp1 ); + res = vec_add( tmp0, tmp1 ); + result->vec128 = res; +} + +static inline void vmathT3Mul( VmathTransform3 *result, const VmathTransform3 *tfrm0, const VmathTransform3 *tfrm1 ) +{ + VmathTransform3 tmpResult; + VmathPoint3 tmpP3_0, tmpP3_1; + vmathT3MulV3( &tmpResult.col0, tfrm0, &tfrm1->col0 ); + vmathT3MulV3( &tmpResult.col1, tfrm0, &tfrm1->col1 ); + vmathT3MulV3( &tmpResult.col2, tfrm0, &tfrm1->col2 ); + vmathP3MakeFromV3( &tmpP3_0, &tfrm1->col3 ); + vmathT3MulP3( &tmpP3_1, tfrm0, &tmpP3_0 ); + vmathV3MakeFromP3( &tmpResult.col3, &tmpP3_1 ); + vmathT3Copy( result, &tmpResult ); +} + +static inline void vmathT3MulPerElem( VmathTransform3 *result, const VmathTransform3 *tfrm0, const VmathTransform3 *tfrm1 ) +{ + vmathV3MulPerElem( &result->col0, &tfrm0->col0, &tfrm1->col0 ); + vmathV3MulPerElem( &result->col1, &tfrm0->col1, &tfrm1->col1 ); + vmathV3MulPerElem( &result->col2, &tfrm0->col2, &tfrm1->col2 ); + vmathV3MulPerElem( &result->col3, &tfrm0->col3, &tfrm1->col3 ); +} + +static inline void vmathT3MakeIdentity( VmathTransform3 *result ) +{ + vmathV3MakeXAxis( &result->col0 ); + vmathV3MakeYAxis( &result->col1 ); + vmathV3MakeZAxis( &result->col2 ); + vmathV3MakeFromScalar( &result->col3, 0.0f ); +} + +static inline void vmathT3SetUpper3x3( VmathTransform3 *result, const VmathMatrix3 *tfrm ) +{ + vmathV3Copy( &result->col0, &tfrm->col0 ); + vmathV3Copy( &result->col1, &tfrm->col1 ); + vmathV3Copy( &result->col2, &tfrm->col2 ); +} + +static inline void vmathT3GetUpper3x3( VmathMatrix3 *result, const VmathTransform3 *tfrm ) +{ + vmathM3MakeFromCols( result, &tfrm->col0, &tfrm->col1, &tfrm->col2 ); +} + +static inline void vmathT3SetTranslation( VmathTransform3 *result, const VmathVector3 *translateVec ) +{ + vmathV3Copy( &result->col3, translateVec ); +} + +static inline void vmathT3GetTranslation( VmathVector3 *result, const VmathTransform3 *tfrm ) +{ + vmathV3Copy( result, &tfrm->col3 ); +} + +static inline void vmathT3MakeRotationX( VmathTransform3 *result, float radians ) +{ + vec_float4 s, c, res1, res2; + vec_uint4 select_y, select_z; + vec_float4 zero; + select_y = _VECTORMATH_MASK_0x0F00; + select_z = _VECTORMATH_MASK_0x00F0; + zero = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); + sincosf4( _vmathVfSplatScalar(radians), &s, &c ); + res1 = vec_sel( zero, c, select_y ); + res1 = vec_sel( res1, s, select_z ); + res2 = vec_sel( zero, negatef4(s), select_y ); + res2 = vec_sel( res2, c, select_z ); + vmathV3MakeXAxis( &result->col0 ); + result->col1.vec128 = res1; + result->col2.vec128 = res2; + vmathV3MakeFromScalar( &result->col3, 0.0f ); +} + +static inline void vmathT3MakeRotationY( VmathTransform3 *result, float radians ) +{ + vec_float4 s, c, res0, res2; + vec_uint4 select_x, select_z; + vec_float4 zero; + select_x = _VECTORMATH_MASK_0xF000; + select_z = _VECTORMATH_MASK_0x00F0; + zero = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); + sincosf4( _vmathVfSplatScalar(radians), &s, &c ); + res0 = vec_sel( zero, c, select_x ); + res0 = vec_sel( res0, negatef4(s), select_z ); + res2 = vec_sel( zero, s, select_x ); + res2 = vec_sel( res2, c, select_z ); + result->col0.vec128 = res0; + vmathV3MakeYAxis( &result->col1 ); + result->col2.vec128 = res2; + vmathV3MakeFromScalar( &result->col3, 0.0f ); +} + +static inline void vmathT3MakeRotationZ( VmathTransform3 *result, float radians ) +{ + vec_float4 s, c, res0, res1; + vec_uint4 select_x, select_y; + vec_float4 zero; + select_x = _VECTORMATH_MASK_0xF000; + select_y = _VECTORMATH_MASK_0x0F00; + zero = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); + sincosf4( _vmathVfSplatScalar(radians), &s, &c ); + res0 = vec_sel( zero, c, select_x ); + res0 = vec_sel( res0, s, select_y ); + res1 = vec_sel( zero, negatef4(s), select_x ); + res1 = vec_sel( res1, c, select_y ); + result->col0.vec128 = res0; + result->col1.vec128 = res1; + vmathV3MakeZAxis( &result->col2 ); + vmathV3MakeFromScalar( &result->col3, 0.0f ); +} + +static inline void vmathT3MakeRotationZYX( VmathTransform3 *result, const VmathVector3 *radiansXYZ ) +{ + VmathVector4 tmpV4_0; + vec_float4 angles, s, negS, c, X0, X1, Y0, Y1, Z0, Z1, tmp; + vec_float4 zero = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); + vmathV4MakeFromV3Scalar( &tmpV4_0, radiansXYZ, 0.0f ); + angles = tmpV4_0.vec128; + sincosf4( angles, &s, &c ); + negS = negatef4( s ); + Z0 = vec_mergel( c, s ); + Z1 = vec_mergel( negS, c ); + Z1 = vec_andc( Z1, (vec_float4)_VECTORMATH_MASK_0x000F ); + Y0 = vec_perm( negS, c, _VECTORMATH_PERM_BBYX ); + Y1 = vec_perm( c, s, _VECTORMATH_PERM_BBYX ); + X0 = vec_splat( s, 0 ); + X1 = vec_splat( c, 0 ); + tmp = vec_madd( Z0, Y1, zero ); + result->col0.vec128 = vec_madd( Z0, Y0, zero ); + result->col1.vec128 = vec_madd( Z1, X1, vec_madd( tmp, X0, zero ) ); + result->col2.vec128 = vec_nmsub( Z1, X0, vec_madd( tmp, X1, zero ) ); + vmathV3MakeFromScalar( &result->col3, 0.0f ); +} + +static inline void vmathT3MakeRotationAxis( VmathTransform3 *result, float radians, const VmathVector3 *unitVec ) +{ + VmathMatrix3 tmpM3_0; + VmathVector3 tmpV3_0; + vmathM3MakeRotationAxis( &tmpM3_0, radians, unitVec ); + vmathV3MakeFromScalar( &tmpV3_0, 0.0f ); + vmathT3MakeFromM3V3( result, &tmpM3_0, &tmpV3_0 ); +} + +static inline void vmathT3MakeRotationQ( VmathTransform3 *result, const VmathQuat *unitQuat ) +{ + VmathMatrix3 tmpM3_0; + VmathVector3 tmpV3_0; + vmathM3MakeFromQ( &tmpM3_0, unitQuat ); + vmathV3MakeFromScalar( &tmpV3_0, 0.0f ); + vmathT3MakeFromM3V3( result, &tmpM3_0, &tmpV3_0 ); +} + +static inline void vmathT3MakeScale( VmathTransform3 *result, const VmathVector3 *scaleVec ) +{ + vec_float4 zero = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); + result->col0.vec128 = vec_sel( zero, scaleVec->vec128, _VECTORMATH_MASK_0xF000 ); + result->col1.vec128 = vec_sel( zero, scaleVec->vec128, _VECTORMATH_MASK_0x0F00 ); + result->col2.vec128 = vec_sel( zero, scaleVec->vec128, _VECTORMATH_MASK_0x00F0 ); + vmathV3MakeFromScalar( &result->col3, 0.0f ); +} + +static inline void vmathT3AppendScale( VmathTransform3 *result, const VmathTransform3 *tfrm, const VmathVector3 *scaleVec ) +{ + vmathV3ScalarMul( &result->col0, &tfrm->col0, vmathV3GetX( scaleVec ) ); + vmathV3ScalarMul( &result->col1, &tfrm->col1, vmathV3GetY( scaleVec ) ); + vmathV3ScalarMul( &result->col2, &tfrm->col2, vmathV3GetZ( scaleVec ) ); + vmathV3Copy( &result->col3, &tfrm->col3 ); +} + +static inline void vmathT3PrependScale( VmathTransform3 *result, const VmathVector3 *scaleVec, const VmathTransform3 *tfrm ) +{ + vmathV3MulPerElem( &result->col0, &tfrm->col0, scaleVec ); + vmathV3MulPerElem( &result->col1, &tfrm->col1, scaleVec ); + vmathV3MulPerElem( &result->col2, &tfrm->col2, scaleVec ); + vmathV3MulPerElem( &result->col3, &tfrm->col3, scaleVec ); +} + +static inline void vmathT3MakeTranslation( VmathTransform3 *result, const VmathVector3 *translateVec ) +{ + vmathV3MakeXAxis( &result->col0 ); + vmathV3MakeYAxis( &result->col1 ); + vmathV3MakeZAxis( &result->col2 ); + vmathV3Copy( &result->col3, translateVec ); +} + +static inline void vmathT3Select( VmathTransform3 *result, const VmathTransform3 *tfrm0, const VmathTransform3 *tfrm1, unsigned int select1 ) +{ + vmathV3Select( &result->col0, &tfrm0->col0, &tfrm1->col0, select1 ); + vmathV3Select( &result->col1, &tfrm0->col1, &tfrm1->col1, select1 ); + vmathV3Select( &result->col2, &tfrm0->col2, &tfrm1->col2, select1 ); + vmathV3Select( &result->col3, &tfrm0->col3, &tfrm1->col3, select1 ); +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathT3Print( const VmathTransform3 *tfrm ) +{ + VmathVector4 tmpV4_0, tmpV4_1, tmpV4_2; + vmathT3GetRow( &tmpV4_0, tfrm, 0 ); + vmathV4Print( &tmpV4_0 ); + vmathT3GetRow( &tmpV4_1, tfrm, 1 ); + vmathV4Print( &tmpV4_1 ); + vmathT3GetRow( &tmpV4_2, tfrm, 2 ); + vmathV4Print( &tmpV4_2 ); +} + +static inline void vmathT3Prints( const VmathTransform3 *tfrm, const char *name ) +{ + printf("%s:\n", name); + vmathT3Print( tfrm ); +} + +#endif + +static inline void vmathQMakeFromM3( VmathQuat *result, const VmathMatrix3 *tfrm ) +{ + vec_float4 res; + vec_float4 col0, col1, col2; + vec_float4 xx_yy, xx_yy_zz_xx, yy_zz_xx_yy, zz_xx_yy_zz, diagSum, diagDiff; + vec_float4 zy_xz_yx, yz_zx_xy, sum, diff; + vec_float4 radicand, invSqrt, scale; + vec_float4 res0, res1, res2, res3; + vec_float4 xx, yy, zz; + vec_uint4 select_x = _VECTORMATH_MASK_0xF000; + vec_uint4 select_y = _VECTORMATH_MASK_0x0F00; + vec_uint4 select_z = _VECTORMATH_MASK_0x00F0; + vec_uint4 select_w = _VECTORMATH_MASK_0x000F; + vec_float4 zero = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); + + col0 = tfrm->col0.vec128; + col1 = tfrm->col1.vec128; + col2 = tfrm->col2.vec128; + + /* four cases: */ + /* trace > 0 */ + /* else */ + /* xx largest diagonal element */ + /* yy largest diagonal element */ + /* zz largest diagonal element */ + + /* compute quaternion for each case */ + + xx_yy = vec_sel( col0, col1, select_y ); + xx_yy_zz_xx = vec_perm( xx_yy, col2, _VECTORMATH_PERM_XYCX ); + yy_zz_xx_yy = vec_perm( xx_yy, col2, _VECTORMATH_PERM_YCXY ); + zz_xx_yy_zz = vec_perm( xx_yy, col2, _VECTORMATH_PERM_CXYC ); + + diagSum = vec_add( vec_add( xx_yy_zz_xx, yy_zz_xx_yy ), zz_xx_yy_zz ); + diagDiff = vec_sub( vec_sub( xx_yy_zz_xx, yy_zz_xx_yy ), zz_xx_yy_zz ); + radicand = vec_add( vec_sel( diagDiff, diagSum, select_w ), ((vec_float4){1.0f,1.0f,1.0f,1.0f}) ); + invSqrt = rsqrtf4( radicand ); + + zy_xz_yx = vec_sel( col0, col1, select_z ); + zy_xz_yx = vec_perm( zy_xz_yx, col2, _VECTORMATH_PERM_ZAYX ); + yz_zx_xy = vec_sel( col0, col1, select_x ); + yz_zx_xy = vec_perm( yz_zx_xy, col2, _VECTORMATH_PERM_BZXX ); + + sum = vec_add( zy_xz_yx, yz_zx_xy ); + diff = vec_sub( zy_xz_yx, yz_zx_xy ); + + scale = vec_madd( invSqrt, ((vec_float4){0.5f,0.5f,0.5f,0.5f}), zero ); + res0 = vec_perm( sum, diff, _VECTORMATH_PERM_XZYA ); + res1 = vec_perm( sum, diff, _VECTORMATH_PERM_ZXXB ); + res2 = vec_perm( sum, diff, _VECTORMATH_PERM_YXXC ); + res3 = diff; + res0 = vec_sel( res0, radicand, select_x ); + res1 = vec_sel( res1, radicand, select_y ); + res2 = vec_sel( res2, radicand, select_z ); + res3 = vec_sel( res3, radicand, select_w ); + res0 = vec_madd( res0, vec_splat( scale, 0 ), zero ); + res1 = vec_madd( res1, vec_splat( scale, 1 ), zero ); + res2 = vec_madd( res2, vec_splat( scale, 2 ), zero ); + res3 = vec_madd( res3, vec_splat( scale, 3 ), zero ); + + /* determine case and select answer */ + + xx = vec_splat( col0, 0 ); + yy = vec_splat( col1, 1 ); + zz = vec_splat( col2, 2 ); + res = vec_sel( res0, res1, vec_cmpgt( yy, xx ) ); + res = vec_sel( res, res2, vec_and( vec_cmpgt( zz, xx ), vec_cmpgt( zz, yy ) ) ); + res = vec_sel( res, res3, vec_cmpgt( vec_splat( diagSum, 0 ), zero ) ); + result->vec128 = res; +} + +static inline void vmathV3Outer( VmathMatrix3 *result, const VmathVector3 *tfrm0, const VmathVector3 *tfrm1 ) +{ + vmathV3ScalarMul( &result->col0, tfrm0, vmathV3GetX( tfrm1 ) ); + vmathV3ScalarMul( &result->col1, tfrm0, vmathV3GetY( tfrm1 ) ); + vmathV3ScalarMul( &result->col2, tfrm0, vmathV3GetZ( tfrm1 ) ); +} + +static inline void vmathV4Outer( VmathMatrix4 *result, const VmathVector4 *tfrm0, const VmathVector4 *tfrm1 ) +{ + vmathV4ScalarMul( &result->col0, tfrm0, vmathV4GetX( tfrm1 ) ); + vmathV4ScalarMul( &result->col1, tfrm0, vmathV4GetY( tfrm1 ) ); + vmathV4ScalarMul( &result->col2, tfrm0, vmathV4GetZ( tfrm1 ) ); + vmathV4ScalarMul( &result->col3, tfrm0, vmathV4GetW( tfrm1 ) ); +} + +static inline void vmathV3RowMul( VmathVector3 *result, const VmathVector3 *vec, const VmathMatrix3 *mat ) +{ + vec_float4 tmp0, tmp1, mcol0, mcol1, mcol2, res; + vec_float4 xxxx, yyyy, zzzz; + tmp0 = vec_mergeh( mat->col0.vec128, mat->col2.vec128 ); + tmp1 = vec_mergel( mat->col0.vec128, mat->col2.vec128 ); + xxxx = vec_splat( vec->vec128, 0 ); + mcol0 = vec_mergeh( tmp0, mat->col1.vec128 ); + mcol1 = vec_perm( tmp0, mat->col1.vec128, _VECTORMATH_PERM_ZBWX ); + mcol2 = vec_perm( tmp1, mat->col1.vec128, _VECTORMATH_PERM_XCYX ); + yyyy = vec_splat( vec->vec128, 1 ); + res = vec_madd( mcol0, xxxx, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + zzzz = vec_splat( vec->vec128, 2 ); + res = vec_madd( mcol1, yyyy, res ); + res = vec_madd( mcol2, zzzz, res ); + result->vec128 = res; +} + +static inline void vmathV3CrossMatrix( VmathMatrix3 *result, const VmathVector3 *vec ) +{ + vec_float4 neg, res0, res1, res2; + neg = negatef4( vec->vec128 ); + res0 = vec_perm( vec->vec128, neg, _VECTORMATH_PERM_XZBX ); + res1 = vec_perm( vec->vec128, neg, _VECTORMATH_PERM_CXXX ); + res2 = vec_perm( vec->vec128, neg, _VECTORMATH_PERM_YAXX ); + res0 = vec_andc( res0, (vec_float4)_VECTORMATH_MASK_0xF000 ); + res1 = vec_andc( res1, (vec_float4)_VECTORMATH_MASK_0x0F00 ); + res2 = vec_andc( res2, (vec_float4)_VECTORMATH_MASK_0x00F0 ); + result->col0.vec128 = res0; + result->col1.vec128 = res1; + result->col2.vec128 = res2; +} + +static inline void vmathV3CrossMatrixMul( VmathMatrix3 *result, const VmathVector3 *vec, const VmathMatrix3 *mat ) +{ + VmathVector3 tmpV3_0, tmpV3_1, tmpV3_2; + vmathV3Cross( &tmpV3_0, vec, &mat->col0 ); + vmathV3Cross( &tmpV3_1, vec, &mat->col1 ); + vmathV3Cross( &tmpV3_2, vec, &mat->col2 ); + vmathM3MakeFromCols( result, &tmpV3_0, &tmpV3_1, &tmpV3_2 ); +} + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/ppu/c/mat_aos_v.h b/Extras/vectormathlibrary/include/vectormath/ppu/c/mat_aos_v.h new file mode 100644 index 000000000..47c683abe --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/ppu/c/mat_aos_v.h @@ -0,0 +1,1026 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_MAT_AOS_V_C_H +#define _VECTORMATH_MAT_AOS_V_C_H + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/*----------------------------------------------------------------------------- + * Constants + * for shuffles, words are labeled [x,y,z,w] [a,b,c,d] + */ +#define _VECTORMATH_PERM_ZBWX ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_Z, _VECTORMATH_PERM_B, _VECTORMATH_PERM_W, _VECTORMATH_PERM_X }) +#define _VECTORMATH_PERM_XCYX ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_X, _VECTORMATH_PERM_C, _VECTORMATH_PERM_Y, _VECTORMATH_PERM_X }) +#define _VECTORMATH_PERM_XYAB ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_X, _VECTORMATH_PERM_Y, _VECTORMATH_PERM_A, _VECTORMATH_PERM_B }) +#define _VECTORMATH_PERM_ZWCD ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_Z, _VECTORMATH_PERM_W, _VECTORMATH_PERM_C, _VECTORMATH_PERM_D }) +#define _VECTORMATH_PERM_XZBX ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_X, _VECTORMATH_PERM_Z, _VECTORMATH_PERM_B, _VECTORMATH_PERM_X }) +#define _VECTORMATH_PERM_CXXX ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_C, _VECTORMATH_PERM_X, _VECTORMATH_PERM_X, _VECTORMATH_PERM_X }) +#define _VECTORMATH_PERM_YAXX ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_Y, _VECTORMATH_PERM_A, _VECTORMATH_PERM_X, _VECTORMATH_PERM_X }) +#define _VECTORMATH_PERM_XAZC ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_X, _VECTORMATH_PERM_A, _VECTORMATH_PERM_Z, _VECTORMATH_PERM_C }) +#define _VECTORMATH_PERM_YXWZ ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_Y, _VECTORMATH_PERM_X, _VECTORMATH_PERM_W, _VECTORMATH_PERM_Z }) +#define _VECTORMATH_PERM_YBWD ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_Y, _VECTORMATH_PERM_B, _VECTORMATH_PERM_W, _VECTORMATH_PERM_D }) +#define _VECTORMATH_PERM_XYCX ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_X, _VECTORMATH_PERM_Y, _VECTORMATH_PERM_C, _VECTORMATH_PERM_X }) +#define _VECTORMATH_PERM_YCXY ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_Y, _VECTORMATH_PERM_C, _VECTORMATH_PERM_X, _VECTORMATH_PERM_Y }) +#define _VECTORMATH_PERM_CXYC ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_C, _VECTORMATH_PERM_X, _VECTORMATH_PERM_Y, _VECTORMATH_PERM_C }) +#define _VECTORMATH_PERM_ZAYX ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_Z, _VECTORMATH_PERM_A, _VECTORMATH_PERM_Y, _VECTORMATH_PERM_X }) +#define _VECTORMATH_PERM_BZXX ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_B, _VECTORMATH_PERM_Z, _VECTORMATH_PERM_X, _VECTORMATH_PERM_X }) +#define _VECTORMATH_PERM_XZYA ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_X, _VECTORMATH_PERM_Z, _VECTORMATH_PERM_Y, _VECTORMATH_PERM_A }) +#define _VECTORMATH_PERM_ZXXB ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_Z, _VECTORMATH_PERM_X, _VECTORMATH_PERM_X, _VECTORMATH_PERM_B }) +#define _VECTORMATH_PERM_YXXC ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_Y, _VECTORMATH_PERM_X, _VECTORMATH_PERM_X, _VECTORMATH_PERM_C }) +#define _VECTORMATH_PERM_BBYX ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_B, _VECTORMATH_PERM_B, _VECTORMATH_PERM_Y, _VECTORMATH_PERM_X }) +#define _VECTORMATH_PI_OVER_2 1.570796327f + +/*----------------------------------------------------------------------------- + * Definitions + */ +static inline VmathMatrix3 vmathM3MakeFromScalar_V( float scalar ) +{ + VmathMatrix3 result; + vmathM3MakeFromScalar(&result, scalar); + return result; +} + +static inline VmathMatrix3 vmathM3MakeFromQ_V( VmathQuat unitQuat ) +{ + VmathMatrix3 result; + vmathM3MakeFromQ(&result, &unitQuat); + return result; +} + +static inline VmathMatrix3 vmathM3MakeFromCols_V( VmathVector3 _col0, VmathVector3 _col1, VmathVector3 _col2 ) +{ + VmathMatrix3 result; + vmathM3MakeFromCols(&result, &_col0, &_col1, &_col2); + return result; +} + +static inline void vmathM3SetCol0_V( VmathMatrix3 *result, VmathVector3 _col0 ) +{ + vmathM3SetCol0(result, &_col0); +} + +static inline void vmathM3SetCol1_V( VmathMatrix3 *result, VmathVector3 _col1 ) +{ + vmathM3SetCol1(result, &_col1); +} + +static inline void vmathM3SetCol2_V( VmathMatrix3 *result, VmathVector3 _col2 ) +{ + vmathM3SetCol2(result, &_col2); +} + +static inline void vmathM3SetCol_V( VmathMatrix3 *result, int col, VmathVector3 vec ) +{ + vmathM3SetCol(result, col, &vec); +} + +static inline void vmathM3SetRow_V( VmathMatrix3 *result, int row, VmathVector3 vec ) +{ + vmathM3SetRow(result, row, &vec); +} + +static inline void vmathM3SetElem_V( VmathMatrix3 *result, int col, int row, float val ) +{ + vmathM3SetElem(result, col, row, val); +} + +static inline float vmathM3GetElem_V( VmathMatrix3 mat, int col, int row ) +{ + return vmathM3GetElem(&mat, col, row); +} + +static inline VmathVector3 vmathM3GetCol0_V( VmathMatrix3 mat ) +{ + VmathVector3 result; + vmathM3GetCol0(&result, &mat); + return result; +} + +static inline VmathVector3 vmathM3GetCol1_V( VmathMatrix3 mat ) +{ + VmathVector3 result; + vmathM3GetCol1(&result, &mat); + return result; +} + +static inline VmathVector3 vmathM3GetCol2_V( VmathMatrix3 mat ) +{ + VmathVector3 result; + vmathM3GetCol2(&result, &mat); + return result; +} + +static inline VmathVector3 vmathM3GetCol_V( VmathMatrix3 mat, int col ) +{ + VmathVector3 result; + vmathM3GetCol(&result, &mat, col); + return result; +} + +static inline VmathVector3 vmathM3GetRow_V( VmathMatrix3 mat, int row ) +{ + VmathVector3 result; + vmathM3GetRow(&result, &mat, row); + return result; +} + +static inline VmathMatrix3 vmathM3Transpose_V( VmathMatrix3 mat ) +{ + VmathMatrix3 result; + vmathM3Transpose(&result, &mat); + return result; +} + +static inline VmathMatrix3 vmathM3Inverse_V( VmathMatrix3 mat ) +{ + VmathMatrix3 result; + vmathM3Inverse(&result, &mat); + return result; +} + +static inline float vmathM3Determinant_V( VmathMatrix3 mat ) +{ + return vmathM3Determinant(&mat); +} + +static inline VmathMatrix3 vmathM3Add_V( VmathMatrix3 mat0, VmathMatrix3 mat1 ) +{ + VmathMatrix3 result; + vmathM3Add(&result, &mat0, &mat1); + return result; +} + +static inline VmathMatrix3 vmathM3Sub_V( VmathMatrix3 mat0, VmathMatrix3 mat1 ) +{ + VmathMatrix3 result; + vmathM3Sub(&result, &mat0, &mat1); + return result; +} + +static inline VmathMatrix3 vmathM3Neg_V( VmathMatrix3 mat ) +{ + VmathMatrix3 result; + vmathM3Neg(&result, &mat); + return result; +} + +static inline VmathMatrix3 vmathM3AbsPerElem_V( VmathMatrix3 mat ) +{ + VmathMatrix3 result; + vmathM3AbsPerElem(&result, &mat); + return result; +} + +static inline VmathMatrix3 vmathM3ScalarMul_V( VmathMatrix3 mat, float scalar ) +{ + VmathMatrix3 result; + vmathM3ScalarMul(&result, &mat, scalar); + return result; +} + +static inline VmathVector3 vmathM3MulV3_V( VmathMatrix3 mat, VmathVector3 vec ) +{ + VmathVector3 result; + vmathM3MulV3(&result, &mat, &vec); + return result; +} + +static inline VmathMatrix3 vmathM3Mul_V( VmathMatrix3 mat0, VmathMatrix3 mat1 ) +{ + VmathMatrix3 result; + vmathM3Mul(&result, &mat0, &mat1); + return result; +} + +static inline VmathMatrix3 vmathM3MulPerElem_V( VmathMatrix3 mat0, VmathMatrix3 mat1 ) +{ + VmathMatrix3 result; + vmathM3MulPerElem(&result, &mat0, &mat1); + return result; +} + +static inline VmathMatrix3 vmathM3MakeIdentity_V( ) +{ + VmathMatrix3 result; + vmathM3MakeIdentity(&result); + return result; +} + +static inline VmathMatrix3 vmathM3MakeRotationX_V( float radians ) +{ + VmathMatrix3 result; + vmathM3MakeRotationX(&result, radians); + return result; +} + +static inline VmathMatrix3 vmathM3MakeRotationY_V( float radians ) +{ + VmathMatrix3 result; + vmathM3MakeRotationY(&result, radians); + return result; +} + +static inline VmathMatrix3 vmathM3MakeRotationZ_V( float radians ) +{ + VmathMatrix3 result; + vmathM3MakeRotationZ(&result, radians); + return result; +} + +static inline VmathMatrix3 vmathM3MakeRotationZYX_V( VmathVector3 radiansXYZ ) +{ + VmathMatrix3 result; + vmathM3MakeRotationZYX(&result, &radiansXYZ); + return result; +} + +static inline VmathMatrix3 vmathM3MakeRotationAxis_V( float radians, VmathVector3 unitVec ) +{ + VmathMatrix3 result; + vmathM3MakeRotationAxis(&result, radians, &unitVec); + return result; +} + +static inline VmathMatrix3 vmathM3MakeRotationQ_V( VmathQuat unitQuat ) +{ + VmathMatrix3 result; + vmathM3MakeRotationQ(&result, &unitQuat); + return result; +} + +static inline VmathMatrix3 vmathM3MakeScale_V( VmathVector3 scaleVec ) +{ + VmathMatrix3 result; + vmathM3MakeScale(&result, &scaleVec); + return result; +} + +static inline VmathMatrix3 vmathM3AppendScale_V( VmathMatrix3 mat, VmathVector3 scaleVec ) +{ + VmathMatrix3 result; + vmathM3AppendScale(&result, &mat, &scaleVec); + return result; +} + +static inline VmathMatrix3 vmathM3PrependScale_V( VmathVector3 scaleVec, VmathMatrix3 mat ) +{ + VmathMatrix3 result; + vmathM3PrependScale(&result, &scaleVec, &mat); + return result; +} + +static inline VmathMatrix3 vmathM3Select_V( VmathMatrix3 mat0, VmathMatrix3 mat1, unsigned int select1 ) +{ + VmathMatrix3 result; + vmathM3Select(&result, &mat0, &mat1, select1); + return result; +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathM3Print_V( VmathMatrix3 mat ) +{ + vmathM3Print(&mat); +} + +static inline void vmathM3Prints_V( VmathMatrix3 mat, const char *name ) +{ + vmathM3Prints(&mat, name); +} + +#endif + +static inline VmathMatrix4 vmathM4MakeFromScalar_V( float scalar ) +{ + VmathMatrix4 result; + vmathM4MakeFromScalar(&result, scalar); + return result; +} + +static inline VmathMatrix4 vmathM4MakeFromT3_V( VmathTransform3 mat ) +{ + VmathMatrix4 result; + vmathM4MakeFromT3(&result, &mat); + return result; +} + +static inline VmathMatrix4 vmathM4MakeFromCols_V( VmathVector4 _col0, VmathVector4 _col1, VmathVector4 _col2, VmathVector4 _col3 ) +{ + VmathMatrix4 result; + vmathM4MakeFromCols(&result, &_col0, &_col1, &_col2, &_col3); + return result; +} + +static inline VmathMatrix4 vmathM4MakeFromM3V3_V( VmathMatrix3 mat, VmathVector3 translateVec ) +{ + VmathMatrix4 result; + vmathM4MakeFromM3V3(&result, &mat, &translateVec); + return result; +} + +static inline VmathMatrix4 vmathM4MakeFromQV3_V( VmathQuat unitQuat, VmathVector3 translateVec ) +{ + VmathMatrix4 result; + vmathM4MakeFromQV3(&result, &unitQuat, &translateVec); + return result; +} + +static inline void vmathM4SetCol0_V( VmathMatrix4 *result, VmathVector4 _col0 ) +{ + vmathM4SetCol0(result, &_col0); +} + +static inline void vmathM4SetCol1_V( VmathMatrix4 *result, VmathVector4 _col1 ) +{ + vmathM4SetCol1(result, &_col1); +} + +static inline void vmathM4SetCol2_V( VmathMatrix4 *result, VmathVector4 _col2 ) +{ + vmathM4SetCol2(result, &_col2); +} + +static inline void vmathM4SetCol3_V( VmathMatrix4 *result, VmathVector4 _col3 ) +{ + vmathM4SetCol3(result, &_col3); +} + +static inline void vmathM4SetCol_V( VmathMatrix4 *result, int col, VmathVector4 vec ) +{ + vmathM4SetCol(result, col, &vec); +} + +static inline void vmathM4SetRow_V( VmathMatrix4 *result, int row, VmathVector4 vec ) +{ + vmathM4SetRow(result, row, &vec); +} + +static inline void vmathM4SetElem_V( VmathMatrix4 *result, int col, int row, float val ) +{ + vmathM4SetElem(result, col, row, val); +} + +static inline float vmathM4GetElem_V( VmathMatrix4 mat, int col, int row ) +{ + return vmathM4GetElem(&mat, col, row); +} + +static inline VmathVector4 vmathM4GetCol0_V( VmathMatrix4 mat ) +{ + VmathVector4 result; + vmathM4GetCol0(&result, &mat); + return result; +} + +static inline VmathVector4 vmathM4GetCol1_V( VmathMatrix4 mat ) +{ + VmathVector4 result; + vmathM4GetCol1(&result, &mat); + return result; +} + +static inline VmathVector4 vmathM4GetCol2_V( VmathMatrix4 mat ) +{ + VmathVector4 result; + vmathM4GetCol2(&result, &mat); + return result; +} + +static inline VmathVector4 vmathM4GetCol3_V( VmathMatrix4 mat ) +{ + VmathVector4 result; + vmathM4GetCol3(&result, &mat); + return result; +} + +static inline VmathVector4 vmathM4GetCol_V( VmathMatrix4 mat, int col ) +{ + VmathVector4 result; + vmathM4GetCol(&result, &mat, col); + return result; +} + +static inline VmathVector4 vmathM4GetRow_V( VmathMatrix4 mat, int row ) +{ + VmathVector4 result; + vmathM4GetRow(&result, &mat, row); + return result; +} + +static inline VmathMatrix4 vmathM4Transpose_V( VmathMatrix4 mat ) +{ + VmathMatrix4 result; + vmathM4Transpose(&result, &mat); + return result; +} + +static inline VmathMatrix4 vmathM4Inverse_V( VmathMatrix4 mat ) +{ + VmathMatrix4 result; + vmathM4Inverse(&result, &mat); + return result; +} + +static inline VmathMatrix4 vmathM4AffineInverse_V( VmathMatrix4 mat ) +{ + VmathMatrix4 result; + vmathM4AffineInverse(&result, &mat); + return result; +} + +static inline VmathMatrix4 vmathM4OrthoInverse_V( VmathMatrix4 mat ) +{ + VmathMatrix4 result; + vmathM4OrthoInverse(&result, &mat); + return result; +} + +static inline float vmathM4Determinant_V( VmathMatrix4 mat ) +{ + return vmathM4Determinant(&mat); +} + +static inline VmathMatrix4 vmathM4Add_V( VmathMatrix4 mat0, VmathMatrix4 mat1 ) +{ + VmathMatrix4 result; + vmathM4Add(&result, &mat0, &mat1); + return result; +} + +static inline VmathMatrix4 vmathM4Sub_V( VmathMatrix4 mat0, VmathMatrix4 mat1 ) +{ + VmathMatrix4 result; + vmathM4Sub(&result, &mat0, &mat1); + return result; +} + +static inline VmathMatrix4 vmathM4Neg_V( VmathMatrix4 mat ) +{ + VmathMatrix4 result; + vmathM4Neg(&result, &mat); + return result; +} + +static inline VmathMatrix4 vmathM4AbsPerElem_V( VmathMatrix4 mat ) +{ + VmathMatrix4 result; + vmathM4AbsPerElem(&result, &mat); + return result; +} + +static inline VmathMatrix4 vmathM4ScalarMul_V( VmathMatrix4 mat, float scalar ) +{ + VmathMatrix4 result; + vmathM4ScalarMul(&result, &mat, scalar); + return result; +} + +static inline VmathVector4 vmathM4MulV4_V( VmathMatrix4 mat, VmathVector4 vec ) +{ + VmathVector4 result; + vmathM4MulV4(&result, &mat, &vec); + return result; +} + +static inline VmathVector4 vmathM4MulV3_V( VmathMatrix4 mat, VmathVector3 vec ) +{ + VmathVector4 result; + vmathM4MulV3(&result, &mat, &vec); + return result; +} + +static inline VmathVector4 vmathM4MulP3_V( VmathMatrix4 mat, VmathPoint3 pnt ) +{ + VmathVector4 result; + vmathM4MulP3(&result, &mat, &pnt); + return result; +} + +static inline VmathMatrix4 vmathM4Mul_V( VmathMatrix4 mat0, VmathMatrix4 mat1 ) +{ + VmathMatrix4 result; + vmathM4Mul(&result, &mat0, &mat1); + return result; +} + +static inline VmathMatrix4 vmathM4MulT3_V( VmathMatrix4 mat, VmathTransform3 tfrm1 ) +{ + VmathMatrix4 result; + vmathM4MulT3(&result, &mat, &tfrm1); + return result; +} + +static inline VmathMatrix4 vmathM4MulPerElem_V( VmathMatrix4 mat0, VmathMatrix4 mat1 ) +{ + VmathMatrix4 result; + vmathM4MulPerElem(&result, &mat0, &mat1); + return result; +} + +static inline VmathMatrix4 vmathM4MakeIdentity_V( ) +{ + VmathMatrix4 result; + vmathM4MakeIdentity(&result); + return result; +} + +static inline void vmathM4SetUpper3x3_V( VmathMatrix4 *result, VmathMatrix3 mat3 ) +{ + vmathM4SetUpper3x3(result, &mat3); +} + +static inline VmathMatrix3 vmathM4GetUpper3x3_V( VmathMatrix4 mat ) +{ + VmathMatrix3 result; + vmathM4GetUpper3x3(&result, &mat); + return result; +} + +static inline void vmathM4SetTranslation_V( VmathMatrix4 *result, VmathVector3 translateVec ) +{ + vmathM4SetTranslation(result, &translateVec); +} + +static inline VmathVector3 vmathM4GetTranslation_V( VmathMatrix4 mat ) +{ + VmathVector3 result; + vmathM4GetTranslation(&result, &mat); + return result; +} + +static inline VmathMatrix4 vmathM4MakeRotationX_V( float radians ) +{ + VmathMatrix4 result; + vmathM4MakeRotationX(&result, radians); + return result; +} + +static inline VmathMatrix4 vmathM4MakeRotationY_V( float radians ) +{ + VmathMatrix4 result; + vmathM4MakeRotationY(&result, radians); + return result; +} + +static inline VmathMatrix4 vmathM4MakeRotationZ_V( float radians ) +{ + VmathMatrix4 result; + vmathM4MakeRotationZ(&result, radians); + return result; +} + +static inline VmathMatrix4 vmathM4MakeRotationZYX_V( VmathVector3 radiansXYZ ) +{ + VmathMatrix4 result; + vmathM4MakeRotationZYX(&result, &radiansXYZ); + return result; +} + +static inline VmathMatrix4 vmathM4MakeRotationAxis_V( float radians, VmathVector3 unitVec ) +{ + VmathMatrix4 result; + vmathM4MakeRotationAxis(&result, radians, &unitVec); + return result; +} + +static inline VmathMatrix4 vmathM4MakeRotationQ_V( VmathQuat unitQuat ) +{ + VmathMatrix4 result; + vmathM4MakeRotationQ(&result, &unitQuat); + return result; +} + +static inline VmathMatrix4 vmathM4MakeScale_V( VmathVector3 scaleVec ) +{ + VmathMatrix4 result; + vmathM4MakeScale(&result, &scaleVec); + return result; +} + +static inline VmathMatrix4 vmathM4AppendScale_V( VmathMatrix4 mat, VmathVector3 scaleVec ) +{ + VmathMatrix4 result; + vmathM4AppendScale(&result, &mat, &scaleVec); + return result; +} + +static inline VmathMatrix4 vmathM4PrependScale_V( VmathVector3 scaleVec, VmathMatrix4 mat ) +{ + VmathMatrix4 result; + vmathM4PrependScale(&result, &scaleVec, &mat); + return result; +} + +static inline VmathMatrix4 vmathM4MakeTranslation_V( VmathVector3 translateVec ) +{ + VmathMatrix4 result; + vmathM4MakeTranslation(&result, &translateVec); + return result; +} + +static inline VmathMatrix4 vmathM4MakeLookAt_V( VmathPoint3 eyePos, VmathPoint3 lookAtPos, VmathVector3 upVec ) +{ + VmathMatrix4 result; + vmathM4MakeLookAt(&result, &eyePos, &lookAtPos, &upVec); + return result; +} + +static inline VmathMatrix4 vmathM4MakePerspective_V( float fovyRadians, float aspect, float zNear, float zFar ) +{ + VmathMatrix4 result; + vmathM4MakePerspective(&result, fovyRadians, aspect, zNear, zFar); + return result; +} + +static inline VmathMatrix4 vmathM4MakeFrustum_V( float left, float right, float bottom, float top, float zNear, float zFar ) +{ + VmathMatrix4 result; + vmathM4MakeFrustum(&result, left, right, bottom, top, zNear, zFar); + return result; +} + +static inline VmathMatrix4 vmathM4MakeOrthographic_V( float left, float right, float bottom, float top, float zNear, float zFar ) +{ + VmathMatrix4 result; + vmathM4MakeOrthographic(&result, left, right, bottom, top, zNear, zFar); + return result; +} + +static inline VmathMatrix4 vmathM4Select_V( VmathMatrix4 mat0, VmathMatrix4 mat1, unsigned int select1 ) +{ + VmathMatrix4 result; + vmathM4Select(&result, &mat0, &mat1, select1); + return result; +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathM4Print_V( VmathMatrix4 mat ) +{ + vmathM4Print(&mat); +} + +static inline void vmathM4Prints_V( VmathMatrix4 mat, const char *name ) +{ + vmathM4Prints(&mat, name); +} + +#endif + +static inline VmathTransform3 vmathT3MakeFromScalar_V( float scalar ) +{ + VmathTransform3 result; + vmathT3MakeFromScalar(&result, scalar); + return result; +} + +static inline VmathTransform3 vmathT3MakeFromCols_V( VmathVector3 _col0, VmathVector3 _col1, VmathVector3 _col2, VmathVector3 _col3 ) +{ + VmathTransform3 result; + vmathT3MakeFromCols(&result, &_col0, &_col1, &_col2, &_col3); + return result; +} + +static inline VmathTransform3 vmathT3MakeFromM3V3_V( VmathMatrix3 tfrm, VmathVector3 translateVec ) +{ + VmathTransform3 result; + vmathT3MakeFromM3V3(&result, &tfrm, &translateVec); + return result; +} + +static inline VmathTransform3 vmathT3MakeFromQV3_V( VmathQuat unitQuat, VmathVector3 translateVec ) +{ + VmathTransform3 result; + vmathT3MakeFromQV3(&result, &unitQuat, &translateVec); + return result; +} + +static inline void vmathT3SetCol0_V( VmathTransform3 *result, VmathVector3 _col0 ) +{ + vmathT3SetCol0(result, &_col0); +} + +static inline void vmathT3SetCol1_V( VmathTransform3 *result, VmathVector3 _col1 ) +{ + vmathT3SetCol1(result, &_col1); +} + +static inline void vmathT3SetCol2_V( VmathTransform3 *result, VmathVector3 _col2 ) +{ + vmathT3SetCol2(result, &_col2); +} + +static inline void vmathT3SetCol3_V( VmathTransform3 *result, VmathVector3 _col3 ) +{ + vmathT3SetCol3(result, &_col3); +} + +static inline void vmathT3SetCol_V( VmathTransform3 *result, int col, VmathVector3 vec ) +{ + vmathT3SetCol(result, col, &vec); +} + +static inline void vmathT3SetRow_V( VmathTransform3 *result, int row, VmathVector4 vec ) +{ + vmathT3SetRow(result, row, &vec); +} + +static inline void vmathT3SetElem_V( VmathTransform3 *result, int col, int row, float val ) +{ + vmathT3SetElem(result, col, row, val); +} + +static inline float vmathT3GetElem_V( VmathTransform3 tfrm, int col, int row ) +{ + return vmathT3GetElem(&tfrm, col, row); +} + +static inline VmathVector3 vmathT3GetCol0_V( VmathTransform3 tfrm ) +{ + VmathVector3 result; + vmathT3GetCol0(&result, &tfrm); + return result; +} + +static inline VmathVector3 vmathT3GetCol1_V( VmathTransform3 tfrm ) +{ + VmathVector3 result; + vmathT3GetCol1(&result, &tfrm); + return result; +} + +static inline VmathVector3 vmathT3GetCol2_V( VmathTransform3 tfrm ) +{ + VmathVector3 result; + vmathT3GetCol2(&result, &tfrm); + return result; +} + +static inline VmathVector3 vmathT3GetCol3_V( VmathTransform3 tfrm ) +{ + VmathVector3 result; + vmathT3GetCol3(&result, &tfrm); + return result; +} + +static inline VmathVector3 vmathT3GetCol_V( VmathTransform3 tfrm, int col ) +{ + VmathVector3 result; + vmathT3GetCol(&result, &tfrm, col); + return result; +} + +static inline VmathVector4 vmathT3GetRow_V( VmathTransform3 tfrm, int row ) +{ + VmathVector4 result; + vmathT3GetRow(&result, &tfrm, row); + return result; +} + +static inline VmathTransform3 vmathT3Inverse_V( VmathTransform3 tfrm ) +{ + VmathTransform3 result; + vmathT3Inverse(&result, &tfrm); + return result; +} + +static inline VmathTransform3 vmathT3OrthoInverse_V( VmathTransform3 tfrm ) +{ + VmathTransform3 result; + vmathT3OrthoInverse(&result, &tfrm); + return result; +} + +static inline VmathTransform3 vmathT3AbsPerElem_V( VmathTransform3 tfrm ) +{ + VmathTransform3 result; + vmathT3AbsPerElem(&result, &tfrm); + return result; +} + +static inline VmathVector3 vmathT3MulV3_V( VmathTransform3 tfrm, VmathVector3 vec ) +{ + VmathVector3 result; + vmathT3MulV3(&result, &tfrm, &vec); + return result; +} + +static inline VmathPoint3 vmathT3MulP3_V( VmathTransform3 tfrm, VmathPoint3 pnt ) +{ + VmathPoint3 result; + vmathT3MulP3(&result, &tfrm, &pnt); + return result; +} + +static inline VmathTransform3 vmathT3Mul_V( VmathTransform3 tfrm0, VmathTransform3 tfrm1 ) +{ + VmathTransform3 result; + vmathT3Mul(&result, &tfrm0, &tfrm1); + return result; +} + +static inline VmathTransform3 vmathT3MulPerElem_V( VmathTransform3 tfrm0, VmathTransform3 tfrm1 ) +{ + VmathTransform3 result; + vmathT3MulPerElem(&result, &tfrm0, &tfrm1); + return result; +} + +static inline VmathTransform3 vmathT3MakeIdentity_V( ) +{ + VmathTransform3 result; + vmathT3MakeIdentity(&result); + return result; +} + +static inline void vmathT3SetUpper3x3_V( VmathTransform3 *result, VmathMatrix3 tfrm ) +{ + vmathT3SetUpper3x3(result, &tfrm); +} + +static inline VmathMatrix3 vmathT3GetUpper3x3_V( VmathTransform3 tfrm ) +{ + VmathMatrix3 result; + vmathT3GetUpper3x3(&result, &tfrm); + return result; +} + +static inline void vmathT3SetTranslation_V( VmathTransform3 *result, VmathVector3 translateVec ) +{ + vmathT3SetTranslation(result, &translateVec); +} + +static inline VmathVector3 vmathT3GetTranslation_V( VmathTransform3 tfrm ) +{ + VmathVector3 result; + vmathT3GetTranslation(&result, &tfrm); + return result; +} + +static inline VmathTransform3 vmathT3MakeRotationX_V( float radians ) +{ + VmathTransform3 result; + vmathT3MakeRotationX(&result, radians); + return result; +} + +static inline VmathTransform3 vmathT3MakeRotationY_V( float radians ) +{ + VmathTransform3 result; + vmathT3MakeRotationY(&result, radians); + return result; +} + +static inline VmathTransform3 vmathT3MakeRotationZ_V( float radians ) +{ + VmathTransform3 result; + vmathT3MakeRotationZ(&result, radians); + return result; +} + +static inline VmathTransform3 vmathT3MakeRotationZYX_V( VmathVector3 radiansXYZ ) +{ + VmathTransform3 result; + vmathT3MakeRotationZYX(&result, &radiansXYZ); + return result; +} + +static inline VmathTransform3 vmathT3MakeRotationAxis_V( float radians, VmathVector3 unitVec ) +{ + VmathTransform3 result; + vmathT3MakeRotationAxis(&result, radians, &unitVec); + return result; +} + +static inline VmathTransform3 vmathT3MakeRotationQ_V( VmathQuat unitQuat ) +{ + VmathTransform3 result; + vmathT3MakeRotationQ(&result, &unitQuat); + return result; +} + +static inline VmathTransform3 vmathT3MakeScale_V( VmathVector3 scaleVec ) +{ + VmathTransform3 result; + vmathT3MakeScale(&result, &scaleVec); + return result; +} + +static inline VmathTransform3 vmathT3AppendScale_V( VmathTransform3 tfrm, VmathVector3 scaleVec ) +{ + VmathTransform3 result; + vmathT3AppendScale(&result, &tfrm, &scaleVec); + return result; +} + +static inline VmathTransform3 vmathT3PrependScale_V( VmathVector3 scaleVec, VmathTransform3 tfrm ) +{ + VmathTransform3 result; + vmathT3PrependScale(&result, &scaleVec, &tfrm); + return result; +} + +static inline VmathTransform3 vmathT3MakeTranslation_V( VmathVector3 translateVec ) +{ + VmathTransform3 result; + vmathT3MakeTranslation(&result, &translateVec); + return result; +} + +static inline VmathTransform3 vmathT3Select_V( VmathTransform3 tfrm0, VmathTransform3 tfrm1, unsigned int select1 ) +{ + VmathTransform3 result; + vmathT3Select(&result, &tfrm0, &tfrm1, select1); + return result; +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathT3Print_V( VmathTransform3 tfrm ) +{ + vmathT3Print(&tfrm); +} + +static inline void vmathT3Prints_V( VmathTransform3 tfrm, const char *name ) +{ + vmathT3Prints(&tfrm, name); +} + +#endif + +static inline VmathQuat vmathQMakeFromM3_V( VmathMatrix3 tfrm ) +{ + VmathQuat result; + vmathQMakeFromM3(&result, &tfrm); + return result; +} + +static inline VmathMatrix3 vmathV3Outer_V( VmathVector3 tfrm0, VmathVector3 tfrm1 ) +{ + VmathMatrix3 result; + vmathV3Outer(&result, &tfrm0, &tfrm1); + return result; +} + +static inline VmathMatrix4 vmathV4Outer_V( VmathVector4 tfrm0, VmathVector4 tfrm1 ) +{ + VmathMatrix4 result; + vmathV4Outer(&result, &tfrm0, &tfrm1); + return result; +} + +static inline VmathVector3 vmathV3RowMul_V( VmathVector3 vec, VmathMatrix3 mat ) +{ + VmathVector3 result; + vmathV3RowMul(&result, &vec, &mat); + return result; +} + +static inline VmathMatrix3 vmathV3CrossMatrix_V( VmathVector3 vec ) +{ + VmathMatrix3 result; + vmathV3CrossMatrix(&result, &vec); + return result; +} + +static inline VmathMatrix3 vmathV3CrossMatrixMul_V( VmathVector3 vec, VmathMatrix3 mat ) +{ + VmathMatrix3 result; + vmathV3CrossMatrixMul(&result, &vec, &mat); + return result; +} + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/ppu/c/mat_soa.h b/Extras/vectormathlibrary/include/vectormath/ppu/c/mat_soa.h new file mode 100644 index 000000000..3b673c4eb --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/ppu/c/mat_soa.h @@ -0,0 +1,1493 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_MAT_SOA_C_H +#define _VECTORMATH_MAT_SOA_C_H + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/*----------------------------------------------------------------------------- + * Constants + */ +#define _VECTORMATH_PI_OVER_2 1.570796327f + +/*----------------------------------------------------------------------------- + * Definitions + */ +static inline void vmathSoaM3Copy( VmathSoaMatrix3 *result, const VmathSoaMatrix3 *mat ) +{ + vmathSoaV3Copy( &result->col0, &mat->col0 ); + vmathSoaV3Copy( &result->col1, &mat->col1 ); + vmathSoaV3Copy( &result->col2, &mat->col2 ); +} + +static inline void vmathSoaM3MakeFromScalar( VmathSoaMatrix3 *result, vec_float4 scalar ) +{ + vmathSoaV3MakeFromScalar( &result->col0, scalar ); + vmathSoaV3MakeFromScalar( &result->col1, scalar ); + vmathSoaV3MakeFromScalar( &result->col2, scalar ); +} + +static inline void vmathSoaM3MakeFromQ( VmathSoaMatrix3 *result, const VmathSoaQuat *unitQuat ) +{ + vec_float4 qx, qy, qz, qw, qx2, qy2, qz2, qxqx2, qyqy2, qzqz2, qxqy2, qyqz2, qzqw2, qxqz2, qyqw2, qxqw2; + qx = unitQuat->x; + qy = unitQuat->y; + qz = unitQuat->z; + qw = unitQuat->w; + qx2 = vec_add( qx, qx ); + qy2 = vec_add( qy, qy ); + qz2 = vec_add( qz, qz ); + qxqx2 = vec_madd( qx, qx2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + qxqy2 = vec_madd( qx, qy2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + qxqz2 = vec_madd( qx, qz2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + qxqw2 = vec_madd( qw, qx2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + qyqy2 = vec_madd( qy, qy2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + qyqz2 = vec_madd( qy, qz2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + qyqw2 = vec_madd( qw, qy2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + qzqz2 = vec_madd( qz, qz2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + qzqw2 = vec_madd( qw, qz2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + vmathSoaV3MakeFromElems( &result->col0, vec_sub( vec_sub( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), qyqy2 ), qzqz2 ), vec_add( qxqy2, qzqw2 ), vec_sub( qxqz2, qyqw2 ) ); + vmathSoaV3MakeFromElems( &result->col1, vec_sub( qxqy2, qzqw2 ), vec_sub( vec_sub( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), qxqx2 ), qzqz2 ), vec_add( qyqz2, qxqw2 ) ); + vmathSoaV3MakeFromElems( &result->col2, vec_add( qxqz2, qyqw2 ), vec_sub( qyqz2, qxqw2 ), vec_sub( vec_sub( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), qxqx2 ), qyqy2 ) ); +} + +static inline void vmathSoaM3MakeFromCols( VmathSoaMatrix3 *result, const VmathSoaVector3 *_col0, const VmathSoaVector3 *_col1, const VmathSoaVector3 *_col2 ) +{ + vmathSoaV3Copy( &result->col0, _col0 ); + vmathSoaV3Copy( &result->col1, _col1 ); + vmathSoaV3Copy( &result->col2, _col2 ); +} + +static inline void vmathSoaM3MakeFromAos( VmathSoaMatrix3 *result, const VmathMatrix3 *mat ) +{ + vmathSoaV3MakeFromAos( &result->col0, &mat->col0 ); + vmathSoaV3MakeFromAos( &result->col1, &mat->col1 ); + vmathSoaV3MakeFromAos( &result->col2, &mat->col2 ); +} + +static inline void vmathSoaM3MakeFrom4Aos( VmathSoaMatrix3 *result, const VmathMatrix3 *mat0, const VmathMatrix3 *mat1, const VmathMatrix3 *mat2, const VmathMatrix3 *mat3 ) +{ + vmathSoaV3MakeFrom4Aos( &result->col0, &mat0->col0, &mat1->col0, &mat2->col0, &mat3->col0 ); + vmathSoaV3MakeFrom4Aos( &result->col1, &mat0->col1, &mat1->col1, &mat2->col1, &mat3->col1 ); + vmathSoaV3MakeFrom4Aos( &result->col2, &mat0->col2, &mat1->col2, &mat2->col2, &mat3->col2 ); +} + +static inline void vmathSoaM3Get4Aos( const VmathSoaMatrix3 *mat, VmathMatrix3 *result0, VmathMatrix3 *result1, VmathMatrix3 *result2, VmathMatrix3 *result3 ) +{ + vmathSoaV3Get4Aos( &mat->col0, &result0->col0, &result1->col0, &result2->col0, &result3->col0 ); + vmathSoaV3Get4Aos( &mat->col1, &result0->col1, &result1->col1, &result2->col1, &result3->col1 ); + vmathSoaV3Get4Aos( &mat->col2, &result0->col2, &result1->col2, &result2->col2, &result3->col2 ); +} + +static inline void vmathSoaM3SetCol0( VmathSoaMatrix3 *result, const VmathSoaVector3 *_col0 ) +{ + vmathSoaV3Copy( &result->col0, _col0 ); +} + +static inline void vmathSoaM3SetCol1( VmathSoaMatrix3 *result, const VmathSoaVector3 *_col1 ) +{ + vmathSoaV3Copy( &result->col1, _col1 ); +} + +static inline void vmathSoaM3SetCol2( VmathSoaMatrix3 *result, const VmathSoaVector3 *_col2 ) +{ + vmathSoaV3Copy( &result->col2, _col2 ); +} + +static inline void vmathSoaM3SetCol( VmathSoaMatrix3 *result, int col, const VmathSoaVector3 *vec ) +{ + vmathSoaV3Copy( (&result->col0 + col), vec ); +} + +static inline void vmathSoaM3SetRow( VmathSoaMatrix3 *result, int row, const VmathSoaVector3 *vec ) +{ + vmathSoaV3SetElem( &result->col0, row, vmathSoaV3GetElem( vec, 0 ) ); + vmathSoaV3SetElem( &result->col1, row, vmathSoaV3GetElem( vec, 1 ) ); + vmathSoaV3SetElem( &result->col2, row, vmathSoaV3GetElem( vec, 2 ) ); +} + +static inline void vmathSoaM3SetElem( VmathSoaMatrix3 *result, int col, int row, vec_float4 val ) +{ + VmathSoaVector3 tmpV3_0; + vmathSoaM3GetCol( &tmpV3_0, result, col ); + vmathSoaV3SetElem( &tmpV3_0, row, val ); + vmathSoaM3SetCol( result, col, &tmpV3_0 ); +} + +static inline vec_float4 vmathSoaM3GetElem( const VmathSoaMatrix3 *mat, int col, int row ) +{ + VmathSoaVector3 tmpV3_0; + vmathSoaM3GetCol( &tmpV3_0, mat, col ); + return vmathSoaV3GetElem( &tmpV3_0, row ); +} + +static inline void vmathSoaM3GetCol0( VmathSoaVector3 *result, const VmathSoaMatrix3 *mat ) +{ + vmathSoaV3Copy( result, &mat->col0 ); +} + +static inline void vmathSoaM3GetCol1( VmathSoaVector3 *result, const VmathSoaMatrix3 *mat ) +{ + vmathSoaV3Copy( result, &mat->col1 ); +} + +static inline void vmathSoaM3GetCol2( VmathSoaVector3 *result, const VmathSoaMatrix3 *mat ) +{ + vmathSoaV3Copy( result, &mat->col2 ); +} + +static inline void vmathSoaM3GetCol( VmathSoaVector3 *result, const VmathSoaMatrix3 *mat, int col ) +{ + vmathSoaV3Copy( result, (&mat->col0 + col) ); +} + +static inline void vmathSoaM3GetRow( VmathSoaVector3 *result, const VmathSoaMatrix3 *mat, int row ) +{ + vmathSoaV3MakeFromElems( result, vmathSoaV3GetElem( &mat->col0, row ), vmathSoaV3GetElem( &mat->col1, row ), vmathSoaV3GetElem( &mat->col2, row ) ); +} + +static inline void vmathSoaM3Transpose( VmathSoaMatrix3 *result, const VmathSoaMatrix3 *mat ) +{ + VmathSoaMatrix3 tmpResult; + vmathSoaV3MakeFromElems( &tmpResult.col0, mat->col0.x, mat->col1.x, mat->col2.x ); + vmathSoaV3MakeFromElems( &tmpResult.col1, mat->col0.y, mat->col1.y, mat->col2.y ); + vmathSoaV3MakeFromElems( &tmpResult.col2, mat->col0.z, mat->col1.z, mat->col2.z ); + vmathSoaM3Copy( result, &tmpResult ); +} + +static inline void vmathSoaM3Inverse( VmathSoaMatrix3 *result, const VmathSoaMatrix3 *mat ) +{ + VmathSoaVector3 tmp0, tmp1, tmp2; + vec_float4 detinv; + vmathSoaV3Cross( &tmp0, &mat->col1, &mat->col2 ); + vmathSoaV3Cross( &tmp1, &mat->col2, &mat->col0 ); + vmathSoaV3Cross( &tmp2, &mat->col0, &mat->col1 ); + detinv = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), vmathSoaV3Dot( &mat->col2, &tmp2 ) ); + vmathSoaV3MakeFromElems( &result->col0, vec_madd( tmp0.x, detinv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( tmp1.x, detinv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( tmp2.x, detinv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + vmathSoaV3MakeFromElems( &result->col1, vec_madd( tmp0.y, detinv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( tmp1.y, detinv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( tmp2.y, detinv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + vmathSoaV3MakeFromElems( &result->col2, vec_madd( tmp0.z, detinv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( tmp1.z, detinv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( tmp2.z, detinv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); +} + +static inline vec_float4 vmathSoaM3Determinant( const VmathSoaMatrix3 *mat ) +{ + VmathSoaVector3 tmpV3_0; + vmathSoaV3Cross( &tmpV3_0, &mat->col0, &mat->col1 ); + return vmathSoaV3Dot( &mat->col2, &tmpV3_0 ); +} + +static inline void vmathSoaM3Add( VmathSoaMatrix3 *result, const VmathSoaMatrix3 *mat0, const VmathSoaMatrix3 *mat1 ) +{ + vmathSoaV3Add( &result->col0, &mat0->col0, &mat1->col0 ); + vmathSoaV3Add( &result->col1, &mat0->col1, &mat1->col1 ); + vmathSoaV3Add( &result->col2, &mat0->col2, &mat1->col2 ); +} + +static inline void vmathSoaM3Sub( VmathSoaMatrix3 *result, const VmathSoaMatrix3 *mat0, const VmathSoaMatrix3 *mat1 ) +{ + vmathSoaV3Sub( &result->col0, &mat0->col0, &mat1->col0 ); + vmathSoaV3Sub( &result->col1, &mat0->col1, &mat1->col1 ); + vmathSoaV3Sub( &result->col2, &mat0->col2, &mat1->col2 ); +} + +static inline void vmathSoaM3Neg( VmathSoaMatrix3 *result, const VmathSoaMatrix3 *mat ) +{ + vmathSoaV3Neg( &result->col0, &mat->col0 ); + vmathSoaV3Neg( &result->col1, &mat->col1 ); + vmathSoaV3Neg( &result->col2, &mat->col2 ); +} + +static inline void vmathSoaM3AbsPerElem( VmathSoaMatrix3 *result, const VmathSoaMatrix3 *mat ) +{ + vmathSoaV3AbsPerElem( &result->col0, &mat->col0 ); + vmathSoaV3AbsPerElem( &result->col1, &mat->col1 ); + vmathSoaV3AbsPerElem( &result->col2, &mat->col2 ); +} + +static inline void vmathSoaM3ScalarMul( VmathSoaMatrix3 *result, const VmathSoaMatrix3 *mat, vec_float4 scalar ) +{ + vmathSoaV3ScalarMul( &result->col0, &mat->col0, scalar ); + vmathSoaV3ScalarMul( &result->col1, &mat->col1, scalar ); + vmathSoaV3ScalarMul( &result->col2, &mat->col2, scalar ); +} + +static inline void vmathSoaM3MulV3( VmathSoaVector3 *result, const VmathSoaMatrix3 *mat, const VmathSoaVector3 *vec ) +{ + vec_float4 tmpX, tmpY, tmpZ; + tmpX = vec_add( vec_add( vec_madd( mat->col0.x, vec->x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mat->col1.x, vec->y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mat->col2.x, vec->z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + tmpY = vec_add( vec_add( vec_madd( mat->col0.y, vec->x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mat->col1.y, vec->y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mat->col2.y, vec->z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + tmpZ = vec_add( vec_add( vec_madd( mat->col0.z, vec->x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mat->col1.z, vec->y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mat->col2.z, vec->z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + vmathSoaV3MakeFromElems( result, tmpX, tmpY, tmpZ ); +} + +static inline void vmathSoaM3Mul( VmathSoaMatrix3 *result, const VmathSoaMatrix3 *mat0, const VmathSoaMatrix3 *mat1 ) +{ + VmathSoaMatrix3 tmpResult; + vmathSoaM3MulV3( &tmpResult.col0, mat0, &mat1->col0 ); + vmathSoaM3MulV3( &tmpResult.col1, mat0, &mat1->col1 ); + vmathSoaM3MulV3( &tmpResult.col2, mat0, &mat1->col2 ); + vmathSoaM3Copy( result, &tmpResult ); +} + +static inline void vmathSoaM3MulPerElem( VmathSoaMatrix3 *result, const VmathSoaMatrix3 *mat0, const VmathSoaMatrix3 *mat1 ) +{ + vmathSoaV3MulPerElem( &result->col0, &mat0->col0, &mat1->col0 ); + vmathSoaV3MulPerElem( &result->col1, &mat0->col1, &mat1->col1 ); + vmathSoaV3MulPerElem( &result->col2, &mat0->col2, &mat1->col2 ); +} + +static inline void vmathSoaM3MakeIdentity( VmathSoaMatrix3 *result ) +{ + vmathSoaV3MakeXAxis( &result->col0 ); + vmathSoaV3MakeYAxis( &result->col1 ); + vmathSoaV3MakeZAxis( &result->col2 ); +} + +static inline void vmathSoaM3MakeRotationX( VmathSoaMatrix3 *result, vec_float4 radians ) +{ + vec_float4 s, c; + sincosf4( radians, &s, &c ); + vmathSoaV3MakeXAxis( &result->col0 ); + vmathSoaV3MakeFromElems( &result->col1, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), c, s ); + vmathSoaV3MakeFromElems( &result->col2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), negatef4( s ), c ); +} + +static inline void vmathSoaM3MakeRotationY( VmathSoaMatrix3 *result, vec_float4 radians ) +{ + vec_float4 s, c; + sincosf4( radians, &s, &c ); + vmathSoaV3MakeFromElems( &result->col0, c, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), negatef4( s ) ); + vmathSoaV3MakeYAxis( &result->col1 ); + vmathSoaV3MakeFromElems( &result->col2, s, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), c ); +} + +static inline void vmathSoaM3MakeRotationZ( VmathSoaMatrix3 *result, vec_float4 radians ) +{ + vec_float4 s, c; + sincosf4( radians, &s, &c ); + vmathSoaV3MakeFromElems( &result->col0, c, s, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + vmathSoaV3MakeFromElems( &result->col1, negatef4( s ), c, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + vmathSoaV3MakeZAxis( &result->col2 ); +} + +static inline void vmathSoaM3MakeRotationZYX( VmathSoaMatrix3 *result, const VmathSoaVector3 *radiansXYZ ) +{ + vec_float4 sX, cX, sY, cY, sZ, cZ, tmp0, tmp1; + sincosf4( radiansXYZ->x, &sX, &cX ); + sincosf4( radiansXYZ->y, &sY, &cY ); + sincosf4( radiansXYZ->z, &sZ, &cZ ); + tmp0 = vec_madd( cZ, sY, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + tmp1 = vec_madd( sZ, sY, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + vmathSoaV3MakeFromElems( &result->col0, vec_madd( cZ, cY, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( sZ, cY, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), negatef4( sY ) ); + vmathSoaV3MakeFromElems( &result->col1, vec_sub( vec_madd( tmp0, sX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( sZ, cX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_add( vec_madd( tmp1, sX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( cZ, cX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( cY, sX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + vmathSoaV3MakeFromElems( &result->col2, vec_add( vec_madd( tmp0, cX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( sZ, sX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_sub( vec_madd( tmp1, cX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( cZ, sX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( cY, cX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); +} + +static inline void vmathSoaM3MakeRotationAxis( VmathSoaMatrix3 *result, vec_float4 radians, const VmathSoaVector3 *unitVec ) +{ + vec_float4 x, y, z, s, c, oneMinusC, xy, yz, zx; + sincosf4( radians, &s, &c ); + x = unitVec->x; + y = unitVec->y; + z = unitVec->z; + xy = vec_madd( x, y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + yz = vec_madd( y, z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + zx = vec_madd( z, x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + oneMinusC = vec_sub( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), c ); + vmathSoaV3MakeFromElems( &result->col0, vec_add( vec_madd( vec_madd( x, x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), oneMinusC, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), c ), vec_add( vec_madd( xy, oneMinusC, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( z, s, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_sub( vec_madd( zx, oneMinusC, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( y, s, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ) ); + vmathSoaV3MakeFromElems( &result->col1, vec_sub( vec_madd( xy, oneMinusC, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( z, s, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_add( vec_madd( vec_madd( y, y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), oneMinusC, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), c ), vec_add( vec_madd( yz, oneMinusC, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( x, s, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ) ); + vmathSoaV3MakeFromElems( &result->col2, vec_add( vec_madd( zx, oneMinusC, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( y, s, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_sub( vec_madd( yz, oneMinusC, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( x, s, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_add( vec_madd( vec_madd( z, z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), oneMinusC, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), c ) ); +} + +static inline void vmathSoaM3MakeRotationQ( VmathSoaMatrix3 *result, const VmathSoaQuat *unitQuat ) +{ + vmathSoaM3MakeFromQ( result, unitQuat ); +} + +static inline void vmathSoaM3MakeScale( VmathSoaMatrix3 *result, const VmathSoaVector3 *scaleVec ) +{ + vmathSoaV3MakeFromElems( &result->col0, scaleVec->x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + vmathSoaV3MakeFromElems( &result->col1, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), scaleVec->y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + vmathSoaV3MakeFromElems( &result->col2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), scaleVec->z ); +} + +static inline void vmathSoaM3AppendScale( VmathSoaMatrix3 *result, const VmathSoaMatrix3 *mat, const VmathSoaVector3 *scaleVec ) +{ + vmathSoaV3ScalarMul( &result->col0, &mat->col0, vmathSoaV3GetX( scaleVec ) ); + vmathSoaV3ScalarMul( &result->col1, &mat->col1, vmathSoaV3GetY( scaleVec ) ); + vmathSoaV3ScalarMul( &result->col2, &mat->col2, vmathSoaV3GetZ( scaleVec ) ); +} + +static inline void vmathSoaM3PrependScale( VmathSoaMatrix3 *result, const VmathSoaVector3 *scaleVec, const VmathSoaMatrix3 *mat ) +{ + vmathSoaV3MulPerElem( &result->col0, &mat->col0, scaleVec ); + vmathSoaV3MulPerElem( &result->col1, &mat->col1, scaleVec ); + vmathSoaV3MulPerElem( &result->col2, &mat->col2, scaleVec ); +} + +static inline void vmathSoaM3Select( VmathSoaMatrix3 *result, const VmathSoaMatrix3 *mat0, const VmathSoaMatrix3 *mat1, vec_uint4 select1 ) +{ + vmathSoaV3Select( &result->col0, &mat0->col0, &mat1->col0, select1 ); + vmathSoaV3Select( &result->col1, &mat0->col1, &mat1->col1, select1 ); + vmathSoaV3Select( &result->col2, &mat0->col2, &mat1->col2, select1 ); +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathSoaM3Print( const VmathSoaMatrix3 *mat ) +{ + VmathMatrix3 mat0, mat1, mat2, mat3; + vmathSoaM3Get4Aos( mat, &mat0, &mat1, &mat2, &mat3 ); + printf("slot 0:\n"); + vmathM3Print( &mat0 ); + printf("slot 1:\n"); + vmathM3Print( &mat1 ); + printf("slot 2:\n"); + vmathM3Print( &mat2 ); + printf("slot 3:\n"); + vmathM3Print( &mat3 ); +} + +static inline void vmathSoaM3Prints( const VmathSoaMatrix3 *mat, const char *name ) +{ + printf("%s:\n", name); + vmathSoaM3Print( mat ); +} + +#endif + +static inline void vmathSoaM4Copy( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat ) +{ + vmathSoaV4Copy( &result->col0, &mat->col0 ); + vmathSoaV4Copy( &result->col1, &mat->col1 ); + vmathSoaV4Copy( &result->col2, &mat->col2 ); + vmathSoaV4Copy( &result->col3, &mat->col3 ); +} + +static inline void vmathSoaM4MakeFromScalar( VmathSoaMatrix4 *result, vec_float4 scalar ) +{ + vmathSoaV4MakeFromScalar( &result->col0, scalar ); + vmathSoaV4MakeFromScalar( &result->col1, scalar ); + vmathSoaV4MakeFromScalar( &result->col2, scalar ); + vmathSoaV4MakeFromScalar( &result->col3, scalar ); +} + +static inline void vmathSoaM4MakeFromT3( VmathSoaMatrix4 *result, const VmathSoaTransform3 *mat ) +{ + vmathSoaV4MakeFromV3Scalar( &result->col0, &mat->col0, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + vmathSoaV4MakeFromV3Scalar( &result->col1, &mat->col1, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + vmathSoaV4MakeFromV3Scalar( &result->col2, &mat->col2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + vmathSoaV4MakeFromV3Scalar( &result->col3, &mat->col3, ((vec_float4){1.0f,1.0f,1.0f,1.0f}) ); +} + +static inline void vmathSoaM4MakeFromCols( VmathSoaMatrix4 *result, const VmathSoaVector4 *_col0, const VmathSoaVector4 *_col1, const VmathSoaVector4 *_col2, const VmathSoaVector4 *_col3 ) +{ + vmathSoaV4Copy( &result->col0, _col0 ); + vmathSoaV4Copy( &result->col1, _col1 ); + vmathSoaV4Copy( &result->col2, _col2 ); + vmathSoaV4Copy( &result->col3, _col3 ); +} + +static inline void vmathSoaM4MakeFromM3V3( VmathSoaMatrix4 *result, const VmathSoaMatrix3 *mat, const VmathSoaVector3 *translateVec ) +{ + vmathSoaV4MakeFromV3Scalar( &result->col0, &mat->col0, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + vmathSoaV4MakeFromV3Scalar( &result->col1, &mat->col1, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + vmathSoaV4MakeFromV3Scalar( &result->col2, &mat->col2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + vmathSoaV4MakeFromV3Scalar( &result->col3, translateVec, ((vec_float4){1.0f,1.0f,1.0f,1.0f}) ); +} + +static inline void vmathSoaM4MakeFromQV3( VmathSoaMatrix4 *result, const VmathSoaQuat *unitQuat, const VmathSoaVector3 *translateVec ) +{ + VmathSoaMatrix3 mat; + vmathSoaM3MakeFromQ( &mat, unitQuat ); + vmathSoaV4MakeFromV3Scalar( &result->col0, &mat.col0, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + vmathSoaV4MakeFromV3Scalar( &result->col1, &mat.col1, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + vmathSoaV4MakeFromV3Scalar( &result->col2, &mat.col2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + vmathSoaV4MakeFromV3Scalar( &result->col3, translateVec, ((vec_float4){1.0f,1.0f,1.0f,1.0f}) ); +} + +static inline void vmathSoaM4MakeFromAos( VmathSoaMatrix4 *result, const VmathMatrix4 *mat ) +{ + vmathSoaV4MakeFromAos( &result->col0, &mat->col0 ); + vmathSoaV4MakeFromAos( &result->col1, &mat->col1 ); + vmathSoaV4MakeFromAos( &result->col2, &mat->col2 ); + vmathSoaV4MakeFromAos( &result->col3, &mat->col3 ); +} + +static inline void vmathSoaM4MakeFrom4Aos( VmathSoaMatrix4 *result, const VmathMatrix4 *mat0, const VmathMatrix4 *mat1, const VmathMatrix4 *mat2, const VmathMatrix4 *mat3 ) +{ + vmathSoaV4MakeFrom4Aos( &result->col0, &mat0->col0, &mat1->col0, &mat2->col0, &mat3->col0 ); + vmathSoaV4MakeFrom4Aos( &result->col1, &mat0->col1, &mat1->col1, &mat2->col1, &mat3->col1 ); + vmathSoaV4MakeFrom4Aos( &result->col2, &mat0->col2, &mat1->col2, &mat2->col2, &mat3->col2 ); + vmathSoaV4MakeFrom4Aos( &result->col3, &mat0->col3, &mat1->col3, &mat2->col3, &mat3->col3 ); +} + +static inline void vmathSoaM4Get4Aos( const VmathSoaMatrix4 *mat, VmathMatrix4 *result0, VmathMatrix4 *result1, VmathMatrix4 *result2, VmathMatrix4 *result3 ) +{ + vmathSoaV4Get4Aos( &mat->col0, &result0->col0, &result1->col0, &result2->col0, &result3->col0 ); + vmathSoaV4Get4Aos( &mat->col1, &result0->col1, &result1->col1, &result2->col1, &result3->col1 ); + vmathSoaV4Get4Aos( &mat->col2, &result0->col2, &result1->col2, &result2->col2, &result3->col2 ); + vmathSoaV4Get4Aos( &mat->col3, &result0->col3, &result1->col3, &result2->col3, &result3->col3 ); +} + +static inline void vmathSoaM4SetCol0( VmathSoaMatrix4 *result, const VmathSoaVector4 *_col0 ) +{ + vmathSoaV4Copy( &result->col0, _col0 ); +} + +static inline void vmathSoaM4SetCol1( VmathSoaMatrix4 *result, const VmathSoaVector4 *_col1 ) +{ + vmathSoaV4Copy( &result->col1, _col1 ); +} + +static inline void vmathSoaM4SetCol2( VmathSoaMatrix4 *result, const VmathSoaVector4 *_col2 ) +{ + vmathSoaV4Copy( &result->col2, _col2 ); +} + +static inline void vmathSoaM4SetCol3( VmathSoaMatrix4 *result, const VmathSoaVector4 *_col3 ) +{ + vmathSoaV4Copy( &result->col3, _col3 ); +} + +static inline void vmathSoaM4SetCol( VmathSoaMatrix4 *result, int col, const VmathSoaVector4 *vec ) +{ + vmathSoaV4Copy( (&result->col0 + col), vec ); +} + +static inline void vmathSoaM4SetRow( VmathSoaMatrix4 *result, int row, const VmathSoaVector4 *vec ) +{ + vmathSoaV4SetElem( &result->col0, row, vmathSoaV4GetElem( vec, 0 ) ); + vmathSoaV4SetElem( &result->col1, row, vmathSoaV4GetElem( vec, 1 ) ); + vmathSoaV4SetElem( &result->col2, row, vmathSoaV4GetElem( vec, 2 ) ); + vmathSoaV4SetElem( &result->col3, row, vmathSoaV4GetElem( vec, 3 ) ); +} + +static inline void vmathSoaM4SetElem( VmathSoaMatrix4 *result, int col, int row, vec_float4 val ) +{ + VmathSoaVector4 tmpV3_0; + vmathSoaM4GetCol( &tmpV3_0, result, col ); + vmathSoaV4SetElem( &tmpV3_0, row, val ); + vmathSoaM4SetCol( result, col, &tmpV3_0 ); +} + +static inline vec_float4 vmathSoaM4GetElem( const VmathSoaMatrix4 *mat, int col, int row ) +{ + VmathSoaVector4 tmpV4_0; + vmathSoaM4GetCol( &tmpV4_0, mat, col ); + return vmathSoaV4GetElem( &tmpV4_0, row ); +} + +static inline void vmathSoaM4GetCol0( VmathSoaVector4 *result, const VmathSoaMatrix4 *mat ) +{ + vmathSoaV4Copy( result, &mat->col0 ); +} + +static inline void vmathSoaM4GetCol1( VmathSoaVector4 *result, const VmathSoaMatrix4 *mat ) +{ + vmathSoaV4Copy( result, &mat->col1 ); +} + +static inline void vmathSoaM4GetCol2( VmathSoaVector4 *result, const VmathSoaMatrix4 *mat ) +{ + vmathSoaV4Copy( result, &mat->col2 ); +} + +static inline void vmathSoaM4GetCol3( VmathSoaVector4 *result, const VmathSoaMatrix4 *mat ) +{ + vmathSoaV4Copy( result, &mat->col3 ); +} + +static inline void vmathSoaM4GetCol( VmathSoaVector4 *result, const VmathSoaMatrix4 *mat, int col ) +{ + vmathSoaV4Copy( result, (&mat->col0 + col) ); +} + +static inline void vmathSoaM4GetRow( VmathSoaVector4 *result, const VmathSoaMatrix4 *mat, int row ) +{ + vmathSoaV4MakeFromElems( result, vmathSoaV4GetElem( &mat->col0, row ), vmathSoaV4GetElem( &mat->col1, row ), vmathSoaV4GetElem( &mat->col2, row ), vmathSoaV4GetElem( &mat->col3, row ) ); +} + +static inline void vmathSoaM4Transpose( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat ) +{ + VmathSoaMatrix4 tmpResult; + vmathSoaV4MakeFromElems( &tmpResult.col0, mat->col0.x, mat->col1.x, mat->col2.x, mat->col3.x ); + vmathSoaV4MakeFromElems( &tmpResult.col1, mat->col0.y, mat->col1.y, mat->col2.y, mat->col3.y ); + vmathSoaV4MakeFromElems( &tmpResult.col2, mat->col0.z, mat->col1.z, mat->col2.z, mat->col3.z ); + vmathSoaV4MakeFromElems( &tmpResult.col3, mat->col0.w, mat->col1.w, mat->col2.w, mat->col3.w ); + vmathSoaM4Copy( result, &tmpResult ); +} + +static inline void vmathSoaM4Inverse( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat ) +{ + VmathSoaVector4 res0, res1, res2, res3; + vec_float4 mA, mB, mC, mD, mE, mF, mG, mH, mI, mJ, mK, mL, mM, mN, mO, mP, tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, detInv; + mA = mat->col0.x; + mB = mat->col0.y; + mC = mat->col0.z; + mD = mat->col0.w; + mE = mat->col1.x; + mF = mat->col1.y; + mG = mat->col1.z; + mH = mat->col1.w; + mI = mat->col2.x; + mJ = mat->col2.y; + mK = mat->col2.z; + mL = mat->col2.w; + mM = mat->col3.x; + mN = mat->col3.y; + mO = mat->col3.z; + mP = mat->col3.w; + tmp0 = vec_sub( vec_madd( mK, mD, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mC, mL, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + tmp1 = vec_sub( vec_madd( mO, mH, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mG, mP, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + tmp2 = vec_sub( vec_madd( mB, mK, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mJ, mC, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + tmp3 = vec_sub( vec_madd( mF, mO, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mN, mG, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + tmp4 = vec_sub( vec_madd( mJ, mD, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mB, mL, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + tmp5 = vec_sub( vec_madd( mN, mH, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mF, mP, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + vmathSoaV4SetX( &res0, vec_sub( vec_sub( vec_madd( mJ, tmp1, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mL, tmp3, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mK, tmp5, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ) ); + vmathSoaV4SetY( &res0, vec_sub( vec_sub( vec_madd( mN, tmp0, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mP, tmp2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mO, tmp4, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ) ); + vmathSoaV4SetZ( &res0, vec_sub( vec_add( vec_madd( mD, tmp3, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mC, tmp5, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mB, tmp1, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ) ); + vmathSoaV4SetW( &res0, vec_sub( vec_add( vec_madd( mH, tmp2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mG, tmp4, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mF, tmp0, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ) ); + detInv = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), vec_add( vec_add( vec_add( vec_madd( mA, res0.x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mE, res0.y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mI, res0.z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mM, res0.w, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ) ); + vmathSoaV4SetX( &res1, vec_madd( mI, tmp1, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + vmathSoaV4SetY( &res1, vec_madd( mM, tmp0, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + vmathSoaV4SetZ( &res1, vec_madd( mA, tmp1, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + vmathSoaV4SetW( &res1, vec_madd( mE, tmp0, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + vmathSoaV4SetX( &res3, vec_madd( mI, tmp3, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + vmathSoaV4SetY( &res3, vec_madd( mM, tmp2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + vmathSoaV4SetZ( &res3, vec_madd( mA, tmp3, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + vmathSoaV4SetW( &res3, vec_madd( mE, tmp2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + vmathSoaV4SetX( &res2, vec_madd( mI, tmp5, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + vmathSoaV4SetY( &res2, vec_madd( mM, tmp4, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + vmathSoaV4SetZ( &res2, vec_madd( mA, tmp5, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + vmathSoaV4SetW( &res2, vec_madd( mE, tmp4, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + tmp0 = vec_sub( vec_madd( mI, mB, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mA, mJ, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + tmp1 = vec_sub( vec_madd( mM, mF, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mE, mN, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + tmp2 = vec_sub( vec_madd( mI, mD, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mA, mL, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + tmp3 = vec_sub( vec_madd( mM, mH, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mE, mP, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + tmp4 = vec_sub( vec_madd( mI, mC, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mA, mK, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + tmp5 = vec_sub( vec_madd( mM, mG, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mE, mO, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + vmathSoaV4SetX( &res2, vec_add( vec_sub( vec_madd( mL, tmp1, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mJ, tmp3, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), res2.x ) ); + vmathSoaV4SetY( &res2, vec_add( vec_sub( vec_madd( mP, tmp0, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mN, tmp2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), res2.y ) ); + vmathSoaV4SetZ( &res2, vec_sub( vec_sub( vec_madd( mB, tmp3, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mD, tmp1, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), res2.z ) ); + vmathSoaV4SetW( &res2, vec_sub( vec_sub( vec_madd( mF, tmp2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mH, tmp0, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), res2.w ) ); + vmathSoaV4SetX( &res3, vec_add( vec_sub( vec_madd( mJ, tmp5, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mK, tmp1, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), res3.x ) ); + vmathSoaV4SetY( &res3, vec_add( vec_sub( vec_madd( mN, tmp4, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mO, tmp0, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), res3.y ) ); + vmathSoaV4SetZ( &res3, vec_sub( vec_sub( vec_madd( mC, tmp1, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mB, tmp5, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), res3.z ) ); + vmathSoaV4SetW( &res3, vec_sub( vec_sub( vec_madd( mG, tmp0, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mF, tmp4, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), res3.w ) ); + vmathSoaV4SetX( &res1, vec_sub( vec_sub( vec_madd( mK, tmp3, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mL, tmp5, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), res1.x ) ); + vmathSoaV4SetY( &res1, vec_sub( vec_sub( vec_madd( mO, tmp2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mP, tmp4, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), res1.y ) ); + vmathSoaV4SetZ( &res1, vec_add( vec_sub( vec_madd( mD, tmp5, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mC, tmp3, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), res1.z ) ); + vmathSoaV4SetW( &res1, vec_add( vec_sub( vec_madd( mH, tmp4, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mG, tmp2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), res1.w ) ); + vmathSoaV4ScalarMul( &result->col0, &res0, detInv ); + vmathSoaV4ScalarMul( &result->col1, &res1, detInv ); + vmathSoaV4ScalarMul( &result->col2, &res2, detInv ); + vmathSoaV4ScalarMul( &result->col3, &res3, detInv ); +} + +static inline void vmathSoaM4AffineInverse( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat ) +{ + VmathSoaTransform3 affineMat, tmpT3_0; + VmathSoaVector3 tmpV3_0, tmpV3_1, tmpV3_2, tmpV3_3; + vmathSoaV4GetXYZ( &tmpV3_0, &mat->col0 ); + vmathSoaT3SetCol0( &affineMat, &tmpV3_0 ); + vmathSoaV4GetXYZ( &tmpV3_1, &mat->col1 ); + vmathSoaT3SetCol1( &affineMat, &tmpV3_1 ); + vmathSoaV4GetXYZ( &tmpV3_2, &mat->col2 ); + vmathSoaT3SetCol2( &affineMat, &tmpV3_2 ); + vmathSoaV4GetXYZ( &tmpV3_3, &mat->col3 ); + vmathSoaT3SetCol3( &affineMat, &tmpV3_3 ); + vmathSoaT3Inverse( &tmpT3_0, &affineMat ); + vmathSoaM4MakeFromT3( result, &tmpT3_0 ); +} + +static inline void vmathSoaM4OrthoInverse( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat ) +{ + VmathSoaTransform3 affineMat, tmpT3_0; + VmathSoaVector3 tmpV3_0, tmpV3_1, tmpV3_2, tmpV3_3; + vmathSoaV4GetXYZ( &tmpV3_0, &mat->col0 ); + vmathSoaT3SetCol0( &affineMat, &tmpV3_0 ); + vmathSoaV4GetXYZ( &tmpV3_1, &mat->col1 ); + vmathSoaT3SetCol1( &affineMat, &tmpV3_1 ); + vmathSoaV4GetXYZ( &tmpV3_2, &mat->col2 ); + vmathSoaT3SetCol2( &affineMat, &tmpV3_2 ); + vmathSoaV4GetXYZ( &tmpV3_3, &mat->col3 ); + vmathSoaT3SetCol3( &affineMat, &tmpV3_3 ); + vmathSoaT3OrthoInverse( &tmpT3_0, &affineMat ); + vmathSoaM4MakeFromT3( result, &tmpT3_0 ); +} + +static inline vec_float4 vmathSoaM4Determinant( const VmathSoaMatrix4 *mat ) +{ + vec_float4 dx, dy, dz, dw, mA, mB, mC, mD, mE, mF, mG, mH, mI, mJ, mK, mL, mM, mN, mO, mP, tmp0, tmp1, tmp2, tmp3, tmp4, tmp5; + mA = mat->col0.x; + mB = mat->col0.y; + mC = mat->col0.z; + mD = mat->col0.w; + mE = mat->col1.x; + mF = mat->col1.y; + mG = mat->col1.z; + mH = mat->col1.w; + mI = mat->col2.x; + mJ = mat->col2.y; + mK = mat->col2.z; + mL = mat->col2.w; + mM = mat->col3.x; + mN = mat->col3.y; + mO = mat->col3.z; + mP = mat->col3.w; + tmp0 = vec_sub( vec_madd( mK, mD, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mC, mL, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + tmp1 = vec_sub( vec_madd( mO, mH, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mG, mP, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + tmp2 = vec_sub( vec_madd( mB, mK, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mJ, mC, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + tmp3 = vec_sub( vec_madd( mF, mO, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mN, mG, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + tmp4 = vec_sub( vec_madd( mJ, mD, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mB, mL, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + tmp5 = vec_sub( vec_madd( mN, mH, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mF, mP, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + dx = vec_sub( vec_sub( vec_madd( mJ, tmp1, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mL, tmp3, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mK, tmp5, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + dy = vec_sub( vec_sub( vec_madd( mN, tmp0, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mP, tmp2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mO, tmp4, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + dz = vec_sub( vec_add( vec_madd( mD, tmp3, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mC, tmp5, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mB, tmp1, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + dw = vec_sub( vec_add( vec_madd( mH, tmp2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mG, tmp4, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mF, tmp0, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + return vec_add( vec_add( vec_add( vec_madd( mA, dx, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mE, dy, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mI, dz, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mM, dw, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); +} + +static inline void vmathSoaM4Add( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat0, const VmathSoaMatrix4 *mat1 ) +{ + vmathSoaV4Add( &result->col0, &mat0->col0, &mat1->col0 ); + vmathSoaV4Add( &result->col1, &mat0->col1, &mat1->col1 ); + vmathSoaV4Add( &result->col2, &mat0->col2, &mat1->col2 ); + vmathSoaV4Add( &result->col3, &mat0->col3, &mat1->col3 ); +} + +static inline void vmathSoaM4Sub( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat0, const VmathSoaMatrix4 *mat1 ) +{ + vmathSoaV4Sub( &result->col0, &mat0->col0, &mat1->col0 ); + vmathSoaV4Sub( &result->col1, &mat0->col1, &mat1->col1 ); + vmathSoaV4Sub( &result->col2, &mat0->col2, &mat1->col2 ); + vmathSoaV4Sub( &result->col3, &mat0->col3, &mat1->col3 ); +} + +static inline void vmathSoaM4Neg( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat ) +{ + vmathSoaV4Neg( &result->col0, &mat->col0 ); + vmathSoaV4Neg( &result->col1, &mat->col1 ); + vmathSoaV4Neg( &result->col2, &mat->col2 ); + vmathSoaV4Neg( &result->col3, &mat->col3 ); +} + +static inline void vmathSoaM4AbsPerElem( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat ) +{ + vmathSoaV4AbsPerElem( &result->col0, &mat->col0 ); + vmathSoaV4AbsPerElem( &result->col1, &mat->col1 ); + vmathSoaV4AbsPerElem( &result->col2, &mat->col2 ); + vmathSoaV4AbsPerElem( &result->col3, &mat->col3 ); +} + +static inline void vmathSoaM4ScalarMul( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat, vec_float4 scalar ) +{ + vmathSoaV4ScalarMul( &result->col0, &mat->col0, scalar ); + vmathSoaV4ScalarMul( &result->col1, &mat->col1, scalar ); + vmathSoaV4ScalarMul( &result->col2, &mat->col2, scalar ); + vmathSoaV4ScalarMul( &result->col3, &mat->col3, scalar ); +} + +static inline void vmathSoaM4MulV4( VmathSoaVector4 *result, const VmathSoaMatrix4 *mat, const VmathSoaVector4 *vec ) +{ + vec_float4 tmpX, tmpY, tmpZ, tmpW; + tmpX = vec_add( vec_add( vec_add( vec_madd( mat->col0.x, vec->x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mat->col1.x, vec->y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mat->col2.x, vec->z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mat->col3.x, vec->w, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + tmpY = vec_add( vec_add( vec_add( vec_madd( mat->col0.y, vec->x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mat->col1.y, vec->y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mat->col2.y, vec->z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mat->col3.y, vec->w, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + tmpZ = vec_add( vec_add( vec_add( vec_madd( mat->col0.z, vec->x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mat->col1.z, vec->y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mat->col2.z, vec->z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mat->col3.z, vec->w, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + tmpW = vec_add( vec_add( vec_add( vec_madd( mat->col0.w, vec->x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mat->col1.w, vec->y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mat->col2.w, vec->z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mat->col3.w, vec->w, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + vmathSoaV4MakeFromElems( result, tmpX, tmpY, tmpZ, tmpW ); +} + +static inline void vmathSoaM4MulV3( VmathSoaVector4 *result, const VmathSoaMatrix4 *mat, const VmathSoaVector3 *vec ) +{ + result->x = vec_add( vec_add( vec_madd( mat->col0.x, vec->x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mat->col1.x, vec->y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mat->col2.x, vec->z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + result->y = vec_add( vec_add( vec_madd( mat->col0.y, vec->x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mat->col1.y, vec->y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mat->col2.y, vec->z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + result->z = vec_add( vec_add( vec_madd( mat->col0.z, vec->x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mat->col1.z, vec->y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mat->col2.z, vec->z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + result->w = vec_add( vec_add( vec_madd( mat->col0.w, vec->x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mat->col1.w, vec->y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mat->col2.w, vec->z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); +} + +static inline void vmathSoaM4MulP3( VmathSoaVector4 *result, const VmathSoaMatrix4 *mat, const VmathSoaPoint3 *pnt ) +{ + result->x = vec_add( vec_add( vec_add( vec_madd( mat->col0.x, pnt->x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mat->col1.x, pnt->y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mat->col2.x, pnt->z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), mat->col3.x ); + result->y = vec_add( vec_add( vec_add( vec_madd( mat->col0.y, pnt->x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mat->col1.y, pnt->y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mat->col2.y, pnt->z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), mat->col3.y ); + result->z = vec_add( vec_add( vec_add( vec_madd( mat->col0.z, pnt->x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mat->col1.z, pnt->y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mat->col2.z, pnt->z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), mat->col3.z ); + result->w = vec_add( vec_add( vec_add( vec_madd( mat->col0.w, pnt->x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mat->col1.w, pnt->y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mat->col2.w, pnt->z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), mat->col3.w ); +} + +static inline void vmathSoaM4Mul( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat0, const VmathSoaMatrix4 *mat1 ) +{ + VmathSoaMatrix4 tmpResult; + vmathSoaM4MulV4( &tmpResult.col0, mat0, &mat1->col0 ); + vmathSoaM4MulV4( &tmpResult.col1, mat0, &mat1->col1 ); + vmathSoaM4MulV4( &tmpResult.col2, mat0, &mat1->col2 ); + vmathSoaM4MulV4( &tmpResult.col3, mat0, &mat1->col3 ); + vmathSoaM4Copy( result, &tmpResult ); +} + +static inline void vmathSoaM4MulT3( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat, const VmathSoaTransform3 *tfrm1 ) +{ + VmathSoaMatrix4 tmpResult; + VmathSoaPoint3 tmpP3_0; + vmathSoaM4MulV3( &tmpResult.col0, mat, &tfrm1->col0 ); + vmathSoaM4MulV3( &tmpResult.col1, mat, &tfrm1->col1 ); + vmathSoaM4MulV3( &tmpResult.col2, mat, &tfrm1->col2 ); + vmathSoaP3MakeFromV3( &tmpP3_0, &tfrm1->col3 ); + vmathSoaM4MulP3( &tmpResult.col3, mat, &tmpP3_0 ); + vmathSoaM4Copy( result, &tmpResult ); +} + +static inline void vmathSoaM4MulPerElem( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat0, const VmathSoaMatrix4 *mat1 ) +{ + vmathSoaV4MulPerElem( &result->col0, &mat0->col0, &mat1->col0 ); + vmathSoaV4MulPerElem( &result->col1, &mat0->col1, &mat1->col1 ); + vmathSoaV4MulPerElem( &result->col2, &mat0->col2, &mat1->col2 ); + vmathSoaV4MulPerElem( &result->col3, &mat0->col3, &mat1->col3 ); +} + +static inline void vmathSoaM4MakeIdentity( VmathSoaMatrix4 *result ) +{ + vmathSoaV4MakeXAxis( &result->col0 ); + vmathSoaV4MakeYAxis( &result->col1 ); + vmathSoaV4MakeZAxis( &result->col2 ); + vmathSoaV4MakeWAxis( &result->col3 ); +} + +static inline void vmathSoaM4SetUpper3x3( VmathSoaMatrix4 *result, const VmathSoaMatrix3 *mat3 ) +{ + vmathSoaV4SetXYZ( &result->col0, &mat3->col0 ); + vmathSoaV4SetXYZ( &result->col1, &mat3->col1 ); + vmathSoaV4SetXYZ( &result->col2, &mat3->col2 ); +} + +static inline void vmathSoaM4GetUpper3x3( VmathSoaMatrix3 *result, const VmathSoaMatrix4 *mat ) +{ + vmathSoaV4GetXYZ( &result->col0, &mat->col0 ); + vmathSoaV4GetXYZ( &result->col1, &mat->col1 ); + vmathSoaV4GetXYZ( &result->col2, &mat->col2 ); +} + +static inline void vmathSoaM4SetTranslation( VmathSoaMatrix4 *result, const VmathSoaVector3 *translateVec ) +{ + vmathSoaV4SetXYZ( &result->col3, translateVec ); +} + +static inline void vmathSoaM4GetTranslation( VmathSoaVector3 *result, const VmathSoaMatrix4 *mat ) +{ + vmathSoaV4GetXYZ( result, &mat->col3 ); +} + +static inline void vmathSoaM4MakeRotationX( VmathSoaMatrix4 *result, vec_float4 radians ) +{ + vec_float4 s, c; + sincosf4( radians, &s, &c ); + vmathSoaV4MakeXAxis( &result->col0 ); + vmathSoaV4MakeFromElems( &result->col1, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), c, s, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + vmathSoaV4MakeFromElems( &result->col2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), negatef4( s ), c, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + vmathSoaV4MakeWAxis( &result->col3 ); +} + +static inline void vmathSoaM4MakeRotationY( VmathSoaMatrix4 *result, vec_float4 radians ) +{ + vec_float4 s, c; + sincosf4( radians, &s, &c ); + vmathSoaV4MakeFromElems( &result->col0, c, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), negatef4( s ), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + vmathSoaV4MakeYAxis( &result->col1 ); + vmathSoaV4MakeFromElems( &result->col2, s, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), c, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + vmathSoaV4MakeWAxis( &result->col3 ); +} + +static inline void vmathSoaM4MakeRotationZ( VmathSoaMatrix4 *result, vec_float4 radians ) +{ + vec_float4 s, c; + sincosf4( radians, &s, &c ); + vmathSoaV4MakeFromElems( &result->col0, c, s, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + vmathSoaV4MakeFromElems( &result->col1, negatef4( s ), c, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + vmathSoaV4MakeZAxis( &result->col2 ); + vmathSoaV4MakeWAxis( &result->col3 ); +} + +static inline void vmathSoaM4MakeRotationZYX( VmathSoaMatrix4 *result, const VmathSoaVector3 *radiansXYZ ) +{ + vec_float4 sX, cX, sY, cY, sZ, cZ, tmp0, tmp1; + sincosf4( radiansXYZ->x, &sX, &cX ); + sincosf4( radiansXYZ->y, &sY, &cY ); + sincosf4( radiansXYZ->z, &sZ, &cZ ); + tmp0 = vec_madd( cZ, sY, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + tmp1 = vec_madd( sZ, sY, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + vmathSoaV4MakeFromElems( &result->col0, vec_madd( cZ, cY, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( sZ, cY, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), negatef4( sY ), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + vmathSoaV4MakeFromElems( &result->col1, vec_sub( vec_madd( tmp0, sX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( sZ, cX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_add( vec_madd( tmp1, sX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( cZ, cX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( cY, sX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + vmathSoaV4MakeFromElems( &result->col2, vec_add( vec_madd( tmp0, cX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( sZ, sX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_sub( vec_madd( tmp1, cX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( cZ, sX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( cY, cX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + vmathSoaV4MakeWAxis( &result->col3 ); +} + +static inline void vmathSoaM4MakeRotationAxis( VmathSoaMatrix4 *result, vec_float4 radians, const VmathSoaVector3 *unitVec ) +{ + vec_float4 x, y, z, s, c, oneMinusC, xy, yz, zx; + sincosf4( radians, &s, &c ); + x = unitVec->x; + y = unitVec->y; + z = unitVec->z; + xy = vec_madd( x, y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + yz = vec_madd( y, z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + zx = vec_madd( z, x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + oneMinusC = vec_sub( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), c ); + vmathSoaV4MakeFromElems( &result->col0, vec_add( vec_madd( vec_madd( x, x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), oneMinusC, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), c ), vec_add( vec_madd( xy, oneMinusC, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( z, s, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_sub( vec_madd( zx, oneMinusC, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( y, s, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + vmathSoaV4MakeFromElems( &result->col1, vec_sub( vec_madd( xy, oneMinusC, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( z, s, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_add( vec_madd( vec_madd( y, y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), oneMinusC, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), c ), vec_add( vec_madd( yz, oneMinusC, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( x, s, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + vmathSoaV4MakeFromElems( &result->col2, vec_add( vec_madd( zx, oneMinusC, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( y, s, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_sub( vec_madd( yz, oneMinusC, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( x, s, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_add( vec_madd( vec_madd( z, z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), oneMinusC, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), c ), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + vmathSoaV4MakeWAxis( &result->col3 ); +} + +static inline void vmathSoaM4MakeRotationQ( VmathSoaMatrix4 *result, const VmathSoaQuat *unitQuat ) +{ + VmathSoaTransform3 tmpT3_0; + vmathSoaT3MakeRotationQ( &tmpT3_0, unitQuat ); + vmathSoaM4MakeFromT3( result, &tmpT3_0 ); +} + +static inline void vmathSoaM4MakeScale( VmathSoaMatrix4 *result, const VmathSoaVector3 *scaleVec ) +{ + vmathSoaV4MakeFromElems( &result->col0, scaleVec->x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + vmathSoaV4MakeFromElems( &result->col1, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), scaleVec->y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + vmathSoaV4MakeFromElems( &result->col2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), scaleVec->z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + vmathSoaV4MakeWAxis( &result->col3 ); +} + +static inline void vmathSoaM4AppendScale( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat, const VmathSoaVector3 *scaleVec ) +{ + vmathSoaV4ScalarMul( &result->col0, &mat->col0, vmathSoaV3GetX( scaleVec ) ); + vmathSoaV4ScalarMul( &result->col1, &mat->col1, vmathSoaV3GetY( scaleVec ) ); + vmathSoaV4ScalarMul( &result->col2, &mat->col2, vmathSoaV3GetZ( scaleVec ) ); + vmathSoaV4Copy( &result->col3, &mat->col3 ); +} + +static inline void vmathSoaM4PrependScale( VmathSoaMatrix4 *result, const VmathSoaVector3 *scaleVec, const VmathSoaMatrix4 *mat ) +{ + VmathSoaVector4 scale4; + vmathSoaV4MakeFromV3Scalar( &scale4, scaleVec, ((vec_float4){1.0f,1.0f,1.0f,1.0f}) ); + vmathSoaV4MulPerElem( &result->col0, &mat->col0, &scale4 ); + vmathSoaV4MulPerElem( &result->col1, &mat->col1, &scale4 ); + vmathSoaV4MulPerElem( &result->col2, &mat->col2, &scale4 ); + vmathSoaV4MulPerElem( &result->col3, &mat->col3, &scale4 ); +} + +static inline void vmathSoaM4MakeTranslation( VmathSoaMatrix4 *result, const VmathSoaVector3 *translateVec ) +{ + vmathSoaV4MakeXAxis( &result->col0 ); + vmathSoaV4MakeYAxis( &result->col1 ); + vmathSoaV4MakeZAxis( &result->col2 ); + vmathSoaV4MakeFromV3Scalar( &result->col3, translateVec, ((vec_float4){1.0f,1.0f,1.0f,1.0f}) ); +} + +static inline void vmathSoaM4MakeLookAt( VmathSoaMatrix4 *result, const VmathSoaPoint3 *eyePos, const VmathSoaPoint3 *lookAtPos, const VmathSoaVector3 *upVec ) +{ + VmathSoaMatrix4 m4EyeFrame; + VmathSoaVector3 v3X, v3Y, v3Z, tmpV3_0, tmpV3_1; + VmathSoaVector4 tmpV4_0, tmpV4_1, tmpV4_2, tmpV4_3; + vmathSoaV3Normalize( &v3Y, upVec ); + vmathSoaP3Sub( &tmpV3_0, eyePos, lookAtPos ); + vmathSoaV3Normalize( &v3Z, &tmpV3_0 ); + vmathSoaV3Cross( &tmpV3_1, &v3Y, &v3Z ); + vmathSoaV3Normalize( &v3X, &tmpV3_1 ); + vmathSoaV3Cross( &v3Y, &v3Z, &v3X ); + vmathSoaV4MakeFromV3( &tmpV4_0, &v3X ); + vmathSoaV4MakeFromV3( &tmpV4_1, &v3Y ); + vmathSoaV4MakeFromV3( &tmpV4_2, &v3Z ); + vmathSoaV4MakeFromP3( &tmpV4_3, eyePos ); + vmathSoaM4MakeFromCols( &m4EyeFrame, &tmpV4_0, &tmpV4_1, &tmpV4_2, &tmpV4_3 ); + vmathSoaM4OrthoInverse( result, &m4EyeFrame ); +} + +static inline void vmathSoaM4MakePerspective( VmathSoaMatrix4 *result, vec_float4 fovyRadians, vec_float4 aspect, vec_float4 zNear, vec_float4 zFar ) +{ + vec_float4 f, rangeInv; + f = tanf4( vec_sub( ((vec_float4){_VECTORMATH_PI_OVER_2,_VECTORMATH_PI_OVER_2,_VECTORMATH_PI_OVER_2,_VECTORMATH_PI_OVER_2}), vec_madd( ((vec_float4){0.5f,0.5f,0.5f,0.5f}), fovyRadians, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ) ); + rangeInv = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), vec_sub( zNear, zFar ) ); + vmathSoaV4MakeFromElems( &result->col0, divf4( f, aspect ), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + vmathSoaV4MakeFromElems( &result->col1, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), f, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + vmathSoaV4MakeFromElems( &result->col2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), vec_madd( vec_add( zNear, zFar ), rangeInv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), ((vec_float4){-1.0f,-1.0f,-1.0f,-1.0f}) ); + vmathSoaV4MakeFromElems( &result->col3, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), vec_madd( vec_madd( vec_madd( zNear, zFar, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), rangeInv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), ((vec_float4){2.0f,2.0f,2.0f,2.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); +} + +static inline void vmathSoaM4MakeFrustum( VmathSoaMatrix4 *result, vec_float4 left, vec_float4 right, vec_float4 bottom, vec_float4 top, vec_float4 zNear, vec_float4 zFar ) +{ + vec_float4 sum_rl, sum_tb, sum_nf, inv_rl, inv_tb, inv_nf, n2; + sum_rl = vec_add( right, left ); + sum_tb = vec_add( top, bottom ); + sum_nf = vec_add( zNear, zFar ); + inv_rl = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), vec_sub( right, left ) ); + inv_tb = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), vec_sub( top, bottom ) ); + inv_nf = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), vec_sub( zNear, zFar ) ); + n2 = vec_add( zNear, zNear ); + vmathSoaV4MakeFromElems( &result->col0, vec_madd( n2, inv_rl, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + vmathSoaV4MakeFromElems( &result->col1, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), vec_madd( n2, inv_tb, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + vmathSoaV4MakeFromElems( &result->col2, vec_madd( sum_rl, inv_rl, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( sum_tb, inv_tb, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( sum_nf, inv_nf, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), ((vec_float4){-1.0f,-1.0f,-1.0f,-1.0f}) ); + vmathSoaV4MakeFromElems( &result->col3, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), vec_madd( vec_madd( n2, inv_nf, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), zFar, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); +} + +static inline void vmathSoaM4MakeOrthographic( VmathSoaMatrix4 *result, vec_float4 left, vec_float4 right, vec_float4 bottom, vec_float4 top, vec_float4 zNear, vec_float4 zFar ) +{ + vec_float4 sum_rl, sum_tb, sum_nf, inv_rl, inv_tb, inv_nf; + sum_rl = vec_add( right, left ); + sum_tb = vec_add( top, bottom ); + sum_nf = vec_add( zNear, zFar ); + inv_rl = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), vec_sub( right, left ) ); + inv_tb = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), vec_sub( top, bottom ) ); + inv_nf = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), vec_sub( zNear, zFar ) ); + vmathSoaV4MakeFromElems( &result->col0, vec_add( inv_rl, inv_rl ), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + vmathSoaV4MakeFromElems( &result->col1, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), vec_add( inv_tb, inv_tb ), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + vmathSoaV4MakeFromElems( &result->col2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), vec_add( inv_nf, inv_nf ), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + vmathSoaV4MakeFromElems( &result->col3, vec_madd( negatef4( sum_rl ), inv_rl, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( negatef4( sum_tb ), inv_tb, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( sum_nf, inv_nf, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), ((vec_float4){1.0f,1.0f,1.0f,1.0f}) ); +} + +static inline void vmathSoaM4Select( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat0, const VmathSoaMatrix4 *mat1, vec_uint4 select1 ) +{ + vmathSoaV4Select( &result->col0, &mat0->col0, &mat1->col0, select1 ); + vmathSoaV4Select( &result->col1, &mat0->col1, &mat1->col1, select1 ); + vmathSoaV4Select( &result->col2, &mat0->col2, &mat1->col2, select1 ); + vmathSoaV4Select( &result->col3, &mat0->col3, &mat1->col3, select1 ); +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathSoaM4Print( const VmathSoaMatrix4 *mat ) +{ + VmathMatrix4 mat0, mat1, mat2, mat3; + vmathSoaM4Get4Aos( mat, &mat0, &mat1, &mat2, &mat3 ); + printf("slot 0:\n"); + vmathM4Print( &mat0 ); + printf("slot 1:\n"); + vmathM4Print( &mat1 ); + printf("slot 2:\n"); + vmathM4Print( &mat2 ); + printf("slot 3:\n"); + vmathM4Print( &mat3 ); +} + +static inline void vmathSoaM4Prints( const VmathSoaMatrix4 *mat, const char *name ) +{ + printf("%s:\n", name); + vmathSoaM4Print( mat ); +} + +#endif + +static inline void vmathSoaT3Copy( VmathSoaTransform3 *result, const VmathSoaTransform3 *tfrm ) +{ + vmathSoaV3Copy( &result->col0, &tfrm->col0 ); + vmathSoaV3Copy( &result->col1, &tfrm->col1 ); + vmathSoaV3Copy( &result->col2, &tfrm->col2 ); + vmathSoaV3Copy( &result->col3, &tfrm->col3 ); +} + +static inline void vmathSoaT3MakeFromScalar( VmathSoaTransform3 *result, vec_float4 scalar ) +{ + vmathSoaV3MakeFromScalar( &result->col0, scalar ); + vmathSoaV3MakeFromScalar( &result->col1, scalar ); + vmathSoaV3MakeFromScalar( &result->col2, scalar ); + vmathSoaV3MakeFromScalar( &result->col3, scalar ); +} + +static inline void vmathSoaT3MakeFromCols( VmathSoaTransform3 *result, const VmathSoaVector3 *_col0, const VmathSoaVector3 *_col1, const VmathSoaVector3 *_col2, const VmathSoaVector3 *_col3 ) +{ + vmathSoaV3Copy( &result->col0, _col0 ); + vmathSoaV3Copy( &result->col1, _col1 ); + vmathSoaV3Copy( &result->col2, _col2 ); + vmathSoaV3Copy( &result->col3, _col3 ); +} + +static inline void vmathSoaT3MakeFromM3V3( VmathSoaTransform3 *result, const VmathSoaMatrix3 *tfrm, const VmathSoaVector3 *translateVec ) +{ + vmathSoaT3SetUpper3x3( result, tfrm ); + vmathSoaT3SetTranslation( result, translateVec ); +} + +static inline void vmathSoaT3MakeFromQV3( VmathSoaTransform3 *result, const VmathSoaQuat *unitQuat, const VmathSoaVector3 *translateVec ) +{ + VmathSoaMatrix3 tmpM3_0; + vmathSoaM3MakeFromQ( &tmpM3_0, unitQuat ); + vmathSoaT3SetUpper3x3( result, &tmpM3_0 ); + vmathSoaT3SetTranslation( result, translateVec ); +} + +static inline void vmathSoaT3MakeFromAos( VmathSoaTransform3 *result, const VmathTransform3 *tfrm ) +{ + vmathSoaV3MakeFromAos( &result->col0, &tfrm->col0 ); + vmathSoaV3MakeFromAos( &result->col1, &tfrm->col1 ); + vmathSoaV3MakeFromAos( &result->col2, &tfrm->col2 ); + vmathSoaV3MakeFromAos( &result->col3, &tfrm->col3 ); +} + +static inline void vmathSoaT3MakeFrom4Aos( VmathSoaTransform3 *result, const VmathTransform3 *tfrm0, const VmathTransform3 *tfrm1, const VmathTransform3 *tfrm2, const VmathTransform3 *tfrm3 ) +{ + vmathSoaV3MakeFrom4Aos( &result->col0, &tfrm0->col0, &tfrm1->col0, &tfrm2->col0, &tfrm3->col0 ); + vmathSoaV3MakeFrom4Aos( &result->col1, &tfrm0->col1, &tfrm1->col1, &tfrm2->col1, &tfrm3->col1 ); + vmathSoaV3MakeFrom4Aos( &result->col2, &tfrm0->col2, &tfrm1->col2, &tfrm2->col2, &tfrm3->col2 ); + vmathSoaV3MakeFrom4Aos( &result->col3, &tfrm0->col3, &tfrm1->col3, &tfrm2->col3, &tfrm3->col3 ); +} + +static inline void vmathSoaT3Get4Aos( const VmathSoaTransform3 *tfrm, VmathTransform3 *result0, VmathTransform3 *result1, VmathTransform3 *result2, VmathTransform3 *result3 ) +{ + vmathSoaV3Get4Aos( &tfrm->col0, &result0->col0, &result1->col0, &result2->col0, &result3->col0 ); + vmathSoaV3Get4Aos( &tfrm->col1, &result0->col1, &result1->col1, &result2->col1, &result3->col1 ); + vmathSoaV3Get4Aos( &tfrm->col2, &result0->col2, &result1->col2, &result2->col2, &result3->col2 ); + vmathSoaV3Get4Aos( &tfrm->col3, &result0->col3, &result1->col3, &result2->col3, &result3->col3 ); +} + +static inline void vmathSoaT3SetCol0( VmathSoaTransform3 *result, const VmathSoaVector3 *_col0 ) +{ + vmathSoaV3Copy( &result->col0, _col0 ); +} + +static inline void vmathSoaT3SetCol1( VmathSoaTransform3 *result, const VmathSoaVector3 *_col1 ) +{ + vmathSoaV3Copy( &result->col1, _col1 ); +} + +static inline void vmathSoaT3SetCol2( VmathSoaTransform3 *result, const VmathSoaVector3 *_col2 ) +{ + vmathSoaV3Copy( &result->col2, _col2 ); +} + +static inline void vmathSoaT3SetCol3( VmathSoaTransform3 *result, const VmathSoaVector3 *_col3 ) +{ + vmathSoaV3Copy( &result->col3, _col3 ); +} + +static inline void vmathSoaT3SetCol( VmathSoaTransform3 *result, int col, const VmathSoaVector3 *vec ) +{ + vmathSoaV3Copy( (&result->col0 + col), vec ); +} + +static inline void vmathSoaT3SetRow( VmathSoaTransform3 *result, int row, const VmathSoaVector4 *vec ) +{ + vmathSoaV3SetElem( &result->col0, row, vmathSoaV4GetElem( vec, 0 ) ); + vmathSoaV3SetElem( &result->col1, row, vmathSoaV4GetElem( vec, 1 ) ); + vmathSoaV3SetElem( &result->col2, row, vmathSoaV4GetElem( vec, 2 ) ); + vmathSoaV3SetElem( &result->col3, row, vmathSoaV4GetElem( vec, 3 ) ); +} + +static inline void vmathSoaT3SetElem( VmathSoaTransform3 *result, int col, int row, vec_float4 val ) +{ + VmathSoaVector3 tmpV3_0; + vmathSoaT3GetCol( &tmpV3_0, result, col ); + vmathSoaV3SetElem( &tmpV3_0, row, val ); + vmathSoaT3SetCol( result, col, &tmpV3_0 ); +} + +static inline vec_float4 vmathSoaT3GetElem( const VmathSoaTransform3 *tfrm, int col, int row ) +{ + VmathSoaVector3 tmpV3_0; + vmathSoaT3GetCol( &tmpV3_0, tfrm, col ); + return vmathSoaV3GetElem( &tmpV3_0, row ); +} + +static inline void vmathSoaT3GetCol0( VmathSoaVector3 *result, const VmathSoaTransform3 *tfrm ) +{ + vmathSoaV3Copy( result, &tfrm->col0 ); +} + +static inline void vmathSoaT3GetCol1( VmathSoaVector3 *result, const VmathSoaTransform3 *tfrm ) +{ + vmathSoaV3Copy( result, &tfrm->col1 ); +} + +static inline void vmathSoaT3GetCol2( VmathSoaVector3 *result, const VmathSoaTransform3 *tfrm ) +{ + vmathSoaV3Copy( result, &tfrm->col2 ); +} + +static inline void vmathSoaT3GetCol3( VmathSoaVector3 *result, const VmathSoaTransform3 *tfrm ) +{ + vmathSoaV3Copy( result, &tfrm->col3 ); +} + +static inline void vmathSoaT3GetCol( VmathSoaVector3 *result, const VmathSoaTransform3 *tfrm, int col ) +{ + vmathSoaV3Copy( result, (&tfrm->col0 + col) ); +} + +static inline void vmathSoaT3GetRow( VmathSoaVector4 *result, const VmathSoaTransform3 *tfrm, int row ) +{ + vmathSoaV4MakeFromElems( result, vmathSoaV3GetElem( &tfrm->col0, row ), vmathSoaV3GetElem( &tfrm->col1, row ), vmathSoaV3GetElem( &tfrm->col2, row ), vmathSoaV3GetElem( &tfrm->col3, row ) ); +} + +static inline void vmathSoaT3Inverse( VmathSoaTransform3 *result, const VmathSoaTransform3 *tfrm ) +{ + VmathSoaVector3 tmp0, tmp1, tmp2, inv0, inv1, inv2, tmpV3_0, tmpV3_1, tmpV3_2, tmpV3_3, tmpV3_4, tmpV3_5; + vec_float4 detinv; + vmathSoaV3Cross( &tmp0, &tfrm->col1, &tfrm->col2 ); + vmathSoaV3Cross( &tmp1, &tfrm->col2, &tfrm->col0 ); + vmathSoaV3Cross( &tmp2, &tfrm->col0, &tfrm->col1 ); + detinv = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), vmathSoaV3Dot( &tfrm->col2, &tmp2 ) ); + vmathSoaV3MakeFromElems( &inv0, vec_madd( tmp0.x, detinv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( tmp1.x, detinv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( tmp2.x, detinv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + vmathSoaV3MakeFromElems( &inv1, vec_madd( tmp0.y, detinv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( tmp1.y, detinv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( tmp2.y, detinv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + vmathSoaV3MakeFromElems( &inv2, vec_madd( tmp0.z, detinv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( tmp1.z, detinv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( tmp2.z, detinv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + vmathSoaV3Copy( &result->col0, &inv0 ); + vmathSoaV3Copy( &result->col1, &inv1 ); + vmathSoaV3Copy( &result->col2, &inv2 ); + vmathSoaV3ScalarMul( &tmpV3_0, &inv0, tfrm->col3.x ); + vmathSoaV3ScalarMul( &tmpV3_1, &inv1, tfrm->col3.y ); + vmathSoaV3ScalarMul( &tmpV3_2, &inv2, tfrm->col3.z ); + vmathSoaV3Add( &tmpV3_3, &tmpV3_1, &tmpV3_2 ); + vmathSoaV3Add( &tmpV3_4, &tmpV3_0, &tmpV3_3 ); + vmathSoaV3Neg( &tmpV3_5, &tmpV3_4 ); + vmathSoaV3Copy( &result->col3, &tmpV3_5 ); +} + +static inline void vmathSoaT3OrthoInverse( VmathSoaTransform3 *result, const VmathSoaTransform3 *tfrm ) +{ + VmathSoaVector3 inv0, inv1, inv2, tmpV3_0, tmpV3_1, tmpV3_2, tmpV3_3, tmpV3_4, tmpV3_5; + vmathSoaV3MakeFromElems( &inv0, tfrm->col0.x, tfrm->col1.x, tfrm->col2.x ); + vmathSoaV3MakeFromElems( &inv1, tfrm->col0.y, tfrm->col1.y, tfrm->col2.y ); + vmathSoaV3MakeFromElems( &inv2, tfrm->col0.z, tfrm->col1.z, tfrm->col2.z ); + vmathSoaV3Copy( &result->col0, &inv0 ); + vmathSoaV3Copy( &result->col1, &inv1 ); + vmathSoaV3Copy( &result->col2, &inv2 ); + vmathSoaV3ScalarMul( &tmpV3_0, &inv0, tfrm->col3.x ); + vmathSoaV3ScalarMul( &tmpV3_1, &inv1, tfrm->col3.y ); + vmathSoaV3ScalarMul( &tmpV3_2, &inv2, tfrm->col3.z ); + vmathSoaV3Add( &tmpV3_3, &tmpV3_1, &tmpV3_2 ); + vmathSoaV3Add( &tmpV3_4, &tmpV3_0, &tmpV3_3 ); + vmathSoaV3Neg( &tmpV3_5, &tmpV3_4 ); + vmathSoaV3Copy( &result->col3, &tmpV3_5 ); +} + +static inline void vmathSoaT3AbsPerElem( VmathSoaTransform3 *result, const VmathSoaTransform3 *tfrm ) +{ + vmathSoaV3AbsPerElem( &result->col0, &tfrm->col0 ); + vmathSoaV3AbsPerElem( &result->col1, &tfrm->col1 ); + vmathSoaV3AbsPerElem( &result->col2, &tfrm->col2 ); + vmathSoaV3AbsPerElem( &result->col3, &tfrm->col3 ); +} + +static inline void vmathSoaT3MulV3( VmathSoaVector3 *result, const VmathSoaTransform3 *tfrm, const VmathSoaVector3 *vec ) +{ + vec_float4 tmpX, tmpY, tmpZ; + tmpX = vec_add( vec_add( vec_madd( tfrm->col0.x, vec->x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( tfrm->col1.x, vec->y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( tfrm->col2.x, vec->z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + tmpY = vec_add( vec_add( vec_madd( tfrm->col0.y, vec->x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( tfrm->col1.y, vec->y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( tfrm->col2.y, vec->z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + tmpZ = vec_add( vec_add( vec_madd( tfrm->col0.z, vec->x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( tfrm->col1.z, vec->y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( tfrm->col2.z, vec->z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + vmathSoaV3MakeFromElems( result, tmpX, tmpY, tmpZ ); +} + +static inline void vmathSoaT3MulP3( VmathSoaPoint3 *result, const VmathSoaTransform3 *tfrm, const VmathSoaPoint3 *pnt ) +{ + vec_float4 tmpX, tmpY, tmpZ; + tmpX = vec_add( vec_add( vec_add( vec_madd( tfrm->col0.x, pnt->x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( tfrm->col1.x, pnt->y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( tfrm->col2.x, pnt->z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), tfrm->col3.x ); + tmpY = vec_add( vec_add( vec_add( vec_madd( tfrm->col0.y, pnt->x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( tfrm->col1.y, pnt->y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( tfrm->col2.y, pnt->z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), tfrm->col3.y ); + tmpZ = vec_add( vec_add( vec_add( vec_madd( tfrm->col0.z, pnt->x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( tfrm->col1.z, pnt->y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( tfrm->col2.z, pnt->z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), tfrm->col3.z ); + vmathSoaP3MakeFromElems( result, tmpX, tmpY, tmpZ ); +} + +static inline void vmathSoaT3Mul( VmathSoaTransform3 *result, const VmathSoaTransform3 *tfrm0, const VmathSoaTransform3 *tfrm1 ) +{ + VmathSoaTransform3 tmpResult; + VmathSoaPoint3 tmpP3_0, tmpP3_1; + vmathSoaT3MulV3( &tmpResult.col0, tfrm0, &tfrm1->col0 ); + vmathSoaT3MulV3( &tmpResult.col1, tfrm0, &tfrm1->col1 ); + vmathSoaT3MulV3( &tmpResult.col2, tfrm0, &tfrm1->col2 ); + vmathSoaP3MakeFromV3( &tmpP3_0, &tfrm1->col3 ); + vmathSoaT3MulP3( &tmpP3_1, tfrm0, &tmpP3_0 ); + vmathSoaV3MakeFromP3( &tmpResult.col3, &tmpP3_1 ); + vmathSoaT3Copy( result, &tmpResult ); +} + +static inline void vmathSoaT3MulPerElem( VmathSoaTransform3 *result, const VmathSoaTransform3 *tfrm0, const VmathSoaTransform3 *tfrm1 ) +{ + vmathSoaV3MulPerElem( &result->col0, &tfrm0->col0, &tfrm1->col0 ); + vmathSoaV3MulPerElem( &result->col1, &tfrm0->col1, &tfrm1->col1 ); + vmathSoaV3MulPerElem( &result->col2, &tfrm0->col2, &tfrm1->col2 ); + vmathSoaV3MulPerElem( &result->col3, &tfrm0->col3, &tfrm1->col3 ); +} + +static inline void vmathSoaT3MakeIdentity( VmathSoaTransform3 *result ) +{ + vmathSoaV3MakeXAxis( &result->col0 ); + vmathSoaV3MakeYAxis( &result->col1 ); + vmathSoaV3MakeZAxis( &result->col2 ); + vmathSoaV3MakeFromScalar( &result->col3, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); +} + +static inline void vmathSoaT3SetUpper3x3( VmathSoaTransform3 *result, const VmathSoaMatrix3 *tfrm ) +{ + vmathSoaV3Copy( &result->col0, &tfrm->col0 ); + vmathSoaV3Copy( &result->col1, &tfrm->col1 ); + vmathSoaV3Copy( &result->col2, &tfrm->col2 ); +} + +static inline void vmathSoaT3GetUpper3x3( VmathSoaMatrix3 *result, const VmathSoaTransform3 *tfrm ) +{ + vmathSoaM3MakeFromCols( result, &tfrm->col0, &tfrm->col1, &tfrm->col2 ); +} + +static inline void vmathSoaT3SetTranslation( VmathSoaTransform3 *result, const VmathSoaVector3 *translateVec ) +{ + vmathSoaV3Copy( &result->col3, translateVec ); +} + +static inline void vmathSoaT3GetTranslation( VmathSoaVector3 *result, const VmathSoaTransform3 *tfrm ) +{ + vmathSoaV3Copy( result, &tfrm->col3 ); +} + +static inline void vmathSoaT3MakeRotationX( VmathSoaTransform3 *result, vec_float4 radians ) +{ + vec_float4 s, c; + sincosf4( radians, &s, &c ); + vmathSoaV3MakeXAxis( &result->col0 ); + vmathSoaV3MakeFromElems( &result->col1, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), c, s ); + vmathSoaV3MakeFromElems( &result->col2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), negatef4( s ), c ); + vmathSoaV3MakeFromScalar( &result->col3, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); +} + +static inline void vmathSoaT3MakeRotationY( VmathSoaTransform3 *result, vec_float4 radians ) +{ + vec_float4 s, c; + sincosf4( radians, &s, &c ); + vmathSoaV3MakeFromElems( &result->col0, c, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), negatef4( s ) ); + vmathSoaV3MakeYAxis( &result->col1 ); + vmathSoaV3MakeFromElems( &result->col2, s, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), c ); + vmathSoaV3MakeFromScalar( &result->col3, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); +} + +static inline void vmathSoaT3MakeRotationZ( VmathSoaTransform3 *result, vec_float4 radians ) +{ + vec_float4 s, c; + sincosf4( radians, &s, &c ); + vmathSoaV3MakeFromElems( &result->col0, c, s, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + vmathSoaV3MakeFromElems( &result->col1, negatef4( s ), c, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + vmathSoaV3MakeZAxis( &result->col2 ); + vmathSoaV3MakeFromScalar( &result->col3, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); +} + +static inline void vmathSoaT3MakeRotationZYX( VmathSoaTransform3 *result, const VmathSoaVector3 *radiansXYZ ) +{ + vec_float4 sX, cX, sY, cY, sZ, cZ, tmp0, tmp1; + sincosf4( radiansXYZ->x, &sX, &cX ); + sincosf4( radiansXYZ->y, &sY, &cY ); + sincosf4( radiansXYZ->z, &sZ, &cZ ); + tmp0 = vec_madd( cZ, sY, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + tmp1 = vec_madd( sZ, sY, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + vmathSoaV3MakeFromElems( &result->col0, vec_madd( cZ, cY, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( sZ, cY, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), negatef4( sY ) ); + vmathSoaV3MakeFromElems( &result->col1, vec_sub( vec_madd( tmp0, sX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( sZ, cX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_add( vec_madd( tmp1, sX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( cZ, cX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( cY, sX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + vmathSoaV3MakeFromElems( &result->col2, vec_add( vec_madd( tmp0, cX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( sZ, sX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_sub( vec_madd( tmp1, cX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( cZ, sX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( cY, cX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + vmathSoaV3MakeFromScalar( &result->col3, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); +} + +static inline void vmathSoaT3MakeRotationAxis( VmathSoaTransform3 *result, vec_float4 radians, const VmathSoaVector3 *unitVec ) +{ + VmathSoaMatrix3 tmpM3_0; + VmathSoaVector3 tmpV3_0; + vmathSoaM3MakeRotationAxis( &tmpM3_0, radians, unitVec ); + vmathSoaV3MakeFromScalar( &tmpV3_0, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + vmathSoaT3MakeFromM3V3( result, &tmpM3_0, &tmpV3_0 ); +} + +static inline void vmathSoaT3MakeRotationQ( VmathSoaTransform3 *result, const VmathSoaQuat *unitQuat ) +{ + VmathSoaMatrix3 tmpM3_0; + VmathSoaVector3 tmpV3_0; + vmathSoaM3MakeFromQ( &tmpM3_0, unitQuat ); + vmathSoaV3MakeFromScalar( &tmpV3_0, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + vmathSoaT3MakeFromM3V3( result, &tmpM3_0, &tmpV3_0 ); +} + +static inline void vmathSoaT3MakeScale( VmathSoaTransform3 *result, const VmathSoaVector3 *scaleVec ) +{ + vmathSoaV3MakeFromElems( &result->col0, scaleVec->x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + vmathSoaV3MakeFromElems( &result->col1, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), scaleVec->y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + vmathSoaV3MakeFromElems( &result->col2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), scaleVec->z ); + vmathSoaV3MakeFromScalar( &result->col3, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); +} + +static inline void vmathSoaT3AppendScale( VmathSoaTransform3 *result, const VmathSoaTransform3 *tfrm, const VmathSoaVector3 *scaleVec ) +{ + vmathSoaV3ScalarMul( &result->col0, &tfrm->col0, vmathSoaV3GetX( scaleVec ) ); + vmathSoaV3ScalarMul( &result->col1, &tfrm->col1, vmathSoaV3GetY( scaleVec ) ); + vmathSoaV3ScalarMul( &result->col2, &tfrm->col2, vmathSoaV3GetZ( scaleVec ) ); + vmathSoaV3Copy( &result->col3, &tfrm->col3 ); +} + +static inline void vmathSoaT3PrependScale( VmathSoaTransform3 *result, const VmathSoaVector3 *scaleVec, const VmathSoaTransform3 *tfrm ) +{ + vmathSoaV3MulPerElem( &result->col0, &tfrm->col0, scaleVec ); + vmathSoaV3MulPerElem( &result->col1, &tfrm->col1, scaleVec ); + vmathSoaV3MulPerElem( &result->col2, &tfrm->col2, scaleVec ); + vmathSoaV3MulPerElem( &result->col3, &tfrm->col3, scaleVec ); +} + +static inline void vmathSoaT3MakeTranslation( VmathSoaTransform3 *result, const VmathSoaVector3 *translateVec ) +{ + vmathSoaV3MakeXAxis( &result->col0 ); + vmathSoaV3MakeYAxis( &result->col1 ); + vmathSoaV3MakeZAxis( &result->col2 ); + vmathSoaV3Copy( &result->col3, translateVec ); +} + +static inline void vmathSoaT3Select( VmathSoaTransform3 *result, const VmathSoaTransform3 *tfrm0, const VmathSoaTransform3 *tfrm1, vec_uint4 select1 ) +{ + vmathSoaV3Select( &result->col0, &tfrm0->col0, &tfrm1->col0, select1 ); + vmathSoaV3Select( &result->col1, &tfrm0->col1, &tfrm1->col1, select1 ); + vmathSoaV3Select( &result->col2, &tfrm0->col2, &tfrm1->col2, select1 ); + vmathSoaV3Select( &result->col3, &tfrm0->col3, &tfrm1->col3, select1 ); +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathSoaT3Print( const VmathSoaTransform3 *tfrm ) +{ + VmathTransform3 mat0, mat1, mat2, mat3; + vmathSoaT3Get4Aos( tfrm, &mat0, &mat1, &mat2, &mat3 ); + printf("slot 0:\n"); + vmathT3Print( &mat0 ); + printf("slot 1:\n"); + vmathT3Print( &mat1 ); + printf("slot 2:\n"); + vmathT3Print( &mat2 ); + printf("slot 3:\n"); + vmathT3Print( &mat3 ); +} + +static inline void vmathSoaT3Prints( const VmathSoaTransform3 *tfrm, const char *name ) +{ + printf("%s:\n", name); + vmathSoaT3Print( tfrm ); +} + +#endif + +static inline void vmathSoaQMakeFromM3( VmathSoaQuat *result, const VmathSoaMatrix3 *tfrm ) +{ + vec_float4 trace, radicand, scale, xx, yx, zx, xy, yy, zy, xz, yz, zz, tmpx, tmpy, tmpz, tmpw, qx, qy, qz, qw; + vec_uint4 negTrace, ZgtX, ZgtY, YgtX; + vec_uint4 largestXorY, largestYorZ, largestZorX; + + xx = tfrm->col0.x; + yx = tfrm->col0.y; + zx = tfrm->col0.z; + xy = tfrm->col1.x; + yy = tfrm->col1.y; + zy = tfrm->col1.z; + xz = tfrm->col2.x; + yz = tfrm->col2.y; + zz = tfrm->col2.z; + + trace = vec_add( vec_add( xx, yy ), zz ); + + negTrace = (vec_uint4)vec_cmpgt( ((vec_float4){0.0f,0.0f,0.0f,0.0f}), trace ); + ZgtX = (vec_uint4)vec_cmpgt( zz, xx ); + ZgtY = (vec_uint4)vec_cmpgt( zz, yy ); + YgtX = (vec_uint4)vec_cmpgt( yy, xx ); + largestXorY = vec_andc( negTrace, vec_and( ZgtX, ZgtY ) ); + largestYorZ = vec_and( negTrace, vec_or( YgtX, ZgtX ) ); + largestZorX = vec_andc( negTrace, vec_andc( YgtX, ZgtY ) ); + + zz = vec_sel( zz, negatef4(zz), largestXorY ); + xy = vec_sel( xy, negatef4(xy), largestXorY ); + xx = vec_sel( xx, negatef4(xx), largestYorZ ); + yz = vec_sel( yz, negatef4(yz), largestYorZ ); + yy = vec_sel( yy, negatef4(yy), largestZorX ); + zx = vec_sel( zx, negatef4(zx), largestZorX ); + + radicand = vec_add( vec_add( vec_add( xx, yy ), zz ), ((vec_float4){1.0f,1.0f,1.0f,1.0f}) ); + scale = vec_madd( ((vec_float4){0.5f,0.5f,0.5f,0.5f}), divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), sqrtf4( radicand ) ), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + + tmpx = vec_madd( vec_sub( zy, yz ), scale, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + tmpy = vec_madd( vec_sub( xz, zx ), scale, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + tmpz = vec_madd( vec_sub( yx, xy ), scale, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + tmpw = vec_madd( radicand, scale, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + qx = tmpx; + qy = tmpy; + qz = tmpz; + qw = tmpw; + + qx = vec_sel( qx, tmpw, largestXorY ); + qy = vec_sel( qy, tmpz, largestXorY ); + qz = vec_sel( qz, tmpy, largestXorY ); + qw = vec_sel( qw, tmpx, largestXorY ); + tmpx = qx; + tmpz = qz; + qx = vec_sel( qx, qy, largestYorZ ); + qy = vec_sel( qy, tmpx, largestYorZ ); + qz = vec_sel( qz, qw, largestYorZ ); + qw = vec_sel( qw, tmpz, largestYorZ ); + + result->x = qx; + result->y = qy; + result->z = qz; + result->w = qw; +} + +static inline void vmathSoaV3Outer( VmathSoaMatrix3 *result, const VmathSoaVector3 *tfrm0, const VmathSoaVector3 *tfrm1 ) +{ + vmathSoaV3ScalarMul( &result->col0, tfrm0, vmathSoaV3GetX( tfrm1 ) ); + vmathSoaV3ScalarMul( &result->col1, tfrm0, vmathSoaV3GetY( tfrm1 ) ); + vmathSoaV3ScalarMul( &result->col2, tfrm0, vmathSoaV3GetZ( tfrm1 ) ); +} + +static inline void vmathSoaV4Outer( VmathSoaMatrix4 *result, const VmathSoaVector4 *tfrm0, const VmathSoaVector4 *tfrm1 ) +{ + vmathSoaV4ScalarMul( &result->col0, tfrm0, vmathSoaV4GetX( tfrm1 ) ); + vmathSoaV4ScalarMul( &result->col1, tfrm0, vmathSoaV4GetY( tfrm1 ) ); + vmathSoaV4ScalarMul( &result->col2, tfrm0, vmathSoaV4GetZ( tfrm1 ) ); + vmathSoaV4ScalarMul( &result->col3, tfrm0, vmathSoaV4GetW( tfrm1 ) ); +} + +static inline void vmathSoaV3RowMul( VmathSoaVector3 *result, const VmathSoaVector3 *vec, const VmathSoaMatrix3 *mat ) +{ + vec_float4 tmpX, tmpY, tmpZ; + tmpX = vec_add( vec_add( vec_madd( vec->x, mat->col0.x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( vec->y, mat->col0.y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( vec->z, mat->col0.z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + tmpY = vec_add( vec_add( vec_madd( vec->x, mat->col1.x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( vec->y, mat->col1.y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( vec->z, mat->col1.z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + tmpZ = vec_add( vec_add( vec_madd( vec->x, mat->col2.x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( vec->y, mat->col2.y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( vec->z, mat->col2.z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + vmathSoaV3MakeFromElems( result, tmpX, tmpY, tmpZ ); +} + +static inline void vmathSoaV3CrossMatrix( VmathSoaMatrix3 *result, const VmathSoaVector3 *vec ) +{ + vmathSoaV3MakeFromElems( &result->col0, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), vec->z, negatef4( vec->y ) ); + vmathSoaV3MakeFromElems( &result->col1, negatef4( vec->z ), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), vec->x ); + vmathSoaV3MakeFromElems( &result->col2, vec->y, negatef4( vec->x ), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); +} + +static inline void vmathSoaV3CrossMatrixMul( VmathSoaMatrix3 *result, const VmathSoaVector3 *vec, const VmathSoaMatrix3 *mat ) +{ + VmathSoaVector3 tmpV3_0, tmpV3_1, tmpV3_2; + vmathSoaV3Cross( &tmpV3_0, vec, &mat->col0 ); + vmathSoaV3Cross( &tmpV3_1, vec, &mat->col1 ); + vmathSoaV3Cross( &tmpV3_2, vec, &mat->col2 ); + vmathSoaM3MakeFromCols( result, &tmpV3_0, &tmpV3_1, &tmpV3_2 ); +} + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/ppu/c/mat_soa_v.h b/Extras/vectormathlibrary/include/vectormath/ppu/c/mat_soa_v.h new file mode 100644 index 000000000..c8401e3d0 --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/ppu/c/mat_soa_v.h @@ -0,0 +1,1063 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_MAT_SOA_V_C_H +#define _VECTORMATH_MAT_SOA_V_C_H + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/*----------------------------------------------------------------------------- + * Constants + */ +#define _VECTORMATH_PI_OVER_2 1.570796327f + +/*----------------------------------------------------------------------------- + * Definitions + */ +static inline VmathSoaMatrix3 vmathSoaM3MakeFromScalar_V( vec_float4 scalar ) +{ + VmathSoaMatrix3 result; + vmathSoaM3MakeFromScalar(&result, scalar); + return result; +} + +static inline VmathSoaMatrix3 vmathSoaM3MakeFromQ_V( VmathSoaQuat unitQuat ) +{ + VmathSoaMatrix3 result; + vmathSoaM3MakeFromQ(&result, &unitQuat); + return result; +} + +static inline VmathSoaMatrix3 vmathSoaM3MakeFromCols_V( VmathSoaVector3 _col0, VmathSoaVector3 _col1, VmathSoaVector3 _col2 ) +{ + VmathSoaMatrix3 result; + vmathSoaM3MakeFromCols(&result, &_col0, &_col1, &_col2); + return result; +} + +static inline VmathSoaMatrix3 vmathSoaM3MakeFromAos_V( VmathMatrix3 mat ) +{ + VmathSoaMatrix3 result; + vmathSoaM3MakeFromAos(&result, &mat); + return result; +} + +static inline VmathSoaMatrix3 vmathSoaM3MakeFrom4Aos_V( VmathMatrix3 mat0, VmathMatrix3 mat1, VmathMatrix3 mat2, VmathMatrix3 mat3 ) +{ + VmathSoaMatrix3 result; + vmathSoaM3MakeFrom4Aos(&result, &mat0, &mat1, &mat2, &mat3); + return result; +} + +static inline void vmathSoaM3Get4Aos_V( VmathSoaMatrix3 mat, VmathMatrix3 *result0, VmathMatrix3 *result1, VmathMatrix3 *result2, VmathMatrix3 *result3 ) +{ + vmathSoaM3Get4Aos(&mat, result0, result1, result2, result3); +} + +static inline void vmathSoaM3SetCol0_V( VmathSoaMatrix3 *result, VmathSoaVector3 _col0 ) +{ + vmathSoaM3SetCol0(result, &_col0); +} + +static inline void vmathSoaM3SetCol1_V( VmathSoaMatrix3 *result, VmathSoaVector3 _col1 ) +{ + vmathSoaM3SetCol1(result, &_col1); +} + +static inline void vmathSoaM3SetCol2_V( VmathSoaMatrix3 *result, VmathSoaVector3 _col2 ) +{ + vmathSoaM3SetCol2(result, &_col2); +} + +static inline void vmathSoaM3SetCol_V( VmathSoaMatrix3 *result, int col, VmathSoaVector3 vec ) +{ + vmathSoaM3SetCol(result, col, &vec); +} + +static inline void vmathSoaM3SetRow_V( VmathSoaMatrix3 *result, int row, VmathSoaVector3 vec ) +{ + vmathSoaM3SetRow(result, row, &vec); +} + +static inline void vmathSoaM3SetElem_V( VmathSoaMatrix3 *result, int col, int row, vec_float4 val ) +{ + vmathSoaM3SetElem(result, col, row, val); +} + +static inline vec_float4 vmathSoaM3GetElem_V( VmathSoaMatrix3 mat, int col, int row ) +{ + return vmathSoaM3GetElem(&mat, col, row); +} + +static inline VmathSoaVector3 vmathSoaM3GetCol0_V( VmathSoaMatrix3 mat ) +{ + VmathSoaVector3 result; + vmathSoaM3GetCol0(&result, &mat); + return result; +} + +static inline VmathSoaVector3 vmathSoaM3GetCol1_V( VmathSoaMatrix3 mat ) +{ + VmathSoaVector3 result; + vmathSoaM3GetCol1(&result, &mat); + return result; +} + +static inline VmathSoaVector3 vmathSoaM3GetCol2_V( VmathSoaMatrix3 mat ) +{ + VmathSoaVector3 result; + vmathSoaM3GetCol2(&result, &mat); + return result; +} + +static inline VmathSoaVector3 vmathSoaM3GetCol_V( VmathSoaMatrix3 mat, int col ) +{ + VmathSoaVector3 result; + vmathSoaM3GetCol(&result, &mat, col); + return result; +} + +static inline VmathSoaVector3 vmathSoaM3GetRow_V( VmathSoaMatrix3 mat, int row ) +{ + VmathSoaVector3 result; + vmathSoaM3GetRow(&result, &mat, row); + return result; +} + +static inline VmathSoaMatrix3 vmathSoaM3Transpose_V( VmathSoaMatrix3 mat ) +{ + VmathSoaMatrix3 result; + vmathSoaM3Transpose(&result, &mat); + return result; +} + +static inline VmathSoaMatrix3 vmathSoaM3Inverse_V( VmathSoaMatrix3 mat ) +{ + VmathSoaMatrix3 result; + vmathSoaM3Inverse(&result, &mat); + return result; +} + +static inline vec_float4 vmathSoaM3Determinant_V( VmathSoaMatrix3 mat ) +{ + return vmathSoaM3Determinant(&mat); +} + +static inline VmathSoaMatrix3 vmathSoaM3Add_V( VmathSoaMatrix3 mat0, VmathSoaMatrix3 mat1 ) +{ + VmathSoaMatrix3 result; + vmathSoaM3Add(&result, &mat0, &mat1); + return result; +} + +static inline VmathSoaMatrix3 vmathSoaM3Sub_V( VmathSoaMatrix3 mat0, VmathSoaMatrix3 mat1 ) +{ + VmathSoaMatrix3 result; + vmathSoaM3Sub(&result, &mat0, &mat1); + return result; +} + +static inline VmathSoaMatrix3 vmathSoaM3Neg_V( VmathSoaMatrix3 mat ) +{ + VmathSoaMatrix3 result; + vmathSoaM3Neg(&result, &mat); + return result; +} + +static inline VmathSoaMatrix3 vmathSoaM3AbsPerElem_V( VmathSoaMatrix3 mat ) +{ + VmathSoaMatrix3 result; + vmathSoaM3AbsPerElem(&result, &mat); + return result; +} + +static inline VmathSoaMatrix3 vmathSoaM3ScalarMul_V( VmathSoaMatrix3 mat, vec_float4 scalar ) +{ + VmathSoaMatrix3 result; + vmathSoaM3ScalarMul(&result, &mat, scalar); + return result; +} + +static inline VmathSoaVector3 vmathSoaM3MulV3_V( VmathSoaMatrix3 mat, VmathSoaVector3 vec ) +{ + VmathSoaVector3 result; + vmathSoaM3MulV3(&result, &mat, &vec); + return result; +} + +static inline VmathSoaMatrix3 vmathSoaM3Mul_V( VmathSoaMatrix3 mat0, VmathSoaMatrix3 mat1 ) +{ + VmathSoaMatrix3 result; + vmathSoaM3Mul(&result, &mat0, &mat1); + return result; +} + +static inline VmathSoaMatrix3 vmathSoaM3MulPerElem_V( VmathSoaMatrix3 mat0, VmathSoaMatrix3 mat1 ) +{ + VmathSoaMatrix3 result; + vmathSoaM3MulPerElem(&result, &mat0, &mat1); + return result; +} + +static inline VmathSoaMatrix3 vmathSoaM3MakeIdentity_V( ) +{ + VmathSoaMatrix3 result; + vmathSoaM3MakeIdentity(&result); + return result; +} + +static inline VmathSoaMatrix3 vmathSoaM3MakeRotationX_V( vec_float4 radians ) +{ + VmathSoaMatrix3 result; + vmathSoaM3MakeRotationX(&result, radians); + return result; +} + +static inline VmathSoaMatrix3 vmathSoaM3MakeRotationY_V( vec_float4 radians ) +{ + VmathSoaMatrix3 result; + vmathSoaM3MakeRotationY(&result, radians); + return result; +} + +static inline VmathSoaMatrix3 vmathSoaM3MakeRotationZ_V( vec_float4 radians ) +{ + VmathSoaMatrix3 result; + vmathSoaM3MakeRotationZ(&result, radians); + return result; +} + +static inline VmathSoaMatrix3 vmathSoaM3MakeRotationZYX_V( VmathSoaVector3 radiansXYZ ) +{ + VmathSoaMatrix3 result; + vmathSoaM3MakeRotationZYX(&result, &radiansXYZ); + return result; +} + +static inline VmathSoaMatrix3 vmathSoaM3MakeRotationAxis_V( vec_float4 radians, VmathSoaVector3 unitVec ) +{ + VmathSoaMatrix3 result; + vmathSoaM3MakeRotationAxis(&result, radians, &unitVec); + return result; +} + +static inline VmathSoaMatrix3 vmathSoaM3MakeRotationQ_V( VmathSoaQuat unitQuat ) +{ + VmathSoaMatrix3 result; + vmathSoaM3MakeRotationQ(&result, &unitQuat); + return result; +} + +static inline VmathSoaMatrix3 vmathSoaM3MakeScale_V( VmathSoaVector3 scaleVec ) +{ + VmathSoaMatrix3 result; + vmathSoaM3MakeScale(&result, &scaleVec); + return result; +} + +static inline VmathSoaMatrix3 vmathSoaM3AppendScale_V( VmathSoaMatrix3 mat, VmathSoaVector3 scaleVec ) +{ + VmathSoaMatrix3 result; + vmathSoaM3AppendScale(&result, &mat, &scaleVec); + return result; +} + +static inline VmathSoaMatrix3 vmathSoaM3PrependScale_V( VmathSoaVector3 scaleVec, VmathSoaMatrix3 mat ) +{ + VmathSoaMatrix3 result; + vmathSoaM3PrependScale(&result, &scaleVec, &mat); + return result; +} + +static inline VmathSoaMatrix3 vmathSoaM3Select_V( VmathSoaMatrix3 mat0, VmathSoaMatrix3 mat1, vec_uint4 select1 ) +{ + VmathSoaMatrix3 result; + vmathSoaM3Select(&result, &mat0, &mat1, select1); + return result; +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathSoaM3Print_V( VmathSoaMatrix3 mat ) +{ + vmathSoaM3Print(&mat); +} + +static inline void vmathSoaM3Prints_V( VmathSoaMatrix3 mat, const char *name ) +{ + vmathSoaM3Prints(&mat, name); +} + +#endif + +static inline VmathSoaMatrix4 vmathSoaM4MakeFromScalar_V( vec_float4 scalar ) +{ + VmathSoaMatrix4 result; + vmathSoaM4MakeFromScalar(&result, scalar); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4MakeFromT3_V( VmathSoaTransform3 mat ) +{ + VmathSoaMatrix4 result; + vmathSoaM4MakeFromT3(&result, &mat); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4MakeFromCols_V( VmathSoaVector4 _col0, VmathSoaVector4 _col1, VmathSoaVector4 _col2, VmathSoaVector4 _col3 ) +{ + VmathSoaMatrix4 result; + vmathSoaM4MakeFromCols(&result, &_col0, &_col1, &_col2, &_col3); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4MakeFromM3V3_V( VmathSoaMatrix3 mat, VmathSoaVector3 translateVec ) +{ + VmathSoaMatrix4 result; + vmathSoaM4MakeFromM3V3(&result, &mat, &translateVec); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4MakeFromQV3_V( VmathSoaQuat unitQuat, VmathSoaVector3 translateVec ) +{ + VmathSoaMatrix4 result; + vmathSoaM4MakeFromQV3(&result, &unitQuat, &translateVec); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4MakeFromAos_V( VmathMatrix4 mat ) +{ + VmathSoaMatrix4 result; + vmathSoaM4MakeFromAos(&result, &mat); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4MakeFrom4Aos_V( VmathMatrix4 mat0, VmathMatrix4 mat1, VmathMatrix4 mat2, VmathMatrix4 mat3 ) +{ + VmathSoaMatrix4 result; + vmathSoaM4MakeFrom4Aos(&result, &mat0, &mat1, &mat2, &mat3); + return result; +} + +static inline void vmathSoaM4Get4Aos_V( VmathSoaMatrix4 mat, VmathMatrix4 *result0, VmathMatrix4 *result1, VmathMatrix4 *result2, VmathMatrix4 *result3 ) +{ + vmathSoaM4Get4Aos(&mat, result0, result1, result2, result3); +} + +static inline void vmathSoaM4SetCol0_V( VmathSoaMatrix4 *result, VmathSoaVector4 _col0 ) +{ + vmathSoaM4SetCol0(result, &_col0); +} + +static inline void vmathSoaM4SetCol1_V( VmathSoaMatrix4 *result, VmathSoaVector4 _col1 ) +{ + vmathSoaM4SetCol1(result, &_col1); +} + +static inline void vmathSoaM4SetCol2_V( VmathSoaMatrix4 *result, VmathSoaVector4 _col2 ) +{ + vmathSoaM4SetCol2(result, &_col2); +} + +static inline void vmathSoaM4SetCol3_V( VmathSoaMatrix4 *result, VmathSoaVector4 _col3 ) +{ + vmathSoaM4SetCol3(result, &_col3); +} + +static inline void vmathSoaM4SetCol_V( VmathSoaMatrix4 *result, int col, VmathSoaVector4 vec ) +{ + vmathSoaM4SetCol(result, col, &vec); +} + +static inline void vmathSoaM4SetRow_V( VmathSoaMatrix4 *result, int row, VmathSoaVector4 vec ) +{ + vmathSoaM4SetRow(result, row, &vec); +} + +static inline void vmathSoaM4SetElem_V( VmathSoaMatrix4 *result, int col, int row, vec_float4 val ) +{ + vmathSoaM4SetElem(result, col, row, val); +} + +static inline vec_float4 vmathSoaM4GetElem_V( VmathSoaMatrix4 mat, int col, int row ) +{ + return vmathSoaM4GetElem(&mat, col, row); +} + +static inline VmathSoaVector4 vmathSoaM4GetCol0_V( VmathSoaMatrix4 mat ) +{ + VmathSoaVector4 result; + vmathSoaM4GetCol0(&result, &mat); + return result; +} + +static inline VmathSoaVector4 vmathSoaM4GetCol1_V( VmathSoaMatrix4 mat ) +{ + VmathSoaVector4 result; + vmathSoaM4GetCol1(&result, &mat); + return result; +} + +static inline VmathSoaVector4 vmathSoaM4GetCol2_V( VmathSoaMatrix4 mat ) +{ + VmathSoaVector4 result; + vmathSoaM4GetCol2(&result, &mat); + return result; +} + +static inline VmathSoaVector4 vmathSoaM4GetCol3_V( VmathSoaMatrix4 mat ) +{ + VmathSoaVector4 result; + vmathSoaM4GetCol3(&result, &mat); + return result; +} + +static inline VmathSoaVector4 vmathSoaM4GetCol_V( VmathSoaMatrix4 mat, int col ) +{ + VmathSoaVector4 result; + vmathSoaM4GetCol(&result, &mat, col); + return result; +} + +static inline VmathSoaVector4 vmathSoaM4GetRow_V( VmathSoaMatrix4 mat, int row ) +{ + VmathSoaVector4 result; + vmathSoaM4GetRow(&result, &mat, row); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4Transpose_V( VmathSoaMatrix4 mat ) +{ + VmathSoaMatrix4 result; + vmathSoaM4Transpose(&result, &mat); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4Inverse_V( VmathSoaMatrix4 mat ) +{ + VmathSoaMatrix4 result; + vmathSoaM4Inverse(&result, &mat); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4AffineInverse_V( VmathSoaMatrix4 mat ) +{ + VmathSoaMatrix4 result; + vmathSoaM4AffineInverse(&result, &mat); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4OrthoInverse_V( VmathSoaMatrix4 mat ) +{ + VmathSoaMatrix4 result; + vmathSoaM4OrthoInverse(&result, &mat); + return result; +} + +static inline vec_float4 vmathSoaM4Determinant_V( VmathSoaMatrix4 mat ) +{ + return vmathSoaM4Determinant(&mat); +} + +static inline VmathSoaMatrix4 vmathSoaM4Add_V( VmathSoaMatrix4 mat0, VmathSoaMatrix4 mat1 ) +{ + VmathSoaMatrix4 result; + vmathSoaM4Add(&result, &mat0, &mat1); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4Sub_V( VmathSoaMatrix4 mat0, VmathSoaMatrix4 mat1 ) +{ + VmathSoaMatrix4 result; + vmathSoaM4Sub(&result, &mat0, &mat1); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4Neg_V( VmathSoaMatrix4 mat ) +{ + VmathSoaMatrix4 result; + vmathSoaM4Neg(&result, &mat); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4AbsPerElem_V( VmathSoaMatrix4 mat ) +{ + VmathSoaMatrix4 result; + vmathSoaM4AbsPerElem(&result, &mat); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4ScalarMul_V( VmathSoaMatrix4 mat, vec_float4 scalar ) +{ + VmathSoaMatrix4 result; + vmathSoaM4ScalarMul(&result, &mat, scalar); + return result; +} + +static inline VmathSoaVector4 vmathSoaM4MulV4_V( VmathSoaMatrix4 mat, VmathSoaVector4 vec ) +{ + VmathSoaVector4 result; + vmathSoaM4MulV4(&result, &mat, &vec); + return result; +} + +static inline VmathSoaVector4 vmathSoaM4MulV3_V( VmathSoaMatrix4 mat, VmathSoaVector3 vec ) +{ + VmathSoaVector4 result; + vmathSoaM4MulV3(&result, &mat, &vec); + return result; +} + +static inline VmathSoaVector4 vmathSoaM4MulP3_V( VmathSoaMatrix4 mat, VmathSoaPoint3 pnt ) +{ + VmathSoaVector4 result; + vmathSoaM4MulP3(&result, &mat, &pnt); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4Mul_V( VmathSoaMatrix4 mat0, VmathSoaMatrix4 mat1 ) +{ + VmathSoaMatrix4 result; + vmathSoaM4Mul(&result, &mat0, &mat1); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4MulT3_V( VmathSoaMatrix4 mat, VmathSoaTransform3 tfrm1 ) +{ + VmathSoaMatrix4 result; + vmathSoaM4MulT3(&result, &mat, &tfrm1); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4MulPerElem_V( VmathSoaMatrix4 mat0, VmathSoaMatrix4 mat1 ) +{ + VmathSoaMatrix4 result; + vmathSoaM4MulPerElem(&result, &mat0, &mat1); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4MakeIdentity_V( ) +{ + VmathSoaMatrix4 result; + vmathSoaM4MakeIdentity(&result); + return result; +} + +static inline void vmathSoaM4SetUpper3x3_V( VmathSoaMatrix4 *result, VmathSoaMatrix3 mat3 ) +{ + vmathSoaM4SetUpper3x3(result, &mat3); +} + +static inline VmathSoaMatrix3 vmathSoaM4GetUpper3x3_V( VmathSoaMatrix4 mat ) +{ + VmathSoaMatrix3 result; + vmathSoaM4GetUpper3x3(&result, &mat); + return result; +} + +static inline void vmathSoaM4SetTranslation_V( VmathSoaMatrix4 *result, VmathSoaVector3 translateVec ) +{ + vmathSoaM4SetTranslation(result, &translateVec); +} + +static inline VmathSoaVector3 vmathSoaM4GetTranslation_V( VmathSoaMatrix4 mat ) +{ + VmathSoaVector3 result; + vmathSoaM4GetTranslation(&result, &mat); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4MakeRotationX_V( vec_float4 radians ) +{ + VmathSoaMatrix4 result; + vmathSoaM4MakeRotationX(&result, radians); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4MakeRotationY_V( vec_float4 radians ) +{ + VmathSoaMatrix4 result; + vmathSoaM4MakeRotationY(&result, radians); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4MakeRotationZ_V( vec_float4 radians ) +{ + VmathSoaMatrix4 result; + vmathSoaM4MakeRotationZ(&result, radians); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4MakeRotationZYX_V( VmathSoaVector3 radiansXYZ ) +{ + VmathSoaMatrix4 result; + vmathSoaM4MakeRotationZYX(&result, &radiansXYZ); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4MakeRotationAxis_V( vec_float4 radians, VmathSoaVector3 unitVec ) +{ + VmathSoaMatrix4 result; + vmathSoaM4MakeRotationAxis(&result, radians, &unitVec); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4MakeRotationQ_V( VmathSoaQuat unitQuat ) +{ + VmathSoaMatrix4 result; + vmathSoaM4MakeRotationQ(&result, &unitQuat); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4MakeScale_V( VmathSoaVector3 scaleVec ) +{ + VmathSoaMatrix4 result; + vmathSoaM4MakeScale(&result, &scaleVec); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4AppendScale_V( VmathSoaMatrix4 mat, VmathSoaVector3 scaleVec ) +{ + VmathSoaMatrix4 result; + vmathSoaM4AppendScale(&result, &mat, &scaleVec); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4PrependScale_V( VmathSoaVector3 scaleVec, VmathSoaMatrix4 mat ) +{ + VmathSoaMatrix4 result; + vmathSoaM4PrependScale(&result, &scaleVec, &mat); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4MakeTranslation_V( VmathSoaVector3 translateVec ) +{ + VmathSoaMatrix4 result; + vmathSoaM4MakeTranslation(&result, &translateVec); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4MakeLookAt_V( VmathSoaPoint3 eyePos, VmathSoaPoint3 lookAtPos, VmathSoaVector3 upVec ) +{ + VmathSoaMatrix4 result; + vmathSoaM4MakeLookAt(&result, &eyePos, &lookAtPos, &upVec); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4MakePerspective_V( vec_float4 fovyRadians, vec_float4 aspect, vec_float4 zNear, vec_float4 zFar ) +{ + VmathSoaMatrix4 result; + vmathSoaM4MakePerspective(&result, fovyRadians, aspect, zNear, zFar); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4MakeFrustum_V( vec_float4 left, vec_float4 right, vec_float4 bottom, vec_float4 top, vec_float4 zNear, vec_float4 zFar ) +{ + VmathSoaMatrix4 result; + vmathSoaM4MakeFrustum(&result, left, right, bottom, top, zNear, zFar); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4MakeOrthographic_V( vec_float4 left, vec_float4 right, vec_float4 bottom, vec_float4 top, vec_float4 zNear, vec_float4 zFar ) +{ + VmathSoaMatrix4 result; + vmathSoaM4MakeOrthographic(&result, left, right, bottom, top, zNear, zFar); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4Select_V( VmathSoaMatrix4 mat0, VmathSoaMatrix4 mat1, vec_uint4 select1 ) +{ + VmathSoaMatrix4 result; + vmathSoaM4Select(&result, &mat0, &mat1, select1); + return result; +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathSoaM4Print_V( VmathSoaMatrix4 mat ) +{ + vmathSoaM4Print(&mat); +} + +static inline void vmathSoaM4Prints_V( VmathSoaMatrix4 mat, const char *name ) +{ + vmathSoaM4Prints(&mat, name); +} + +#endif + +static inline VmathSoaTransform3 vmathSoaT3MakeFromScalar_V( vec_float4 scalar ) +{ + VmathSoaTransform3 result; + vmathSoaT3MakeFromScalar(&result, scalar); + return result; +} + +static inline VmathSoaTransform3 vmathSoaT3MakeFromCols_V( VmathSoaVector3 _col0, VmathSoaVector3 _col1, VmathSoaVector3 _col2, VmathSoaVector3 _col3 ) +{ + VmathSoaTransform3 result; + vmathSoaT3MakeFromCols(&result, &_col0, &_col1, &_col2, &_col3); + return result; +} + +static inline VmathSoaTransform3 vmathSoaT3MakeFromM3V3_V( VmathSoaMatrix3 tfrm, VmathSoaVector3 translateVec ) +{ + VmathSoaTransform3 result; + vmathSoaT3MakeFromM3V3(&result, &tfrm, &translateVec); + return result; +} + +static inline VmathSoaTransform3 vmathSoaT3MakeFromQV3_V( VmathSoaQuat unitQuat, VmathSoaVector3 translateVec ) +{ + VmathSoaTransform3 result; + vmathSoaT3MakeFromQV3(&result, &unitQuat, &translateVec); + return result; +} + +static inline VmathSoaTransform3 vmathSoaT3MakeFromAos_V( VmathTransform3 tfrm ) +{ + VmathSoaTransform3 result; + vmathSoaT3MakeFromAos(&result, &tfrm); + return result; +} + +static inline VmathSoaTransform3 vmathSoaT3MakeFrom4Aos_V( VmathTransform3 tfrm0, VmathTransform3 tfrm1, VmathTransform3 tfrm2, VmathTransform3 tfrm3 ) +{ + VmathSoaTransform3 result; + vmathSoaT3MakeFrom4Aos(&result, &tfrm0, &tfrm1, &tfrm2, &tfrm3); + return result; +} + +static inline void vmathSoaT3Get4Aos_V( VmathSoaTransform3 tfrm, VmathTransform3 *result0, VmathTransform3 *result1, VmathTransform3 *result2, VmathTransform3 *result3 ) +{ + vmathSoaT3Get4Aos(&tfrm, result0, result1, result2, result3); +} + +static inline void vmathSoaT3SetCol0_V( VmathSoaTransform3 *result, VmathSoaVector3 _col0 ) +{ + vmathSoaT3SetCol0(result, &_col0); +} + +static inline void vmathSoaT3SetCol1_V( VmathSoaTransform3 *result, VmathSoaVector3 _col1 ) +{ + vmathSoaT3SetCol1(result, &_col1); +} + +static inline void vmathSoaT3SetCol2_V( VmathSoaTransform3 *result, VmathSoaVector3 _col2 ) +{ + vmathSoaT3SetCol2(result, &_col2); +} + +static inline void vmathSoaT3SetCol3_V( VmathSoaTransform3 *result, VmathSoaVector3 _col3 ) +{ + vmathSoaT3SetCol3(result, &_col3); +} + +static inline void vmathSoaT3SetCol_V( VmathSoaTransform3 *result, int col, VmathSoaVector3 vec ) +{ + vmathSoaT3SetCol(result, col, &vec); +} + +static inline void vmathSoaT3SetRow_V( VmathSoaTransform3 *result, int row, VmathSoaVector4 vec ) +{ + vmathSoaT3SetRow(result, row, &vec); +} + +static inline void vmathSoaT3SetElem_V( VmathSoaTransform3 *result, int col, int row, vec_float4 val ) +{ + vmathSoaT3SetElem(result, col, row, val); +} + +static inline vec_float4 vmathSoaT3GetElem_V( VmathSoaTransform3 tfrm, int col, int row ) +{ + return vmathSoaT3GetElem(&tfrm, col, row); +} + +static inline VmathSoaVector3 vmathSoaT3GetCol0_V( VmathSoaTransform3 tfrm ) +{ + VmathSoaVector3 result; + vmathSoaT3GetCol0(&result, &tfrm); + return result; +} + +static inline VmathSoaVector3 vmathSoaT3GetCol1_V( VmathSoaTransform3 tfrm ) +{ + VmathSoaVector3 result; + vmathSoaT3GetCol1(&result, &tfrm); + return result; +} + +static inline VmathSoaVector3 vmathSoaT3GetCol2_V( VmathSoaTransform3 tfrm ) +{ + VmathSoaVector3 result; + vmathSoaT3GetCol2(&result, &tfrm); + return result; +} + +static inline VmathSoaVector3 vmathSoaT3GetCol3_V( VmathSoaTransform3 tfrm ) +{ + VmathSoaVector3 result; + vmathSoaT3GetCol3(&result, &tfrm); + return result; +} + +static inline VmathSoaVector3 vmathSoaT3GetCol_V( VmathSoaTransform3 tfrm, int col ) +{ + VmathSoaVector3 result; + vmathSoaT3GetCol(&result, &tfrm, col); + return result; +} + +static inline VmathSoaVector4 vmathSoaT3GetRow_V( VmathSoaTransform3 tfrm, int row ) +{ + VmathSoaVector4 result; + vmathSoaT3GetRow(&result, &tfrm, row); + return result; +} + +static inline VmathSoaTransform3 vmathSoaT3Inverse_V( VmathSoaTransform3 tfrm ) +{ + VmathSoaTransform3 result; + vmathSoaT3Inverse(&result, &tfrm); + return result; +} + +static inline VmathSoaTransform3 vmathSoaT3OrthoInverse_V( VmathSoaTransform3 tfrm ) +{ + VmathSoaTransform3 result; + vmathSoaT3OrthoInverse(&result, &tfrm); + return result; +} + +static inline VmathSoaTransform3 vmathSoaT3AbsPerElem_V( VmathSoaTransform3 tfrm ) +{ + VmathSoaTransform3 result; + vmathSoaT3AbsPerElem(&result, &tfrm); + return result; +} + +static inline VmathSoaVector3 vmathSoaT3MulV3_V( VmathSoaTransform3 tfrm, VmathSoaVector3 vec ) +{ + VmathSoaVector3 result; + vmathSoaT3MulV3(&result, &tfrm, &vec); + return result; +} + +static inline VmathSoaPoint3 vmathSoaT3MulP3_V( VmathSoaTransform3 tfrm, VmathSoaPoint3 pnt ) +{ + VmathSoaPoint3 result; + vmathSoaT3MulP3(&result, &tfrm, &pnt); + return result; +} + +static inline VmathSoaTransform3 vmathSoaT3Mul_V( VmathSoaTransform3 tfrm0, VmathSoaTransform3 tfrm1 ) +{ + VmathSoaTransform3 result; + vmathSoaT3Mul(&result, &tfrm0, &tfrm1); + return result; +} + +static inline VmathSoaTransform3 vmathSoaT3MulPerElem_V( VmathSoaTransform3 tfrm0, VmathSoaTransform3 tfrm1 ) +{ + VmathSoaTransform3 result; + vmathSoaT3MulPerElem(&result, &tfrm0, &tfrm1); + return result; +} + +static inline VmathSoaTransform3 vmathSoaT3MakeIdentity_V( ) +{ + VmathSoaTransform3 result; + vmathSoaT3MakeIdentity(&result); + return result; +} + +static inline void vmathSoaT3SetUpper3x3_V( VmathSoaTransform3 *result, VmathSoaMatrix3 tfrm ) +{ + vmathSoaT3SetUpper3x3(result, &tfrm); +} + +static inline VmathSoaMatrix3 vmathSoaT3GetUpper3x3_V( VmathSoaTransform3 tfrm ) +{ + VmathSoaMatrix3 result; + vmathSoaT3GetUpper3x3(&result, &tfrm); + return result; +} + +static inline void vmathSoaT3SetTranslation_V( VmathSoaTransform3 *result, VmathSoaVector3 translateVec ) +{ + vmathSoaT3SetTranslation(result, &translateVec); +} + +static inline VmathSoaVector3 vmathSoaT3GetTranslation_V( VmathSoaTransform3 tfrm ) +{ + VmathSoaVector3 result; + vmathSoaT3GetTranslation(&result, &tfrm); + return result; +} + +static inline VmathSoaTransform3 vmathSoaT3MakeRotationX_V( vec_float4 radians ) +{ + VmathSoaTransform3 result; + vmathSoaT3MakeRotationX(&result, radians); + return result; +} + +static inline VmathSoaTransform3 vmathSoaT3MakeRotationY_V( vec_float4 radians ) +{ + VmathSoaTransform3 result; + vmathSoaT3MakeRotationY(&result, radians); + return result; +} + +static inline VmathSoaTransform3 vmathSoaT3MakeRotationZ_V( vec_float4 radians ) +{ + VmathSoaTransform3 result; + vmathSoaT3MakeRotationZ(&result, radians); + return result; +} + +static inline VmathSoaTransform3 vmathSoaT3MakeRotationZYX_V( VmathSoaVector3 radiansXYZ ) +{ + VmathSoaTransform3 result; + vmathSoaT3MakeRotationZYX(&result, &radiansXYZ); + return result; +} + +static inline VmathSoaTransform3 vmathSoaT3MakeRotationAxis_V( vec_float4 radians, VmathSoaVector3 unitVec ) +{ + VmathSoaTransform3 result; + vmathSoaT3MakeRotationAxis(&result, radians, &unitVec); + return result; +} + +static inline VmathSoaTransform3 vmathSoaT3MakeRotationQ_V( VmathSoaQuat unitQuat ) +{ + VmathSoaTransform3 result; + vmathSoaT3MakeRotationQ(&result, &unitQuat); + return result; +} + +static inline VmathSoaTransform3 vmathSoaT3MakeScale_V( VmathSoaVector3 scaleVec ) +{ + VmathSoaTransform3 result; + vmathSoaT3MakeScale(&result, &scaleVec); + return result; +} + +static inline VmathSoaTransform3 vmathSoaT3AppendScale_V( VmathSoaTransform3 tfrm, VmathSoaVector3 scaleVec ) +{ + VmathSoaTransform3 result; + vmathSoaT3AppendScale(&result, &tfrm, &scaleVec); + return result; +} + +static inline VmathSoaTransform3 vmathSoaT3PrependScale_V( VmathSoaVector3 scaleVec, VmathSoaTransform3 tfrm ) +{ + VmathSoaTransform3 result; + vmathSoaT3PrependScale(&result, &scaleVec, &tfrm); + return result; +} + +static inline VmathSoaTransform3 vmathSoaT3MakeTranslation_V( VmathSoaVector3 translateVec ) +{ + VmathSoaTransform3 result; + vmathSoaT3MakeTranslation(&result, &translateVec); + return result; +} + +static inline VmathSoaTransform3 vmathSoaT3Select_V( VmathSoaTransform3 tfrm0, VmathSoaTransform3 tfrm1, vec_uint4 select1 ) +{ + VmathSoaTransform3 result; + vmathSoaT3Select(&result, &tfrm0, &tfrm1, select1); + return result; +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathSoaT3Print_V( VmathSoaTransform3 tfrm ) +{ + vmathSoaT3Print(&tfrm); +} + +static inline void vmathSoaT3Prints_V( VmathSoaTransform3 tfrm, const char *name ) +{ + vmathSoaT3Prints(&tfrm, name); +} + +#endif + +static inline VmathSoaQuat vmathSoaQMakeFromM3_V( VmathSoaMatrix3 tfrm ) +{ + VmathSoaQuat result; + vmathSoaQMakeFromM3(&result, &tfrm); + return result; +} + +static inline VmathSoaMatrix3 vmathSoaV3Outer_V( VmathSoaVector3 tfrm0, VmathSoaVector3 tfrm1 ) +{ + VmathSoaMatrix3 result; + vmathSoaV3Outer(&result, &tfrm0, &tfrm1); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaV4Outer_V( VmathSoaVector4 tfrm0, VmathSoaVector4 tfrm1 ) +{ + VmathSoaMatrix4 result; + vmathSoaV4Outer(&result, &tfrm0, &tfrm1); + return result; +} + +static inline VmathSoaVector3 vmathSoaV3RowMul_V( VmathSoaVector3 vec, VmathSoaMatrix3 mat ) +{ + VmathSoaVector3 result; + vmathSoaV3RowMul(&result, &vec, &mat); + return result; +} + +static inline VmathSoaMatrix3 vmathSoaV3CrossMatrix_V( VmathSoaVector3 vec ) +{ + VmathSoaMatrix3 result; + vmathSoaV3CrossMatrix(&result, &vec); + return result; +} + +static inline VmathSoaMatrix3 vmathSoaV3CrossMatrixMul_V( VmathSoaVector3 vec, VmathSoaMatrix3 mat ) +{ + VmathSoaMatrix3 result; + vmathSoaV3CrossMatrixMul(&result, &vec, &mat); + return result; +} + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/ppu/c/quat_aos.h b/Extras/vectormathlibrary/include/vectormath/ppu/c/quat_aos.h new file mode 100644 index 000000000..2915f4f07 --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/ppu/c/quat_aos.h @@ -0,0 +1,379 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_QUAT_AOS_C_H +#define _VECTORMATH_QUAT_AOS_C_H +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/*----------------------------------------------------------------------------- + * Definitions + */ +#ifndef _VECTORMATH_INTERNAL_FUNCTIONS +#define _VECTORMATH_INTERNAL_FUNCTIONS + +#endif + +static inline void vmathQCopy( VmathQuat *result, const VmathQuat *quat ) +{ + result->vec128 = quat->vec128; +} + +static inline void vmathQMakeFromElems( VmathQuat *result, float _x, float _y, float _z, float _w ) +{ + if (__builtin_constant_p(_x) & __builtin_constant_p(_y) & + __builtin_constant_p(_z) & __builtin_constant_p(_w)) { + result->vec128 = (vec_float4){_x, _y, _z, _w}; + } else { + float *pf = (float *)&result->vec128; + pf[0] = _x; + pf[1] = _y; + pf[2] = _z; + pf[3] = _w; + } +} + +static inline void vmathQMakeFromV3Scalar( VmathQuat *result, const VmathVector3 *xyz, float _w ) +{ + result->vec128 = xyz->vec128; + _vmathVfSetElement(result->vec128, _w, 3); +} + +static inline void vmathQMakeFromV4( VmathQuat *result, const VmathVector4 *vec ) +{ + result->vec128 = vec->vec128; +} + +static inline void vmathQMakeFromScalar( VmathQuat *result, float scalar ) +{ + result->vec128 = _vmathVfSplatScalar(scalar); +} + +static inline void vmathQMakeFrom128( VmathQuat *result, vec_float4 vf4 ) +{ + result->vec128 = vf4; +} + +static inline void vmathQMakeIdentity( VmathQuat *result ) +{ + result->vec128 = _VECTORMATH_UNIT_0001; +} + +static inline void vmathQLerp( VmathQuat *result, float t, const VmathQuat *quat0, const VmathQuat *quat1 ) +{ + VmathQuat tmpQ_0, tmpQ_1; + vmathQSub( &tmpQ_0, quat1, quat0 ); + vmathQScalarMul( &tmpQ_1, &tmpQ_0, t ); + vmathQAdd( result, quat0, &tmpQ_1 ); +} + +static inline void vmathQSlerp( VmathQuat *result, float t, const VmathQuat *unitQuat0, const VmathQuat *unitQuat1 ) +{ + VmathQuat start; + vec_float4 scales, scale0, scale1, cosAngle, angle, tttt, oneMinusT, angles, sines; + vec_uint4 selectMask; + cosAngle = _vmathVfDot4( unitQuat0->vec128, unitQuat1->vec128 ); + cosAngle = vec_splat( cosAngle, 0 ); + selectMask = (vec_uint4)vec_cmpgt( ((vec_float4){0.0f,0.0f,0.0f,0.0f}), cosAngle ); + cosAngle = vec_sel( cosAngle, negatef4( cosAngle ), selectMask ); + start.vec128 = vec_sel( unitQuat0->vec128, negatef4( unitQuat0->vec128 ), selectMask ); + selectMask = (vec_uint4)vec_cmpgt( ((vec_float4){_VECTORMATH_SLERP_TOL,_VECTORMATH_SLERP_TOL,_VECTORMATH_SLERP_TOL,_VECTORMATH_SLERP_TOL}), cosAngle ); + angle = acosf4( cosAngle ); + tttt = _vmathVfSplatScalar(t); + oneMinusT = vec_sub( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), tttt ); + angles = vec_mergeh( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), tttt ); + angles = vec_mergeh( angles, oneMinusT ); + angles = vec_madd( angles, angle, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + sines = sinf4( angles ); + scales = divf4( sines, vec_splat( sines, 0 ) ); + scale0 = vec_sel( oneMinusT, vec_splat( scales, 1 ), selectMask ); + scale1 = vec_sel( tttt, vec_splat( scales, 2 ), selectMask ); + result->vec128 = vec_madd( start.vec128, scale0, vec_madd( unitQuat1->vec128, scale1, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); +} + +static inline void vmathQSquad( VmathQuat *result, float t, const VmathQuat *unitQuat0, const VmathQuat *unitQuat1, const VmathQuat *unitQuat2, const VmathQuat *unitQuat3 ) +{ + VmathQuat tmp0, tmp1; + vmathQSlerp( &tmp0, t, unitQuat0, unitQuat3 ); + vmathQSlerp( &tmp1, t, unitQuat1, unitQuat2 ); + vmathQSlerp( result, ( ( 2.0f * t ) * ( 1.0f - t ) ), &tmp0, &tmp1 ); +} + +static inline vec_float4 vmathQGet128( const VmathQuat *quat ) +{ + return quat->vec128; +} + +static inline void vmathQSetXYZ( VmathQuat *result, const VmathVector3 *vec ) +{ + result->vec128 = vec_sel( vec->vec128, result->vec128, _VECTORMATH_MASK_0x000F ); +} + +static inline void vmathQGetXYZ( VmathVector3 *result, const VmathQuat *quat ) +{ + result->vec128 = quat->vec128; +} + +static inline void vmathQSetX( VmathQuat *result, float _x ) +{ + _vmathVfSetElement(result->vec128, _x, 0); +} + +static inline float vmathQGetX( const VmathQuat *quat ) +{ + return _vmathVfGetElement(quat->vec128, 0); +} + +static inline void vmathQSetY( VmathQuat *result, float _y ) +{ + _vmathVfSetElement(result->vec128, _y, 1); +} + +static inline float vmathQGetY( const VmathQuat *quat ) +{ + return _vmathVfGetElement(quat->vec128, 1); +} + +static inline void vmathQSetZ( VmathQuat *result, float _z ) +{ + _vmathVfSetElement(result->vec128, _z, 2); +} + +static inline float vmathQGetZ( const VmathQuat *quat ) +{ + return _vmathVfGetElement(quat->vec128, 2); +} + +static inline void vmathQSetW( VmathQuat *result, float _w ) +{ + _vmathVfSetElement(result->vec128, _w, 3); +} + +static inline float vmathQGetW( const VmathQuat *quat ) +{ + return _vmathVfGetElement(quat->vec128, 3); +} + +static inline void vmathQSetElem( VmathQuat *result, int idx, float value ) +{ + _vmathVfSetElement(result->vec128, value, idx); +} + +static inline float vmathQGetElem( const VmathQuat *quat, int idx ) +{ + return _vmathVfGetElement(quat->vec128, idx); +} + +static inline void vmathQAdd( VmathQuat *result, const VmathQuat *quat0, const VmathQuat *quat1 ) +{ + result->vec128 = vec_add( quat0->vec128, quat1->vec128 ); +} + +static inline void vmathQSub( VmathQuat *result, const VmathQuat *quat0, const VmathQuat *quat1 ) +{ + result->vec128 = vec_sub( quat0->vec128, quat1->vec128 ); +} + +static inline void vmathQScalarMul( VmathQuat *result, const VmathQuat *quat, float scalar ) +{ + result->vec128 = vec_madd( quat->vec128, _vmathVfSplatScalar(scalar), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); +} + +static inline void vmathQScalarDiv( VmathQuat *result, const VmathQuat *quat, float scalar ) +{ + result->vec128 = divf4( quat->vec128, _vmathVfSplatScalar(scalar) ); +} + +static inline void vmathQNeg( VmathQuat *result, const VmathQuat *quat ) +{ + result->vec128 = negatef4( quat->vec128 ); +} + +static inline float vmathQDot( const VmathQuat *quat0, const VmathQuat *quat1 ) +{ + vec_float4 result = _vmathVfDot4( quat0->vec128, quat1->vec128 ); + return _vmathVfGetElement(result, 0); +} + +static inline float vmathQNorm( const VmathQuat *quat ) +{ + vec_float4 result = _vmathVfDot4( quat->vec128, quat->vec128 ); + return _vmathVfGetElement(result, 0); +} + +static inline float vmathQLength( const VmathQuat *quat ) +{ + return sqrtf( vmathQNorm( quat ) ); +} + +static inline void vmathQNormalize( VmathQuat *result, const VmathQuat *quat ) +{ + vec_float4 dot = _vmathVfDot4( quat->vec128, quat->vec128 ); + result->vec128 = vec_madd( quat->vec128, rsqrtf4( dot ), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); +} + +static inline void vmathQMakeRotationArc( VmathQuat *result, const VmathVector3 *unitVec0, const VmathVector3 *unitVec1 ) +{ + VmathVector3 crossVec, tmpV3_0; + vec_float4 cosAngle, cosAngleX2Plus2, recipCosHalfAngleX2, cosHalfAngleX2, res; + cosAngle = _vmathVfDot3( unitVec0->vec128, unitVec1->vec128 ); + cosAngle = vec_splat( cosAngle, 0 ); + cosAngleX2Plus2 = vec_madd( cosAngle, ((vec_float4){2.0f,2.0f,2.0f,2.0f}), ((vec_float4){2.0f,2.0f,2.0f,2.0f}) ); + recipCosHalfAngleX2 = rsqrtf4( cosAngleX2Plus2 ); + cosHalfAngleX2 = vec_madd( recipCosHalfAngleX2, cosAngleX2Plus2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + vmathV3Cross( &tmpV3_0, unitVec0, unitVec1 ); + crossVec = tmpV3_0; + res = vec_madd( crossVec.vec128, recipCosHalfAngleX2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + res = vec_sel( res, vec_madd( cosHalfAngleX2, ((vec_float4){0.5f,0.5f,0.5f,0.5f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), _VECTORMATH_MASK_0x000F ); + result->vec128 = res; +} + +static inline void vmathQMakeRotationAxis( VmathQuat *result, float radians, const VmathVector3 *unitVec ) +{ + vec_float4 s, c, angle, res; + angle = vec_madd( _vmathVfSplatScalar(radians), ((vec_float4){0.5f,0.5f,0.5f,0.5f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + sincosf4( angle, &s, &c ); + res = vec_sel( vec_madd( unitVec->vec128, s, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), c, _VECTORMATH_MASK_0x000F ); + result->vec128 = res; +} + +static inline void vmathQMakeRotationX( VmathQuat *result, float radians ) +{ + vec_float4 s, c, angle, res; + angle = vec_madd( _vmathVfSplatScalar(radians), ((vec_float4){0.5f,0.5f,0.5f,0.5f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + sincosf4( angle, &s, &c ); + res = vec_sel( ((vec_float4){0.0f,0.0f,0.0f,0.0f}), s, _VECTORMATH_MASK_0xF000 ); + res = vec_sel( res, c, _VECTORMATH_MASK_0x000F ); + result->vec128 = res; +} + +static inline void vmathQMakeRotationY( VmathQuat *result, float radians ) +{ + vec_float4 s, c, angle, res; + angle = vec_madd( _vmathVfSplatScalar(radians), ((vec_float4){0.5f,0.5f,0.5f,0.5f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + sincosf4( angle, &s, &c ); + res = vec_sel( ((vec_float4){0.0f,0.0f,0.0f,0.0f}), s, _VECTORMATH_MASK_0x0F00 ); + res = vec_sel( res, c, _VECTORMATH_MASK_0x000F ); + result->vec128 = res; +} + +static inline void vmathQMakeRotationZ( VmathQuat *result, float radians ) +{ + vec_float4 s, c, angle, res; + angle = vec_madd( _vmathVfSplatScalar(radians), ((vec_float4){0.5f,0.5f,0.5f,0.5f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + sincosf4( angle, &s, &c ); + res = vec_sel( ((vec_float4){0.0f,0.0f,0.0f,0.0f}), s, _VECTORMATH_MASK_0x00F0 ); + res = vec_sel( res, c, _VECTORMATH_MASK_0x000F ); + result->vec128 = res; +} + +static inline void vmathQMul( VmathQuat *result, const VmathQuat *quat0, const VmathQuat *quat1 ) +{ + vec_float4 ldata, rdata, qv, tmp0, tmp1, tmp2, tmp3; + vec_float4 product, l_wxyz, r_wxyz, xy, qw; + ldata = quat0->vec128; + rdata = quat1->vec128; + tmp0 = vec_perm( ldata, ldata, _VECTORMATH_PERM_YZXW ); + tmp1 = vec_perm( rdata, rdata, _VECTORMATH_PERM_ZXYW ); + tmp2 = vec_perm( ldata, ldata, _VECTORMATH_PERM_ZXYW ); + tmp3 = vec_perm( rdata, rdata, _VECTORMATH_PERM_YZXW ); + qv = vec_madd( vec_splat( ldata, 3 ), rdata, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + qv = vec_madd( vec_splat( rdata, 3 ), ldata, qv ); + qv = vec_madd( tmp0, tmp1, qv ); + qv = vec_nmsub( tmp2, tmp3, qv ); + product = vec_madd( ldata, rdata, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + l_wxyz = vec_sld( ldata, ldata, 12 ); + r_wxyz = vec_sld( rdata, rdata, 12 ); + qw = vec_nmsub( l_wxyz, r_wxyz, product ); + xy = vec_madd( l_wxyz, r_wxyz, product ); + qw = vec_sub( qw, vec_sld( xy, xy, 8 ) ); + result->vec128 = vec_sel( qv, qw, _VECTORMATH_MASK_0x000F ); +} + +static inline void vmathQRotate( VmathVector3 *result, const VmathQuat *quat, const VmathVector3 *vec ) +{ + vec_float4 qdata, vdata, product, tmp0, tmp1, tmp2, tmp3, wwww, qv, qw, res; + qdata = quat->vec128; + vdata = vec->vec128; + tmp0 = vec_perm( qdata, qdata, _VECTORMATH_PERM_YZXW ); + tmp1 = vec_perm( vdata, vdata, _VECTORMATH_PERM_ZXYW ); + tmp2 = vec_perm( qdata, qdata, _VECTORMATH_PERM_ZXYW ); + tmp3 = vec_perm( vdata, vdata, _VECTORMATH_PERM_YZXW ); + wwww = vec_splat( qdata, 3 ); + qv = vec_madd( wwww, vdata, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + qv = vec_madd( tmp0, tmp1, qv ); + qv = vec_nmsub( tmp2, tmp3, qv ); + product = vec_madd( qdata, vdata, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + qw = vec_madd( vec_sld( qdata, qdata, 4 ), vec_sld( vdata, vdata, 4 ), product ); + qw = vec_add( vec_sld( product, product, 8 ), qw ); + tmp1 = vec_perm( qv, qv, _VECTORMATH_PERM_ZXYW ); + tmp3 = vec_perm( qv, qv, _VECTORMATH_PERM_YZXW ); + res = vec_madd( vec_splat( qw, 0 ), qdata, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + res = vec_madd( wwww, qv, res ); + res = vec_madd( tmp0, tmp1, res ); + res = vec_nmsub( tmp2, tmp3, res ); + result->vec128 = res; +} + +static inline void vmathQConj( VmathQuat *result, const VmathQuat *quat ) +{ + result->vec128 = vec_xor( quat->vec128, ((vec_float4)(vec_int4){0x80000000,0x80000000,0x80000000,0}) ); +} + +static inline void vmathQSelect( VmathQuat *result, const VmathQuat *quat0, const VmathQuat *quat1, unsigned int select1 ) +{ + unsigned int tmp; + tmp = (unsigned int)-(select1 > 0); + result->vec128 = vec_sel( quat0->vec128, quat1->vec128, _vmathVuiSplatScalar(tmp) ); +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathQPrint( const VmathQuat *quat ) +{ + union { vec_float4 v; float s[4]; } tmp; + tmp.v = quat->vec128; + printf( "( %f %f %f %f )\n", tmp.s[0], tmp.s[1], tmp.s[2], tmp.s[3] ); +} + +static inline void vmathQPrints( const VmathQuat *quat, const char *name ) +{ + union { vec_float4 v; float s[4]; } tmp; + tmp.v = quat->vec128; + printf( "%s: ( %f %f %f %f )\n", name, tmp.s[0], tmp.s[1], tmp.s[2], tmp.s[3] ); +} + +#endif + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/ppu/c/quat_aos_v.h b/Extras/vectormathlibrary/include/vectormath/ppu/c/quat_aos_v.h new file mode 100644 index 000000000..04cf6ccf9 --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/ppu/c/quat_aos_v.h @@ -0,0 +1,312 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_QUAT_AOS_V_C_H +#define _VECTORMATH_QUAT_AOS_V_C_H +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/*----------------------------------------------------------------------------- + * Definitions + */ +#ifndef _VECTORMATH_INTERNAL_FUNCTIONS +#define _VECTORMATH_INTERNAL_FUNCTIONS + +#endif + +static inline VmathQuat vmathQMakeFromElems_V( float _x, float _y, float _z, float _w ) +{ + VmathQuat result; + vmathQMakeFromElems(&result, _x, _y, _z, _w); + return result; +} + +static inline VmathQuat vmathQMakeFromV3Scalar_V( VmathVector3 xyz, float _w ) +{ + VmathQuat result; + vmathQMakeFromV3Scalar(&result, &xyz, _w); + return result; +} + +static inline VmathQuat vmathQMakeFromV4_V( VmathVector4 vec ) +{ + VmathQuat result; + vmathQMakeFromV4(&result, &vec); + return result; +} + +static inline VmathQuat vmathQMakeFromScalar_V( float scalar ) +{ + VmathQuat result; + vmathQMakeFromScalar(&result, scalar); + return result; +} + +static inline VmathQuat vmathQMakeFrom128_V( vec_float4 vf4 ) +{ + VmathQuat result; + vmathQMakeFrom128(&result, vf4); + return result; +} + +static inline VmathQuat vmathQMakeIdentity_V( ) +{ + VmathQuat result; + vmathQMakeIdentity(&result); + return result; +} + +static inline VmathQuat vmathQLerp_V( float t, VmathQuat quat0, VmathQuat quat1 ) +{ + VmathQuat result; + vmathQLerp(&result, t, &quat0, &quat1); + return result; +} + +static inline VmathQuat vmathQSlerp_V( float t, VmathQuat unitQuat0, VmathQuat unitQuat1 ) +{ + VmathQuat result; + vmathQSlerp(&result, t, &unitQuat0, &unitQuat1); + return result; +} + +static inline VmathQuat vmathQSquad_V( float t, VmathQuat unitQuat0, VmathQuat unitQuat1, VmathQuat unitQuat2, VmathQuat unitQuat3 ) +{ + VmathQuat result; + vmathQSquad(&result, t, &unitQuat0, &unitQuat1, &unitQuat2, &unitQuat3); + return result; +} + +static inline vec_float4 vmathQGet128_V( VmathQuat quat ) +{ + return vmathQGet128(&quat); +} + +static inline void vmathQSetXYZ_V( VmathQuat *result, VmathVector3 vec ) +{ + vmathQSetXYZ(result, &vec); +} + +static inline VmathVector3 vmathQGetXYZ_V( VmathQuat quat ) +{ + VmathVector3 result; + vmathQGetXYZ(&result, &quat); + return result; +} + +static inline void vmathQSetX_V( VmathQuat *result, float _x ) +{ + vmathQSetX(result, _x); +} + +static inline float vmathQGetX_V( VmathQuat quat ) +{ + return vmathQGetX(&quat); +} + +static inline void vmathQSetY_V( VmathQuat *result, float _y ) +{ + vmathQSetY(result, _y); +} + +static inline float vmathQGetY_V( VmathQuat quat ) +{ + return vmathQGetY(&quat); +} + +static inline void vmathQSetZ_V( VmathQuat *result, float _z ) +{ + vmathQSetZ(result, _z); +} + +static inline float vmathQGetZ_V( VmathQuat quat ) +{ + return vmathQGetZ(&quat); +} + +static inline void vmathQSetW_V( VmathQuat *result, float _w ) +{ + vmathQSetW(result, _w); +} + +static inline float vmathQGetW_V( VmathQuat quat ) +{ + return vmathQGetW(&quat); +} + +static inline void vmathQSetElem_V( VmathQuat *result, int idx, float value ) +{ + vmathQSetElem(result, idx, value); +} + +static inline float vmathQGetElem_V( VmathQuat quat, int idx ) +{ + return vmathQGetElem(&quat, idx); +} + +static inline VmathQuat vmathQAdd_V( VmathQuat quat0, VmathQuat quat1 ) +{ + VmathQuat result; + vmathQAdd(&result, &quat0, &quat1); + return result; +} + +static inline VmathQuat vmathQSub_V( VmathQuat quat0, VmathQuat quat1 ) +{ + VmathQuat result; + vmathQSub(&result, &quat0, &quat1); + return result; +} + +static inline VmathQuat vmathQScalarMul_V( VmathQuat quat, float scalar ) +{ + VmathQuat result; + vmathQScalarMul(&result, &quat, scalar); + return result; +} + +static inline VmathQuat vmathQScalarDiv_V( VmathQuat quat, float scalar ) +{ + VmathQuat result; + vmathQScalarDiv(&result, &quat, scalar); + return result; +} + +static inline VmathQuat vmathQNeg_V( VmathQuat quat ) +{ + VmathQuat result; + vmathQNeg(&result, &quat); + return result; +} + +static inline float vmathQDot_V( VmathQuat quat0, VmathQuat quat1 ) +{ + return vmathQDot(&quat0, &quat1); +} + +static inline float vmathQNorm_V( VmathQuat quat ) +{ + return vmathQNorm(&quat); +} + +static inline float vmathQLength_V( VmathQuat quat ) +{ + return vmathQLength(&quat); +} + +static inline VmathQuat vmathQNormalize_V( VmathQuat quat ) +{ + VmathQuat result; + vmathQNormalize(&result, &quat); + return result; +} + +static inline VmathQuat vmathQMakeRotationArc_V( VmathVector3 unitVec0, VmathVector3 unitVec1 ) +{ + VmathQuat result; + vmathQMakeRotationArc(&result, &unitVec0, &unitVec1); + return result; +} + +static inline VmathQuat vmathQMakeRotationAxis_V( float radians, VmathVector3 unitVec ) +{ + VmathQuat result; + vmathQMakeRotationAxis(&result, radians, &unitVec); + return result; +} + +static inline VmathQuat vmathQMakeRotationX_V( float radians ) +{ + VmathQuat result; + vmathQMakeRotationX(&result, radians); + return result; +} + +static inline VmathQuat vmathQMakeRotationY_V( float radians ) +{ + VmathQuat result; + vmathQMakeRotationY(&result, radians); + return result; +} + +static inline VmathQuat vmathQMakeRotationZ_V( float radians ) +{ + VmathQuat result; + vmathQMakeRotationZ(&result, radians); + return result; +} + +static inline VmathQuat vmathQMul_V( VmathQuat quat0, VmathQuat quat1 ) +{ + VmathQuat result; + vmathQMul(&result, &quat0, &quat1); + return result; +} + +static inline VmathVector3 vmathQRotate_V( VmathQuat quat, VmathVector3 vec ) +{ + VmathVector3 result; + vmathQRotate(&result, &quat, &vec); + return result; +} + +static inline VmathQuat vmathQConj_V( VmathQuat quat ) +{ + VmathQuat result; + vmathQConj(&result, &quat); + return result; +} + +static inline VmathQuat vmathQSelect_V( VmathQuat quat0, VmathQuat quat1, unsigned int select1 ) +{ + VmathQuat result; + vmathQSelect(&result, &quat0, &quat1, select1); + return result; +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathQPrint_V( VmathQuat quat ) +{ + vmathQPrint(&quat); +} + +static inline void vmathQPrints_V( VmathQuat quat, const char *name ) +{ + vmathQPrints(&quat, name); +} + +#endif + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/ppu/c/quat_soa.h b/Extras/vectormathlibrary/include/vectormath/ppu/c/quat_soa.h new file mode 100644 index 000000000..334c17b01 --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/ppu/c/quat_soa.h @@ -0,0 +1,415 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_QUAT_SOA_C_H +#define _VECTORMATH_QUAT_SOA_C_H +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/*----------------------------------------------------------------------------- + * Definitions + */ +#ifndef _VECTORMATH_INTERNAL_FUNCTIONS +#define _VECTORMATH_INTERNAL_FUNCTIONS + +#endif + +static inline void vmathSoaQCopy( VmathSoaQuat *result, const VmathSoaQuat *quat ) +{ + result->x = quat->x; + result->y = quat->y; + result->z = quat->z; + result->w = quat->w; +} + +static inline void vmathSoaQMakeFromElems( VmathSoaQuat *result, vec_float4 _x, vec_float4 _y, vec_float4 _z, vec_float4 _w ) +{ + result->x = _x; + result->y = _y; + result->z = _z; + result->w = _w; +} + +static inline void vmathSoaQMakeFromV3Scalar( VmathSoaQuat *result, const VmathSoaVector3 *xyz, vec_float4 _w ) +{ + vmathSoaQSetXYZ( result, xyz ); + vmathSoaQSetW( result, _w ); +} + +static inline void vmathSoaQMakeFromV4( VmathSoaQuat *result, const VmathSoaVector4 *vec ) +{ + result->x = vec->x; + result->y = vec->y; + result->z = vec->z; + result->w = vec->w; +} + +static inline void vmathSoaQMakeFromScalar( VmathSoaQuat *result, vec_float4 scalar ) +{ + result->x = scalar; + result->y = scalar; + result->z = scalar; + result->w = scalar; +} + +static inline void vmathSoaQMakeFromAos( VmathSoaQuat *result, const VmathQuat *quat ) +{ + vec_float4 vec128 = quat->vec128; + result->x = vec_splat( vec128, 0 ); + result->y = vec_splat( vec128, 1 ); + result->z = vec_splat( vec128, 2 ); + result->w = vec_splat( vec128, 3 ); +} + +static inline void vmathSoaQMakeFrom4Aos( VmathSoaQuat *result, const VmathQuat *quat0, const VmathQuat *quat1, const VmathQuat *quat2, const VmathQuat *quat3 ) +{ + vec_float4 tmp0, tmp1, tmp2, tmp3; + tmp0 = vec_mergeh( quat0->vec128, quat2->vec128 ); + tmp1 = vec_mergeh( quat1->vec128, quat3->vec128 ); + tmp2 = vec_mergel( quat0->vec128, quat2->vec128 ); + tmp3 = vec_mergel( quat1->vec128, quat3->vec128 ); + result->x = vec_mergeh( tmp0, tmp1 ); + result->y = vec_mergel( tmp0, tmp1 ); + result->z = vec_mergeh( tmp2, tmp3 ); + result->w = vec_mergel( tmp2, tmp3 ); +} + +static inline void vmathSoaQMakeIdentity( VmathSoaQuat *result ) +{ + vmathSoaQMakeFromElems( result, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){1.0f,1.0f,1.0f,1.0f}) ); +} + +static inline void vmathSoaQLerp( VmathSoaQuat *result, vec_float4 t, const VmathSoaQuat *quat0, const VmathSoaQuat *quat1 ) +{ + VmathSoaQuat tmpQ_0, tmpQ_1; + vmathSoaQSub( &tmpQ_0, quat1, quat0 ); + vmathSoaQScalarMul( &tmpQ_1, &tmpQ_0, t ); + vmathSoaQAdd( result, quat0, &tmpQ_1 ); +} + +static inline void vmathSoaQSlerp( VmathSoaQuat *result, vec_float4 t, const VmathSoaQuat *unitQuat0, const VmathSoaQuat *unitQuat1 ) +{ + VmathSoaQuat start, tmpQ_0, tmpQ_1; + vec_float4 recipSinAngle, scale0, scale1, cosAngle, angle; + vec_uint4 selectMask; + cosAngle = vmathSoaQDot( unitQuat0, unitQuat1 ); + selectMask = (vec_uint4)vec_cmpgt( (vec_float4){0.0f,0.0f,0.0f,0.0f}, cosAngle ); + cosAngle = vec_sel( cosAngle, negatef4( cosAngle ), selectMask ); + vmathSoaQSetX( &start, vec_sel( unitQuat0->x, negatef4( unitQuat0->x ), selectMask ) ); + vmathSoaQSetY( &start, vec_sel( unitQuat0->y, negatef4( unitQuat0->y ), selectMask ) ); + vmathSoaQSetZ( &start, vec_sel( unitQuat0->z, negatef4( unitQuat0->z ), selectMask ) ); + vmathSoaQSetW( &start, vec_sel( unitQuat0->w, negatef4( unitQuat0->w ), selectMask ) ); + selectMask = (vec_uint4)vec_cmpgt( (vec_float4){_VECTORMATH_SLERP_TOL,_VECTORMATH_SLERP_TOL,_VECTORMATH_SLERP_TOL,_VECTORMATH_SLERP_TOL}, cosAngle ); + angle = acosf4( cosAngle ); + recipSinAngle = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), sinf4( angle ) ); + scale0 = vec_sel( vec_sub( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), t ), vec_madd( sinf4( vec_madd( vec_sub( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), t ), angle, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), recipSinAngle, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), selectMask ); + scale1 = vec_sel( t, vec_madd( sinf4( vec_madd( t, angle, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), recipSinAngle, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), selectMask ); + vmathSoaQScalarMul( &tmpQ_0, &start, scale0 ); + vmathSoaQScalarMul( &tmpQ_1, unitQuat1, scale1 ); + vmathSoaQAdd( result, &tmpQ_0, &tmpQ_1 ); +} + +static inline void vmathSoaQSquad( VmathSoaQuat *result, vec_float4 t, const VmathSoaQuat *unitQuat0, const VmathSoaQuat *unitQuat1, const VmathSoaQuat *unitQuat2, const VmathSoaQuat *unitQuat3 ) +{ + VmathSoaQuat tmp0, tmp1; + vmathSoaQSlerp( &tmp0, t, unitQuat0, unitQuat3 ); + vmathSoaQSlerp( &tmp1, t, unitQuat1, unitQuat2 ); + vmathSoaQSlerp( result, vec_madd( vec_madd( ((vec_float4){2.0f,2.0f,2.0f,2.0f}), t, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_sub( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), t ), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), &tmp0, &tmp1 ); +} + +static inline void vmathSoaQGet4Aos( const VmathSoaQuat *quat, VmathQuat *result0, VmathQuat *result1, VmathQuat *result2, VmathQuat *result3 ) +{ + vec_float4 tmp0, tmp1, tmp2, tmp3; + tmp0 = vec_mergeh( quat->x, quat->z ); + tmp1 = vec_mergeh( quat->y, quat->w ); + tmp2 = vec_mergel( quat->x, quat->z ); + tmp3 = vec_mergel( quat->y, quat->w ); + vmathQMakeFrom128( result0, vec_mergeh( tmp0, tmp1 ) ); + vmathQMakeFrom128( result1, vec_mergel( tmp0, tmp1 ) ); + vmathQMakeFrom128( result2, vec_mergeh( tmp2, tmp3 ) ); + vmathQMakeFrom128( result3, vec_mergel( tmp2, tmp3 ) ); +} + +static inline void vmathSoaQSetXYZ( VmathSoaQuat *result, const VmathSoaVector3 *vec ) +{ + result->x = vec->x; + result->y = vec->y; + result->z = vec->z; +} + +static inline void vmathSoaQGetXYZ( VmathSoaVector3 *result, const VmathSoaQuat *quat ) +{ + vmathSoaV3MakeFromElems( result, quat->x, quat->y, quat->z ); +} + +static inline void vmathSoaQSetX( VmathSoaQuat *result, vec_float4 _x ) +{ + result->x = _x; +} + +static inline vec_float4 vmathSoaQGetX( const VmathSoaQuat *quat ) +{ + return quat->x; +} + +static inline void vmathSoaQSetY( VmathSoaQuat *result, vec_float4 _y ) +{ + result->y = _y; +} + +static inline vec_float4 vmathSoaQGetY( const VmathSoaQuat *quat ) +{ + return quat->y; +} + +static inline void vmathSoaQSetZ( VmathSoaQuat *result, vec_float4 _z ) +{ + result->z = _z; +} + +static inline vec_float4 vmathSoaQGetZ( const VmathSoaQuat *quat ) +{ + return quat->z; +} + +static inline void vmathSoaQSetW( VmathSoaQuat *result, vec_float4 _w ) +{ + result->w = _w; +} + +static inline vec_float4 vmathSoaQGetW( const VmathSoaQuat *quat ) +{ + return quat->w; +} + +static inline void vmathSoaQSetElem( VmathSoaQuat *result, int idx, vec_float4 value ) +{ + *(&result->x + idx) = value; +} + +static inline vec_float4 vmathSoaQGetElem( const VmathSoaQuat *quat, int idx ) +{ + return *(&quat->x + idx); +} + +static inline void vmathSoaQAdd( VmathSoaQuat *result, const VmathSoaQuat *quat0, const VmathSoaQuat *quat1 ) +{ + result->x = vec_add( quat0->x, quat1->x ); + result->y = vec_add( quat0->y, quat1->y ); + result->z = vec_add( quat0->z, quat1->z ); + result->w = vec_add( quat0->w, quat1->w ); +} + +static inline void vmathSoaQSub( VmathSoaQuat *result, const VmathSoaQuat *quat0, const VmathSoaQuat *quat1 ) +{ + result->x = vec_sub( quat0->x, quat1->x ); + result->y = vec_sub( quat0->y, quat1->y ); + result->z = vec_sub( quat0->z, quat1->z ); + result->w = vec_sub( quat0->w, quat1->w ); +} + +static inline void vmathSoaQScalarMul( VmathSoaQuat *result, const VmathSoaQuat *quat, vec_float4 scalar ) +{ + result->x = vec_madd( quat->x, scalar, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + result->y = vec_madd( quat->y, scalar, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + result->z = vec_madd( quat->z, scalar, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + result->w = vec_madd( quat->w, scalar, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); +} + +static inline void vmathSoaQScalarDiv( VmathSoaQuat *result, const VmathSoaQuat *quat, vec_float4 scalar ) +{ + result->x = divf4( quat->x, scalar ); + result->y = divf4( quat->y, scalar ); + result->z = divf4( quat->z, scalar ); + result->w = divf4( quat->w, scalar ); +} + +static inline void vmathSoaQNeg( VmathSoaQuat *result, const VmathSoaQuat *quat ) +{ + result->x = negatef4( quat->x ); + result->y = negatef4( quat->y ); + result->z = negatef4( quat->z ); + result->w = negatef4( quat->w ); +} + +static inline vec_float4 vmathSoaQDot( const VmathSoaQuat *quat0, const VmathSoaQuat *quat1 ) +{ + vec_float4 result; + result = vec_madd( quat0->x, quat1->x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + result = vec_add( result, vec_madd( quat0->y, quat1->y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + result = vec_add( result, vec_madd( quat0->z, quat1->z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + result = vec_add( result, vec_madd( quat0->w, quat1->w, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + return result; +} + +static inline vec_float4 vmathSoaQNorm( const VmathSoaQuat *quat ) +{ + vec_float4 result; + result = vec_madd( quat->x, quat->x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + result = vec_add( result, vec_madd( quat->y, quat->y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + result = vec_add( result, vec_madd( quat->z, quat->z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + result = vec_add( result, vec_madd( quat->w, quat->w, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + return result; +} + +static inline vec_float4 vmathSoaQLength( const VmathSoaQuat *quat ) +{ + return sqrtf4( vmathSoaQNorm( quat ) ); +} + +static inline void vmathSoaQNormalize( VmathSoaQuat *result, const VmathSoaQuat *quat ) +{ + vec_float4 lenSqr, lenInv; + lenSqr = vmathSoaQNorm( quat ); + lenInv = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), sqrtf4( lenSqr ) ); + result->x = vec_madd( quat->x, lenInv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + result->y = vec_madd( quat->y, lenInv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + result->z = vec_madd( quat->z, lenInv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + result->w = vec_madd( quat->w, lenInv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); +} + +static inline void vmathSoaQMakeRotationArc( VmathSoaQuat *result, const VmathSoaVector3 *unitVec0, const VmathSoaVector3 *unitVec1 ) +{ + VmathSoaVector3 tmpV3_0, tmpV3_1; + vec_float4 cosHalfAngleX2, recipCosHalfAngleX2; + cosHalfAngleX2 = sqrtf4( vec_madd( ((vec_float4){2.0f,2.0f,2.0f,2.0f}), vec_add( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), vmathSoaV3Dot( unitVec0, unitVec1 ) ), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + recipCosHalfAngleX2 = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), cosHalfAngleX2 ); + vmathSoaV3Cross( &tmpV3_0, unitVec0, unitVec1 ); + vmathSoaV3ScalarMul( &tmpV3_1, &tmpV3_0, recipCosHalfAngleX2 ); + vmathSoaQMakeFromV3Scalar( result, &tmpV3_1, vec_madd( cosHalfAngleX2, ((vec_float4){0.5f,0.5f,0.5f,0.5f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); +} + +static inline void vmathSoaQMakeRotationAxis( VmathSoaQuat *result, vec_float4 radians, const VmathSoaVector3 *unitVec ) +{ + VmathSoaVector3 tmpV3_0; + vec_float4 s, c, angle; + angle = vec_madd( radians, ((vec_float4){0.5f,0.5f,0.5f,0.5f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + sincosf4( angle, &s, &c ); + vmathSoaV3ScalarMul( &tmpV3_0, unitVec, s ); + vmathSoaQMakeFromV3Scalar( result, &tmpV3_0, c ); +} + +static inline void vmathSoaQMakeRotationX( VmathSoaQuat *result, vec_float4 radians ) +{ + vec_float4 s, c, angle; + angle = vec_madd( radians, ((vec_float4){0.5f,0.5f,0.5f,0.5f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + sincosf4( angle, &s, &c ); + vmathSoaQMakeFromElems( result, s, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), c ); +} + +static inline void vmathSoaQMakeRotationY( VmathSoaQuat *result, vec_float4 radians ) +{ + vec_float4 s, c, angle; + angle = vec_madd( radians, ((vec_float4){0.5f,0.5f,0.5f,0.5f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + sincosf4( angle, &s, &c ); + vmathSoaQMakeFromElems( result, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), s, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), c ); +} + +static inline void vmathSoaQMakeRotationZ( VmathSoaQuat *result, vec_float4 radians ) +{ + vec_float4 s, c, angle; + angle = vec_madd( radians, ((vec_float4){0.5f,0.5f,0.5f,0.5f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + sincosf4( angle, &s, &c ); + vmathSoaQMakeFromElems( result, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), s, c ); +} + +static inline void vmathSoaQMul( VmathSoaQuat *result, const VmathSoaQuat *quat0, const VmathSoaQuat *quat1 ) +{ + vec_float4 tmpX, tmpY, tmpZ, tmpW; + tmpX = vec_sub( vec_add( vec_add( vec_madd( quat0->w, quat1->x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( quat0->x, quat1->w, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( quat0->y, quat1->z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( quat0->z, quat1->y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + tmpY = vec_sub( vec_add( vec_add( vec_madd( quat0->w, quat1->y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( quat0->y, quat1->w, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( quat0->z, quat1->x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( quat0->x, quat1->z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + tmpZ = vec_sub( vec_add( vec_add( vec_madd( quat0->w, quat1->z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( quat0->z, quat1->w, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( quat0->x, quat1->y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( quat0->y, quat1->x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + tmpW = vec_sub( vec_sub( vec_sub( vec_madd( quat0->w, quat1->w, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( quat0->x, quat1->x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( quat0->y, quat1->y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( quat0->z, quat1->z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + vmathSoaQMakeFromElems( result, tmpX, tmpY, tmpZ, tmpW ); +} + +static inline void vmathSoaQRotate( VmathSoaVector3 *result, const VmathSoaQuat *quat, const VmathSoaVector3 *vec ) +{ + vec_float4 tmpX, tmpY, tmpZ, tmpW; + tmpX = vec_sub( vec_add( vec_madd( quat->w, vec->x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( quat->y, vec->z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( quat->z, vec->y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + tmpY = vec_sub( vec_add( vec_madd( quat->w, vec->y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( quat->z, vec->x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( quat->x, vec->z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + tmpZ = vec_sub( vec_add( vec_madd( quat->w, vec->z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( quat->x, vec->y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( quat->y, vec->x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + tmpW = vec_add( vec_add( vec_madd( quat->x, vec->x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( quat->y, vec->y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( quat->z, vec->z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + result->x = vec_add( vec_sub( vec_add( vec_madd( tmpW, quat->x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( tmpX, quat->w, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( tmpY, quat->z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( tmpZ, quat->y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + result->y = vec_add( vec_sub( vec_add( vec_madd( tmpW, quat->y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( tmpY, quat->w, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( tmpZ, quat->x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( tmpX, quat->z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + result->z = vec_add( vec_sub( vec_add( vec_madd( tmpW, quat->z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( tmpZ, quat->w, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( tmpX, quat->y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( tmpY, quat->x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); +} + +static inline void vmathSoaQConj( VmathSoaQuat *result, const VmathSoaQuat *quat ) +{ + vmathSoaQMakeFromElems( result, negatef4( quat->x ), negatef4( quat->y ), negatef4( quat->z ), quat->w ); +} + +static inline void vmathSoaQSelect( VmathSoaQuat *result, const VmathSoaQuat *quat0, const VmathSoaQuat *quat1, vec_uint4 select1 ) +{ + result->x = vec_sel( quat0->x, quat1->x, select1 ); + result->y = vec_sel( quat0->y, quat1->y, select1 ); + result->z = vec_sel( quat0->z, quat1->z, select1 ); + result->w = vec_sel( quat0->w, quat1->w, select1 ); +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathSoaQPrint( const VmathSoaQuat *quat ) +{ + VmathQuat vec0, vec1, vec2, vec3; + vmathSoaQGet4Aos( quat, &vec0, &vec1, &vec2, &vec3 ); + printf("slot 0:\n"); + vmathQPrint( &vec0 ); + printf("slot 1:\n"); + vmathQPrint( &vec1 ); + printf("slot 2:\n"); + vmathQPrint( &vec2 ); + printf("slot 3:\n"); + vmathQPrint( &vec3 ); +} + +static inline void vmathSoaQPrints( const VmathSoaQuat *quat, const char *name ) +{ + VmathQuat vec0, vec1, vec2, vec3; + printf( "%s:\n", name ); + vmathSoaQGet4Aos( quat, &vec0, &vec1, &vec2, &vec3 ); + printf("slot 0:\n"); + vmathQPrint( &vec0 ); + printf("slot 1:\n"); + vmathQPrint( &vec1 ); + printf("slot 2:\n"); + vmathQPrint( &vec2 ); + printf("slot 3:\n"); + vmathQPrint( &vec3 ); +} + +#endif + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/ppu/c/quat_soa_v.h b/Extras/vectormathlibrary/include/vectormath/ppu/c/quat_soa_v.h new file mode 100644 index 000000000..601d9da92 --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/ppu/c/quat_soa_v.h @@ -0,0 +1,319 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_QUAT_SOA_V_C_H +#define _VECTORMATH_QUAT_SOA_V_C_H +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/*----------------------------------------------------------------------------- + * Definitions + */ +#ifndef _VECTORMATH_INTERNAL_FUNCTIONS +#define _VECTORMATH_INTERNAL_FUNCTIONS + +#endif + +static inline VmathSoaQuat vmathSoaQMakeFromElems_V( vec_float4 _x, vec_float4 _y, vec_float4 _z, vec_float4 _w ) +{ + VmathSoaQuat result; + vmathSoaQMakeFromElems(&result, _x, _y, _z, _w); + return result; +} + +static inline VmathSoaQuat vmathSoaQMakeFromV3Scalar_V( VmathSoaVector3 xyz, vec_float4 _w ) +{ + VmathSoaQuat result; + vmathSoaQMakeFromV3Scalar(&result, &xyz, _w); + return result; +} + +static inline VmathSoaQuat vmathSoaQMakeFromV4_V( VmathSoaVector4 vec ) +{ + VmathSoaQuat result; + vmathSoaQMakeFromV4(&result, &vec); + return result; +} + +static inline VmathSoaQuat vmathSoaQMakeFromScalar_V( vec_float4 scalar ) +{ + VmathSoaQuat result; + vmathSoaQMakeFromScalar(&result, scalar); + return result; +} + +static inline VmathSoaQuat vmathSoaQMakeFromAos_V( VmathQuat quat ) +{ + VmathSoaQuat result; + vmathSoaQMakeFromAos(&result, &quat); + return result; +} + +static inline VmathSoaQuat vmathSoaQMakeFrom4Aos_V( VmathQuat quat0, VmathQuat quat1, VmathQuat quat2, VmathQuat quat3 ) +{ + VmathSoaQuat result; + vmathSoaQMakeFrom4Aos(&result, &quat0, &quat1, &quat2, &quat3); + return result; +} + +static inline VmathSoaQuat vmathSoaQMakeIdentity_V( ) +{ + VmathSoaQuat result; + vmathSoaQMakeIdentity(&result); + return result; +} + +static inline VmathSoaQuat vmathSoaQLerp_V( vec_float4 t, VmathSoaQuat quat0, VmathSoaQuat quat1 ) +{ + VmathSoaQuat result; + vmathSoaQLerp(&result, t, &quat0, &quat1); + return result; +} + +static inline VmathSoaQuat vmathSoaQSlerp_V( vec_float4 t, VmathSoaQuat unitQuat0, VmathSoaQuat unitQuat1 ) +{ + VmathSoaQuat result; + vmathSoaQSlerp(&result, t, &unitQuat0, &unitQuat1); + return result; +} + +static inline VmathSoaQuat vmathSoaQSquad_V( vec_float4 t, VmathSoaQuat unitQuat0, VmathSoaQuat unitQuat1, VmathSoaQuat unitQuat2, VmathSoaQuat unitQuat3 ) +{ + VmathSoaQuat result; + vmathSoaQSquad(&result, t, &unitQuat0, &unitQuat1, &unitQuat2, &unitQuat3); + return result; +} + +static inline void vmathSoaQGet4Aos_V( VmathSoaQuat quat, VmathQuat *result0, VmathQuat *result1, VmathQuat *result2, VmathQuat *result3 ) +{ + vmathSoaQGet4Aos(&quat, result0, result1, result2, result3); +} + +static inline void vmathSoaQSetXYZ_V( VmathSoaQuat *result, VmathSoaVector3 vec ) +{ + vmathSoaQSetXYZ(result, &vec); +} + +static inline VmathSoaVector3 vmathSoaQGetXYZ_V( VmathSoaQuat quat ) +{ + VmathSoaVector3 result; + vmathSoaQGetXYZ(&result, &quat); + return result; +} + +static inline void vmathSoaQSetX_V( VmathSoaQuat *result, vec_float4 _x ) +{ + vmathSoaQSetX(result, _x); +} + +static inline vec_float4 vmathSoaQGetX_V( VmathSoaQuat quat ) +{ + return vmathSoaQGetX(&quat); +} + +static inline void vmathSoaQSetY_V( VmathSoaQuat *result, vec_float4 _y ) +{ + vmathSoaQSetY(result, _y); +} + +static inline vec_float4 vmathSoaQGetY_V( VmathSoaQuat quat ) +{ + return vmathSoaQGetY(&quat); +} + +static inline void vmathSoaQSetZ_V( VmathSoaQuat *result, vec_float4 _z ) +{ + vmathSoaQSetZ(result, _z); +} + +static inline vec_float4 vmathSoaQGetZ_V( VmathSoaQuat quat ) +{ + return vmathSoaQGetZ(&quat); +} + +static inline void vmathSoaQSetW_V( VmathSoaQuat *result, vec_float4 _w ) +{ + vmathSoaQSetW(result, _w); +} + +static inline vec_float4 vmathSoaQGetW_V( VmathSoaQuat quat ) +{ + return vmathSoaQGetW(&quat); +} + +static inline void vmathSoaQSetElem_V( VmathSoaQuat *result, int idx, vec_float4 value ) +{ + vmathSoaQSetElem(result, idx, value); +} + +static inline vec_float4 vmathSoaQGetElem_V( VmathSoaQuat quat, int idx ) +{ + return vmathSoaQGetElem(&quat, idx); +} + +static inline VmathSoaQuat vmathSoaQAdd_V( VmathSoaQuat quat0, VmathSoaQuat quat1 ) +{ + VmathSoaQuat result; + vmathSoaQAdd(&result, &quat0, &quat1); + return result; +} + +static inline VmathSoaQuat vmathSoaQSub_V( VmathSoaQuat quat0, VmathSoaQuat quat1 ) +{ + VmathSoaQuat result; + vmathSoaQSub(&result, &quat0, &quat1); + return result; +} + +static inline VmathSoaQuat vmathSoaQScalarMul_V( VmathSoaQuat quat, vec_float4 scalar ) +{ + VmathSoaQuat result; + vmathSoaQScalarMul(&result, &quat, scalar); + return result; +} + +static inline VmathSoaQuat vmathSoaQScalarDiv_V( VmathSoaQuat quat, vec_float4 scalar ) +{ + VmathSoaQuat result; + vmathSoaQScalarDiv(&result, &quat, scalar); + return result; +} + +static inline VmathSoaQuat vmathSoaQNeg_V( VmathSoaQuat quat ) +{ + VmathSoaQuat result; + vmathSoaQNeg(&result, &quat); + return result; +} + +static inline vec_float4 vmathSoaQDot_V( VmathSoaQuat quat0, VmathSoaQuat quat1 ) +{ + return vmathSoaQDot(&quat0, &quat1); +} + +static inline vec_float4 vmathSoaQNorm_V( VmathSoaQuat quat ) +{ + return vmathSoaQNorm(&quat); +} + +static inline vec_float4 vmathSoaQLength_V( VmathSoaQuat quat ) +{ + return vmathSoaQLength(&quat); +} + +static inline VmathSoaQuat vmathSoaQNormalize_V( VmathSoaQuat quat ) +{ + VmathSoaQuat result; + vmathSoaQNormalize(&result, &quat); + return result; +} + +static inline VmathSoaQuat vmathSoaQMakeRotationArc_V( VmathSoaVector3 unitVec0, VmathSoaVector3 unitVec1 ) +{ + VmathSoaQuat result; + vmathSoaQMakeRotationArc(&result, &unitVec0, &unitVec1); + return result; +} + +static inline VmathSoaQuat vmathSoaQMakeRotationAxis_V( vec_float4 radians, VmathSoaVector3 unitVec ) +{ + VmathSoaQuat result; + vmathSoaQMakeRotationAxis(&result, radians, &unitVec); + return result; +} + +static inline VmathSoaQuat vmathSoaQMakeRotationX_V( vec_float4 radians ) +{ + VmathSoaQuat result; + vmathSoaQMakeRotationX(&result, radians); + return result; +} + +static inline VmathSoaQuat vmathSoaQMakeRotationY_V( vec_float4 radians ) +{ + VmathSoaQuat result; + vmathSoaQMakeRotationY(&result, radians); + return result; +} + +static inline VmathSoaQuat vmathSoaQMakeRotationZ_V( vec_float4 radians ) +{ + VmathSoaQuat result; + vmathSoaQMakeRotationZ(&result, radians); + return result; +} + +static inline VmathSoaQuat vmathSoaQMul_V( VmathSoaQuat quat0, VmathSoaQuat quat1 ) +{ + VmathSoaQuat result; + vmathSoaQMul(&result, &quat0, &quat1); + return result; +} + +static inline VmathSoaVector3 vmathSoaQRotate_V( VmathSoaQuat quat, VmathSoaVector3 vec ) +{ + VmathSoaVector3 result; + vmathSoaQRotate(&result, &quat, &vec); + return result; +} + +static inline VmathSoaQuat vmathSoaQConj_V( VmathSoaQuat quat ) +{ + VmathSoaQuat result; + vmathSoaQConj(&result, &quat); + return result; +} + +static inline VmathSoaQuat vmathSoaQSelect_V( VmathSoaQuat quat0, VmathSoaQuat quat1, vec_uint4 select1 ) +{ + VmathSoaQuat result; + vmathSoaQSelect(&result, &quat0, &quat1, select1); + return result; +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathSoaQPrint_V( VmathSoaQuat quat ) +{ + vmathSoaQPrint(&quat); +} + +static inline void vmathSoaQPrints_V( VmathSoaQuat quat, const char *name ) +{ + vmathSoaQPrints(&quat, name); +} + +#endif + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/ppu/c/vec_aos.h b/Extras/vectormathlibrary/include/vectormath/ppu/c/vec_aos.h new file mode 100644 index 000000000..c7858cfe5 --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/ppu/c/vec_aos.h @@ -0,0 +1,1124 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_VEC_AOS_C_H +#define _VECTORMATH_VEC_AOS_C_H +#include +#include +#include +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/*----------------------------------------------------------------------------- + * Constants + * for permutes words are labeled [x,y,z,w] [a,b,c,d] + */ +#define _VECTORMATH_PERM_X 0x00010203 +#define _VECTORMATH_PERM_Y 0x04050607 +#define _VECTORMATH_PERM_Z 0x08090a0b +#define _VECTORMATH_PERM_W 0x0c0d0e0f +#define _VECTORMATH_PERM_A 0x10111213 +#define _VECTORMATH_PERM_B 0x14151617 +#define _VECTORMATH_PERM_C 0x18191a1b +#define _VECTORMATH_PERM_D 0x1c1d1e1f +#define _VECTORMATH_PERM_XYZA (vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_X, _VECTORMATH_PERM_Y, _VECTORMATH_PERM_Z, _VECTORMATH_PERM_A } +#define _VECTORMATH_PERM_ZXYW (vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_Z, _VECTORMATH_PERM_X, _VECTORMATH_PERM_Y, _VECTORMATH_PERM_W } +#define _VECTORMATH_PERM_YZXW (vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_Y, _VECTORMATH_PERM_Z, _VECTORMATH_PERM_X, _VECTORMATH_PERM_W } +#define _VECTORMATH_PERM_YZAB (vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_Y, _VECTORMATH_PERM_Z, _VECTORMATH_PERM_A, _VECTORMATH_PERM_B } +#define _VECTORMATH_PERM_ZABC (vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_Z, _VECTORMATH_PERM_A, _VECTORMATH_PERM_B, _VECTORMATH_PERM_C } +#define _VECTORMATH_PERM_XYAW (vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_X, _VECTORMATH_PERM_Y, _VECTORMATH_PERM_A, _VECTORMATH_PERM_W } +#define _VECTORMATH_PERM_XAZW (vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_X, _VECTORMATH_PERM_A, _VECTORMATH_PERM_Z, _VECTORMATH_PERM_W } +#define _VECTORMATH_MASK_0xF000 (vec_uint4){ 0xffffffff, 0, 0, 0 } +#define _VECTORMATH_MASK_0x0F00 (vec_uint4){ 0, 0xffffffff, 0, 0 } +#define _VECTORMATH_MASK_0x00F0 (vec_uint4){ 0, 0, 0xffffffff, 0 } +#define _VECTORMATH_MASK_0x000F (vec_uint4){ 0, 0, 0, 0xffffffff } +#define _VECTORMATH_UNIT_1000 (vec_float4){ 1.0f, 0.0f, 0.0f, 0.0f } +#define _VECTORMATH_UNIT_0100 (vec_float4){ 0.0f, 1.0f, 0.0f, 0.0f } +#define _VECTORMATH_UNIT_0010 (vec_float4){ 0.0f, 0.0f, 1.0f, 0.0f } +#define _VECTORMATH_UNIT_0001 (vec_float4){ 0.0f, 0.0f, 0.0f, 1.0f } +#define _VECTORMATH_SLERP_TOL 0.999f + +/*----------------------------------------------------------------------------- + * Definitions + */ +#ifndef _VECTORMATH_INTERNAL_FUNCTIONS +#define _VECTORMATH_INTERNAL_FUNCTIONS + +static inline vec_float4 _vmathVfDot3( vec_float4 vec0, vec_float4 vec1 ) +{ + vec_float4 result; + result = vec_madd( vec0, vec1, (vec_float4){0.0f,0.0f,0.0f,0.0f} ); + result = vec_madd( vec_sld( vec0, vec0, 4 ), vec_sld( vec1, vec1, 4 ), result ); + return vec_madd( vec_sld( vec0, vec0, 8 ), vec_sld( vec1, vec1, 8 ), result ); +} + +static inline vec_float4 _vmathVfDot4( vec_float4 vec0, vec_float4 vec1 ) +{ + vec_float4 result; + result = vec_madd( vec0, vec1, (vec_float4){0.0f,0.0f,0.0f,0.0f} ); + result = vec_madd( vec_sld( vec0, vec0, 4 ), vec_sld( vec1, vec1, 4 ), result ); + return vec_add( vec_sld( result, result, 8 ), result ); +} + +static inline vec_float4 _vmathVfCross( vec_float4 vec0, vec_float4 vec1 ) +{ + vec_float4 tmp0, tmp1, tmp2, tmp3, result; + tmp0 = vec_perm( vec0, vec0, _VECTORMATH_PERM_YZXW ); + tmp1 = vec_perm( vec1, vec1, _VECTORMATH_PERM_ZXYW ); + tmp2 = vec_perm( vec0, vec0, _VECTORMATH_PERM_ZXYW ); + tmp3 = vec_perm( vec1, vec1, _VECTORMATH_PERM_YZXW ); + result = vec_madd( tmp0, tmp1, (vec_float4){0.0f,0.0f,0.0f,0.0f} ); + result = vec_nmsub( tmp2, tmp3, result ); + return result; +} + +static inline vec_uint4 _vmathVfToHalfFloatsUnpacked(vec_float4 v) +{ + vec_int4 bexp; + vec_uint4 mant, sign, hfloat; + vec_uint4 notZero, isInf; + const vec_uint4 hfloatInf = (vec_uint4){0x00007c00u,0x00007c00u,0x00007c00u,0x00007c00u}; + const vec_uint4 mergeMant = (vec_uint4){0x000003ffu,0x000003ffu,0x000003ffu,0x000003ffu}; + const vec_uint4 mergeSign = (vec_uint4){0x00008000u,0x00008000u,0x00008000u,0x00008000u}; + + sign = vec_sr((vec_uint4)v, (vec_uint4){16,16,16,16}); + mant = vec_sr((vec_uint4)v, (vec_uint4){13,13,13,13}); + bexp = vec_and(vec_sr((vec_int4)v, (vec_uint4){23,23,23,23}), (vec_int4){0xff,0xff,0xff,0xff}); + + notZero = (vec_uint4)vec_cmpgt(bexp, (vec_int4){112,112,112,112}); + isInf = (vec_uint4)vec_cmpgt(bexp, (vec_int4){142,142,142,142}); + + bexp = vec_add(bexp, (vec_int4){-112,-112,-112,-112}); + bexp = vec_sl(bexp, (vec_uint4){10,10,10,10}); + + hfloat = vec_sel((vec_uint4)bexp, mant, mergeMant); + hfloat = vec_sel((vec_uint4){0,0,0,0}, hfloat, notZero); + hfloat = vec_sel(hfloat, hfloatInf, isInf); + hfloat = vec_sel(hfloat, sign, mergeSign); + + return hfloat; +} + +static inline vec_ushort8 _vmath2VfToHalfFloats(vec_float4 u, vec_float4 v) +{ + vec_uint4 hfloat_u, hfloat_v; + const vec_uchar16 pack = (vec_uchar16){2,3,6,7,10,11,14,15,18,19,22,23,26,27,30,31}; + hfloat_u = _vmathVfToHalfFloatsUnpacked(u); + hfloat_v = _vmathVfToHalfFloatsUnpacked(v); + return (vec_ushort8)vec_perm(hfloat_u, hfloat_v, pack); +} + +#ifndef __GNUC__ +#define __builtin_constant_p(x) 0 +#endif + +static inline vec_float4 _vmathVfInsert(vec_float4 dst, vec_float4 src, int slot) +{ +#ifdef __GNUC__ + if (__builtin_constant_p(slot)) { + dst = vec_sld(dst, dst, slot<<2); + dst = vec_sld(dst, src, 4); + if (slot != 3) dst = vec_sld(dst, dst, (3-slot)<<2); + return dst; + } else +#endif + { + vec_uchar16 shiftpattern = vec_lvsr( 0, (float *)(size_t)(slot<<2) ); + vec_uint4 selectmask = (vec_uint4)vec_perm( (vec_uint4){0,0,0,0}, _VECTORMATH_MASK_0xF000, shiftpattern ); + return vec_sel( dst, src, selectmask ); + } +} + +#define _vmathVfGetElement(vec, slot) ((float *)&(vec))[slot] +#ifdef _VECTORMATH_SET_CONSTS_IN_MEM +#define _vmathVfSetElement(vec, scalar, slot) ((float *)&(vec))[slot] = scalar +#else +#define _vmathVfSetElement(vec, scalar, slot) \ +{ \ + if (__builtin_constant_p(scalar)) { \ + (vec) = _vmathVfInsert(vec, (vec_float4){scalar, scalar, scalar, scalar}, slot); \ + } else { \ + ((float *)&(vec))[slot] = scalar; \ + } \ +} +#endif + +static inline vec_float4 _vmathVfSplatScalar(float scalar) +{ + vec_float4 result; + if (__builtin_constant_p(scalar)) { + result = (vec_float4){scalar, scalar, scalar, scalar}; + } else { + result = vec_ld(0, &scalar); + result = vec_splat(vec_perm(result, result, vec_lvsl(0, &scalar)), 0); + } + return result; +} + +static inline vec_uint4 _vmathVuiSplatScalar(unsigned int scalar) +{ + vec_uint4 result; + if (__builtin_constant_p(scalar)) { + result = (vec_uint4){scalar, scalar, scalar, scalar}; + } else { + result = vec_ld(0, &scalar); + result = vec_splat(vec_perm(result, result, vec_lvsl(0, &scalar)), 0); + } + return result; +} + +#endif + +static inline void vmathV3Copy( VmathVector3 *result, const VmathVector3 *vec ) +{ + result->vec128 = vec->vec128; +} + +static inline void vmathV3MakeFromElems( VmathVector3 *result, float _x, float _y, float _z ) +{ + if (__builtin_constant_p(_x) & __builtin_constant_p(_y) & __builtin_constant_p(_z)) { + result->vec128 = (vec_float4){_x, _y, _z, 0.0f}; + } else { + float *pf = (float *)&result->vec128; + pf[0] = _x; + pf[1] = _y; + pf[2] = _z; + } +} + +static inline void vmathV3MakeFromP3( VmathVector3 *result, const VmathPoint3 *pnt ) +{ + result->vec128 = pnt->vec128; +} + +static inline void vmathV3MakeFromScalar( VmathVector3 *result, float scalar ) +{ + result->vec128 = _vmathVfSplatScalar(scalar); +} + +static inline void vmathV3MakeFrom128( VmathVector3 *result, vec_float4 vf4 ) +{ + result->vec128 = vf4; +} + +static inline void vmathV3MakeXAxis( VmathVector3 *result ) +{ + result->vec128 = _VECTORMATH_UNIT_1000; +} + +static inline void vmathV3MakeYAxis( VmathVector3 *result ) +{ + result->vec128 = _VECTORMATH_UNIT_0100; +} + +static inline void vmathV3MakeZAxis( VmathVector3 *result ) +{ + result->vec128 = _VECTORMATH_UNIT_0010; +} + +static inline void vmathV3Lerp( VmathVector3 *result, float t, const VmathVector3 *vec0, const VmathVector3 *vec1 ) +{ + VmathVector3 tmpV3_0, tmpV3_1; + vmathV3Sub( &tmpV3_0, vec1, vec0 ); + vmathV3ScalarMul( &tmpV3_1, &tmpV3_0, t ); + vmathV3Add( result, vec0, &tmpV3_1 ); +} + +static inline void vmathV3Slerp( VmathVector3 *result, float t, const VmathVector3 *unitVec0, const VmathVector3 *unitVec1 ) +{ + vec_float4 scales, scale0, scale1, cosAngle, angle, tttt, oneMinusT, angles, sines; + vec_uint4 selectMask; + cosAngle = _vmathVfDot3( unitVec0->vec128, unitVec1->vec128 ); + cosAngle = vec_splat( cosAngle, 0 ); + selectMask = (vec_uint4)vec_cmpgt( ((vec_float4){_VECTORMATH_SLERP_TOL,_VECTORMATH_SLERP_TOL,_VECTORMATH_SLERP_TOL,_VECTORMATH_SLERP_TOL}), cosAngle ); + angle = acosf4( cosAngle ); + tttt = _vmathVfSplatScalar(t); + oneMinusT = vec_sub( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), tttt ); + angles = vec_mergeh( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), tttt ); + angles = vec_mergeh( angles, oneMinusT ); + angles = vec_madd( angles, angle, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + sines = sinf4( angles ); + scales = divf4( sines, vec_splat( sines, 0 ) ); + scale0 = vec_sel( oneMinusT, vec_splat( scales, 1 ), selectMask ); + scale1 = vec_sel( tttt, vec_splat( scales, 2 ), selectMask ); + result->vec128 = vec_madd( unitVec0->vec128, scale0, vec_madd( unitVec1->vec128, scale1, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); +} + +static inline vec_float4 vmathV3Get128( const VmathVector3 *vec ) +{ + return vec->vec128; +} + +static inline void vmathV3StoreXYZ( const VmathVector3 *vec, vec_float4 *quad ) +{ + vec_float4 dstVec = *quad; + vec_uint4 mask = _VECTORMATH_MASK_0x000F; + dstVec = vec_sel(vec->vec128, dstVec, mask); + *quad = dstVec; +} + +static inline void vmathV3LoadXYZArray( VmathVector3 *vec0, VmathVector3 *vec1, VmathVector3 *vec2, VmathVector3 *vec3, const vec_float4 *threeQuads ) +{ + vec_float4 xyzx, yzxy, zxyz, xyz1, xyz2, xyz3; + xyzx = threeQuads[0]; + yzxy = threeQuads[1]; + zxyz = threeQuads[2]; + xyz1 = vec_sld( xyzx, yzxy, 12 ); + xyz2 = vec_sld( yzxy, zxyz, 8 ); + xyz3 = vec_sld( zxyz, zxyz, 4 ); + vec0->vec128 = xyzx; + vec1->vec128 = xyz1; + vec2->vec128 = xyz2; + vec3->vec128 = xyz3; +} + +static inline void vmathV3StoreXYZArray( const VmathVector3 *vec0, const VmathVector3 *vec1, const VmathVector3 *vec2, const VmathVector3 *vec3, vec_float4 *threeQuads ) +{ + vec_float4 xyzx, yzxy, zxyz; + xyzx = vec_perm( vec0->vec128, vec1->vec128, _VECTORMATH_PERM_XYZA ); + yzxy = vec_perm( vec1->vec128, vec2->vec128, _VECTORMATH_PERM_YZAB ); + zxyz = vec_perm( vec2->vec128, vec3->vec128, _VECTORMATH_PERM_ZABC ); + threeQuads[0] = xyzx; + threeQuads[1] = yzxy; + threeQuads[2] = zxyz; +} + +static inline void vmathV3StoreHalfFloats( const VmathVector3 *vec0, const VmathVector3 *vec1, const VmathVector3 *vec2, const VmathVector3 *vec3, const VmathVector3 *vec4, const VmathVector3 *vec5, const VmathVector3 *vec6, const VmathVector3 *vec7, vec_ushort8 *threeQuads ) +{ + vec_float4 xyz0[3]; + vec_float4 xyz1[3]; + vmathV3StoreXYZArray( vec0, vec1, vec2, vec3, xyz0 ); + vmathV3StoreXYZArray( vec4, vec5, vec6, vec7, xyz1 ); + threeQuads[0] = _vmath2VfToHalfFloats(xyz0[0], xyz0[1]); + threeQuads[1] = _vmath2VfToHalfFloats(xyz0[2], xyz1[0]); + threeQuads[2] = _vmath2VfToHalfFloats(xyz1[1], xyz1[2]); +} + +static inline void vmathV3SetX( VmathVector3 *result, float _x ) +{ + _vmathVfSetElement(result->vec128, _x, 0); +} + +static inline float vmathV3GetX( const VmathVector3 *vec ) +{ + return _vmathVfGetElement(vec->vec128, 0); +} + +static inline void vmathV3SetY( VmathVector3 *result, float _y ) +{ + _vmathVfSetElement(result->vec128, _y, 1); +} + +static inline float vmathV3GetY( const VmathVector3 *vec ) +{ + return _vmathVfGetElement(vec->vec128, 1); +} + +static inline void vmathV3SetZ( VmathVector3 *result, float _z ) +{ + _vmathVfSetElement(result->vec128, _z, 2); +} + +static inline float vmathV3GetZ( const VmathVector3 *vec ) +{ + return _vmathVfGetElement(vec->vec128, 2); +} + +static inline void vmathV3SetElem( VmathVector3 *result, int idx, float value ) +{ + _vmathVfSetElement(result->vec128, value, idx); +} + +static inline float vmathV3GetElem( const VmathVector3 *vec, int idx ) +{ + return _vmathVfGetElement(vec->vec128, idx); +} + +static inline void vmathV3Add( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1 ) +{ + result->vec128 = vec_add( vec0->vec128, vec1->vec128 ); +} + +static inline void vmathV3Sub( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1 ) +{ + result->vec128 = vec_sub( vec0->vec128, vec1->vec128 ); +} + +static inline void vmathV3AddP3( VmathPoint3 *result, const VmathVector3 *vec, const VmathPoint3 *pnt1 ) +{ + result->vec128 = vec_add( vec->vec128, pnt1->vec128 ); +} + +static inline void vmathV3ScalarMul( VmathVector3 *result, const VmathVector3 *vec, float scalar ) +{ + result->vec128 = vec_madd( vec->vec128, _vmathVfSplatScalar(scalar), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); +} + +static inline void vmathV3ScalarDiv( VmathVector3 *result, const VmathVector3 *vec, float scalar ) +{ + result->vec128 = divf4( vec->vec128, _vmathVfSplatScalar(scalar) ); +} + +static inline void vmathV3Neg( VmathVector3 *result, const VmathVector3 *vec ) +{ + result->vec128 = negatef4( vec->vec128 ); +} + +static inline void vmathV3MulPerElem( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1 ) +{ + result->vec128 = vec_madd( vec0->vec128, vec1->vec128, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); +} + +static inline void vmathV3DivPerElem( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1 ) +{ + result->vec128 = divf4( vec0->vec128, vec1->vec128 ); +} + +static inline void vmathV3RecipPerElem( VmathVector3 *result, const VmathVector3 *vec ) +{ + result->vec128 = recipf4( vec->vec128 ); +} + +static inline void vmathV3SqrtPerElem( VmathVector3 *result, const VmathVector3 *vec ) +{ + result->vec128 = sqrtf4( vec->vec128 ); +} + +static inline void vmathV3RsqrtPerElem( VmathVector3 *result, const VmathVector3 *vec ) +{ + result->vec128 = rsqrtf4( vec->vec128 ); +} + +static inline void vmathV3AbsPerElem( VmathVector3 *result, const VmathVector3 *vec ) +{ + result->vec128 = fabsf4( vec->vec128 ); +} + +static inline void vmathV3CopySignPerElem( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1 ) +{ + result->vec128 = copysignf4( vec0->vec128, vec1->vec128 ); +} + +static inline void vmathV3MaxPerElem( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1 ) +{ + result->vec128 = fmaxf4( vec0->vec128, vec1->vec128 ); +} + +static inline float vmathV3MaxElem( const VmathVector3 *vec ) +{ + vec_float4 result; + result = fmaxf4( vec_splat( vec->vec128, 1 ), vec->vec128 ); + result = fmaxf4( vec_splat( vec->vec128, 2 ), result ); + return _vmathVfGetElement(result, 0); +} + +static inline void vmathV3MinPerElem( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1 ) +{ + result->vec128 = fminf4( vec0->vec128, vec1->vec128 ); +} + +static inline float vmathV3MinElem( const VmathVector3 *vec ) +{ + vec_float4 result; + result = fminf4( vec_splat( vec->vec128, 1 ), vec->vec128 ); + result = fminf4( vec_splat( vec->vec128, 2 ), result ); + return _vmathVfGetElement(result, 0); +} + +static inline float vmathV3Sum( const VmathVector3 *vec ) +{ + vec_float4 result; + result = vec_add( vec_splat( vec->vec128, 1 ), vec->vec128 ); + result = vec_add( vec_splat( vec->vec128, 2 ), result ); + return _vmathVfGetElement(result, 0); +} + +static inline float vmathV3Dot( const VmathVector3 *vec0, const VmathVector3 *vec1 ) +{ + vec_float4 result = _vmathVfDot3( vec0->vec128, vec1->vec128 ); + return _vmathVfGetElement(result, 0); +} + +static inline float vmathV3LengthSqr( const VmathVector3 *vec ) +{ + vec_float4 result = _vmathVfDot3( vec->vec128, vec->vec128 ); + return _vmathVfGetElement(result, 0); +} + +static inline float vmathV3Length( const VmathVector3 *vec ) +{ + return sqrtf( vmathV3LengthSqr( vec ) ); +} + +static inline void vmathV3Normalize( VmathVector3 *result, const VmathVector3 *vec ) +{ + vec_float4 dot = _vmathVfDot3( vec->vec128, vec->vec128 ); + dot = vec_splat( dot, 0 ); + result->vec128 = vec_madd( vec->vec128, rsqrtf4( dot ), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); +} + +static inline void vmathV3Cross( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1 ) +{ + result->vec128 = _vmathVfCross( vec0->vec128, vec1->vec128 ); +} + +static inline void vmathV3Select( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1, unsigned int select1 ) +{ + unsigned int tmp; + tmp = (unsigned int)-(select1 > 0); + result->vec128 = vec_sel( vec0->vec128, vec1->vec128, _vmathVuiSplatScalar(tmp) ); +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathV3Print( const VmathVector3 *vec ) +{ + union { vec_float4 v; float s[4]; } tmp; + tmp.v = vec->vec128; + printf( "( %f %f %f )\n", tmp.s[0], tmp.s[1], tmp.s[2] ); +} + +static inline void vmathV3Prints( const VmathVector3 *vec, const char *name ) +{ + union { vec_float4 v; float s[4]; } tmp; + tmp.v = vec->vec128; + printf( "%s: ( %f %f %f )\n", name, tmp.s[0], tmp.s[1], tmp.s[2] ); +} + +#endif + +static inline void vmathV4Copy( VmathVector4 *result, const VmathVector4 *vec ) +{ + result->vec128 = vec->vec128; +} + +static inline void vmathV4MakeFromElems( VmathVector4 *result, float _x, float _y, float _z, float _w ) +{ + if (__builtin_constant_p(_x) & __builtin_constant_p(_y) & + __builtin_constant_p(_z) & __builtin_constant_p(_w)) { + result->vec128 = (vec_float4){_x, _y, _z, _w}; + } else { + float *pf = (float *)&result->vec128; + pf[0] = _x; + pf[1] = _y; + pf[2] = _z; + pf[3] = _w; + } +} + +static inline void vmathV4MakeFromV3Scalar( VmathVector4 *result, const VmathVector3 *xyz, float _w ) +{ + result->vec128 = xyz->vec128; + _vmathVfSetElement(result->vec128, _w, 3); +} + +static inline void vmathV4MakeFromV3( VmathVector4 *result, const VmathVector3 *vec ) +{ + result->vec128 = vec->vec128; + result->vec128 = _vmathVfInsert(result->vec128, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), 3); +} + +static inline void vmathV4MakeFromP3( VmathVector4 *result, const VmathPoint3 *pnt ) +{ + result->vec128 = pnt->vec128; + result->vec128 = _vmathVfInsert(result->vec128, ((vec_float4){1.0f,1.0f,1.0f,1.0f}), 3); +} + +static inline void vmathV4MakeFromQ( VmathVector4 *result, const VmathQuat *quat ) +{ + result->vec128 = quat->vec128; +} + +static inline void vmathV4MakeFromScalar( VmathVector4 *result, float scalar ) +{ + result->vec128 = _vmathVfSplatScalar(scalar); +} + +static inline void vmathV4MakeFrom128( VmathVector4 *result, vec_float4 vf4 ) +{ + result->vec128 = vf4; +} + +static inline void vmathV4MakeXAxis( VmathVector4 *result ) +{ + result->vec128 = _VECTORMATH_UNIT_1000; +} + +static inline void vmathV4MakeYAxis( VmathVector4 *result ) +{ + result->vec128 = _VECTORMATH_UNIT_0100; +} + +static inline void vmathV4MakeZAxis( VmathVector4 *result ) +{ + result->vec128 = _VECTORMATH_UNIT_0010; +} + +static inline void vmathV4MakeWAxis( VmathVector4 *result ) +{ + result->vec128 = _VECTORMATH_UNIT_0001; +} + +static inline void vmathV4Lerp( VmathVector4 *result, float t, const VmathVector4 *vec0, const VmathVector4 *vec1 ) +{ + VmathVector4 tmpV4_0, tmpV4_1; + vmathV4Sub( &tmpV4_0, vec1, vec0 ); + vmathV4ScalarMul( &tmpV4_1, &tmpV4_0, t ); + vmathV4Add( result, vec0, &tmpV4_1 ); +} + +static inline void vmathV4Slerp( VmathVector4 *result, float t, const VmathVector4 *unitVec0, const VmathVector4 *unitVec1 ) +{ + vec_float4 scales, scale0, scale1, cosAngle, angle, tttt, oneMinusT, angles, sines; + vec_uint4 selectMask; + cosAngle = _vmathVfDot4( unitVec0->vec128, unitVec1->vec128 ); + cosAngle = vec_splat( cosAngle, 0 ); + selectMask = (vec_uint4)vec_cmpgt( ((vec_float4){_VECTORMATH_SLERP_TOL,_VECTORMATH_SLERP_TOL,_VECTORMATH_SLERP_TOL,_VECTORMATH_SLERP_TOL}), cosAngle ); + angle = acosf4( cosAngle ); + tttt = _vmathVfSplatScalar(t); + oneMinusT = vec_sub( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), tttt ); + angles = vec_mergeh( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), tttt ); + angles = vec_mergeh( angles, oneMinusT ); + angles = vec_madd( angles, angle, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + sines = sinf4( angles ); + scales = divf4( sines, vec_splat( sines, 0 ) ); + scale0 = vec_sel( oneMinusT, vec_splat( scales, 1 ), selectMask ); + scale1 = vec_sel( tttt, vec_splat( scales, 2 ), selectMask ); + result->vec128 = vec_madd( unitVec0->vec128, scale0, vec_madd( unitVec1->vec128, scale1, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); +} + +static inline vec_float4 vmathV4Get128( const VmathVector4 *vec ) +{ + return vec->vec128; +} + +static inline void vmathV4StoreHalfFloats( const VmathVector4 *vec0, const VmathVector4 *vec1, const VmathVector4 *vec2, const VmathVector4 *vec3, vec_ushort8 *twoQuads ) +{ + twoQuads[0] = _vmath2VfToHalfFloats(vec0->vec128, vec1->vec128); + twoQuads[1] = _vmath2VfToHalfFloats(vec2->vec128, vec3->vec128); +} + +static inline void vmathV4SetXYZ( VmathVector4 *result, const VmathVector3 *vec ) +{ + result->vec128 = vec_sel( vec->vec128, result->vec128, _VECTORMATH_MASK_0x000F ); +} + +static inline void vmathV4GetXYZ( VmathVector3 *result, const VmathVector4 *vec ) +{ + result->vec128 = vec->vec128; +} + +static inline void vmathV4SetX( VmathVector4 *result, float _x ) +{ + _vmathVfSetElement(result->vec128, _x, 0); +} + +static inline float vmathV4GetX( const VmathVector4 *vec ) +{ + return _vmathVfGetElement(vec->vec128, 0); +} + +static inline void vmathV4SetY( VmathVector4 *result, float _y ) +{ + _vmathVfSetElement(result->vec128, _y, 1); +} + +static inline float vmathV4GetY( const VmathVector4 *vec ) +{ + return _vmathVfGetElement(vec->vec128, 1); +} + +static inline void vmathV4SetZ( VmathVector4 *result, float _z ) +{ + _vmathVfSetElement(result->vec128, _z, 2); +} + +static inline float vmathV4GetZ( const VmathVector4 *vec ) +{ + return _vmathVfGetElement(vec->vec128, 2); +} + +static inline void vmathV4SetW( VmathVector4 *result, float _w ) +{ + _vmathVfSetElement(result->vec128, _w, 3); +} + +static inline float vmathV4GetW( const VmathVector4 *vec ) +{ + return _vmathVfGetElement(vec->vec128, 3); +} + +static inline void vmathV4SetElem( VmathVector4 *result, int idx, float value ) +{ + _vmathVfSetElement(result->vec128, value, idx); +} + +static inline float vmathV4GetElem( const VmathVector4 *vec, int idx ) +{ + return _vmathVfGetElement(vec->vec128, idx); +} + +static inline void vmathV4Add( VmathVector4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1 ) +{ + result->vec128 = vec_add( vec0->vec128, vec1->vec128 ); +} + +static inline void vmathV4Sub( VmathVector4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1 ) +{ + result->vec128 = vec_sub( vec0->vec128, vec1->vec128 ); +} + +static inline void vmathV4ScalarMul( VmathVector4 *result, const VmathVector4 *vec, float scalar ) +{ + result->vec128 = vec_madd( vec->vec128, _vmathVfSplatScalar(scalar), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); +} + +static inline void vmathV4ScalarDiv( VmathVector4 *result, const VmathVector4 *vec, float scalar ) +{ + result->vec128 = divf4( vec->vec128, _vmathVfSplatScalar(scalar) ); +} + +static inline void vmathV4Neg( VmathVector4 *result, const VmathVector4 *vec ) +{ + result->vec128 = negatef4( vec->vec128 ); +} + +static inline void vmathV4MulPerElem( VmathVector4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1 ) +{ + result->vec128 = vec_madd( vec0->vec128, vec1->vec128, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); +} + +static inline void vmathV4DivPerElem( VmathVector4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1 ) +{ + result->vec128 = divf4( vec0->vec128, vec1->vec128 ); +} + +static inline void vmathV4RecipPerElem( VmathVector4 *result, const VmathVector4 *vec ) +{ + result->vec128 = recipf4( vec->vec128 ); +} + +static inline void vmathV4SqrtPerElem( VmathVector4 *result, const VmathVector4 *vec ) +{ + result->vec128 = sqrtf4( vec->vec128 ); +} + +static inline void vmathV4RsqrtPerElem( VmathVector4 *result, const VmathVector4 *vec ) +{ + result->vec128 = rsqrtf4( vec->vec128 ); +} + +static inline void vmathV4AbsPerElem( VmathVector4 *result, const VmathVector4 *vec ) +{ + result->vec128 = fabsf4( vec->vec128 ); +} + +static inline void vmathV4CopySignPerElem( VmathVector4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1 ) +{ + result->vec128 = copysignf4( vec0->vec128, vec1->vec128 ); +} + +static inline void vmathV4MaxPerElem( VmathVector4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1 ) +{ + result->vec128 = fmaxf4( vec0->vec128, vec1->vec128 ); +} + +static inline float vmathV4MaxElem( const VmathVector4 *vec ) +{ + vec_float4 result; + result = fmaxf4( vec_splat( vec->vec128, 1 ), vec->vec128 ); + result = fmaxf4( vec_splat( vec->vec128, 2 ), result ); + result = fmaxf4( vec_splat( vec->vec128, 3 ), result ); + return _vmathVfGetElement(result, 0); +} + +static inline void vmathV4MinPerElem( VmathVector4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1 ) +{ + result->vec128 = fminf4( vec0->vec128, vec1->vec128 ); +} + +static inline float vmathV4MinElem( const VmathVector4 *vec ) +{ + vec_float4 result; + result = fminf4( vec_splat( vec->vec128, 1 ), vec->vec128 ); + result = fminf4( vec_splat( vec->vec128, 2 ), result ); + result = fminf4( vec_splat( vec->vec128, 3 ), result ); + return _vmathVfGetElement(result, 0); +} + +static inline float vmathV4Sum( const VmathVector4 *vec ) +{ + vec_float4 result; + result = vec_add( vec_splat( vec->vec128, 1 ), vec->vec128 ); + result = vec_add( vec_splat( vec->vec128, 2 ), result ); + result = vec_add( vec_splat( vec->vec128, 3 ), result ); + return _vmathVfGetElement(result, 0); +} + +static inline float vmathV4Dot( const VmathVector4 *vec0, const VmathVector4 *vec1 ) +{ + vec_float4 result = _vmathVfDot4( vec0->vec128, vec1->vec128 ); + return _vmathVfGetElement(result, 0); +} + +static inline float vmathV4LengthSqr( const VmathVector4 *vec ) +{ + vec_float4 result = _vmathVfDot4( vec->vec128, vec->vec128 ); + return _vmathVfGetElement(result, 0); +} + +static inline float vmathV4Length( const VmathVector4 *vec ) +{ + return sqrtf( vmathV4LengthSqr( vec ) ); +} + +static inline void vmathV4Normalize( VmathVector4 *result, const VmathVector4 *vec ) +{ + vec_float4 dot = _vmathVfDot4( vec->vec128, vec->vec128 ); + result->vec128 = vec_madd( vec->vec128, rsqrtf4( dot ), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); +} + +static inline void vmathV4Select( VmathVector4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1, unsigned int select1 ) +{ + unsigned int tmp; + tmp = (unsigned int)-(select1 > 0); + result->vec128 = vec_sel( vec0->vec128, vec1->vec128, _vmathVuiSplatScalar(tmp) ); +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathV4Print( const VmathVector4 *vec ) +{ + union { vec_float4 v; float s[4]; } tmp; + tmp.v = vec->vec128; + printf( "( %f %f %f %f )\n", tmp.s[0], tmp.s[1], tmp.s[2], tmp.s[3] ); +} + +static inline void vmathV4Prints( const VmathVector4 *vec, const char *name ) +{ + union { vec_float4 v; float s[4]; } tmp; + tmp.v = vec->vec128; + printf( "%s: ( %f %f %f %f )\n", name, tmp.s[0], tmp.s[1], tmp.s[2], tmp.s[3] ); +} + +#endif + +static inline void vmathP3Copy( VmathPoint3 *result, const VmathPoint3 *pnt ) +{ + result->vec128 = pnt->vec128; +} + +static inline void vmathP3MakeFromElems( VmathPoint3 *result, float _x, float _y, float _z ) +{ + if (__builtin_constant_p(_x) & __builtin_constant_p(_y) & __builtin_constant_p(_z)) { + result->vec128 = (vec_float4){_x, _y, _z, 0.0f}; + } else { + float *pf = (float *)&result->vec128; + pf[0] = _x; + pf[1] = _y; + pf[2] = _z; + } +} + +static inline void vmathP3MakeFromV3( VmathPoint3 *result, const VmathVector3 *vec ) +{ + result->vec128 = vec->vec128; +} + +static inline void vmathP3MakeFromScalar( VmathPoint3 *result, float scalar ) +{ + result->vec128 = _vmathVfSplatScalar(scalar); +} + +static inline void vmathP3MakeFrom128( VmathPoint3 *result, vec_float4 vf4 ) +{ + result->vec128 = vf4; +} + +static inline void vmathP3Lerp( VmathPoint3 *result, float t, const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ) +{ + VmathVector3 tmpV3_0, tmpV3_1; + vmathP3Sub( &tmpV3_0, pnt1, pnt0 ); + vmathV3ScalarMul( &tmpV3_1, &tmpV3_0, t ); + vmathP3AddV3( result, pnt0, &tmpV3_1 ); +} + +static inline vec_float4 vmathP3Get128( const VmathPoint3 *pnt ) +{ + return pnt->vec128; +} + +static inline void vmathP3StoreXYZ( const VmathPoint3 *pnt, vec_float4 *quad ) +{ + vec_float4 dstVec = *quad; + vec_uint4 mask = _VECTORMATH_MASK_0x000F; + dstVec = vec_sel(pnt->vec128, dstVec, mask); + *quad = dstVec; +} + +static inline void vmathP3LoadXYZArray( VmathPoint3 *pnt0, VmathPoint3 *pnt1, VmathPoint3 *pnt2, VmathPoint3 *pnt3, const vec_float4 *threeQuads ) +{ + vec_float4 xyzx, yzxy, zxyz, xyz1, xyz2, xyz3; + xyzx = threeQuads[0]; + yzxy = threeQuads[1]; + zxyz = threeQuads[2]; + xyz1 = vec_sld( xyzx, yzxy, 12 ); + xyz2 = vec_sld( yzxy, zxyz, 8 ); + xyz3 = vec_sld( zxyz, zxyz, 4 ); + pnt0->vec128 = xyzx; + pnt1->vec128 = xyz1; + pnt2->vec128 = xyz2; + pnt3->vec128 = xyz3; +} + +static inline void vmathP3StoreXYZArray( const VmathPoint3 *pnt0, const VmathPoint3 *pnt1, const VmathPoint3 *pnt2, const VmathPoint3 *pnt3, vec_float4 *threeQuads ) +{ + vec_float4 xyzx, yzxy, zxyz; + xyzx = vec_perm( pnt0->vec128, pnt1->vec128, _VECTORMATH_PERM_XYZA ); + yzxy = vec_perm( pnt1->vec128, pnt2->vec128, _VECTORMATH_PERM_YZAB ); + zxyz = vec_perm( pnt2->vec128, pnt3->vec128, _VECTORMATH_PERM_ZABC ); + threeQuads[0] = xyzx; + threeQuads[1] = yzxy; + threeQuads[2] = zxyz; +} + +static inline void vmathP3StoreHalfFloats( const VmathPoint3 *pnt0, const VmathPoint3 *pnt1, const VmathPoint3 *pnt2, const VmathPoint3 *pnt3, const VmathPoint3 *pnt4, const VmathPoint3 *pnt5, const VmathPoint3 *pnt6, const VmathPoint3 *pnt7, vec_ushort8 *threeQuads ) +{ + vec_float4 xyz0[3]; + vec_float4 xyz1[3]; + vmathP3StoreXYZArray( pnt0, pnt1, pnt2, pnt3, xyz0 ); + vmathP3StoreXYZArray( pnt4, pnt5, pnt6, pnt7, xyz1 ); + threeQuads[0] = _vmath2VfToHalfFloats(xyz0[0], xyz0[1]); + threeQuads[1] = _vmath2VfToHalfFloats(xyz0[2], xyz1[0]); + threeQuads[2] = _vmath2VfToHalfFloats(xyz1[1], xyz1[2]); +} + +static inline void vmathP3SetX( VmathPoint3 *result, float _x ) +{ + _vmathVfSetElement(result->vec128, _x, 0); +} + +static inline float vmathP3GetX( const VmathPoint3 *pnt ) +{ + return _vmathVfGetElement(pnt->vec128, 0); +} + +static inline void vmathP3SetY( VmathPoint3 *result, float _y ) +{ + _vmathVfSetElement(result->vec128, _y, 1); +} + +static inline float vmathP3GetY( const VmathPoint3 *pnt ) +{ + return _vmathVfGetElement(pnt->vec128, 1); +} + +static inline void vmathP3SetZ( VmathPoint3 *result, float _z ) +{ + _vmathVfSetElement(result->vec128, _z, 2); +} + +static inline float vmathP3GetZ( const VmathPoint3 *pnt ) +{ + return _vmathVfGetElement(pnt->vec128, 2); +} + +static inline void vmathP3SetElem( VmathPoint3 *result, int idx, float value ) +{ + _vmathVfSetElement(result->vec128, value, idx); +} + +static inline float vmathP3GetElem( const VmathPoint3 *pnt, int idx ) +{ + return _vmathVfGetElement(pnt->vec128, idx); +} + +static inline void vmathP3Sub( VmathVector3 *result, const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ) +{ + result->vec128 = vec_sub( pnt0->vec128, pnt1->vec128 ); +} + +static inline void vmathP3AddV3( VmathPoint3 *result, const VmathPoint3 *pnt, const VmathVector3 *vec1 ) +{ + result->vec128 = vec_add( pnt->vec128, vec1->vec128 ); +} + +static inline void vmathP3SubV3( VmathPoint3 *result, const VmathPoint3 *pnt, const VmathVector3 *vec1 ) +{ + result->vec128 = vec_sub( pnt->vec128, vec1->vec128 ); +} + +static inline void vmathP3MulPerElem( VmathPoint3 *result, const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ) +{ + result->vec128 = vec_madd( pnt0->vec128, pnt1->vec128, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); +} + +static inline void vmathP3DivPerElem( VmathPoint3 *result, const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ) +{ + result->vec128 = divf4( pnt0->vec128, pnt1->vec128 ); +} + +static inline void vmathP3RecipPerElem( VmathPoint3 *result, const VmathPoint3 *pnt ) +{ + result->vec128 = recipf4( pnt->vec128 ); +} + +static inline void vmathP3SqrtPerElem( VmathPoint3 *result, const VmathPoint3 *pnt ) +{ + result->vec128 = sqrtf4( pnt->vec128 ); +} + +static inline void vmathP3RsqrtPerElem( VmathPoint3 *result, const VmathPoint3 *pnt ) +{ + result->vec128 = rsqrtf4( pnt->vec128 ); +} + +static inline void vmathP3AbsPerElem( VmathPoint3 *result, const VmathPoint3 *pnt ) +{ + result->vec128 = fabsf4( pnt->vec128 ); +} + +static inline void vmathP3CopySignPerElem( VmathPoint3 *result, const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ) +{ + result->vec128 = copysignf4( pnt0->vec128, pnt1->vec128 ); +} + +static inline void vmathP3MaxPerElem( VmathPoint3 *result, const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ) +{ + result->vec128 = fmaxf4( pnt0->vec128, pnt1->vec128 ); +} + +static inline float vmathP3MaxElem( const VmathPoint3 *pnt ) +{ + vec_float4 result; + result = fmaxf4( vec_splat( pnt->vec128, 1 ), pnt->vec128 ); + result = fmaxf4( vec_splat( pnt->vec128, 2 ), result ); + return _vmathVfGetElement(result, 0); +} + +static inline void vmathP3MinPerElem( VmathPoint3 *result, const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ) +{ + result->vec128 = fminf4( pnt0->vec128, pnt1->vec128 ); +} + +static inline float vmathP3MinElem( const VmathPoint3 *pnt ) +{ + vec_float4 result; + result = fminf4( vec_splat( pnt->vec128, 1 ), pnt->vec128 ); + result = fminf4( vec_splat( pnt->vec128, 2 ), result ); + return _vmathVfGetElement(result, 0); +} + +static inline float vmathP3Sum( const VmathPoint3 *pnt ) +{ + vec_float4 result; + result = vec_add( vec_splat( pnt->vec128, 1 ), pnt->vec128 ); + result = vec_add( vec_splat( pnt->vec128, 2 ), result ); + return _vmathVfGetElement(result, 0); +} + +static inline void vmathP3Scale( VmathPoint3 *result, const VmathPoint3 *pnt, float scaleVal ) +{ + VmathPoint3 tmpP3_0; + vmathP3MakeFromScalar( &tmpP3_0, scaleVal ); + vmathP3MulPerElem( result, pnt, &tmpP3_0 ); +} + +static inline void vmathP3NonUniformScale( VmathPoint3 *result, const VmathPoint3 *pnt, const VmathVector3 *scaleVec ) +{ + VmathPoint3 tmpP3_0; + vmathP3MakeFromV3( &tmpP3_0, scaleVec ); + vmathP3MulPerElem( result, pnt, &tmpP3_0 ); +} + +static inline float vmathP3Projection( const VmathPoint3 *pnt, const VmathVector3 *unitVec ) +{ + vec_float4 result = _vmathVfDot3( pnt->vec128, unitVec->vec128 ); + return _vmathVfGetElement(result, 0); +} + +static inline float vmathP3DistSqrFromOrigin( const VmathPoint3 *pnt ) +{ + VmathVector3 tmpV3_0; + vmathV3MakeFromP3( &tmpV3_0, pnt ); + return vmathV3LengthSqr( &tmpV3_0 ); +} + +static inline float vmathP3DistFromOrigin( const VmathPoint3 *pnt ) +{ + VmathVector3 tmpV3_0; + vmathV3MakeFromP3( &tmpV3_0, pnt ); + return vmathV3Length( &tmpV3_0 ); +} + +static inline float vmathP3DistSqr( const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ) +{ + VmathVector3 tmpV3_0; + vmathP3Sub( &tmpV3_0, pnt1, pnt0 ); + return vmathV3LengthSqr( &tmpV3_0 ); +} + +static inline float vmathP3Dist( const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ) +{ + VmathVector3 tmpV3_0; + vmathP3Sub( &tmpV3_0, pnt1, pnt0 ); + return vmathV3Length( &tmpV3_0 ); +} + +static inline void vmathP3Select( VmathPoint3 *result, const VmathPoint3 *pnt0, const VmathPoint3 *pnt1, unsigned int select1 ) +{ + unsigned int tmp; + tmp = (unsigned int)-(select1 > 0); + result->vec128 = vec_sel( pnt0->vec128, pnt1->vec128, _vmathVuiSplatScalar(tmp) ); +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathP3Print( const VmathPoint3 *pnt ) +{ + union { vec_float4 v; float s[4]; } tmp; + tmp.v = pnt->vec128; + printf( "( %f %f %f )\n", tmp.s[0], tmp.s[1], tmp.s[2] ); +} + +static inline void vmathP3Prints( const VmathPoint3 *pnt, const char *name ) +{ + union { vec_float4 v; float s[4]; } tmp; + tmp.v = pnt->vec128; + printf( "%s: ( %f %f %f )\n", name, tmp.s[0], tmp.s[1], tmp.s[2] ); +} + +#endif + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/ppu/c/vec_aos_v.h b/Extras/vectormathlibrary/include/vectormath/ppu/c/vec_aos_v.h new file mode 100644 index 000000000..6dcc79c72 --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/ppu/c/vec_aos_v.h @@ -0,0 +1,953 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_VEC_AOS_V_C_H +#define _VECTORMATH_VEC_AOS_V_C_H +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/*----------------------------------------------------------------------------- + * Constants + * for permutes words are labeled [x,y,z,w] [a,b,c,d] + */ +#define _VECTORMATH_PERM_X 0x00010203 +#define _VECTORMATH_PERM_Y 0x04050607 +#define _VECTORMATH_PERM_Z 0x08090a0b +#define _VECTORMATH_PERM_W 0x0c0d0e0f +#define _VECTORMATH_PERM_A 0x10111213 +#define _VECTORMATH_PERM_B 0x14151617 +#define _VECTORMATH_PERM_C 0x18191a1b +#define _VECTORMATH_PERM_D 0x1c1d1e1f +#define _VECTORMATH_PERM_XYZA (vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_X, _VECTORMATH_PERM_Y, _VECTORMATH_PERM_Z, _VECTORMATH_PERM_A } +#define _VECTORMATH_PERM_ZXYW (vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_Z, _VECTORMATH_PERM_X, _VECTORMATH_PERM_Y, _VECTORMATH_PERM_W } +#define _VECTORMATH_PERM_YZXW (vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_Y, _VECTORMATH_PERM_Z, _VECTORMATH_PERM_X, _VECTORMATH_PERM_W } +#define _VECTORMATH_PERM_YZAB (vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_Y, _VECTORMATH_PERM_Z, _VECTORMATH_PERM_A, _VECTORMATH_PERM_B } +#define _VECTORMATH_PERM_ZABC (vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_Z, _VECTORMATH_PERM_A, _VECTORMATH_PERM_B, _VECTORMATH_PERM_C } +#define _VECTORMATH_PERM_XYAW (vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_X, _VECTORMATH_PERM_Y, _VECTORMATH_PERM_A, _VECTORMATH_PERM_W } +#define _VECTORMATH_PERM_XAZW (vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_X, _VECTORMATH_PERM_A, _VECTORMATH_PERM_Z, _VECTORMATH_PERM_W } +#define _VECTORMATH_MASK_0xF000 (vec_uint4){ 0xffffffff, 0, 0, 0 } +#define _VECTORMATH_MASK_0x0F00 (vec_uint4){ 0, 0xffffffff, 0, 0 } +#define _VECTORMATH_MASK_0x00F0 (vec_uint4){ 0, 0, 0xffffffff, 0 } +#define _VECTORMATH_MASK_0x000F (vec_uint4){ 0, 0, 0, 0xffffffff } +#define _VECTORMATH_UNIT_1000 (vec_float4){ 1.0f, 0.0f, 0.0f, 0.0f } +#define _VECTORMATH_UNIT_0100 (vec_float4){ 0.0f, 1.0f, 0.0f, 0.0f } +#define _VECTORMATH_UNIT_0010 (vec_float4){ 0.0f, 0.0f, 1.0f, 0.0f } +#define _VECTORMATH_UNIT_0001 (vec_float4){ 0.0f, 0.0f, 0.0f, 1.0f } +#define _VECTORMATH_SLERP_TOL 0.999f + +/*----------------------------------------------------------------------------- + * Definitions + */ +#ifndef _VECTORMATH_INTERNAL_FUNCTIONS +#define _VECTORMATH_INTERNAL_FUNCTIONS + +#endif + +static inline VmathVector3 vmathV3MakeFromElems_V( float _x, float _y, float _z ) +{ + VmathVector3 result; + vmathV3MakeFromElems(&result, _x, _y, _z); + return result; +} + +static inline VmathVector3 vmathV3MakeFromP3_V( VmathPoint3 pnt ) +{ + VmathVector3 result; + vmathV3MakeFromP3(&result, &pnt); + return result; +} + +static inline VmathVector3 vmathV3MakeFromScalar_V( float scalar ) +{ + VmathVector3 result; + vmathV3MakeFromScalar(&result, scalar); + return result; +} + +static inline VmathVector3 vmathV3MakeFrom128_V( vec_float4 vf4 ) +{ + VmathVector3 result; + vmathV3MakeFrom128(&result, vf4); + return result; +} + +static inline VmathVector3 vmathV3MakeXAxis_V( ) +{ + VmathVector3 result; + vmathV3MakeXAxis(&result); + return result; +} + +static inline VmathVector3 vmathV3MakeYAxis_V( ) +{ + VmathVector3 result; + vmathV3MakeYAxis(&result); + return result; +} + +static inline VmathVector3 vmathV3MakeZAxis_V( ) +{ + VmathVector3 result; + vmathV3MakeZAxis(&result); + return result; +} + +static inline VmathVector3 vmathV3Lerp_V( float t, VmathVector3 vec0, VmathVector3 vec1 ) +{ + VmathVector3 result; + vmathV3Lerp(&result, t, &vec0, &vec1); + return result; +} + +static inline VmathVector3 vmathV3Slerp_V( float t, VmathVector3 unitVec0, VmathVector3 unitVec1 ) +{ + VmathVector3 result; + vmathV3Slerp(&result, t, &unitVec0, &unitVec1); + return result; +} + +static inline vec_float4 vmathV3Get128_V( VmathVector3 vec ) +{ + return vmathV3Get128(&vec); +} + +static inline void vmathV3StoreXYZ_V( VmathVector3 vec, vec_float4 *quad ) +{ + vmathV3StoreXYZ(&vec, quad); +} + +static inline void vmathV3LoadXYZArray_V( VmathVector3 *vec0, VmathVector3 *vec1, VmathVector3 *vec2, VmathVector3 *vec3, const vec_float4 *threeQuads ) +{ + vmathV3LoadXYZArray(vec0, vec1, vec2, vec3, threeQuads); +} + +static inline void vmathV3StoreXYZArray_V( VmathVector3 vec0, VmathVector3 vec1, VmathVector3 vec2, VmathVector3 vec3, vec_float4 *threeQuads ) +{ + vmathV3StoreXYZArray(&vec0, &vec1, &vec2, &vec3, threeQuads); +} + +static inline void vmathV3StoreHalfFloats_V( VmathVector3 vec0, VmathVector3 vec1, VmathVector3 vec2, VmathVector3 vec3, VmathVector3 vec4, VmathVector3 vec5, VmathVector3 vec6, VmathVector3 vec7, vec_ushort8 *threeQuads ) +{ + vmathV3StoreHalfFloats(&vec0, &vec1, &vec2, &vec3, &vec4, &vec5, &vec6, &vec7, threeQuads); +} + +static inline void vmathV3SetX_V( VmathVector3 *result, float _x ) +{ + vmathV3SetX(result, _x); +} + +static inline float vmathV3GetX_V( VmathVector3 vec ) +{ + return vmathV3GetX(&vec); +} + +static inline void vmathV3SetY_V( VmathVector3 *result, float _y ) +{ + vmathV3SetY(result, _y); +} + +static inline float vmathV3GetY_V( VmathVector3 vec ) +{ + return vmathV3GetY(&vec); +} + +static inline void vmathV3SetZ_V( VmathVector3 *result, float _z ) +{ + vmathV3SetZ(result, _z); +} + +static inline float vmathV3GetZ_V( VmathVector3 vec ) +{ + return vmathV3GetZ(&vec); +} + +static inline void vmathV3SetElem_V( VmathVector3 *result, int idx, float value ) +{ + vmathV3SetElem(result, idx, value); +} + +static inline float vmathV3GetElem_V( VmathVector3 vec, int idx ) +{ + return vmathV3GetElem(&vec, idx); +} + +static inline VmathVector3 vmathV3Add_V( VmathVector3 vec0, VmathVector3 vec1 ) +{ + VmathVector3 result; + vmathV3Add(&result, &vec0, &vec1); + return result; +} + +static inline VmathVector3 vmathV3Sub_V( VmathVector3 vec0, VmathVector3 vec1 ) +{ + VmathVector3 result; + vmathV3Sub(&result, &vec0, &vec1); + return result; +} + +static inline VmathPoint3 vmathV3AddP3_V( VmathVector3 vec, VmathPoint3 pnt1 ) +{ + VmathPoint3 result; + vmathV3AddP3(&result, &vec, &pnt1); + return result; +} + +static inline VmathVector3 vmathV3ScalarMul_V( VmathVector3 vec, float scalar ) +{ + VmathVector3 result; + vmathV3ScalarMul(&result, &vec, scalar); + return result; +} + +static inline VmathVector3 vmathV3ScalarDiv_V( VmathVector3 vec, float scalar ) +{ + VmathVector3 result; + vmathV3ScalarDiv(&result, &vec, scalar); + return result; +} + +static inline VmathVector3 vmathV3Neg_V( VmathVector3 vec ) +{ + VmathVector3 result; + vmathV3Neg(&result, &vec); + return result; +} + +static inline VmathVector3 vmathV3MulPerElem_V( VmathVector3 vec0, VmathVector3 vec1 ) +{ + VmathVector3 result; + vmathV3MulPerElem(&result, &vec0, &vec1); + return result; +} + +static inline VmathVector3 vmathV3DivPerElem_V( VmathVector3 vec0, VmathVector3 vec1 ) +{ + VmathVector3 result; + vmathV3DivPerElem(&result, &vec0, &vec1); + return result; +} + +static inline VmathVector3 vmathV3RecipPerElem_V( VmathVector3 vec ) +{ + VmathVector3 result; + vmathV3RecipPerElem(&result, &vec); + return result; +} + +static inline VmathVector3 vmathV3SqrtPerElem_V( VmathVector3 vec ) +{ + VmathVector3 result; + vmathV3SqrtPerElem(&result, &vec); + return result; +} + +static inline VmathVector3 vmathV3RsqrtPerElem_V( VmathVector3 vec ) +{ + VmathVector3 result; + vmathV3RsqrtPerElem(&result, &vec); + return result; +} + +static inline VmathVector3 vmathV3AbsPerElem_V( VmathVector3 vec ) +{ + VmathVector3 result; + vmathV3AbsPerElem(&result, &vec); + return result; +} + +static inline VmathVector3 vmathV3CopySignPerElem_V( VmathVector3 vec0, VmathVector3 vec1 ) +{ + VmathVector3 result; + vmathV3CopySignPerElem(&result, &vec0, &vec1); + return result; +} + +static inline VmathVector3 vmathV3MaxPerElem_V( VmathVector3 vec0, VmathVector3 vec1 ) +{ + VmathVector3 result; + vmathV3MaxPerElem(&result, &vec0, &vec1); + return result; +} + +static inline float vmathV3MaxElem_V( VmathVector3 vec ) +{ + return vmathV3MaxElem(&vec); +} + +static inline VmathVector3 vmathV3MinPerElem_V( VmathVector3 vec0, VmathVector3 vec1 ) +{ + VmathVector3 result; + vmathV3MinPerElem(&result, &vec0, &vec1); + return result; +} + +static inline float vmathV3MinElem_V( VmathVector3 vec ) +{ + return vmathV3MinElem(&vec); +} + +static inline float vmathV3Sum_V( VmathVector3 vec ) +{ + return vmathV3Sum(&vec); +} + +static inline float vmathV3Dot_V( VmathVector3 vec0, VmathVector3 vec1 ) +{ + return vmathV3Dot(&vec0, &vec1); +} + +static inline float vmathV3LengthSqr_V( VmathVector3 vec ) +{ + return vmathV3LengthSqr(&vec); +} + +static inline float vmathV3Length_V( VmathVector3 vec ) +{ + return vmathV3Length(&vec); +} + +static inline VmathVector3 vmathV3Normalize_V( VmathVector3 vec ) +{ + VmathVector3 result; + vmathV3Normalize(&result, &vec); + return result; +} + +static inline VmathVector3 vmathV3Cross_V( VmathVector3 vec0, VmathVector3 vec1 ) +{ + VmathVector3 result; + vmathV3Cross(&result, &vec0, &vec1); + return result; +} + +static inline VmathVector3 vmathV3Select_V( VmathVector3 vec0, VmathVector3 vec1, unsigned int select1 ) +{ + VmathVector3 result; + vmathV3Select(&result, &vec0, &vec1, select1); + return result; +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathV3Print_V( VmathVector3 vec ) +{ + vmathV3Print(&vec); +} + +static inline void vmathV3Prints_V( VmathVector3 vec, const char *name ) +{ + vmathV3Prints(&vec, name); +} + +#endif + +static inline VmathVector4 vmathV4MakeFromElems_V( float _x, float _y, float _z, float _w ) +{ + VmathVector4 result; + vmathV4MakeFromElems(&result, _x, _y, _z, _w); + return result; +} + +static inline VmathVector4 vmathV4MakeFromV3Scalar_V( VmathVector3 xyz, float _w ) +{ + VmathVector4 result; + vmathV4MakeFromV3Scalar(&result, &xyz, _w); + return result; +} + +static inline VmathVector4 vmathV4MakeFromV3_V( VmathVector3 vec ) +{ + VmathVector4 result; + vmathV4MakeFromV3(&result, &vec); + return result; +} + +static inline VmathVector4 vmathV4MakeFromP3_V( VmathPoint3 pnt ) +{ + VmathVector4 result; + vmathV4MakeFromP3(&result, &pnt); + return result; +} + +static inline VmathVector4 vmathV4MakeFromQ_V( VmathQuat quat ) +{ + VmathVector4 result; + vmathV4MakeFromQ(&result, &quat); + return result; +} + +static inline VmathVector4 vmathV4MakeFromScalar_V( float scalar ) +{ + VmathVector4 result; + vmathV4MakeFromScalar(&result, scalar); + return result; +} + +static inline VmathVector4 vmathV4MakeFrom128_V( vec_float4 vf4 ) +{ + VmathVector4 result; + vmathV4MakeFrom128(&result, vf4); + return result; +} + +static inline VmathVector4 vmathV4MakeXAxis_V( ) +{ + VmathVector4 result; + vmathV4MakeXAxis(&result); + return result; +} + +static inline VmathVector4 vmathV4MakeYAxis_V( ) +{ + VmathVector4 result; + vmathV4MakeYAxis(&result); + return result; +} + +static inline VmathVector4 vmathV4MakeZAxis_V( ) +{ + VmathVector4 result; + vmathV4MakeZAxis(&result); + return result; +} + +static inline VmathVector4 vmathV4MakeWAxis_V( ) +{ + VmathVector4 result; + vmathV4MakeWAxis(&result); + return result; +} + +static inline VmathVector4 vmathV4Lerp_V( float t, VmathVector4 vec0, VmathVector4 vec1 ) +{ + VmathVector4 result; + vmathV4Lerp(&result, t, &vec0, &vec1); + return result; +} + +static inline VmathVector4 vmathV4Slerp_V( float t, VmathVector4 unitVec0, VmathVector4 unitVec1 ) +{ + VmathVector4 result; + vmathV4Slerp(&result, t, &unitVec0, &unitVec1); + return result; +} + +static inline vec_float4 vmathV4Get128_V( VmathVector4 vec ) +{ + return vmathV4Get128(&vec); +} + +static inline void vmathV4StoreHalfFloats_V( VmathVector4 vec0, VmathVector4 vec1, VmathVector4 vec2, VmathVector4 vec3, vec_ushort8 *twoQuads ) +{ + vmathV4StoreHalfFloats(&vec0, &vec1, &vec2, &vec3, twoQuads); +} + +static inline void vmathV4SetXYZ_V( VmathVector4 *result, VmathVector3 vec ) +{ + vmathV4SetXYZ(result, &vec); +} + +static inline VmathVector3 vmathV4GetXYZ_V( VmathVector4 vec ) +{ + VmathVector3 result; + vmathV4GetXYZ(&result, &vec); + return result; +} + +static inline void vmathV4SetX_V( VmathVector4 *result, float _x ) +{ + vmathV4SetX(result, _x); +} + +static inline float vmathV4GetX_V( VmathVector4 vec ) +{ + return vmathV4GetX(&vec); +} + +static inline void vmathV4SetY_V( VmathVector4 *result, float _y ) +{ + vmathV4SetY(result, _y); +} + +static inline float vmathV4GetY_V( VmathVector4 vec ) +{ + return vmathV4GetY(&vec); +} + +static inline void vmathV4SetZ_V( VmathVector4 *result, float _z ) +{ + vmathV4SetZ(result, _z); +} + +static inline float vmathV4GetZ_V( VmathVector4 vec ) +{ + return vmathV4GetZ(&vec); +} + +static inline void vmathV4SetW_V( VmathVector4 *result, float _w ) +{ + vmathV4SetW(result, _w); +} + +static inline float vmathV4GetW_V( VmathVector4 vec ) +{ + return vmathV4GetW(&vec); +} + +static inline void vmathV4SetElem_V( VmathVector4 *result, int idx, float value ) +{ + vmathV4SetElem(result, idx, value); +} + +static inline float vmathV4GetElem_V( VmathVector4 vec, int idx ) +{ + return vmathV4GetElem(&vec, idx); +} + +static inline VmathVector4 vmathV4Add_V( VmathVector4 vec0, VmathVector4 vec1 ) +{ + VmathVector4 result; + vmathV4Add(&result, &vec0, &vec1); + return result; +} + +static inline VmathVector4 vmathV4Sub_V( VmathVector4 vec0, VmathVector4 vec1 ) +{ + VmathVector4 result; + vmathV4Sub(&result, &vec0, &vec1); + return result; +} + +static inline VmathVector4 vmathV4ScalarMul_V( VmathVector4 vec, float scalar ) +{ + VmathVector4 result; + vmathV4ScalarMul(&result, &vec, scalar); + return result; +} + +static inline VmathVector4 vmathV4ScalarDiv_V( VmathVector4 vec, float scalar ) +{ + VmathVector4 result; + vmathV4ScalarDiv(&result, &vec, scalar); + return result; +} + +static inline VmathVector4 vmathV4Neg_V( VmathVector4 vec ) +{ + VmathVector4 result; + vmathV4Neg(&result, &vec); + return result; +} + +static inline VmathVector4 vmathV4MulPerElem_V( VmathVector4 vec0, VmathVector4 vec1 ) +{ + VmathVector4 result; + vmathV4MulPerElem(&result, &vec0, &vec1); + return result; +} + +static inline VmathVector4 vmathV4DivPerElem_V( VmathVector4 vec0, VmathVector4 vec1 ) +{ + VmathVector4 result; + vmathV4DivPerElem(&result, &vec0, &vec1); + return result; +} + +static inline VmathVector4 vmathV4RecipPerElem_V( VmathVector4 vec ) +{ + VmathVector4 result; + vmathV4RecipPerElem(&result, &vec); + return result; +} + +static inline VmathVector4 vmathV4SqrtPerElem_V( VmathVector4 vec ) +{ + VmathVector4 result; + vmathV4SqrtPerElem(&result, &vec); + return result; +} + +static inline VmathVector4 vmathV4RsqrtPerElem_V( VmathVector4 vec ) +{ + VmathVector4 result; + vmathV4RsqrtPerElem(&result, &vec); + return result; +} + +static inline VmathVector4 vmathV4AbsPerElem_V( VmathVector4 vec ) +{ + VmathVector4 result; + vmathV4AbsPerElem(&result, &vec); + return result; +} + +static inline VmathVector4 vmathV4CopySignPerElem_V( VmathVector4 vec0, VmathVector4 vec1 ) +{ + VmathVector4 result; + vmathV4CopySignPerElem(&result, &vec0, &vec1); + return result; +} + +static inline VmathVector4 vmathV4MaxPerElem_V( VmathVector4 vec0, VmathVector4 vec1 ) +{ + VmathVector4 result; + vmathV4MaxPerElem(&result, &vec0, &vec1); + return result; +} + +static inline float vmathV4MaxElem_V( VmathVector4 vec ) +{ + return vmathV4MaxElem(&vec); +} + +static inline VmathVector4 vmathV4MinPerElem_V( VmathVector4 vec0, VmathVector4 vec1 ) +{ + VmathVector4 result; + vmathV4MinPerElem(&result, &vec0, &vec1); + return result; +} + +static inline float vmathV4MinElem_V( VmathVector4 vec ) +{ + return vmathV4MinElem(&vec); +} + +static inline float vmathV4Sum_V( VmathVector4 vec ) +{ + return vmathV4Sum(&vec); +} + +static inline float vmathV4Dot_V( VmathVector4 vec0, VmathVector4 vec1 ) +{ + return vmathV4Dot(&vec0, &vec1); +} + +static inline float vmathV4LengthSqr_V( VmathVector4 vec ) +{ + return vmathV4LengthSqr(&vec); +} + +static inline float vmathV4Length_V( VmathVector4 vec ) +{ + return vmathV4Length(&vec); +} + +static inline VmathVector4 vmathV4Normalize_V( VmathVector4 vec ) +{ + VmathVector4 result; + vmathV4Normalize(&result, &vec); + return result; +} + +static inline VmathVector4 vmathV4Select_V( VmathVector4 vec0, VmathVector4 vec1, unsigned int select1 ) +{ + VmathVector4 result; + vmathV4Select(&result, &vec0, &vec1, select1); + return result; +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathV4Print_V( VmathVector4 vec ) +{ + vmathV4Print(&vec); +} + +static inline void vmathV4Prints_V( VmathVector4 vec, const char *name ) +{ + vmathV4Prints(&vec, name); +} + +#endif + +static inline VmathPoint3 vmathP3MakeFromElems_V( float _x, float _y, float _z ) +{ + VmathPoint3 result; + vmathP3MakeFromElems(&result, _x, _y, _z); + return result; +} + +static inline VmathPoint3 vmathP3MakeFromV3_V( VmathVector3 vec ) +{ + VmathPoint3 result; + vmathP3MakeFromV3(&result, &vec); + return result; +} + +static inline VmathPoint3 vmathP3MakeFromScalar_V( float scalar ) +{ + VmathPoint3 result; + vmathP3MakeFromScalar(&result, scalar); + return result; +} + +static inline VmathPoint3 vmathP3MakeFrom128_V( vec_float4 vf4 ) +{ + VmathPoint3 result; + vmathP3MakeFrom128(&result, vf4); + return result; +} + +static inline VmathPoint3 vmathP3Lerp_V( float t, VmathPoint3 pnt0, VmathPoint3 pnt1 ) +{ + VmathPoint3 result; + vmathP3Lerp(&result, t, &pnt0, &pnt1); + return result; +} + +static inline vec_float4 vmathP3Get128_V( VmathPoint3 pnt ) +{ + return vmathP3Get128(&pnt); +} + +static inline void vmathP3StoreXYZ_V( VmathPoint3 pnt, vec_float4 *quad ) +{ + vmathP3StoreXYZ(&pnt, quad); +} + +static inline void vmathP3LoadXYZArray_V( VmathPoint3 *pnt0, VmathPoint3 *pnt1, VmathPoint3 *pnt2, VmathPoint3 *pnt3, const vec_float4 *threeQuads ) +{ + vmathP3LoadXYZArray(pnt0, pnt1, pnt2, pnt3, threeQuads); +} + +static inline void vmathP3StoreXYZArray_V( VmathPoint3 pnt0, VmathPoint3 pnt1, VmathPoint3 pnt2, VmathPoint3 pnt3, vec_float4 *threeQuads ) +{ + vmathP3StoreXYZArray(&pnt0, &pnt1, &pnt2, &pnt3, threeQuads); +} + +static inline void vmathP3StoreHalfFloats_V( VmathPoint3 pnt0, VmathPoint3 pnt1, VmathPoint3 pnt2, VmathPoint3 pnt3, VmathPoint3 pnt4, VmathPoint3 pnt5, VmathPoint3 pnt6, VmathPoint3 pnt7, vec_ushort8 *threeQuads ) +{ + vmathP3StoreHalfFloats(&pnt0, &pnt1, &pnt2, &pnt3, &pnt4, &pnt5, &pnt6, &pnt7, threeQuads); +} + +static inline void vmathP3SetX_V( VmathPoint3 *result, float _x ) +{ + vmathP3SetX(result, _x); +} + +static inline float vmathP3GetX_V( VmathPoint3 pnt ) +{ + return vmathP3GetX(&pnt); +} + +static inline void vmathP3SetY_V( VmathPoint3 *result, float _y ) +{ + vmathP3SetY(result, _y); +} + +static inline float vmathP3GetY_V( VmathPoint3 pnt ) +{ + return vmathP3GetY(&pnt); +} + +static inline void vmathP3SetZ_V( VmathPoint3 *result, float _z ) +{ + vmathP3SetZ(result, _z); +} + +static inline float vmathP3GetZ_V( VmathPoint3 pnt ) +{ + return vmathP3GetZ(&pnt); +} + +static inline void vmathP3SetElem_V( VmathPoint3 *result, int idx, float value ) +{ + vmathP3SetElem(result, idx, value); +} + +static inline float vmathP3GetElem_V( VmathPoint3 pnt, int idx ) +{ + return vmathP3GetElem(&pnt, idx); +} + +static inline VmathVector3 vmathP3Sub_V( VmathPoint3 pnt0, VmathPoint3 pnt1 ) +{ + VmathVector3 result; + vmathP3Sub(&result, &pnt0, &pnt1); + return result; +} + +static inline VmathPoint3 vmathP3AddV3_V( VmathPoint3 pnt, VmathVector3 vec1 ) +{ + VmathPoint3 result; + vmathP3AddV3(&result, &pnt, &vec1); + return result; +} + +static inline VmathPoint3 vmathP3SubV3_V( VmathPoint3 pnt, VmathVector3 vec1 ) +{ + VmathPoint3 result; + vmathP3SubV3(&result, &pnt, &vec1); + return result; +} + +static inline VmathPoint3 vmathP3MulPerElem_V( VmathPoint3 pnt0, VmathPoint3 pnt1 ) +{ + VmathPoint3 result; + vmathP3MulPerElem(&result, &pnt0, &pnt1); + return result; +} + +static inline VmathPoint3 vmathP3DivPerElem_V( VmathPoint3 pnt0, VmathPoint3 pnt1 ) +{ + VmathPoint3 result; + vmathP3DivPerElem(&result, &pnt0, &pnt1); + return result; +} + +static inline VmathPoint3 vmathP3RecipPerElem_V( VmathPoint3 pnt ) +{ + VmathPoint3 result; + vmathP3RecipPerElem(&result, &pnt); + return result; +} + +static inline VmathPoint3 vmathP3SqrtPerElem_V( VmathPoint3 pnt ) +{ + VmathPoint3 result; + vmathP3SqrtPerElem(&result, &pnt); + return result; +} + +static inline VmathPoint3 vmathP3RsqrtPerElem_V( VmathPoint3 pnt ) +{ + VmathPoint3 result; + vmathP3RsqrtPerElem(&result, &pnt); + return result; +} + +static inline VmathPoint3 vmathP3AbsPerElem_V( VmathPoint3 pnt ) +{ + VmathPoint3 result; + vmathP3AbsPerElem(&result, &pnt); + return result; +} + +static inline VmathPoint3 vmathP3CopySignPerElem_V( VmathPoint3 pnt0, VmathPoint3 pnt1 ) +{ + VmathPoint3 result; + vmathP3CopySignPerElem(&result, &pnt0, &pnt1); + return result; +} + +static inline VmathPoint3 vmathP3MaxPerElem_V( VmathPoint3 pnt0, VmathPoint3 pnt1 ) +{ + VmathPoint3 result; + vmathP3MaxPerElem(&result, &pnt0, &pnt1); + return result; +} + +static inline float vmathP3MaxElem_V( VmathPoint3 pnt ) +{ + return vmathP3MaxElem(&pnt); +} + +static inline VmathPoint3 vmathP3MinPerElem_V( VmathPoint3 pnt0, VmathPoint3 pnt1 ) +{ + VmathPoint3 result; + vmathP3MinPerElem(&result, &pnt0, &pnt1); + return result; +} + +static inline float vmathP3MinElem_V( VmathPoint3 pnt ) +{ + return vmathP3MinElem(&pnt); +} + +static inline float vmathP3Sum_V( VmathPoint3 pnt ) +{ + return vmathP3Sum(&pnt); +} + +static inline VmathPoint3 vmathP3Scale_V( VmathPoint3 pnt, float scaleVal ) +{ + VmathPoint3 result; + vmathP3Scale(&result, &pnt, scaleVal); + return result; +} + +static inline VmathPoint3 vmathP3NonUniformScale_V( VmathPoint3 pnt, VmathVector3 scaleVec ) +{ + VmathPoint3 result; + vmathP3NonUniformScale(&result, &pnt, &scaleVec); + return result; +} + +static inline float vmathP3Projection_V( VmathPoint3 pnt, VmathVector3 unitVec ) +{ + return vmathP3Projection(&pnt, &unitVec); +} + +static inline float vmathP3DistSqrFromOrigin_V( VmathPoint3 pnt ) +{ + return vmathP3DistSqrFromOrigin(&pnt); +} + +static inline float vmathP3DistFromOrigin_V( VmathPoint3 pnt ) +{ + return vmathP3DistFromOrigin(&pnt); +} + +static inline float vmathP3DistSqr_V( VmathPoint3 pnt0, VmathPoint3 pnt1 ) +{ + return vmathP3DistSqr(&pnt0, &pnt1); +} + +static inline float vmathP3Dist_V( VmathPoint3 pnt0, VmathPoint3 pnt1 ) +{ + return vmathP3Dist(&pnt0, &pnt1); +} + +static inline VmathPoint3 vmathP3Select_V( VmathPoint3 pnt0, VmathPoint3 pnt1, unsigned int select1 ) +{ + VmathPoint3 result; + vmathP3Select(&result, &pnt0, &pnt1, select1); + return result; +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathP3Print_V( VmathPoint3 pnt ) +{ + vmathP3Print(&pnt); +} + +static inline void vmathP3Prints_V( VmathPoint3 pnt, const char *name ) +{ + vmathP3Prints(&pnt, name); +} + +#endif + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/ppu/c/vec_soa.h b/Extras/vectormathlibrary/include/vectormath/ppu/c/vec_soa.h new file mode 100644 index 000000000..1cda25747 --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/ppu/c/vec_soa.h @@ -0,0 +1,1223 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_VEC_SOA_C_H +#define _VECTORMATH_VEC_SOA_C_H +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/*----------------------------------------------------------------------------- + * Constants + * for permutes, words are labeled [x,y,z,w] [a,b,c,d] + */ +#define _VECTORMATH_PERM_X 0x00010203 +#define _VECTORMATH_PERM_Y 0x04050607 +#define _VECTORMATH_PERM_Z 0x08090a0b +#define _VECTORMATH_PERM_W 0x0c0d0e0f +#define _VECTORMATH_PERM_A 0x10111213 +#define _VECTORMATH_PERM_B 0x14151617 +#define _VECTORMATH_PERM_C 0x18191a1b +#define _VECTORMATH_PERM_D 0x1c1d1e1f +#define _VECTORMATH_PERM_ZBWX ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_Z, _VECTORMATH_PERM_B, _VECTORMATH_PERM_W, _VECTORMATH_PERM_X }) +#define _VECTORMATH_PERM_XCYX ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_X, _VECTORMATH_PERM_C, _VECTORMATH_PERM_Y, _VECTORMATH_PERM_X }) +#define _VECTORMATH_PERM_ZDWX ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_Z, _VECTORMATH_PERM_D, _VECTORMATH_PERM_W, _VECTORMATH_PERM_X }) +#define _VECTORMATH_PERM_ZCXA ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_Z, _VECTORMATH_PERM_C, _VECTORMATH_PERM_X, _VECTORMATH_PERM_A }) +#define _VECTORMATH_PERM_XBZD ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_X, _VECTORMATH_PERM_B, _VECTORMATH_PERM_Z, _VECTORMATH_PERM_D }) +#define _VECTORMATH_PERM_WDYB ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_W, _VECTORMATH_PERM_D, _VECTORMATH_PERM_Y, _VECTORMATH_PERM_B }) +#define _VECTORMATH_PERM_ZBXD ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_Z, _VECTORMATH_PERM_B, _VECTORMATH_PERM_X, _VECTORMATH_PERM_D }) +#define _VECTORMATH_PERM_WCYA ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_W, _VECTORMATH_PERM_C, _VECTORMATH_PERM_Y, _VECTORMATH_PERM_A }) +#define _VECTORMATH_PERM_XDZB ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_X, _VECTORMATH_PERM_D, _VECTORMATH_PERM_Z, _VECTORMATH_PERM_B }) +#define _VECTORMATH_SLERP_TOL 0.999f + +/*----------------------------------------------------------------------------- + * Definitions + */ +#ifndef _VECTORMATH_INTERNAL_FUNCTIONS +#define _VECTORMATH_INTERNAL_FUNCTIONS + +#endif + +static inline void vmathSoaV3Copy( VmathSoaVector3 *result, const VmathSoaVector3 *vec ) +{ + result->x = vec->x; + result->y = vec->y; + result->z = vec->z; +} + +static inline void vmathSoaV3MakeFromElems( VmathSoaVector3 *result, vec_float4 _x, vec_float4 _y, vec_float4 _z ) +{ + result->x = _x; + result->y = _y; + result->z = _z; +} + +static inline void vmathSoaV3MakeFromP3( VmathSoaVector3 *result, const VmathSoaPoint3 *pnt ) +{ + result->x = pnt->x; + result->y = pnt->y; + result->z = pnt->z; +} + +static inline void vmathSoaV3MakeFromScalar( VmathSoaVector3 *result, vec_float4 scalar ) +{ + result->x = scalar; + result->y = scalar; + result->z = scalar; +} + +static inline void vmathSoaV3MakeFromAos( VmathSoaVector3 *result, const VmathVector3 *vec ) +{ + vec_float4 vec128 = vec->vec128; + result->x = vec_splat( vec128, 0 ); + result->y = vec_splat( vec128, 1 ); + result->z = vec_splat( vec128, 2 ); +} + +static inline void vmathSoaV3MakeFrom4Aos( VmathSoaVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1, const VmathVector3 *vec2, const VmathVector3 *vec3 ) +{ + vec_float4 tmp0, tmp1, tmp2, tmp3; + tmp0 = vec_mergeh( vec0->vec128, vec2->vec128 ); + tmp1 = vec_mergeh( vec1->vec128, vec3->vec128 ); + tmp2 = vec_mergel( vec0->vec128, vec2->vec128 ); + tmp3 = vec_mergel( vec1->vec128, vec3->vec128 ); + result->x = vec_mergeh( tmp0, tmp1 ); + result->y = vec_mergel( tmp0, tmp1 ); + result->z = vec_mergeh( tmp2, tmp3 ); +} + +static inline void vmathSoaV3MakeXAxis( VmathSoaVector3 *result ) +{ + vmathSoaV3MakeFromElems( result, ((vec_float4){1.0f,1.0f,1.0f,1.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); +} + +static inline void vmathSoaV3MakeYAxis( VmathSoaVector3 *result ) +{ + vmathSoaV3MakeFromElems( result, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){1.0f,1.0f,1.0f,1.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); +} + +static inline void vmathSoaV3MakeZAxis( VmathSoaVector3 *result ) +{ + vmathSoaV3MakeFromElems( result, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){1.0f,1.0f,1.0f,1.0f}) ); +} + +static inline void vmathSoaV3Lerp( VmathSoaVector3 *result, vec_float4 t, const VmathSoaVector3 *vec0, const VmathSoaVector3 *vec1 ) +{ + VmathSoaVector3 tmpV3_0, tmpV3_1; + vmathSoaV3Sub( &tmpV3_0, vec1, vec0 ); + vmathSoaV3ScalarMul( &tmpV3_1, &tmpV3_0, t ); + vmathSoaV3Add( result, vec0, &tmpV3_1 ); +} + +static inline void vmathSoaV3Slerp( VmathSoaVector3 *result, vec_float4 t, const VmathSoaVector3 *unitVec0, const VmathSoaVector3 *unitVec1 ) +{ + VmathSoaVector3 tmpV3_0, tmpV3_1; + vec_float4 recipSinAngle, scale0, scale1, cosAngle, angle; + vec_uint4 selectMask; + cosAngle = vmathSoaV3Dot( unitVec0, unitVec1 ); + selectMask = (vec_uint4)vec_cmpgt( (vec_float4){_VECTORMATH_SLERP_TOL,_VECTORMATH_SLERP_TOL,_VECTORMATH_SLERP_TOL,_VECTORMATH_SLERP_TOL}, cosAngle ); + angle = acosf4( cosAngle ); + recipSinAngle = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), sinf4( angle ) ); + scale0 = vec_sel( vec_sub( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), t ), vec_madd( sinf4( vec_madd( vec_sub( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), t ), angle, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), recipSinAngle, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), selectMask ); + scale1 = vec_sel( t, vec_madd( sinf4( vec_madd( t, angle, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), recipSinAngle, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), selectMask ); + vmathSoaV3ScalarMul( &tmpV3_0, unitVec0, scale0 ); + vmathSoaV3ScalarMul( &tmpV3_1, unitVec1, scale1 ); + vmathSoaV3Add( result, &tmpV3_0, &tmpV3_1 ); +} + +static inline void vmathSoaV3Get4Aos( const VmathSoaVector3 *vec, VmathVector3 *result0, VmathVector3 *result1, VmathVector3 *result2, VmathVector3 *result3 ) +{ + vec_float4 tmp0, tmp1; + tmp0 = vec_mergeh( vec->x, vec->z ); + tmp1 = vec_mergel( vec->x, vec->z ); + vmathV3MakeFrom128( result0, vec_mergeh( tmp0, vec->y ) ); + vmathV3MakeFrom128( result1, vec_perm( tmp0, vec->y, _VECTORMATH_PERM_ZBWX ) ); + vmathV3MakeFrom128( result2, vec_perm( tmp1, vec->y, _VECTORMATH_PERM_XCYX ) ); + vmathV3MakeFrom128( result3, vec_perm( tmp1, vec->y, _VECTORMATH_PERM_ZDWX ) ); +} + +static inline void vmathSoaV3LoadXYZArray( VmathSoaVector3 *vec, const vec_float4 *threeQuads ) +{ + vec_float4 xyxy, yzyz, zxzx, xyzx, yzxy, zxyz; + xyzx = threeQuads[0]; + yzxy = threeQuads[1]; + zxyz = threeQuads[2]; + xyxy = vec_sld( yzxy, xyzx, 8 ); + zxzx = vec_sld( xyzx, zxyz, 8 ); + yzyz = vec_sld( zxyz, yzxy, 8 ); + vmathSoaV3SetX( vec, vec_perm( xyxy, zxzx, _VECTORMATH_PERM_ZBXD ) ); + vmathSoaV3SetY( vec, vec_perm( xyxy, yzyz, _VECTORMATH_PERM_WCYA ) ); + vmathSoaV3SetZ( vec, vec_perm( zxzx, yzyz, _VECTORMATH_PERM_XDZB ) ); +} + +static inline void vmathSoaV3StoreXYZArray( const VmathSoaVector3 *vec, vec_float4 *threeQuads ) +{ + vec_float4 xyzx, yzxy, zxyz, xyxy, zxzx, yzyz; + xyxy = vec_perm( vec->x, vec->y, _VECTORMATH_PERM_ZCXA ); + zxzx = vec_perm( vec->z, vec->x, _VECTORMATH_PERM_XBZD ); + yzyz = vec_perm( vec->y, vec->z, _VECTORMATH_PERM_WDYB ); + xyzx = vec_sld( xyxy, zxzx, 8 ); + yzxy = vec_sld( yzyz, xyxy, 8 ); + zxyz = vec_sld( zxzx, yzyz, 8 ); + threeQuads[0] = xyzx; + threeQuads[1] = yzxy; + threeQuads[2] = zxyz; +} + +static inline void vmathSoaV3StoreHalfFloats( const VmathSoaVector3 *vec0, const VmathSoaVector3 *vec1, vec_ushort8 *threeQuads ) +{ + vec_float4 xyz0[3]; + vec_float4 xyz1[3]; + vmathSoaV3StoreXYZArray( vec0, xyz0 ); + vmathSoaV3StoreXYZArray( vec1, xyz1 ); + threeQuads[0] = _vmath2VfToHalfFloats(xyz0[0], xyz0[1]); + threeQuads[1] = _vmath2VfToHalfFloats(xyz0[2], xyz1[0]); + threeQuads[2] = _vmath2VfToHalfFloats(xyz1[1], xyz1[2]); +} + +static inline void vmathSoaV3SetX( VmathSoaVector3 *result, vec_float4 _x ) +{ + result->x = _x; +} + +static inline vec_float4 vmathSoaV3GetX( const VmathSoaVector3 *vec ) +{ + return vec->x; +} + +static inline void vmathSoaV3SetY( VmathSoaVector3 *result, vec_float4 _y ) +{ + result->y = _y; +} + +static inline vec_float4 vmathSoaV3GetY( const VmathSoaVector3 *vec ) +{ + return vec->y; +} + +static inline void vmathSoaV3SetZ( VmathSoaVector3 *result, vec_float4 _z ) +{ + result->z = _z; +} + +static inline vec_float4 vmathSoaV3GetZ( const VmathSoaVector3 *vec ) +{ + return vec->z; +} + +static inline void vmathSoaV3SetElem( VmathSoaVector3 *result, int idx, vec_float4 value ) +{ + *(&result->x + idx) = value; +} + +static inline vec_float4 vmathSoaV3GetElem( const VmathSoaVector3 *vec, int idx ) +{ + return *(&vec->x + idx); +} + +static inline void vmathSoaV3Add( VmathSoaVector3 *result, const VmathSoaVector3 *vec0, const VmathSoaVector3 *vec1 ) +{ + result->x = vec_add( vec0->x, vec1->x ); + result->y = vec_add( vec0->y, vec1->y ); + result->z = vec_add( vec0->z, vec1->z ); +} + +static inline void vmathSoaV3Sub( VmathSoaVector3 *result, const VmathSoaVector3 *vec0, const VmathSoaVector3 *vec1 ) +{ + result->x = vec_sub( vec0->x, vec1->x ); + result->y = vec_sub( vec0->y, vec1->y ); + result->z = vec_sub( vec0->z, vec1->z ); +} + +static inline void vmathSoaV3AddP3( VmathSoaPoint3 *result, const VmathSoaVector3 *vec, const VmathSoaPoint3 *pnt1 ) +{ + result->x = vec_add( vec->x, pnt1->x ); + result->y = vec_add( vec->y, pnt1->y ); + result->z = vec_add( vec->z, pnt1->z ); +} + +static inline void vmathSoaV3ScalarMul( VmathSoaVector3 *result, const VmathSoaVector3 *vec, vec_float4 scalar ) +{ + result->x = vec_madd( vec->x, scalar, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + result->y = vec_madd( vec->y, scalar, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + result->z = vec_madd( vec->z, scalar, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); +} + +static inline void vmathSoaV3ScalarDiv( VmathSoaVector3 *result, const VmathSoaVector3 *vec, vec_float4 scalar ) +{ + result->x = divf4( vec->x, scalar ); + result->y = divf4( vec->y, scalar ); + result->z = divf4( vec->z, scalar ); +} + +static inline void vmathSoaV3Neg( VmathSoaVector3 *result, const VmathSoaVector3 *vec ) +{ + result->x = negatef4( vec->x ); + result->y = negatef4( vec->y ); + result->z = negatef4( vec->z ); +} + +static inline void vmathSoaV3MulPerElem( VmathSoaVector3 *result, const VmathSoaVector3 *vec0, const VmathSoaVector3 *vec1 ) +{ + result->x = vec_madd( vec0->x, vec1->x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + result->y = vec_madd( vec0->y, vec1->y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + result->z = vec_madd( vec0->z, vec1->z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); +} + +static inline void vmathSoaV3DivPerElem( VmathSoaVector3 *result, const VmathSoaVector3 *vec0, const VmathSoaVector3 *vec1 ) +{ + result->x = divf4( vec0->x, vec1->x ); + result->y = divf4( vec0->y, vec1->y ); + result->z = divf4( vec0->z, vec1->z ); +} + +static inline void vmathSoaV3RecipPerElem( VmathSoaVector3 *result, const VmathSoaVector3 *vec ) +{ + result->x = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), vec->x ); + result->y = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), vec->y ); + result->z = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), vec->z ); +} + +static inline void vmathSoaV3SqrtPerElem( VmathSoaVector3 *result, const VmathSoaVector3 *vec ) +{ + result->x = sqrtf4( vec->x ); + result->y = sqrtf4( vec->y ); + result->z = sqrtf4( vec->z ); +} + +static inline void vmathSoaV3RsqrtPerElem( VmathSoaVector3 *result, const VmathSoaVector3 *vec ) +{ + result->x = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), sqrtf4( vec->x ) ); + result->y = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), sqrtf4( vec->y ) ); + result->z = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), sqrtf4( vec->z ) ); +} + +static inline void vmathSoaV3AbsPerElem( VmathSoaVector3 *result, const VmathSoaVector3 *vec ) +{ + result->x = fabsf4( vec->x ); + result->y = fabsf4( vec->y ); + result->z = fabsf4( vec->z ); +} + +static inline void vmathSoaV3CopySignPerElem( VmathSoaVector3 *result, const VmathSoaVector3 *vec0, const VmathSoaVector3 *vec1 ) +{ + result->x = copysignf4( vec0->x, vec1->x ); + result->y = copysignf4( vec0->y, vec1->y ); + result->z = copysignf4( vec0->z, vec1->z ); +} + +static inline void vmathSoaV3MaxPerElem( VmathSoaVector3 *result, const VmathSoaVector3 *vec0, const VmathSoaVector3 *vec1 ) +{ + result->x = fmaxf4( vec0->x, vec1->x ); + result->y = fmaxf4( vec0->y, vec1->y ); + result->z = fmaxf4( vec0->z, vec1->z ); +} + +static inline vec_float4 vmathSoaV3MaxElem( const VmathSoaVector3 *vec ) +{ + vec_float4 result; + result = fmaxf4( vec->x, vec->y ); + result = fmaxf4( vec->z, result ); + return result; +} + +static inline void vmathSoaV3MinPerElem( VmathSoaVector3 *result, const VmathSoaVector3 *vec0, const VmathSoaVector3 *vec1 ) +{ + result->x = fminf4( vec0->x, vec1->x ); + result->y = fminf4( vec0->y, vec1->y ); + result->z = fminf4( vec0->z, vec1->z ); +} + +static inline vec_float4 vmathSoaV3MinElem( const VmathSoaVector3 *vec ) +{ + vec_float4 result; + result = fminf4( vec->x, vec->y ); + result = fminf4( vec->z, result ); + return result; +} + +static inline vec_float4 vmathSoaV3Sum( const VmathSoaVector3 *vec ) +{ + vec_float4 result; + result = vec_add( vec->x, vec->y ); + result = vec_add( result, vec->z ); + return result; +} + +static inline vec_float4 vmathSoaV3Dot( const VmathSoaVector3 *vec0, const VmathSoaVector3 *vec1 ) +{ + vec_float4 result; + result = vec_madd( vec0->x, vec1->x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + result = vec_add( result, vec_madd( vec0->y, vec1->y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + result = vec_add( result, vec_madd( vec0->z, vec1->z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + return result; +} + +static inline vec_float4 vmathSoaV3LengthSqr( const VmathSoaVector3 *vec ) +{ + vec_float4 result; + result = vec_madd( vec->x, vec->x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + result = vec_add( result, vec_madd( vec->y, vec->y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + result = vec_add( result, vec_madd( vec->z, vec->z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + return result; +} + +static inline vec_float4 vmathSoaV3Length( const VmathSoaVector3 *vec ) +{ + return sqrtf4( vmathSoaV3LengthSqr( vec ) ); +} + +static inline void vmathSoaV3Normalize( VmathSoaVector3 *result, const VmathSoaVector3 *vec ) +{ + vec_float4 lenSqr, lenInv; + lenSqr = vmathSoaV3LengthSqr( vec ); + lenInv = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), sqrtf4( lenSqr ) ); + result->x = vec_madd( vec->x, lenInv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + result->y = vec_madd( vec->y, lenInv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + result->z = vec_madd( vec->z, lenInv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); +} + +static inline void vmathSoaV3Cross( VmathSoaVector3 *result, const VmathSoaVector3 *vec0, const VmathSoaVector3 *vec1 ) +{ + vec_float4 tmpX, tmpY, tmpZ; + tmpX = vec_sub( vec_madd( vec0->y, vec1->z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( vec0->z, vec1->y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + tmpY = vec_sub( vec_madd( vec0->z, vec1->x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( vec0->x, vec1->z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + tmpZ = vec_sub( vec_madd( vec0->x, vec1->y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( vec0->y, vec1->x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + vmathSoaV3MakeFromElems( result, tmpX, tmpY, tmpZ ); +} + +static inline void vmathSoaV3Select( VmathSoaVector3 *result, const VmathSoaVector3 *vec0, const VmathSoaVector3 *vec1, vec_uint4 select1 ) +{ + result->x = vec_sel( vec0->x, vec1->x, select1 ); + result->y = vec_sel( vec0->y, vec1->y, select1 ); + result->z = vec_sel( vec0->z, vec1->z, select1 ); +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathSoaV3Print( const VmathSoaVector3 *vec ) +{ + VmathVector3 vec0, vec1, vec2, vec3; + vmathSoaV3Get4Aos( vec, &vec0, &vec1, &vec2, &vec3 ); + printf("slot 0:\n"); + vmathV3Print( &vec0 ); + printf("slot 1:\n"); + vmathV3Print( &vec1 ); + printf("slot 2:\n"); + vmathV3Print( &vec2 ); + printf("slot 3:\n"); + vmathV3Print( &vec3 ); +} + +static inline void vmathSoaV3Prints( const VmathSoaVector3 *vec, const char *name ) +{ + VmathVector3 vec0, vec1, vec2, vec3; + printf( "%s:\n", name ); + vmathSoaV3Get4Aos( vec, &vec0, &vec1, &vec2, &vec3 ); + printf("slot 0:\n"); + vmathV3Print( &vec0 ); + printf("slot 1:\n"); + vmathV3Print( &vec1 ); + printf("slot 2:\n"); + vmathV3Print( &vec2 ); + printf("slot 3:\n"); + vmathV3Print( &vec3 ); +} + +#endif + +static inline void vmathSoaV4Copy( VmathSoaVector4 *result, const VmathSoaVector4 *vec ) +{ + result->x = vec->x; + result->y = vec->y; + result->z = vec->z; + result->w = vec->w; +} + +static inline void vmathSoaV4MakeFromElems( VmathSoaVector4 *result, vec_float4 _x, vec_float4 _y, vec_float4 _z, vec_float4 _w ) +{ + result->x = _x; + result->y = _y; + result->z = _z; + result->w = _w; +} + +static inline void vmathSoaV4MakeFromV3Scalar( VmathSoaVector4 *result, const VmathSoaVector3 *xyz, vec_float4 _w ) +{ + vmathSoaV4SetXYZ( result, xyz ); + vmathSoaV4SetW( result, _w ); +} + +static inline void vmathSoaV4MakeFromV3( VmathSoaVector4 *result, const VmathSoaVector3 *vec ) +{ + result->x = vec->x; + result->y = vec->y; + result->z = vec->z; + result->w = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); +} + +static inline void vmathSoaV4MakeFromP3( VmathSoaVector4 *result, const VmathSoaPoint3 *pnt ) +{ + result->x = pnt->x; + result->y = pnt->y; + result->z = pnt->z; + result->w = ((vec_float4){1.0f,1.0f,1.0f,1.0f}); +} + +static inline void vmathSoaV4MakeFromQ( VmathSoaVector4 *result, const VmathSoaQuat *quat ) +{ + result->x = quat->x; + result->y = quat->y; + result->z = quat->z; + result->w = quat->w; +} + +static inline void vmathSoaV4MakeFromScalar( VmathSoaVector4 *result, vec_float4 scalar ) +{ + result->x = scalar; + result->y = scalar; + result->z = scalar; + result->w = scalar; +} + +static inline void vmathSoaV4MakeFromAos( VmathSoaVector4 *result, const VmathVector4 *vec ) +{ + vec_float4 vec128 = vec->vec128; + result->x = vec_splat( vec128, 0 ); + result->y = vec_splat( vec128, 1 ); + result->z = vec_splat( vec128, 2 ); + result->w = vec_splat( vec128, 3 ); +} + +static inline void vmathSoaV4MakeFrom4Aos( VmathSoaVector4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1, const VmathVector4 *vec2, const VmathVector4 *vec3 ) +{ + vec_float4 tmp0, tmp1, tmp2, tmp3; + tmp0 = vec_mergeh( vec0->vec128, vec2->vec128 ); + tmp1 = vec_mergeh( vec1->vec128, vec3->vec128 ); + tmp2 = vec_mergel( vec0->vec128, vec2->vec128 ); + tmp3 = vec_mergel( vec1->vec128, vec3->vec128 ); + result->x = vec_mergeh( tmp0, tmp1 ); + result->y = vec_mergel( tmp0, tmp1 ); + result->z = vec_mergeh( tmp2, tmp3 ); + result->w = vec_mergel( tmp2, tmp3 ); +} + +static inline void vmathSoaV4MakeXAxis( VmathSoaVector4 *result ) +{ + vmathSoaV4MakeFromElems( result, ((vec_float4){1.0f,1.0f,1.0f,1.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); +} + +static inline void vmathSoaV4MakeYAxis( VmathSoaVector4 *result ) +{ + vmathSoaV4MakeFromElems( result, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){1.0f,1.0f,1.0f,1.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); +} + +static inline void vmathSoaV4MakeZAxis( VmathSoaVector4 *result ) +{ + vmathSoaV4MakeFromElems( result, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){1.0f,1.0f,1.0f,1.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); +} + +static inline void vmathSoaV4MakeWAxis( VmathSoaVector4 *result ) +{ + vmathSoaV4MakeFromElems( result, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){1.0f,1.0f,1.0f,1.0f}) ); +} + +static inline void vmathSoaV4Lerp( VmathSoaVector4 *result, vec_float4 t, const VmathSoaVector4 *vec0, const VmathSoaVector4 *vec1 ) +{ + VmathSoaVector4 tmpV4_0, tmpV4_1; + vmathSoaV4Sub( &tmpV4_0, vec1, vec0 ); + vmathSoaV4ScalarMul( &tmpV4_1, &tmpV4_0, t ); + vmathSoaV4Add( result, vec0, &tmpV4_1 ); +} + +static inline void vmathSoaV4Slerp( VmathSoaVector4 *result, vec_float4 t, const VmathSoaVector4 *unitVec0, const VmathSoaVector4 *unitVec1 ) +{ + VmathSoaVector4 tmpV4_0, tmpV4_1; + vec_float4 recipSinAngle, scale0, scale1, cosAngle, angle; + vec_uint4 selectMask; + cosAngle = vmathSoaV4Dot( unitVec0, unitVec1 ); + selectMask = (vec_uint4)vec_cmpgt( (vec_float4){_VECTORMATH_SLERP_TOL,_VECTORMATH_SLERP_TOL,_VECTORMATH_SLERP_TOL,_VECTORMATH_SLERP_TOL}, cosAngle ); + angle = acosf4( cosAngle ); + recipSinAngle = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), sinf4( angle ) ); + scale0 = vec_sel( vec_sub( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), t ), vec_madd( sinf4( vec_madd( vec_sub( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), t ), angle, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), recipSinAngle, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), selectMask ); + scale1 = vec_sel( t, vec_madd( sinf4( vec_madd( t, angle, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), recipSinAngle, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), selectMask ); + vmathSoaV4ScalarMul( &tmpV4_0, unitVec0, scale0 ); + vmathSoaV4ScalarMul( &tmpV4_1, unitVec1, scale1 ); + vmathSoaV4Add( result, &tmpV4_0, &tmpV4_1 ); +} + +static inline void vmathSoaV4Get4Aos( const VmathSoaVector4 *vec, VmathVector4 *result0, VmathVector4 *result1, VmathVector4 *result2, VmathVector4 *result3 ) +{ + vec_float4 tmp0, tmp1, tmp2, tmp3; + tmp0 = vec_mergeh( vec->x, vec->z ); + tmp1 = vec_mergeh( vec->y, vec->w ); + tmp2 = vec_mergel( vec->x, vec->z ); + tmp3 = vec_mergel( vec->y, vec->w ); + vmathV4MakeFrom128( result0, vec_mergeh( tmp0, tmp1 ) ); + vmathV4MakeFrom128( result1, vec_mergel( tmp0, tmp1 ) ); + vmathV4MakeFrom128( result2, vec_mergeh( tmp2, tmp3 ) ); + vmathV4MakeFrom128( result3, vec_mergel( tmp2, tmp3 ) ); +} + +static inline void vmathSoaV4StoreHalfFloats( const VmathSoaVector4 *vec, vec_ushort8 *twoQuads ) +{ + VmathVector4 v0, v1, v2, v3; + vmathSoaV4Get4Aos( vec, &v0, &v1, &v2, &v3 ); + twoQuads[0] = _vmath2VfToHalfFloats(v0.vec128, v1.vec128); + twoQuads[1] = _vmath2VfToHalfFloats(v2.vec128, v3.vec128); +} + +static inline void vmathSoaV4SetXYZ( VmathSoaVector4 *result, const VmathSoaVector3 *vec ) +{ + result->x = vec->x; + result->y = vec->y; + result->z = vec->z; +} + +static inline void vmathSoaV4GetXYZ( VmathSoaVector3 *result, const VmathSoaVector4 *vec ) +{ + vmathSoaV3MakeFromElems( result, vec->x, vec->y, vec->z ); +} + +static inline void vmathSoaV4SetX( VmathSoaVector4 *result, vec_float4 _x ) +{ + result->x = _x; +} + +static inline vec_float4 vmathSoaV4GetX( const VmathSoaVector4 *vec ) +{ + return vec->x; +} + +static inline void vmathSoaV4SetY( VmathSoaVector4 *result, vec_float4 _y ) +{ + result->y = _y; +} + +static inline vec_float4 vmathSoaV4GetY( const VmathSoaVector4 *vec ) +{ + return vec->y; +} + +static inline void vmathSoaV4SetZ( VmathSoaVector4 *result, vec_float4 _z ) +{ + result->z = _z; +} + +static inline vec_float4 vmathSoaV4GetZ( const VmathSoaVector4 *vec ) +{ + return vec->z; +} + +static inline void vmathSoaV4SetW( VmathSoaVector4 *result, vec_float4 _w ) +{ + result->w = _w; +} + +static inline vec_float4 vmathSoaV4GetW( const VmathSoaVector4 *vec ) +{ + return vec->w; +} + +static inline void vmathSoaV4SetElem( VmathSoaVector4 *result, int idx, vec_float4 value ) +{ + *(&result->x + idx) = value; +} + +static inline vec_float4 vmathSoaV4GetElem( const VmathSoaVector4 *vec, int idx ) +{ + return *(&vec->x + idx); +} + +static inline void vmathSoaV4Add( VmathSoaVector4 *result, const VmathSoaVector4 *vec0, const VmathSoaVector4 *vec1 ) +{ + result->x = vec_add( vec0->x, vec1->x ); + result->y = vec_add( vec0->y, vec1->y ); + result->z = vec_add( vec0->z, vec1->z ); + result->w = vec_add( vec0->w, vec1->w ); +} + +static inline void vmathSoaV4Sub( VmathSoaVector4 *result, const VmathSoaVector4 *vec0, const VmathSoaVector4 *vec1 ) +{ + result->x = vec_sub( vec0->x, vec1->x ); + result->y = vec_sub( vec0->y, vec1->y ); + result->z = vec_sub( vec0->z, vec1->z ); + result->w = vec_sub( vec0->w, vec1->w ); +} + +static inline void vmathSoaV4ScalarMul( VmathSoaVector4 *result, const VmathSoaVector4 *vec, vec_float4 scalar ) +{ + result->x = vec_madd( vec->x, scalar, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + result->y = vec_madd( vec->y, scalar, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + result->z = vec_madd( vec->z, scalar, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + result->w = vec_madd( vec->w, scalar, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); +} + +static inline void vmathSoaV4ScalarDiv( VmathSoaVector4 *result, const VmathSoaVector4 *vec, vec_float4 scalar ) +{ + result->x = divf4( vec->x, scalar ); + result->y = divf4( vec->y, scalar ); + result->z = divf4( vec->z, scalar ); + result->w = divf4( vec->w, scalar ); +} + +static inline void vmathSoaV4Neg( VmathSoaVector4 *result, const VmathSoaVector4 *vec ) +{ + result->x = negatef4( vec->x ); + result->y = negatef4( vec->y ); + result->z = negatef4( vec->z ); + result->w = negatef4( vec->w ); +} + +static inline void vmathSoaV4MulPerElem( VmathSoaVector4 *result, const VmathSoaVector4 *vec0, const VmathSoaVector4 *vec1 ) +{ + result->x = vec_madd( vec0->x, vec1->x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + result->y = vec_madd( vec0->y, vec1->y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + result->z = vec_madd( vec0->z, vec1->z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + result->w = vec_madd( vec0->w, vec1->w, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); +} + +static inline void vmathSoaV4DivPerElem( VmathSoaVector4 *result, const VmathSoaVector4 *vec0, const VmathSoaVector4 *vec1 ) +{ + result->x = divf4( vec0->x, vec1->x ); + result->y = divf4( vec0->y, vec1->y ); + result->z = divf4( vec0->z, vec1->z ); + result->w = divf4( vec0->w, vec1->w ); +} + +static inline void vmathSoaV4RecipPerElem( VmathSoaVector4 *result, const VmathSoaVector4 *vec ) +{ + result->x = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), vec->x ); + result->y = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), vec->y ); + result->z = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), vec->z ); + result->w = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), vec->w ); +} + +static inline void vmathSoaV4SqrtPerElem( VmathSoaVector4 *result, const VmathSoaVector4 *vec ) +{ + result->x = sqrtf4( vec->x ); + result->y = sqrtf4( vec->y ); + result->z = sqrtf4( vec->z ); + result->w = sqrtf4( vec->w ); +} + +static inline void vmathSoaV4RsqrtPerElem( VmathSoaVector4 *result, const VmathSoaVector4 *vec ) +{ + result->x = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), sqrtf4( vec->x ) ); + result->y = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), sqrtf4( vec->y ) ); + result->z = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), sqrtf4( vec->z ) ); + result->w = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), sqrtf4( vec->w ) ); +} + +static inline void vmathSoaV4AbsPerElem( VmathSoaVector4 *result, const VmathSoaVector4 *vec ) +{ + result->x = fabsf4( vec->x ); + result->y = fabsf4( vec->y ); + result->z = fabsf4( vec->z ); + result->w = fabsf4( vec->w ); +} + +static inline void vmathSoaV4CopySignPerElem( VmathSoaVector4 *result, const VmathSoaVector4 *vec0, const VmathSoaVector4 *vec1 ) +{ + result->x = copysignf4( vec0->x, vec1->x ); + result->y = copysignf4( vec0->y, vec1->y ); + result->z = copysignf4( vec0->z, vec1->z ); + result->w = copysignf4( vec0->w, vec1->w ); +} + +static inline void vmathSoaV4MaxPerElem( VmathSoaVector4 *result, const VmathSoaVector4 *vec0, const VmathSoaVector4 *vec1 ) +{ + result->x = fmaxf4( vec0->x, vec1->x ); + result->y = fmaxf4( vec0->y, vec1->y ); + result->z = fmaxf4( vec0->z, vec1->z ); + result->w = fmaxf4( vec0->w, vec1->w ); +} + +static inline vec_float4 vmathSoaV4MaxElem( const VmathSoaVector4 *vec ) +{ + vec_float4 result; + result = fmaxf4( vec->x, vec->y ); + result = fmaxf4( vec->z, result ); + result = fmaxf4( vec->w, result ); + return result; +} + +static inline void vmathSoaV4MinPerElem( VmathSoaVector4 *result, const VmathSoaVector4 *vec0, const VmathSoaVector4 *vec1 ) +{ + result->x = fminf4( vec0->x, vec1->x ); + result->y = fminf4( vec0->y, vec1->y ); + result->z = fminf4( vec0->z, vec1->z ); + result->w = fminf4( vec0->w, vec1->w ); +} + +static inline vec_float4 vmathSoaV4MinElem( const VmathSoaVector4 *vec ) +{ + vec_float4 result; + result = fminf4( vec->x, vec->y ); + result = fminf4( vec->z, result ); + result = fminf4( vec->w, result ); + return result; +} + +static inline vec_float4 vmathSoaV4Sum( const VmathSoaVector4 *vec ) +{ + vec_float4 result; + result = vec_add( vec->x, vec->y ); + result = vec_add( result, vec->z ); + result = vec_add( result, vec->w ); + return result; +} + +static inline vec_float4 vmathSoaV4Dot( const VmathSoaVector4 *vec0, const VmathSoaVector4 *vec1 ) +{ + vec_float4 result; + result = vec_madd( vec0->x, vec1->x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + result = vec_add( result, vec_madd( vec0->y, vec1->y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + result = vec_add( result, vec_madd( vec0->z, vec1->z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + result = vec_add( result, vec_madd( vec0->w, vec1->w, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + return result; +} + +static inline vec_float4 vmathSoaV4LengthSqr( const VmathSoaVector4 *vec ) +{ + vec_float4 result; + result = vec_madd( vec->x, vec->x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + result = vec_add( result, vec_madd( vec->y, vec->y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + result = vec_add( result, vec_madd( vec->z, vec->z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + result = vec_add( result, vec_madd( vec->w, vec->w, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + return result; +} + +static inline vec_float4 vmathSoaV4Length( const VmathSoaVector4 *vec ) +{ + return sqrtf4( vmathSoaV4LengthSqr( vec ) ); +} + +static inline void vmathSoaV4Normalize( VmathSoaVector4 *result, const VmathSoaVector4 *vec ) +{ + vec_float4 lenSqr, lenInv; + lenSqr = vmathSoaV4LengthSqr( vec ); + lenInv = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), sqrtf4( lenSqr ) ); + result->x = vec_madd( vec->x, lenInv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + result->y = vec_madd( vec->y, lenInv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + result->z = vec_madd( vec->z, lenInv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + result->w = vec_madd( vec->w, lenInv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); +} + +static inline void vmathSoaV4Select( VmathSoaVector4 *result, const VmathSoaVector4 *vec0, const VmathSoaVector4 *vec1, vec_uint4 select1 ) +{ + result->x = vec_sel( vec0->x, vec1->x, select1 ); + result->y = vec_sel( vec0->y, vec1->y, select1 ); + result->z = vec_sel( vec0->z, vec1->z, select1 ); + result->w = vec_sel( vec0->w, vec1->w, select1 ); +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathSoaV4Print( const VmathSoaVector4 *vec ) +{ + VmathVector4 vec0, vec1, vec2, vec3; + vmathSoaV4Get4Aos( vec, &vec0, &vec1, &vec2, &vec3 ); + printf("slot 0:\n"); + vmathV4Print( &vec0 ); + printf("slot 1:\n"); + vmathV4Print( &vec1 ); + printf("slot 2:\n"); + vmathV4Print( &vec2 ); + printf("slot 3:\n"); + vmathV4Print( &vec3 ); +} + +static inline void vmathSoaV4Prints( const VmathSoaVector4 *vec, const char *name ) +{ + VmathVector4 vec0, vec1, vec2, vec3; + printf( "%s:\n", name ); + vmathSoaV4Get4Aos( vec, &vec0, &vec1, &vec2, &vec3 ); + printf("slot 0:\n"); + vmathV4Print( &vec0 ); + printf("slot 1:\n"); + vmathV4Print( &vec1 ); + printf("slot 2:\n"); + vmathV4Print( &vec2 ); + printf("slot 3:\n"); + vmathV4Print( &vec3 ); +} + +#endif + +static inline void vmathSoaP3Copy( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt ) +{ + result->x = pnt->x; + result->y = pnt->y; + result->z = pnt->z; +} + +static inline void vmathSoaP3MakeFromElems( VmathSoaPoint3 *result, vec_float4 _x, vec_float4 _y, vec_float4 _z ) +{ + result->x = _x; + result->y = _y; + result->z = _z; +} + +static inline void vmathSoaP3MakeFromV3( VmathSoaPoint3 *result, const VmathSoaVector3 *vec ) +{ + result->x = vec->x; + result->y = vec->y; + result->z = vec->z; +} + +static inline void vmathSoaP3MakeFromScalar( VmathSoaPoint3 *result, vec_float4 scalar ) +{ + result->x = scalar; + result->y = scalar; + result->z = scalar; +} + +static inline void vmathSoaP3MakeFromAos( VmathSoaPoint3 *result, const VmathPoint3 *pnt ) +{ + vec_float4 vec128 = pnt->vec128; + result->x = vec_splat( vec128, 0 ); + result->y = vec_splat( vec128, 1 ); + result->z = vec_splat( vec128, 2 ); +} + +static inline void vmathSoaP3MakeFrom4Aos( VmathSoaPoint3 *result, const VmathPoint3 *pnt0, const VmathPoint3 *pnt1, const VmathPoint3 *pnt2, const VmathPoint3 *pnt3 ) +{ + vec_float4 tmp0, tmp1, tmp2, tmp3; + tmp0 = vec_mergeh( pnt0->vec128, pnt2->vec128 ); + tmp1 = vec_mergeh( pnt1->vec128, pnt3->vec128 ); + tmp2 = vec_mergel( pnt0->vec128, pnt2->vec128 ); + tmp3 = vec_mergel( pnt1->vec128, pnt3->vec128 ); + result->x = vec_mergeh( tmp0, tmp1 ); + result->y = vec_mergel( tmp0, tmp1 ); + result->z = vec_mergeh( tmp2, tmp3 ); +} + +static inline void vmathSoaP3Lerp( VmathSoaPoint3 *result, vec_float4 t, const VmathSoaPoint3 *pnt0, const VmathSoaPoint3 *pnt1 ) +{ + VmathSoaVector3 tmpV3_0, tmpV3_1; + vmathSoaP3Sub( &tmpV3_0, pnt1, pnt0 ); + vmathSoaV3ScalarMul( &tmpV3_1, &tmpV3_0, t ); + vmathSoaP3AddV3( result, pnt0, &tmpV3_1 ); +} + +static inline void vmathSoaP3Get4Aos( const VmathSoaPoint3 *pnt, VmathPoint3 *result0, VmathPoint3 *result1, VmathPoint3 *result2, VmathPoint3 *result3 ) +{ + vec_float4 tmp0, tmp1; + tmp0 = vec_mergeh( pnt->x, pnt->z ); + tmp1 = vec_mergel( pnt->x, pnt->z ); + vmathP3MakeFrom128( result0, vec_mergeh( tmp0, pnt->y ) ); + vmathP3MakeFrom128( result1, vec_perm( tmp0, pnt->y, _VECTORMATH_PERM_ZBWX ) ); + vmathP3MakeFrom128( result2, vec_perm( tmp1, pnt->y, _VECTORMATH_PERM_XCYX ) ); + vmathP3MakeFrom128( result3, vec_perm( tmp1, pnt->y, _VECTORMATH_PERM_ZDWX ) ); +} + +static inline void vmathSoaP3LoadXYZArray( VmathSoaPoint3 *vec, const vec_float4 *threeQuads ) +{ + vec_float4 xyxy, yzyz, zxzx, xyzx, yzxy, zxyz; + xyzx = threeQuads[0]; + yzxy = threeQuads[1]; + zxyz = threeQuads[2]; + xyxy = vec_sld( yzxy, xyzx, 8 ); + zxzx = vec_sld( xyzx, zxyz, 8 ); + yzyz = vec_sld( zxyz, yzxy, 8 ); + vmathSoaP3SetX( vec, vec_perm( xyxy, zxzx, _VECTORMATH_PERM_ZBXD ) ); + vmathSoaP3SetY( vec, vec_perm( xyxy, yzyz, _VECTORMATH_PERM_WCYA ) ); + vmathSoaP3SetZ( vec, vec_perm( zxzx, yzyz, _VECTORMATH_PERM_XDZB ) ); +} + +static inline void vmathSoaP3StoreXYZArray( const VmathSoaPoint3 *vec, vec_float4 *threeQuads ) +{ + vec_float4 xyzx, yzxy, zxyz, xyxy, zxzx, yzyz; + xyxy = vec_perm( vec->x, vec->y, _VECTORMATH_PERM_ZCXA ); + zxzx = vec_perm( vec->z, vec->x, _VECTORMATH_PERM_XBZD ); + yzyz = vec_perm( vec->y, vec->z, _VECTORMATH_PERM_WDYB ); + xyzx = vec_sld( xyxy, zxzx, 8 ); + yzxy = vec_sld( yzyz, xyxy, 8 ); + zxyz = vec_sld( zxzx, yzyz, 8 ); + threeQuads[0] = xyzx; + threeQuads[1] = yzxy; + threeQuads[2] = zxyz; +} + +static inline void vmathSoaP3StoreHalfFloats( const VmathSoaPoint3 *pnt0, const VmathSoaPoint3 *pnt1, vec_ushort8 *threeQuads ) +{ + vec_float4 xyz0[3]; + vec_float4 xyz1[3]; + vmathSoaP3StoreXYZArray( pnt0, xyz0 ); + vmathSoaP3StoreXYZArray( pnt1, xyz1 ); + threeQuads[0] = _vmath2VfToHalfFloats(xyz0[0], xyz0[1]); + threeQuads[1] = _vmath2VfToHalfFloats(xyz0[2], xyz1[0]); + threeQuads[2] = _vmath2VfToHalfFloats(xyz1[1], xyz1[2]); +} + +static inline void vmathSoaP3SetX( VmathSoaPoint3 *result, vec_float4 _x ) +{ + result->x = _x; +} + +static inline vec_float4 vmathSoaP3GetX( const VmathSoaPoint3 *pnt ) +{ + return pnt->x; +} + +static inline void vmathSoaP3SetY( VmathSoaPoint3 *result, vec_float4 _y ) +{ + result->y = _y; +} + +static inline vec_float4 vmathSoaP3GetY( const VmathSoaPoint3 *pnt ) +{ + return pnt->y; +} + +static inline void vmathSoaP3SetZ( VmathSoaPoint3 *result, vec_float4 _z ) +{ + result->z = _z; +} + +static inline vec_float4 vmathSoaP3GetZ( const VmathSoaPoint3 *pnt ) +{ + return pnt->z; +} + +static inline void vmathSoaP3SetElem( VmathSoaPoint3 *result, int idx, vec_float4 value ) +{ + *(&result->x + idx) = value; +} + +static inline vec_float4 vmathSoaP3GetElem( const VmathSoaPoint3 *pnt, int idx ) +{ + return *(&pnt->x + idx); +} + +static inline void vmathSoaP3Sub( VmathSoaVector3 *result, const VmathSoaPoint3 *pnt0, const VmathSoaPoint3 *pnt1 ) +{ + result->x = vec_sub( pnt0->x, pnt1->x ); + result->y = vec_sub( pnt0->y, pnt1->y ); + result->z = vec_sub( pnt0->z, pnt1->z ); +} + +static inline void vmathSoaP3AddV3( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt, const VmathSoaVector3 *vec1 ) +{ + result->x = vec_add( pnt->x, vec1->x ); + result->y = vec_add( pnt->y, vec1->y ); + result->z = vec_add( pnt->z, vec1->z ); +} + +static inline void vmathSoaP3SubV3( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt, const VmathSoaVector3 *vec1 ) +{ + result->x = vec_sub( pnt->x, vec1->x ); + result->y = vec_sub( pnt->y, vec1->y ); + result->z = vec_sub( pnt->z, vec1->z ); +} + +static inline void vmathSoaP3MulPerElem( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt0, const VmathSoaPoint3 *pnt1 ) +{ + result->x = vec_madd( pnt0->x, pnt1->x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + result->y = vec_madd( pnt0->y, pnt1->y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + result->z = vec_madd( pnt0->z, pnt1->z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); +} + +static inline void vmathSoaP3DivPerElem( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt0, const VmathSoaPoint3 *pnt1 ) +{ + result->x = divf4( pnt0->x, pnt1->x ); + result->y = divf4( pnt0->y, pnt1->y ); + result->z = divf4( pnt0->z, pnt1->z ); +} + +static inline void vmathSoaP3RecipPerElem( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt ) +{ + result->x = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), pnt->x ); + result->y = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), pnt->y ); + result->z = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), pnt->z ); +} + +static inline void vmathSoaP3SqrtPerElem( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt ) +{ + result->x = sqrtf4( pnt->x ); + result->y = sqrtf4( pnt->y ); + result->z = sqrtf4( pnt->z ); +} + +static inline void vmathSoaP3RsqrtPerElem( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt ) +{ + result->x = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), sqrtf4( pnt->x ) ); + result->y = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), sqrtf4( pnt->y ) ); + result->z = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), sqrtf4( pnt->z ) ); +} + +static inline void vmathSoaP3AbsPerElem( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt ) +{ + result->x = fabsf4( pnt->x ); + result->y = fabsf4( pnt->y ); + result->z = fabsf4( pnt->z ); +} + +static inline void vmathSoaP3CopySignPerElem( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt0, const VmathSoaPoint3 *pnt1 ) +{ + result->x = copysignf4( pnt0->x, pnt1->x ); + result->y = copysignf4( pnt0->y, pnt1->y ); + result->z = copysignf4( pnt0->z, pnt1->z ); +} + +static inline void vmathSoaP3MaxPerElem( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt0, const VmathSoaPoint3 *pnt1 ) +{ + result->x = fmaxf4( pnt0->x, pnt1->x ); + result->y = fmaxf4( pnt0->y, pnt1->y ); + result->z = fmaxf4( pnt0->z, pnt1->z ); +} + +static inline vec_float4 vmathSoaP3MaxElem( const VmathSoaPoint3 *pnt ) +{ + vec_float4 result; + result = fmaxf4( pnt->x, pnt->y ); + result = fmaxf4( pnt->z, result ); + return result; +} + +static inline void vmathSoaP3MinPerElem( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt0, const VmathSoaPoint3 *pnt1 ) +{ + result->x = fminf4( pnt0->x, pnt1->x ); + result->y = fminf4( pnt0->y, pnt1->y ); + result->z = fminf4( pnt0->z, pnt1->z ); +} + +static inline vec_float4 vmathSoaP3MinElem( const VmathSoaPoint3 *pnt ) +{ + vec_float4 result; + result = fminf4( pnt->x, pnt->y ); + result = fminf4( pnt->z, result ); + return result; +} + +static inline vec_float4 vmathSoaP3Sum( const VmathSoaPoint3 *pnt ) +{ + vec_float4 result; + result = vec_add( pnt->x, pnt->y ); + result = vec_add( result, pnt->z ); + return result; +} + +static inline void vmathSoaP3Scale( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt, vec_float4 scaleVal ) +{ + VmathSoaPoint3 tmpP3_0; + vmathSoaP3MakeFromScalar( &tmpP3_0, scaleVal ); + vmathSoaP3MulPerElem( result, pnt, &tmpP3_0 ); +} + +static inline void vmathSoaP3NonUniformScale( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt, const VmathSoaVector3 *scaleVec ) +{ + VmathSoaPoint3 tmpP3_0; + vmathSoaP3MakeFromV3( &tmpP3_0, scaleVec ); + vmathSoaP3MulPerElem( result, pnt, &tmpP3_0 ); +} + +static inline vec_float4 vmathSoaP3Projection( const VmathSoaPoint3 *pnt, const VmathSoaVector3 *unitVec ) +{ + vec_float4 result; + result = vec_madd( pnt->x, unitVec->x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + result = vec_add( result, vec_madd( pnt->y, unitVec->y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + result = vec_add( result, vec_madd( pnt->z, unitVec->z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + return result; +} + +static inline vec_float4 vmathSoaP3DistSqrFromOrigin( const VmathSoaPoint3 *pnt ) +{ + VmathSoaVector3 tmpV3_0; + vmathSoaV3MakeFromP3( &tmpV3_0, pnt ); + return vmathSoaV3LengthSqr( &tmpV3_0 ); +} + +static inline vec_float4 vmathSoaP3DistFromOrigin( const VmathSoaPoint3 *pnt ) +{ + VmathSoaVector3 tmpV3_0; + vmathSoaV3MakeFromP3( &tmpV3_0, pnt ); + return vmathSoaV3Length( &tmpV3_0 ); +} + +static inline vec_float4 vmathSoaP3DistSqr( const VmathSoaPoint3 *pnt0, const VmathSoaPoint3 *pnt1 ) +{ + VmathSoaVector3 tmpV3_0; + vmathSoaP3Sub( &tmpV3_0, pnt1, pnt0 ); + return vmathSoaV3LengthSqr( &tmpV3_0 ); +} + +static inline vec_float4 vmathSoaP3Dist( const VmathSoaPoint3 *pnt0, const VmathSoaPoint3 *pnt1 ) +{ + VmathSoaVector3 tmpV3_0; + vmathSoaP3Sub( &tmpV3_0, pnt1, pnt0 ); + return vmathSoaV3Length( &tmpV3_0 ); +} + +static inline void vmathSoaP3Select( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt0, const VmathSoaPoint3 *pnt1, vec_uint4 select1 ) +{ + result->x = vec_sel( pnt0->x, pnt1->x, select1 ); + result->y = vec_sel( pnt0->y, pnt1->y, select1 ); + result->z = vec_sel( pnt0->z, pnt1->z, select1 ); +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathSoaP3Print( const VmathSoaPoint3 *pnt ) +{ + VmathPoint3 vec0, vec1, vec2, vec3; + vmathSoaP3Get4Aos( pnt, &vec0, &vec1, &vec2, &vec3 ); + printf("slot 0:\n"); + vmathP3Print( &vec0 ); + printf("slot 1:\n"); + vmathP3Print( &vec1 ); + printf("slot 2:\n"); + vmathP3Print( &vec2 ); + printf("slot 3:\n"); + vmathP3Print( &vec3 ); +} + +static inline void vmathSoaP3Prints( const VmathSoaPoint3 *pnt, const char *name ) +{ + VmathPoint3 vec0, vec1, vec2, vec3; + printf( "%s:\n", name ); + vmathSoaP3Get4Aos( pnt, &vec0, &vec1, &vec2, &vec3 ); + printf("slot 0:\n"); + vmathP3Print( &vec0 ); + printf("slot 1:\n"); + vmathP3Print( &vec1 ); + printf("slot 2:\n"); + vmathP3Print( &vec2 ); + printf("slot 3:\n"); + vmathP3Print( &vec3 ); +} + +#endif + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/ppu/c/vec_soa_v.h b/Extras/vectormathlibrary/include/vectormath/ppu/c/vec_soa_v.h new file mode 100644 index 000000000..75d7bb6bc --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/ppu/c/vec_soa_v.h @@ -0,0 +1,958 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_VEC_SOA_V_C_H +#define _VECTORMATH_VEC_SOA_V_C_H +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/*----------------------------------------------------------------------------- + * Constants + * for permutes, words are labeled [x,y,z,w] [a,b,c,d] + */ +#define _VECTORMATH_PERM_X 0x00010203 +#define _VECTORMATH_PERM_Y 0x04050607 +#define _VECTORMATH_PERM_Z 0x08090a0b +#define _VECTORMATH_PERM_W 0x0c0d0e0f +#define _VECTORMATH_PERM_A 0x10111213 +#define _VECTORMATH_PERM_B 0x14151617 +#define _VECTORMATH_PERM_C 0x18191a1b +#define _VECTORMATH_PERM_D 0x1c1d1e1f +#define _VECTORMATH_PERM_ZBWX ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_Z, _VECTORMATH_PERM_B, _VECTORMATH_PERM_W, _VECTORMATH_PERM_X }) +#define _VECTORMATH_PERM_XCYX ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_X, _VECTORMATH_PERM_C, _VECTORMATH_PERM_Y, _VECTORMATH_PERM_X }) +#define _VECTORMATH_PERM_ZDWX ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_Z, _VECTORMATH_PERM_D, _VECTORMATH_PERM_W, _VECTORMATH_PERM_X }) +#define _VECTORMATH_PERM_ZCXA ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_Z, _VECTORMATH_PERM_C, _VECTORMATH_PERM_X, _VECTORMATH_PERM_A }) +#define _VECTORMATH_PERM_XBZD ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_X, _VECTORMATH_PERM_B, _VECTORMATH_PERM_Z, _VECTORMATH_PERM_D }) +#define _VECTORMATH_PERM_WDYB ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_W, _VECTORMATH_PERM_D, _VECTORMATH_PERM_Y, _VECTORMATH_PERM_B }) +#define _VECTORMATH_PERM_ZBXD ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_Z, _VECTORMATH_PERM_B, _VECTORMATH_PERM_X, _VECTORMATH_PERM_D }) +#define _VECTORMATH_PERM_WCYA ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_W, _VECTORMATH_PERM_C, _VECTORMATH_PERM_Y, _VECTORMATH_PERM_A }) +#define _VECTORMATH_PERM_XDZB ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_X, _VECTORMATH_PERM_D, _VECTORMATH_PERM_Z, _VECTORMATH_PERM_B }) +#define _VECTORMATH_SLERP_TOL 0.999f + +/*----------------------------------------------------------------------------- + * Definitions + */ +#ifndef _VECTORMATH_INTERNAL_FUNCTIONS +#define _VECTORMATH_INTERNAL_FUNCTIONS + +#endif + +static inline VmathSoaVector3 vmathSoaV3MakeFromElems_V( vec_float4 _x, vec_float4 _y, vec_float4 _z ) +{ + VmathSoaVector3 result; + vmathSoaV3MakeFromElems(&result, _x, _y, _z); + return result; +} + +static inline VmathSoaVector3 vmathSoaV3MakeFromP3_V( VmathSoaPoint3 pnt ) +{ + VmathSoaVector3 result; + vmathSoaV3MakeFromP3(&result, &pnt); + return result; +} + +static inline VmathSoaVector3 vmathSoaV3MakeFromScalar_V( vec_float4 scalar ) +{ + VmathSoaVector3 result; + vmathSoaV3MakeFromScalar(&result, scalar); + return result; +} + +static inline VmathSoaVector3 vmathSoaV3MakeFromAos_V( VmathVector3 vec ) +{ + VmathSoaVector3 result; + vmathSoaV3MakeFromAos(&result, &vec); + return result; +} + +static inline VmathSoaVector3 vmathSoaV3MakeFrom4Aos_V( VmathVector3 vec0, VmathVector3 vec1, VmathVector3 vec2, VmathVector3 vec3 ) +{ + VmathSoaVector3 result; + vmathSoaV3MakeFrom4Aos(&result, &vec0, &vec1, &vec2, &vec3); + return result; +} + +static inline VmathSoaVector3 vmathSoaV3MakeXAxis_V( ) +{ + VmathSoaVector3 result; + vmathSoaV3MakeXAxis(&result); + return result; +} + +static inline VmathSoaVector3 vmathSoaV3MakeYAxis_V( ) +{ + VmathSoaVector3 result; + vmathSoaV3MakeYAxis(&result); + return result; +} + +static inline VmathSoaVector3 vmathSoaV3MakeZAxis_V( ) +{ + VmathSoaVector3 result; + vmathSoaV3MakeZAxis(&result); + return result; +} + +static inline VmathSoaVector3 vmathSoaV3Lerp_V( vec_float4 t, VmathSoaVector3 vec0, VmathSoaVector3 vec1 ) +{ + VmathSoaVector3 result; + vmathSoaV3Lerp(&result, t, &vec0, &vec1); + return result; +} + +static inline VmathSoaVector3 vmathSoaV3Slerp_V( vec_float4 t, VmathSoaVector3 unitVec0, VmathSoaVector3 unitVec1 ) +{ + VmathSoaVector3 result; + vmathSoaV3Slerp(&result, t, &unitVec0, &unitVec1); + return result; +} + +static inline void vmathSoaV3Get4Aos_V( VmathSoaVector3 vec, VmathVector3 *result0, VmathVector3 *result1, VmathVector3 *result2, VmathVector3 *result3 ) +{ + vmathSoaV3Get4Aos(&vec, result0, result1, result2, result3); +} + +static inline void vmathSoaV3LoadXYZArray_V( VmathSoaVector3 *vec, const vec_float4 *threeQuads ) +{ + vmathSoaV3LoadXYZArray(vec, threeQuads); +} + +static inline void vmathSoaV3StoreXYZArray_V( VmathSoaVector3 vec, vec_float4 *threeQuads ) +{ + vmathSoaV3StoreXYZArray(&vec, threeQuads); +} + +static inline void vmathSoaV3StoreHalfFloats_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1, vec_ushort8 *threeQuads ) +{ + vmathSoaV3StoreHalfFloats(&vec0, &vec1, threeQuads); +} + +static inline void vmathSoaV3SetX_V( VmathSoaVector3 *result, vec_float4 _x ) +{ + vmathSoaV3SetX(result, _x); +} + +static inline vec_float4 vmathSoaV3GetX_V( VmathSoaVector3 vec ) +{ + return vmathSoaV3GetX(&vec); +} + +static inline void vmathSoaV3SetY_V( VmathSoaVector3 *result, vec_float4 _y ) +{ + vmathSoaV3SetY(result, _y); +} + +static inline vec_float4 vmathSoaV3GetY_V( VmathSoaVector3 vec ) +{ + return vmathSoaV3GetY(&vec); +} + +static inline void vmathSoaV3SetZ_V( VmathSoaVector3 *result, vec_float4 _z ) +{ + vmathSoaV3SetZ(result, _z); +} + +static inline vec_float4 vmathSoaV3GetZ_V( VmathSoaVector3 vec ) +{ + return vmathSoaV3GetZ(&vec); +} + +static inline void vmathSoaV3SetElem_V( VmathSoaVector3 *result, int idx, vec_float4 value ) +{ + vmathSoaV3SetElem(result, idx, value); +} + +static inline vec_float4 vmathSoaV3GetElem_V( VmathSoaVector3 vec, int idx ) +{ + return vmathSoaV3GetElem(&vec, idx); +} + +static inline VmathSoaVector3 vmathSoaV3Add_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1 ) +{ + VmathSoaVector3 result; + vmathSoaV3Add(&result, &vec0, &vec1); + return result; +} + +static inline VmathSoaVector3 vmathSoaV3Sub_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1 ) +{ + VmathSoaVector3 result; + vmathSoaV3Sub(&result, &vec0, &vec1); + return result; +} + +static inline VmathSoaPoint3 vmathSoaV3AddP3_V( VmathSoaVector3 vec, VmathSoaPoint3 pnt1 ) +{ + VmathSoaPoint3 result; + vmathSoaV3AddP3(&result, &vec, &pnt1); + return result; +} + +static inline VmathSoaVector3 vmathSoaV3ScalarMul_V( VmathSoaVector3 vec, vec_float4 scalar ) +{ + VmathSoaVector3 result; + vmathSoaV3ScalarMul(&result, &vec, scalar); + return result; +} + +static inline VmathSoaVector3 vmathSoaV3ScalarDiv_V( VmathSoaVector3 vec, vec_float4 scalar ) +{ + VmathSoaVector3 result; + vmathSoaV3ScalarDiv(&result, &vec, scalar); + return result; +} + +static inline VmathSoaVector3 vmathSoaV3Neg_V( VmathSoaVector3 vec ) +{ + VmathSoaVector3 result; + vmathSoaV3Neg(&result, &vec); + return result; +} + +static inline VmathSoaVector3 vmathSoaV3MulPerElem_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1 ) +{ + VmathSoaVector3 result; + vmathSoaV3MulPerElem(&result, &vec0, &vec1); + return result; +} + +static inline VmathSoaVector3 vmathSoaV3DivPerElem_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1 ) +{ + VmathSoaVector3 result; + vmathSoaV3DivPerElem(&result, &vec0, &vec1); + return result; +} + +static inline VmathSoaVector3 vmathSoaV3RecipPerElem_V( VmathSoaVector3 vec ) +{ + VmathSoaVector3 result; + vmathSoaV3RecipPerElem(&result, &vec); + return result; +} + +static inline VmathSoaVector3 vmathSoaV3SqrtPerElem_V( VmathSoaVector3 vec ) +{ + VmathSoaVector3 result; + vmathSoaV3SqrtPerElem(&result, &vec); + return result; +} + +static inline VmathSoaVector3 vmathSoaV3RsqrtPerElem_V( VmathSoaVector3 vec ) +{ + VmathSoaVector3 result; + vmathSoaV3RsqrtPerElem(&result, &vec); + return result; +} + +static inline VmathSoaVector3 vmathSoaV3AbsPerElem_V( VmathSoaVector3 vec ) +{ + VmathSoaVector3 result; + vmathSoaV3AbsPerElem(&result, &vec); + return result; +} + +static inline VmathSoaVector3 vmathSoaV3CopySignPerElem_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1 ) +{ + VmathSoaVector3 result; + vmathSoaV3CopySignPerElem(&result, &vec0, &vec1); + return result; +} + +static inline VmathSoaVector3 vmathSoaV3MaxPerElem_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1 ) +{ + VmathSoaVector3 result; + vmathSoaV3MaxPerElem(&result, &vec0, &vec1); + return result; +} + +static inline vec_float4 vmathSoaV3MaxElem_V( VmathSoaVector3 vec ) +{ + return vmathSoaV3MaxElem(&vec); +} + +static inline VmathSoaVector3 vmathSoaV3MinPerElem_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1 ) +{ + VmathSoaVector3 result; + vmathSoaV3MinPerElem(&result, &vec0, &vec1); + return result; +} + +static inline vec_float4 vmathSoaV3MinElem_V( VmathSoaVector3 vec ) +{ + return vmathSoaV3MinElem(&vec); +} + +static inline vec_float4 vmathSoaV3Sum_V( VmathSoaVector3 vec ) +{ + return vmathSoaV3Sum(&vec); +} + +static inline vec_float4 vmathSoaV3Dot_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1 ) +{ + return vmathSoaV3Dot(&vec0, &vec1); +} + +static inline vec_float4 vmathSoaV3LengthSqr_V( VmathSoaVector3 vec ) +{ + return vmathSoaV3LengthSqr(&vec); +} + +static inline vec_float4 vmathSoaV3Length_V( VmathSoaVector3 vec ) +{ + return vmathSoaV3Length(&vec); +} + +static inline VmathSoaVector3 vmathSoaV3Normalize_V( VmathSoaVector3 vec ) +{ + VmathSoaVector3 result; + vmathSoaV3Normalize(&result, &vec); + return result; +} + +static inline VmathSoaVector3 vmathSoaV3Cross_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1 ) +{ + VmathSoaVector3 result; + vmathSoaV3Cross(&result, &vec0, &vec1); + return result; +} + +static inline VmathSoaVector3 vmathSoaV3Select_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1, vec_uint4 select1 ) +{ + VmathSoaVector3 result; + vmathSoaV3Select(&result, &vec0, &vec1, select1); + return result; +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathSoaV3Print_V( VmathSoaVector3 vec ) +{ + vmathSoaV3Print(&vec); +} + +static inline void vmathSoaV3Prints_V( VmathSoaVector3 vec, const char *name ) +{ + vmathSoaV3Prints(&vec, name); +} + +#endif + +static inline VmathSoaVector4 vmathSoaV4MakeFromElems_V( vec_float4 _x, vec_float4 _y, vec_float4 _z, vec_float4 _w ) +{ + VmathSoaVector4 result; + vmathSoaV4MakeFromElems(&result, _x, _y, _z, _w); + return result; +} + +static inline VmathSoaVector4 vmathSoaV4MakeFromV3Scalar_V( VmathSoaVector3 xyz, vec_float4 _w ) +{ + VmathSoaVector4 result; + vmathSoaV4MakeFromV3Scalar(&result, &xyz, _w); + return result; +} + +static inline VmathSoaVector4 vmathSoaV4MakeFromV3_V( VmathSoaVector3 vec ) +{ + VmathSoaVector4 result; + vmathSoaV4MakeFromV3(&result, &vec); + return result; +} + +static inline VmathSoaVector4 vmathSoaV4MakeFromP3_V( VmathSoaPoint3 pnt ) +{ + VmathSoaVector4 result; + vmathSoaV4MakeFromP3(&result, &pnt); + return result; +} + +static inline VmathSoaVector4 vmathSoaV4MakeFromQ_V( VmathSoaQuat quat ) +{ + VmathSoaVector4 result; + vmathSoaV4MakeFromQ(&result, &quat); + return result; +} + +static inline VmathSoaVector4 vmathSoaV4MakeFromScalar_V( vec_float4 scalar ) +{ + VmathSoaVector4 result; + vmathSoaV4MakeFromScalar(&result, scalar); + return result; +} + +static inline VmathSoaVector4 vmathSoaV4MakeFromAos_V( VmathVector4 vec ) +{ + VmathSoaVector4 result; + vmathSoaV4MakeFromAos(&result, &vec); + return result; +} + +static inline VmathSoaVector4 vmathSoaV4MakeFrom4Aos_V( VmathVector4 vec0, VmathVector4 vec1, VmathVector4 vec2, VmathVector4 vec3 ) +{ + VmathSoaVector4 result; + vmathSoaV4MakeFrom4Aos(&result, &vec0, &vec1, &vec2, &vec3); + return result; +} + +static inline VmathSoaVector4 vmathSoaV4MakeXAxis_V( ) +{ + VmathSoaVector4 result; + vmathSoaV4MakeXAxis(&result); + return result; +} + +static inline VmathSoaVector4 vmathSoaV4MakeYAxis_V( ) +{ + VmathSoaVector4 result; + vmathSoaV4MakeYAxis(&result); + return result; +} + +static inline VmathSoaVector4 vmathSoaV4MakeZAxis_V( ) +{ + VmathSoaVector4 result; + vmathSoaV4MakeZAxis(&result); + return result; +} + +static inline VmathSoaVector4 vmathSoaV4MakeWAxis_V( ) +{ + VmathSoaVector4 result; + vmathSoaV4MakeWAxis(&result); + return result; +} + +static inline VmathSoaVector4 vmathSoaV4Lerp_V( vec_float4 t, VmathSoaVector4 vec0, VmathSoaVector4 vec1 ) +{ + VmathSoaVector4 result; + vmathSoaV4Lerp(&result, t, &vec0, &vec1); + return result; +} + +static inline VmathSoaVector4 vmathSoaV4Slerp_V( vec_float4 t, VmathSoaVector4 unitVec0, VmathSoaVector4 unitVec1 ) +{ + VmathSoaVector4 result; + vmathSoaV4Slerp(&result, t, &unitVec0, &unitVec1); + return result; +} + +static inline void vmathSoaV4Get4Aos_V( VmathSoaVector4 vec, VmathVector4 *result0, VmathVector4 *result1, VmathVector4 *result2, VmathVector4 *result3 ) +{ + vmathSoaV4Get4Aos(&vec, result0, result1, result2, result3); +} + +static inline void vmathSoaV4StoreHalfFloats_V( VmathSoaVector4 vec, vec_ushort8 *twoQuads ) +{ + vmathSoaV4StoreHalfFloats(&vec, twoQuads); +} + +static inline void vmathSoaV4SetXYZ_V( VmathSoaVector4 *result, VmathSoaVector3 vec ) +{ + vmathSoaV4SetXYZ(result, &vec); +} + +static inline VmathSoaVector3 vmathSoaV4GetXYZ_V( VmathSoaVector4 vec ) +{ + VmathSoaVector3 result; + vmathSoaV4GetXYZ(&result, &vec); + return result; +} + +static inline void vmathSoaV4SetX_V( VmathSoaVector4 *result, vec_float4 _x ) +{ + vmathSoaV4SetX(result, _x); +} + +static inline vec_float4 vmathSoaV4GetX_V( VmathSoaVector4 vec ) +{ + return vmathSoaV4GetX(&vec); +} + +static inline void vmathSoaV4SetY_V( VmathSoaVector4 *result, vec_float4 _y ) +{ + vmathSoaV4SetY(result, _y); +} + +static inline vec_float4 vmathSoaV4GetY_V( VmathSoaVector4 vec ) +{ + return vmathSoaV4GetY(&vec); +} + +static inline void vmathSoaV4SetZ_V( VmathSoaVector4 *result, vec_float4 _z ) +{ + vmathSoaV4SetZ(result, _z); +} + +static inline vec_float4 vmathSoaV4GetZ_V( VmathSoaVector4 vec ) +{ + return vmathSoaV4GetZ(&vec); +} + +static inline void vmathSoaV4SetW_V( VmathSoaVector4 *result, vec_float4 _w ) +{ + vmathSoaV4SetW(result, _w); +} + +static inline vec_float4 vmathSoaV4GetW_V( VmathSoaVector4 vec ) +{ + return vmathSoaV4GetW(&vec); +} + +static inline void vmathSoaV4SetElem_V( VmathSoaVector4 *result, int idx, vec_float4 value ) +{ + vmathSoaV4SetElem(result, idx, value); +} + +static inline vec_float4 vmathSoaV4GetElem_V( VmathSoaVector4 vec, int idx ) +{ + return vmathSoaV4GetElem(&vec, idx); +} + +static inline VmathSoaVector4 vmathSoaV4Add_V( VmathSoaVector4 vec0, VmathSoaVector4 vec1 ) +{ + VmathSoaVector4 result; + vmathSoaV4Add(&result, &vec0, &vec1); + return result; +} + +static inline VmathSoaVector4 vmathSoaV4Sub_V( VmathSoaVector4 vec0, VmathSoaVector4 vec1 ) +{ + VmathSoaVector4 result; + vmathSoaV4Sub(&result, &vec0, &vec1); + return result; +} + +static inline VmathSoaVector4 vmathSoaV4ScalarMul_V( VmathSoaVector4 vec, vec_float4 scalar ) +{ + VmathSoaVector4 result; + vmathSoaV4ScalarMul(&result, &vec, scalar); + return result; +} + +static inline VmathSoaVector4 vmathSoaV4ScalarDiv_V( VmathSoaVector4 vec, vec_float4 scalar ) +{ + VmathSoaVector4 result; + vmathSoaV4ScalarDiv(&result, &vec, scalar); + return result; +} + +static inline VmathSoaVector4 vmathSoaV4Neg_V( VmathSoaVector4 vec ) +{ + VmathSoaVector4 result; + vmathSoaV4Neg(&result, &vec); + return result; +} + +static inline VmathSoaVector4 vmathSoaV4MulPerElem_V( VmathSoaVector4 vec0, VmathSoaVector4 vec1 ) +{ + VmathSoaVector4 result; + vmathSoaV4MulPerElem(&result, &vec0, &vec1); + return result; +} + +static inline VmathSoaVector4 vmathSoaV4DivPerElem_V( VmathSoaVector4 vec0, VmathSoaVector4 vec1 ) +{ + VmathSoaVector4 result; + vmathSoaV4DivPerElem(&result, &vec0, &vec1); + return result; +} + +static inline VmathSoaVector4 vmathSoaV4RecipPerElem_V( VmathSoaVector4 vec ) +{ + VmathSoaVector4 result; + vmathSoaV4RecipPerElem(&result, &vec); + return result; +} + +static inline VmathSoaVector4 vmathSoaV4SqrtPerElem_V( VmathSoaVector4 vec ) +{ + VmathSoaVector4 result; + vmathSoaV4SqrtPerElem(&result, &vec); + return result; +} + +static inline VmathSoaVector4 vmathSoaV4RsqrtPerElem_V( VmathSoaVector4 vec ) +{ + VmathSoaVector4 result; + vmathSoaV4RsqrtPerElem(&result, &vec); + return result; +} + +static inline VmathSoaVector4 vmathSoaV4AbsPerElem_V( VmathSoaVector4 vec ) +{ + VmathSoaVector4 result; + vmathSoaV4AbsPerElem(&result, &vec); + return result; +} + +static inline VmathSoaVector4 vmathSoaV4CopySignPerElem_V( VmathSoaVector4 vec0, VmathSoaVector4 vec1 ) +{ + VmathSoaVector4 result; + vmathSoaV4CopySignPerElem(&result, &vec0, &vec1); + return result; +} + +static inline VmathSoaVector4 vmathSoaV4MaxPerElem_V( VmathSoaVector4 vec0, VmathSoaVector4 vec1 ) +{ + VmathSoaVector4 result; + vmathSoaV4MaxPerElem(&result, &vec0, &vec1); + return result; +} + +static inline vec_float4 vmathSoaV4MaxElem_V( VmathSoaVector4 vec ) +{ + return vmathSoaV4MaxElem(&vec); +} + +static inline VmathSoaVector4 vmathSoaV4MinPerElem_V( VmathSoaVector4 vec0, VmathSoaVector4 vec1 ) +{ + VmathSoaVector4 result; + vmathSoaV4MinPerElem(&result, &vec0, &vec1); + return result; +} + +static inline vec_float4 vmathSoaV4MinElem_V( VmathSoaVector4 vec ) +{ + return vmathSoaV4MinElem(&vec); +} + +static inline vec_float4 vmathSoaV4Sum_V( VmathSoaVector4 vec ) +{ + return vmathSoaV4Sum(&vec); +} + +static inline vec_float4 vmathSoaV4Dot_V( VmathSoaVector4 vec0, VmathSoaVector4 vec1 ) +{ + return vmathSoaV4Dot(&vec0, &vec1); +} + +static inline vec_float4 vmathSoaV4LengthSqr_V( VmathSoaVector4 vec ) +{ + return vmathSoaV4LengthSqr(&vec); +} + +static inline vec_float4 vmathSoaV4Length_V( VmathSoaVector4 vec ) +{ + return vmathSoaV4Length(&vec); +} + +static inline VmathSoaVector4 vmathSoaV4Normalize_V( VmathSoaVector4 vec ) +{ + VmathSoaVector4 result; + vmathSoaV4Normalize(&result, &vec); + return result; +} + +static inline VmathSoaVector4 vmathSoaV4Select_V( VmathSoaVector4 vec0, VmathSoaVector4 vec1, vec_uint4 select1 ) +{ + VmathSoaVector4 result; + vmathSoaV4Select(&result, &vec0, &vec1, select1); + return result; +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathSoaV4Print_V( VmathSoaVector4 vec ) +{ + vmathSoaV4Print(&vec); +} + +static inline void vmathSoaV4Prints_V( VmathSoaVector4 vec, const char *name ) +{ + vmathSoaV4Prints(&vec, name); +} + +#endif + +static inline VmathSoaPoint3 vmathSoaP3MakeFromElems_V( vec_float4 _x, vec_float4 _y, vec_float4 _z ) +{ + VmathSoaPoint3 result; + vmathSoaP3MakeFromElems(&result, _x, _y, _z); + return result; +} + +static inline VmathSoaPoint3 vmathSoaP3MakeFromV3_V( VmathSoaVector3 vec ) +{ + VmathSoaPoint3 result; + vmathSoaP3MakeFromV3(&result, &vec); + return result; +} + +static inline VmathSoaPoint3 vmathSoaP3MakeFromScalar_V( vec_float4 scalar ) +{ + VmathSoaPoint3 result; + vmathSoaP3MakeFromScalar(&result, scalar); + return result; +} + +static inline VmathSoaPoint3 vmathSoaP3MakeFromAos_V( VmathPoint3 pnt ) +{ + VmathSoaPoint3 result; + vmathSoaP3MakeFromAos(&result, &pnt); + return result; +} + +static inline VmathSoaPoint3 vmathSoaP3MakeFrom4Aos_V( VmathPoint3 pnt0, VmathPoint3 pnt1, VmathPoint3 pnt2, VmathPoint3 pnt3 ) +{ + VmathSoaPoint3 result; + vmathSoaP3MakeFrom4Aos(&result, &pnt0, &pnt1, &pnt2, &pnt3); + return result; +} + +static inline VmathSoaPoint3 vmathSoaP3Lerp_V( vec_float4 t, VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1 ) +{ + VmathSoaPoint3 result; + vmathSoaP3Lerp(&result, t, &pnt0, &pnt1); + return result; +} + +static inline void vmathSoaP3Get4Aos_V( VmathSoaPoint3 pnt, VmathPoint3 *result0, VmathPoint3 *result1, VmathPoint3 *result2, VmathPoint3 *result3 ) +{ + vmathSoaP3Get4Aos(&pnt, result0, result1, result2, result3); +} + +static inline void vmathSoaP3LoadXYZArray_V( VmathSoaPoint3 *vec, const vec_float4 *threeQuads ) +{ + vmathSoaP3LoadXYZArray(vec, threeQuads); +} + +static inline void vmathSoaP3StoreXYZArray_V( VmathSoaPoint3 vec, vec_float4 *threeQuads ) +{ + vmathSoaP3StoreXYZArray(&vec, threeQuads); +} + +static inline void vmathSoaP3StoreHalfFloats_V( VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1, vec_ushort8 *threeQuads ) +{ + vmathSoaP3StoreHalfFloats(&pnt0, &pnt1, threeQuads); +} + +static inline void vmathSoaP3SetX_V( VmathSoaPoint3 *result, vec_float4 _x ) +{ + vmathSoaP3SetX(result, _x); +} + +static inline vec_float4 vmathSoaP3GetX_V( VmathSoaPoint3 pnt ) +{ + return vmathSoaP3GetX(&pnt); +} + +static inline void vmathSoaP3SetY_V( VmathSoaPoint3 *result, vec_float4 _y ) +{ + vmathSoaP3SetY(result, _y); +} + +static inline vec_float4 vmathSoaP3GetY_V( VmathSoaPoint3 pnt ) +{ + return vmathSoaP3GetY(&pnt); +} + +static inline void vmathSoaP3SetZ_V( VmathSoaPoint3 *result, vec_float4 _z ) +{ + vmathSoaP3SetZ(result, _z); +} + +static inline vec_float4 vmathSoaP3GetZ_V( VmathSoaPoint3 pnt ) +{ + return vmathSoaP3GetZ(&pnt); +} + +static inline void vmathSoaP3SetElem_V( VmathSoaPoint3 *result, int idx, vec_float4 value ) +{ + vmathSoaP3SetElem(result, idx, value); +} + +static inline vec_float4 vmathSoaP3GetElem_V( VmathSoaPoint3 pnt, int idx ) +{ + return vmathSoaP3GetElem(&pnt, idx); +} + +static inline VmathSoaVector3 vmathSoaP3Sub_V( VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1 ) +{ + VmathSoaVector3 result; + vmathSoaP3Sub(&result, &pnt0, &pnt1); + return result; +} + +static inline VmathSoaPoint3 vmathSoaP3AddV3_V( VmathSoaPoint3 pnt, VmathSoaVector3 vec1 ) +{ + VmathSoaPoint3 result; + vmathSoaP3AddV3(&result, &pnt, &vec1); + return result; +} + +static inline VmathSoaPoint3 vmathSoaP3SubV3_V( VmathSoaPoint3 pnt, VmathSoaVector3 vec1 ) +{ + VmathSoaPoint3 result; + vmathSoaP3SubV3(&result, &pnt, &vec1); + return result; +} + +static inline VmathSoaPoint3 vmathSoaP3MulPerElem_V( VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1 ) +{ + VmathSoaPoint3 result; + vmathSoaP3MulPerElem(&result, &pnt0, &pnt1); + return result; +} + +static inline VmathSoaPoint3 vmathSoaP3DivPerElem_V( VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1 ) +{ + VmathSoaPoint3 result; + vmathSoaP3DivPerElem(&result, &pnt0, &pnt1); + return result; +} + +static inline VmathSoaPoint3 vmathSoaP3RecipPerElem_V( VmathSoaPoint3 pnt ) +{ + VmathSoaPoint3 result; + vmathSoaP3RecipPerElem(&result, &pnt); + return result; +} + +static inline VmathSoaPoint3 vmathSoaP3SqrtPerElem_V( VmathSoaPoint3 pnt ) +{ + VmathSoaPoint3 result; + vmathSoaP3SqrtPerElem(&result, &pnt); + return result; +} + +static inline VmathSoaPoint3 vmathSoaP3RsqrtPerElem_V( VmathSoaPoint3 pnt ) +{ + VmathSoaPoint3 result; + vmathSoaP3RsqrtPerElem(&result, &pnt); + return result; +} + +static inline VmathSoaPoint3 vmathSoaP3AbsPerElem_V( VmathSoaPoint3 pnt ) +{ + VmathSoaPoint3 result; + vmathSoaP3AbsPerElem(&result, &pnt); + return result; +} + +static inline VmathSoaPoint3 vmathSoaP3CopySignPerElem_V( VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1 ) +{ + VmathSoaPoint3 result; + vmathSoaP3CopySignPerElem(&result, &pnt0, &pnt1); + return result; +} + +static inline VmathSoaPoint3 vmathSoaP3MaxPerElem_V( VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1 ) +{ + VmathSoaPoint3 result; + vmathSoaP3MaxPerElem(&result, &pnt0, &pnt1); + return result; +} + +static inline vec_float4 vmathSoaP3MaxElem_V( VmathSoaPoint3 pnt ) +{ + return vmathSoaP3MaxElem(&pnt); +} + +static inline VmathSoaPoint3 vmathSoaP3MinPerElem_V( VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1 ) +{ + VmathSoaPoint3 result; + vmathSoaP3MinPerElem(&result, &pnt0, &pnt1); + return result; +} + +static inline vec_float4 vmathSoaP3MinElem_V( VmathSoaPoint3 pnt ) +{ + return vmathSoaP3MinElem(&pnt); +} + +static inline vec_float4 vmathSoaP3Sum_V( VmathSoaPoint3 pnt ) +{ + return vmathSoaP3Sum(&pnt); +} + +static inline VmathSoaPoint3 vmathSoaP3Scale_V( VmathSoaPoint3 pnt, vec_float4 scaleVal ) +{ + VmathSoaPoint3 result; + vmathSoaP3Scale(&result, &pnt, scaleVal); + return result; +} + +static inline VmathSoaPoint3 vmathSoaP3NonUniformScale_V( VmathSoaPoint3 pnt, VmathSoaVector3 scaleVec ) +{ + VmathSoaPoint3 result; + vmathSoaP3NonUniformScale(&result, &pnt, &scaleVec); + return result; +} + +static inline vec_float4 vmathSoaP3Projection_V( VmathSoaPoint3 pnt, VmathSoaVector3 unitVec ) +{ + return vmathSoaP3Projection(&pnt, &unitVec); +} + +static inline vec_float4 vmathSoaP3DistSqrFromOrigin_V( VmathSoaPoint3 pnt ) +{ + return vmathSoaP3DistSqrFromOrigin(&pnt); +} + +static inline vec_float4 vmathSoaP3DistFromOrigin_V( VmathSoaPoint3 pnt ) +{ + return vmathSoaP3DistFromOrigin(&pnt); +} + +static inline vec_float4 vmathSoaP3DistSqr_V( VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1 ) +{ + return vmathSoaP3DistSqr(&pnt0, &pnt1); +} + +static inline vec_float4 vmathSoaP3Dist_V( VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1 ) +{ + return vmathSoaP3Dist(&pnt0, &pnt1); +} + +static inline VmathSoaPoint3 vmathSoaP3Select_V( VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1, vec_uint4 select1 ) +{ + VmathSoaPoint3 result; + vmathSoaP3Select(&result, &pnt0, &pnt1, select1); + return result; +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathSoaP3Print_V( VmathSoaPoint3 pnt ) +{ + vmathSoaP3Print(&pnt); +} + +static inline void vmathSoaP3Prints_V( VmathSoaPoint3 pnt, const char *name ) +{ + vmathSoaP3Prints(&pnt, name); +} + +#endif + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/ppu/c/vectormath_aos.h b/Extras/vectormathlibrary/include/vectormath/ppu/c/vectormath_aos.h new file mode 100644 index 000000000..025e6fe88 --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/ppu/c/vectormath_aos.h @@ -0,0 +1,1960 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_AOS_C_H +#define _VECTORMATH_AOS_C_H + +#include +#include +#include +#include + +#ifdef _VECTORMATH_DEBUG +#include +#endif + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#ifndef _VECTORMATH_AOS_C_TYPES_H +#define _VECTORMATH_AOS_C_TYPES_H + +/* A 3-D vector in array-of-structures format + */ +typedef struct _VmathVector3 +{ + vec_float4 vec128; +} VmathVector3; + +/* A 4-D vector in array-of-structures format + */ +typedef struct _VmathVector4 +{ + vec_float4 vec128; +} VmathVector4; + +/* A 3-D point in array-of-structures format + */ +typedef struct _VmathPoint3 +{ + vec_float4 vec128; +} VmathPoint3; + +/* A quaternion in array-of-structures format + */ +typedef struct _VmathQuat +{ + vec_float4 vec128; +} VmathQuat; + +/* A 3x3 matrix in array-of-structures format + */ +typedef struct _VmathMatrix3 +{ + VmathVector3 col0; + VmathVector3 col1; + VmathVector3 col2; +} VmathMatrix3; + +/* A 4x4 matrix in array-of-structures format + */ +typedef struct _VmathMatrix4 +{ + VmathVector4 col0; + VmathVector4 col1; + VmathVector4 col2; + VmathVector4 col3; +} VmathMatrix4; + +/* A 3x4 transformation matrix in array-of-structures format + */ +typedef struct _VmathTransform3 +{ + VmathVector3 col0; + VmathVector3 col1; + VmathVector3 col2; + VmathVector3 col3; +} VmathTransform3; + +#endif + +/* + * Copy a 3-D vector + */ +static inline void vmathV3Copy( VmathVector3 *result, const VmathVector3 *vec ); + +/* + * Construct a 3-D vector from x, y, and z elements + */ +static inline void vmathV3MakeFromElems( VmathVector3 *result, float x, float y, float z ); + +/* + * Copy elements from a 3-D point into a 3-D vector + */ +static inline void vmathV3MakeFromP3( VmathVector3 *result, const VmathPoint3 *pnt ); + +/* + * Set all elements of a 3-D vector to the same scalar value + */ +static inline void vmathV3MakeFromScalar( VmathVector3 *result, float scalar ); + +/* + * Set vector float data in a 3-D vector + */ +static inline void vmathV3MakeFrom128( VmathVector3 *result, vec_float4 vf4 ); + +/* + * Get vector float data from a 3-D vector + */ +static inline vec_float4 vmathV3Get128( const VmathVector3 *vec ); + +/* + * Set the x element of a 3-D vector + */ +static inline void vmathV3SetX( VmathVector3 *result, float x ); + +/* + * Set the y element of a 3-D vector + */ +static inline void vmathV3SetY( VmathVector3 *result, float y ); + +/* + * Set the z element of a 3-D vector + */ +static inline void vmathV3SetZ( VmathVector3 *result, float z ); + +/* + * Get the x element of a 3-D vector + */ +static inline float vmathV3GetX( const VmathVector3 *vec ); + +/* + * Get the y element of a 3-D vector + */ +static inline float vmathV3GetY( const VmathVector3 *vec ); + +/* + * Get the z element of a 3-D vector + */ +static inline float vmathV3GetZ( const VmathVector3 *vec ); + +/* + * Set an x, y, or z element of a 3-D vector by index + */ +static inline void vmathV3SetElem( VmathVector3 *result, int idx, float value ); + +/* + * Get an x, y, or z element of a 3-D vector by index + */ +static inline float vmathV3GetElem( const VmathVector3 *vec, int idx ); + +/* + * Add two 3-D vectors + */ +static inline void vmathV3Add( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1 ); + +/* + * Subtract a 3-D vector from another 3-D vector + */ +static inline void vmathV3Sub( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1 ); + +/* + * Add a 3-D vector to a 3-D point + */ +static inline void vmathV3AddP3( VmathPoint3 *result, const VmathVector3 *vec, const VmathPoint3 *pnt ); + +/* + * Multiply a 3-D vector by a scalar + */ +static inline void vmathV3ScalarMul( VmathVector3 *result, const VmathVector3 *vec, float scalar ); + +/* + * Divide a 3-D vector by a scalar + */ +static inline void vmathV3ScalarDiv( VmathVector3 *result, const VmathVector3 *vec, float scalar ); + +/* + * Negate all elements of a 3-D vector + */ +static inline void vmathV3Neg( VmathVector3 *result, const VmathVector3 *vec ); + +/* + * Construct x axis + */ +static inline void vmathV3MakeXAxis( VmathVector3 *result ); + +/* + * Construct y axis + */ +static inline void vmathV3MakeYAxis( VmathVector3 *result ); + +/* + * Construct z axis + */ +static inline void vmathV3MakeZAxis( VmathVector3 *result ); + +/* + * Multiply two 3-D vectors per element + */ +static inline void vmathV3MulPerElem( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1 ); + +/* + * Divide two 3-D vectors per element + * NOTE: + * Floating-point behavior matches standard library function divf4. + */ +static inline void vmathV3DivPerElem( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1 ); + +/* + * Compute the reciprocal of a 3-D vector per element + * NOTE: + * Floating-point behavior matches standard library function recipf4. + */ +static inline void vmathV3RecipPerElem( VmathVector3 *result, const VmathVector3 *vec ); + +/* + * Compute the square root of a 3-D vector per element + * NOTE: + * Floating-point behavior matches standard library function sqrtf4. + */ +static inline void vmathV3SqrtPerElem( VmathVector3 *result, const VmathVector3 *vec ); + +/* + * Compute the reciprocal square root of a 3-D vector per element + * NOTE: + * Floating-point behavior matches standard library function rsqrtf4. + */ +static inline void vmathV3RsqrtPerElem( VmathVector3 *result, const VmathVector3 *vec ); + +/* + * Compute the absolute value of a 3-D vector per element + */ +static inline void vmathV3AbsPerElem( VmathVector3 *result, const VmathVector3 *vec ); + +/* + * Copy sign from one 3-D vector to another, per element + */ +static inline void vmathV3CopySignPerElem( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1 ); + +/* + * Maximum of two 3-D vectors per element + */ +static inline void vmathV3MaxPerElem( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1 ); + +/* + * Minimum of two 3-D vectors per element + */ +static inline void vmathV3MinPerElem( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1 ); + +/* + * Maximum element of a 3-D vector + */ +static inline float vmathV3MaxElem( const VmathVector3 *vec ); + +/* + * Minimum element of a 3-D vector + */ +static inline float vmathV3MinElem( const VmathVector3 *vec ); + +/* + * Compute the sum of all elements of a 3-D vector + */ +static inline float vmathV3Sum( const VmathVector3 *vec ); + +/* + * Compute the dot product of two 3-D vectors + */ +static inline float vmathV3Dot( const VmathVector3 *vec0, const VmathVector3 *vec1 ); + +/* + * Compute the square of the length of a 3-D vector + */ +static inline float vmathV3LengthSqr( const VmathVector3 *vec ); + +/* + * Compute the length of a 3-D vector + */ +static inline float vmathV3Length( const VmathVector3 *vec ); + +/* + * Normalize a 3-D vector + * NOTE: + * The result is unpredictable when all elements of vec are at or near zero. + */ +static inline void vmathV3Normalize( VmathVector3 *result, const VmathVector3 *vec ); + +/* + * Compute cross product of two 3-D vectors + */ +static inline void vmathV3Cross( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1 ); + +/* + * Outer product of two 3-D vectors + */ +static inline void vmathV3Outer( VmathMatrix3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1 ); + +/* + * Pre-multiply a row vector by a 3x3 matrix + * NOTE: + * Slower than column post-multiply. + */ +static inline void vmathV3RowMul( VmathVector3 *result, const VmathVector3 *vec, const VmathMatrix3 *mat ); + +/* + * Cross-product matrix of a 3-D vector + */ +static inline void vmathV3CrossMatrix( VmathMatrix3 *result, const VmathVector3 *vec ); + +/* + * Create cross-product matrix and multiply + * NOTE: + * Faster than separately creating a cross-product matrix and multiplying. + */ +static inline void vmathV3CrossMatrixMul( VmathMatrix3 *result, const VmathVector3 *vec, const VmathMatrix3 *mat ); + +/* + * Linear interpolation between two 3-D vectors + * NOTE: + * Does not clamp t between 0 and 1. + */ +static inline void vmathV3Lerp( VmathVector3 *result, float t, const VmathVector3 *vec0, const VmathVector3 *vec1 ); + +/* + * Spherical linear interpolation between two 3-D vectors + * NOTE: + * The result is unpredictable if the vectors point in opposite directions. + * Does not clamp t between 0 and 1. + */ +static inline void vmathV3Slerp( VmathVector3 *result, float t, const VmathVector3 *unitVec0, const VmathVector3 *unitVec1 ); + +/* + * Conditionally select between two 3-D vectors + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + * However, the transfer of select1 to a VMX register may use more processing time than a branch. + */ +static inline void vmathV3Select( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1, unsigned int select1 ); + +/* + * Store x, y, and z elements of a 3-D vector in the first three words of a quadword. + * The value of the fourth word (the word with the highest address) remains unchanged + */ +static inline void vmathV3StoreXYZ( const VmathVector3 *vec, vec_float4 *quad ); + +/* + * Load four three-float 3-D vectors, stored in three quadwords + */ +static inline void vmathV3LoadXYZArray( VmathVector3 *vec0, VmathVector3 *vec1, VmathVector3 *vec2, VmathVector3 *vec3, const vec_float4 *threeQuads ); + +/* + * Store four 3-D vectors in three quadwords + */ +static inline void vmathV3StoreXYZArray( const VmathVector3 *vec0, const VmathVector3 *vec1, const VmathVector3 *vec2, const VmathVector3 *vec3, vec_float4 *threeQuads ); + +/* + * Store eight 3-D vectors as half-floats + */ +static inline void vmathV3StoreHalfFloats( const VmathVector3 *vec0, const VmathVector3 *vec1, const VmathVector3 *vec2, const VmathVector3 *vec3, const VmathVector3 *vec4, const VmathVector3 *vec5, const VmathVector3 *vec6, const VmathVector3 *vec7, vec_ushort8 *threeQuads ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 3-D vector + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathV3Print( const VmathVector3 *vec ); + +/* + * Print a 3-D vector and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathV3Prints( const VmathVector3 *vec, const char *name ); + +#endif + +/* + * Copy a 4-D vector + */ +static inline void vmathV4Copy( VmathVector4 *result, const VmathVector4 *vec ); + +/* + * Construct a 4-D vector from x, y, z, and w elements + */ +static inline void vmathV4MakeFromElems( VmathVector4 *result, float x, float y, float z, float w ); + +/* + * Construct a 4-D vector from a 3-D vector and a scalar + */ +static inline void vmathV4MakeFromV3Scalar( VmathVector4 *result, const VmathVector3 *xyz, float w ); + +/* + * Copy x, y, and z from a 3-D vector into a 4-D vector, and set w to 0 + */ +static inline void vmathV4MakeFromV3( VmathVector4 *result, const VmathVector3 *vec ); + +/* + * Copy x, y, and z from a 3-D point into a 4-D vector, and set w to 1 + */ +static inline void vmathV4MakeFromP3( VmathVector4 *result, const VmathPoint3 *pnt ); + +/* + * Copy elements from a quaternion into a 4-D vector + */ +static inline void vmathV4MakeFromQ( VmathVector4 *result, const VmathQuat *quat ); + +/* + * Set all elements of a 4-D vector to the same scalar value + */ +static inline void vmathV4MakeFromScalar( VmathVector4 *result, float scalar ); + +/* + * Set vector float data in a 4-D vector + */ +static inline void vmathV4MakeFrom128( VmathVector4 *result, vec_float4 vf4 ); + +/* + * Get vector float data from a 4-D vector + */ +static inline vec_float4 vmathV4Get128( const VmathVector4 *vec ); + +/* + * Set the x, y, and z elements of a 4-D vector + * NOTE: + * This function does not change the w element. + */ +static inline void vmathV4SetXYZ( VmathVector4 *result, const VmathVector3 *vec ); + +/* + * Get the x, y, and z elements of a 4-D vector + */ +static inline void vmathV4GetXYZ( VmathVector3 *result, const VmathVector4 *vec ); + +/* + * Set the x element of a 4-D vector + */ +static inline void vmathV4SetX( VmathVector4 *result, float x ); + +/* + * Set the y element of a 4-D vector + */ +static inline void vmathV4SetY( VmathVector4 *result, float y ); + +/* + * Set the z element of a 4-D vector + */ +static inline void vmathV4SetZ( VmathVector4 *result, float z ); + +/* + * Set the w element of a 4-D vector + */ +static inline void vmathV4SetW( VmathVector4 *result, float w ); + +/* + * Get the x element of a 4-D vector + */ +static inline float vmathV4GetX( const VmathVector4 *vec ); + +/* + * Get the y element of a 4-D vector + */ +static inline float vmathV4GetY( const VmathVector4 *vec ); + +/* + * Get the z element of a 4-D vector + */ +static inline float vmathV4GetZ( const VmathVector4 *vec ); + +/* + * Get the w element of a 4-D vector + */ +static inline float vmathV4GetW( const VmathVector4 *vec ); + +/* + * Set an x, y, z, or w element of a 4-D vector by index + */ +static inline void vmathV4SetElem( VmathVector4 *result, int idx, float value ); + +/* + * Get an x, y, z, or w element of a 4-D vector by index + */ +static inline float vmathV4GetElem( const VmathVector4 *vec, int idx ); + +/* + * Add two 4-D vectors + */ +static inline void vmathV4Add( VmathVector4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1 ); + +/* + * Subtract a 4-D vector from another 4-D vector + */ +static inline void vmathV4Sub( VmathVector4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1 ); + +/* + * Multiply a 4-D vector by a scalar + */ +static inline void vmathV4ScalarMul( VmathVector4 *result, const VmathVector4 *vec, float scalar ); + +/* + * Divide a 4-D vector by a scalar + */ +static inline void vmathV4ScalarDiv( VmathVector4 *result, const VmathVector4 *vec, float scalar ); + +/* + * Negate all elements of a 4-D vector + */ +static inline void vmathV4Neg( VmathVector4 *result, const VmathVector4 *vec ); + +/* + * Construct x axis + */ +static inline void vmathV4MakeXAxis( VmathVector4 *result ); + +/* + * Construct y axis + */ +static inline void vmathV4MakeYAxis( VmathVector4 *result ); + +/* + * Construct z axis + */ +static inline void vmathV4MakeZAxis( VmathVector4 *result ); + +/* + * Construct w axis + */ +static inline void vmathV4MakeWAxis( VmathVector4 *result ); + +/* + * Multiply two 4-D vectors per element + */ +static inline void vmathV4MulPerElem( VmathVector4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1 ); + +/* + * Divide two 4-D vectors per element + * NOTE: + * Floating-point behavior matches standard library function divf4. + */ +static inline void vmathV4DivPerElem( VmathVector4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1 ); + +/* + * Compute the reciprocal of a 4-D vector per element + * NOTE: + * Floating-point behavior matches standard library function recipf4. + */ +static inline void vmathV4RecipPerElem( VmathVector4 *result, const VmathVector4 *vec ); + +/* + * Compute the square root of a 4-D vector per element + * NOTE: + * Floating-point behavior matches standard library function sqrtf4. + */ +static inline void vmathV4SqrtPerElem( VmathVector4 *result, const VmathVector4 *vec ); + +/* + * Compute the reciprocal square root of a 4-D vector per element + * NOTE: + * Floating-point behavior matches standard library function rsqrtf4. + */ +static inline void vmathV4RsqrtPerElem( VmathVector4 *result, const VmathVector4 *vec ); + +/* + * Compute the absolute value of a 4-D vector per element + */ +static inline void vmathV4AbsPerElem( VmathVector4 *result, const VmathVector4 *vec ); + +/* + * Copy sign from one 4-D vector to another, per element + */ +static inline void vmathV4CopySignPerElem( VmathVector4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1 ); + +/* + * Maximum of two 4-D vectors per element + */ +static inline void vmathV4MaxPerElem( VmathVector4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1 ); + +/* + * Minimum of two 4-D vectors per element + */ +static inline void vmathV4MinPerElem( VmathVector4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1 ); + +/* + * Maximum element of a 4-D vector + */ +static inline float vmathV4MaxElem( const VmathVector4 *vec ); + +/* + * Minimum element of a 4-D vector + */ +static inline float vmathV4MinElem( const VmathVector4 *vec ); + +/* + * Compute the sum of all elements of a 4-D vector + */ +static inline float vmathV4Sum( const VmathVector4 *vec ); + +/* + * Compute the dot product of two 4-D vectors + */ +static inline float vmathV4Dot( const VmathVector4 *vec0, const VmathVector4 *vec1 ); + +/* + * Compute the square of the length of a 4-D vector + */ +static inline float vmathV4LengthSqr( const VmathVector4 *vec ); + +/* + * Compute the length of a 4-D vector + */ +static inline float vmathV4Length( const VmathVector4 *vec ); + +/* + * Normalize a 4-D vector + * NOTE: + * The result is unpredictable when all elements of vec are at or near zero. + */ +static inline void vmathV4Normalize( VmathVector4 *result, const VmathVector4 *vec ); + +/* + * Outer product of two 4-D vectors + */ +static inline void vmathV4Outer( VmathMatrix4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1 ); + +/* + * Linear interpolation between two 4-D vectors + * NOTE: + * Does not clamp t between 0 and 1. + */ +static inline void vmathV4Lerp( VmathVector4 *result, float t, const VmathVector4 *vec0, const VmathVector4 *vec1 ); + +/* + * Spherical linear interpolation between two 4-D vectors + * NOTE: + * The result is unpredictable if the vectors point in opposite directions. + * Does not clamp t between 0 and 1. + */ +static inline void vmathV4Slerp( VmathVector4 *result, float t, const VmathVector4 *unitVec0, const VmathVector4 *unitVec1 ); + +/* + * Conditionally select between two 4-D vectors + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + * However, the transfer of select1 to a VMX register may use more processing time than a branch. + */ +static inline void vmathV4Select( VmathVector4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1, unsigned int select1 ); + +/* + * Store four 4-D vectors as half-floats + */ +static inline void vmathV4StoreHalfFloats( const VmathVector4 *vec0, const VmathVector4 *vec1, const VmathVector4 *vec2, const VmathVector4 *vec3, vec_ushort8 *twoQuads ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 4-D vector + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathV4Print( const VmathVector4 *vec ); + +/* + * Print a 4-D vector and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathV4Prints( const VmathVector4 *vec, const char *name ); + +#endif + +/* + * Copy a 3-D point + */ +static inline void vmathP3Copy( VmathPoint3 *result, const VmathPoint3 *pnt ); + +/* + * Construct a 3-D point from x, y, and z elements + */ +static inline void vmathP3MakeFromElems( VmathPoint3 *result, float x, float y, float z ); + +/* + * Copy elements from a 3-D vector into a 3-D point + */ +static inline void vmathP3MakeFromV3( VmathPoint3 *result, const VmathVector3 *vec ); + +/* + * Set all elements of a 3-D point to the same scalar value + */ +static inline void vmathP3MakeFromScalar( VmathPoint3 *result, float scalar ); + +/* + * Set vector float data in a 3-D point + */ +static inline void vmathP3MakeFrom128( VmathPoint3 *result, vec_float4 vf4 ); + +/* + * Get vector float data from a 3-D point + */ +static inline vec_float4 vmathP3Get128( const VmathPoint3 *pnt ); + +/* + * Set the x element of a 3-D point + */ +static inline void vmathP3SetX( VmathPoint3 *result, float x ); + +/* + * Set the y element of a 3-D point + */ +static inline void vmathP3SetY( VmathPoint3 *result, float y ); + +/* + * Set the z element of a 3-D point + */ +static inline void vmathP3SetZ( VmathPoint3 *result, float z ); + +/* + * Get the x element of a 3-D point + */ +static inline float vmathP3GetX( const VmathPoint3 *pnt ); + +/* + * Get the y element of a 3-D point + */ +static inline float vmathP3GetY( const VmathPoint3 *pnt ); + +/* + * Get the z element of a 3-D point + */ +static inline float vmathP3GetZ( const VmathPoint3 *pnt ); + +/* + * Set an x, y, or z element of a 3-D point by index + */ +static inline void vmathP3SetElem( VmathPoint3 *result, int idx, float value ); + +/* + * Get an x, y, or z element of a 3-D point by index + */ +static inline float vmathP3GetElem( const VmathPoint3 *pnt, int idx ); + +/* + * Subtract a 3-D point from another 3-D point + */ +static inline void vmathP3Sub( VmathVector3 *result, const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ); + +/* + * Add a 3-D point to a 3-D vector + */ +static inline void vmathP3AddV3( VmathPoint3 *result, const VmathPoint3 *pnt, const VmathVector3 *vec ); + +/* + * Subtract a 3-D vector from a 3-D point + */ +static inline void vmathP3SubV3( VmathPoint3 *result, const VmathPoint3 *pnt, const VmathVector3 *vec ); + +/* + * Multiply two 3-D points per element + */ +static inline void vmathP3MulPerElem( VmathPoint3 *result, const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ); + +/* + * Divide two 3-D points per element + * NOTE: + * Floating-point behavior matches standard library function divf4. + */ +static inline void vmathP3DivPerElem( VmathPoint3 *result, const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ); + +/* + * Compute the reciprocal of a 3-D point per element + * NOTE: + * Floating-point behavior matches standard library function recipf4. + */ +static inline void vmathP3RecipPerElem( VmathPoint3 *result, const VmathPoint3 *pnt ); + +/* + * Compute the square root of a 3-D point per element + * NOTE: + * Floating-point behavior matches standard library function sqrtf4. + */ +static inline void vmathP3SqrtPerElem( VmathPoint3 *result, const VmathPoint3 *pnt ); + +/* + * Compute the reciprocal square root of a 3-D point per element + * NOTE: + * Floating-point behavior matches standard library function rsqrtf4. + */ +static inline void vmathP3RsqrtPerElem( VmathPoint3 *result, const VmathPoint3 *pnt ); + +/* + * Compute the absolute value of a 3-D point per element + */ +static inline void vmathP3AbsPerElem( VmathPoint3 *result, const VmathPoint3 *pnt ); + +/* + * Copy sign from one 3-D point to another, per element + */ +static inline void vmathP3CopySignPerElem( VmathPoint3 *result, const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ); + +/* + * Maximum of two 3-D points per element + */ +static inline void vmathP3MaxPerElem( VmathPoint3 *result, const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ); + +/* + * Minimum of two 3-D points per element + */ +static inline void vmathP3MinPerElem( VmathPoint3 *result, const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ); + +/* + * Maximum element of a 3-D point + */ +static inline float vmathP3MaxElem( const VmathPoint3 *pnt ); + +/* + * Minimum element of a 3-D point + */ +static inline float vmathP3MinElem( const VmathPoint3 *pnt ); + +/* + * Compute the sum of all elements of a 3-D point + */ +static inline float vmathP3Sum( const VmathPoint3 *pnt ); + +/* + * Apply uniform scale to a 3-D point + */ +static inline void vmathP3Scale( VmathPoint3 *result, const VmathPoint3 *pnt, float scaleVal ); + +/* + * Apply non-uniform scale to a 3-D point + */ +static inline void vmathP3NonUniformScale( VmathPoint3 *result, const VmathPoint3 *pnt, const VmathVector3 *scaleVec ); + +/* + * Scalar projection of a 3-D point on a unit-length 3-D vector + */ +static inline float vmathP3Projection( const VmathPoint3 *pnt, const VmathVector3 *unitVec ); + +/* + * Compute the square of the distance of a 3-D point from the coordinate-system origin + */ +static inline float vmathP3DistSqrFromOrigin( const VmathPoint3 *pnt ); + +/* + * Compute the distance of a 3-D point from the coordinate-system origin + */ +static inline float vmathP3DistFromOrigin( const VmathPoint3 *pnt ); + +/* + * Compute the square of the distance between two 3-D points + */ +static inline float vmathP3DistSqr( const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ); + +/* + * Compute the distance between two 3-D points + */ +static inline float vmathP3Dist( const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ); + +/* + * Linear interpolation between two 3-D points + * NOTE: + * Does not clamp t between 0 and 1. + */ +static inline void vmathP3Lerp( VmathPoint3 *result, float t, const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ); + +/* + * Conditionally select between two 3-D points + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + * However, the transfer of select1 to a VMX register may use more processing time than a branch. + */ +static inline void vmathP3Select( VmathPoint3 *result, const VmathPoint3 *pnt0, const VmathPoint3 *pnt1, unsigned int select1 ); + +/* + * Store x, y, and z elements of a 3-D point in the first three words of a quadword. + * The value of the fourth word (the word with the highest address) remains unchanged + */ +static inline void vmathP3StoreXYZ( const VmathPoint3 *pnt, vec_float4 *quad ); + +/* + * Load four three-float 3-D points, stored in three quadwords + */ +static inline void vmathP3LoadXYZArray( VmathPoint3 *pnt0, VmathPoint3 *pnt1, VmathPoint3 *pnt2, VmathPoint3 *pnt3, const vec_float4 *threeQuads ); + +/* + * Store four 3-D points in three quadwords + */ +static inline void vmathP3StoreXYZArray( const VmathPoint3 *pnt0, const VmathPoint3 *pnt1, const VmathPoint3 *pnt2, const VmathPoint3 *pnt3, vec_float4 *threeQuads ); + +/* + * Store eight 3-D points as half-floats + */ +static inline void vmathP3StoreHalfFloats( const VmathPoint3 *pnt0, const VmathPoint3 *pnt1, const VmathPoint3 *pnt2, const VmathPoint3 *pnt3, const VmathPoint3 *pnt4, const VmathPoint3 *pnt5, const VmathPoint3 *pnt6, const VmathPoint3 *pnt7, vec_ushort8 *threeQuads ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 3-D point + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathP3Print( const VmathPoint3 *pnt ); + +/* + * Print a 3-D point and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathP3Prints( const VmathPoint3 *pnt, const char *name ); + +#endif + +/* + * Copy a quaternion + */ +static inline void vmathQCopy( VmathQuat *result, const VmathQuat *quat ); + +/* + * Construct a quaternion from x, y, z, and w elements + */ +static inline void vmathQMakeFromElems( VmathQuat *result, float x, float y, float z, float w ); + +/* + * Construct a quaternion from a 3-D vector and a scalar + */ +static inline void vmathQMakeFromV3Scalar( VmathQuat *result, const VmathVector3 *xyz, float w ); + +/* + * Copy elements from a 4-D vector into a quaternion + */ +static inline void vmathQMakeFromV4( VmathQuat *result, const VmathVector4 *vec ); + +/* + * Convert a rotation matrix to a unit-length quaternion + */ +static inline void vmathQMakeFromM3( VmathQuat *result, const VmathMatrix3 *rotMat ); + +/* + * Set all elements of a quaternion to the same scalar value + */ +static inline void vmathQMakeFromScalar( VmathQuat *result, float scalar ); + +/* + * Set vector float data in a quaternion + */ +static inline void vmathQMakeFrom128( VmathQuat *result, vec_float4 vf4 ); + +/* + * Get vector float data from a quaternion + */ +static inline vec_float4 vmathQGet128( const VmathQuat *quat ); + +/* + * Set the x, y, and z elements of a quaternion + * NOTE: + * This function does not change the w element. + */ +static inline void vmathQSetXYZ( VmathQuat *result, const VmathVector3 *vec ); + +/* + * Get the x, y, and z elements of a quaternion + */ +static inline void vmathQGetXYZ( VmathVector3 *result, const VmathQuat *quat ); + +/* + * Set the x element of a quaternion + */ +static inline void vmathQSetX( VmathQuat *result, float x ); + +/* + * Set the y element of a quaternion + */ +static inline void vmathQSetY( VmathQuat *result, float y ); + +/* + * Set the z element of a quaternion + */ +static inline void vmathQSetZ( VmathQuat *result, float z ); + +/* + * Set the w element of a quaternion + */ +static inline void vmathQSetW( VmathQuat *result, float w ); + +/* + * Get the x element of a quaternion + */ +static inline float vmathQGetX( const VmathQuat *quat ); + +/* + * Get the y element of a quaternion + */ +static inline float vmathQGetY( const VmathQuat *quat ); + +/* + * Get the z element of a quaternion + */ +static inline float vmathQGetZ( const VmathQuat *quat ); + +/* + * Get the w element of a quaternion + */ +static inline float vmathQGetW( const VmathQuat *quat ); + +/* + * Set an x, y, z, or w element of a quaternion by index + */ +static inline void vmathQSetElem( VmathQuat *result, int idx, float value ); + +/* + * Get an x, y, z, or w element of a quaternion by index + */ +static inline float vmathQGetElem( const VmathQuat *quat, int idx ); + +/* + * Add two quaternions + */ +static inline void vmathQAdd( VmathQuat *result, const VmathQuat *quat0, const VmathQuat *quat1 ); + +/* + * Subtract a quaternion from another quaternion + */ +static inline void vmathQSub( VmathQuat *result, const VmathQuat *quat0, const VmathQuat *quat1 ); + +/* + * Multiply two quaternions + */ +static inline void vmathQMul( VmathQuat *result, const VmathQuat *quat0, const VmathQuat *quat1 ); + +/* + * Multiply a quaternion by a scalar + */ +static inline void vmathQScalarMul( VmathQuat *result, const VmathQuat *quat, float scalar ); + +/* + * Divide a quaternion by a scalar + */ +static inline void vmathQScalarDiv( VmathQuat *result, const VmathQuat *quat, float scalar ); + +/* + * Negate all elements of a quaternion + */ +static inline void vmathQNeg( VmathQuat *result, const VmathQuat *quat ); + +/* + * Construct an identity quaternion + */ +static inline void vmathQMakeIdentity( VmathQuat *result ); + +/* + * Construct a quaternion to rotate between two unit-length 3-D vectors + * NOTE: + * The result is unpredictable if unitVec0 and unitVec1 point in opposite directions. + */ +static inline void vmathQMakeRotationArc( VmathQuat *result, const VmathVector3 *unitVec0, const VmathVector3 *unitVec1 ); + +/* + * Construct a quaternion to rotate around a unit-length 3-D vector + */ +static inline void vmathQMakeRotationAxis( VmathQuat *result, float radians, const VmathVector3 *unitVec ); + +/* + * Construct a quaternion to rotate around the x axis + */ +static inline void vmathQMakeRotationX( VmathQuat *result, float radians ); + +/* + * Construct a quaternion to rotate around the y axis + */ +static inline void vmathQMakeRotationY( VmathQuat *result, float radians ); + +/* + * Construct a quaternion to rotate around the z axis + */ +static inline void vmathQMakeRotationZ( VmathQuat *result, float radians ); + +/* + * Compute the conjugate of a quaternion + */ +static inline void vmathQConj( VmathQuat *result, const VmathQuat *quat ); + +/* + * Use a unit-length quaternion to rotate a 3-D vector + */ +static inline void vmathQRotate( VmathVector3 *result, const VmathQuat *unitQuat, const VmathVector3 *vec ); + +/* + * Compute the dot product of two quaternions + */ +static inline float vmathQDot( const VmathQuat *quat0, const VmathQuat *quat1 ); + +/* + * Compute the norm of a quaternion + */ +static inline float vmathQNorm( const VmathQuat *quat ); + +/* + * Compute the length of a quaternion + */ +static inline float vmathQLength( const VmathQuat *quat ); + +/* + * Normalize a quaternion + * NOTE: + * The result is unpredictable when all elements of quat are at or near zero. + */ +static inline void vmathQNormalize( VmathQuat *result, const VmathQuat *quat ); + +/* + * Linear interpolation between two quaternions + * NOTE: + * Does not clamp t between 0 and 1. + */ +static inline void vmathQLerp( VmathQuat *result, float t, const VmathQuat *quat0, const VmathQuat *quat1 ); + +/* + * Spherical linear interpolation between two quaternions + * NOTE: + * Interpolates along the shortest path between orientations. + * Does not clamp t between 0 and 1. + */ +static inline void vmathQSlerp( VmathQuat *result, float t, const VmathQuat *unitQuat0, const VmathQuat *unitQuat1 ); + +/* + * Spherical quadrangle interpolation + */ +static inline void vmathQSquad( VmathQuat *result, float t, const VmathQuat *unitQuat0, const VmathQuat *unitQuat1, const VmathQuat *unitQuat2, const VmathQuat *unitQuat3 ); + +/* + * Conditionally select between two quaternions + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + * However, the transfer of select1 to a VMX register may use more processing time than a branch. + */ +static inline void vmathQSelect( VmathQuat *result, const VmathQuat *quat0, const VmathQuat *quat1, unsigned int select1 ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a quaternion + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathQPrint( const VmathQuat *quat ); + +/* + * Print a quaternion and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathQPrints( const VmathQuat *quat, const char *name ); + +#endif + +/* + * Copy a 3x3 matrix + */ +static inline void vmathM3Copy( VmathMatrix3 *result, const VmathMatrix3 *mat ); + +/* + * Construct a 3x3 matrix containing the specified columns + */ +static inline void vmathM3MakeFromCols( VmathMatrix3 *result, const VmathVector3 *col0, const VmathVector3 *col1, const VmathVector3 *col2 ); + +/* + * Construct a 3x3 rotation matrix from a unit-length quaternion + */ +static inline void vmathM3MakeFromQ( VmathMatrix3 *result, const VmathQuat *unitQuat ); + +/* + * Set all elements of a 3x3 matrix to the same scalar value + */ +static inline void vmathM3MakeFromScalar( VmathMatrix3 *result, float scalar ); + +/* + * Set column 0 of a 3x3 matrix + */ +static inline void vmathM3SetCol0( VmathMatrix3 *result, const VmathVector3 *col0 ); + +/* + * Set column 1 of a 3x3 matrix + */ +static inline void vmathM3SetCol1( VmathMatrix3 *result, const VmathVector3 *col1 ); + +/* + * Set column 2 of a 3x3 matrix + */ +static inline void vmathM3SetCol2( VmathMatrix3 *result, const VmathVector3 *col2 ); + +/* + * Get column 0 of a 3x3 matrix + */ +static inline void vmathM3GetCol0( VmathVector3 *result, const VmathMatrix3 *mat ); + +/* + * Get column 1 of a 3x3 matrix + */ +static inline void vmathM3GetCol1( VmathVector3 *result, const VmathMatrix3 *mat ); + +/* + * Get column 2 of a 3x3 matrix + */ +static inline void vmathM3GetCol2( VmathVector3 *result, const VmathMatrix3 *mat ); + +/* + * Set the column of a 3x3 matrix referred to by the specified index + */ +static inline void vmathM3SetCol( VmathMatrix3 *result, int col, const VmathVector3 *vec ); + +/* + * Set the row of a 3x3 matrix referred to by the specified index + */ +static inline void vmathM3SetRow( VmathMatrix3 *result, int row, const VmathVector3 *vec ); + +/* + * Get the column of a 3x3 matrix referred to by the specified index + */ +static inline void vmathM3GetCol( VmathVector3 *result, const VmathMatrix3 *mat, int col ); + +/* + * Get the row of a 3x3 matrix referred to by the specified index + */ +static inline void vmathM3GetRow( VmathVector3 *result, const VmathMatrix3 *mat, int row ); + +/* + * Set the element of a 3x3 matrix referred to by column and row indices + */ +static inline void vmathM3SetElem( VmathMatrix3 *result, int col, int row, float val ); + +/* + * Get the element of a 3x3 matrix referred to by column and row indices + */ +static inline float vmathM3GetElem( const VmathMatrix3 *mat, int col, int row ); + +/* + * Add two 3x3 matrices + */ +static inline void vmathM3Add( VmathMatrix3 *result, const VmathMatrix3 *mat0, const VmathMatrix3 *mat1 ); + +/* + * Subtract a 3x3 matrix from another 3x3 matrix + */ +static inline void vmathM3Sub( VmathMatrix3 *result, const VmathMatrix3 *mat0, const VmathMatrix3 *mat1 ); + +/* + * Negate all elements of a 3x3 matrix + */ +static inline void vmathM3Neg( VmathMatrix3 *result, const VmathMatrix3 *mat ); + +/* + * Multiply a 3x3 matrix by a scalar + */ +static inline void vmathM3ScalarMul( VmathMatrix3 *result, const VmathMatrix3 *mat, float scalar ); + +/* + * Multiply a 3x3 matrix by a 3-D vector + */ +static inline void vmathM3MulV3( VmathVector3 *result, const VmathMatrix3 *mat, const VmathVector3 *vec ); + +/* + * Multiply two 3x3 matrices + */ +static inline void vmathM3Mul( VmathMatrix3 *result, const VmathMatrix3 *mat0, const VmathMatrix3 *mat1 ); + +/* + * Construct an identity 3x3 matrix + */ +static inline void vmathM3MakeIdentity( VmathMatrix3 *result ); + +/* + * Construct a 3x3 matrix to rotate around the x axis + */ +static inline void vmathM3MakeRotationX( VmathMatrix3 *result, float radians ); + +/* + * Construct a 3x3 matrix to rotate around the y axis + */ +static inline void vmathM3MakeRotationY( VmathMatrix3 *result, float radians ); + +/* + * Construct a 3x3 matrix to rotate around the z axis + */ +static inline void vmathM3MakeRotationZ( VmathMatrix3 *result, float radians ); + +/* + * Construct a 3x3 matrix to rotate around the x, y, and z axes + */ +static inline void vmathM3MakeRotationZYX( VmathMatrix3 *result, const VmathVector3 *radiansXYZ ); + +/* + * Construct a 3x3 matrix to rotate around a unit-length 3-D vector + */ +static inline void vmathM3MakeRotationAxis( VmathMatrix3 *result, float radians, const VmathVector3 *unitVec ); + +/* + * Construct a rotation matrix from a unit-length quaternion + */ +static inline void vmathM3MakeRotationQ( VmathMatrix3 *result, const VmathQuat *unitQuat ); + +/* + * Construct a 3x3 matrix to perform scaling + */ +static inline void vmathM3MakeScale( VmathMatrix3 *result, const VmathVector3 *scaleVec ); + +/* + * Append (post-multiply) a scale transformation to a 3x3 matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline void vmathM3AppendScale( VmathMatrix3 *result, const VmathMatrix3 *mat, const VmathVector3 *scaleVec ); + +/* + * Prepend (pre-multiply) a scale transformation to a 3x3 matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline void vmathM3PrependScale( VmathMatrix3 *result, const VmathVector3 *scaleVec, const VmathMatrix3 *mat ); + +/* + * Multiply two 3x3 matrices per element + */ +static inline void vmathM3MulPerElem( VmathMatrix3 *result, const VmathMatrix3 *mat0, const VmathMatrix3 *mat1 ); + +/* + * Compute the absolute value of a 3x3 matrix per element + */ +static inline void vmathM3AbsPerElem( VmathMatrix3 *result, const VmathMatrix3 *mat ); + +/* + * Transpose of a 3x3 matrix + */ +static inline void vmathM3Transpose( VmathMatrix3 *result, const VmathMatrix3 *mat ); + +/* + * Compute the inverse of a 3x3 matrix + * NOTE: + * Result is unpredictable when the determinant of mat is equal to or near 0. + */ +static inline void vmathM3Inverse( VmathMatrix3 *result, const VmathMatrix3 *mat ); + +/* + * Determinant of a 3x3 matrix + */ +static inline float vmathM3Determinant( const VmathMatrix3 *mat ); + +/* + * Conditionally select between two 3x3 matrices + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + * However, the transfer of select1 to a VMX register may use more processing time than a branch. + */ +static inline void vmathM3Select( VmathMatrix3 *result, const VmathMatrix3 *mat0, const VmathMatrix3 *mat1, unsigned int select1 ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 3x3 matrix + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathM3Print( const VmathMatrix3 *mat ); + +/* + * Print a 3x3 matrix and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathM3Prints( const VmathMatrix3 *mat, const char *name ); + +#endif + +/* + * Copy a 4x4 matrix + */ +static inline void vmathM4Copy( VmathMatrix4 *result, const VmathMatrix4 *mat ); + +/* + * Construct a 4x4 matrix containing the specified columns + */ +static inline void vmathM4MakeFromCols( VmathMatrix4 *result, const VmathVector4 *col0, const VmathVector4 *col1, const VmathVector4 *col2, const VmathVector4 *col3 ); + +/* + * Construct a 4x4 matrix from a 3x4 transformation matrix + */ +static inline void vmathM4MakeFromT3( VmathMatrix4 *result, const VmathTransform3 *mat ); + +/* + * Construct a 4x4 matrix from a 3x3 matrix and a 3-D vector + */ +static inline void vmathM4MakeFromM3V3( VmathMatrix4 *result, const VmathMatrix3 *mat, const VmathVector3 *translateVec ); + +/* + * Construct a 4x4 matrix from a unit-length quaternion and a 3-D vector + */ +static inline void vmathM4MakeFromQV3( VmathMatrix4 *result, const VmathQuat *unitQuat, const VmathVector3 *translateVec ); + +/* + * Set all elements of a 4x4 matrix to the same scalar value + */ +static inline void vmathM4MakeFromScalar( VmathMatrix4 *result, float scalar ); + +/* + * Set the upper-left 3x3 submatrix + * NOTE: + * This function does not change the bottom row elements. + */ +static inline void vmathM4SetUpper3x3( VmathMatrix4 *result, const VmathMatrix3 *mat3 ); + +/* + * Get the upper-left 3x3 submatrix of a 4x4 matrix + */ +static inline void vmathM4GetUpper3x3( VmathMatrix3 *result, const VmathMatrix4 *mat ); + +/* + * Set translation component + * NOTE: + * This function does not change the bottom row elements. + */ +static inline void vmathM4SetTranslation( VmathMatrix4 *result, const VmathVector3 *translateVec ); + +/* + * Get the translation component of a 4x4 matrix + */ +static inline void vmathM4GetTranslation( VmathVector3 *result, const VmathMatrix4 *mat ); + +/* + * Set column 0 of a 4x4 matrix + */ +static inline void vmathM4SetCol0( VmathMatrix4 *result, const VmathVector4 *col0 ); + +/* + * Set column 1 of a 4x4 matrix + */ +static inline void vmathM4SetCol1( VmathMatrix4 *result, const VmathVector4 *col1 ); + +/* + * Set column 2 of a 4x4 matrix + */ +static inline void vmathM4SetCol2( VmathMatrix4 *result, const VmathVector4 *col2 ); + +/* + * Set column 3 of a 4x4 matrix + */ +static inline void vmathM4SetCol3( VmathMatrix4 *result, const VmathVector4 *col3 ); + +/* + * Get column 0 of a 4x4 matrix + */ +static inline void vmathM4GetCol0( VmathVector4 *result, const VmathMatrix4 *mat ); + +/* + * Get column 1 of a 4x4 matrix + */ +static inline void vmathM4GetCol1( VmathVector4 *result, const VmathMatrix4 *mat ); + +/* + * Get column 2 of a 4x4 matrix + */ +static inline void vmathM4GetCol2( VmathVector4 *result, const VmathMatrix4 *mat ); + +/* + * Get column 3 of a 4x4 matrix + */ +static inline void vmathM4GetCol3( VmathVector4 *result, const VmathMatrix4 *mat ); + +/* + * Set the column of a 4x4 matrix referred to by the specified index + */ +static inline void vmathM4SetCol( VmathMatrix4 *result, int col, const VmathVector4 *vec ); + +/* + * Set the row of a 4x4 matrix referred to by the specified index + */ +static inline void vmathM4SetRow( VmathMatrix4 *result, int row, const VmathVector4 *vec ); + +/* + * Get the column of a 4x4 matrix referred to by the specified index + */ +static inline void vmathM4GetCol( VmathVector4 *result, const VmathMatrix4 *mat, int col ); + +/* + * Get the row of a 4x4 matrix referred to by the specified index + */ +static inline void vmathM4GetRow( VmathVector4 *result, const VmathMatrix4 *mat, int row ); + +/* + * Set the element of a 4x4 matrix referred to by column and row indices + */ +static inline void vmathM4SetElem( VmathMatrix4 *result, int col, int row, float val ); + +/* + * Get the element of a 4x4 matrix referred to by column and row indices + */ +static inline float vmathM4GetElem( const VmathMatrix4 *mat, int col, int row ); + +/* + * Add two 4x4 matrices + */ +static inline void vmathM4Add( VmathMatrix4 *result, const VmathMatrix4 *mat0, const VmathMatrix4 *mat1 ); + +/* + * Subtract a 4x4 matrix from another 4x4 matrix + */ +static inline void vmathM4Sub( VmathMatrix4 *result, const VmathMatrix4 *mat0, const VmathMatrix4 *mat1 ); + +/* + * Negate all elements of a 4x4 matrix + */ +static inline void vmathM4Neg( VmathMatrix4 *result, const VmathMatrix4 *mat ); + +/* + * Multiply a 4x4 matrix by a scalar + */ +static inline void vmathM4ScalarMul( VmathMatrix4 *result, const VmathMatrix4 *mat, float scalar ); + +/* + * Multiply a 4x4 matrix by a 4-D vector + */ +static inline void vmathM4MulV4( VmathVector4 *result, const VmathMatrix4 *mat, const VmathVector4 *vec ); + +/* + * Multiply a 4x4 matrix by a 3-D vector + */ +static inline void vmathM4MulV3( VmathVector4 *result, const VmathMatrix4 *mat, const VmathVector3 *vec ); + +/* + * Multiply a 4x4 matrix by a 3-D point + */ +static inline void vmathM4MulP3( VmathVector4 *result, const VmathMatrix4 *mat, const VmathPoint3 *pnt ); + +/* + * Multiply two 4x4 matrices + */ +static inline void vmathM4Mul( VmathMatrix4 *result, const VmathMatrix4 *mat0, const VmathMatrix4 *mat1 ); + +/* + * Multiply a 4x4 matrix by a 3x4 transformation matrix + */ +static inline void vmathM4MulT3( VmathMatrix4 *result, const VmathMatrix4 *mat, const VmathTransform3 *tfrm ); + +/* + * Construct an identity 4x4 matrix + */ +static inline void vmathM4MakeIdentity( VmathMatrix4 *result ); + +/* + * Construct a 4x4 matrix to rotate around the x axis + */ +static inline void vmathM4MakeRotationX( VmathMatrix4 *result, float radians ); + +/* + * Construct a 4x4 matrix to rotate around the y axis + */ +static inline void vmathM4MakeRotationY( VmathMatrix4 *result, float radians ); + +/* + * Construct a 4x4 matrix to rotate around the z axis + */ +static inline void vmathM4MakeRotationZ( VmathMatrix4 *result, float radians ); + +/* + * Construct a 4x4 matrix to rotate around the x, y, and z axes + */ +static inline void vmathM4MakeRotationZYX( VmathMatrix4 *result, const VmathVector3 *radiansXYZ ); + +/* + * Construct a 4x4 matrix to rotate around a unit-length 3-D vector + */ +static inline void vmathM4MakeRotationAxis( VmathMatrix4 *result, float radians, const VmathVector3 *unitVec ); + +/* + * Construct a rotation matrix from a unit-length quaternion + */ +static inline void vmathM4MakeRotationQ( VmathMatrix4 *result, const VmathQuat *unitQuat ); + +/* + * Construct a 4x4 matrix to perform scaling + */ +static inline void vmathM4MakeScale( VmathMatrix4 *result, const VmathVector3 *scaleVec ); + +/* + * Construct a 4x4 matrix to perform translation + */ +static inline void vmathM4MakeTranslation( VmathMatrix4 *result, const VmathVector3 *translateVec ); + +/* + * Construct viewing matrix based on eye position, position looked at, and up direction + */ +static inline void vmathM4MakeLookAt( VmathMatrix4 *result, const VmathPoint3 *eyePos, const VmathPoint3 *lookAtPos, const VmathVector3 *upVec ); + +/* + * Construct a perspective projection matrix + */ +static inline void vmathM4MakePerspective( VmathMatrix4 *result, float fovyRadians, float aspect, float zNear, float zFar ); + +/* + * Construct a perspective projection matrix based on frustum + */ +static inline void vmathM4MakeFrustum( VmathMatrix4 *result, float left, float right, float bottom, float top, float zNear, float zFar ); + +/* + * Construct an orthographic projection matrix + */ +static inline void vmathM4MakeOrthographic( VmathMatrix4 *result, float left, float right, float bottom, float top, float zNear, float zFar ); + +/* + * Append (post-multiply) a scale transformation to a 4x4 matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline void vmathM4AppendScale( VmathMatrix4 *result, const VmathMatrix4 *mat, const VmathVector3 *scaleVec ); + +/* + * Prepend (pre-multiply) a scale transformation to a 4x4 matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline void vmathM4PrependScale( VmathMatrix4 *result, const VmathVector3 *scaleVec, const VmathMatrix4 *mat ); + +/* + * Multiply two 4x4 matrices per element + */ +static inline void vmathM4MulPerElem( VmathMatrix4 *result, const VmathMatrix4 *mat0, const VmathMatrix4 *mat1 ); + +/* + * Compute the absolute value of a 4x4 matrix per element + */ +static inline void vmathM4AbsPerElem( VmathMatrix4 *result, const VmathMatrix4 *mat ); + +/* + * Transpose of a 4x4 matrix + */ +static inline void vmathM4Transpose( VmathMatrix4 *result, const VmathMatrix4 *mat ); + +/* + * Compute the inverse of a 4x4 matrix + * NOTE: + * Result is unpredictable when the determinant of mat is equal to or near 0. + */ +static inline void vmathM4Inverse( VmathMatrix4 *result, const VmathMatrix4 *mat ); + +/* + * Compute the inverse of a 4x4 matrix, which is expected to be an affine matrix + * NOTE: + * This can be used to achieve better performance than a general inverse when the specified 4x4 matrix meets the given restrictions. The result is unpredictable when the determinant of mat is equal to or near 0. + */ +static inline void vmathM4AffineInverse( VmathMatrix4 *result, const VmathMatrix4 *mat ); + +/* + * Compute the inverse of a 4x4 matrix, which is expected to be an affine matrix with an orthogonal upper-left 3x3 submatrix + * NOTE: + * This can be used to achieve better performance than a general inverse when the specified 4x4 matrix meets the given restrictions. + */ +static inline void vmathM4OrthoInverse( VmathMatrix4 *result, const VmathMatrix4 *mat ); + +/* + * Determinant of a 4x4 matrix + */ +static inline float vmathM4Determinant( const VmathMatrix4 *mat ); + +/* + * Conditionally select between two 4x4 matrices + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + * However, the transfer of select1 to a VMX register may use more processing time than a branch. + */ +static inline void vmathM4Select( VmathMatrix4 *result, const VmathMatrix4 *mat0, const VmathMatrix4 *mat1, unsigned int select1 ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 4x4 matrix + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathM4Print( const VmathMatrix4 *mat ); + +/* + * Print a 4x4 matrix and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathM4Prints( const VmathMatrix4 *mat, const char *name ); + +#endif + +/* + * Copy a 3x4 transformation matrix + */ +static inline void vmathT3Copy( VmathTransform3 *result, const VmathTransform3 *tfrm ); + +/* + * Construct a 3x4 transformation matrix containing the specified columns + */ +static inline void vmathT3MakeFromCols( VmathTransform3 *result, const VmathVector3 *col0, const VmathVector3 *col1, const VmathVector3 *col2, const VmathVector3 *col3 ); + +/* + * Construct a 3x4 transformation matrix from a 3x3 matrix and a 3-D vector + */ +static inline void vmathT3MakeFromM3V3( VmathTransform3 *result, const VmathMatrix3 *tfrm, const VmathVector3 *translateVec ); + +/* + * Construct a 3x4 transformation matrix from a unit-length quaternion and a 3-D vector + */ +static inline void vmathT3MakeFromQV3( VmathTransform3 *result, const VmathQuat *unitQuat, const VmathVector3 *translateVec ); + +/* + * Set all elements of a 3x4 transformation matrix to the same scalar value + */ +static inline void vmathT3MakeFromScalar( VmathTransform3 *result, float scalar ); + +/* + * Set the upper-left 3x3 submatrix + */ +static inline void vmathT3SetUpper3x3( VmathTransform3 *result, const VmathMatrix3 *mat3 ); + +/* + * Get the upper-left 3x3 submatrix of a 3x4 transformation matrix + */ +static inline void vmathT3GetUpper3x3( VmathMatrix3 *result, const VmathTransform3 *tfrm ); + +/* + * Set translation component + */ +static inline void vmathT3SetTranslation( VmathTransform3 *result, const VmathVector3 *translateVec ); + +/* + * Get the translation component of a 3x4 transformation matrix + */ +static inline void vmathT3GetTranslation( VmathVector3 *result, const VmathTransform3 *tfrm ); + +/* + * Set column 0 of a 3x4 transformation matrix + */ +static inline void vmathT3SetCol0( VmathTransform3 *result, const VmathVector3 *col0 ); + +/* + * Set column 1 of a 3x4 transformation matrix + */ +static inline void vmathT3SetCol1( VmathTransform3 *result, const VmathVector3 *col1 ); + +/* + * Set column 2 of a 3x4 transformation matrix + */ +static inline void vmathT3SetCol2( VmathTransform3 *result, const VmathVector3 *col2 ); + +/* + * Set column 3 of a 3x4 transformation matrix + */ +static inline void vmathT3SetCol3( VmathTransform3 *result, const VmathVector3 *col3 ); + +/* + * Get column 0 of a 3x4 transformation matrix + */ +static inline void vmathT3GetCol0( VmathVector3 *result, const VmathTransform3 *tfrm ); + +/* + * Get column 1 of a 3x4 transformation matrix + */ +static inline void vmathT3GetCol1( VmathVector3 *result, const VmathTransform3 *tfrm ); + +/* + * Get column 2 of a 3x4 transformation matrix + */ +static inline void vmathT3GetCol2( VmathVector3 *result, const VmathTransform3 *tfrm ); + +/* + * Get column 3 of a 3x4 transformation matrix + */ +static inline void vmathT3GetCol3( VmathVector3 *result, const VmathTransform3 *tfrm ); + +/* + * Set the column of a 3x4 transformation matrix referred to by the specified index + */ +static inline void vmathT3SetCol( VmathTransform3 *result, int col, const VmathVector3 *vec ); + +/* + * Set the row of a 3x4 transformation matrix referred to by the specified index + */ +static inline void vmathT3SetRow( VmathTransform3 *result, int row, const VmathVector4 *vec ); + +/* + * Get the column of a 3x4 transformation matrix referred to by the specified index + */ +static inline void vmathT3GetCol( VmathVector3 *result, const VmathTransform3 *tfrm, int col ); + +/* + * Get the row of a 3x4 transformation matrix referred to by the specified index + */ +static inline void vmathT3GetRow( VmathVector4 *result, const VmathTransform3 *tfrm, int row ); + +/* + * Set the element of a 3x4 transformation matrix referred to by column and row indices + */ +static inline void vmathT3SetElem( VmathTransform3 *result, int col, int row, float val ); + +/* + * Get the element of a 3x4 transformation matrix referred to by column and row indices + */ +static inline float vmathT3GetElem( const VmathTransform3 *tfrm, int col, int row ); + +/* + * Multiply a 3x4 transformation matrix by a 3-D vector + */ +static inline void vmathT3MulV3( VmathVector3 *result, const VmathTransform3 *tfrm, const VmathVector3 *vec ); + +/* + * Multiply a 3x4 transformation matrix by a 3-D point + */ +static inline void vmathT3MulP3( VmathPoint3 *result, const VmathTransform3 *tfrm, const VmathPoint3 *pnt ); + +/* + * Multiply two 3x4 transformation matrices + */ +static inline void vmathT3Mul( VmathTransform3 *result, const VmathTransform3 *tfrm0, const VmathTransform3 *tfrm1 ); + +/* + * Construct an identity 3x4 transformation matrix + */ +static inline void vmathT3MakeIdentity( VmathTransform3 *result ); + +/* + * Construct a 3x4 transformation matrix to rotate around the x axis + */ +static inline void vmathT3MakeRotationX( VmathTransform3 *result, float radians ); + +/* + * Construct a 3x4 transformation matrix to rotate around the y axis + */ +static inline void vmathT3MakeRotationY( VmathTransform3 *result, float radians ); + +/* + * Construct a 3x4 transformation matrix to rotate around the z axis + */ +static inline void vmathT3MakeRotationZ( VmathTransform3 *result, float radians ); + +/* + * Construct a 3x4 transformation matrix to rotate around the x, y, and z axes + */ +static inline void vmathT3MakeRotationZYX( VmathTransform3 *result, const VmathVector3 *radiansXYZ ); + +/* + * Construct a 3x4 transformation matrix to rotate around a unit-length 3-D vector + */ +static inline void vmathT3MakeRotationAxis( VmathTransform3 *result, float radians, const VmathVector3 *unitVec ); + +/* + * Construct a rotation matrix from a unit-length quaternion + */ +static inline void vmathT3MakeRotationQ( VmathTransform3 *result, const VmathQuat *unitQuat ); + +/* + * Construct a 3x4 transformation matrix to perform scaling + */ +static inline void vmathT3MakeScale( VmathTransform3 *result, const VmathVector3 *scaleVec ); + +/* + * Construct a 3x4 transformation matrix to perform translation + */ +static inline void vmathT3MakeTranslation( VmathTransform3 *result, const VmathVector3 *translateVec ); + +/* + * Append (post-multiply) a scale transformation to a 3x4 transformation matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline void vmathT3AppendScale( VmathTransform3 *result, const VmathTransform3 *tfrm, const VmathVector3 *scaleVec ); + +/* + * Prepend (pre-multiply) a scale transformation to a 3x4 transformation matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline void vmathT3PrependScale( VmathTransform3 *result, const VmathVector3 *scaleVec, const VmathTransform3 *tfrm ); + +/* + * Multiply two 3x4 transformation matrices per element + */ +static inline void vmathT3MulPerElem( VmathTransform3 *result, const VmathTransform3 *tfrm0, const VmathTransform3 *tfrm1 ); + +/* + * Compute the absolute value of a 3x4 transformation matrix per element + */ +static inline void vmathT3AbsPerElem( VmathTransform3 *result, const VmathTransform3 *tfrm ); + +/* + * Inverse of a 3x4 transformation matrix + * NOTE: + * Result is unpredictable when the determinant of the left 3x3 submatrix is equal to or near 0. + */ +static inline void vmathT3Inverse( VmathTransform3 *result, const VmathTransform3 *tfrm ); + +/* + * Compute the inverse of a 3x4 transformation matrix, expected to have an orthogonal upper-left 3x3 submatrix + * NOTE: + * This can be used to achieve better performance than a general inverse when the specified 3x4 transformation matrix meets the given restrictions. + */ +static inline void vmathT3OrthoInverse( VmathTransform3 *result, const VmathTransform3 *tfrm ); + +/* + * Conditionally select between two 3x4 transformation matrices + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + * However, the transfer of select1 to a VMX register may use more processing time than a branch. + */ +static inline void vmathT3Select( VmathTransform3 *result, const VmathTransform3 *tfrm0, const VmathTransform3 *tfrm1, unsigned int select1 ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 3x4 transformation matrix + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathT3Print( const VmathTransform3 *tfrm ); + +/* + * Print a 3x4 transformation matrix and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathT3Prints( const VmathTransform3 *tfrm, const char *name ); + +#endif + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#include "vec_aos.h" +#include "quat_aos.h" +#include "mat_aos.h" + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/ppu/c/vectormath_aos_v.h b/Extras/vectormathlibrary/include/vectormath/ppu/c/vectormath_aos_v.h new file mode 100644 index 000000000..066a39311 --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/ppu/c/vectormath_aos_v.h @@ -0,0 +1,1924 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_AOS_C_V_H +#define _VECTORMATH_AOS_C_V_H + +#include +#include + +#ifdef _VECTORMATH_DEBUG +#include +#endif + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#ifndef _VECTORMATH_AOS_C_TYPES_H +#define _VECTORMATH_AOS_C_TYPES_H + +/* A 3-D vector in array-of-structures format + */ +typedef struct _VmathVector3 +{ + vec_float4 vec128; +} VmathVector3; + +/* A 4-D vector in array-of-structures format + */ +typedef struct _VmathVector4 +{ + vec_float4 vec128; +} VmathVector4; + +/* A 3-D point in array-of-structures format + */ +typedef struct _VmathPoint3 +{ + vec_float4 vec128; +} VmathPoint3; + +/* A quaternion in array-of-structures format + */ +typedef struct _VmathQuat +{ + vec_float4 vec128; +} VmathQuat; + +/* A 3x3 matrix in array-of-structures format + */ +typedef struct _VmathMatrix3 +{ + VmathVector3 col0; + VmathVector3 col1; + VmathVector3 col2; +} VmathMatrix3; + +/* A 4x4 matrix in array-of-structures format + */ +typedef struct _VmathMatrix4 +{ + VmathVector4 col0; + VmathVector4 col1; + VmathVector4 col2; + VmathVector4 col3; +} VmathMatrix4; + +/* A 3x4 transformation matrix in array-of-structures format + */ +typedef struct _VmathTransform3 +{ + VmathVector3 col0; + VmathVector3 col1; + VmathVector3 col2; + VmathVector3 col3; +} VmathTransform3; + +#endif + +/* + * Construct a 3-D vector from x, y, and z elements + */ +static inline VmathVector3 vmathV3MakeFromElems_V( float x, float y, float z ); + +/* + * Copy elements from a 3-D point into a 3-D vector + */ +static inline VmathVector3 vmathV3MakeFromP3_V( VmathPoint3 pnt ); + +/* + * Set all elements of a 3-D vector to the same scalar value + */ +static inline VmathVector3 vmathV3MakeFromScalar_V( float scalar ); + +/* + * Set vector float data in a 3-D vector + */ +static inline VmathVector3 vmathV3MakeFrom128_V( vec_float4 vf4 ); + +/* + * Get vector float data from a 3-D vector + */ +static inline vec_float4 vmathV3Get128_V( VmathVector3 vec ); + +/* + * Set the x element of a 3-D vector + */ +static inline void vmathV3SetX_V( VmathVector3 *result, float x ); + +/* + * Set the y element of a 3-D vector + */ +static inline void vmathV3SetY_V( VmathVector3 *result, float y ); + +/* + * Set the z element of a 3-D vector + */ +static inline void vmathV3SetZ_V( VmathVector3 *result, float z ); + +/* + * Get the x element of a 3-D vector + */ +static inline float vmathV3GetX_V( VmathVector3 vec ); + +/* + * Get the y element of a 3-D vector + */ +static inline float vmathV3GetY_V( VmathVector3 vec ); + +/* + * Get the z element of a 3-D vector + */ +static inline float vmathV3GetZ_V( VmathVector3 vec ); + +/* + * Set an x, y, or z element of a 3-D vector by index + */ +static inline void vmathV3SetElem_V( VmathVector3 *result, int idx, float value ); + +/* + * Get an x, y, or z element of a 3-D vector by index + */ +static inline float vmathV3GetElem_V( VmathVector3 vec, int idx ); + +/* + * Add two 3-D vectors + */ +static inline VmathVector3 vmathV3Add_V( VmathVector3 vec0, VmathVector3 vec1 ); + +/* + * Subtract a 3-D vector from another 3-D vector + */ +static inline VmathVector3 vmathV3Sub_V( VmathVector3 vec0, VmathVector3 vec1 ); + +/* + * Add a 3-D vector to a 3-D point + */ +static inline VmathPoint3 vmathV3AddP3_V( VmathVector3 vec, VmathPoint3 pnt ); + +/* + * Multiply a 3-D vector by a scalar + */ +static inline VmathVector3 vmathV3ScalarMul_V( VmathVector3 vec, float scalar ); + +/* + * Divide a 3-D vector by a scalar + */ +static inline VmathVector3 vmathV3ScalarDiv_V( VmathVector3 vec, float scalar ); + +/* + * Negate all elements of a 3-D vector + */ +static inline VmathVector3 vmathV3Neg_V( VmathVector3 vec ); + +/* + * Construct x axis + */ +static inline VmathVector3 vmathV3MakeXAxis_V( ); + +/* + * Construct y axis + */ +static inline VmathVector3 vmathV3MakeYAxis_V( ); + +/* + * Construct z axis + */ +static inline VmathVector3 vmathV3MakeZAxis_V( ); + +/* + * Multiply two 3-D vectors per element + */ +static inline VmathVector3 vmathV3MulPerElem_V( VmathVector3 vec0, VmathVector3 vec1 ); + +/* + * Divide two 3-D vectors per element + * NOTE: + * Floating-point behavior matches standard library function divf4. + */ +static inline VmathVector3 vmathV3DivPerElem_V( VmathVector3 vec0, VmathVector3 vec1 ); + +/* + * Compute the reciprocal of a 3-D vector per element + * NOTE: + * Floating-point behavior matches standard library function recipf4. + */ +static inline VmathVector3 vmathV3RecipPerElem_V( VmathVector3 vec ); + +/* + * Compute the square root of a 3-D vector per element + * NOTE: + * Floating-point behavior matches standard library function sqrtf4. + */ +static inline VmathVector3 vmathV3SqrtPerElem_V( VmathVector3 vec ); + +/* + * Compute the reciprocal square root of a 3-D vector per element + * NOTE: + * Floating-point behavior matches standard library function rsqrtf4. + */ +static inline VmathVector3 vmathV3RsqrtPerElem_V( VmathVector3 vec ); + +/* + * Compute the absolute value of a 3-D vector per element + */ +static inline VmathVector3 vmathV3AbsPerElem_V( VmathVector3 vec ); + +/* + * Copy sign from one 3-D vector to another, per element + */ +static inline VmathVector3 vmathV3CopySignPerElem_V( VmathVector3 vec0, VmathVector3 vec1 ); + +/* + * Maximum of two 3-D vectors per element + */ +static inline VmathVector3 vmathV3MaxPerElem_V( VmathVector3 vec0, VmathVector3 vec1 ); + +/* + * Minimum of two 3-D vectors per element + */ +static inline VmathVector3 vmathV3MinPerElem_V( VmathVector3 vec0, VmathVector3 vec1 ); + +/* + * Maximum element of a 3-D vector + */ +static inline float vmathV3MaxElem_V( VmathVector3 vec ); + +/* + * Minimum element of a 3-D vector + */ +static inline float vmathV3MinElem_V( VmathVector3 vec ); + +/* + * Compute the sum of all elements of a 3-D vector + */ +static inline float vmathV3Sum_V( VmathVector3 vec ); + +/* + * Compute the dot product of two 3-D vectors + */ +static inline float vmathV3Dot_V( VmathVector3 vec0, VmathVector3 vec1 ); + +/* + * Compute the square of the length of a 3-D vector + */ +static inline float vmathV3LengthSqr_V( VmathVector3 vec ); + +/* + * Compute the length of a 3-D vector + */ +static inline float vmathV3Length_V( VmathVector3 vec ); + +/* + * Normalize a 3-D vector + * NOTE: + * The result is unpredictable when all elements of vec are at or near zero. + */ +static inline VmathVector3 vmathV3Normalize_V( VmathVector3 vec ); + +/* + * Compute cross product of two 3-D vectors + */ +static inline VmathVector3 vmathV3Cross_V( VmathVector3 vec0, VmathVector3 vec1 ); + +/* + * Outer product of two 3-D vectors + */ +static inline VmathMatrix3 vmathV3Outer_V( VmathVector3 vec0, VmathVector3 vec1 ); + +/* + * Pre-multiply a row vector by a 3x3 matrix + * NOTE: + * Slower than column post-multiply. + */ +static inline VmathVector3 vmathV3RowMul_V( VmathVector3 vec, VmathMatrix3 mat ); + +/* + * Cross-product matrix of a 3-D vector + */ +static inline VmathMatrix3 vmathV3CrossMatrix_V( VmathVector3 vec ); + +/* + * Create cross-product matrix and multiply + * NOTE: + * Faster than separately creating a cross-product matrix and multiplying. + */ +static inline VmathMatrix3 vmathV3CrossMatrixMul_V( VmathVector3 vec, VmathMatrix3 mat ); + +/* + * Linear interpolation between two 3-D vectors + * NOTE: + * Does not clamp t between 0 and 1. + */ +static inline VmathVector3 vmathV3Lerp_V( float t, VmathVector3 vec0, VmathVector3 vec1 ); + +/* + * Spherical linear interpolation between two 3-D vectors + * NOTE: + * The result is unpredictable if the vectors point in opposite directions. + * Does not clamp t between 0 and 1. + */ +static inline VmathVector3 vmathV3Slerp_V( float t, VmathVector3 unitVec0, VmathVector3 unitVec1 ); + +/* + * Conditionally select between two 3-D vectors + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + * However, the transfer of select1 to a VMX register may use more processing time than a branch. + */ +static inline VmathVector3 vmathV3Select_V( VmathVector3 vec0, VmathVector3 vec1, unsigned int select1 ); + +/* + * Store x, y, and z elements of a 3-D vector in the first three words of a quadword. + * The value of the fourth word (the word with the highest address) remains unchanged + */ +static inline void vmathV3StoreXYZ_V( VmathVector3 vec, vec_float4 *quad ); + +/* + * Load four three-float 3-D vectors, stored in three quadwords + */ +static inline void vmathV3LoadXYZArray_V( VmathVector3 *vec0, VmathVector3 *vec1, VmathVector3 *vec2, VmathVector3 *vec3, const vec_float4 *threeQuads ); + +/* + * Store four 3-D vectors in three quadwords + */ +static inline void vmathV3StoreXYZArray_V( VmathVector3 vec0, VmathVector3 vec1, VmathVector3 vec2, VmathVector3 vec3, vec_float4 *threeQuads ); + +/* + * Store eight 3-D vectors as half-floats + */ +static inline void vmathV3StoreHalfFloats_V( VmathVector3 vec0, VmathVector3 vec1, VmathVector3 vec2, VmathVector3 vec3, VmathVector3 vec4, VmathVector3 vec5, VmathVector3 vec6, VmathVector3 vec7, vec_ushort8 *threeQuads ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 3-D vector + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathV3Print_V( VmathVector3 vec ); + +/* + * Print a 3-D vector and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathV3Prints_V( VmathVector3 vec, const char *name ); + +#endif + +/* + * Construct a 4-D vector from x, y, z, and w elements + */ +static inline VmathVector4 vmathV4MakeFromElems_V( float x, float y, float z, float w ); + +/* + * Construct a 4-D vector from a 3-D vector and a scalar + */ +static inline VmathVector4 vmathV4MakeFromV3Scalar_V( VmathVector3 xyz, float w ); + +/* + * Copy x, y, and z from a 3-D vector into a 4-D vector, and set w to 0 + */ +static inline VmathVector4 vmathV4MakeFromV3_V( VmathVector3 vec ); + +/* + * Copy x, y, and z from a 3-D point into a 4-D vector, and set w to 1 + */ +static inline VmathVector4 vmathV4MakeFromP3_V( VmathPoint3 pnt ); + +/* + * Copy elements from a quaternion into a 4-D vector + */ +static inline VmathVector4 vmathV4MakeFromQ_V( VmathQuat quat ); + +/* + * Set all elements of a 4-D vector to the same scalar value + */ +static inline VmathVector4 vmathV4MakeFromScalar_V( float scalar ); + +/* + * Set vector float data in a 4-D vector + */ +static inline VmathVector4 vmathV4MakeFrom128_V( vec_float4 vf4 ); + +/* + * Get vector float data from a 4-D vector + */ +static inline vec_float4 vmathV4Get128_V( VmathVector4 vec ); + +/* + * Set the x, y, and z elements of a 4-D vector + * NOTE: + * This function does not change the w element. + */ +static inline void vmathV4SetXYZ_V( VmathVector4 *result, VmathVector3 vec ); + +/* + * Get the x, y, and z elements of a 4-D vector + */ +static inline VmathVector3 vmathV4GetXYZ_V( VmathVector4 vec ); + +/* + * Set the x element of a 4-D vector + */ +static inline void vmathV4SetX_V( VmathVector4 *result, float x ); + +/* + * Set the y element of a 4-D vector + */ +static inline void vmathV4SetY_V( VmathVector4 *result, float y ); + +/* + * Set the z element of a 4-D vector + */ +static inline void vmathV4SetZ_V( VmathVector4 *result, float z ); + +/* + * Set the w element of a 4-D vector + */ +static inline void vmathV4SetW_V( VmathVector4 *result, float w ); + +/* + * Get the x element of a 4-D vector + */ +static inline float vmathV4GetX_V( VmathVector4 vec ); + +/* + * Get the y element of a 4-D vector + */ +static inline float vmathV4GetY_V( VmathVector4 vec ); + +/* + * Get the z element of a 4-D vector + */ +static inline float vmathV4GetZ_V( VmathVector4 vec ); + +/* + * Get the w element of a 4-D vector + */ +static inline float vmathV4GetW_V( VmathVector4 vec ); + +/* + * Set an x, y, z, or w element of a 4-D vector by index + */ +static inline void vmathV4SetElem_V( VmathVector4 *result, int idx, float value ); + +/* + * Get an x, y, z, or w element of a 4-D vector by index + */ +static inline float vmathV4GetElem_V( VmathVector4 vec, int idx ); + +/* + * Add two 4-D vectors + */ +static inline VmathVector4 vmathV4Add_V( VmathVector4 vec0, VmathVector4 vec1 ); + +/* + * Subtract a 4-D vector from another 4-D vector + */ +static inline VmathVector4 vmathV4Sub_V( VmathVector4 vec0, VmathVector4 vec1 ); + +/* + * Multiply a 4-D vector by a scalar + */ +static inline VmathVector4 vmathV4ScalarMul_V( VmathVector4 vec, float scalar ); + +/* + * Divide a 4-D vector by a scalar + */ +static inline VmathVector4 vmathV4ScalarDiv_V( VmathVector4 vec, float scalar ); + +/* + * Negate all elements of a 4-D vector + */ +static inline VmathVector4 vmathV4Neg_V( VmathVector4 vec ); + +/* + * Construct x axis + */ +static inline VmathVector4 vmathV4MakeXAxis_V( ); + +/* + * Construct y axis + */ +static inline VmathVector4 vmathV4MakeYAxis_V( ); + +/* + * Construct z axis + */ +static inline VmathVector4 vmathV4MakeZAxis_V( ); + +/* + * Construct w axis + */ +static inline VmathVector4 vmathV4MakeWAxis_V( ); + +/* + * Multiply two 4-D vectors per element + */ +static inline VmathVector4 vmathV4MulPerElem_V( VmathVector4 vec0, VmathVector4 vec1 ); + +/* + * Divide two 4-D vectors per element + * NOTE: + * Floating-point behavior matches standard library function divf4. + */ +static inline VmathVector4 vmathV4DivPerElem_V( VmathVector4 vec0, VmathVector4 vec1 ); + +/* + * Compute the reciprocal of a 4-D vector per element + * NOTE: + * Floating-point behavior matches standard library function recipf4. + */ +static inline VmathVector4 vmathV4RecipPerElem_V( VmathVector4 vec ); + +/* + * Compute the square root of a 4-D vector per element + * NOTE: + * Floating-point behavior matches standard library function sqrtf4. + */ +static inline VmathVector4 vmathV4SqrtPerElem_V( VmathVector4 vec ); + +/* + * Compute the reciprocal square root of a 4-D vector per element + * NOTE: + * Floating-point behavior matches standard library function rsqrtf4. + */ +static inline VmathVector4 vmathV4RsqrtPerElem_V( VmathVector4 vec ); + +/* + * Compute the absolute value of a 4-D vector per element + */ +static inline VmathVector4 vmathV4AbsPerElem_V( VmathVector4 vec ); + +/* + * Copy sign from one 4-D vector to another, per element + */ +static inline VmathVector4 vmathV4CopySignPerElem_V( VmathVector4 vec0, VmathVector4 vec1 ); + +/* + * Maximum of two 4-D vectors per element + */ +static inline VmathVector4 vmathV4MaxPerElem_V( VmathVector4 vec0, VmathVector4 vec1 ); + +/* + * Minimum of two 4-D vectors per element + */ +static inline VmathVector4 vmathV4MinPerElem_V( VmathVector4 vec0, VmathVector4 vec1 ); + +/* + * Maximum element of a 4-D vector + */ +static inline float vmathV4MaxElem_V( VmathVector4 vec ); + +/* + * Minimum element of a 4-D vector + */ +static inline float vmathV4MinElem_V( VmathVector4 vec ); + +/* + * Compute the sum of all elements of a 4-D vector + */ +static inline float vmathV4Sum_V( VmathVector4 vec ); + +/* + * Compute the dot product of two 4-D vectors + */ +static inline float vmathV4Dot_V( VmathVector4 vec0, VmathVector4 vec1 ); + +/* + * Compute the square of the length of a 4-D vector + */ +static inline float vmathV4LengthSqr_V( VmathVector4 vec ); + +/* + * Compute the length of a 4-D vector + */ +static inline float vmathV4Length_V( VmathVector4 vec ); + +/* + * Normalize a 4-D vector + * NOTE: + * The result is unpredictable when all elements of vec are at or near zero. + */ +static inline VmathVector4 vmathV4Normalize_V( VmathVector4 vec ); + +/* + * Outer product of two 4-D vectors + */ +static inline VmathMatrix4 vmathV4Outer_V( VmathVector4 vec0, VmathVector4 vec1 ); + +/* + * Linear interpolation between two 4-D vectors + * NOTE: + * Does not clamp t between 0 and 1. + */ +static inline VmathVector4 vmathV4Lerp_V( float t, VmathVector4 vec0, VmathVector4 vec1 ); + +/* + * Spherical linear interpolation between two 4-D vectors + * NOTE: + * The result is unpredictable if the vectors point in opposite directions. + * Does not clamp t between 0 and 1. + */ +static inline VmathVector4 vmathV4Slerp_V( float t, VmathVector4 unitVec0, VmathVector4 unitVec1 ); + +/* + * Conditionally select between two 4-D vectors + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + * However, the transfer of select1 to a VMX register may use more processing time than a branch. + */ +static inline VmathVector4 vmathV4Select_V( VmathVector4 vec0, VmathVector4 vec1, unsigned int select1 ); + +/* + * Store four 4-D vectors as half-floats + */ +static inline void vmathV4StoreHalfFloats_V( VmathVector4 vec0, VmathVector4 vec1, VmathVector4 vec2, VmathVector4 vec3, vec_ushort8 *twoQuads ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 4-D vector + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathV4Print_V( VmathVector4 vec ); + +/* + * Print a 4-D vector and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathV4Prints_V( VmathVector4 vec, const char *name ); + +#endif + +/* + * Construct a 3-D point from x, y, and z elements + */ +static inline VmathPoint3 vmathP3MakeFromElems_V( float x, float y, float z ); + +/* + * Copy elements from a 3-D vector into a 3-D point + */ +static inline VmathPoint3 vmathP3MakeFromV3_V( VmathVector3 vec ); + +/* + * Set all elements of a 3-D point to the same scalar value + */ +static inline VmathPoint3 vmathP3MakeFromScalar_V( float scalar ); + +/* + * Set vector float data in a 3-D point + */ +static inline VmathPoint3 vmathP3MakeFrom128_V( vec_float4 vf4 ); + +/* + * Get vector float data from a 3-D point + */ +static inline vec_float4 vmathP3Get128_V( VmathPoint3 pnt ); + +/* + * Set the x element of a 3-D point + */ +static inline void vmathP3SetX_V( VmathPoint3 *result, float x ); + +/* + * Set the y element of a 3-D point + */ +static inline void vmathP3SetY_V( VmathPoint3 *result, float y ); + +/* + * Set the z element of a 3-D point + */ +static inline void vmathP3SetZ_V( VmathPoint3 *result, float z ); + +/* + * Get the x element of a 3-D point + */ +static inline float vmathP3GetX_V( VmathPoint3 pnt ); + +/* + * Get the y element of a 3-D point + */ +static inline float vmathP3GetY_V( VmathPoint3 pnt ); + +/* + * Get the z element of a 3-D point + */ +static inline float vmathP3GetZ_V( VmathPoint3 pnt ); + +/* + * Set an x, y, or z element of a 3-D point by index + */ +static inline void vmathP3SetElem_V( VmathPoint3 *result, int idx, float value ); + +/* + * Get an x, y, or z element of a 3-D point by index + */ +static inline float vmathP3GetElem_V( VmathPoint3 pnt, int idx ); + +/* + * Subtract a 3-D point from another 3-D point + */ +static inline VmathVector3 vmathP3Sub_V( VmathPoint3 pnt0, VmathPoint3 pnt1 ); + +/* + * Add a 3-D point to a 3-D vector + */ +static inline VmathPoint3 vmathP3AddV3_V( VmathPoint3 pnt, VmathVector3 vec ); + +/* + * Subtract a 3-D vector from a 3-D point + */ +static inline VmathPoint3 vmathP3SubV3_V( VmathPoint3 pnt, VmathVector3 vec ); + +/* + * Multiply two 3-D points per element + */ +static inline VmathPoint3 vmathP3MulPerElem_V( VmathPoint3 pnt0, VmathPoint3 pnt1 ); + +/* + * Divide two 3-D points per element + * NOTE: + * Floating-point behavior matches standard library function divf4. + */ +static inline VmathPoint3 vmathP3DivPerElem_V( VmathPoint3 pnt0, VmathPoint3 pnt1 ); + +/* + * Compute the reciprocal of a 3-D point per element + * NOTE: + * Floating-point behavior matches standard library function recipf4. + */ +static inline VmathPoint3 vmathP3RecipPerElem_V( VmathPoint3 pnt ); + +/* + * Compute the square root of a 3-D point per element + * NOTE: + * Floating-point behavior matches standard library function sqrtf4. + */ +static inline VmathPoint3 vmathP3SqrtPerElem_V( VmathPoint3 pnt ); + +/* + * Compute the reciprocal square root of a 3-D point per element + * NOTE: + * Floating-point behavior matches standard library function rsqrtf4. + */ +static inline VmathPoint3 vmathP3RsqrtPerElem_V( VmathPoint3 pnt ); + +/* + * Compute the absolute value of a 3-D point per element + */ +static inline VmathPoint3 vmathP3AbsPerElem_V( VmathPoint3 pnt ); + +/* + * Copy sign from one 3-D point to another, per element + */ +static inline VmathPoint3 vmathP3CopySignPerElem_V( VmathPoint3 pnt0, VmathPoint3 pnt1 ); + +/* + * Maximum of two 3-D points per element + */ +static inline VmathPoint3 vmathP3MaxPerElem_V( VmathPoint3 pnt0, VmathPoint3 pnt1 ); + +/* + * Minimum of two 3-D points per element + */ +static inline VmathPoint3 vmathP3MinPerElem_V( VmathPoint3 pnt0, VmathPoint3 pnt1 ); + +/* + * Maximum element of a 3-D point + */ +static inline float vmathP3MaxElem_V( VmathPoint3 pnt ); + +/* + * Minimum element of a 3-D point + */ +static inline float vmathP3MinElem_V( VmathPoint3 pnt ); + +/* + * Compute the sum of all elements of a 3-D point + */ +static inline float vmathP3Sum_V( VmathPoint3 pnt ); + +/* + * Apply uniform scale to a 3-D point + */ +static inline VmathPoint3 vmathP3Scale_V( VmathPoint3 pnt, float scaleVal ); + +/* + * Apply non-uniform scale to a 3-D point + */ +static inline VmathPoint3 vmathP3NonUniformScale_V( VmathPoint3 pnt, VmathVector3 scaleVec ); + +/* + * Scalar projection of a 3-D point on a unit-length 3-D vector + */ +static inline float vmathP3Projection_V( VmathPoint3 pnt, VmathVector3 unitVec ); + +/* + * Compute the square of the distance of a 3-D point from the coordinate-system origin + */ +static inline float vmathP3DistSqrFromOrigin_V( VmathPoint3 pnt ); + +/* + * Compute the distance of a 3-D point from the coordinate-system origin + */ +static inline float vmathP3DistFromOrigin_V( VmathPoint3 pnt ); + +/* + * Compute the square of the distance between two 3-D points + */ +static inline float vmathP3DistSqr_V( VmathPoint3 pnt0, VmathPoint3 pnt1 ); + +/* + * Compute the distance between two 3-D points + */ +static inline float vmathP3Dist_V( VmathPoint3 pnt0, VmathPoint3 pnt1 ); + +/* + * Linear interpolation between two 3-D points + * NOTE: + * Does not clamp t between 0 and 1. + */ +static inline VmathPoint3 vmathP3Lerp_V( float t, VmathPoint3 pnt0, VmathPoint3 pnt1 ); + +/* + * Conditionally select between two 3-D points + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + * However, the transfer of select1 to a VMX register may use more processing time than a branch. + */ +static inline VmathPoint3 vmathP3Select_V( VmathPoint3 pnt0, VmathPoint3 pnt1, unsigned int select1 ); + +/* + * Store x, y, and z elements of a 3-D point in the first three words of a quadword. + * The value of the fourth word (the word with the highest address) remains unchanged + */ +static inline void vmathP3StoreXYZ_V( VmathPoint3 pnt, vec_float4 *quad ); + +/* + * Load four three-float 3-D points, stored in three quadwords + */ +static inline void vmathP3LoadXYZArray_V( VmathPoint3 *pnt0, VmathPoint3 *pnt1, VmathPoint3 *pnt2, VmathPoint3 *pnt3, const vec_float4 *threeQuads ); + +/* + * Store four 3-D points in three quadwords + */ +static inline void vmathP3StoreXYZArray_V( VmathPoint3 pnt0, VmathPoint3 pnt1, VmathPoint3 pnt2, VmathPoint3 pnt3, vec_float4 *threeQuads ); + +/* + * Store eight 3-D points as half-floats + */ +static inline void vmathP3StoreHalfFloats_V( VmathPoint3 pnt0, VmathPoint3 pnt1, VmathPoint3 pnt2, VmathPoint3 pnt3, VmathPoint3 pnt4, VmathPoint3 pnt5, VmathPoint3 pnt6, VmathPoint3 pnt7, vec_ushort8 *threeQuads ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 3-D point + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathP3Print_V( VmathPoint3 pnt ); + +/* + * Print a 3-D point and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathP3Prints_V( VmathPoint3 pnt, const char *name ); + +#endif + +/* + * Construct a quaternion from x, y, z, and w elements + */ +static inline VmathQuat vmathQMakeFromElems_V( float x, float y, float z, float w ); + +/* + * Construct a quaternion from a 3-D vector and a scalar + */ +static inline VmathQuat vmathQMakeFromV3Scalar_V( VmathVector3 xyz, float w ); + +/* + * Copy elements from a 4-D vector into a quaternion + */ +static inline VmathQuat vmathQMakeFromV4_V( VmathVector4 vec ); + +/* + * Convert a rotation matrix to a unit-length quaternion + */ +static inline VmathQuat vmathQMakeFromM3_V( VmathMatrix3 rotMat ); + +/* + * Set all elements of a quaternion to the same scalar value + */ +static inline VmathQuat vmathQMakeFromScalar_V( float scalar ); + +/* + * Set vector float data in a quaternion + */ +static inline VmathQuat vmathQMakeFrom128_V( vec_float4 vf4 ); + +/* + * Get vector float data from a quaternion + */ +static inline vec_float4 vmathQGet128_V( VmathQuat quat ); + +/* + * Set the x, y, and z elements of a quaternion + * NOTE: + * This function does not change the w element. + */ +static inline void vmathQSetXYZ_V( VmathQuat *result, VmathVector3 vec ); + +/* + * Get the x, y, and z elements of a quaternion + */ +static inline VmathVector3 vmathQGetXYZ_V( VmathQuat quat ); + +/* + * Set the x element of a quaternion + */ +static inline void vmathQSetX_V( VmathQuat *result, float x ); + +/* + * Set the y element of a quaternion + */ +static inline void vmathQSetY_V( VmathQuat *result, float y ); + +/* + * Set the z element of a quaternion + */ +static inline void vmathQSetZ_V( VmathQuat *result, float z ); + +/* + * Set the w element of a quaternion + */ +static inline void vmathQSetW_V( VmathQuat *result, float w ); + +/* + * Get the x element of a quaternion + */ +static inline float vmathQGetX_V( VmathQuat quat ); + +/* + * Get the y element of a quaternion + */ +static inline float vmathQGetY_V( VmathQuat quat ); + +/* + * Get the z element of a quaternion + */ +static inline float vmathQGetZ_V( VmathQuat quat ); + +/* + * Get the w element of a quaternion + */ +static inline float vmathQGetW_V( VmathQuat quat ); + +/* + * Set an x, y, z, or w element of a quaternion by index + */ +static inline void vmathQSetElem_V( VmathQuat *result, int idx, float value ); + +/* + * Get an x, y, z, or w element of a quaternion by index + */ +static inline float vmathQGetElem_V( VmathQuat quat, int idx ); + +/* + * Add two quaternions + */ +static inline VmathQuat vmathQAdd_V( VmathQuat quat0, VmathQuat quat1 ); + +/* + * Subtract a quaternion from another quaternion + */ +static inline VmathQuat vmathQSub_V( VmathQuat quat0, VmathQuat quat1 ); + +/* + * Multiply two quaternions + */ +static inline VmathQuat vmathQMul_V( VmathQuat quat0, VmathQuat quat1 ); + +/* + * Multiply a quaternion by a scalar + */ +static inline VmathQuat vmathQScalarMul_V( VmathQuat quat, float scalar ); + +/* + * Divide a quaternion by a scalar + */ +static inline VmathQuat vmathQScalarDiv_V( VmathQuat quat, float scalar ); + +/* + * Negate all elements of a quaternion + */ +static inline VmathQuat vmathQNeg_V( VmathQuat quat ); + +/* + * Construct an identity quaternion + */ +static inline VmathQuat vmathQMakeIdentity_V( ); + +/* + * Construct a quaternion to rotate between two unit-length 3-D vectors + * NOTE: + * The result is unpredictable if unitVec0 and unitVec1 point in opposite directions. + */ +static inline VmathQuat vmathQMakeRotationArc_V( VmathVector3 unitVec0, VmathVector3 unitVec1 ); + +/* + * Construct a quaternion to rotate around a unit-length 3-D vector + */ +static inline VmathQuat vmathQMakeRotationAxis_V( float radians, VmathVector3 unitVec ); + +/* + * Construct a quaternion to rotate around the x axis + */ +static inline VmathQuat vmathQMakeRotationX_V( float radians ); + +/* + * Construct a quaternion to rotate around the y axis + */ +static inline VmathQuat vmathQMakeRotationY_V( float radians ); + +/* + * Construct a quaternion to rotate around the z axis + */ +static inline VmathQuat vmathQMakeRotationZ_V( float radians ); + +/* + * Compute the conjugate of a quaternion + */ +static inline VmathQuat vmathQConj_V( VmathQuat quat ); + +/* + * Use a unit-length quaternion to rotate a 3-D vector + */ +static inline VmathVector3 vmathQRotate_V( VmathQuat unitQuat, VmathVector3 vec ); + +/* + * Compute the dot product of two quaternions + */ +static inline float vmathQDot_V( VmathQuat quat0, VmathQuat quat1 ); + +/* + * Compute the norm of a quaternion + */ +static inline float vmathQNorm_V( VmathQuat quat ); + +/* + * Compute the length of a quaternion + */ +static inline float vmathQLength_V( VmathQuat quat ); + +/* + * Normalize a quaternion + * NOTE: + * The result is unpredictable when all elements of quat are at or near zero. + */ +static inline VmathQuat vmathQNormalize_V( VmathQuat quat ); + +/* + * Linear interpolation between two quaternions + * NOTE: + * Does not clamp t between 0 and 1. + */ +static inline VmathQuat vmathQLerp_V( float t, VmathQuat quat0, VmathQuat quat1 ); + +/* + * Spherical linear interpolation between two quaternions + * NOTE: + * Interpolates along the shortest path between orientations. + * Does not clamp t between 0 and 1. + */ +static inline VmathQuat vmathQSlerp_V( float t, VmathQuat unitQuat0, VmathQuat unitQuat1 ); + +/* + * Spherical quadrangle interpolation + */ +static inline VmathQuat vmathQSquad_V( float t, VmathQuat unitQuat0, VmathQuat unitQuat1, VmathQuat unitQuat2, VmathQuat unitQuat3 ); + +/* + * Conditionally select between two quaternions + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + * However, the transfer of select1 to a VMX register may use more processing time than a branch. + */ +static inline VmathQuat vmathQSelect_V( VmathQuat quat0, VmathQuat quat1, unsigned int select1 ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a quaternion + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathQPrint_V( VmathQuat quat ); + +/* + * Print a quaternion and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathQPrints_V( VmathQuat quat, const char *name ); + +#endif + +/* + * Construct a 3x3 matrix containing the specified columns + */ +static inline VmathMatrix3 vmathM3MakeFromCols_V( VmathVector3 col0, VmathVector3 col1, VmathVector3 col2 ); + +/* + * Construct a 3x3 rotation matrix from a unit-length quaternion + */ +static inline VmathMatrix3 vmathM3MakeFromQ_V( VmathQuat unitQuat ); + +/* + * Set all elements of a 3x3 matrix to the same scalar value + */ +static inline VmathMatrix3 vmathM3MakeFromScalar_V( float scalar ); + +/* + * Set column 0 of a 3x3 matrix + */ +static inline void vmathM3SetCol0_V( VmathMatrix3 *result, VmathVector3 col0 ); + +/* + * Set column 1 of a 3x3 matrix + */ +static inline void vmathM3SetCol1_V( VmathMatrix3 *result, VmathVector3 col1 ); + +/* + * Set column 2 of a 3x3 matrix + */ +static inline void vmathM3SetCol2_V( VmathMatrix3 *result, VmathVector3 col2 ); + +/* + * Get column 0 of a 3x3 matrix + */ +static inline VmathVector3 vmathM3GetCol0_V( VmathMatrix3 mat ); + +/* + * Get column 1 of a 3x3 matrix + */ +static inline VmathVector3 vmathM3GetCol1_V( VmathMatrix3 mat ); + +/* + * Get column 2 of a 3x3 matrix + */ +static inline VmathVector3 vmathM3GetCol2_V( VmathMatrix3 mat ); + +/* + * Set the column of a 3x3 matrix referred to by the specified index + */ +static inline void vmathM3SetCol_V( VmathMatrix3 *result, int col, VmathVector3 vec ); + +/* + * Set the row of a 3x3 matrix referred to by the specified index + */ +static inline void vmathM3SetRow_V( VmathMatrix3 *result, int row, VmathVector3 vec ); + +/* + * Get the column of a 3x3 matrix referred to by the specified index + */ +static inline VmathVector3 vmathM3GetCol_V( VmathMatrix3 mat, int col ); + +/* + * Get the row of a 3x3 matrix referred to by the specified index + */ +static inline VmathVector3 vmathM3GetRow_V( VmathMatrix3 mat, int row ); + +/* + * Set the element of a 3x3 matrix referred to by column and row indices + */ +static inline void vmathM3SetElem_V( VmathMatrix3 *result, int col, int row, float val ); + +/* + * Get the element of a 3x3 matrix referred to by column and row indices + */ +static inline float vmathM3GetElem_V( VmathMatrix3 mat, int col, int row ); + +/* + * Add two 3x3 matrices + */ +static inline VmathMatrix3 vmathM3Add_V( VmathMatrix3 mat0, VmathMatrix3 mat1 ); + +/* + * Subtract a 3x3 matrix from another 3x3 matrix + */ +static inline VmathMatrix3 vmathM3Sub_V( VmathMatrix3 mat0, VmathMatrix3 mat1 ); + +/* + * Negate all elements of a 3x3 matrix + */ +static inline VmathMatrix3 vmathM3Neg_V( VmathMatrix3 mat ); + +/* + * Multiply a 3x3 matrix by a scalar + */ +static inline VmathMatrix3 vmathM3ScalarMul_V( VmathMatrix3 mat, float scalar ); + +/* + * Multiply a 3x3 matrix by a 3-D vector + */ +static inline VmathVector3 vmathM3MulV3_V( VmathMatrix3 mat, VmathVector3 vec ); + +/* + * Multiply two 3x3 matrices + */ +static inline VmathMatrix3 vmathM3Mul_V( VmathMatrix3 mat0, VmathMatrix3 mat1 ); + +/* + * Construct an identity 3x3 matrix + */ +static inline VmathMatrix3 vmathM3MakeIdentity_V( ); + +/* + * Construct a 3x3 matrix to rotate around the x axis + */ +static inline VmathMatrix3 vmathM3MakeRotationX_V( float radians ); + +/* + * Construct a 3x3 matrix to rotate around the y axis + */ +static inline VmathMatrix3 vmathM3MakeRotationY_V( float radians ); + +/* + * Construct a 3x3 matrix to rotate around the z axis + */ +static inline VmathMatrix3 vmathM3MakeRotationZ_V( float radians ); + +/* + * Construct a 3x3 matrix to rotate around the x, y, and z axes + */ +static inline VmathMatrix3 vmathM3MakeRotationZYX_V( VmathVector3 radiansXYZ ); + +/* + * Construct a 3x3 matrix to rotate around a unit-length 3-D vector + */ +static inline VmathMatrix3 vmathM3MakeRotationAxis_V( float radians, VmathVector3 unitVec ); + +/* + * Construct a rotation matrix from a unit-length quaternion + */ +static inline VmathMatrix3 vmathM3MakeRotationQ_V( VmathQuat unitQuat ); + +/* + * Construct a 3x3 matrix to perform scaling + */ +static inline VmathMatrix3 vmathM3MakeScale_V( VmathVector3 scaleVec ); + +/* + * Append (post-multiply) a scale transformation to a 3x3 matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline VmathMatrix3 vmathM3AppendScale_V( VmathMatrix3 mat, VmathVector3 scaleVec ); + +/* + * Prepend (pre-multiply) a scale transformation to a 3x3 matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline VmathMatrix3 vmathM3PrependScale_V( VmathVector3 scaleVec, VmathMatrix3 mat ); + +/* + * Multiply two 3x3 matrices per element + */ +static inline VmathMatrix3 vmathM3MulPerElem_V( VmathMatrix3 mat0, VmathMatrix3 mat1 ); + +/* + * Compute the absolute value of a 3x3 matrix per element + */ +static inline VmathMatrix3 vmathM3AbsPerElem_V( VmathMatrix3 mat ); + +/* + * Transpose of a 3x3 matrix + */ +static inline VmathMatrix3 vmathM3Transpose_V( VmathMatrix3 mat ); + +/* + * Compute the inverse of a 3x3 matrix + * NOTE: + * Result is unpredictable when the determinant of mat is equal to or near 0. + */ +static inline VmathMatrix3 vmathM3Inverse_V( VmathMatrix3 mat ); + +/* + * Determinant of a 3x3 matrix + */ +static inline float vmathM3Determinant_V( VmathMatrix3 mat ); + +/* + * Conditionally select between two 3x3 matrices + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + * However, the transfer of select1 to a VMX register may use more processing time than a branch. + */ +static inline VmathMatrix3 vmathM3Select_V( VmathMatrix3 mat0, VmathMatrix3 mat1, unsigned int select1 ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 3x3 matrix + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathM3Print_V( VmathMatrix3 mat ); + +/* + * Print a 3x3 matrix and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathM3Prints_V( VmathMatrix3 mat, const char *name ); + +#endif + +/* + * Construct a 4x4 matrix containing the specified columns + */ +static inline VmathMatrix4 vmathM4MakeFromCols_V( VmathVector4 col0, VmathVector4 col1, VmathVector4 col2, VmathVector4 col3 ); + +/* + * Construct a 4x4 matrix from a 3x4 transformation matrix + */ +static inline VmathMatrix4 vmathM4MakeFromT3_V( VmathTransform3 mat ); + +/* + * Construct a 4x4 matrix from a 3x3 matrix and a 3-D vector + */ +static inline VmathMatrix4 vmathM4MakeFromM3V3_V( VmathMatrix3 mat, VmathVector3 translateVec ); + +/* + * Construct a 4x4 matrix from a unit-length quaternion and a 3-D vector + */ +static inline VmathMatrix4 vmathM4MakeFromQV3_V( VmathQuat unitQuat, VmathVector3 translateVec ); + +/* + * Set all elements of a 4x4 matrix to the same scalar value + */ +static inline VmathMatrix4 vmathM4MakeFromScalar_V( float scalar ); + +/* + * Set the upper-left 3x3 submatrix + * NOTE: + * This function does not change the bottom row elements. + */ +static inline void vmathM4SetUpper3x3_V( VmathMatrix4 *result, VmathMatrix3 mat3 ); + +/* + * Get the upper-left 3x3 submatrix of a 4x4 matrix + */ +static inline VmathMatrix3 vmathM4GetUpper3x3_V( VmathMatrix4 mat ); + +/* + * Set translation component + * NOTE: + * This function does not change the bottom row elements. + */ +static inline void vmathM4SetTranslation_V( VmathMatrix4 *result, VmathVector3 translateVec ); + +/* + * Get the translation component of a 4x4 matrix + */ +static inline VmathVector3 vmathM4GetTranslation_V( VmathMatrix4 mat ); + +/* + * Set column 0 of a 4x4 matrix + */ +static inline void vmathM4SetCol0_V( VmathMatrix4 *result, VmathVector4 col0 ); + +/* + * Set column 1 of a 4x4 matrix + */ +static inline void vmathM4SetCol1_V( VmathMatrix4 *result, VmathVector4 col1 ); + +/* + * Set column 2 of a 4x4 matrix + */ +static inline void vmathM4SetCol2_V( VmathMatrix4 *result, VmathVector4 col2 ); + +/* + * Set column 3 of a 4x4 matrix + */ +static inline void vmathM4SetCol3_V( VmathMatrix4 *result, VmathVector4 col3 ); + +/* + * Get column 0 of a 4x4 matrix + */ +static inline VmathVector4 vmathM4GetCol0_V( VmathMatrix4 mat ); + +/* + * Get column 1 of a 4x4 matrix + */ +static inline VmathVector4 vmathM4GetCol1_V( VmathMatrix4 mat ); + +/* + * Get column 2 of a 4x4 matrix + */ +static inline VmathVector4 vmathM4GetCol2_V( VmathMatrix4 mat ); + +/* + * Get column 3 of a 4x4 matrix + */ +static inline VmathVector4 vmathM4GetCol3_V( VmathMatrix4 mat ); + +/* + * Set the column of a 4x4 matrix referred to by the specified index + */ +static inline void vmathM4SetCol_V( VmathMatrix4 *result, int col, VmathVector4 vec ); + +/* + * Set the row of a 4x4 matrix referred to by the specified index + */ +static inline void vmathM4SetRow_V( VmathMatrix4 *result, int row, VmathVector4 vec ); + +/* + * Get the column of a 4x4 matrix referred to by the specified index + */ +static inline VmathVector4 vmathM4GetCol_V( VmathMatrix4 mat, int col ); + +/* + * Get the row of a 4x4 matrix referred to by the specified index + */ +static inline VmathVector4 vmathM4GetRow_V( VmathMatrix4 mat, int row ); + +/* + * Set the element of a 4x4 matrix referred to by column and row indices + */ +static inline void vmathM4SetElem_V( VmathMatrix4 *result, int col, int row, float val ); + +/* + * Get the element of a 4x4 matrix referred to by column and row indices + */ +static inline float vmathM4GetElem_V( VmathMatrix4 mat, int col, int row ); + +/* + * Add two 4x4 matrices + */ +static inline VmathMatrix4 vmathM4Add_V( VmathMatrix4 mat0, VmathMatrix4 mat1 ); + +/* + * Subtract a 4x4 matrix from another 4x4 matrix + */ +static inline VmathMatrix4 vmathM4Sub_V( VmathMatrix4 mat0, VmathMatrix4 mat1 ); + +/* + * Negate all elements of a 4x4 matrix + */ +static inline VmathMatrix4 vmathM4Neg_V( VmathMatrix4 mat ); + +/* + * Multiply a 4x4 matrix by a scalar + */ +static inline VmathMatrix4 vmathM4ScalarMul_V( VmathMatrix4 mat, float scalar ); + +/* + * Multiply a 4x4 matrix by a 4-D vector + */ +static inline VmathVector4 vmathM4MulV4_V( VmathMatrix4 mat, VmathVector4 vec ); + +/* + * Multiply a 4x4 matrix by a 3-D vector + */ +static inline VmathVector4 vmathM4MulV3_V( VmathMatrix4 mat, VmathVector3 vec ); + +/* + * Multiply a 4x4 matrix by a 3-D point + */ +static inline VmathVector4 vmathM4MulP3_V( VmathMatrix4 mat, VmathPoint3 pnt ); + +/* + * Multiply two 4x4 matrices + */ +static inline VmathMatrix4 vmathM4Mul_V( VmathMatrix4 mat0, VmathMatrix4 mat1 ); + +/* + * Multiply a 4x4 matrix by a 3x4 transformation matrix + */ +static inline VmathMatrix4 vmathM4MulT3_V( VmathMatrix4 mat, VmathTransform3 tfrm ); + +/* + * Construct an identity 4x4 matrix + */ +static inline VmathMatrix4 vmathM4MakeIdentity_V( ); + +/* + * Construct a 4x4 matrix to rotate around the x axis + */ +static inline VmathMatrix4 vmathM4MakeRotationX_V( float radians ); + +/* + * Construct a 4x4 matrix to rotate around the y axis + */ +static inline VmathMatrix4 vmathM4MakeRotationY_V( float radians ); + +/* + * Construct a 4x4 matrix to rotate around the z axis + */ +static inline VmathMatrix4 vmathM4MakeRotationZ_V( float radians ); + +/* + * Construct a 4x4 matrix to rotate around the x, y, and z axes + */ +static inline VmathMatrix4 vmathM4MakeRotationZYX_V( VmathVector3 radiansXYZ ); + +/* + * Construct a 4x4 matrix to rotate around a unit-length 3-D vector + */ +static inline VmathMatrix4 vmathM4MakeRotationAxis_V( float radians, VmathVector3 unitVec ); + +/* + * Construct a rotation matrix from a unit-length quaternion + */ +static inline VmathMatrix4 vmathM4MakeRotationQ_V( VmathQuat unitQuat ); + +/* + * Construct a 4x4 matrix to perform scaling + */ +static inline VmathMatrix4 vmathM4MakeScale_V( VmathVector3 scaleVec ); + +/* + * Construct a 4x4 matrix to perform translation + */ +static inline VmathMatrix4 vmathM4MakeTranslation_V( VmathVector3 translateVec ); + +/* + * Construct viewing matrix based on eye position, position looked at, and up direction + */ +static inline VmathMatrix4 vmathM4MakeLookAt_V( VmathPoint3 eyePos, VmathPoint3 lookAtPos, VmathVector3 upVec ); + +/* + * Construct a perspective projection matrix + */ +static inline VmathMatrix4 vmathM4MakePerspective_V( float fovyRadians, float aspect, float zNear, float zFar ); + +/* + * Construct a perspective projection matrix based on frustum + */ +static inline VmathMatrix4 vmathM4MakeFrustum_V( float left, float right, float bottom, float top, float zNear, float zFar ); + +/* + * Construct an orthographic projection matrix + */ +static inline VmathMatrix4 vmathM4MakeOrthographic_V( float left, float right, float bottom, float top, float zNear, float zFar ); + +/* + * Append (post-multiply) a scale transformation to a 4x4 matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline VmathMatrix4 vmathM4AppendScale_V( VmathMatrix4 mat, VmathVector3 scaleVec ); + +/* + * Prepend (pre-multiply) a scale transformation to a 4x4 matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline VmathMatrix4 vmathM4PrependScale_V( VmathVector3 scaleVec, VmathMatrix4 mat ); + +/* + * Multiply two 4x4 matrices per element + */ +static inline VmathMatrix4 vmathM4MulPerElem_V( VmathMatrix4 mat0, VmathMatrix4 mat1 ); + +/* + * Compute the absolute value of a 4x4 matrix per element + */ +static inline VmathMatrix4 vmathM4AbsPerElem_V( VmathMatrix4 mat ); + +/* + * Transpose of a 4x4 matrix + */ +static inline VmathMatrix4 vmathM4Transpose_V( VmathMatrix4 mat ); + +/* + * Compute the inverse of a 4x4 matrix + * NOTE: + * Result is unpredictable when the determinant of mat is equal to or near 0. + */ +static inline VmathMatrix4 vmathM4Inverse_V( VmathMatrix4 mat ); + +/* + * Compute the inverse of a 4x4 matrix, which is expected to be an affine matrix + * NOTE: + * This can be used to achieve better performance than a general inverse when the specified 4x4 matrix meets the given restrictions. The result is unpredictable when the determinant of mat is equal to or near 0. + */ +static inline VmathMatrix4 vmathM4AffineInverse_V( VmathMatrix4 mat ); + +/* + * Compute the inverse of a 4x4 matrix, which is expected to be an affine matrix with an orthogonal upper-left 3x3 submatrix + * NOTE: + * This can be used to achieve better performance than a general inverse when the specified 4x4 matrix meets the given restrictions. + */ +static inline VmathMatrix4 vmathM4OrthoInverse_V( VmathMatrix4 mat ); + +/* + * Determinant of a 4x4 matrix + */ +static inline float vmathM4Determinant_V( VmathMatrix4 mat ); + +/* + * Conditionally select between two 4x4 matrices + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + * However, the transfer of select1 to a VMX register may use more processing time than a branch. + */ +static inline VmathMatrix4 vmathM4Select_V( VmathMatrix4 mat0, VmathMatrix4 mat1, unsigned int select1 ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 4x4 matrix + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathM4Print_V( VmathMatrix4 mat ); + +/* + * Print a 4x4 matrix and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathM4Prints_V( VmathMatrix4 mat, const char *name ); + +#endif + +/* + * Construct a 3x4 transformation matrix containing the specified columns + */ +static inline VmathTransform3 vmathT3MakeFromCols_V( VmathVector3 col0, VmathVector3 col1, VmathVector3 col2, VmathVector3 col3 ); + +/* + * Construct a 3x4 transformation matrix from a 3x3 matrix and a 3-D vector + */ +static inline VmathTransform3 vmathT3MakeFromM3V3_V( VmathMatrix3 tfrm, VmathVector3 translateVec ); + +/* + * Construct a 3x4 transformation matrix from a unit-length quaternion and a 3-D vector + */ +static inline VmathTransform3 vmathT3MakeFromQV3_V( VmathQuat unitQuat, VmathVector3 translateVec ); + +/* + * Set all elements of a 3x4 transformation matrix to the same scalar value + */ +static inline VmathTransform3 vmathT3MakeFromScalar_V( float scalar ); + +/* + * Set the upper-left 3x3 submatrix + */ +static inline void vmathT3SetUpper3x3_V( VmathTransform3 *result, VmathMatrix3 mat3 ); + +/* + * Get the upper-left 3x3 submatrix of a 3x4 transformation matrix + */ +static inline VmathMatrix3 vmathT3GetUpper3x3_V( VmathTransform3 tfrm ); + +/* + * Set translation component + */ +static inline void vmathT3SetTranslation_V( VmathTransform3 *result, VmathVector3 translateVec ); + +/* + * Get the translation component of a 3x4 transformation matrix + */ +static inline VmathVector3 vmathT3GetTranslation_V( VmathTransform3 tfrm ); + +/* + * Set column 0 of a 3x4 transformation matrix + */ +static inline void vmathT3SetCol0_V( VmathTransform3 *result, VmathVector3 col0 ); + +/* + * Set column 1 of a 3x4 transformation matrix + */ +static inline void vmathT3SetCol1_V( VmathTransform3 *result, VmathVector3 col1 ); + +/* + * Set column 2 of a 3x4 transformation matrix + */ +static inline void vmathT3SetCol2_V( VmathTransform3 *result, VmathVector3 col2 ); + +/* + * Set column 3 of a 3x4 transformation matrix + */ +static inline void vmathT3SetCol3_V( VmathTransform3 *result, VmathVector3 col3 ); + +/* + * Get column 0 of a 3x4 transformation matrix + */ +static inline VmathVector3 vmathT3GetCol0_V( VmathTransform3 tfrm ); + +/* + * Get column 1 of a 3x4 transformation matrix + */ +static inline VmathVector3 vmathT3GetCol1_V( VmathTransform3 tfrm ); + +/* + * Get column 2 of a 3x4 transformation matrix + */ +static inline VmathVector3 vmathT3GetCol2_V( VmathTransform3 tfrm ); + +/* + * Get column 3 of a 3x4 transformation matrix + */ +static inline VmathVector3 vmathT3GetCol3_V( VmathTransform3 tfrm ); + +/* + * Set the column of a 3x4 transformation matrix referred to by the specified index + */ +static inline void vmathT3SetCol_V( VmathTransform3 *result, int col, VmathVector3 vec ); + +/* + * Set the row of a 3x4 transformation matrix referred to by the specified index + */ +static inline void vmathT3SetRow_V( VmathTransform3 *result, int row, VmathVector4 vec ); + +/* + * Get the column of a 3x4 transformation matrix referred to by the specified index + */ +static inline VmathVector3 vmathT3GetCol_V( VmathTransform3 tfrm, int col ); + +/* + * Get the row of a 3x4 transformation matrix referred to by the specified index + */ +static inline VmathVector4 vmathT3GetRow_V( VmathTransform3 tfrm, int row ); + +/* + * Set the element of a 3x4 transformation matrix referred to by column and row indices + */ +static inline void vmathT3SetElem_V( VmathTransform3 *result, int col, int row, float val ); + +/* + * Get the element of a 3x4 transformation matrix referred to by column and row indices + */ +static inline float vmathT3GetElem_V( VmathTransform3 tfrm, int col, int row ); + +/* + * Multiply a 3x4 transformation matrix by a 3-D vector + */ +static inline VmathVector3 vmathT3MulV3_V( VmathTransform3 tfrm, VmathVector3 vec ); + +/* + * Multiply a 3x4 transformation matrix by a 3-D point + */ +static inline VmathPoint3 vmathT3MulP3_V( VmathTransform3 tfrm, VmathPoint3 pnt ); + +/* + * Multiply two 3x4 transformation matrices + */ +static inline VmathTransform3 vmathT3Mul_V( VmathTransform3 tfrm0, VmathTransform3 tfrm1 ); + +/* + * Construct an identity 3x4 transformation matrix + */ +static inline VmathTransform3 vmathT3MakeIdentity_V( ); + +/* + * Construct a 3x4 transformation matrix to rotate around the x axis + */ +static inline VmathTransform3 vmathT3MakeRotationX_V( float radians ); + +/* + * Construct a 3x4 transformation matrix to rotate around the y axis + */ +static inline VmathTransform3 vmathT3MakeRotationY_V( float radians ); + +/* + * Construct a 3x4 transformation matrix to rotate around the z axis + */ +static inline VmathTransform3 vmathT3MakeRotationZ_V( float radians ); + +/* + * Construct a 3x4 transformation matrix to rotate around the x, y, and z axes + */ +static inline VmathTransform3 vmathT3MakeRotationZYX_V( VmathVector3 radiansXYZ ); + +/* + * Construct a 3x4 transformation matrix to rotate around a unit-length 3-D vector + */ +static inline VmathTransform3 vmathT3MakeRotationAxis_V( float radians, VmathVector3 unitVec ); + +/* + * Construct a rotation matrix from a unit-length quaternion + */ +static inline VmathTransform3 vmathT3MakeRotationQ_V( VmathQuat unitQuat ); + +/* + * Construct a 3x4 transformation matrix to perform scaling + */ +static inline VmathTransform3 vmathT3MakeScale_V( VmathVector3 scaleVec ); + +/* + * Construct a 3x4 transformation matrix to perform translation + */ +static inline VmathTransform3 vmathT3MakeTranslation_V( VmathVector3 translateVec ); + +/* + * Append (post-multiply) a scale transformation to a 3x4 transformation matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline VmathTransform3 vmathT3AppendScale_V( VmathTransform3 tfrm, VmathVector3 scaleVec ); + +/* + * Prepend (pre-multiply) a scale transformation to a 3x4 transformation matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline VmathTransform3 vmathT3PrependScale_V( VmathVector3 scaleVec, VmathTransform3 tfrm ); + +/* + * Multiply two 3x4 transformation matrices per element + */ +static inline VmathTransform3 vmathT3MulPerElem_V( VmathTransform3 tfrm0, VmathTransform3 tfrm1 ); + +/* + * Compute the absolute value of a 3x4 transformation matrix per element + */ +static inline VmathTransform3 vmathT3AbsPerElem_V( VmathTransform3 tfrm ); + +/* + * Inverse of a 3x4 transformation matrix + * NOTE: + * Result is unpredictable when the determinant of the left 3x3 submatrix is equal to or near 0. + */ +static inline VmathTransform3 vmathT3Inverse_V( VmathTransform3 tfrm ); + +/* + * Compute the inverse of a 3x4 transformation matrix, expected to have an orthogonal upper-left 3x3 submatrix + * NOTE: + * This can be used to achieve better performance than a general inverse when the specified 3x4 transformation matrix meets the given restrictions. + */ +static inline VmathTransform3 vmathT3OrthoInverse_V( VmathTransform3 tfrm ); + +/* + * Conditionally select between two 3x4 transformation matrices + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + * However, the transfer of select1 to a VMX register may use more processing time than a branch. + */ +static inline VmathTransform3 vmathT3Select_V( VmathTransform3 tfrm0, VmathTransform3 tfrm1, unsigned int select1 ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 3x4 transformation matrix + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathT3Print_V( VmathTransform3 tfrm ); + +/* + * Print a 3x4 transformation matrix and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathT3Prints_V( VmathTransform3 tfrm, const char *name ); + +#endif + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#include "vectormath_aos.h" +#include "vec_aos_v.h" +#include "quat_aos_v.h" +#include "mat_aos_v.h" + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/ppu/c/vectormath_soa.h b/Extras/vectormathlibrary/include/vectormath/ppu/c/vectormath_soa.h new file mode 100644 index 000000000..1b8b8c6bf --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/ppu/c/vectormath_soa.h @@ -0,0 +1,2013 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_SOA_C_H +#define _VECTORMATH_SOA_C_H + +#include +#include +#include "vectormath_aos.h" + +#ifdef _VECTORMATH_DEBUG +#include +#endif + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#ifndef _VECTORMATH_SOA_C_TYPES_H +#define _VECTORMATH_SOA_C_TYPES_H + +/* A set of four 3-D vectors in structure-of-arrays format + */ +typedef struct _VmathSoaVector3 +{ + vec_float4 x; + vec_float4 y; + vec_float4 z; +} VmathSoaVector3; + +/* A set of four 4-D vectors in structure-of-arrays format + */ +typedef struct _VmathSoaVector4 +{ + vec_float4 x; + vec_float4 y; + vec_float4 z; + vec_float4 w; +} VmathSoaVector4; + +/* A set of four 3-D points in structure-of-arrays format + */ +typedef struct _VmathSoaPoint3 +{ + vec_float4 x; + vec_float4 y; + vec_float4 z; +} VmathSoaPoint3; + +/* A set of four quaternions in structure-of-arrays format + */ +typedef struct _VmathSoaQuat +{ + vec_float4 x; + vec_float4 y; + vec_float4 z; + vec_float4 w; +} VmathSoaQuat; + +/* A set of four 3x3 matrices in structure-of-arrays format + */ +typedef struct _VmathSoaMatrix3 +{ + VmathSoaVector3 col0; + VmathSoaVector3 col1; + VmathSoaVector3 col2; +} VmathSoaMatrix3; + +/* A set of four 4x4 matrices in structure-of-arrays format + */ +typedef struct _VmathSoaMatrix4 +{ + VmathSoaVector4 col0; + VmathSoaVector4 col1; + VmathSoaVector4 col2; + VmathSoaVector4 col3; +} VmathSoaMatrix4; + +/* A set of four 3x4 transformation matrices in structure-of-arrays format + */ +typedef struct _VmathSoaTransform3 +{ + VmathSoaVector3 col0; + VmathSoaVector3 col1; + VmathSoaVector3 col2; + VmathSoaVector3 col3; +} VmathSoaTransform3; + +#endif + +/* + * Copy a 3-D vector + */ +static inline void vmathSoaV3Copy( VmathSoaVector3 *result, const VmathSoaVector3 *vec ); + +/* + * Construct a 3-D vector from x, y, and z elements + */ +static inline void vmathSoaV3MakeFromElems( VmathSoaVector3 *result, vec_float4 x, vec_float4 y, vec_float4 z ); + +/* + * Copy elements from a 3-D point into a 3-D vector + */ +static inline void vmathSoaV3MakeFromP3( VmathSoaVector3 *result, const VmathSoaPoint3 *pnt ); + +/* + * Set all elements of a 3-D vector to the same scalar value + */ +static inline void vmathSoaV3MakeFromScalar( VmathSoaVector3 *result, vec_float4 scalar ); + +/* + * Replicate an AoS 3-D vector + */ +static inline void vmathSoaV3MakeFromAos( VmathSoaVector3 *result, const VmathVector3 *vec ); + +/* + * Insert four AoS 3-D vectors + */ +static inline void vmathSoaV3MakeFrom4Aos( VmathSoaVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1, const VmathVector3 *vec2, const VmathVector3 *vec3 ); + +/* + * Extract four AoS 3-D vectors + */ +static inline void vmathSoaV3Get4Aos( const VmathSoaVector3 *vec, VmathVector3 *result0, VmathVector3 *result1, VmathVector3 *result2, VmathVector3 *result3 ); + +/* + * Set the x element of a 3-D vector + */ +static inline void vmathSoaV3SetX( VmathSoaVector3 *result, vec_float4 x ); + +/* + * Set the y element of a 3-D vector + */ +static inline void vmathSoaV3SetY( VmathSoaVector3 *result, vec_float4 y ); + +/* + * Set the z element of a 3-D vector + */ +static inline void vmathSoaV3SetZ( VmathSoaVector3 *result, vec_float4 z ); + +/* + * Get the x element of a 3-D vector + */ +static inline vec_float4 vmathSoaV3GetX( const VmathSoaVector3 *vec ); + +/* + * Get the y element of a 3-D vector + */ +static inline vec_float4 vmathSoaV3GetY( const VmathSoaVector3 *vec ); + +/* + * Get the z element of a 3-D vector + */ +static inline vec_float4 vmathSoaV3GetZ( const VmathSoaVector3 *vec ); + +/* + * Set an x, y, or z element of a 3-D vector by index + */ +static inline void vmathSoaV3SetElem( VmathSoaVector3 *result, int idx, vec_float4 value ); + +/* + * Get an x, y, or z element of a 3-D vector by index + */ +static inline vec_float4 vmathSoaV3GetElem( const VmathSoaVector3 *vec, int idx ); + +/* + * Add two 3-D vectors + */ +static inline void vmathSoaV3Add( VmathSoaVector3 *result, const VmathSoaVector3 *vec0, const VmathSoaVector3 *vec1 ); + +/* + * Subtract a 3-D vector from another 3-D vector + */ +static inline void vmathSoaV3Sub( VmathSoaVector3 *result, const VmathSoaVector3 *vec0, const VmathSoaVector3 *vec1 ); + +/* + * Add a 3-D vector to a 3-D point + */ +static inline void vmathSoaV3AddP3( VmathSoaPoint3 *result, const VmathSoaVector3 *vec, const VmathSoaPoint3 *pnt ); + +/* + * Multiply a 3-D vector by a scalar + */ +static inline void vmathSoaV3ScalarMul( VmathSoaVector3 *result, const VmathSoaVector3 *vec, vec_float4 scalar ); + +/* + * Divide a 3-D vector by a scalar + */ +static inline void vmathSoaV3ScalarDiv( VmathSoaVector3 *result, const VmathSoaVector3 *vec, vec_float4 scalar ); + +/* + * Negate all elements of a 3-D vector + */ +static inline void vmathSoaV3Neg( VmathSoaVector3 *result, const VmathSoaVector3 *vec ); + +/* + * Construct x axis + */ +static inline void vmathSoaV3MakeXAxis( VmathSoaVector3 *result ); + +/* + * Construct y axis + */ +static inline void vmathSoaV3MakeYAxis( VmathSoaVector3 *result ); + +/* + * Construct z axis + */ +static inline void vmathSoaV3MakeZAxis( VmathSoaVector3 *result ); + +/* + * Multiply two 3-D vectors per element + */ +static inline void vmathSoaV3MulPerElem( VmathSoaVector3 *result, const VmathSoaVector3 *vec0, const VmathSoaVector3 *vec1 ); + +/* + * Divide two 3-D vectors per element + * NOTE: + * Floating-point behavior matches standard library function divf4. + */ +static inline void vmathSoaV3DivPerElem( VmathSoaVector3 *result, const VmathSoaVector3 *vec0, const VmathSoaVector3 *vec1 ); + +/* + * Compute the reciprocal of a 3-D vector per element + * NOTE: + * Floating-point behavior matches standard library function recipf4. + */ +static inline void vmathSoaV3RecipPerElem( VmathSoaVector3 *result, const VmathSoaVector3 *vec ); + +/* + * Compute the square root of a 3-D vector per element + * NOTE: + * Floating-point behavior matches standard library function sqrtf4. + */ +static inline void vmathSoaV3SqrtPerElem( VmathSoaVector3 *result, const VmathSoaVector3 *vec ); + +/* + * Compute the reciprocal square root of a 3-D vector per element + * NOTE: + * Floating-point behavior matches standard library function rsqrtf4. + */ +static inline void vmathSoaV3RsqrtPerElem( VmathSoaVector3 *result, const VmathSoaVector3 *vec ); + +/* + * Compute the absolute value of a 3-D vector per element + */ +static inline void vmathSoaV3AbsPerElem( VmathSoaVector3 *result, const VmathSoaVector3 *vec ); + +/* + * Copy sign from one 3-D vector to another, per element + */ +static inline void vmathSoaV3CopySignPerElem( VmathSoaVector3 *result, const VmathSoaVector3 *vec0, const VmathSoaVector3 *vec1 ); + +/* + * Maximum of two 3-D vectors per element + */ +static inline void vmathSoaV3MaxPerElem( VmathSoaVector3 *result, const VmathSoaVector3 *vec0, const VmathSoaVector3 *vec1 ); + +/* + * Minimum of two 3-D vectors per element + */ +static inline void vmathSoaV3MinPerElem( VmathSoaVector3 *result, const VmathSoaVector3 *vec0, const VmathSoaVector3 *vec1 ); + +/* + * Maximum element of a 3-D vector + */ +static inline vec_float4 vmathSoaV3MaxElem( const VmathSoaVector3 *vec ); + +/* + * Minimum element of a 3-D vector + */ +static inline vec_float4 vmathSoaV3MinElem( const VmathSoaVector3 *vec ); + +/* + * Compute the sum of all elements of a 3-D vector + */ +static inline vec_float4 vmathSoaV3Sum( const VmathSoaVector3 *vec ); + +/* + * Compute the dot product of two 3-D vectors + */ +static inline vec_float4 vmathSoaV3Dot( const VmathSoaVector3 *vec0, const VmathSoaVector3 *vec1 ); + +/* + * Compute the square of the length of a 3-D vector + */ +static inline vec_float4 vmathSoaV3LengthSqr( const VmathSoaVector3 *vec ); + +/* + * Compute the length of a 3-D vector + */ +static inline vec_float4 vmathSoaV3Length( const VmathSoaVector3 *vec ); + +/* + * Normalize a 3-D vector + * NOTE: + * The result is unpredictable when all elements of vec are at or near zero. + */ +static inline void vmathSoaV3Normalize( VmathSoaVector3 *result, const VmathSoaVector3 *vec ); + +/* + * Compute cross product of two 3-D vectors + */ +static inline void vmathSoaV3Cross( VmathSoaVector3 *result, const VmathSoaVector3 *vec0, const VmathSoaVector3 *vec1 ); + +/* + * Outer product of two 3-D vectors + */ +static inline void vmathSoaV3Outer( VmathSoaMatrix3 *result, const VmathSoaVector3 *vec0, const VmathSoaVector3 *vec1 ); + +/* + * Pre-multiply a row vector by a 3x3 matrix + */ +static inline void vmathSoaV3RowMul( VmathSoaVector3 *result, const VmathSoaVector3 *vec, const VmathSoaMatrix3 *mat ); + +/* + * Cross-product matrix of a 3-D vector + */ +static inline void vmathSoaV3CrossMatrix( VmathSoaMatrix3 *result, const VmathSoaVector3 *vec ); + +/* + * Create cross-product matrix and multiply + * NOTE: + * Faster than separately creating a cross-product matrix and multiplying. + */ +static inline void vmathSoaV3CrossMatrixMul( VmathSoaMatrix3 *result, const VmathSoaVector3 *vec, const VmathSoaMatrix3 *mat ); + +/* + * Linear interpolation between two 3-D vectors + * NOTE: + * Does not clamp t between 0 and 1. + */ +static inline void vmathSoaV3Lerp( VmathSoaVector3 *result, vec_float4 t, const VmathSoaVector3 *vec0, const VmathSoaVector3 *vec1 ); + +/* + * Spherical linear interpolation between two 3-D vectors + * NOTE: + * The result is unpredictable if the vectors point in opposite directions. + * Does not clamp t between 0 and 1. + */ +static inline void vmathSoaV3Slerp( VmathSoaVector3 *result, vec_float4 t, const VmathSoaVector3 *unitVec0, const VmathSoaVector3 *unitVec1 ); + +/* + * Conditionally select between two 3-D vectors + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + */ +static inline void vmathSoaV3Select( VmathSoaVector3 *result, const VmathSoaVector3 *vec0, const VmathSoaVector3 *vec1, vec_uint4 select1 ); + +/* + * Load four three-float 3-D vectors, stored in three quadwords + */ +static inline void vmathSoaV3LoadXYZArray( VmathSoaVector3 *vec, const vec_float4 *threeQuads ); + +/* + * Store four slots of an SoA 3-D vector in three quadwords + */ +static inline void vmathSoaV3StoreXYZArray( const VmathSoaVector3 *vec, vec_float4 *threeQuads ); + +/* + * Store eight slots of two SoA 3-D vectors as half-floats + */ +static inline void vmathSoaV3StoreHalfFloats( const VmathSoaVector3 *vec0, const VmathSoaVector3 *vec1, vec_ushort8 *threeQuads ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 3-D vector + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaV3Print( const VmathSoaVector3 *vec ); + +/* + * Print a 3-D vector and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaV3Prints( const VmathSoaVector3 *vec, const char *name ); + +#endif + +/* + * Copy a 4-D vector + */ +static inline void vmathSoaV4Copy( VmathSoaVector4 *result, const VmathSoaVector4 *vec ); + +/* + * Construct a 4-D vector from x, y, z, and w elements + */ +static inline void vmathSoaV4MakeFromElems( VmathSoaVector4 *result, vec_float4 x, vec_float4 y, vec_float4 z, vec_float4 w ); + +/* + * Construct a 4-D vector from a 3-D vector and a scalar + */ +static inline void vmathSoaV4MakeFromV3Scalar( VmathSoaVector4 *result, const VmathSoaVector3 *xyz, vec_float4 w ); + +/* + * Copy x, y, and z from a 3-D vector into a 4-D vector, and set w to 0 + */ +static inline void vmathSoaV4MakeFromV3( VmathSoaVector4 *result, const VmathSoaVector3 *vec ); + +/* + * Copy x, y, and z from a 3-D point into a 4-D vector, and set w to 1 + */ +static inline void vmathSoaV4MakeFromP3( VmathSoaVector4 *result, const VmathSoaPoint3 *pnt ); + +/* + * Copy elements from a quaternion into a 4-D vector + */ +static inline void vmathSoaV4MakeFromQ( VmathSoaVector4 *result, const VmathSoaQuat *quat ); + +/* + * Set all elements of a 4-D vector to the same scalar value + */ +static inline void vmathSoaV4MakeFromScalar( VmathSoaVector4 *result, vec_float4 scalar ); + +/* + * Replicate an AoS 4-D vector + */ +static inline void vmathSoaV4MakeFromAos( VmathSoaVector4 *result, const VmathVector4 *vec ); + +/* + * Insert four AoS 4-D vectors + */ +static inline void vmathSoaV4MakeFrom4Aos( VmathSoaVector4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1, const VmathVector4 *vec2, const VmathVector4 *vec3 ); + +/* + * Extract four AoS 4-D vectors + */ +static inline void vmathSoaV4Get4Aos( const VmathSoaVector4 *vec, VmathVector4 *result0, VmathVector4 *result1, VmathVector4 *result2, VmathVector4 *result3 ); + +/* + * Set the x, y, and z elements of a 4-D vector + * NOTE: + * This function does not change the w element. + */ +static inline void vmathSoaV4SetXYZ( VmathSoaVector4 *result, const VmathSoaVector3 *vec ); + +/* + * Get the x, y, and z elements of a 4-D vector + */ +static inline void vmathSoaV4GetXYZ( VmathSoaVector3 *result, const VmathSoaVector4 *vec ); + +/* + * Set the x element of a 4-D vector + */ +static inline void vmathSoaV4SetX( VmathSoaVector4 *result, vec_float4 x ); + +/* + * Set the y element of a 4-D vector + */ +static inline void vmathSoaV4SetY( VmathSoaVector4 *result, vec_float4 y ); + +/* + * Set the z element of a 4-D vector + */ +static inline void vmathSoaV4SetZ( VmathSoaVector4 *result, vec_float4 z ); + +/* + * Set the w element of a 4-D vector + */ +static inline void vmathSoaV4SetW( VmathSoaVector4 *result, vec_float4 w ); + +/* + * Get the x element of a 4-D vector + */ +static inline vec_float4 vmathSoaV4GetX( const VmathSoaVector4 *vec ); + +/* + * Get the y element of a 4-D vector + */ +static inline vec_float4 vmathSoaV4GetY( const VmathSoaVector4 *vec ); + +/* + * Get the z element of a 4-D vector + */ +static inline vec_float4 vmathSoaV4GetZ( const VmathSoaVector4 *vec ); + +/* + * Get the w element of a 4-D vector + */ +static inline vec_float4 vmathSoaV4GetW( const VmathSoaVector4 *vec ); + +/* + * Set an x, y, z, or w element of a 4-D vector by index + */ +static inline void vmathSoaV4SetElem( VmathSoaVector4 *result, int idx, vec_float4 value ); + +/* + * Get an x, y, z, or w element of a 4-D vector by index + */ +static inline vec_float4 vmathSoaV4GetElem( const VmathSoaVector4 *vec, int idx ); + +/* + * Add two 4-D vectors + */ +static inline void vmathSoaV4Add( VmathSoaVector4 *result, const VmathSoaVector4 *vec0, const VmathSoaVector4 *vec1 ); + +/* + * Subtract a 4-D vector from another 4-D vector + */ +static inline void vmathSoaV4Sub( VmathSoaVector4 *result, const VmathSoaVector4 *vec0, const VmathSoaVector4 *vec1 ); + +/* + * Multiply a 4-D vector by a scalar + */ +static inline void vmathSoaV4ScalarMul( VmathSoaVector4 *result, const VmathSoaVector4 *vec, vec_float4 scalar ); + +/* + * Divide a 4-D vector by a scalar + */ +static inline void vmathSoaV4ScalarDiv( VmathSoaVector4 *result, const VmathSoaVector4 *vec, vec_float4 scalar ); + +/* + * Negate all elements of a 4-D vector + */ +static inline void vmathSoaV4Neg( VmathSoaVector4 *result, const VmathSoaVector4 *vec ); + +/* + * Construct x axis + */ +static inline void vmathSoaV4MakeXAxis( VmathSoaVector4 *result ); + +/* + * Construct y axis + */ +static inline void vmathSoaV4MakeYAxis( VmathSoaVector4 *result ); + +/* + * Construct z axis + */ +static inline void vmathSoaV4MakeZAxis( VmathSoaVector4 *result ); + +/* + * Construct w axis + */ +static inline void vmathSoaV4MakeWAxis( VmathSoaVector4 *result ); + +/* + * Multiply two 4-D vectors per element + */ +static inline void vmathSoaV4MulPerElem( VmathSoaVector4 *result, const VmathSoaVector4 *vec0, const VmathSoaVector4 *vec1 ); + +/* + * Divide two 4-D vectors per element + * NOTE: + * Floating-point behavior matches standard library function divf4. + */ +static inline void vmathSoaV4DivPerElem( VmathSoaVector4 *result, const VmathSoaVector4 *vec0, const VmathSoaVector4 *vec1 ); + +/* + * Compute the reciprocal of a 4-D vector per element + * NOTE: + * Floating-point behavior matches standard library function recipf4. + */ +static inline void vmathSoaV4RecipPerElem( VmathSoaVector4 *result, const VmathSoaVector4 *vec ); + +/* + * Compute the square root of a 4-D vector per element + * NOTE: + * Floating-point behavior matches standard library function sqrtf4. + */ +static inline void vmathSoaV4SqrtPerElem( VmathSoaVector4 *result, const VmathSoaVector4 *vec ); + +/* + * Compute the reciprocal square root of a 4-D vector per element + * NOTE: + * Floating-point behavior matches standard library function rsqrtf4. + */ +static inline void vmathSoaV4RsqrtPerElem( VmathSoaVector4 *result, const VmathSoaVector4 *vec ); + +/* + * Compute the absolute value of a 4-D vector per element + */ +static inline void vmathSoaV4AbsPerElem( VmathSoaVector4 *result, const VmathSoaVector4 *vec ); + +/* + * Copy sign from one 4-D vector to another, per element + */ +static inline void vmathSoaV4CopySignPerElem( VmathSoaVector4 *result, const VmathSoaVector4 *vec0, const VmathSoaVector4 *vec1 ); + +/* + * Maximum of two 4-D vectors per element + */ +static inline void vmathSoaV4MaxPerElem( VmathSoaVector4 *result, const VmathSoaVector4 *vec0, const VmathSoaVector4 *vec1 ); + +/* + * Minimum of two 4-D vectors per element + */ +static inline void vmathSoaV4MinPerElem( VmathSoaVector4 *result, const VmathSoaVector4 *vec0, const VmathSoaVector4 *vec1 ); + +/* + * Maximum element of a 4-D vector + */ +static inline vec_float4 vmathSoaV4MaxElem( const VmathSoaVector4 *vec ); + +/* + * Minimum element of a 4-D vector + */ +static inline vec_float4 vmathSoaV4MinElem( const VmathSoaVector4 *vec ); + +/* + * Compute the sum of all elements of a 4-D vector + */ +static inline vec_float4 vmathSoaV4Sum( const VmathSoaVector4 *vec ); + +/* + * Compute the dot product of two 4-D vectors + */ +static inline vec_float4 vmathSoaV4Dot( const VmathSoaVector4 *vec0, const VmathSoaVector4 *vec1 ); + +/* + * Compute the square of the length of a 4-D vector + */ +static inline vec_float4 vmathSoaV4LengthSqr( const VmathSoaVector4 *vec ); + +/* + * Compute the length of a 4-D vector + */ +static inline vec_float4 vmathSoaV4Length( const VmathSoaVector4 *vec ); + +/* + * Normalize a 4-D vector + * NOTE: + * The result is unpredictable when all elements of vec are at or near zero. + */ +static inline void vmathSoaV4Normalize( VmathSoaVector4 *result, const VmathSoaVector4 *vec ); + +/* + * Outer product of two 4-D vectors + */ +static inline void vmathSoaV4Outer( VmathSoaMatrix4 *result, const VmathSoaVector4 *vec0, const VmathSoaVector4 *vec1 ); + +/* + * Linear interpolation between two 4-D vectors + * NOTE: + * Does not clamp t between 0 and 1. + */ +static inline void vmathSoaV4Lerp( VmathSoaVector4 *result, vec_float4 t, const VmathSoaVector4 *vec0, const VmathSoaVector4 *vec1 ); + +/* + * Spherical linear interpolation between two 4-D vectors + * NOTE: + * The result is unpredictable if the vectors point in opposite directions. + * Does not clamp t between 0 and 1. + */ +static inline void vmathSoaV4Slerp( VmathSoaVector4 *result, vec_float4 t, const VmathSoaVector4 *unitVec0, const VmathSoaVector4 *unitVec1 ); + +/* + * Conditionally select between two 4-D vectors + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + */ +static inline void vmathSoaV4Select( VmathSoaVector4 *result, const VmathSoaVector4 *vec0, const VmathSoaVector4 *vec1, vec_uint4 select1 ); + +/* + * Store four slots of an SoA 4-D vector as half-floats + */ +static inline void vmathSoaV4StoreHalfFloats( const VmathSoaVector4 *vec, vec_ushort8 *twoQuads ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 4-D vector + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaV4Print( const VmathSoaVector4 *vec ); + +/* + * Print a 4-D vector and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaV4Prints( const VmathSoaVector4 *vec, const char *name ); + +#endif + +/* + * Copy a 3-D point + */ +static inline void vmathSoaP3Copy( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt ); + +/* + * Construct a 3-D point from x, y, and z elements + */ +static inline void vmathSoaP3MakeFromElems( VmathSoaPoint3 *result, vec_float4 x, vec_float4 y, vec_float4 z ); + +/* + * Copy elements from a 3-D vector into a 3-D point + */ +static inline void vmathSoaP3MakeFromV3( VmathSoaPoint3 *result, const VmathSoaVector3 *vec ); + +/* + * Set all elements of a 3-D point to the same scalar value + */ +static inline void vmathSoaP3MakeFromScalar( VmathSoaPoint3 *result, vec_float4 scalar ); + +/* + * Replicate an AoS 3-D point + */ +static inline void vmathSoaP3MakeFromAos( VmathSoaPoint3 *result, const VmathPoint3 *pnt ); + +/* + * Insert four AoS 3-D points + */ +static inline void vmathSoaP3MakeFrom4Aos( VmathSoaPoint3 *result, const VmathPoint3 *pnt0, const VmathPoint3 *pnt1, const VmathPoint3 *pnt2, const VmathPoint3 *pnt3 ); + +/* + * Extract four AoS 3-D points + */ +static inline void vmathSoaP3Get4Aos( const VmathSoaPoint3 *pnt, VmathPoint3 *result0, VmathPoint3 *result1, VmathPoint3 *result2, VmathPoint3 *result3 ); + +/* + * Set the x element of a 3-D point + */ +static inline void vmathSoaP3SetX( VmathSoaPoint3 *result, vec_float4 x ); + +/* + * Set the y element of a 3-D point + */ +static inline void vmathSoaP3SetY( VmathSoaPoint3 *result, vec_float4 y ); + +/* + * Set the z element of a 3-D point + */ +static inline void vmathSoaP3SetZ( VmathSoaPoint3 *result, vec_float4 z ); + +/* + * Get the x element of a 3-D point + */ +static inline vec_float4 vmathSoaP3GetX( const VmathSoaPoint3 *pnt ); + +/* + * Get the y element of a 3-D point + */ +static inline vec_float4 vmathSoaP3GetY( const VmathSoaPoint3 *pnt ); + +/* + * Get the z element of a 3-D point + */ +static inline vec_float4 vmathSoaP3GetZ( const VmathSoaPoint3 *pnt ); + +/* + * Set an x, y, or z element of a 3-D point by index + */ +static inline void vmathSoaP3SetElem( VmathSoaPoint3 *result, int idx, vec_float4 value ); + +/* + * Get an x, y, or z element of a 3-D point by index + */ +static inline vec_float4 vmathSoaP3GetElem( const VmathSoaPoint3 *pnt, int idx ); + +/* + * Subtract a 3-D point from another 3-D point + */ +static inline void vmathSoaP3Sub( VmathSoaVector3 *result, const VmathSoaPoint3 *pnt0, const VmathSoaPoint3 *pnt1 ); + +/* + * Add a 3-D point to a 3-D vector + */ +static inline void vmathSoaP3AddV3( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt, const VmathSoaVector3 *vec ); + +/* + * Subtract a 3-D vector from a 3-D point + */ +static inline void vmathSoaP3SubV3( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt, const VmathSoaVector3 *vec ); + +/* + * Multiply two 3-D points per element + */ +static inline void vmathSoaP3MulPerElem( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt0, const VmathSoaPoint3 *pnt1 ); + +/* + * Divide two 3-D points per element + * NOTE: + * Floating-point behavior matches standard library function divf4. + */ +static inline void vmathSoaP3DivPerElem( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt0, const VmathSoaPoint3 *pnt1 ); + +/* + * Compute the reciprocal of a 3-D point per element + * NOTE: + * Floating-point behavior matches standard library function recipf4. + */ +static inline void vmathSoaP3RecipPerElem( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt ); + +/* + * Compute the square root of a 3-D point per element + * NOTE: + * Floating-point behavior matches standard library function sqrtf4. + */ +static inline void vmathSoaP3SqrtPerElem( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt ); + +/* + * Compute the reciprocal square root of a 3-D point per element + * NOTE: + * Floating-point behavior matches standard library function rsqrtf4. + */ +static inline void vmathSoaP3RsqrtPerElem( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt ); + +/* + * Compute the absolute value of a 3-D point per element + */ +static inline void vmathSoaP3AbsPerElem( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt ); + +/* + * Copy sign from one 3-D point to another, per element + */ +static inline void vmathSoaP3CopySignPerElem( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt0, const VmathSoaPoint3 *pnt1 ); + +/* + * Maximum of two 3-D points per element + */ +static inline void vmathSoaP3MaxPerElem( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt0, const VmathSoaPoint3 *pnt1 ); + +/* + * Minimum of two 3-D points per element + */ +static inline void vmathSoaP3MinPerElem( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt0, const VmathSoaPoint3 *pnt1 ); + +/* + * Maximum element of a 3-D point + */ +static inline vec_float4 vmathSoaP3MaxElem( const VmathSoaPoint3 *pnt ); + +/* + * Minimum element of a 3-D point + */ +static inline vec_float4 vmathSoaP3MinElem( const VmathSoaPoint3 *pnt ); + +/* + * Compute the sum of all elements of a 3-D point + */ +static inline vec_float4 vmathSoaP3Sum( const VmathSoaPoint3 *pnt ); + +/* + * Apply uniform scale to a 3-D point + */ +static inline void vmathSoaP3Scale( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt, vec_float4 scaleVal ); + +/* + * Apply non-uniform scale to a 3-D point + */ +static inline void vmathSoaP3NonUniformScale( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt, const VmathSoaVector3 *scaleVec ); + +/* + * Scalar projection of a 3-D point on a unit-length 3-D vector + */ +static inline vec_float4 vmathSoaP3Projection( const VmathSoaPoint3 *pnt, const VmathSoaVector3 *unitVec ); + +/* + * Compute the square of the distance of a 3-D point from the coordinate-system origin + */ +static inline vec_float4 vmathSoaP3DistSqrFromOrigin( const VmathSoaPoint3 *pnt ); + +/* + * Compute the distance of a 3-D point from the coordinate-system origin + */ +static inline vec_float4 vmathSoaP3DistFromOrigin( const VmathSoaPoint3 *pnt ); + +/* + * Compute the square of the distance between two 3-D points + */ +static inline vec_float4 vmathSoaP3DistSqr( const VmathSoaPoint3 *pnt0, const VmathSoaPoint3 *pnt1 ); + +/* + * Compute the distance between two 3-D points + */ +static inline vec_float4 vmathSoaP3Dist( const VmathSoaPoint3 *pnt0, const VmathSoaPoint3 *pnt1 ); + +/* + * Linear interpolation between two 3-D points + * NOTE: + * Does not clamp t between 0 and 1. + */ +static inline void vmathSoaP3Lerp( VmathSoaPoint3 *result, vec_float4 t, const VmathSoaPoint3 *pnt0, const VmathSoaPoint3 *pnt1 ); + +/* + * Conditionally select between two 3-D points + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + */ +static inline void vmathSoaP3Select( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt0, const VmathSoaPoint3 *pnt1, vec_uint4 select1 ); + +/* + * Load four three-float 3-D points, stored in three quadwords + */ +static inline void vmathSoaP3LoadXYZArray( VmathSoaPoint3 *pnt, const vec_float4 *threeQuads ); + +/* + * Store four slots of an SoA 3-D point in three quadwords + */ +static inline void vmathSoaP3StoreXYZArray( const VmathSoaPoint3 *pnt, vec_float4 *threeQuads ); + +/* + * Store eight slots of two SoA 3-D points as half-floats + */ +static inline void vmathSoaP3StoreHalfFloats( const VmathSoaPoint3 *pnt0, const VmathSoaPoint3 *pnt1, vec_ushort8 *threeQuads ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 3-D point + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaP3Print( const VmathSoaPoint3 *pnt ); + +/* + * Print a 3-D point and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaP3Prints( const VmathSoaPoint3 *pnt, const char *name ); + +#endif + +/* + * Copy a quaternion + */ +static inline void vmathSoaQCopy( VmathSoaQuat *result, const VmathSoaQuat *quat ); + +/* + * Construct a quaternion from x, y, z, and w elements + */ +static inline void vmathSoaQMakeFromElems( VmathSoaQuat *result, vec_float4 x, vec_float4 y, vec_float4 z, vec_float4 w ); + +/* + * Construct a quaternion from a 3-D vector and a scalar + */ +static inline void vmathSoaQMakeFromV3Scalar( VmathSoaQuat *result, const VmathSoaVector3 *xyz, vec_float4 w ); + +/* + * Copy elements from a 4-D vector into a quaternion + */ +static inline void vmathSoaQMakeFromV4( VmathSoaQuat *result, const VmathSoaVector4 *vec ); + +/* + * Convert a rotation matrix to a unit-length quaternion + */ +static inline void vmathSoaQMakeFromM3( VmathSoaQuat *result, const VmathSoaMatrix3 *rotMat ); + +/* + * Set all elements of a quaternion to the same scalar value + */ +static inline void vmathSoaQMakeFromScalar( VmathSoaQuat *result, vec_float4 scalar ); + +/* + * Replicate an AoS quaternion + */ +static inline void vmathSoaQMakeFromAos( VmathSoaQuat *result, const VmathQuat *quat ); + +/* + * Insert four AoS quaternions + */ +static inline void vmathSoaQMakeFrom4Aos( VmathSoaQuat *result, const VmathQuat *quat0, const VmathQuat *quat1, const VmathQuat *quat2, const VmathQuat *quat3 ); + +/* + * Extract four AoS quaternions + */ +static inline void vmathSoaQGet4Aos( const VmathSoaQuat *quat, VmathQuat *result0, VmathQuat *result1, VmathQuat *result2, VmathQuat *result3 ); + +/* + * Set the x, y, and z elements of a quaternion + * NOTE: + * This function does not change the w element. + */ +static inline void vmathSoaQSetXYZ( VmathSoaQuat *result, const VmathSoaVector3 *vec ); + +/* + * Get the x, y, and z elements of a quaternion + */ +static inline void vmathSoaQGetXYZ( VmathSoaVector3 *result, const VmathSoaQuat *quat ); + +/* + * Set the x element of a quaternion + */ +static inline void vmathSoaQSetX( VmathSoaQuat *result, vec_float4 x ); + +/* + * Set the y element of a quaternion + */ +static inline void vmathSoaQSetY( VmathSoaQuat *result, vec_float4 y ); + +/* + * Set the z element of a quaternion + */ +static inline void vmathSoaQSetZ( VmathSoaQuat *result, vec_float4 z ); + +/* + * Set the w element of a quaternion + */ +static inline void vmathSoaQSetW( VmathSoaQuat *result, vec_float4 w ); + +/* + * Get the x element of a quaternion + */ +static inline vec_float4 vmathSoaQGetX( const VmathSoaQuat *quat ); + +/* + * Get the y element of a quaternion + */ +static inline vec_float4 vmathSoaQGetY( const VmathSoaQuat *quat ); + +/* + * Get the z element of a quaternion + */ +static inline vec_float4 vmathSoaQGetZ( const VmathSoaQuat *quat ); + +/* + * Get the w element of a quaternion + */ +static inline vec_float4 vmathSoaQGetW( const VmathSoaQuat *quat ); + +/* + * Set an x, y, z, or w element of a quaternion by index + */ +static inline void vmathSoaQSetElem( VmathSoaQuat *result, int idx, vec_float4 value ); + +/* + * Get an x, y, z, or w element of a quaternion by index + */ +static inline vec_float4 vmathSoaQGetElem( const VmathSoaQuat *quat, int idx ); + +/* + * Add two quaternions + */ +static inline void vmathSoaQAdd( VmathSoaQuat *result, const VmathSoaQuat *quat0, const VmathSoaQuat *quat1 ); + +/* + * Subtract a quaternion from another quaternion + */ +static inline void vmathSoaQSub( VmathSoaQuat *result, const VmathSoaQuat *quat0, const VmathSoaQuat *quat1 ); + +/* + * Multiply two quaternions + */ +static inline void vmathSoaQMul( VmathSoaQuat *result, const VmathSoaQuat *quat0, const VmathSoaQuat *quat1 ); + +/* + * Multiply a quaternion by a scalar + */ +static inline void vmathSoaQScalarMul( VmathSoaQuat *result, const VmathSoaQuat *quat, vec_float4 scalar ); + +/* + * Divide a quaternion by a scalar + */ +static inline void vmathSoaQScalarDiv( VmathSoaQuat *result, const VmathSoaQuat *quat, vec_float4 scalar ); + +/* + * Negate all elements of a quaternion + */ +static inline void vmathSoaQNeg( VmathSoaQuat *result, const VmathSoaQuat *quat ); + +/* + * Construct an identity quaternion + */ +static inline void vmathSoaQMakeIdentity( VmathSoaQuat *result ); + +/* + * Construct a quaternion to rotate between two unit-length 3-D vectors + * NOTE: + * The result is unpredictable if unitVec0 and unitVec1 point in opposite directions. + */ +static inline void vmathSoaQMakeRotationArc( VmathSoaQuat *result, const VmathSoaVector3 *unitVec0, const VmathSoaVector3 *unitVec1 ); + +/* + * Construct a quaternion to rotate around a unit-length 3-D vector + */ +static inline void vmathSoaQMakeRotationAxis( VmathSoaQuat *result, vec_float4 radians, const VmathSoaVector3 *unitVec ); + +/* + * Construct a quaternion to rotate around the x axis + */ +static inline void vmathSoaQMakeRotationX( VmathSoaQuat *result, vec_float4 radians ); + +/* + * Construct a quaternion to rotate around the y axis + */ +static inline void vmathSoaQMakeRotationY( VmathSoaQuat *result, vec_float4 radians ); + +/* + * Construct a quaternion to rotate around the z axis + */ +static inline void vmathSoaQMakeRotationZ( VmathSoaQuat *result, vec_float4 radians ); + +/* + * Compute the conjugate of a quaternion + */ +static inline void vmathSoaQConj( VmathSoaQuat *result, const VmathSoaQuat *quat ); + +/* + * Use a unit-length quaternion to rotate a 3-D vector + */ +static inline void vmathSoaQRotate( VmathSoaVector3 *result, const VmathSoaQuat *unitQuat, const VmathSoaVector3 *vec ); + +/* + * Compute the dot product of two quaternions + */ +static inline vec_float4 vmathSoaQDot( const VmathSoaQuat *quat0, const VmathSoaQuat *quat1 ); + +/* + * Compute the norm of a quaternion + */ +static inline vec_float4 vmathSoaQNorm( const VmathSoaQuat *quat ); + +/* + * Compute the length of a quaternion + */ +static inline vec_float4 vmathSoaQLength( const VmathSoaQuat *quat ); + +/* + * Normalize a quaternion + * NOTE: + * The result is unpredictable when all elements of quat are at or near zero. + */ +static inline void vmathSoaQNormalize( VmathSoaQuat *result, const VmathSoaQuat *quat ); + +/* + * Linear interpolation between two quaternions + * NOTE: + * Does not clamp t between 0 and 1. + */ +static inline void vmathSoaQLerp( VmathSoaQuat *result, vec_float4 t, const VmathSoaQuat *quat0, const VmathSoaQuat *quat1 ); + +/* + * Spherical linear interpolation between two quaternions + * NOTE: + * Interpolates along the shortest path between orientations. + * Does not clamp t between 0 and 1. + */ +static inline void vmathSoaQSlerp( VmathSoaQuat *result, vec_float4 t, const VmathSoaQuat *unitQuat0, const VmathSoaQuat *unitQuat1 ); + +/* + * Spherical quadrangle interpolation + */ +static inline void vmathSoaQSquad( VmathSoaQuat *result, vec_float4 t, const VmathSoaQuat *unitQuat0, const VmathSoaQuat *unitQuat1, const VmathSoaQuat *unitQuat2, const VmathSoaQuat *unitQuat3 ); + +/* + * Conditionally select between two quaternions + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + */ +static inline void vmathSoaQSelect( VmathSoaQuat *result, const VmathSoaQuat *quat0, const VmathSoaQuat *quat1, vec_uint4 select1 ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a quaternion + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaQPrint( const VmathSoaQuat *quat ); + +/* + * Print a quaternion and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaQPrints( const VmathSoaQuat *quat, const char *name ); + +#endif + +/* + * Copy a 3x3 matrix + */ +static inline void vmathSoaM3Copy( VmathSoaMatrix3 *result, const VmathSoaMatrix3 *mat ); + +/* + * Construct a 3x3 matrix containing the specified columns + */ +static inline void vmathSoaM3MakeFromCols( VmathSoaMatrix3 *result, const VmathSoaVector3 *col0, const VmathSoaVector3 *col1, const VmathSoaVector3 *col2 ); + +/* + * Construct a 3x3 rotation matrix from a unit-length quaternion + */ +static inline void vmathSoaM3MakeFromQ( VmathSoaMatrix3 *result, const VmathSoaQuat *unitQuat ); + +/* + * Set all elements of a 3x3 matrix to the same scalar value + */ +static inline void vmathSoaM3MakeFromScalar( VmathSoaMatrix3 *result, vec_float4 scalar ); + +/* + * Replicate an AoS 3x3 matrix + */ +static inline void vmathSoaM3MakeFromAos( VmathSoaMatrix3 *result, const VmathMatrix3 *mat ); + +/* + * Insert four AoS 3x3 matrices + */ +static inline void vmathSoaM3MakeFrom4Aos( VmathSoaMatrix3 *result, const VmathMatrix3 *mat0, const VmathMatrix3 *mat1, const VmathMatrix3 *mat2, const VmathMatrix3 *mat3 ); + +/* + * Extract four AoS 3x3 matrices + */ +static inline void vmathSoaM3Get4Aos( const VmathSoaMatrix3 *mat, VmathMatrix3 *result0, VmathMatrix3 *result1, VmathMatrix3 *result2, VmathMatrix3 *result3 ); + +/* + * Set column 0 of a 3x3 matrix + */ +static inline void vmathSoaM3SetCol0( VmathSoaMatrix3 *result, const VmathSoaVector3 *col0 ); + +/* + * Set column 1 of a 3x3 matrix + */ +static inline void vmathSoaM3SetCol1( VmathSoaMatrix3 *result, const VmathSoaVector3 *col1 ); + +/* + * Set column 2 of a 3x3 matrix + */ +static inline void vmathSoaM3SetCol2( VmathSoaMatrix3 *result, const VmathSoaVector3 *col2 ); + +/* + * Get column 0 of a 3x3 matrix + */ +static inline void vmathSoaM3GetCol0( VmathSoaVector3 *result, const VmathSoaMatrix3 *mat ); + +/* + * Get column 1 of a 3x3 matrix + */ +static inline void vmathSoaM3GetCol1( VmathSoaVector3 *result, const VmathSoaMatrix3 *mat ); + +/* + * Get column 2 of a 3x3 matrix + */ +static inline void vmathSoaM3GetCol2( VmathSoaVector3 *result, const VmathSoaMatrix3 *mat ); + +/* + * Set the column of a 3x3 matrix referred to by the specified index + */ +static inline void vmathSoaM3SetCol( VmathSoaMatrix3 *result, int col, const VmathSoaVector3 *vec ); + +/* + * Set the row of a 3x3 matrix referred to by the specified index + */ +static inline void vmathSoaM3SetRow( VmathSoaMatrix3 *result, int row, const VmathSoaVector3 *vec ); + +/* + * Get the column of a 3x3 matrix referred to by the specified index + */ +static inline void vmathSoaM3GetCol( VmathSoaVector3 *result, const VmathSoaMatrix3 *mat, int col ); + +/* + * Get the row of a 3x3 matrix referred to by the specified index + */ +static inline void vmathSoaM3GetRow( VmathSoaVector3 *result, const VmathSoaMatrix3 *mat, int row ); + +/* + * Set the element of a 3x3 matrix referred to by column and row indices + */ +static inline void vmathSoaM3SetElem( VmathSoaMatrix3 *result, int col, int row, vec_float4 val ); + +/* + * Get the element of a 3x3 matrix referred to by column and row indices + */ +static inline vec_float4 vmathSoaM3GetElem( const VmathSoaMatrix3 *mat, int col, int row ); + +/* + * Add two 3x3 matrices + */ +static inline void vmathSoaM3Add( VmathSoaMatrix3 *result, const VmathSoaMatrix3 *mat0, const VmathSoaMatrix3 *mat1 ); + +/* + * Subtract a 3x3 matrix from another 3x3 matrix + */ +static inline void vmathSoaM3Sub( VmathSoaMatrix3 *result, const VmathSoaMatrix3 *mat0, const VmathSoaMatrix3 *mat1 ); + +/* + * Negate all elements of a 3x3 matrix + */ +static inline void vmathSoaM3Neg( VmathSoaMatrix3 *result, const VmathSoaMatrix3 *mat ); + +/* + * Multiply a 3x3 matrix by a scalar + */ +static inline void vmathSoaM3ScalarMul( VmathSoaMatrix3 *result, const VmathSoaMatrix3 *mat, vec_float4 scalar ); + +/* + * Multiply a 3x3 matrix by a 3-D vector + */ +static inline void vmathSoaM3MulV3( VmathSoaVector3 *result, const VmathSoaMatrix3 *mat, const VmathSoaVector3 *vec ); + +/* + * Multiply two 3x3 matrices + */ +static inline void vmathSoaM3Mul( VmathSoaMatrix3 *result, const VmathSoaMatrix3 *mat0, const VmathSoaMatrix3 *mat1 ); + +/* + * Construct an identity 3x3 matrix + */ +static inline void vmathSoaM3MakeIdentity( VmathSoaMatrix3 *result ); + +/* + * Construct a 3x3 matrix to rotate around the x axis + */ +static inline void vmathSoaM3MakeRotationX( VmathSoaMatrix3 *result, vec_float4 radians ); + +/* + * Construct a 3x3 matrix to rotate around the y axis + */ +static inline void vmathSoaM3MakeRotationY( VmathSoaMatrix3 *result, vec_float4 radians ); + +/* + * Construct a 3x3 matrix to rotate around the z axis + */ +static inline void vmathSoaM3MakeRotationZ( VmathSoaMatrix3 *result, vec_float4 radians ); + +/* + * Construct a 3x3 matrix to rotate around the x, y, and z axes + */ +static inline void vmathSoaM3MakeRotationZYX( VmathSoaMatrix3 *result, const VmathSoaVector3 *radiansXYZ ); + +/* + * Construct a 3x3 matrix to rotate around a unit-length 3-D vector + */ +static inline void vmathSoaM3MakeRotationAxis( VmathSoaMatrix3 *result, vec_float4 radians, const VmathSoaVector3 *unitVec ); + +/* + * Construct a rotation matrix from a unit-length quaternion + */ +static inline void vmathSoaM3MakeRotationQ( VmathSoaMatrix3 *result, const VmathSoaQuat *unitQuat ); + +/* + * Construct a 3x3 matrix to perform scaling + */ +static inline void vmathSoaM3MakeScale( VmathSoaMatrix3 *result, const VmathSoaVector3 *scaleVec ); + +/* + * Append (post-multiply) a scale transformation to a 3x3 matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline void vmathSoaM3AppendScale( VmathSoaMatrix3 *result, const VmathSoaMatrix3 *mat, const VmathSoaVector3 *scaleVec ); + +/* + * Prepend (pre-multiply) a scale transformation to a 3x3 matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline void vmathSoaM3PrependScale( VmathSoaMatrix3 *result, const VmathSoaVector3 *scaleVec, const VmathSoaMatrix3 *mat ); + +/* + * Multiply two 3x3 matrices per element + */ +static inline void vmathSoaM3MulPerElem( VmathSoaMatrix3 *result, const VmathSoaMatrix3 *mat0, const VmathSoaMatrix3 *mat1 ); + +/* + * Compute the absolute value of a 3x3 matrix per element + */ +static inline void vmathSoaM3AbsPerElem( VmathSoaMatrix3 *result, const VmathSoaMatrix3 *mat ); + +/* + * Transpose of a 3x3 matrix + */ +static inline void vmathSoaM3Transpose( VmathSoaMatrix3 *result, const VmathSoaMatrix3 *mat ); + +/* + * Compute the inverse of a 3x3 matrix + * NOTE: + * Result is unpredictable when the determinant of mat is equal to or near 0. + */ +static inline void vmathSoaM3Inverse( VmathSoaMatrix3 *result, const VmathSoaMatrix3 *mat ); + +/* + * Determinant of a 3x3 matrix + */ +static inline vec_float4 vmathSoaM3Determinant( const VmathSoaMatrix3 *mat ); + +/* + * Conditionally select between two 3x3 matrices + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + */ +static inline void vmathSoaM3Select( VmathSoaMatrix3 *result, const VmathSoaMatrix3 *mat0, const VmathSoaMatrix3 *mat1, vec_uint4 select1 ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 3x3 matrix + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaM3Print( const VmathSoaMatrix3 *mat ); + +/* + * Print a 3x3 matrix and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaM3Prints( const VmathSoaMatrix3 *mat, const char *name ); + +#endif + +/* + * Copy a 4x4 matrix + */ +static inline void vmathSoaM4Copy( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat ); + +/* + * Construct a 4x4 matrix containing the specified columns + */ +static inline void vmathSoaM4MakeFromCols( VmathSoaMatrix4 *result, const VmathSoaVector4 *col0, const VmathSoaVector4 *col1, const VmathSoaVector4 *col2, const VmathSoaVector4 *col3 ); + +/* + * Construct a 4x4 matrix from a 3x4 transformation matrix + */ +static inline void vmathSoaM4MakeFromT3( VmathSoaMatrix4 *result, const VmathSoaTransform3 *mat ); + +/* + * Construct a 4x4 matrix from a 3x3 matrix and a 3-D vector + */ +static inline void vmathSoaM4MakeFromM3V3( VmathSoaMatrix4 *result, const VmathSoaMatrix3 *mat, const VmathSoaVector3 *translateVec ); + +/* + * Construct a 4x4 matrix from a unit-length quaternion and a 3-D vector + */ +static inline void vmathSoaM4MakeFromQV3( VmathSoaMatrix4 *result, const VmathSoaQuat *unitQuat, const VmathSoaVector3 *translateVec ); + +/* + * Set all elements of a 4x4 matrix to the same scalar value + */ +static inline void vmathSoaM4MakeFromScalar( VmathSoaMatrix4 *result, vec_float4 scalar ); + +/* + * Replicate an AoS 4x4 matrix + */ +static inline void vmathSoaM4MakeFromAos( VmathSoaMatrix4 *result, const VmathMatrix4 *mat ); + +/* + * Insert four AoS 4x4 matrices + */ +static inline void vmathSoaM4MakeFrom4Aos( VmathSoaMatrix4 *result, const VmathMatrix4 *mat0, const VmathMatrix4 *mat1, const VmathMatrix4 *mat2, const VmathMatrix4 *mat3 ); + +/* + * Extract four AoS 4x4 matrices + */ +static inline void vmathSoaM4Get4Aos( const VmathSoaMatrix4 *mat, VmathMatrix4 *result0, VmathMatrix4 *result1, VmathMatrix4 *result2, VmathMatrix4 *result3 ); + +/* + * Set the upper-left 3x3 submatrix + * NOTE: + * This function does not change the bottom row elements. + */ +static inline void vmathSoaM4SetUpper3x3( VmathSoaMatrix4 *result, const VmathSoaMatrix3 *mat3 ); + +/* + * Get the upper-left 3x3 submatrix of a 4x4 matrix + */ +static inline void vmathSoaM4GetUpper3x3( VmathSoaMatrix3 *result, const VmathSoaMatrix4 *mat ); + +/* + * Set translation component + * NOTE: + * This function does not change the bottom row elements. + */ +static inline void vmathSoaM4SetTranslation( VmathSoaMatrix4 *result, const VmathSoaVector3 *translateVec ); + +/* + * Get the translation component of a 4x4 matrix + */ +static inline void vmathSoaM4GetTranslation( VmathSoaVector3 *result, const VmathSoaMatrix4 *mat ); + +/* + * Set column 0 of a 4x4 matrix + */ +static inline void vmathSoaM4SetCol0( VmathSoaMatrix4 *result, const VmathSoaVector4 *col0 ); + +/* + * Set column 1 of a 4x4 matrix + */ +static inline void vmathSoaM4SetCol1( VmathSoaMatrix4 *result, const VmathSoaVector4 *col1 ); + +/* + * Set column 2 of a 4x4 matrix + */ +static inline void vmathSoaM4SetCol2( VmathSoaMatrix4 *result, const VmathSoaVector4 *col2 ); + +/* + * Set column 3 of a 4x4 matrix + */ +static inline void vmathSoaM4SetCol3( VmathSoaMatrix4 *result, const VmathSoaVector4 *col3 ); + +/* + * Get column 0 of a 4x4 matrix + */ +static inline void vmathSoaM4GetCol0( VmathSoaVector4 *result, const VmathSoaMatrix4 *mat ); + +/* + * Get column 1 of a 4x4 matrix + */ +static inline void vmathSoaM4GetCol1( VmathSoaVector4 *result, const VmathSoaMatrix4 *mat ); + +/* + * Get column 2 of a 4x4 matrix + */ +static inline void vmathSoaM4GetCol2( VmathSoaVector4 *result, const VmathSoaMatrix4 *mat ); + +/* + * Get column 3 of a 4x4 matrix + */ +static inline void vmathSoaM4GetCol3( VmathSoaVector4 *result, const VmathSoaMatrix4 *mat ); + +/* + * Set the column of a 4x4 matrix referred to by the specified index + */ +static inline void vmathSoaM4SetCol( VmathSoaMatrix4 *result, int col, const VmathSoaVector4 *vec ); + +/* + * Set the row of a 4x4 matrix referred to by the specified index + */ +static inline void vmathSoaM4SetRow( VmathSoaMatrix4 *result, int row, const VmathSoaVector4 *vec ); + +/* + * Get the column of a 4x4 matrix referred to by the specified index + */ +static inline void vmathSoaM4GetCol( VmathSoaVector4 *result, const VmathSoaMatrix4 *mat, int col ); + +/* + * Get the row of a 4x4 matrix referred to by the specified index + */ +static inline void vmathSoaM4GetRow( VmathSoaVector4 *result, const VmathSoaMatrix4 *mat, int row ); + +/* + * Set the element of a 4x4 matrix referred to by column and row indices + */ +static inline void vmathSoaM4SetElem( VmathSoaMatrix4 *result, int col, int row, vec_float4 val ); + +/* + * Get the element of a 4x4 matrix referred to by column and row indices + */ +static inline vec_float4 vmathSoaM4GetElem( const VmathSoaMatrix4 *mat, int col, int row ); + +/* + * Add two 4x4 matrices + */ +static inline void vmathSoaM4Add( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat0, const VmathSoaMatrix4 *mat1 ); + +/* + * Subtract a 4x4 matrix from another 4x4 matrix + */ +static inline void vmathSoaM4Sub( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat0, const VmathSoaMatrix4 *mat1 ); + +/* + * Negate all elements of a 4x4 matrix + */ +static inline void vmathSoaM4Neg( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat ); + +/* + * Multiply a 4x4 matrix by a scalar + */ +static inline void vmathSoaM4ScalarMul( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat, vec_float4 scalar ); + +/* + * Multiply a 4x4 matrix by a 4-D vector + */ +static inline void vmathSoaM4MulV4( VmathSoaVector4 *result, const VmathSoaMatrix4 *mat, const VmathSoaVector4 *vec ); + +/* + * Multiply a 4x4 matrix by a 3-D vector + */ +static inline void vmathSoaM4MulV3( VmathSoaVector4 *result, const VmathSoaMatrix4 *mat, const VmathSoaVector3 *vec ); + +/* + * Multiply a 4x4 matrix by a 3-D point + */ +static inline void vmathSoaM4MulP3( VmathSoaVector4 *result, const VmathSoaMatrix4 *mat, const VmathSoaPoint3 *pnt ); + +/* + * Multiply two 4x4 matrices + */ +static inline void vmathSoaM4Mul( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat0, const VmathSoaMatrix4 *mat1 ); + +/* + * Multiply a 4x4 matrix by a 3x4 transformation matrix + */ +static inline void vmathSoaM4MulT3( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat, const VmathSoaTransform3 *tfrm ); + +/* + * Construct an identity 4x4 matrix + */ +static inline void vmathSoaM4MakeIdentity( VmathSoaMatrix4 *result ); + +/* + * Construct a 4x4 matrix to rotate around the x axis + */ +static inline void vmathSoaM4MakeRotationX( VmathSoaMatrix4 *result, vec_float4 radians ); + +/* + * Construct a 4x4 matrix to rotate around the y axis + */ +static inline void vmathSoaM4MakeRotationY( VmathSoaMatrix4 *result, vec_float4 radians ); + +/* + * Construct a 4x4 matrix to rotate around the z axis + */ +static inline void vmathSoaM4MakeRotationZ( VmathSoaMatrix4 *result, vec_float4 radians ); + +/* + * Construct a 4x4 matrix to rotate around the x, y, and z axes + */ +static inline void vmathSoaM4MakeRotationZYX( VmathSoaMatrix4 *result, const VmathSoaVector3 *radiansXYZ ); + +/* + * Construct a 4x4 matrix to rotate around a unit-length 3-D vector + */ +static inline void vmathSoaM4MakeRotationAxis( VmathSoaMatrix4 *result, vec_float4 radians, const VmathSoaVector3 *unitVec ); + +/* + * Construct a rotation matrix from a unit-length quaternion + */ +static inline void vmathSoaM4MakeRotationQ( VmathSoaMatrix4 *result, const VmathSoaQuat *unitQuat ); + +/* + * Construct a 4x4 matrix to perform scaling + */ +static inline void vmathSoaM4MakeScale( VmathSoaMatrix4 *result, const VmathSoaVector3 *scaleVec ); + +/* + * Construct a 4x4 matrix to perform translation + */ +static inline void vmathSoaM4MakeTranslation( VmathSoaMatrix4 *result, const VmathSoaVector3 *translateVec ); + +/* + * Construct viewing matrix based on eye position, position looked at, and up direction + */ +static inline void vmathSoaM4MakeLookAt( VmathSoaMatrix4 *result, const VmathSoaPoint3 *eyePos, const VmathSoaPoint3 *lookAtPos, const VmathSoaVector3 *upVec ); + +/* + * Construct a perspective projection matrix + */ +static inline void vmathSoaM4MakePerspective( VmathSoaMatrix4 *result, vec_float4 fovyRadians, vec_float4 aspect, vec_float4 zNear, vec_float4 zFar ); + +/* + * Construct a perspective projection matrix based on frustum + */ +static inline void vmathSoaM4MakeFrustum( VmathSoaMatrix4 *result, vec_float4 left, vec_float4 right, vec_float4 bottom, vec_float4 top, vec_float4 zNear, vec_float4 zFar ); + +/* + * Construct an orthographic projection matrix + */ +static inline void vmathSoaM4MakeOrthographic( VmathSoaMatrix4 *result, vec_float4 left, vec_float4 right, vec_float4 bottom, vec_float4 top, vec_float4 zNear, vec_float4 zFar ); + +/* + * Append (post-multiply) a scale transformation to a 4x4 matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline void vmathSoaM4AppendScale( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat, const VmathSoaVector3 *scaleVec ); + +/* + * Prepend (pre-multiply) a scale transformation to a 4x4 matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline void vmathSoaM4PrependScale( VmathSoaMatrix4 *result, const VmathSoaVector3 *scaleVec, const VmathSoaMatrix4 *mat ); + +/* + * Multiply two 4x4 matrices per element + */ +static inline void vmathSoaM4MulPerElem( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat0, const VmathSoaMatrix4 *mat1 ); + +/* + * Compute the absolute value of a 4x4 matrix per element + */ +static inline void vmathSoaM4AbsPerElem( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat ); + +/* + * Transpose of a 4x4 matrix + */ +static inline void vmathSoaM4Transpose( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat ); + +/* + * Compute the inverse of a 4x4 matrix + * NOTE: + * Result is unpredictable when the determinant of mat is equal to or near 0. + */ +static inline void vmathSoaM4Inverse( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat ); + +/* + * Compute the inverse of a 4x4 matrix, which is expected to be an affine matrix + * NOTE: + * This can be used to achieve better performance than a general inverse when the specified 4x4 matrix meets the given restrictions. The result is unpredictable when the determinant of mat is equal to or near 0. + */ +static inline void vmathSoaM4AffineInverse( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat ); + +/* + * Compute the inverse of a 4x4 matrix, which is expected to be an affine matrix with an orthogonal upper-left 3x3 submatrix + * NOTE: + * This can be used to achieve better performance than a general inverse when the specified 4x4 matrix meets the given restrictions. + */ +static inline void vmathSoaM4OrthoInverse( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat ); + +/* + * Determinant of a 4x4 matrix + */ +static inline vec_float4 vmathSoaM4Determinant( const VmathSoaMatrix4 *mat ); + +/* + * Conditionally select between two 4x4 matrices + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + */ +static inline void vmathSoaM4Select( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat0, const VmathSoaMatrix4 *mat1, vec_uint4 select1 ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 4x4 matrix + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaM4Print( const VmathSoaMatrix4 *mat ); + +/* + * Print a 4x4 matrix and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaM4Prints( const VmathSoaMatrix4 *mat, const char *name ); + +#endif + +/* + * Copy a 3x4 transformation matrix + */ +static inline void vmathSoaT3Copy( VmathSoaTransform3 *result, const VmathSoaTransform3 *tfrm ); + +/* + * Construct a 3x4 transformation matrix containing the specified columns + */ +static inline void vmathSoaT3MakeFromCols( VmathSoaTransform3 *result, const VmathSoaVector3 *col0, const VmathSoaVector3 *col1, const VmathSoaVector3 *col2, const VmathSoaVector3 *col3 ); + +/* + * Construct a 3x4 transformation matrix from a 3x3 matrix and a 3-D vector + */ +static inline void vmathSoaT3MakeFromM3V3( VmathSoaTransform3 *result, const VmathSoaMatrix3 *tfrm, const VmathSoaVector3 *translateVec ); + +/* + * Construct a 3x4 transformation matrix from a unit-length quaternion and a 3-D vector + */ +static inline void vmathSoaT3MakeFromQV3( VmathSoaTransform3 *result, const VmathSoaQuat *unitQuat, const VmathSoaVector3 *translateVec ); + +/* + * Set all elements of a 3x4 transformation matrix to the same scalar value + */ +static inline void vmathSoaT3MakeFromScalar( VmathSoaTransform3 *result, vec_float4 scalar ); + +/* + * Replicate an AoS 3x4 transformation matrix + */ +static inline void vmathSoaT3MakeFromAos( VmathSoaTransform3 *result, const VmathTransform3 *tfrm ); + +/* + * Insert four AoS 3x4 transformation matrices + */ +static inline void vmathSoaT3MakeFrom4Aos( VmathSoaTransform3 *result, const VmathTransform3 *tfrm0, const VmathTransform3 *tfrm1, const VmathTransform3 *tfrm2, const VmathTransform3 *tfrm3 ); + +/* + * Extract four AoS 3x4 transformation matrices + */ +static inline void vmathSoaT3Get4Aos( const VmathSoaTransform3 *tfrm, VmathTransform3 *result0, VmathTransform3 *result1, VmathTransform3 *result2, VmathTransform3 *result3 ); + +/* + * Set the upper-left 3x3 submatrix + */ +static inline void vmathSoaT3SetUpper3x3( VmathSoaTransform3 *result, const VmathSoaMatrix3 *mat3 ); + +/* + * Get the upper-left 3x3 submatrix of a 3x4 transformation matrix + */ +static inline void vmathSoaT3GetUpper3x3( VmathSoaMatrix3 *result, const VmathSoaTransform3 *tfrm ); + +/* + * Set translation component + */ +static inline void vmathSoaT3SetTranslation( VmathSoaTransform3 *result, const VmathSoaVector3 *translateVec ); + +/* + * Get the translation component of a 3x4 transformation matrix + */ +static inline void vmathSoaT3GetTranslation( VmathSoaVector3 *result, const VmathSoaTransform3 *tfrm ); + +/* + * Set column 0 of a 3x4 transformation matrix + */ +static inline void vmathSoaT3SetCol0( VmathSoaTransform3 *result, const VmathSoaVector3 *col0 ); + +/* + * Set column 1 of a 3x4 transformation matrix + */ +static inline void vmathSoaT3SetCol1( VmathSoaTransform3 *result, const VmathSoaVector3 *col1 ); + +/* + * Set column 2 of a 3x4 transformation matrix + */ +static inline void vmathSoaT3SetCol2( VmathSoaTransform3 *result, const VmathSoaVector3 *col2 ); + +/* + * Set column 3 of a 3x4 transformation matrix + */ +static inline void vmathSoaT3SetCol3( VmathSoaTransform3 *result, const VmathSoaVector3 *col3 ); + +/* + * Get column 0 of a 3x4 transformation matrix + */ +static inline void vmathSoaT3GetCol0( VmathSoaVector3 *result, const VmathSoaTransform3 *tfrm ); + +/* + * Get column 1 of a 3x4 transformation matrix + */ +static inline void vmathSoaT3GetCol1( VmathSoaVector3 *result, const VmathSoaTransform3 *tfrm ); + +/* + * Get column 2 of a 3x4 transformation matrix + */ +static inline void vmathSoaT3GetCol2( VmathSoaVector3 *result, const VmathSoaTransform3 *tfrm ); + +/* + * Get column 3 of a 3x4 transformation matrix + */ +static inline void vmathSoaT3GetCol3( VmathSoaVector3 *result, const VmathSoaTransform3 *tfrm ); + +/* + * Set the column of a 3x4 transformation matrix referred to by the specified index + */ +static inline void vmathSoaT3SetCol( VmathSoaTransform3 *result, int col, const VmathSoaVector3 *vec ); + +/* + * Set the row of a 3x4 transformation matrix referred to by the specified index + */ +static inline void vmathSoaT3SetRow( VmathSoaTransform3 *result, int row, const VmathSoaVector4 *vec ); + +/* + * Get the column of a 3x4 transformation matrix referred to by the specified index + */ +static inline void vmathSoaT3GetCol( VmathSoaVector3 *result, const VmathSoaTransform3 *tfrm, int col ); + +/* + * Get the row of a 3x4 transformation matrix referred to by the specified index + */ +static inline void vmathSoaT3GetRow( VmathSoaVector4 *result, const VmathSoaTransform3 *tfrm, int row ); + +/* + * Set the element of a 3x4 transformation matrix referred to by column and row indices + */ +static inline void vmathSoaT3SetElem( VmathSoaTransform3 *result, int col, int row, vec_float4 val ); + +/* + * Get the element of a 3x4 transformation matrix referred to by column and row indices + */ +static inline vec_float4 vmathSoaT3GetElem( const VmathSoaTransform3 *tfrm, int col, int row ); + +/* + * Multiply a 3x4 transformation matrix by a 3-D vector + */ +static inline void vmathSoaT3MulV3( VmathSoaVector3 *result, const VmathSoaTransform3 *tfrm, const VmathSoaVector3 *vec ); + +/* + * Multiply a 3x4 transformation matrix by a 3-D point + */ +static inline void vmathSoaT3MulP3( VmathSoaPoint3 *result, const VmathSoaTransform3 *tfrm, const VmathSoaPoint3 *pnt ); + +/* + * Multiply two 3x4 transformation matrices + */ +static inline void vmathSoaT3Mul( VmathSoaTransform3 *result, const VmathSoaTransform3 *tfrm0, const VmathSoaTransform3 *tfrm1 ); + +/* + * Construct an identity 3x4 transformation matrix + */ +static inline void vmathSoaT3MakeIdentity( VmathSoaTransform3 *result ); + +/* + * Construct a 3x4 transformation matrix to rotate around the x axis + */ +static inline void vmathSoaT3MakeRotationX( VmathSoaTransform3 *result, vec_float4 radians ); + +/* + * Construct a 3x4 transformation matrix to rotate around the y axis + */ +static inline void vmathSoaT3MakeRotationY( VmathSoaTransform3 *result, vec_float4 radians ); + +/* + * Construct a 3x4 transformation matrix to rotate around the z axis + */ +static inline void vmathSoaT3MakeRotationZ( VmathSoaTransform3 *result, vec_float4 radians ); + +/* + * Construct a 3x4 transformation matrix to rotate around the x, y, and z axes + */ +static inline void vmathSoaT3MakeRotationZYX( VmathSoaTransform3 *result, const VmathSoaVector3 *radiansXYZ ); + +/* + * Construct a 3x4 transformation matrix to rotate around a unit-length 3-D vector + */ +static inline void vmathSoaT3MakeRotationAxis( VmathSoaTransform3 *result, vec_float4 radians, const VmathSoaVector3 *unitVec ); + +/* + * Construct a rotation matrix from a unit-length quaternion + */ +static inline void vmathSoaT3MakeRotationQ( VmathSoaTransform3 *result, const VmathSoaQuat *unitQuat ); + +/* + * Construct a 3x4 transformation matrix to perform scaling + */ +static inline void vmathSoaT3MakeScale( VmathSoaTransform3 *result, const VmathSoaVector3 *scaleVec ); + +/* + * Construct a 3x4 transformation matrix to perform translation + */ +static inline void vmathSoaT3MakeTranslation( VmathSoaTransform3 *result, const VmathSoaVector3 *translateVec ); + +/* + * Append (post-multiply) a scale transformation to a 3x4 transformation matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline void vmathSoaT3AppendScale( VmathSoaTransform3 *result, const VmathSoaTransform3 *tfrm, const VmathSoaVector3 *scaleVec ); + +/* + * Prepend (pre-multiply) a scale transformation to a 3x4 transformation matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline void vmathSoaT3PrependScale( VmathSoaTransform3 *result, const VmathSoaVector3 *scaleVec, const VmathSoaTransform3 *tfrm ); + +/* + * Multiply two 3x4 transformation matrices per element + */ +static inline void vmathSoaT3MulPerElem( VmathSoaTransform3 *result, const VmathSoaTransform3 *tfrm0, const VmathSoaTransform3 *tfrm1 ); + +/* + * Compute the absolute value of a 3x4 transformation matrix per element + */ +static inline void vmathSoaT3AbsPerElem( VmathSoaTransform3 *result, const VmathSoaTransform3 *tfrm ); + +/* + * Inverse of a 3x4 transformation matrix + * NOTE: + * Result is unpredictable when the determinant of the left 3x3 submatrix is equal to or near 0. + */ +static inline void vmathSoaT3Inverse( VmathSoaTransform3 *result, const VmathSoaTransform3 *tfrm ); + +/* + * Compute the inverse of a 3x4 transformation matrix, expected to have an orthogonal upper-left 3x3 submatrix + * NOTE: + * This can be used to achieve better performance than a general inverse when the specified 3x4 transformation matrix meets the given restrictions. + */ +static inline void vmathSoaT3OrthoInverse( VmathSoaTransform3 *result, const VmathSoaTransform3 *tfrm ); + +/* + * Conditionally select between two 3x4 transformation matrices + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + */ +static inline void vmathSoaT3Select( VmathSoaTransform3 *result, const VmathSoaTransform3 *tfrm0, const VmathSoaTransform3 *tfrm1, vec_uint4 select1 ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 3x4 transformation matrix + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaT3Print( const VmathSoaTransform3 *tfrm ); + +/* + * Print a 3x4 transformation matrix and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaT3Prints( const VmathSoaTransform3 *tfrm, const char *name ); + +#endif + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#include "vec_soa.h" +#include "quat_soa.h" +#include "mat_soa.h" + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/ppu/c/vectormath_soa_v.h b/Extras/vectormathlibrary/include/vectormath/ppu/c/vectormath_soa_v.h new file mode 100644 index 000000000..6865cef2f --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/ppu/c/vectormath_soa_v.h @@ -0,0 +1,1979 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_SOA_C_V_H +#define _VECTORMATH_SOA_C_V_H + +#include +#include +#include "vectormath_aos_v.h" + +#ifdef _VECTORMATH_DEBUG +#include +#endif + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#ifndef _VECTORMATH_SOA_C_TYPES_H +#define _VECTORMATH_SOA_C_TYPES_H + +/* A set of four 3-D vectors in structure-of-arrays format + */ +typedef struct _VmathSoaVector3 +{ + vec_float4 x; + vec_float4 y; + vec_float4 z; +} VmathSoaVector3; + +/* A set of four 4-D vectors in structure-of-arrays format + */ +typedef struct _VmathSoaVector4 +{ + vec_float4 x; + vec_float4 y; + vec_float4 z; + vec_float4 w; +} VmathSoaVector4; + +/* A set of four 3-D points in structure-of-arrays format + */ +typedef struct _VmathSoaPoint3 +{ + vec_float4 x; + vec_float4 y; + vec_float4 z; +} VmathSoaPoint3; + +/* A set of four quaternions in structure-of-arrays format + */ +typedef struct _VmathSoaQuat +{ + vec_float4 x; + vec_float4 y; + vec_float4 z; + vec_float4 w; +} VmathSoaQuat; + +/* A set of four 3x3 matrices in structure-of-arrays format + */ +typedef struct _VmathSoaMatrix3 +{ + VmathSoaVector3 col0; + VmathSoaVector3 col1; + VmathSoaVector3 col2; +} VmathSoaMatrix3; + +/* A set of four 4x4 matrices in structure-of-arrays format + */ +typedef struct _VmathSoaMatrix4 +{ + VmathSoaVector4 col0; + VmathSoaVector4 col1; + VmathSoaVector4 col2; + VmathSoaVector4 col3; +} VmathSoaMatrix4; + +/* A set of four 3x4 transformation matrices in structure-of-arrays format + */ +typedef struct _VmathSoaTransform3 +{ + VmathSoaVector3 col0; + VmathSoaVector3 col1; + VmathSoaVector3 col2; + VmathSoaVector3 col3; +} VmathSoaTransform3; + +#endif + +/* + * Construct a 3-D vector from x, y, and z elements + */ +static inline VmathSoaVector3 vmathSoaV3MakeFromElems_V( vec_float4 x, vec_float4 y, vec_float4 z ); + +/* + * Copy elements from a 3-D point into a 3-D vector + */ +static inline VmathSoaVector3 vmathSoaV3MakeFromP3_V( VmathSoaPoint3 pnt ); + +/* + * Set all elements of a 3-D vector to the same scalar value + */ +static inline VmathSoaVector3 vmathSoaV3MakeFromScalar_V( vec_float4 scalar ); + +/* + * Replicate an AoS 3-D vector + */ +static inline VmathSoaVector3 vmathSoaV3MakeFromAos_V( VmathVector3 vec ); + +/* + * Insert four AoS 3-D vectors + */ +static inline VmathSoaVector3 vmathSoaV3MakeFrom4Aos_V( VmathVector3 vec0, VmathVector3 vec1, VmathVector3 vec2, VmathVector3 vec3 ); + +/* + * Extract four AoS 3-D vectors + */ +static inline void vmathSoaV3Get4Aos_V( VmathSoaVector3 vec, VmathVector3 *result0, VmathVector3 *result1, VmathVector3 *result2, VmathVector3 *result3 ); + +/* + * Set the x element of a 3-D vector + */ +static inline void vmathSoaV3SetX_V( VmathSoaVector3 *result, vec_float4 x ); + +/* + * Set the y element of a 3-D vector + */ +static inline void vmathSoaV3SetY_V( VmathSoaVector3 *result, vec_float4 y ); + +/* + * Set the z element of a 3-D vector + */ +static inline void vmathSoaV3SetZ_V( VmathSoaVector3 *result, vec_float4 z ); + +/* + * Get the x element of a 3-D vector + */ +static inline vec_float4 vmathSoaV3GetX_V( VmathSoaVector3 vec ); + +/* + * Get the y element of a 3-D vector + */ +static inline vec_float4 vmathSoaV3GetY_V( VmathSoaVector3 vec ); + +/* + * Get the z element of a 3-D vector + */ +static inline vec_float4 vmathSoaV3GetZ_V( VmathSoaVector3 vec ); + +/* + * Set an x, y, or z element of a 3-D vector by index + */ +static inline void vmathSoaV3SetElem_V( VmathSoaVector3 *result, int idx, vec_float4 value ); + +/* + * Get an x, y, or z element of a 3-D vector by index + */ +static inline vec_float4 vmathSoaV3GetElem_V( VmathSoaVector3 vec, int idx ); + +/* + * Add two 3-D vectors + */ +static inline VmathSoaVector3 vmathSoaV3Add_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1 ); + +/* + * Subtract a 3-D vector from another 3-D vector + */ +static inline VmathSoaVector3 vmathSoaV3Sub_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1 ); + +/* + * Add a 3-D vector to a 3-D point + */ +static inline VmathSoaPoint3 vmathSoaV3AddP3_V( VmathSoaVector3 vec, VmathSoaPoint3 pnt ); + +/* + * Multiply a 3-D vector by a scalar + */ +static inline VmathSoaVector3 vmathSoaV3ScalarMul_V( VmathSoaVector3 vec, vec_float4 scalar ); + +/* + * Divide a 3-D vector by a scalar + */ +static inline VmathSoaVector3 vmathSoaV3ScalarDiv_V( VmathSoaVector3 vec, vec_float4 scalar ); + +/* + * Negate all elements of a 3-D vector + */ +static inline VmathSoaVector3 vmathSoaV3Neg_V( VmathSoaVector3 vec ); + +/* + * Construct x axis + */ +static inline VmathSoaVector3 vmathSoaV3MakeXAxis_V( ); + +/* + * Construct y axis + */ +static inline VmathSoaVector3 vmathSoaV3MakeYAxis_V( ); + +/* + * Construct z axis + */ +static inline VmathSoaVector3 vmathSoaV3MakeZAxis_V( ); + +/* + * Multiply two 3-D vectors per element + */ +static inline VmathSoaVector3 vmathSoaV3MulPerElem_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1 ); + +/* + * Divide two 3-D vectors per element + * NOTE: + * Floating-point behavior matches standard library function divf4. + */ +static inline VmathSoaVector3 vmathSoaV3DivPerElem_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1 ); + +/* + * Compute the reciprocal of a 3-D vector per element + * NOTE: + * Floating-point behavior matches standard library function recipf4. + */ +static inline VmathSoaVector3 vmathSoaV3RecipPerElem_V( VmathSoaVector3 vec ); + +/* + * Compute the square root of a 3-D vector per element + * NOTE: + * Floating-point behavior matches standard library function sqrtf4. + */ +static inline VmathSoaVector3 vmathSoaV3SqrtPerElem_V( VmathSoaVector3 vec ); + +/* + * Compute the reciprocal square root of a 3-D vector per element + * NOTE: + * Floating-point behavior matches standard library function rsqrtf4. + */ +static inline VmathSoaVector3 vmathSoaV3RsqrtPerElem_V( VmathSoaVector3 vec ); + +/* + * Compute the absolute value of a 3-D vector per element + */ +static inline VmathSoaVector3 vmathSoaV3AbsPerElem_V( VmathSoaVector3 vec ); + +/* + * Copy sign from one 3-D vector to another, per element + */ +static inline VmathSoaVector3 vmathSoaV3CopySignPerElem_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1 ); + +/* + * Maximum of two 3-D vectors per element + */ +static inline VmathSoaVector3 vmathSoaV3MaxPerElem_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1 ); + +/* + * Minimum of two 3-D vectors per element + */ +static inline VmathSoaVector3 vmathSoaV3MinPerElem_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1 ); + +/* + * Maximum element of a 3-D vector + */ +static inline vec_float4 vmathSoaV3MaxElem_V( VmathSoaVector3 vec ); + +/* + * Minimum element of a 3-D vector + */ +static inline vec_float4 vmathSoaV3MinElem_V( VmathSoaVector3 vec ); + +/* + * Compute the sum of all elements of a 3-D vector + */ +static inline vec_float4 vmathSoaV3Sum_V( VmathSoaVector3 vec ); + +/* + * Compute the dot product of two 3-D vectors + */ +static inline vec_float4 vmathSoaV3Dot_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1 ); + +/* + * Compute the square of the length of a 3-D vector + */ +static inline vec_float4 vmathSoaV3LengthSqr_V( VmathSoaVector3 vec ); + +/* + * Compute the length of a 3-D vector + */ +static inline vec_float4 vmathSoaV3Length_V( VmathSoaVector3 vec ); + +/* + * Normalize a 3-D vector + * NOTE: + * The result is unpredictable when all elements of vec are at or near zero. + */ +static inline VmathSoaVector3 vmathSoaV3Normalize_V( VmathSoaVector3 vec ); + +/* + * Compute cross product of two 3-D vectors + */ +static inline VmathSoaVector3 vmathSoaV3Cross_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1 ); + +/* + * Outer product of two 3-D vectors + */ +static inline VmathSoaMatrix3 vmathSoaV3Outer_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1 ); + +/* + * Pre-multiply a row vector by a 3x3 matrix + */ +static inline VmathSoaVector3 vmathSoaV3RowMul_V( VmathSoaVector3 vec, VmathSoaMatrix3 mat ); + +/* + * Cross-product matrix of a 3-D vector + */ +static inline VmathSoaMatrix3 vmathSoaV3CrossMatrix_V( VmathSoaVector3 vec ); + +/* + * Create cross-product matrix and multiply + * NOTE: + * Faster than separately creating a cross-product matrix and multiplying. + */ +static inline VmathSoaMatrix3 vmathSoaV3CrossMatrixMul_V( VmathSoaVector3 vec, VmathSoaMatrix3 mat ); + +/* + * Linear interpolation between two 3-D vectors + * NOTE: + * Does not clamp t between 0 and 1. + */ +static inline VmathSoaVector3 vmathSoaV3Lerp_V( vec_float4 t, VmathSoaVector3 vec0, VmathSoaVector3 vec1 ); + +/* + * Spherical linear interpolation between two 3-D vectors + * NOTE: + * The result is unpredictable if the vectors point in opposite directions. + * Does not clamp t between 0 and 1. + */ +static inline VmathSoaVector3 vmathSoaV3Slerp_V( vec_float4 t, VmathSoaVector3 unitVec0, VmathSoaVector3 unitVec1 ); + +/* + * Conditionally select between two 3-D vectors + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + */ +static inline VmathSoaVector3 vmathSoaV3Select_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1, vec_uint4 select1 ); + +/* + * Load four three-float 3-D vectors, stored in three quadwords + */ +static inline void vmathSoaV3LoadXYZArray_V( VmathSoaVector3 *vec, const vec_float4 *threeQuads ); + +/* + * Store four slots of an SoA 3-D vector in three quadwords + */ +static inline void vmathSoaV3StoreXYZArray_V( VmathSoaVector3 vec, vec_float4 *threeQuads ); + +/* + * Store eight slots of two SoA 3-D vectors as half-floats + */ +static inline void vmathSoaV3StoreHalfFloats_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1, vec_ushort8 *threeQuads ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 3-D vector + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaV3Print_V( VmathSoaVector3 vec ); + +/* + * Print a 3-D vector and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaV3Prints_V( VmathSoaVector3 vec, const char *name ); + +#endif + +/* + * Construct a 4-D vector from x, y, z, and w elements + */ +static inline VmathSoaVector4 vmathSoaV4MakeFromElems_V( vec_float4 x, vec_float4 y, vec_float4 z, vec_float4 w ); + +/* + * Construct a 4-D vector from a 3-D vector and a scalar + */ +static inline VmathSoaVector4 vmathSoaV4MakeFromV3Scalar_V( VmathSoaVector3 xyz, vec_float4 w ); + +/* + * Copy x, y, and z from a 3-D vector into a 4-D vector, and set w to 0 + */ +static inline VmathSoaVector4 vmathSoaV4MakeFromV3_V( VmathSoaVector3 vec ); + +/* + * Copy x, y, and z from a 3-D point into a 4-D vector, and set w to 1 + */ +static inline VmathSoaVector4 vmathSoaV4MakeFromP3_V( VmathSoaPoint3 pnt ); + +/* + * Copy elements from a quaternion into a 4-D vector + */ +static inline VmathSoaVector4 vmathSoaV4MakeFromQ_V( VmathSoaQuat quat ); + +/* + * Set all elements of a 4-D vector to the same scalar value + */ +static inline VmathSoaVector4 vmathSoaV4MakeFromScalar_V( vec_float4 scalar ); + +/* + * Replicate an AoS 4-D vector + */ +static inline VmathSoaVector4 vmathSoaV4MakeFromAos_V( VmathVector4 vec ); + +/* + * Insert four AoS 4-D vectors + */ +static inline VmathSoaVector4 vmathSoaV4MakeFrom4Aos_V( VmathVector4 vec0, VmathVector4 vec1, VmathVector4 vec2, VmathVector4 vec3 ); + +/* + * Extract four AoS 4-D vectors + */ +static inline void vmathSoaV4Get4Aos_V( VmathSoaVector4 vec, VmathVector4 *result0, VmathVector4 *result1, VmathVector4 *result2, VmathVector4 *result3 ); + +/* + * Set the x, y, and z elements of a 4-D vector + * NOTE: + * This function does not change the w element. + */ +static inline void vmathSoaV4SetXYZ_V( VmathSoaVector4 *result, VmathSoaVector3 vec ); + +/* + * Get the x, y, and z elements of a 4-D vector + */ +static inline VmathSoaVector3 vmathSoaV4GetXYZ_V( VmathSoaVector4 vec ); + +/* + * Set the x element of a 4-D vector + */ +static inline void vmathSoaV4SetX_V( VmathSoaVector4 *result, vec_float4 x ); + +/* + * Set the y element of a 4-D vector + */ +static inline void vmathSoaV4SetY_V( VmathSoaVector4 *result, vec_float4 y ); + +/* + * Set the z element of a 4-D vector + */ +static inline void vmathSoaV4SetZ_V( VmathSoaVector4 *result, vec_float4 z ); + +/* + * Set the w element of a 4-D vector + */ +static inline void vmathSoaV4SetW_V( VmathSoaVector4 *result, vec_float4 w ); + +/* + * Get the x element of a 4-D vector + */ +static inline vec_float4 vmathSoaV4GetX_V( VmathSoaVector4 vec ); + +/* + * Get the y element of a 4-D vector + */ +static inline vec_float4 vmathSoaV4GetY_V( VmathSoaVector4 vec ); + +/* + * Get the z element of a 4-D vector + */ +static inline vec_float4 vmathSoaV4GetZ_V( VmathSoaVector4 vec ); + +/* + * Get the w element of a 4-D vector + */ +static inline vec_float4 vmathSoaV4GetW_V( VmathSoaVector4 vec ); + +/* + * Set an x, y, z, or w element of a 4-D vector by index + */ +static inline void vmathSoaV4SetElem_V( VmathSoaVector4 *result, int idx, vec_float4 value ); + +/* + * Get an x, y, z, or w element of a 4-D vector by index + */ +static inline vec_float4 vmathSoaV4GetElem_V( VmathSoaVector4 vec, int idx ); + +/* + * Add two 4-D vectors + */ +static inline VmathSoaVector4 vmathSoaV4Add_V( VmathSoaVector4 vec0, VmathSoaVector4 vec1 ); + +/* + * Subtract a 4-D vector from another 4-D vector + */ +static inline VmathSoaVector4 vmathSoaV4Sub_V( VmathSoaVector4 vec0, VmathSoaVector4 vec1 ); + +/* + * Multiply a 4-D vector by a scalar + */ +static inline VmathSoaVector4 vmathSoaV4ScalarMul_V( VmathSoaVector4 vec, vec_float4 scalar ); + +/* + * Divide a 4-D vector by a scalar + */ +static inline VmathSoaVector4 vmathSoaV4ScalarDiv_V( VmathSoaVector4 vec, vec_float4 scalar ); + +/* + * Negate all elements of a 4-D vector + */ +static inline VmathSoaVector4 vmathSoaV4Neg_V( VmathSoaVector4 vec ); + +/* + * Construct x axis + */ +static inline VmathSoaVector4 vmathSoaV4MakeXAxis_V( ); + +/* + * Construct y axis + */ +static inline VmathSoaVector4 vmathSoaV4MakeYAxis_V( ); + +/* + * Construct z axis + */ +static inline VmathSoaVector4 vmathSoaV4MakeZAxis_V( ); + +/* + * Construct w axis + */ +static inline VmathSoaVector4 vmathSoaV4MakeWAxis_V( ); + +/* + * Multiply two 4-D vectors per element + */ +static inline VmathSoaVector4 vmathSoaV4MulPerElem_V( VmathSoaVector4 vec0, VmathSoaVector4 vec1 ); + +/* + * Divide two 4-D vectors per element + * NOTE: + * Floating-point behavior matches standard library function divf4. + */ +static inline VmathSoaVector4 vmathSoaV4DivPerElem_V( VmathSoaVector4 vec0, VmathSoaVector4 vec1 ); + +/* + * Compute the reciprocal of a 4-D vector per element + * NOTE: + * Floating-point behavior matches standard library function recipf4. + */ +static inline VmathSoaVector4 vmathSoaV4RecipPerElem_V( VmathSoaVector4 vec ); + +/* + * Compute the square root of a 4-D vector per element + * NOTE: + * Floating-point behavior matches standard library function sqrtf4. + */ +static inline VmathSoaVector4 vmathSoaV4SqrtPerElem_V( VmathSoaVector4 vec ); + +/* + * Compute the reciprocal square root of a 4-D vector per element + * NOTE: + * Floating-point behavior matches standard library function rsqrtf4. + */ +static inline VmathSoaVector4 vmathSoaV4RsqrtPerElem_V( VmathSoaVector4 vec ); + +/* + * Compute the absolute value of a 4-D vector per element + */ +static inline VmathSoaVector4 vmathSoaV4AbsPerElem_V( VmathSoaVector4 vec ); + +/* + * Copy sign from one 4-D vector to another, per element + */ +static inline VmathSoaVector4 vmathSoaV4CopySignPerElem_V( VmathSoaVector4 vec0, VmathSoaVector4 vec1 ); + +/* + * Maximum of two 4-D vectors per element + */ +static inline VmathSoaVector4 vmathSoaV4MaxPerElem_V( VmathSoaVector4 vec0, VmathSoaVector4 vec1 ); + +/* + * Minimum of two 4-D vectors per element + */ +static inline VmathSoaVector4 vmathSoaV4MinPerElem_V( VmathSoaVector4 vec0, VmathSoaVector4 vec1 ); + +/* + * Maximum element of a 4-D vector + */ +static inline vec_float4 vmathSoaV4MaxElem_V( VmathSoaVector4 vec ); + +/* + * Minimum element of a 4-D vector + */ +static inline vec_float4 vmathSoaV4MinElem_V( VmathSoaVector4 vec ); + +/* + * Compute the sum of all elements of a 4-D vector + */ +static inline vec_float4 vmathSoaV4Sum_V( VmathSoaVector4 vec ); + +/* + * Compute the dot product of two 4-D vectors + */ +static inline vec_float4 vmathSoaV4Dot_V( VmathSoaVector4 vec0, VmathSoaVector4 vec1 ); + +/* + * Compute the square of the length of a 4-D vector + */ +static inline vec_float4 vmathSoaV4LengthSqr_V( VmathSoaVector4 vec ); + +/* + * Compute the length of a 4-D vector + */ +static inline vec_float4 vmathSoaV4Length_V( VmathSoaVector4 vec ); + +/* + * Normalize a 4-D vector + * NOTE: + * The result is unpredictable when all elements of vec are at or near zero. + */ +static inline VmathSoaVector4 vmathSoaV4Normalize_V( VmathSoaVector4 vec ); + +/* + * Outer product of two 4-D vectors + */ +static inline VmathSoaMatrix4 vmathSoaV4Outer_V( VmathSoaVector4 vec0, VmathSoaVector4 vec1 ); + +/* + * Linear interpolation between two 4-D vectors + * NOTE: + * Does not clamp t between 0 and 1. + */ +static inline VmathSoaVector4 vmathSoaV4Lerp_V( vec_float4 t, VmathSoaVector4 vec0, VmathSoaVector4 vec1 ); + +/* + * Spherical linear interpolation between two 4-D vectors + * NOTE: + * The result is unpredictable if the vectors point in opposite directions. + * Does not clamp t between 0 and 1. + */ +static inline VmathSoaVector4 vmathSoaV4Slerp_V( vec_float4 t, VmathSoaVector4 unitVec0, VmathSoaVector4 unitVec1 ); + +/* + * Conditionally select between two 4-D vectors + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + */ +static inline VmathSoaVector4 vmathSoaV4Select_V( VmathSoaVector4 vec0, VmathSoaVector4 vec1, vec_uint4 select1 ); + +/* + * Store four slots of an SoA 4-D vector as half-floats + */ +static inline void vmathSoaV4StoreHalfFloats_V( VmathSoaVector4 vec, vec_ushort8 *twoQuads ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 4-D vector + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaV4Print_V( VmathSoaVector4 vec ); + +/* + * Print a 4-D vector and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaV4Prints_V( VmathSoaVector4 vec, const char *name ); + +#endif + +/* + * Construct a 3-D point from x, y, and z elements + */ +static inline VmathSoaPoint3 vmathSoaP3MakeFromElems_V( vec_float4 x, vec_float4 y, vec_float4 z ); + +/* + * Copy elements from a 3-D vector into a 3-D point + */ +static inline VmathSoaPoint3 vmathSoaP3MakeFromV3_V( VmathSoaVector3 vec ); + +/* + * Set all elements of a 3-D point to the same scalar value + */ +static inline VmathSoaPoint3 vmathSoaP3MakeFromScalar_V( vec_float4 scalar ); + +/* + * Replicate an AoS 3-D point + */ +static inline VmathSoaPoint3 vmathSoaP3MakeFromAos_V( VmathPoint3 pnt ); + +/* + * Insert four AoS 3-D points + */ +static inline VmathSoaPoint3 vmathSoaP3MakeFrom4Aos_V( VmathPoint3 pnt0, VmathPoint3 pnt1, VmathPoint3 pnt2, VmathPoint3 pnt3 ); + +/* + * Extract four AoS 3-D points + */ +static inline void vmathSoaP3Get4Aos_V( VmathSoaPoint3 pnt, VmathPoint3 *result0, VmathPoint3 *result1, VmathPoint3 *result2, VmathPoint3 *result3 ); + +/* + * Set the x element of a 3-D point + */ +static inline void vmathSoaP3SetX_V( VmathSoaPoint3 *result, vec_float4 x ); + +/* + * Set the y element of a 3-D point + */ +static inline void vmathSoaP3SetY_V( VmathSoaPoint3 *result, vec_float4 y ); + +/* + * Set the z element of a 3-D point + */ +static inline void vmathSoaP3SetZ_V( VmathSoaPoint3 *result, vec_float4 z ); + +/* + * Get the x element of a 3-D point + */ +static inline vec_float4 vmathSoaP3GetX_V( VmathSoaPoint3 pnt ); + +/* + * Get the y element of a 3-D point + */ +static inline vec_float4 vmathSoaP3GetY_V( VmathSoaPoint3 pnt ); + +/* + * Get the z element of a 3-D point + */ +static inline vec_float4 vmathSoaP3GetZ_V( VmathSoaPoint3 pnt ); + +/* + * Set an x, y, or z element of a 3-D point by index + */ +static inline void vmathSoaP3SetElem_V( VmathSoaPoint3 *result, int idx, vec_float4 value ); + +/* + * Get an x, y, or z element of a 3-D point by index + */ +static inline vec_float4 vmathSoaP3GetElem_V( VmathSoaPoint3 pnt, int idx ); + +/* + * Subtract a 3-D point from another 3-D point + */ +static inline VmathSoaVector3 vmathSoaP3Sub_V( VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1 ); + +/* + * Add a 3-D point to a 3-D vector + */ +static inline VmathSoaPoint3 vmathSoaP3AddV3_V( VmathSoaPoint3 pnt, VmathSoaVector3 vec ); + +/* + * Subtract a 3-D vector from a 3-D point + */ +static inline VmathSoaPoint3 vmathSoaP3SubV3_V( VmathSoaPoint3 pnt, VmathSoaVector3 vec ); + +/* + * Multiply two 3-D points per element + */ +static inline VmathSoaPoint3 vmathSoaP3MulPerElem_V( VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1 ); + +/* + * Divide two 3-D points per element + * NOTE: + * Floating-point behavior matches standard library function divf4. + */ +static inline VmathSoaPoint3 vmathSoaP3DivPerElem_V( VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1 ); + +/* + * Compute the reciprocal of a 3-D point per element + * NOTE: + * Floating-point behavior matches standard library function recipf4. + */ +static inline VmathSoaPoint3 vmathSoaP3RecipPerElem_V( VmathSoaPoint3 pnt ); + +/* + * Compute the square root of a 3-D point per element + * NOTE: + * Floating-point behavior matches standard library function sqrtf4. + */ +static inline VmathSoaPoint3 vmathSoaP3SqrtPerElem_V( VmathSoaPoint3 pnt ); + +/* + * Compute the reciprocal square root of a 3-D point per element + * NOTE: + * Floating-point behavior matches standard library function rsqrtf4. + */ +static inline VmathSoaPoint3 vmathSoaP3RsqrtPerElem_V( VmathSoaPoint3 pnt ); + +/* + * Compute the absolute value of a 3-D point per element + */ +static inline VmathSoaPoint3 vmathSoaP3AbsPerElem_V( VmathSoaPoint3 pnt ); + +/* + * Copy sign from one 3-D point to another, per element + */ +static inline VmathSoaPoint3 vmathSoaP3CopySignPerElem_V( VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1 ); + +/* + * Maximum of two 3-D points per element + */ +static inline VmathSoaPoint3 vmathSoaP3MaxPerElem_V( VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1 ); + +/* + * Minimum of two 3-D points per element + */ +static inline VmathSoaPoint3 vmathSoaP3MinPerElem_V( VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1 ); + +/* + * Maximum element of a 3-D point + */ +static inline vec_float4 vmathSoaP3MaxElem_V( VmathSoaPoint3 pnt ); + +/* + * Minimum element of a 3-D point + */ +static inline vec_float4 vmathSoaP3MinElem_V( VmathSoaPoint3 pnt ); + +/* + * Compute the sum of all elements of a 3-D point + */ +static inline vec_float4 vmathSoaP3Sum_V( VmathSoaPoint3 pnt ); + +/* + * Apply uniform scale to a 3-D point + */ +static inline VmathSoaPoint3 vmathSoaP3Scale_V( VmathSoaPoint3 pnt, vec_float4 scaleVal ); + +/* + * Apply non-uniform scale to a 3-D point + */ +static inline VmathSoaPoint3 vmathSoaP3NonUniformScale_V( VmathSoaPoint3 pnt, VmathSoaVector3 scaleVec ); + +/* + * Scalar projection of a 3-D point on a unit-length 3-D vector + */ +static inline vec_float4 vmathSoaP3Projection_V( VmathSoaPoint3 pnt, VmathSoaVector3 unitVec ); + +/* + * Compute the square of the distance of a 3-D point from the coordinate-system origin + */ +static inline vec_float4 vmathSoaP3DistSqrFromOrigin_V( VmathSoaPoint3 pnt ); + +/* + * Compute the distance of a 3-D point from the coordinate-system origin + */ +static inline vec_float4 vmathSoaP3DistFromOrigin_V( VmathSoaPoint3 pnt ); + +/* + * Compute the square of the distance between two 3-D points + */ +static inline vec_float4 vmathSoaP3DistSqr_V( VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1 ); + +/* + * Compute the distance between two 3-D points + */ +static inline vec_float4 vmathSoaP3Dist_V( VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1 ); + +/* + * Linear interpolation between two 3-D points + * NOTE: + * Does not clamp t between 0 and 1. + */ +static inline VmathSoaPoint3 vmathSoaP3Lerp_V( vec_float4 t, VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1 ); + +/* + * Conditionally select between two 3-D points + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + */ +static inline VmathSoaPoint3 vmathSoaP3Select_V( VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1, vec_uint4 select1 ); + +/* + * Load four three-float 3-D points, stored in three quadwords + */ +static inline void vmathSoaP3LoadXYZArray_V( VmathSoaPoint3 *pnt, const vec_float4 *threeQuads ); + +/* + * Store four slots of an SoA 3-D point in three quadwords + */ +static inline void vmathSoaP3StoreXYZArray_V( VmathSoaPoint3 pnt, vec_float4 *threeQuads ); + +/* + * Store eight slots of two SoA 3-D points as half-floats + */ +static inline void vmathSoaP3StoreHalfFloats_V( VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1, vec_ushort8 *threeQuads ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 3-D point + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaP3Print_V( VmathSoaPoint3 pnt ); + +/* + * Print a 3-D point and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaP3Prints_V( VmathSoaPoint3 pnt, const char *name ); + +#endif + +/* + * Construct a quaternion from x, y, z, and w elements + */ +static inline VmathSoaQuat vmathSoaQMakeFromElems_V( vec_float4 x, vec_float4 y, vec_float4 z, vec_float4 w ); + +/* + * Construct a quaternion from a 3-D vector and a scalar + */ +static inline VmathSoaQuat vmathSoaQMakeFromV3Scalar_V( VmathSoaVector3 xyz, vec_float4 w ); + +/* + * Copy elements from a 4-D vector into a quaternion + */ +static inline VmathSoaQuat vmathSoaQMakeFromV4_V( VmathSoaVector4 vec ); + +/* + * Convert a rotation matrix to a unit-length quaternion + */ +static inline VmathSoaQuat vmathSoaQMakeFromM3_V( VmathSoaMatrix3 rotMat ); + +/* + * Set all elements of a quaternion to the same scalar value + */ +static inline VmathSoaQuat vmathSoaQMakeFromScalar_V( vec_float4 scalar ); + +/* + * Replicate an AoS quaternion + */ +static inline VmathSoaQuat vmathSoaQMakeFromAos_V( VmathQuat quat ); + +/* + * Insert four AoS quaternions + */ +static inline VmathSoaQuat vmathSoaQMakeFrom4Aos_V( VmathQuat quat0, VmathQuat quat1, VmathQuat quat2, VmathQuat quat3 ); + +/* + * Extract four AoS quaternions + */ +static inline void vmathSoaQGet4Aos_V( VmathSoaQuat quat, VmathQuat *result0, VmathQuat *result1, VmathQuat *result2, VmathQuat *result3 ); + +/* + * Set the x, y, and z elements of a quaternion + * NOTE: + * This function does not change the w element. + */ +static inline void vmathSoaQSetXYZ_V( VmathSoaQuat *result, VmathSoaVector3 vec ); + +/* + * Get the x, y, and z elements of a quaternion + */ +static inline VmathSoaVector3 vmathSoaQGetXYZ_V( VmathSoaQuat quat ); + +/* + * Set the x element of a quaternion + */ +static inline void vmathSoaQSetX_V( VmathSoaQuat *result, vec_float4 x ); + +/* + * Set the y element of a quaternion + */ +static inline void vmathSoaQSetY_V( VmathSoaQuat *result, vec_float4 y ); + +/* + * Set the z element of a quaternion + */ +static inline void vmathSoaQSetZ_V( VmathSoaQuat *result, vec_float4 z ); + +/* + * Set the w element of a quaternion + */ +static inline void vmathSoaQSetW_V( VmathSoaQuat *result, vec_float4 w ); + +/* + * Get the x element of a quaternion + */ +static inline vec_float4 vmathSoaQGetX_V( VmathSoaQuat quat ); + +/* + * Get the y element of a quaternion + */ +static inline vec_float4 vmathSoaQGetY_V( VmathSoaQuat quat ); + +/* + * Get the z element of a quaternion + */ +static inline vec_float4 vmathSoaQGetZ_V( VmathSoaQuat quat ); + +/* + * Get the w element of a quaternion + */ +static inline vec_float4 vmathSoaQGetW_V( VmathSoaQuat quat ); + +/* + * Set an x, y, z, or w element of a quaternion by index + */ +static inline void vmathSoaQSetElem_V( VmathSoaQuat *result, int idx, vec_float4 value ); + +/* + * Get an x, y, z, or w element of a quaternion by index + */ +static inline vec_float4 vmathSoaQGetElem_V( VmathSoaQuat quat, int idx ); + +/* + * Add two quaternions + */ +static inline VmathSoaQuat vmathSoaQAdd_V( VmathSoaQuat quat0, VmathSoaQuat quat1 ); + +/* + * Subtract a quaternion from another quaternion + */ +static inline VmathSoaQuat vmathSoaQSub_V( VmathSoaQuat quat0, VmathSoaQuat quat1 ); + +/* + * Multiply two quaternions + */ +static inline VmathSoaQuat vmathSoaQMul_V( VmathSoaQuat quat0, VmathSoaQuat quat1 ); + +/* + * Multiply a quaternion by a scalar + */ +static inline VmathSoaQuat vmathSoaQScalarMul_V( VmathSoaQuat quat, vec_float4 scalar ); + +/* + * Divide a quaternion by a scalar + */ +static inline VmathSoaQuat vmathSoaQScalarDiv_V( VmathSoaQuat quat, vec_float4 scalar ); + +/* + * Negate all elements of a quaternion + */ +static inline VmathSoaQuat vmathSoaQNeg_V( VmathSoaQuat quat ); + +/* + * Construct an identity quaternion + */ +static inline VmathSoaQuat vmathSoaQMakeIdentity_V( ); + +/* + * Construct a quaternion to rotate between two unit-length 3-D vectors + * NOTE: + * The result is unpredictable if unitVec0 and unitVec1 point in opposite directions. + */ +static inline VmathSoaQuat vmathSoaQMakeRotationArc_V( VmathSoaVector3 unitVec0, VmathSoaVector3 unitVec1 ); + +/* + * Construct a quaternion to rotate around a unit-length 3-D vector + */ +static inline VmathSoaQuat vmathSoaQMakeRotationAxis_V( vec_float4 radians, VmathSoaVector3 unitVec ); + +/* + * Construct a quaternion to rotate around the x axis + */ +static inline VmathSoaQuat vmathSoaQMakeRotationX_V( vec_float4 radians ); + +/* + * Construct a quaternion to rotate around the y axis + */ +static inline VmathSoaQuat vmathSoaQMakeRotationY_V( vec_float4 radians ); + +/* + * Construct a quaternion to rotate around the z axis + */ +static inline VmathSoaQuat vmathSoaQMakeRotationZ_V( vec_float4 radians ); + +/* + * Compute the conjugate of a quaternion + */ +static inline VmathSoaQuat vmathSoaQConj_V( VmathSoaQuat quat ); + +/* + * Use a unit-length quaternion to rotate a 3-D vector + */ +static inline VmathSoaVector3 vmathSoaQRotate_V( VmathSoaQuat unitQuat, VmathSoaVector3 vec ); + +/* + * Compute the dot product of two quaternions + */ +static inline vec_float4 vmathSoaQDot_V( VmathSoaQuat quat0, VmathSoaQuat quat1 ); + +/* + * Compute the norm of a quaternion + */ +static inline vec_float4 vmathSoaQNorm_V( VmathSoaQuat quat ); + +/* + * Compute the length of a quaternion + */ +static inline vec_float4 vmathSoaQLength_V( VmathSoaQuat quat ); + +/* + * Normalize a quaternion + * NOTE: + * The result is unpredictable when all elements of quat are at or near zero. + */ +static inline VmathSoaQuat vmathSoaQNormalize_V( VmathSoaQuat quat ); + +/* + * Linear interpolation between two quaternions + * NOTE: + * Does not clamp t between 0 and 1. + */ +static inline VmathSoaQuat vmathSoaQLerp_V( vec_float4 t, VmathSoaQuat quat0, VmathSoaQuat quat1 ); + +/* + * Spherical linear interpolation between two quaternions + * NOTE: + * Interpolates along the shortest path between orientations. + * Does not clamp t between 0 and 1. + */ +static inline VmathSoaQuat vmathSoaQSlerp_V( vec_float4 t, VmathSoaQuat unitQuat0, VmathSoaQuat unitQuat1 ); + +/* + * Spherical quadrangle interpolation + */ +static inline VmathSoaQuat vmathSoaQSquad_V( vec_float4 t, VmathSoaQuat unitQuat0, VmathSoaQuat unitQuat1, VmathSoaQuat unitQuat2, VmathSoaQuat unitQuat3 ); + +/* + * Conditionally select between two quaternions + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + */ +static inline VmathSoaQuat vmathSoaQSelect_V( VmathSoaQuat quat0, VmathSoaQuat quat1, vec_uint4 select1 ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a quaternion + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaQPrint_V( VmathSoaQuat quat ); + +/* + * Print a quaternion and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaQPrints_V( VmathSoaQuat quat, const char *name ); + +#endif + +/* + * Construct a 3x3 matrix containing the specified columns + */ +static inline VmathSoaMatrix3 vmathSoaM3MakeFromCols_V( VmathSoaVector3 col0, VmathSoaVector3 col1, VmathSoaVector3 col2 ); + +/* + * Construct a 3x3 rotation matrix from a unit-length quaternion + */ +static inline VmathSoaMatrix3 vmathSoaM3MakeFromQ_V( VmathSoaQuat unitQuat ); + +/* + * Set all elements of a 3x3 matrix to the same scalar value + */ +static inline VmathSoaMatrix3 vmathSoaM3MakeFromScalar_V( vec_float4 scalar ); + +/* + * Replicate an AoS 3x3 matrix + */ +static inline VmathSoaMatrix3 vmathSoaM3MakeFromAos_V( VmathMatrix3 mat ); + +/* + * Insert four AoS 3x3 matrices + */ +static inline VmathSoaMatrix3 vmathSoaM3MakeFrom4Aos_V( VmathMatrix3 mat0, VmathMatrix3 mat1, VmathMatrix3 mat2, VmathMatrix3 mat3 ); + +/* + * Extract four AoS 3x3 matrices + */ +static inline void vmathSoaM3Get4Aos_V( VmathSoaMatrix3 mat, VmathMatrix3 *result0, VmathMatrix3 *result1, VmathMatrix3 *result2, VmathMatrix3 *result3 ); + +/* + * Set column 0 of a 3x3 matrix + */ +static inline void vmathSoaM3SetCol0_V( VmathSoaMatrix3 *result, VmathSoaVector3 col0 ); + +/* + * Set column 1 of a 3x3 matrix + */ +static inline void vmathSoaM3SetCol1_V( VmathSoaMatrix3 *result, VmathSoaVector3 col1 ); + +/* + * Set column 2 of a 3x3 matrix + */ +static inline void vmathSoaM3SetCol2_V( VmathSoaMatrix3 *result, VmathSoaVector3 col2 ); + +/* + * Get column 0 of a 3x3 matrix + */ +static inline VmathSoaVector3 vmathSoaM3GetCol0_V( VmathSoaMatrix3 mat ); + +/* + * Get column 1 of a 3x3 matrix + */ +static inline VmathSoaVector3 vmathSoaM3GetCol1_V( VmathSoaMatrix3 mat ); + +/* + * Get column 2 of a 3x3 matrix + */ +static inline VmathSoaVector3 vmathSoaM3GetCol2_V( VmathSoaMatrix3 mat ); + +/* + * Set the column of a 3x3 matrix referred to by the specified index + */ +static inline void vmathSoaM3SetCol_V( VmathSoaMatrix3 *result, int col, VmathSoaVector3 vec ); + +/* + * Set the row of a 3x3 matrix referred to by the specified index + */ +static inline void vmathSoaM3SetRow_V( VmathSoaMatrix3 *result, int row, VmathSoaVector3 vec ); + +/* + * Get the column of a 3x3 matrix referred to by the specified index + */ +static inline VmathSoaVector3 vmathSoaM3GetCol_V( VmathSoaMatrix3 mat, int col ); + +/* + * Get the row of a 3x3 matrix referred to by the specified index + */ +static inline VmathSoaVector3 vmathSoaM3GetRow_V( VmathSoaMatrix3 mat, int row ); + +/* + * Set the element of a 3x3 matrix referred to by column and row indices + */ +static inline void vmathSoaM3SetElem_V( VmathSoaMatrix3 *result, int col, int row, vec_float4 val ); + +/* + * Get the element of a 3x3 matrix referred to by column and row indices + */ +static inline vec_float4 vmathSoaM3GetElem_V( VmathSoaMatrix3 mat, int col, int row ); + +/* + * Add two 3x3 matrices + */ +static inline VmathSoaMatrix3 vmathSoaM3Add_V( VmathSoaMatrix3 mat0, VmathSoaMatrix3 mat1 ); + +/* + * Subtract a 3x3 matrix from another 3x3 matrix + */ +static inline VmathSoaMatrix3 vmathSoaM3Sub_V( VmathSoaMatrix3 mat0, VmathSoaMatrix3 mat1 ); + +/* + * Negate all elements of a 3x3 matrix + */ +static inline VmathSoaMatrix3 vmathSoaM3Neg_V( VmathSoaMatrix3 mat ); + +/* + * Multiply a 3x3 matrix by a scalar + */ +static inline VmathSoaMatrix3 vmathSoaM3ScalarMul_V( VmathSoaMatrix3 mat, vec_float4 scalar ); + +/* + * Multiply a 3x3 matrix by a 3-D vector + */ +static inline VmathSoaVector3 vmathSoaM3MulV3_V( VmathSoaMatrix3 mat, VmathSoaVector3 vec ); + +/* + * Multiply two 3x3 matrices + */ +static inline VmathSoaMatrix3 vmathSoaM3Mul_V( VmathSoaMatrix3 mat0, VmathSoaMatrix3 mat1 ); + +/* + * Construct an identity 3x3 matrix + */ +static inline VmathSoaMatrix3 vmathSoaM3MakeIdentity_V( ); + +/* + * Construct a 3x3 matrix to rotate around the x axis + */ +static inline VmathSoaMatrix3 vmathSoaM3MakeRotationX_V( vec_float4 radians ); + +/* + * Construct a 3x3 matrix to rotate around the y axis + */ +static inline VmathSoaMatrix3 vmathSoaM3MakeRotationY_V( vec_float4 radians ); + +/* + * Construct a 3x3 matrix to rotate around the z axis + */ +static inline VmathSoaMatrix3 vmathSoaM3MakeRotationZ_V( vec_float4 radians ); + +/* + * Construct a 3x3 matrix to rotate around the x, y, and z axes + */ +static inline VmathSoaMatrix3 vmathSoaM3MakeRotationZYX_V( VmathSoaVector3 radiansXYZ ); + +/* + * Construct a 3x3 matrix to rotate around a unit-length 3-D vector + */ +static inline VmathSoaMatrix3 vmathSoaM3MakeRotationAxis_V( vec_float4 radians, VmathSoaVector3 unitVec ); + +/* + * Construct a rotation matrix from a unit-length quaternion + */ +static inline VmathSoaMatrix3 vmathSoaM3MakeRotationQ_V( VmathSoaQuat unitQuat ); + +/* + * Construct a 3x3 matrix to perform scaling + */ +static inline VmathSoaMatrix3 vmathSoaM3MakeScale_V( VmathSoaVector3 scaleVec ); + +/* + * Append (post-multiply) a scale transformation to a 3x3 matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline VmathSoaMatrix3 vmathSoaM3AppendScale_V( VmathSoaMatrix3 mat, VmathSoaVector3 scaleVec ); + +/* + * Prepend (pre-multiply) a scale transformation to a 3x3 matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline VmathSoaMatrix3 vmathSoaM3PrependScale_V( VmathSoaVector3 scaleVec, VmathSoaMatrix3 mat ); + +/* + * Multiply two 3x3 matrices per element + */ +static inline VmathSoaMatrix3 vmathSoaM3MulPerElem_V( VmathSoaMatrix3 mat0, VmathSoaMatrix3 mat1 ); + +/* + * Compute the absolute value of a 3x3 matrix per element + */ +static inline VmathSoaMatrix3 vmathSoaM3AbsPerElem_V( VmathSoaMatrix3 mat ); + +/* + * Transpose of a 3x3 matrix + */ +static inline VmathSoaMatrix3 vmathSoaM3Transpose_V( VmathSoaMatrix3 mat ); + +/* + * Compute the inverse of a 3x3 matrix + * NOTE: + * Result is unpredictable when the determinant of mat is equal to or near 0. + */ +static inline VmathSoaMatrix3 vmathSoaM3Inverse_V( VmathSoaMatrix3 mat ); + +/* + * Determinant of a 3x3 matrix + */ +static inline vec_float4 vmathSoaM3Determinant_V( VmathSoaMatrix3 mat ); + +/* + * Conditionally select between two 3x3 matrices + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + */ +static inline VmathSoaMatrix3 vmathSoaM3Select_V( VmathSoaMatrix3 mat0, VmathSoaMatrix3 mat1, vec_uint4 select1 ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 3x3 matrix + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaM3Print_V( VmathSoaMatrix3 mat ); + +/* + * Print a 3x3 matrix and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaM3Prints_V( VmathSoaMatrix3 mat, const char *name ); + +#endif + +/* + * Construct a 4x4 matrix containing the specified columns + */ +static inline VmathSoaMatrix4 vmathSoaM4MakeFromCols_V( VmathSoaVector4 col0, VmathSoaVector4 col1, VmathSoaVector4 col2, VmathSoaVector4 col3 ); + +/* + * Construct a 4x4 matrix from a 3x4 transformation matrix + */ +static inline VmathSoaMatrix4 vmathSoaM4MakeFromT3_V( VmathSoaTransform3 mat ); + +/* + * Construct a 4x4 matrix from a 3x3 matrix and a 3-D vector + */ +static inline VmathSoaMatrix4 vmathSoaM4MakeFromM3V3_V( VmathSoaMatrix3 mat, VmathSoaVector3 translateVec ); + +/* + * Construct a 4x4 matrix from a unit-length quaternion and a 3-D vector + */ +static inline VmathSoaMatrix4 vmathSoaM4MakeFromQV3_V( VmathSoaQuat unitQuat, VmathSoaVector3 translateVec ); + +/* + * Set all elements of a 4x4 matrix to the same scalar value + */ +static inline VmathSoaMatrix4 vmathSoaM4MakeFromScalar_V( vec_float4 scalar ); + +/* + * Replicate an AoS 4x4 matrix + */ +static inline VmathSoaMatrix4 vmathSoaM4MakeFromAos_V( VmathMatrix4 mat ); + +/* + * Insert four AoS 4x4 matrices + */ +static inline VmathSoaMatrix4 vmathSoaM4MakeFrom4Aos_V( VmathMatrix4 mat0, VmathMatrix4 mat1, VmathMatrix4 mat2, VmathMatrix4 mat3 ); + +/* + * Extract four AoS 4x4 matrices + */ +static inline void vmathSoaM4Get4Aos_V( VmathSoaMatrix4 mat, VmathMatrix4 *result0, VmathMatrix4 *result1, VmathMatrix4 *result2, VmathMatrix4 *result3 ); + +/* + * Set the upper-left 3x3 submatrix + * NOTE: + * This function does not change the bottom row elements. + */ +static inline void vmathSoaM4SetUpper3x3_V( VmathSoaMatrix4 *result, VmathSoaMatrix3 mat3 ); + +/* + * Get the upper-left 3x3 submatrix of a 4x4 matrix + */ +static inline VmathSoaMatrix3 vmathSoaM4GetUpper3x3_V( VmathSoaMatrix4 mat ); + +/* + * Set translation component + * NOTE: + * This function does not change the bottom row elements. + */ +static inline void vmathSoaM4SetTranslation_V( VmathSoaMatrix4 *result, VmathSoaVector3 translateVec ); + +/* + * Get the translation component of a 4x4 matrix + */ +static inline VmathSoaVector3 vmathSoaM4GetTranslation_V( VmathSoaMatrix4 mat ); + +/* + * Set column 0 of a 4x4 matrix + */ +static inline void vmathSoaM4SetCol0_V( VmathSoaMatrix4 *result, VmathSoaVector4 col0 ); + +/* + * Set column 1 of a 4x4 matrix + */ +static inline void vmathSoaM4SetCol1_V( VmathSoaMatrix4 *result, VmathSoaVector4 col1 ); + +/* + * Set column 2 of a 4x4 matrix + */ +static inline void vmathSoaM4SetCol2_V( VmathSoaMatrix4 *result, VmathSoaVector4 col2 ); + +/* + * Set column 3 of a 4x4 matrix + */ +static inline void vmathSoaM4SetCol3_V( VmathSoaMatrix4 *result, VmathSoaVector4 col3 ); + +/* + * Get column 0 of a 4x4 matrix + */ +static inline VmathSoaVector4 vmathSoaM4GetCol0_V( VmathSoaMatrix4 mat ); + +/* + * Get column 1 of a 4x4 matrix + */ +static inline VmathSoaVector4 vmathSoaM4GetCol1_V( VmathSoaMatrix4 mat ); + +/* + * Get column 2 of a 4x4 matrix + */ +static inline VmathSoaVector4 vmathSoaM4GetCol2_V( VmathSoaMatrix4 mat ); + +/* + * Get column 3 of a 4x4 matrix + */ +static inline VmathSoaVector4 vmathSoaM4GetCol3_V( VmathSoaMatrix4 mat ); + +/* + * Set the column of a 4x4 matrix referred to by the specified index + */ +static inline void vmathSoaM4SetCol_V( VmathSoaMatrix4 *result, int col, VmathSoaVector4 vec ); + +/* + * Set the row of a 4x4 matrix referred to by the specified index + */ +static inline void vmathSoaM4SetRow_V( VmathSoaMatrix4 *result, int row, VmathSoaVector4 vec ); + +/* + * Get the column of a 4x4 matrix referred to by the specified index + */ +static inline VmathSoaVector4 vmathSoaM4GetCol_V( VmathSoaMatrix4 mat, int col ); + +/* + * Get the row of a 4x4 matrix referred to by the specified index + */ +static inline VmathSoaVector4 vmathSoaM4GetRow_V( VmathSoaMatrix4 mat, int row ); + +/* + * Set the element of a 4x4 matrix referred to by column and row indices + */ +static inline void vmathSoaM4SetElem_V( VmathSoaMatrix4 *result, int col, int row, vec_float4 val ); + +/* + * Get the element of a 4x4 matrix referred to by column and row indices + */ +static inline vec_float4 vmathSoaM4GetElem_V( VmathSoaMatrix4 mat, int col, int row ); + +/* + * Add two 4x4 matrices + */ +static inline VmathSoaMatrix4 vmathSoaM4Add_V( VmathSoaMatrix4 mat0, VmathSoaMatrix4 mat1 ); + +/* + * Subtract a 4x4 matrix from another 4x4 matrix + */ +static inline VmathSoaMatrix4 vmathSoaM4Sub_V( VmathSoaMatrix4 mat0, VmathSoaMatrix4 mat1 ); + +/* + * Negate all elements of a 4x4 matrix + */ +static inline VmathSoaMatrix4 vmathSoaM4Neg_V( VmathSoaMatrix4 mat ); + +/* + * Multiply a 4x4 matrix by a scalar + */ +static inline VmathSoaMatrix4 vmathSoaM4ScalarMul_V( VmathSoaMatrix4 mat, vec_float4 scalar ); + +/* + * Multiply a 4x4 matrix by a 4-D vector + */ +static inline VmathSoaVector4 vmathSoaM4MulV4_V( VmathSoaMatrix4 mat, VmathSoaVector4 vec ); + +/* + * Multiply a 4x4 matrix by a 3-D vector + */ +static inline VmathSoaVector4 vmathSoaM4MulV3_V( VmathSoaMatrix4 mat, VmathSoaVector3 vec ); + +/* + * Multiply a 4x4 matrix by a 3-D point + */ +static inline VmathSoaVector4 vmathSoaM4MulP3_V( VmathSoaMatrix4 mat, VmathSoaPoint3 pnt ); + +/* + * Multiply two 4x4 matrices + */ +static inline VmathSoaMatrix4 vmathSoaM4Mul_V( VmathSoaMatrix4 mat0, VmathSoaMatrix4 mat1 ); + +/* + * Multiply a 4x4 matrix by a 3x4 transformation matrix + */ +static inline VmathSoaMatrix4 vmathSoaM4MulT3_V( VmathSoaMatrix4 mat, VmathSoaTransform3 tfrm ); + +/* + * Construct an identity 4x4 matrix + */ +static inline VmathSoaMatrix4 vmathSoaM4MakeIdentity_V( ); + +/* + * Construct a 4x4 matrix to rotate around the x axis + */ +static inline VmathSoaMatrix4 vmathSoaM4MakeRotationX_V( vec_float4 radians ); + +/* + * Construct a 4x4 matrix to rotate around the y axis + */ +static inline VmathSoaMatrix4 vmathSoaM4MakeRotationY_V( vec_float4 radians ); + +/* + * Construct a 4x4 matrix to rotate around the z axis + */ +static inline VmathSoaMatrix4 vmathSoaM4MakeRotationZ_V( vec_float4 radians ); + +/* + * Construct a 4x4 matrix to rotate around the x, y, and z axes + */ +static inline VmathSoaMatrix4 vmathSoaM4MakeRotationZYX_V( VmathSoaVector3 radiansXYZ ); + +/* + * Construct a 4x4 matrix to rotate around a unit-length 3-D vector + */ +static inline VmathSoaMatrix4 vmathSoaM4MakeRotationAxis_V( vec_float4 radians, VmathSoaVector3 unitVec ); + +/* + * Construct a rotation matrix from a unit-length quaternion + */ +static inline VmathSoaMatrix4 vmathSoaM4MakeRotationQ_V( VmathSoaQuat unitQuat ); + +/* + * Construct a 4x4 matrix to perform scaling + */ +static inline VmathSoaMatrix4 vmathSoaM4MakeScale_V( VmathSoaVector3 scaleVec ); + +/* + * Construct a 4x4 matrix to perform translation + */ +static inline VmathSoaMatrix4 vmathSoaM4MakeTranslation_V( VmathSoaVector3 translateVec ); + +/* + * Construct viewing matrix based on eye position, position looked at, and up direction + */ +static inline VmathSoaMatrix4 vmathSoaM4MakeLookAt_V( VmathSoaPoint3 eyePos, VmathSoaPoint3 lookAtPos, VmathSoaVector3 upVec ); + +/* + * Construct a perspective projection matrix + */ +static inline VmathSoaMatrix4 vmathSoaM4MakePerspective_V( vec_float4 fovyRadians, vec_float4 aspect, vec_float4 zNear, vec_float4 zFar ); + +/* + * Construct a perspective projection matrix based on frustum + */ +static inline VmathSoaMatrix4 vmathSoaM4MakeFrustum_V( vec_float4 left, vec_float4 right, vec_float4 bottom, vec_float4 top, vec_float4 zNear, vec_float4 zFar ); + +/* + * Construct an orthographic projection matrix + */ +static inline VmathSoaMatrix4 vmathSoaM4MakeOrthographic_V( vec_float4 left, vec_float4 right, vec_float4 bottom, vec_float4 top, vec_float4 zNear, vec_float4 zFar ); + +/* + * Append (post-multiply) a scale transformation to a 4x4 matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline VmathSoaMatrix4 vmathSoaM4AppendScale_V( VmathSoaMatrix4 mat, VmathSoaVector3 scaleVec ); + +/* + * Prepend (pre-multiply) a scale transformation to a 4x4 matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline VmathSoaMatrix4 vmathSoaM4PrependScale_V( VmathSoaVector3 scaleVec, VmathSoaMatrix4 mat ); + +/* + * Multiply two 4x4 matrices per element + */ +static inline VmathSoaMatrix4 vmathSoaM4MulPerElem_V( VmathSoaMatrix4 mat0, VmathSoaMatrix4 mat1 ); + +/* + * Compute the absolute value of a 4x4 matrix per element + */ +static inline VmathSoaMatrix4 vmathSoaM4AbsPerElem_V( VmathSoaMatrix4 mat ); + +/* + * Transpose of a 4x4 matrix + */ +static inline VmathSoaMatrix4 vmathSoaM4Transpose_V( VmathSoaMatrix4 mat ); + +/* + * Compute the inverse of a 4x4 matrix + * NOTE: + * Result is unpredictable when the determinant of mat is equal to or near 0. + */ +static inline VmathSoaMatrix4 vmathSoaM4Inverse_V( VmathSoaMatrix4 mat ); + +/* + * Compute the inverse of a 4x4 matrix, which is expected to be an affine matrix + * NOTE: + * This can be used to achieve better performance than a general inverse when the specified 4x4 matrix meets the given restrictions. The result is unpredictable when the determinant of mat is equal to or near 0. + */ +static inline VmathSoaMatrix4 vmathSoaM4AffineInverse_V( VmathSoaMatrix4 mat ); + +/* + * Compute the inverse of a 4x4 matrix, which is expected to be an affine matrix with an orthogonal upper-left 3x3 submatrix + * NOTE: + * This can be used to achieve better performance than a general inverse when the specified 4x4 matrix meets the given restrictions. + */ +static inline VmathSoaMatrix4 vmathSoaM4OrthoInverse_V( VmathSoaMatrix4 mat ); + +/* + * Determinant of a 4x4 matrix + */ +static inline vec_float4 vmathSoaM4Determinant_V( VmathSoaMatrix4 mat ); + +/* + * Conditionally select between two 4x4 matrices + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + */ +static inline VmathSoaMatrix4 vmathSoaM4Select_V( VmathSoaMatrix4 mat0, VmathSoaMatrix4 mat1, vec_uint4 select1 ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 4x4 matrix + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaM4Print_V( VmathSoaMatrix4 mat ); + +/* + * Print a 4x4 matrix and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaM4Prints_V( VmathSoaMatrix4 mat, const char *name ); + +#endif + +/* + * Construct a 3x4 transformation matrix containing the specified columns + */ +static inline VmathSoaTransform3 vmathSoaT3MakeFromCols_V( VmathSoaVector3 col0, VmathSoaVector3 col1, VmathSoaVector3 col2, VmathSoaVector3 col3 ); + +/* + * Construct a 3x4 transformation matrix from a 3x3 matrix and a 3-D vector + */ +static inline VmathSoaTransform3 vmathSoaT3MakeFromM3V3_V( VmathSoaMatrix3 tfrm, VmathSoaVector3 translateVec ); + +/* + * Construct a 3x4 transformation matrix from a unit-length quaternion and a 3-D vector + */ +static inline VmathSoaTransform3 vmathSoaT3MakeFromQV3_V( VmathSoaQuat unitQuat, VmathSoaVector3 translateVec ); + +/* + * Set all elements of a 3x4 transformation matrix to the same scalar value + */ +static inline VmathSoaTransform3 vmathSoaT3MakeFromScalar_V( vec_float4 scalar ); + +/* + * Replicate an AoS 3x4 transformation matrix + */ +static inline VmathSoaTransform3 vmathSoaT3MakeFromAos_V( VmathTransform3 tfrm ); + +/* + * Insert four AoS 3x4 transformation matrices + */ +static inline VmathSoaTransform3 vmathSoaT3MakeFrom4Aos_V( VmathTransform3 tfrm0, VmathTransform3 tfrm1, VmathTransform3 tfrm2, VmathTransform3 tfrm3 ); + +/* + * Extract four AoS 3x4 transformation matrices + */ +static inline void vmathSoaT3Get4Aos_V( VmathSoaTransform3 tfrm, VmathTransform3 *result0, VmathTransform3 *result1, VmathTransform3 *result2, VmathTransform3 *result3 ); + +/* + * Set the upper-left 3x3 submatrix + */ +static inline void vmathSoaT3SetUpper3x3_V( VmathSoaTransform3 *result, VmathSoaMatrix3 mat3 ); + +/* + * Get the upper-left 3x3 submatrix of a 3x4 transformation matrix + */ +static inline VmathSoaMatrix3 vmathSoaT3GetUpper3x3_V( VmathSoaTransform3 tfrm ); + +/* + * Set translation component + */ +static inline void vmathSoaT3SetTranslation_V( VmathSoaTransform3 *result, VmathSoaVector3 translateVec ); + +/* + * Get the translation component of a 3x4 transformation matrix + */ +static inline VmathSoaVector3 vmathSoaT3GetTranslation_V( VmathSoaTransform3 tfrm ); + +/* + * Set column 0 of a 3x4 transformation matrix + */ +static inline void vmathSoaT3SetCol0_V( VmathSoaTransform3 *result, VmathSoaVector3 col0 ); + +/* + * Set column 1 of a 3x4 transformation matrix + */ +static inline void vmathSoaT3SetCol1_V( VmathSoaTransform3 *result, VmathSoaVector3 col1 ); + +/* + * Set column 2 of a 3x4 transformation matrix + */ +static inline void vmathSoaT3SetCol2_V( VmathSoaTransform3 *result, VmathSoaVector3 col2 ); + +/* + * Set column 3 of a 3x4 transformation matrix + */ +static inline void vmathSoaT3SetCol3_V( VmathSoaTransform3 *result, VmathSoaVector3 col3 ); + +/* + * Get column 0 of a 3x4 transformation matrix + */ +static inline VmathSoaVector3 vmathSoaT3GetCol0_V( VmathSoaTransform3 tfrm ); + +/* + * Get column 1 of a 3x4 transformation matrix + */ +static inline VmathSoaVector3 vmathSoaT3GetCol1_V( VmathSoaTransform3 tfrm ); + +/* + * Get column 2 of a 3x4 transformation matrix + */ +static inline VmathSoaVector3 vmathSoaT3GetCol2_V( VmathSoaTransform3 tfrm ); + +/* + * Get column 3 of a 3x4 transformation matrix + */ +static inline VmathSoaVector3 vmathSoaT3GetCol3_V( VmathSoaTransform3 tfrm ); + +/* + * Set the column of a 3x4 transformation matrix referred to by the specified index + */ +static inline void vmathSoaT3SetCol_V( VmathSoaTransform3 *result, int col, VmathSoaVector3 vec ); + +/* + * Set the row of a 3x4 transformation matrix referred to by the specified index + */ +static inline void vmathSoaT3SetRow_V( VmathSoaTransform3 *result, int row, VmathSoaVector4 vec ); + +/* + * Get the column of a 3x4 transformation matrix referred to by the specified index + */ +static inline VmathSoaVector3 vmathSoaT3GetCol_V( VmathSoaTransform3 tfrm, int col ); + +/* + * Get the row of a 3x4 transformation matrix referred to by the specified index + */ +static inline VmathSoaVector4 vmathSoaT3GetRow_V( VmathSoaTransform3 tfrm, int row ); + +/* + * Set the element of a 3x4 transformation matrix referred to by column and row indices + */ +static inline void vmathSoaT3SetElem_V( VmathSoaTransform3 *result, int col, int row, vec_float4 val ); + +/* + * Get the element of a 3x4 transformation matrix referred to by column and row indices + */ +static inline vec_float4 vmathSoaT3GetElem_V( VmathSoaTransform3 tfrm, int col, int row ); + +/* + * Multiply a 3x4 transformation matrix by a 3-D vector + */ +static inline VmathSoaVector3 vmathSoaT3MulV3_V( VmathSoaTransform3 tfrm, VmathSoaVector3 vec ); + +/* + * Multiply a 3x4 transformation matrix by a 3-D point + */ +static inline VmathSoaPoint3 vmathSoaT3MulP3_V( VmathSoaTransform3 tfrm, VmathSoaPoint3 pnt ); + +/* + * Multiply two 3x4 transformation matrices + */ +static inline VmathSoaTransform3 vmathSoaT3Mul_V( VmathSoaTransform3 tfrm0, VmathSoaTransform3 tfrm1 ); + +/* + * Construct an identity 3x4 transformation matrix + */ +static inline VmathSoaTransform3 vmathSoaT3MakeIdentity_V( ); + +/* + * Construct a 3x4 transformation matrix to rotate around the x axis + */ +static inline VmathSoaTransform3 vmathSoaT3MakeRotationX_V( vec_float4 radians ); + +/* + * Construct a 3x4 transformation matrix to rotate around the y axis + */ +static inline VmathSoaTransform3 vmathSoaT3MakeRotationY_V( vec_float4 radians ); + +/* + * Construct a 3x4 transformation matrix to rotate around the z axis + */ +static inline VmathSoaTransform3 vmathSoaT3MakeRotationZ_V( vec_float4 radians ); + +/* + * Construct a 3x4 transformation matrix to rotate around the x, y, and z axes + */ +static inline VmathSoaTransform3 vmathSoaT3MakeRotationZYX_V( VmathSoaVector3 radiansXYZ ); + +/* + * Construct a 3x4 transformation matrix to rotate around a unit-length 3-D vector + */ +static inline VmathSoaTransform3 vmathSoaT3MakeRotationAxis_V( vec_float4 radians, VmathSoaVector3 unitVec ); + +/* + * Construct a rotation matrix from a unit-length quaternion + */ +static inline VmathSoaTransform3 vmathSoaT3MakeRotationQ_V( VmathSoaQuat unitQuat ); + +/* + * Construct a 3x4 transformation matrix to perform scaling + */ +static inline VmathSoaTransform3 vmathSoaT3MakeScale_V( VmathSoaVector3 scaleVec ); + +/* + * Construct a 3x4 transformation matrix to perform translation + */ +static inline VmathSoaTransform3 vmathSoaT3MakeTranslation_V( VmathSoaVector3 translateVec ); + +/* + * Append (post-multiply) a scale transformation to a 3x4 transformation matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline VmathSoaTransform3 vmathSoaT3AppendScale_V( VmathSoaTransform3 tfrm, VmathSoaVector3 scaleVec ); + +/* + * Prepend (pre-multiply) a scale transformation to a 3x4 transformation matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline VmathSoaTransform3 vmathSoaT3PrependScale_V( VmathSoaVector3 scaleVec, VmathSoaTransform3 tfrm ); + +/* + * Multiply two 3x4 transformation matrices per element + */ +static inline VmathSoaTransform3 vmathSoaT3MulPerElem_V( VmathSoaTransform3 tfrm0, VmathSoaTransform3 tfrm1 ); + +/* + * Compute the absolute value of a 3x4 transformation matrix per element + */ +static inline VmathSoaTransform3 vmathSoaT3AbsPerElem_V( VmathSoaTransform3 tfrm ); + +/* + * Inverse of a 3x4 transformation matrix + * NOTE: + * Result is unpredictable when the determinant of the left 3x3 submatrix is equal to or near 0. + */ +static inline VmathSoaTransform3 vmathSoaT3Inverse_V( VmathSoaTransform3 tfrm ); + +/* + * Compute the inverse of a 3x4 transformation matrix, expected to have an orthogonal upper-left 3x3 submatrix + * NOTE: + * This can be used to achieve better performance than a general inverse when the specified 3x4 transformation matrix meets the given restrictions. + */ +static inline VmathSoaTransform3 vmathSoaT3OrthoInverse_V( VmathSoaTransform3 tfrm ); + +/* + * Conditionally select between two 3x4 transformation matrices + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + */ +static inline VmathSoaTransform3 vmathSoaT3Select_V( VmathSoaTransform3 tfrm0, VmathSoaTransform3 tfrm1, vec_uint4 select1 ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 3x4 transformation matrix + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaT3Print_V( VmathSoaTransform3 tfrm ); + +/* + * Print a 3x4 transformation matrix and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaT3Prints_V( VmathSoaTransform3 tfrm, const char *name ); + +#endif + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#include "vectormath_soa.h" +#include "vec_soa_v.h" +#include "quat_soa_v.h" +#include "mat_soa_v.h" + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/ppu/cpp/boolInVec.h b/Extras/vectormathlibrary/include/vectormath/ppu/cpp/boolInVec.h new file mode 100644 index 000000000..d928c0f58 --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/ppu/cpp/boolInVec.h @@ -0,0 +1,261 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _BOOLINVEC_H +#define _BOOLINVEC_H + +#include +#include +#include "vec_types.h" +#undef bool + +namespace Vectormath { + +class floatInVec; + +//-------------------------------------------------------------------------------------------------- +// boolInVec class +// + +class boolInVec +{ + private: + vec_uint4 mData; + + inline boolInVec(vec_uint4 vec); + public: + inline boolInVec() {} + + // matches standard type conversions + // + inline boolInVec(floatInVec vec); + + // explicit cast from bool + // + explicit inline boolInVec(bool scalar); + +#ifdef _VECTORMATH_NO_SCALAR_CAST + // explicit cast to bool + // + inline bool getAsBool() const; +#else + // implicit cast to bool + // + inline operator bool() const; +#endif + + // get vector data + // bool value is splatted across all word slots of vector as 0 (false) or -1 (true) + // + inline vec_uint4 get128() const; + + // operators + // + inline const boolInVec operator ! () const; + inline boolInVec& operator = (boolInVec vec); + inline boolInVec& operator &= (boolInVec vec); + inline boolInVec& operator ^= (boolInVec vec); + inline boolInVec& operator |= (boolInVec vec); + + // friend functions + // + friend inline const boolInVec operator == (boolInVec vec0, boolInVec vec1); + friend inline const boolInVec operator != (boolInVec vec0, boolInVec vec1); + friend inline const boolInVec operator < (floatInVec vec0, floatInVec vec1); + friend inline const boolInVec operator <= (floatInVec vec0, floatInVec vec1); + friend inline const boolInVec operator > (floatInVec vec0, floatInVec vec1); + friend inline const boolInVec operator >= (floatInVec vec0, floatInVec vec1); + friend inline const boolInVec operator == (floatInVec vec0, floatInVec vec1); + friend inline const boolInVec operator != (floatInVec vec0, floatInVec vec1); + friend inline const boolInVec operator & (boolInVec vec0, boolInVec vec1); + friend inline const boolInVec operator ^ (boolInVec vec0, boolInVec vec1); + friend inline const boolInVec operator | (boolInVec vec0, boolInVec vec1); + friend inline const boolInVec select(boolInVec vec0, boolInVec vec1, boolInVec select_vec1); +}; + +//-------------------------------------------------------------------------------------------------- +// boolInVec functions +// + +// operators +// +inline const boolInVec operator == (boolInVec vec0, boolInVec vec1); +inline const boolInVec operator != (boolInVec vec0, boolInVec vec1); +inline const boolInVec operator & (boolInVec vec0, boolInVec vec1); +inline const boolInVec operator ^ (boolInVec vec0, boolInVec vec1); +inline const boolInVec operator | (boolInVec vec0, boolInVec vec1); + +// select between vec0 and vec1 using boolInVec. +// false selects vec0, true selects vec1 +// +inline const boolInVec select(boolInVec vec0, boolInVec vec1, boolInVec select_vec1); + +} // namespace Vectormath + +//-------------------------------------------------------------------------------------------------- +// boolInVec implementation +// + +#include "floatInVec.h" + +namespace Vectormath { + +inline +boolInVec::boolInVec(vec_uint4 vec) +{ + mData = vec; +} + +inline +boolInVec::boolInVec(floatInVec vec) +{ + *this = (vec != floatInVec(0.0f)); +} + +inline +boolInVec::boolInVec(bool scalar) +{ +#ifdef __GNUC__ + if (__builtin_constant_p(scalar)) + { + const unsigned int mask = -(int)scalar; + mData = (vec_uint4){mask, mask, mask, mask}; + } + else +#endif + { + unsigned int mask = -(int)scalar; + vec_uint4 vec = vec_ld(0, &mask); + mData = vec_splat(vec_perm(vec, vec, vec_lvsl(0, &mask)), 0); + } +} + +#ifdef _VECTORMATH_NO_SCALAR_CAST +inline +bool +boolInVec::getAsBool() const +#else +inline +boolInVec::operator bool() const +#endif +{ + return vec_all_gt(mData, ((vec_uint4){0,0,0,0})); +} + +inline +vec_uint4 +boolInVec::get128() const +{ + return mData; +} + +inline +const boolInVec +boolInVec::operator ! () const +{ + return boolInVec(vec_nor(mData, mData)); +} + +inline +boolInVec& +boolInVec::operator = (boolInVec vec) +{ + mData = vec.mData; + return *this; +} + +inline +boolInVec& +boolInVec::operator &= (boolInVec vec) +{ + *this = *this & vec; + return *this; +} + +inline +boolInVec& +boolInVec::operator ^= (boolInVec vec) +{ + *this = *this ^ vec; + return *this; +} + +inline +boolInVec& +boolInVec::operator |= (boolInVec vec) +{ + *this = *this | vec; + return *this; +} + +inline +const boolInVec +operator == (boolInVec vec0, boolInVec vec1) +{ + return boolInVec((vec_uint4)vec_cmpeq(vec0.get128(), vec1.get128())); +} + +inline +const boolInVec +operator != (boolInVec vec0, boolInVec vec1) +{ + return !(vec0 == vec1); +} + +inline +const boolInVec +operator & (boolInVec vec0, boolInVec vec1) +{ + return boolInVec(vec_and(vec0.get128(), vec1.get128())); +} + +inline +const boolInVec +operator | (boolInVec vec0, boolInVec vec1) +{ + return boolInVec(vec_or(vec0.get128(), vec1.get128())); +} + +inline +const boolInVec +operator ^ (boolInVec vec0, boolInVec vec1) +{ + return boolInVec(vec_xor(vec0.get128(), vec1.get128())); +} + +inline +const boolInVec +select(boolInVec vec0, boolInVec vec1, boolInVec select_vec1) +{ + return boolInVec(vec_sel(vec0.get128(), vec1.get128(), select_vec1.get128())); +} + +} // namespace Vectormath + +#endif // boolInVec_h diff --git a/Extras/vectormathlibrary/include/vectormath/ppu/cpp/floatInVec.h b/Extras/vectormathlibrary/include/vectormath/ppu/cpp/floatInVec.h new file mode 100644 index 000000000..54eb72523 --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/ppu/cpp/floatInVec.h @@ -0,0 +1,361 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _FLOATINVEC_H +#define _FLOATINVEC_H + +#include +#include +#include +#include "vec_types.h" +#include "simdmath.h" +#undef bool + +namespace Vectormath { + +class boolInVec; + +//-------------------------------------------------------------------------------------------------- +// floatInVec class +// + +class floatInVec +{ + private: + vec_float4 mData; + + inline floatInVec(vec_float4 vec); + public: + inline floatInVec() {} + + // matches standard type conversions + // + inline floatInVec(boolInVec vec); + + // construct from a slot of vec_float4 + // + inline floatInVec(vec_float4 vec, int slot); + + // explicit cast from float + // + explicit inline floatInVec(float scalar); + +#ifdef _VECTORMATH_NO_SCALAR_CAST + // explicit cast to float + // + inline float getAsFloat() const; +#else + // implicit cast to float + // + inline operator float() const; +#endif + + // get vector data + // float value is splatted across all word slots of vector + // + inline vec_float4 get128() const; + + // operators + // + inline const floatInVec operator ++ (int); + inline const floatInVec operator -- (int); + inline floatInVec& operator ++ (); + inline floatInVec& operator -- (); + inline const floatInVec operator - () const; + inline floatInVec& operator = (floatInVec vec); + inline floatInVec& operator *= (floatInVec vec); + inline floatInVec& operator /= (floatInVec vec); + inline floatInVec& operator += (floatInVec vec); + inline floatInVec& operator -= (floatInVec vec); + + // friend functions + // + friend inline const floatInVec operator * (floatInVec vec0, floatInVec vec1); + friend inline const floatInVec operator / (floatInVec vec0, floatInVec vec1); + friend inline const floatInVec operator + (floatInVec vec0, floatInVec vec1); + friend inline const floatInVec operator - (floatInVec vec0, floatInVec vec1); + friend inline const floatInVec select(floatInVec vec0, floatInVec vec1, boolInVec select_vec1); +}; + +//-------------------------------------------------------------------------------------------------- +// floatInVec functions +// + +// operators +// +inline const floatInVec operator * (floatInVec vec0, floatInVec vec1); +inline const floatInVec operator / (floatInVec vec0, floatInVec vec1); +inline const floatInVec operator + (floatInVec vec0, floatInVec vec1); +inline const floatInVec operator - (floatInVec vec0, floatInVec vec1); +inline const boolInVec operator < (floatInVec vec0, floatInVec vec1); +inline const boolInVec operator <= (floatInVec vec0, floatInVec vec1); +inline const boolInVec operator > (floatInVec vec0, floatInVec vec1); +inline const boolInVec operator >= (floatInVec vec0, floatInVec vec1); +inline const boolInVec operator == (floatInVec vec0, floatInVec vec1); +inline const boolInVec operator != (floatInVec vec0, floatInVec vec1); + +// select between vec0 and vec1 using boolInVec. +// false selects vec0, true selects vec1 +// +inline const floatInVec select(floatInVec vec0, floatInVec vec1, boolInVec select_vec1); + +} // namespace Vectormath + +//-------------------------------------------------------------------------------------------------- +// floatInVec implementation +// + +#include "boolInVec.h" + +namespace Vectormath { + +inline +floatInVec::floatInVec(vec_float4 vec) +{ + mData = vec; +} + +inline +floatInVec::floatInVec(boolInVec vec) +{ + mData = vec_ctf(vec_sub((vec_uint4){0,0,0,0}, vec.get128()), 0); +} + +inline +floatInVec::floatInVec(vec_float4 vec, int slot) +{ +#ifdef __GNUC__ + if (__builtin_constant_p(slot)) + { + mData = vec_splat(vec, slot); + } + else +#endif + { + const vec_uchar16 shiftpattern = vec_lvsl(0, (float *)(size_t)(slot << 2)); + mData = vec_splat(vec_perm(vec, vec, shiftpattern), 0); + } +} + +inline +floatInVec::floatInVec(float scalar) +{ +#ifdef __GNUC__ + if (__builtin_constant_p(scalar)) + { + mData = (vec_float4){scalar, scalar, scalar, scalar}; + } + else +#endif + { + vec_float4 vec = vec_ld(0, &scalar); + mData = vec_splat(vec_perm(vec, vec, vec_lvsl(0, &scalar)), 0); + } +} + +#ifdef _VECTORMATH_NO_SCALAR_CAST +inline +float +floatInVec::getAsFloat() const +#else +inline +floatInVec::operator float() const +#endif +{ + return *((float *)&mData); +} + +inline +vec_float4 +floatInVec::get128() const +{ + return mData; +} + +inline +const floatInVec +floatInVec::operator ++ (int) +{ + vec_float4 olddata = mData; + operator ++(); + return floatInVec(olddata); +} + +inline +const floatInVec +floatInVec::operator -- (int) +{ + vec_float4 olddata = mData; + operator --(); + return floatInVec(olddata); +} + +inline +floatInVec& +floatInVec::operator ++ () +{ + *this += floatInVec((vec_float4){1.0f,1.0f,1.0f,1.0f}); + return *this; +} + +inline +floatInVec& +floatInVec::operator -- () +{ + *this -= floatInVec((vec_float4){1.0f,1.0f,1.0f,1.0f}); + return *this; +} + +inline +const floatInVec +floatInVec::operator - () const +{ + return floatInVec((vec_float4)vec_xor((vec_uint4)mData, (vec_uint4){0x80000000,0x80000000,0x80000000,0x80000000})); +} + +inline +floatInVec& +floatInVec::operator = (floatInVec vec) +{ + mData = vec.mData; + return *this; +} + +inline +floatInVec& +floatInVec::operator *= (floatInVec vec) +{ + *this = *this * vec; + return *this; +} + +inline +floatInVec& +floatInVec::operator /= (floatInVec vec) +{ + *this = *this / vec; + return *this; +} + +inline +floatInVec& +floatInVec::operator += (floatInVec vec) +{ + *this = *this + vec; + return *this; +} + +inline +floatInVec& +floatInVec::operator -= (floatInVec vec) +{ + *this = *this - vec; + return *this; +} + +inline +const floatInVec +operator * (floatInVec vec0, floatInVec vec1) +{ + return floatInVec(vec_madd(vec0.get128(), vec1.get128(), (vec_float4){0,0,0,0})); +} + +inline +const floatInVec +operator / (floatInVec num, floatInVec den) +{ + return floatInVec(divf4(num.get128(), den.get128())); +} + +inline +const floatInVec +operator + (floatInVec vec0, floatInVec vec1) +{ + return floatInVec(vec_add(vec0.get128(), vec1.get128())); +} + +inline +const floatInVec +operator - (floatInVec vec0, floatInVec vec1) +{ + return floatInVec(vec_sub(vec0.get128(), vec1.get128())); +} + +inline +const boolInVec +operator < (floatInVec vec0, floatInVec vec1) +{ + return boolInVec((vec_uint4)vec_cmpgt(vec1.get128(), vec0.get128())); +} + +inline +const boolInVec +operator <= (floatInVec vec0, floatInVec vec1) +{ + return !(vec0 > vec1); +} + +inline +const boolInVec +operator > (floatInVec vec0, floatInVec vec1) +{ + return boolInVec((vec_uint4)vec_cmpgt(vec0.get128(), vec1.get128())); +} + +inline +const boolInVec +operator >= (floatInVec vec0, floatInVec vec1) +{ + return !(vec0 < vec1); +} + +inline +const boolInVec +operator == (floatInVec vec0, floatInVec vec1) +{ + return boolInVec((vec_uint4)vec_cmpeq(vec0.get128(), vec1.get128())); +} + +inline +const boolInVec +operator != (floatInVec vec0, floatInVec vec1) +{ + return !(vec0 == vec1); +} + +inline +const floatInVec +select(floatInVec vec0, floatInVec vec1, boolInVec select_vec1) +{ + return floatInVec(vec_sel(vec0.get128(), vec1.get128(), select_vec1.get128())); +} + +} // namespace Vectormath + +#endif // floatInVec_h diff --git a/Extras/vectormathlibrary/include/vectormath/ppu/cpp/mat_aos.h b/Extras/vectormathlibrary/include/vectormath/ppu/cpp/mat_aos.h new file mode 100644 index 000000000..77a184725 --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/ppu/cpp/mat_aos.h @@ -0,0 +1,2188 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_MAT_AOS_CPP_H +#define _VECTORMATH_MAT_AOS_CPP_H + +namespace Vectormath { +namespace Aos { + +//----------------------------------------------------------------------------- +// Constants +// for shuffles, words are labeled [x,y,z,w] [a,b,c,d] + +#define _VECTORMATH_PERM_ZBWX ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_Z, _VECTORMATH_PERM_B, _VECTORMATH_PERM_W, _VECTORMATH_PERM_X }) +#define _VECTORMATH_PERM_XCYX ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_X, _VECTORMATH_PERM_C, _VECTORMATH_PERM_Y, _VECTORMATH_PERM_X }) +#define _VECTORMATH_PERM_XYAB ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_X, _VECTORMATH_PERM_Y, _VECTORMATH_PERM_A, _VECTORMATH_PERM_B }) +#define _VECTORMATH_PERM_ZWCD ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_Z, _VECTORMATH_PERM_W, _VECTORMATH_PERM_C, _VECTORMATH_PERM_D }) +#define _VECTORMATH_PERM_XZBX ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_X, _VECTORMATH_PERM_Z, _VECTORMATH_PERM_B, _VECTORMATH_PERM_X }) +#define _VECTORMATH_PERM_CXXX ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_C, _VECTORMATH_PERM_X, _VECTORMATH_PERM_X, _VECTORMATH_PERM_X }) +#define _VECTORMATH_PERM_YAXX ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_Y, _VECTORMATH_PERM_A, _VECTORMATH_PERM_X, _VECTORMATH_PERM_X }) +#define _VECTORMATH_PERM_XAZC ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_X, _VECTORMATH_PERM_A, _VECTORMATH_PERM_Z, _VECTORMATH_PERM_C }) +#define _VECTORMATH_PERM_YXWZ ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_Y, _VECTORMATH_PERM_X, _VECTORMATH_PERM_W, _VECTORMATH_PERM_Z }) +#define _VECTORMATH_PERM_YBWD ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_Y, _VECTORMATH_PERM_B, _VECTORMATH_PERM_W, _VECTORMATH_PERM_D }) +#define _VECTORMATH_PERM_XYCX ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_X, _VECTORMATH_PERM_Y, _VECTORMATH_PERM_C, _VECTORMATH_PERM_X }) +#define _VECTORMATH_PERM_YCXY ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_Y, _VECTORMATH_PERM_C, _VECTORMATH_PERM_X, _VECTORMATH_PERM_Y }) +#define _VECTORMATH_PERM_CXYC ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_C, _VECTORMATH_PERM_X, _VECTORMATH_PERM_Y, _VECTORMATH_PERM_C }) +#define _VECTORMATH_PERM_ZAYX ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_Z, _VECTORMATH_PERM_A, _VECTORMATH_PERM_Y, _VECTORMATH_PERM_X }) +#define _VECTORMATH_PERM_BZXX ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_B, _VECTORMATH_PERM_Z, _VECTORMATH_PERM_X, _VECTORMATH_PERM_X }) +#define _VECTORMATH_PERM_XZYA ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_X, _VECTORMATH_PERM_Z, _VECTORMATH_PERM_Y, _VECTORMATH_PERM_A }) +#define _VECTORMATH_PERM_ZXXB ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_Z, _VECTORMATH_PERM_X, _VECTORMATH_PERM_X, _VECTORMATH_PERM_B }) +#define _VECTORMATH_PERM_YXXC ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_Y, _VECTORMATH_PERM_X, _VECTORMATH_PERM_X, _VECTORMATH_PERM_C }) +#define _VECTORMATH_PERM_BBYX ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_B, _VECTORMATH_PERM_B, _VECTORMATH_PERM_Y, _VECTORMATH_PERM_X }) +#define _VECTORMATH_PI_OVER_2 1.570796327f + +//----------------------------------------------------------------------------- +// Definitions + +inline Matrix3::Matrix3( const Matrix3 & mat ) +{ + mCol0 = mat.mCol0; + mCol1 = mat.mCol1; + mCol2 = mat.mCol2; +} + +inline Matrix3::Matrix3( float scalar ) +{ + mCol0 = Vector3( scalar ); + mCol1 = Vector3( scalar ); + mCol2 = Vector3( scalar ); +} + +inline Matrix3::Matrix3( floatInVec scalar ) +{ + mCol0 = Vector3( scalar ); + mCol1 = Vector3( scalar ); + mCol2 = Vector3( scalar ); +} + +inline Matrix3::Matrix3( Quat unitQuat ) +{ + vec_float4 xyzw_2, wwww, yzxw, zxyw, yzxw_2, zxyw_2; + vec_float4 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5; + vec_uint4 select_x = _VECTORMATH_MASK_0xF000; + vec_uint4 select_z = _VECTORMATH_MASK_0x00F0; + xyzw_2 = vec_add( unitQuat.get128(), unitQuat.get128() ); + wwww = vec_splat( unitQuat.get128(), 3 ); + yzxw = vec_perm( unitQuat.get128(), unitQuat.get128(), _VECTORMATH_PERM_YZXW ); + zxyw = vec_perm( unitQuat.get128(), unitQuat.get128(), _VECTORMATH_PERM_ZXYW ); + yzxw_2 = vec_perm( xyzw_2, xyzw_2, _VECTORMATH_PERM_YZXW ); + zxyw_2 = vec_perm( xyzw_2, xyzw_2, _VECTORMATH_PERM_ZXYW ); + tmp0 = vec_madd( yzxw_2, wwww, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + tmp1 = vec_nmsub( yzxw, yzxw_2, ((vec_float4){1.0f,1.0f,1.0f,1.0f}) ); + tmp2 = vec_madd( yzxw, xyzw_2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + tmp0 = vec_madd( zxyw, xyzw_2, tmp0 ); + tmp1 = vec_nmsub( zxyw, zxyw_2, tmp1 ); + tmp2 = vec_nmsub( zxyw_2, wwww, tmp2 ); + tmp3 = vec_sel( tmp0, tmp1, select_x ); + tmp4 = vec_sel( tmp1, tmp2, select_x ); + tmp5 = vec_sel( tmp2, tmp0, select_x ); + mCol0 = Vector3( vec_sel( tmp3, tmp2, select_z ) ); + mCol1 = Vector3( vec_sel( tmp4, tmp0, select_z ) ); + mCol2 = Vector3( vec_sel( tmp5, tmp1, select_z ) ); +} + +inline Matrix3::Matrix3( Vector3 _col0, Vector3 _col1, Vector3 _col2 ) +{ + mCol0 = _col0; + mCol1 = _col1; + mCol2 = _col2; +} + +inline Matrix3 & Matrix3::setCol0( Vector3 _col0 ) +{ + mCol0 = _col0; + return *this; +} + +inline Matrix3 & Matrix3::setCol1( Vector3 _col1 ) +{ + mCol1 = _col1; + return *this; +} + +inline Matrix3 & Matrix3::setCol2( Vector3 _col2 ) +{ + mCol2 = _col2; + return *this; +} + +inline Matrix3 & Matrix3::setCol( int col, Vector3 vec ) +{ + *(&mCol0 + col) = vec; + return *this; +} + +inline Matrix3 & Matrix3::setRow( int row, Vector3 vec ) +{ + mCol0.setElem( row, vec.getElem( 0 ) ); + mCol1.setElem( row, vec.getElem( 1 ) ); + mCol2.setElem( row, vec.getElem( 2 ) ); + return *this; +} + +inline Matrix3 & Matrix3::setElem( int col, int row, float val ) +{ + (*this)[col].setElem(row, val); + return *this; +} + +inline Matrix3 & Matrix3::setElem( int col, int row, floatInVec val ) +{ + Vector3 tmpV3_0; + tmpV3_0 = this->getCol( col ); + tmpV3_0.setElem( row, val ); + this->setCol( col, tmpV3_0 ); + return *this; +} + +inline const floatInVec Matrix3::getElem( int col, int row ) const +{ + return this->getCol( col ).getElem( row ); +} + +inline const Vector3 Matrix3::getCol0( ) const +{ + return mCol0; +} + +inline const Vector3 Matrix3::getCol1( ) const +{ + return mCol1; +} + +inline const Vector3 Matrix3::getCol2( ) const +{ + return mCol2; +} + +inline const Vector3 Matrix3::getCol( int col ) const +{ + return *(&mCol0 + col); +} + +inline const Vector3 Matrix3::getRow( int row ) const +{ + return Vector3( mCol0.getElem( row ), mCol1.getElem( row ), mCol2.getElem( row ) ); +} + +inline Vector3 & Matrix3::operator []( int col ) +{ + return *(&mCol0 + col); +} + +inline const Vector3 Matrix3::operator []( int col ) const +{ + return *(&mCol0 + col); +} + +inline Matrix3 & Matrix3::operator =( const Matrix3 & mat ) +{ + mCol0 = mat.mCol0; + mCol1 = mat.mCol1; + mCol2 = mat.mCol2; + return *this; +} + +inline const Matrix3 transpose( const Matrix3 & mat ) +{ + vec_float4 tmp0, tmp1, res0, res1, res2; + tmp0 = vec_mergeh( mat.getCol0().get128(), mat.getCol2().get128() ); + tmp1 = vec_mergel( mat.getCol0().get128(), mat.getCol2().get128() ); + res0 = vec_mergeh( tmp0, mat.getCol1().get128() ); + res1 = vec_perm( tmp0, mat.getCol1().get128(), _VECTORMATH_PERM_ZBWX ); + res2 = vec_perm( tmp1, mat.getCol1().get128(), _VECTORMATH_PERM_XCYX ); + return Matrix3( + Vector3( res0 ), + Vector3( res1 ), + Vector3( res2 ) + ); +} + +inline const Matrix3 inverse( const Matrix3 & mat ) +{ + vec_float4 tmp0, tmp1, tmp2, tmp3, tmp4, dot, invdet, inv0, inv1, inv2; + vec_float4 zero = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); + tmp2 = _vmathVfCross( mat.getCol0().get128(), mat.getCol1().get128() ); + tmp0 = _vmathVfCross( mat.getCol1().get128(), mat.getCol2().get128() ); + tmp1 = _vmathVfCross( mat.getCol2().get128(), mat.getCol0().get128() ); + dot = _vmathVfDot3( tmp2, mat.getCol2().get128() ); + dot = vec_splat( dot, 0 ); + invdet = recipf4( dot ); + tmp3 = vec_mergeh( tmp0, tmp2 ); + tmp4 = vec_mergel( tmp0, tmp2 ); + inv0 = vec_mergeh( tmp3, tmp1 ); + inv1 = vec_perm( tmp3, tmp1, _VECTORMATH_PERM_ZBWX ); + inv2 = vec_perm( tmp4, tmp1, _VECTORMATH_PERM_XCYX ); + inv0 = vec_madd( inv0, invdet, zero ); + inv1 = vec_madd( inv1, invdet, zero ); + inv2 = vec_madd( inv2, invdet, zero ); + return Matrix3( + Vector3( inv0 ), + Vector3( inv1 ), + Vector3( inv2 ) + ); +} + +inline const floatInVec determinant( const Matrix3 & mat ) +{ + return dot( mat.getCol2(), cross( mat.getCol0(), mat.getCol1() ) ); +} + +inline const Matrix3 Matrix3::operator +( const Matrix3 & mat ) const +{ + return Matrix3( + ( mCol0 + mat.mCol0 ), + ( mCol1 + mat.mCol1 ), + ( mCol2 + mat.mCol2 ) + ); +} + +inline const Matrix3 Matrix3::operator -( const Matrix3 & mat ) const +{ + return Matrix3( + ( mCol0 - mat.mCol0 ), + ( mCol1 - mat.mCol1 ), + ( mCol2 - mat.mCol2 ) + ); +} + +inline Matrix3 & Matrix3::operator +=( const Matrix3 & mat ) +{ + *this = *this + mat; + return *this; +} + +inline Matrix3 & Matrix3::operator -=( const Matrix3 & mat ) +{ + *this = *this - mat; + return *this; +} + +inline const Matrix3 Matrix3::operator -( ) const +{ + return Matrix3( + ( -mCol0 ), + ( -mCol1 ), + ( -mCol2 ) + ); +} + +inline const Matrix3 absPerElem( const Matrix3 & mat ) +{ + return Matrix3( + absPerElem( mat.getCol0() ), + absPerElem( mat.getCol1() ), + absPerElem( mat.getCol2() ) + ); +} + +inline const Matrix3 Matrix3::operator *( float scalar ) const +{ + return *this * floatInVec(scalar); +} + +inline const Matrix3 Matrix3::operator *( floatInVec scalar ) const +{ + return Matrix3( + ( mCol0 * scalar ), + ( mCol1 * scalar ), + ( mCol2 * scalar ) + ); +} + +inline Matrix3 & Matrix3::operator *=( float scalar ) +{ + return *this *= floatInVec(scalar); +} + +inline Matrix3 & Matrix3::operator *=( floatInVec scalar ) +{ + *this = *this * scalar; + return *this; +} + +inline const Matrix3 operator *( float scalar, const Matrix3 & mat ) +{ + return floatInVec(scalar) * mat; +} + +inline const Matrix3 operator *( floatInVec scalar, const Matrix3 & mat ) +{ + return mat * scalar; +} + +inline const Vector3 Matrix3::operator *( Vector3 vec ) const +{ + vec_float4 res; + vec_float4 xxxx, yyyy, zzzz; + xxxx = vec_splat( vec.get128(), 0 ); + yyyy = vec_splat( vec.get128(), 1 ); + zzzz = vec_splat( vec.get128(), 2 ); + res = vec_madd( mCol0.get128(), xxxx, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + res = vec_madd( mCol1.get128(), yyyy, res ); + res = vec_madd( mCol2.get128(), zzzz, res ); + return Vector3( res ); +} + +inline const Matrix3 Matrix3::operator *( const Matrix3 & mat ) const +{ + return Matrix3( + ( *this * mat.mCol0 ), + ( *this * mat.mCol1 ), + ( *this * mat.mCol2 ) + ); +} + +inline Matrix3 & Matrix3::operator *=( const Matrix3 & mat ) +{ + *this = *this * mat; + return *this; +} + +inline const Matrix3 mulPerElem( const Matrix3 & mat0, const Matrix3 & mat1 ) +{ + return Matrix3( + mulPerElem( mat0.getCol0(), mat1.getCol0() ), + mulPerElem( mat0.getCol1(), mat1.getCol1() ), + mulPerElem( mat0.getCol2(), mat1.getCol2() ) + ); +} + +inline const Matrix3 Matrix3::identity( ) +{ + return Matrix3( + Vector3::xAxis( ), + Vector3::yAxis( ), + Vector3::zAxis( ) + ); +} + +inline const Matrix3 Matrix3::rotationX( float radians ) +{ + return rotationX( floatInVec(radians) ); +} + +inline const Matrix3 Matrix3::rotationX( floatInVec radians ) +{ + vec_float4 s, c, res1, res2; + vec_uint4 select_y, select_z; + vec_float4 zero; + select_y = _VECTORMATH_MASK_0x0F00; + select_z = _VECTORMATH_MASK_0x00F0; + zero = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); + sincosf4( radians.get128(), &s, &c ); + res1 = vec_sel( zero, c, select_y ); + res1 = vec_sel( res1, s, select_z ); + res2 = vec_sel( zero, negatef4(s), select_y ); + res2 = vec_sel( res2, c, select_z ); + return Matrix3( + Vector3::xAxis( ), + Vector3( res1 ), + Vector3( res2 ) + ); +} + +inline const Matrix3 Matrix3::rotationY( float radians ) +{ + return rotationY( floatInVec(radians) ); +} + +inline const Matrix3 Matrix3::rotationY( floatInVec radians ) +{ + vec_float4 s, c, res0, res2; + vec_uint4 select_x, select_z; + vec_float4 zero; + select_x = _VECTORMATH_MASK_0xF000; + select_z = _VECTORMATH_MASK_0x00F0; + zero = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); + sincosf4( radians.get128(), &s, &c ); + res0 = vec_sel( zero, c, select_x ); + res0 = vec_sel( res0, negatef4(s), select_z ); + res2 = vec_sel( zero, s, select_x ); + res2 = vec_sel( res2, c, select_z ); + return Matrix3( + Vector3( res0 ), + Vector3::yAxis( ), + Vector3( res2 ) + ); +} + +inline const Matrix3 Matrix3::rotationZ( float radians ) +{ + return rotationZ( floatInVec(radians) ); +} + +inline const Matrix3 Matrix3::rotationZ( floatInVec radians ) +{ + vec_float4 s, c, res0, res1; + vec_uint4 select_x, select_y; + vec_float4 zero; + select_x = _VECTORMATH_MASK_0xF000; + select_y = _VECTORMATH_MASK_0x0F00; + zero = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); + sincosf4( radians.get128(), &s, &c ); + res0 = vec_sel( zero, c, select_x ); + res0 = vec_sel( res0, s, select_y ); + res1 = vec_sel( zero, negatef4(s), select_x ); + res1 = vec_sel( res1, c, select_y ); + return Matrix3( + Vector3( res0 ), + Vector3( res1 ), + Vector3::zAxis( ) + ); +} + +inline const Matrix3 Matrix3::rotationZYX( Vector3 radiansXYZ ) +{ + vec_float4 angles, s, negS, c, X0, X1, Y0, Y1, Z0, Z1, tmp; + vec_float4 zero = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); + angles = Vector4( radiansXYZ, 0.0f ).get128(); + sincosf4( angles, &s, &c ); + negS = negatef4( s ); + Z0 = vec_mergel( c, s ); + Z1 = vec_mergel( negS, c ); + Z1 = vec_andc( Z1, (vec_float4)_VECTORMATH_MASK_0x000F ); + Y0 = vec_perm( negS, c, _VECTORMATH_PERM_BBYX ); + Y1 = vec_perm( c, s, _VECTORMATH_PERM_BBYX ); + X0 = vec_splat( s, 0 ); + X1 = vec_splat( c, 0 ); + tmp = vec_madd( Z0, Y1, zero ); + return Matrix3( + Vector3( vec_madd( Z0, Y0, zero ) ), + Vector3( vec_madd( Z1, X1, vec_madd( tmp, X0, zero ) ) ), + Vector3( vec_nmsub( Z1, X0, vec_madd( tmp, X1, zero ) ) ) + ); +} + +inline const Matrix3 Matrix3::rotation( float radians, Vector3 unitVec ) +{ + return rotation( floatInVec(radians), unitVec ); +} + +inline const Matrix3 Matrix3::rotation( floatInVec radians, Vector3 unitVec ) +{ + vec_float4 axis, s, c, oneMinusC, axisS, negAxisS, xxxx, yyyy, zzzz, tmp0, tmp1, tmp2; + vec_float4 zero = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); + axis = unitVec.get128(); + sincosf4( radians.get128(), &s, &c ); + xxxx = vec_splat( axis, 0 ); + yyyy = vec_splat( axis, 1 ); + zzzz = vec_splat( axis, 2 ); + oneMinusC = vec_sub( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), c ); + axisS = vec_madd( axis, s, zero ); + negAxisS = negatef4( axisS ); + tmp0 = vec_perm( axisS, negAxisS, _VECTORMATH_PERM_XZBX ); + tmp1 = vec_perm( axisS, negAxisS, _VECTORMATH_PERM_CXXX ); + tmp2 = vec_perm( axisS, negAxisS, _VECTORMATH_PERM_YAXX ); + tmp0 = vec_sel( tmp0, c, _VECTORMATH_MASK_0xF000 ); + tmp1 = vec_sel( tmp1, c, _VECTORMATH_MASK_0x0F00 ); + tmp2 = vec_sel( tmp2, c, _VECTORMATH_MASK_0x00F0 ); + return Matrix3( + Vector3( vec_madd( vec_madd( axis, xxxx, zero ), oneMinusC, tmp0 ) ), + Vector3( vec_madd( vec_madd( axis, yyyy, zero ), oneMinusC, tmp1 ) ), + Vector3( vec_madd( vec_madd( axis, zzzz, zero ), oneMinusC, tmp2 ) ) + ); +} + +inline const Matrix3 Matrix3::rotation( Quat unitQuat ) +{ + return Matrix3( unitQuat ); +} + +inline const Matrix3 Matrix3::scale( Vector3 scaleVec ) +{ + vec_float4 zero = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); + return Matrix3( + Vector3( vec_sel( zero, scaleVec.get128(), _VECTORMATH_MASK_0xF000 ) ), + Vector3( vec_sel( zero, scaleVec.get128(), _VECTORMATH_MASK_0x0F00 ) ), + Vector3( vec_sel( zero, scaleVec.get128(), _VECTORMATH_MASK_0x00F0 ) ) + ); +} + +inline const Matrix3 appendScale( const Matrix3 & mat, Vector3 scaleVec ) +{ + return Matrix3( + ( mat.getCol0() * scaleVec.getX( ) ), + ( mat.getCol1() * scaleVec.getY( ) ), + ( mat.getCol2() * scaleVec.getZ( ) ) + ); +} + +inline const Matrix3 prependScale( Vector3 scaleVec, const Matrix3 & mat ) +{ + return Matrix3( + mulPerElem( mat.getCol0(), scaleVec ), + mulPerElem( mat.getCol1(), scaleVec ), + mulPerElem( mat.getCol2(), scaleVec ) + ); +} + +inline const Matrix3 select( const Matrix3 & mat0, const Matrix3 & mat1, bool select1 ) +{ + return Matrix3( + select( mat0.getCol0(), mat1.getCol0(), select1 ), + select( mat0.getCol1(), mat1.getCol1(), select1 ), + select( mat0.getCol2(), mat1.getCol2(), select1 ) + ); +} + +inline const Matrix3 select( const Matrix3 & mat0, const Matrix3 & mat1, boolInVec select1 ) +{ + return Matrix3( + select( mat0.getCol0(), mat1.getCol0(), select1 ), + select( mat0.getCol1(), mat1.getCol1(), select1 ), + select( mat0.getCol2(), mat1.getCol2(), select1 ) + ); +} + +#ifdef _VECTORMATH_DEBUG + +inline void print( const Matrix3 & mat ) +{ + print( mat.getRow( 0 ) ); + print( mat.getRow( 1 ) ); + print( mat.getRow( 2 ) ); +} + +inline void print( const Matrix3 & mat, const char * name ) +{ + printf("%s:\n", name); + print( mat ); +} + +#endif + +inline Matrix4::Matrix4( const Matrix4 & mat ) +{ + mCol0 = mat.mCol0; + mCol1 = mat.mCol1; + mCol2 = mat.mCol2; + mCol3 = mat.mCol3; +} + +inline Matrix4::Matrix4( float scalar ) +{ + mCol0 = Vector4( scalar ); + mCol1 = Vector4( scalar ); + mCol2 = Vector4( scalar ); + mCol3 = Vector4( scalar ); +} + +inline Matrix4::Matrix4( floatInVec scalar ) +{ + mCol0 = Vector4( scalar ); + mCol1 = Vector4( scalar ); + mCol2 = Vector4( scalar ); + mCol3 = Vector4( scalar ); +} + +inline Matrix4::Matrix4( const Transform3 & mat ) +{ + mCol0 = Vector4( mat.getCol0(), 0.0f ); + mCol1 = Vector4( mat.getCol1(), 0.0f ); + mCol2 = Vector4( mat.getCol2(), 0.0f ); + mCol3 = Vector4( mat.getCol3(), 1.0f ); +} + +inline Matrix4::Matrix4( Vector4 _col0, Vector4 _col1, Vector4 _col2, Vector4 _col3 ) +{ + mCol0 = _col0; + mCol1 = _col1; + mCol2 = _col2; + mCol3 = _col3; +} + +inline Matrix4::Matrix4( const Matrix3 & mat, Vector3 translateVec ) +{ + mCol0 = Vector4( mat.getCol0(), 0.0f ); + mCol1 = Vector4( mat.getCol1(), 0.0f ); + mCol2 = Vector4( mat.getCol2(), 0.0f ); + mCol3 = Vector4( translateVec, 1.0f ); +} + +inline Matrix4::Matrix4( Quat unitQuat, Vector3 translateVec ) +{ + Matrix3 mat; + mat = Matrix3( unitQuat ); + mCol0 = Vector4( mat.getCol0(), 0.0f ); + mCol1 = Vector4( mat.getCol1(), 0.0f ); + mCol2 = Vector4( mat.getCol2(), 0.0f ); + mCol3 = Vector4( translateVec, 1.0f ); +} + +inline Matrix4 & Matrix4::setCol0( Vector4 _col0 ) +{ + mCol0 = _col0; + return *this; +} + +inline Matrix4 & Matrix4::setCol1( Vector4 _col1 ) +{ + mCol1 = _col1; + return *this; +} + +inline Matrix4 & Matrix4::setCol2( Vector4 _col2 ) +{ + mCol2 = _col2; + return *this; +} + +inline Matrix4 & Matrix4::setCol3( Vector4 _col3 ) +{ + mCol3 = _col3; + return *this; +} + +inline Matrix4 & Matrix4::setCol( int col, Vector4 vec ) +{ + *(&mCol0 + col) = vec; + return *this; +} + +inline Matrix4 & Matrix4::setRow( int row, Vector4 vec ) +{ + mCol0.setElem( row, vec.getElem( 0 ) ); + mCol1.setElem( row, vec.getElem( 1 ) ); + mCol2.setElem( row, vec.getElem( 2 ) ); + mCol3.setElem( row, vec.getElem( 3 ) ); + return *this; +} + +inline Matrix4 & Matrix4::setElem( int col, int row, float val ) +{ + (*this)[col].setElem(row, val); + return *this; +} + +inline Matrix4 & Matrix4::setElem( int col, int row, floatInVec val ) +{ + Vector4 tmpV3_0; + tmpV3_0 = this->getCol( col ); + tmpV3_0.setElem( row, val ); + this->setCol( col, tmpV3_0 ); + return *this; +} + +inline const floatInVec Matrix4::getElem( int col, int row ) const +{ + return this->getCol( col ).getElem( row ); +} + +inline const Vector4 Matrix4::getCol0( ) const +{ + return mCol0; +} + +inline const Vector4 Matrix4::getCol1( ) const +{ + return mCol1; +} + +inline const Vector4 Matrix4::getCol2( ) const +{ + return mCol2; +} + +inline const Vector4 Matrix4::getCol3( ) const +{ + return mCol3; +} + +inline const Vector4 Matrix4::getCol( int col ) const +{ + return *(&mCol0 + col); +} + +inline const Vector4 Matrix4::getRow( int row ) const +{ + return Vector4( mCol0.getElem( row ), mCol1.getElem( row ), mCol2.getElem( row ), mCol3.getElem( row ) ); +} + +inline Vector4 & Matrix4::operator []( int col ) +{ + return *(&mCol0 + col); +} + +inline const Vector4 Matrix4::operator []( int col ) const +{ + return *(&mCol0 + col); +} + +inline Matrix4 & Matrix4::operator =( const Matrix4 & mat ) +{ + mCol0 = mat.mCol0; + mCol1 = mat.mCol1; + mCol2 = mat.mCol2; + mCol3 = mat.mCol3; + return *this; +} + +inline const Matrix4 transpose( const Matrix4 & mat ) +{ + vec_float4 tmp0, tmp1, tmp2, tmp3, res0, res1, res2, res3; + tmp0 = vec_mergeh( mat.getCol0().get128(), mat.getCol2().get128() ); + tmp1 = vec_mergeh( mat.getCol1().get128(), mat.getCol3().get128() ); + tmp2 = vec_mergel( mat.getCol0().get128(), mat.getCol2().get128() ); + tmp3 = vec_mergel( mat.getCol1().get128(), mat.getCol3().get128() ); + res0 = vec_mergeh( tmp0, tmp1 ); + res1 = vec_mergel( tmp0, tmp1 ); + res2 = vec_mergeh( tmp2, tmp3 ); + res3 = vec_mergel( tmp2, tmp3 ); + return Matrix4( + Vector4( res0 ), + Vector4( res1 ), + Vector4( res2 ), + Vector4( res3 ) + ); +} + +inline const Matrix4 inverse( const Matrix4 & mat ) +{ + /* function implementation based on code from STIDC SDK: */ + /* -------------------------------------------------------------- */ + /* PLEASE DO NOT MODIFY THIS SECTION */ + /* This prolog section is automatically generated. */ + /* */ + /* (C)Copyright */ + /* Sony Computer Entertainment, Inc., */ + /* Toshiba Corporation, */ + /* International Business Machines Corporation, */ + /* 2001,2002. */ + /* S/T/I Confidential Information */ + /* -------------------------------------------------------------- */ + vector float in0, in1, in2, in3; + vector float tmp0, tmp1, tmp2, tmp3; + vector float cof0, cof1, cof2, cof3; + vector float t0, t1, t2, t3; + vector float t01, t02, t03, t12, t23; + vector float t1r, t2r; + vector float t01r, t02r, t03r, t12r, t23r; + vector float t1r3, t1r3r; + vector float det, det0, det1, det2, det3, invdet; + vector float vzero = (vector float){0.0}; + in0 = mat.getCol0().get128(); + in1 = mat.getCol1().get128(); + in2 = mat.getCol2().get128(); + in3 = mat.getCol3().get128(); + /* Perform transform of the input matrix of the form: + * A B C D + * E F G H + * I J K L + * M N O P + * + * The pseudo transpose of the input matrix is trans: + * A E I M + * J N B F + * C G K O + * L P D H + */ + tmp0 = vec_perm(in0, in1, _VECTORMATH_PERM_XAZC); /* A E C G */ + tmp1 = vec_perm(in2, in3, _VECTORMATH_PERM_XAZC); /* I M K O */ + tmp2 = vec_perm(in0, in1, _VECTORMATH_PERM_YBWD); /* B F D H */ + tmp3 = vec_perm(in2, in3, _VECTORMATH_PERM_YBWD); /* J N L P */ + t0 = vec_perm(tmp0, tmp1, _VECTORMATH_PERM_XYAB); /* A E I M */ + t1 = vec_perm(tmp3, tmp2, _VECTORMATH_PERM_XYAB); /* J N B F */ + t2 = vec_perm(tmp0, tmp1, _VECTORMATH_PERM_ZWCD); /* C G K O */ + t3 = vec_perm(tmp3, tmp2, _VECTORMATH_PERM_ZWCD); /* L P D H */ + /* Generate a cofactor matrix. The computed cofactors reside in + * cof0, cof1, cof2, cof3. + */ + t23 = vec_madd(t2, t3, vzero); /* CL GP KD OH */ + t23 = vec_perm(t23, t23, _VECTORMATH_PERM_YXWZ); /* GP CL OH KD */ + cof0 = vec_nmsub(t1, t23, vzero); /* -(JGP NCL FOH BKD) */ + cof1 = vec_nmsub(t0, t23, vzero); /* -(AGP ECL IOH MKD) */ + t23r = vec_sld(t23, t23, 8); /* OH KD GP CL */ + cof0 = vec_madd(t1, t23r, cof0); /* JOH NKD BGP FCL + cof0 */ + cof1 = vec_madd(t0, t23r, cof1); /* AOH EKD IGP MCL + cof1 */ + cof1 = vec_sld(cof1, cof1, 8); /* IGP MCL AOH EKD - IOH MKD AGP ECL */ + t12 = vec_madd(t1, t2, vzero); /* JC NG BK FO */ + t12 = vec_perm(t12, t12, _VECTORMATH_PERM_YXWZ); /* NG JC FO BK */ + cof0 = vec_madd(t3, t12, cof0); /* LNG PJC DFO HBK + cof0 */ + cof3 = vec_madd(t0, t12, vzero); /* ANG EJC IFO MBK */ + t12r = vec_sld(t12, t12, 8); /* FO BK NG JC */ + cof0 = vec_nmsub(t3, t12r, cof0); /* cof0 - LFO PBK DNG HJC */ + cof3 = vec_nmsub(t0, t12r, cof3); /* cof3 - AFO EBK ING MJC */ + cof3 = vec_sld(cof3, cof3, 8); /* ING MJC AFO EBK - IFO MBK ANG EJC */ + t1r = vec_sld(t1, t1, 8); /* B F J N */ + t2r = vec_sld(t2, t2, 8); /* K O C G */ + t1r3 = vec_madd(t1r, t3, vzero); /* BL FP JD NH */ + t1r3 = vec_perm(t1r3, t1r3, _VECTORMATH_PERM_YXWZ); /* FP BL NH JD */ + cof0 = vec_madd(t2r, t1r3, cof0); /* KFP OBL CNH GJD + cof0 */ + cof2 = vec_madd(t0, t1r3, vzero); /* AFP EBL INH MJD */ + t1r3r = vec_sld(t1r3, t1r3, 8); /* NH JD FP BL */ + cof0 = vec_nmsub(t2r, t1r3r, cof0); /* cof0 - KNH OJD CFP GBL */ + cof2 = vec_nmsub(t0, t1r3r, cof2); /* cof2 - ANH EJD IFP MBL */ + cof2 = vec_sld(cof2, cof2, 8); /* IFP MBL ANH EJD - INH MJD AFP EBL */ + t01 = vec_madd(t0, t1, vzero); /* AJ EN IB MF */ + t01 = vec_perm(t01, t01, _VECTORMATH_PERM_YXWZ); /* EN AJ MF IB */ + cof2 = vec_nmsub(t3, t01, cof2); /* cof2 - LEN PAJ DMF HIB */ + cof3 = vec_madd(t2r, t01, cof3); /* KEN OAJ CMF GIB + cof3 */ + t01r = vec_sld(t01, t01, 8); /* MF IB EN AJ */ + cof2 = vec_madd(t3, t01r, cof2); /* LMF PIB DEN HAJ + cof2 */ + cof3 = vec_nmsub(t2r, t01r, cof3); /* cof3 - KMF OIB CEN GAJ */ + t03 = vec_madd(t0, t3, vzero); /* AL EP ID MH */ + t03 = vec_perm(t03, t03, _VECTORMATH_PERM_YXWZ); /* EP AL MH ID */ + cof1 = vec_nmsub(t2r, t03, cof1); /* cof1 - KEP OAL CMH GID */ + cof2 = vec_madd(t1, t03, cof2); /* JEP NAL BMH FID + cof2 */ + t03r = vec_sld(t03, t03, 8); /* MH ID EP AL */ + cof1 = vec_madd(t2r, t03r, cof1); /* KMH OID CEP GAL + cof1 */ + cof2 = vec_nmsub(t1, t03r, cof2); /* cof2 - JMH NID BEP FAL */ + t02 = vec_madd(t0, t2r, vzero); /* AK EO IC MG */ + t02 = vec_perm(t02, t02, _VECTORMATH_PERM_YXWZ); /* E0 AK MG IC */ + cof1 = vec_madd(t3, t02, cof1); /* LEO PAK DMG HIC + cof1 */ + cof3 = vec_nmsub(t1, t02, cof3); /* cof3 - JEO NAK BMG FIC */ + t02r = vec_sld(t02, t02, 8); /* MG IC EO AK */ + cof1 = vec_nmsub(t3, t02r, cof1); /* cof1 - LMG PIC DEO HAK */ + cof3 = vec_madd(t1, t02r, cof3); /* JMG NIC BEO FAK + cof3 */ + /* Compute the determinant of the matrix + * + * det = sum_across(t0 * cof0); + * + * We perform a sum across the entire vector so that + * we don't have to splat the result when multiplying the + * cofactors by the inverse of the determinant. + */ + det = vec_madd(t0, cof0, vzero); + det0 = vec_splat(det, 0); + det1 = vec_splat(det, 1); + det2 = vec_splat(det, 2); + det3 = vec_splat(det, 3); + det = vec_add(det0, det1); + det2 = vec_add(det2, det3); + det = vec_add(det, det2); + /* Compute the reciprocal of the determinant. + */ + invdet = recipf4(det); + /* Multiply the cofactors by the reciprocal of the determinant. + */ + return Matrix4( + Vector4( vec_madd(cof0, invdet, vzero) ), + Vector4( vec_madd(cof1, invdet, vzero) ), + Vector4( vec_madd(cof2, invdet, vzero) ), + Vector4( vec_madd(cof3, invdet, vzero) ) + ); +} + +inline const Matrix4 affineInverse( const Matrix4 & mat ) +{ + Transform3 affineMat; + affineMat.setCol0( mat.getCol0().getXYZ( ) ); + affineMat.setCol1( mat.getCol1().getXYZ( ) ); + affineMat.setCol2( mat.getCol2().getXYZ( ) ); + affineMat.setCol3( mat.getCol3().getXYZ( ) ); + return Matrix4( inverse( affineMat ) ); +} + +inline const Matrix4 orthoInverse( const Matrix4 & mat ) +{ + Transform3 affineMat; + affineMat.setCol0( mat.getCol0().getXYZ( ) ); + affineMat.setCol1( mat.getCol1().getXYZ( ) ); + affineMat.setCol2( mat.getCol2().getXYZ( ) ); + affineMat.setCol3( mat.getCol3().getXYZ( ) ); + return Matrix4( orthoInverse( affineMat ) ); +} + +inline const floatInVec determinant( const Matrix4 & mat ) +{ + /* function implementation based on code from STIDC SDK: */ + /* -------------------------------------------------------------- */ + /* PLEASE DO NOT MODIFY THIS SECTION */ + /* This prolog section is automatically generated. */ + /* */ + /* (C)Copyright */ + /* Sony Computer Entertainment, Inc., */ + /* Toshiba Corporation, */ + /* International Business Machines Corporation, */ + /* 2001,2002. */ + /* S/T/I Confidential Information */ + /* -------------------------------------------------------------- */ + vector float in0, in1, in2, in3; + vector float tmp0, tmp1, tmp2, tmp3; + vector float cof0; + vector float t0, t1, t2, t3; + vector float t12, t23; + vector float t1r, t2r; + vector float t12r, t23r; + vector float t1r3, t1r3r; + vector float vzero = (vector float){0.0}; + in0 = mat.getCol0().get128(); + in1 = mat.getCol1().get128(); + in2 = mat.getCol2().get128(); + in3 = mat.getCol3().get128(); + /* Perform transform of the input matrix of the form: + * A B C D + * E F G H + * I J K L + * M N O P + * + * The pseudo transpose of the input matrix is trans: + * A E I M + * J N B F + * C G K O + * L P D H + */ + tmp0 = vec_perm(in0, in1, _VECTORMATH_PERM_XAZC); /* A E C G */ + tmp1 = vec_perm(in2, in3, _VECTORMATH_PERM_XAZC); /* I M K O */ + tmp2 = vec_perm(in0, in1, _VECTORMATH_PERM_YBWD); /* B F D H */ + tmp3 = vec_perm(in2, in3, _VECTORMATH_PERM_YBWD); /* J N L P */ + t0 = vec_perm(tmp0, tmp1, _VECTORMATH_PERM_XYAB); /* A E I M */ + t1 = vec_perm(tmp3, tmp2, _VECTORMATH_PERM_XYAB); /* J N B F */ + t2 = vec_perm(tmp0, tmp1, _VECTORMATH_PERM_ZWCD); /* C G K O */ + t3 = vec_perm(tmp3, tmp2, _VECTORMATH_PERM_ZWCD); /* L P D H */ + /* Generate a cofactor matrix. The computed cofactors reside in + * cof0, cof1, cof2, cof3. + */ + t23 = vec_madd(t2, t3, vzero); /* CL GP KD OH */ + t23 = vec_perm(t23, t23, _VECTORMATH_PERM_YXWZ); /* GP CL OH KD */ + cof0 = vec_nmsub(t1, t23, vzero); /* -(JGP NCL FOH BKD) */ + t23r = vec_sld(t23, t23, 8); /* OH KD GP CL */ + cof0 = vec_madd(t1, t23r, cof0); /* JOH NKD BGP FCL + cof0 */ + t12 = vec_madd(t1, t2, vzero); /* JC NG BK FO */ + t12 = vec_perm(t12, t12, _VECTORMATH_PERM_YXWZ); /* NG JC FO BK */ + cof0 = vec_madd(t3, t12, cof0); /* LNG PJC DFO HBK + cof0 */ + t12r = vec_sld(t12, t12, 8); /* FO BK NG JC */ + cof0 = vec_nmsub(t3, t12r, cof0); /* cof0 - LFO PBK DNG HJC */ + t1r = vec_sld(t1, t1, 8); /* B F J N */ + t2r = vec_sld(t2, t2, 8); /* K O C G */ + t1r3 = vec_madd(t1r, t3, vzero); /* BL FP JD NH */ + t1r3 = vec_perm(t1r3, t1r3, _VECTORMATH_PERM_YXWZ); /* FP BL NH JD */ + cof0 = vec_madd(t2r, t1r3, cof0); /* KFP OBL CNH GJD + cof0 */ + t1r3r = vec_sld(t1r3, t1r3, 8); /* NH JD FP BL */ + cof0 = vec_nmsub(t2r, t1r3r, cof0); /* cof0 - KNH OJD CFP GBL */ + return floatInVec( _vmathVfDot4(t0,cof0), 0 ); +} + +inline const Matrix4 Matrix4::operator +( const Matrix4 & mat ) const +{ + return Matrix4( + ( mCol0 + mat.mCol0 ), + ( mCol1 + mat.mCol1 ), + ( mCol2 + mat.mCol2 ), + ( mCol3 + mat.mCol3 ) + ); +} + +inline const Matrix4 Matrix4::operator -( const Matrix4 & mat ) const +{ + return Matrix4( + ( mCol0 - mat.mCol0 ), + ( mCol1 - mat.mCol1 ), + ( mCol2 - mat.mCol2 ), + ( mCol3 - mat.mCol3 ) + ); +} + +inline Matrix4 & Matrix4::operator +=( const Matrix4 & mat ) +{ + *this = *this + mat; + return *this; +} + +inline Matrix4 & Matrix4::operator -=( const Matrix4 & mat ) +{ + *this = *this - mat; + return *this; +} + +inline const Matrix4 Matrix4::operator -( ) const +{ + return Matrix4( + ( -mCol0 ), + ( -mCol1 ), + ( -mCol2 ), + ( -mCol3 ) + ); +} + +inline const Matrix4 absPerElem( const Matrix4 & mat ) +{ + return Matrix4( + absPerElem( mat.getCol0() ), + absPerElem( mat.getCol1() ), + absPerElem( mat.getCol2() ), + absPerElem( mat.getCol3() ) + ); +} + +inline const Matrix4 Matrix4::operator *( float scalar ) const +{ + return *this * floatInVec(scalar); +} + +inline const Matrix4 Matrix4::operator *( floatInVec scalar ) const +{ + return Matrix4( + ( mCol0 * scalar ), + ( mCol1 * scalar ), + ( mCol2 * scalar ), + ( mCol3 * scalar ) + ); +} + +inline Matrix4 & Matrix4::operator *=( float scalar ) +{ + return *this *= floatInVec(scalar); +} + +inline Matrix4 & Matrix4::operator *=( floatInVec scalar ) +{ + *this = *this * scalar; + return *this; +} + +inline const Matrix4 operator *( float scalar, const Matrix4 & mat ) +{ + return floatInVec(scalar) * mat; +} + +inline const Matrix4 operator *( floatInVec scalar, const Matrix4 & mat ) +{ + return mat * scalar; +} + +inline const Vector4 Matrix4::operator *( Vector4 vec ) const +{ + vec_float4 tmp0, tmp1, res; + vec_float4 xxxx, yyyy, zzzz, wwww; + vec_float4 zero = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); + xxxx = vec_splat( vec.get128(), 0 ); + yyyy = vec_splat( vec.get128(), 1 ); + zzzz = vec_splat( vec.get128(), 2 ); + wwww = vec_splat( vec.get128(), 3 ); + tmp0 = vec_madd( mCol0.get128(), xxxx, zero ); + tmp1 = vec_madd( mCol1.get128(), yyyy, zero ); + tmp0 = vec_madd( mCol2.get128(), zzzz, tmp0 ); + tmp1 = vec_madd( mCol3.get128(), wwww, tmp1 ); + res = vec_add( tmp0, tmp1 ); + return Vector4( res ); +} + +inline const Vector4 Matrix4::operator *( Vector3 vec ) const +{ + vec_float4 res; + vec_float4 xxxx, yyyy, zzzz; + xxxx = vec_splat( vec.get128(), 0 ); + yyyy = vec_splat( vec.get128(), 1 ); + zzzz = vec_splat( vec.get128(), 2 ); + res = vec_madd( mCol0.get128(), xxxx, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + res = vec_madd( mCol1.get128(), yyyy, res ); + res = vec_madd( mCol2.get128(), zzzz, res ); + return Vector4( res ); +} + +inline const Vector4 Matrix4::operator *( Point3 pnt ) const +{ + vec_float4 tmp0, tmp1, res; + vec_float4 xxxx, yyyy, zzzz; + vec_float4 zero = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); + xxxx = vec_splat( pnt.get128(), 0 ); + yyyy = vec_splat( pnt.get128(), 1 ); + zzzz = vec_splat( pnt.get128(), 2 ); + tmp0 = vec_madd( mCol0.get128(), xxxx, zero ); + tmp1 = vec_madd( mCol1.get128(), yyyy, zero ); + tmp0 = vec_madd( mCol2.get128(), zzzz, tmp0 ); + tmp1 = vec_add( mCol3.get128(), tmp1 ); + res = vec_add( tmp0, tmp1 ); + return Vector4( res ); +} + +inline const Matrix4 Matrix4::operator *( const Matrix4 & mat ) const +{ + return Matrix4( + ( *this * mat.mCol0 ), + ( *this * mat.mCol1 ), + ( *this * mat.mCol2 ), + ( *this * mat.mCol3 ) + ); +} + +inline Matrix4 & Matrix4::operator *=( const Matrix4 & mat ) +{ + *this = *this * mat; + return *this; +} + +inline const Matrix4 Matrix4::operator *( const Transform3 & tfrm ) const +{ + return Matrix4( + ( *this * tfrm.getCol0() ), + ( *this * tfrm.getCol1() ), + ( *this * tfrm.getCol2() ), + ( *this * Point3( tfrm.getCol3() ) ) + ); +} + +inline Matrix4 & Matrix4::operator *=( const Transform3 & tfrm ) +{ + *this = *this * tfrm; + return *this; +} + +inline const Matrix4 mulPerElem( const Matrix4 & mat0, const Matrix4 & mat1 ) +{ + return Matrix4( + mulPerElem( mat0.getCol0(), mat1.getCol0() ), + mulPerElem( mat0.getCol1(), mat1.getCol1() ), + mulPerElem( mat0.getCol2(), mat1.getCol2() ), + mulPerElem( mat0.getCol3(), mat1.getCol3() ) + ); +} + +inline const Matrix4 Matrix4::identity( ) +{ + return Matrix4( + Vector4::xAxis( ), + Vector4::yAxis( ), + Vector4::zAxis( ), + Vector4::wAxis( ) + ); +} + +inline Matrix4 & Matrix4::setUpper3x3( const Matrix3 & mat3 ) +{ + mCol0.setXYZ( mat3.getCol0() ); + mCol1.setXYZ( mat3.getCol1() ); + mCol2.setXYZ( mat3.getCol2() ); + return *this; +} + +inline const Matrix3 Matrix4::getUpper3x3( ) const +{ + return Matrix3( + mCol0.getXYZ( ), + mCol1.getXYZ( ), + mCol2.getXYZ( ) + ); +} + +inline Matrix4 & Matrix4::setTranslation( Vector3 translateVec ) +{ + mCol3.setXYZ( translateVec ); + return *this; +} + +inline const Vector3 Matrix4::getTranslation( ) const +{ + return mCol3.getXYZ( ); +} + +inline const Matrix4 Matrix4::rotationX( float radians ) +{ + return rotationX( floatInVec(radians) ); +} + +inline const Matrix4 Matrix4::rotationX( floatInVec radians ) +{ + vec_float4 s, c, res1, res2; + vec_uint4 select_y, select_z; + vec_float4 zero; + select_y = _VECTORMATH_MASK_0x0F00; + select_z = _VECTORMATH_MASK_0x00F0; + zero = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); + sincosf4( radians.get128(), &s, &c ); + res1 = vec_sel( zero, c, select_y ); + res1 = vec_sel( res1, s, select_z ); + res2 = vec_sel( zero, negatef4(s), select_y ); + res2 = vec_sel( res2, c, select_z ); + return Matrix4( + Vector4::xAxis( ), + Vector4( res1 ), + Vector4( res2 ), + Vector4::wAxis( ) + ); +} + +inline const Matrix4 Matrix4::rotationY( float radians ) +{ + return rotationY( floatInVec(radians) ); +} + +inline const Matrix4 Matrix4::rotationY( floatInVec radians ) +{ + vec_float4 s, c, res0, res2; + vec_uint4 select_x, select_z; + vec_float4 zero; + select_x = _VECTORMATH_MASK_0xF000; + select_z = _VECTORMATH_MASK_0x00F0; + zero = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); + sincosf4( radians.get128(), &s, &c ); + res0 = vec_sel( zero, c, select_x ); + res0 = vec_sel( res0, negatef4(s), select_z ); + res2 = vec_sel( zero, s, select_x ); + res2 = vec_sel( res2, c, select_z ); + return Matrix4( + Vector4( res0 ), + Vector4::yAxis( ), + Vector4( res2 ), + Vector4::wAxis( ) + ); +} + +inline const Matrix4 Matrix4::rotationZ( float radians ) +{ + return rotationZ( floatInVec(radians) ); +} + +inline const Matrix4 Matrix4::rotationZ( floatInVec radians ) +{ + vec_float4 s, c, res0, res1; + vec_uint4 select_x, select_y; + vec_float4 zero; + select_x = _VECTORMATH_MASK_0xF000; + select_y = _VECTORMATH_MASK_0x0F00; + zero = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); + sincosf4( radians.get128(), &s, &c ); + res0 = vec_sel( zero, c, select_x ); + res0 = vec_sel( res0, s, select_y ); + res1 = vec_sel( zero, negatef4(s), select_x ); + res1 = vec_sel( res1, c, select_y ); + return Matrix4( + Vector4( res0 ), + Vector4( res1 ), + Vector4::zAxis( ), + Vector4::wAxis( ) + ); +} + +inline const Matrix4 Matrix4::rotationZYX( Vector3 radiansXYZ ) +{ + vec_float4 angles, s, negS, c, X0, X1, Y0, Y1, Z0, Z1, tmp; + vec_float4 zero = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); + angles = Vector4( radiansXYZ, 0.0f ).get128(); + sincosf4( angles, &s, &c ); + negS = negatef4( s ); + Z0 = vec_mergel( c, s ); + Z1 = vec_mergel( negS, c ); + Z1 = vec_andc( Z1, (vec_float4)_VECTORMATH_MASK_0x000F ); + Y0 = vec_perm( negS, c, _VECTORMATH_PERM_BBYX ); + Y1 = vec_perm( c, s, _VECTORMATH_PERM_BBYX ); + X0 = vec_splat( s, 0 ); + X1 = vec_splat( c, 0 ); + tmp = vec_madd( Z0, Y1, zero ); + return Matrix4( + Vector4( vec_madd( Z0, Y0, zero ) ), + Vector4( vec_madd( Z1, X1, vec_madd( tmp, X0, zero ) ) ), + Vector4( vec_nmsub( Z1, X0, vec_madd( tmp, X1, zero ) ) ), + Vector4::wAxis( ) + ); +} + +inline const Matrix4 Matrix4::rotation( float radians, Vector3 unitVec ) +{ + return rotation( floatInVec(radians), unitVec ); +} + +inline const Matrix4 Matrix4::rotation( floatInVec radians, Vector3 unitVec ) +{ + vec_float4 axis, s, c, oneMinusC, axisS, negAxisS, xxxx, yyyy, zzzz, tmp0, tmp1, tmp2, zeroW; + vec_float4 zero = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); + axis = unitVec.get128(); + sincosf4( radians.get128(), &s, &c ); + xxxx = vec_splat( axis, 0 ); + yyyy = vec_splat( axis, 1 ); + zzzz = vec_splat( axis, 2 ); + oneMinusC = vec_sub( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), c ); + axisS = vec_madd( axis, s, zero ); + negAxisS = negatef4( axisS ); + tmp0 = vec_perm( axisS, negAxisS, _VECTORMATH_PERM_XZBX ); + tmp1 = vec_perm( axisS, negAxisS, _VECTORMATH_PERM_CXXX ); + tmp2 = vec_perm( axisS, negAxisS, _VECTORMATH_PERM_YAXX ); + tmp0 = vec_sel( tmp0, c, _VECTORMATH_MASK_0xF000 ); + tmp1 = vec_sel( tmp1, c, _VECTORMATH_MASK_0x0F00 ); + tmp2 = vec_sel( tmp2, c, _VECTORMATH_MASK_0x00F0 ); + zeroW = (vec_float4)_VECTORMATH_MASK_0x000F; + axis = vec_andc( axis, zeroW ); + tmp0 = vec_andc( tmp0, zeroW ); + tmp1 = vec_andc( tmp1, zeroW ); + tmp2 = vec_andc( tmp2, zeroW ); + return Matrix4( + Vector4( vec_madd( vec_madd( axis, xxxx, zero ), oneMinusC, tmp0 ) ), + Vector4( vec_madd( vec_madd( axis, yyyy, zero ), oneMinusC, tmp1 ) ), + Vector4( vec_madd( vec_madd( axis, zzzz, zero ), oneMinusC, tmp2 ) ), + Vector4::wAxis( ) + ); +} + +inline const Matrix4 Matrix4::rotation( Quat unitQuat ) +{ + return Matrix4( Transform3::rotation( unitQuat ) ); +} + +inline const Matrix4 Matrix4::scale( Vector3 scaleVec ) +{ + vec_float4 zero = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); + return Matrix4( + Vector4( vec_sel( zero, scaleVec.get128(), _VECTORMATH_MASK_0xF000 ) ), + Vector4( vec_sel( zero, scaleVec.get128(), _VECTORMATH_MASK_0x0F00 ) ), + Vector4( vec_sel( zero, scaleVec.get128(), _VECTORMATH_MASK_0x00F0 ) ), + Vector4::wAxis( ) + ); +} + +inline const Matrix4 appendScale( const Matrix4 & mat, Vector3 scaleVec ) +{ + return Matrix4( + ( mat.getCol0() * scaleVec.getX( ) ), + ( mat.getCol1() * scaleVec.getY( ) ), + ( mat.getCol2() * scaleVec.getZ( ) ), + mat.getCol3() + ); +} + +inline const Matrix4 prependScale( Vector3 scaleVec, const Matrix4 & mat ) +{ + Vector4 scale4; + scale4 = Vector4( scaleVec, 1.0f ); + return Matrix4( + mulPerElem( mat.getCol0(), scale4 ), + mulPerElem( mat.getCol1(), scale4 ), + mulPerElem( mat.getCol2(), scale4 ), + mulPerElem( mat.getCol3(), scale4 ) + ); +} + +inline const Matrix4 Matrix4::translation( Vector3 translateVec ) +{ + return Matrix4( + Vector4::xAxis( ), + Vector4::yAxis( ), + Vector4::zAxis( ), + Vector4( translateVec, 1.0f ) + ); +} + +inline const Matrix4 Matrix4::lookAt( Point3 eyePos, Point3 lookAtPos, Vector3 upVec ) +{ + Matrix4 m4EyeFrame; + Vector3 v3X, v3Y, v3Z; + v3Y = normalize( upVec ); + v3Z = normalize( ( eyePos - lookAtPos ) ); + v3X = normalize( cross( v3Y, v3Z ) ); + v3Y = cross( v3Z, v3X ); + m4EyeFrame = Matrix4( Vector4( v3X ), Vector4( v3Y ), Vector4( v3Z ), Vector4( eyePos ) ); + return orthoInverse( m4EyeFrame ); +} + +inline const Matrix4 Matrix4::perspective( float fovyRadians, float aspect, float zNear, float zFar ) +{ + float f, rangeInv; + vec_float4 zero, col0, col1, col2, col3; + union { vec_float4 v; float s[4]; } tmp; + f = tanf( _VECTORMATH_PI_OVER_2 - fovyRadians * 0.5f ); + rangeInv = 1.0f / ( zNear - zFar ); + zero = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); + tmp.v = zero; + tmp.s[0] = f / aspect; + col0 = tmp.v; + tmp.v = zero; + tmp.s[1] = f; + col1 = tmp.v; + tmp.v = zero; + tmp.s[2] = ( zNear + zFar ) * rangeInv; + tmp.s[3] = -1.0f; + col2 = tmp.v; + tmp.v = zero; + tmp.s[2] = zNear * zFar * rangeInv * 2.0f; + col3 = tmp.v; + return Matrix4( + Vector4( col0 ), + Vector4( col1 ), + Vector4( col2 ), + Vector4( col3 ) + ); +} + +inline const Matrix4 Matrix4::frustum( float left, float right, float bottom, float top, float zNear, float zFar ) +{ + /* function implementation based on code from STIDC SDK: */ + /* -------------------------------------------------------------- */ + /* PLEASE DO NOT MODIFY THIS SECTION */ + /* This prolog section is automatically generated. */ + /* */ + /* (C)Copyright */ + /* Sony Computer Entertainment, Inc., */ + /* Toshiba Corporation, */ + /* International Business Machines Corporation, */ + /* 2001,2002. */ + /* S/T/I Confidential Information */ + /* -------------------------------------------------------------- */ + vec_float4 lbf, rtn; + vec_float4 diff, sum, inv_diff; + vec_float4 diagonal, column, near2; + vec_float4 zero = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); + union { vec_float4 v; float s[4]; } l, f, r, n, b, t; + l.s[0] = left; + f.s[0] = zFar; + r.s[0] = right; + n.s[0] = zNear; + b.s[0] = bottom; + t.s[0] = top; + lbf = vec_mergeh( l.v, f.v ); + rtn = vec_mergeh( r.v, n.v ); + lbf = vec_mergeh( lbf, b.v ); + rtn = vec_mergeh( rtn, t.v ); + diff = vec_sub( rtn, lbf ); + sum = vec_add( rtn, lbf ); + inv_diff = recipf4( diff ); + near2 = vec_splat( n.v, 0 ); + near2 = vec_add( near2, near2 ); + diagonal = vec_madd( near2, inv_diff, zero ); + column = vec_madd( sum, inv_diff, zero ); + return Matrix4( + Vector4( vec_sel( zero, diagonal, _VECTORMATH_MASK_0xF000 ) ), + Vector4( vec_sel( zero, diagonal, _VECTORMATH_MASK_0x0F00 ) ), + Vector4( vec_sel( column, ((vec_float4){-1.0f,-1.0f,-1.0f,-1.0f}), _VECTORMATH_MASK_0x000F ) ), + Vector4( vec_sel( zero, vec_madd( diagonal, vec_splat( f.v, 0 ), zero ), _VECTORMATH_MASK_0x00F0 ) ) + ); +} + +inline const Matrix4 Matrix4::orthographic( float left, float right, float bottom, float top, float zNear, float zFar ) +{ + /* function implementation based on code from STIDC SDK: */ + /* -------------------------------------------------------------- */ + /* PLEASE DO NOT MODIFY THIS SECTION */ + /* This prolog section is automatically generated. */ + /* */ + /* (C)Copyright */ + /* Sony Computer Entertainment, Inc., */ + /* Toshiba Corporation, */ + /* International Business Machines Corporation, */ + /* 2001,2002. */ + /* S/T/I Confidential Information */ + /* -------------------------------------------------------------- */ + vec_float4 lbf, rtn; + vec_float4 diff, sum, inv_diff, neg_inv_diff; + vec_float4 diagonal, column; + vec_float4 zero = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); + union { vec_float4 v; float s[4]; } l, f, r, n, b, t; + l.s[0] = left; + f.s[0] = zFar; + r.s[0] = right; + n.s[0] = zNear; + b.s[0] = bottom; + t.s[0] = top; + lbf = vec_mergeh( l.v, f.v ); + rtn = vec_mergeh( r.v, n.v ); + lbf = vec_mergeh( lbf, b.v ); + rtn = vec_mergeh( rtn, t.v ); + diff = vec_sub( rtn, lbf ); + sum = vec_add( rtn, lbf ); + inv_diff = recipf4( diff ); + neg_inv_diff = negatef4( inv_diff ); + diagonal = vec_add( inv_diff, inv_diff ); + column = vec_madd( sum, vec_sel( neg_inv_diff, inv_diff, _VECTORMATH_MASK_0x00F0 ), zero ); + return Matrix4( + Vector4( vec_sel( zero, diagonal, _VECTORMATH_MASK_0xF000 ) ), + Vector4( vec_sel( zero, diagonal, _VECTORMATH_MASK_0x0F00 ) ), + Vector4( vec_sel( zero, diagonal, _VECTORMATH_MASK_0x00F0 ) ), + Vector4( vec_sel( column, ((vec_float4){1.0f,1.0f,1.0f,1.0f}), _VECTORMATH_MASK_0x000F ) ) + ); +} + +inline const Matrix4 select( const Matrix4 & mat0, const Matrix4 & mat1, bool select1 ) +{ + return Matrix4( + select( mat0.getCol0(), mat1.getCol0(), select1 ), + select( mat0.getCol1(), mat1.getCol1(), select1 ), + select( mat0.getCol2(), mat1.getCol2(), select1 ), + select( mat0.getCol3(), mat1.getCol3(), select1 ) + ); +} + +inline const Matrix4 select( const Matrix4 & mat0, const Matrix4 & mat1, boolInVec select1 ) +{ + return Matrix4( + select( mat0.getCol0(), mat1.getCol0(), select1 ), + select( mat0.getCol1(), mat1.getCol1(), select1 ), + select( mat0.getCol2(), mat1.getCol2(), select1 ), + select( mat0.getCol3(), mat1.getCol3(), select1 ) + ); +} + +#ifdef _VECTORMATH_DEBUG + +inline void print( const Matrix4 & mat ) +{ + print( mat.getRow( 0 ) ); + print( mat.getRow( 1 ) ); + print( mat.getRow( 2 ) ); + print( mat.getRow( 3 ) ); +} + +inline void print( const Matrix4 & mat, const char * name ) +{ + printf("%s:\n", name); + print( mat ); +} + +#endif + +inline Transform3::Transform3( const Transform3 & tfrm ) +{ + mCol0 = tfrm.mCol0; + mCol1 = tfrm.mCol1; + mCol2 = tfrm.mCol2; + mCol3 = tfrm.mCol3; +} + +inline Transform3::Transform3( float scalar ) +{ + mCol0 = Vector3( scalar ); + mCol1 = Vector3( scalar ); + mCol2 = Vector3( scalar ); + mCol3 = Vector3( scalar ); +} + +inline Transform3::Transform3( floatInVec scalar ) +{ + mCol0 = Vector3( scalar ); + mCol1 = Vector3( scalar ); + mCol2 = Vector3( scalar ); + mCol3 = Vector3( scalar ); +} + +inline Transform3::Transform3( Vector3 _col0, Vector3 _col1, Vector3 _col2, Vector3 _col3 ) +{ + mCol0 = _col0; + mCol1 = _col1; + mCol2 = _col2; + mCol3 = _col3; +} + +inline Transform3::Transform3( const Matrix3 & tfrm, Vector3 translateVec ) +{ + this->setUpper3x3( tfrm ); + this->setTranslation( translateVec ); +} + +inline Transform3::Transform3( Quat unitQuat, Vector3 translateVec ) +{ + this->setUpper3x3( Matrix3( unitQuat ) ); + this->setTranslation( translateVec ); +} + +inline Transform3 & Transform3::setCol0( Vector3 _col0 ) +{ + mCol0 = _col0; + return *this; +} + +inline Transform3 & Transform3::setCol1( Vector3 _col1 ) +{ + mCol1 = _col1; + return *this; +} + +inline Transform3 & Transform3::setCol2( Vector3 _col2 ) +{ + mCol2 = _col2; + return *this; +} + +inline Transform3 & Transform3::setCol3( Vector3 _col3 ) +{ + mCol3 = _col3; + return *this; +} + +inline Transform3 & Transform3::setCol( int col, Vector3 vec ) +{ + *(&mCol0 + col) = vec; + return *this; +} + +inline Transform3 & Transform3::setRow( int row, Vector4 vec ) +{ + mCol0.setElem( row, vec.getElem( 0 ) ); + mCol1.setElem( row, vec.getElem( 1 ) ); + mCol2.setElem( row, vec.getElem( 2 ) ); + mCol3.setElem( row, vec.getElem( 3 ) ); + return *this; +} + +inline Transform3 & Transform3::setElem( int col, int row, float val ) +{ + (*this)[col].setElem(row, val); + return *this; +} + +inline Transform3 & Transform3::setElem( int col, int row, floatInVec val ) +{ + Vector3 tmpV3_0; + tmpV3_0 = this->getCol( col ); + tmpV3_0.setElem( row, val ); + this->setCol( col, tmpV3_0 ); + return *this; +} + +inline const floatInVec Transform3::getElem( int col, int row ) const +{ + return this->getCol( col ).getElem( row ); +} + +inline const Vector3 Transform3::getCol0( ) const +{ + return mCol0; +} + +inline const Vector3 Transform3::getCol1( ) const +{ + return mCol1; +} + +inline const Vector3 Transform3::getCol2( ) const +{ + return mCol2; +} + +inline const Vector3 Transform3::getCol3( ) const +{ + return mCol3; +} + +inline const Vector3 Transform3::getCol( int col ) const +{ + return *(&mCol0 + col); +} + +inline const Vector4 Transform3::getRow( int row ) const +{ + return Vector4( mCol0.getElem( row ), mCol1.getElem( row ), mCol2.getElem( row ), mCol3.getElem( row ) ); +} + +inline Vector3 & Transform3::operator []( int col ) +{ + return *(&mCol0 + col); +} + +inline const Vector3 Transform3::operator []( int col ) const +{ + return *(&mCol0 + col); +} + +inline Transform3 & Transform3::operator =( const Transform3 & tfrm ) +{ + mCol0 = tfrm.mCol0; + mCol1 = tfrm.mCol1; + mCol2 = tfrm.mCol2; + mCol3 = tfrm.mCol3; + return *this; +} + +inline const Transform3 inverse( const Transform3 & tfrm ) +{ + vec_float4 inv0, inv1, inv2, inv3; + vec_float4 tmp0, tmp1, tmp2, tmp3, tmp4, dot, invdet; + vec_float4 xxxx, yyyy, zzzz; + vec_float4 zero = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); + tmp2 = _vmathVfCross( tfrm.getCol0().get128(), tfrm.getCol1().get128() ); + tmp0 = _vmathVfCross( tfrm.getCol1().get128(), tfrm.getCol2().get128() ); + tmp1 = _vmathVfCross( tfrm.getCol2().get128(), tfrm.getCol0().get128() ); + inv3 = negatef4( tfrm.getCol3().get128() ); + dot = _vmathVfDot3( tmp2, tfrm.getCol2().get128() ); + dot = vec_splat( dot, 0 ); + invdet = recipf4( dot ); + tmp3 = vec_mergeh( tmp0, tmp2 ); + tmp4 = vec_mergel( tmp0, tmp2 ); + inv0 = vec_mergeh( tmp3, tmp1 ); + xxxx = vec_splat( inv3, 0 ); + inv1 = vec_perm( tmp3, tmp1, _VECTORMATH_PERM_ZBWX ); + inv2 = vec_perm( tmp4, tmp1, _VECTORMATH_PERM_XCYX ); + yyyy = vec_splat( inv3, 1 ); + zzzz = vec_splat( inv3, 2 ); + inv3 = vec_madd( inv0, xxxx, zero ); + inv3 = vec_madd( inv1, yyyy, inv3 ); + inv3 = vec_madd( inv2, zzzz, inv3 ); + inv0 = vec_madd( inv0, invdet, zero ); + inv1 = vec_madd( inv1, invdet, zero ); + inv2 = vec_madd( inv2, invdet, zero ); + inv3 = vec_madd( inv3, invdet, zero ); + return Transform3( + Vector3( inv0 ), + Vector3( inv1 ), + Vector3( inv2 ), + Vector3( inv3 ) + ); +} + +inline const Transform3 orthoInverse( const Transform3 & tfrm ) +{ + vec_float4 inv0, inv1, inv2, inv3; + vec_float4 tmp0, tmp1; + vec_float4 xxxx, yyyy, zzzz; + tmp0 = vec_mergeh( tfrm.getCol0().get128(), tfrm.getCol2().get128() ); + tmp1 = vec_mergel( tfrm.getCol0().get128(), tfrm.getCol2().get128() ); + inv3 = negatef4( tfrm.getCol3().get128() ); + inv0 = vec_mergeh( tmp0, tfrm.getCol1().get128() ); + xxxx = vec_splat( inv3, 0 ); + inv1 = vec_perm( tmp0, tfrm.getCol1().get128(), _VECTORMATH_PERM_ZBWX ); + inv2 = vec_perm( tmp1, tfrm.getCol1().get128(), _VECTORMATH_PERM_XCYX ); + yyyy = vec_splat( inv3, 1 ); + zzzz = vec_splat( inv3, 2 ); + inv3 = vec_madd( inv0, xxxx, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + inv3 = vec_madd( inv1, yyyy, inv3 ); + inv3 = vec_madd( inv2, zzzz, inv3 ); + return Transform3( + Vector3( inv0 ), + Vector3( inv1 ), + Vector3( inv2 ), + Vector3( inv3 ) + ); +} + +inline const Transform3 absPerElem( const Transform3 & tfrm ) +{ + return Transform3( + absPerElem( tfrm.getCol0() ), + absPerElem( tfrm.getCol1() ), + absPerElem( tfrm.getCol2() ), + absPerElem( tfrm.getCol3() ) + ); +} + +inline const Vector3 Transform3::operator *( Vector3 vec ) const +{ + vec_float4 res; + vec_float4 xxxx, yyyy, zzzz; + xxxx = vec_splat( vec.get128(), 0 ); + yyyy = vec_splat( vec.get128(), 1 ); + zzzz = vec_splat( vec.get128(), 2 ); + res = vec_madd( mCol0.get128(), xxxx, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + res = vec_madd( mCol1.get128(), yyyy, res ); + res = vec_madd( mCol2.get128(), zzzz, res ); + return Vector3( res ); +} + +inline const Point3 Transform3::operator *( Point3 pnt ) const +{ + vec_float4 tmp0, tmp1, res; + vec_float4 xxxx, yyyy, zzzz; + vec_float4 zero = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); + xxxx = vec_splat( pnt.get128(), 0 ); + yyyy = vec_splat( pnt.get128(), 1 ); + zzzz = vec_splat( pnt.get128(), 2 ); + tmp0 = vec_madd( mCol0.get128(), xxxx, zero ); + tmp1 = vec_madd( mCol1.get128(), yyyy, zero ); + tmp0 = vec_madd( mCol2.get128(), zzzz, tmp0 ); + tmp1 = vec_add( mCol3.get128(), tmp1 ); + res = vec_add( tmp0, tmp1 ); + return Point3( res ); +} + +inline const Transform3 Transform3::operator *( const Transform3 & tfrm ) const +{ + return Transform3( + ( *this * tfrm.mCol0 ), + ( *this * tfrm.mCol1 ), + ( *this * tfrm.mCol2 ), + Vector3( ( *this * Point3( tfrm.mCol3 ) ) ) + ); +} + +inline Transform3 & Transform3::operator *=( const Transform3 & tfrm ) +{ + *this = *this * tfrm; + return *this; +} + +inline const Transform3 mulPerElem( const Transform3 & tfrm0, const Transform3 & tfrm1 ) +{ + return Transform3( + mulPerElem( tfrm0.getCol0(), tfrm1.getCol0() ), + mulPerElem( tfrm0.getCol1(), tfrm1.getCol1() ), + mulPerElem( tfrm0.getCol2(), tfrm1.getCol2() ), + mulPerElem( tfrm0.getCol3(), tfrm1.getCol3() ) + ); +} + +inline const Transform3 Transform3::identity( ) +{ + return Transform3( + Vector3::xAxis( ), + Vector3::yAxis( ), + Vector3::zAxis( ), + Vector3( 0.0f ) + ); +} + +inline Transform3 & Transform3::setUpper3x3( const Matrix3 & tfrm ) +{ + mCol0 = tfrm.getCol0(); + mCol1 = tfrm.getCol1(); + mCol2 = tfrm.getCol2(); + return *this; +} + +inline const Matrix3 Transform3::getUpper3x3( ) const +{ + return Matrix3( mCol0, mCol1, mCol2 ); +} + +inline Transform3 & Transform3::setTranslation( Vector3 translateVec ) +{ + mCol3 = translateVec; + return *this; +} + +inline const Vector3 Transform3::getTranslation( ) const +{ + return mCol3; +} + +inline const Transform3 Transform3::rotationX( float radians ) +{ + return rotationX( floatInVec(radians) ); +} + +inline const Transform3 Transform3::rotationX( floatInVec radians ) +{ + vec_float4 s, c, res1, res2; + vec_uint4 select_y, select_z; + vec_float4 zero; + select_y = _VECTORMATH_MASK_0x0F00; + select_z = _VECTORMATH_MASK_0x00F0; + zero = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); + sincosf4( radians.get128(), &s, &c ); + res1 = vec_sel( zero, c, select_y ); + res1 = vec_sel( res1, s, select_z ); + res2 = vec_sel( zero, negatef4(s), select_y ); + res2 = vec_sel( res2, c, select_z ); + return Transform3( + Vector3::xAxis( ), + Vector3( res1 ), + Vector3( res2 ), + Vector3( 0.0f ) + ); +} + +inline const Transform3 Transform3::rotationY( float radians ) +{ + return rotationY( floatInVec(radians) ); +} + +inline const Transform3 Transform3::rotationY( floatInVec radians ) +{ + vec_float4 s, c, res0, res2; + vec_uint4 select_x, select_z; + vec_float4 zero; + select_x = _VECTORMATH_MASK_0xF000; + select_z = _VECTORMATH_MASK_0x00F0; + zero = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); + sincosf4( radians.get128(), &s, &c ); + res0 = vec_sel( zero, c, select_x ); + res0 = vec_sel( res0, negatef4(s), select_z ); + res2 = vec_sel( zero, s, select_x ); + res2 = vec_sel( res2, c, select_z ); + return Transform3( + Vector3( res0 ), + Vector3::yAxis( ), + Vector3( res2 ), + Vector3( 0.0f ) + ); +} + +inline const Transform3 Transform3::rotationZ( float radians ) +{ + return rotationZ( floatInVec(radians) ); +} + +inline const Transform3 Transform3::rotationZ( floatInVec radians ) +{ + vec_float4 s, c, res0, res1; + vec_uint4 select_x, select_y; + vec_float4 zero; + select_x = _VECTORMATH_MASK_0xF000; + select_y = _VECTORMATH_MASK_0x0F00; + zero = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); + sincosf4( radians.get128(), &s, &c ); + res0 = vec_sel( zero, c, select_x ); + res0 = vec_sel( res0, s, select_y ); + res1 = vec_sel( zero, negatef4(s), select_x ); + res1 = vec_sel( res1, c, select_y ); + return Transform3( + Vector3( res0 ), + Vector3( res1 ), + Vector3::zAxis( ), + Vector3( 0.0f ) + ); +} + +inline const Transform3 Transform3::rotationZYX( Vector3 radiansXYZ ) +{ + vec_float4 angles, s, negS, c, X0, X1, Y0, Y1, Z0, Z1, tmp; + vec_float4 zero = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); + angles = Vector4( radiansXYZ, 0.0f ).get128(); + sincosf4( angles, &s, &c ); + negS = negatef4( s ); + Z0 = vec_mergel( c, s ); + Z1 = vec_mergel( negS, c ); + Z1 = vec_andc( Z1, (vec_float4)_VECTORMATH_MASK_0x000F ); + Y0 = vec_perm( negS, c, _VECTORMATH_PERM_BBYX ); + Y1 = vec_perm( c, s, _VECTORMATH_PERM_BBYX ); + X0 = vec_splat( s, 0 ); + X1 = vec_splat( c, 0 ); + tmp = vec_madd( Z0, Y1, zero ); + return Transform3( + Vector3( vec_madd( Z0, Y0, zero ) ), + Vector3( vec_madd( Z1, X1, vec_madd( tmp, X0, zero ) ) ), + Vector3( vec_nmsub( Z1, X0, vec_madd( tmp, X1, zero ) ) ), + Vector3( 0.0f ) + ); +} + +inline const Transform3 Transform3::rotation( float radians, Vector3 unitVec ) +{ + return rotation( floatInVec(radians), unitVec ); +} + +inline const Transform3 Transform3::rotation( floatInVec radians, Vector3 unitVec ) +{ + return Transform3( Matrix3::rotation( radians, unitVec ), Vector3( 0.0f ) ); +} + +inline const Transform3 Transform3::rotation( Quat unitQuat ) +{ + return Transform3( Matrix3( unitQuat ), Vector3( 0.0f ) ); +} + +inline const Transform3 Transform3::scale( Vector3 scaleVec ) +{ + vec_float4 zero = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); + return Transform3( + Vector3( vec_sel( zero, scaleVec.get128(), _VECTORMATH_MASK_0xF000 ) ), + Vector3( vec_sel( zero, scaleVec.get128(), _VECTORMATH_MASK_0x0F00 ) ), + Vector3( vec_sel( zero, scaleVec.get128(), _VECTORMATH_MASK_0x00F0 ) ), + Vector3( 0.0f ) + ); +} + +inline const Transform3 appendScale( const Transform3 & tfrm, Vector3 scaleVec ) +{ + return Transform3( + ( tfrm.getCol0() * scaleVec.getX( ) ), + ( tfrm.getCol1() * scaleVec.getY( ) ), + ( tfrm.getCol2() * scaleVec.getZ( ) ), + tfrm.getCol3() + ); +} + +inline const Transform3 prependScale( Vector3 scaleVec, const Transform3 & tfrm ) +{ + return Transform3( + mulPerElem( tfrm.getCol0(), scaleVec ), + mulPerElem( tfrm.getCol1(), scaleVec ), + mulPerElem( tfrm.getCol2(), scaleVec ), + mulPerElem( tfrm.getCol3(), scaleVec ) + ); +} + +inline const Transform3 Transform3::translation( Vector3 translateVec ) +{ + return Transform3( + Vector3::xAxis( ), + Vector3::yAxis( ), + Vector3::zAxis( ), + translateVec + ); +} + +inline const Transform3 select( const Transform3 & tfrm0, const Transform3 & tfrm1, bool select1 ) +{ + return Transform3( + select( tfrm0.getCol0(), tfrm1.getCol0(), select1 ), + select( tfrm0.getCol1(), tfrm1.getCol1(), select1 ), + select( tfrm0.getCol2(), tfrm1.getCol2(), select1 ), + select( tfrm0.getCol3(), tfrm1.getCol3(), select1 ) + ); +} + +inline const Transform3 select( const Transform3 & tfrm0, const Transform3 & tfrm1, boolInVec select1 ) +{ + return Transform3( + select( tfrm0.getCol0(), tfrm1.getCol0(), select1 ), + select( tfrm0.getCol1(), tfrm1.getCol1(), select1 ), + select( tfrm0.getCol2(), tfrm1.getCol2(), select1 ), + select( tfrm0.getCol3(), tfrm1.getCol3(), select1 ) + ); +} + +#ifdef _VECTORMATH_DEBUG + +inline void print( const Transform3 & tfrm ) +{ + print( tfrm.getRow( 0 ) ); + print( tfrm.getRow( 1 ) ); + print( tfrm.getRow( 2 ) ); +} + +inline void print( const Transform3 & tfrm, const char * name ) +{ + printf("%s:\n", name); + print( tfrm ); +} + +#endif + +inline Quat::Quat( const Matrix3 & tfrm ) +{ + vec_float4 res; + vec_float4 col0, col1, col2; + vec_float4 xx_yy, xx_yy_zz_xx, yy_zz_xx_yy, zz_xx_yy_zz, diagSum, diagDiff; + vec_float4 zy_xz_yx, yz_zx_xy, sum, diff; + vec_float4 radicand, invSqrt, scale; + vec_float4 res0, res1, res2, res3; + vec_float4 xx, yy, zz; + vec_uint4 select_x = _VECTORMATH_MASK_0xF000; + vec_uint4 select_y = _VECTORMATH_MASK_0x0F00; + vec_uint4 select_z = _VECTORMATH_MASK_0x00F0; + vec_uint4 select_w = _VECTORMATH_MASK_0x000F; + vec_float4 zero = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); + + col0 = tfrm.getCol0().get128(); + col1 = tfrm.getCol1().get128(); + col2 = tfrm.getCol2().get128(); + + /* four cases: */ + /* trace > 0 */ + /* else */ + /* xx largest diagonal element */ + /* yy largest diagonal element */ + /* zz largest diagonal element */ + + /* compute quaternion for each case */ + + xx_yy = vec_sel( col0, col1, select_y ); + xx_yy_zz_xx = vec_perm( xx_yy, col2, _VECTORMATH_PERM_XYCX ); + yy_zz_xx_yy = vec_perm( xx_yy, col2, _VECTORMATH_PERM_YCXY ); + zz_xx_yy_zz = vec_perm( xx_yy, col2, _VECTORMATH_PERM_CXYC ); + + diagSum = vec_add( vec_add( xx_yy_zz_xx, yy_zz_xx_yy ), zz_xx_yy_zz ); + diagDiff = vec_sub( vec_sub( xx_yy_zz_xx, yy_zz_xx_yy ), zz_xx_yy_zz ); + radicand = vec_add( vec_sel( diagDiff, diagSum, select_w ), ((vec_float4){1.0f,1.0f,1.0f,1.0f}) ); + invSqrt = rsqrtf4( radicand ); + + zy_xz_yx = vec_sel( col0, col1, select_z ); + zy_xz_yx = vec_perm( zy_xz_yx, col2, _VECTORMATH_PERM_ZAYX ); + yz_zx_xy = vec_sel( col0, col1, select_x ); + yz_zx_xy = vec_perm( yz_zx_xy, col2, _VECTORMATH_PERM_BZXX ); + + sum = vec_add( zy_xz_yx, yz_zx_xy ); + diff = vec_sub( zy_xz_yx, yz_zx_xy ); + + scale = vec_madd( invSqrt, ((vec_float4){0.5f,0.5f,0.5f,0.5f}), zero ); + res0 = vec_perm( sum, diff, _VECTORMATH_PERM_XZYA ); + res1 = vec_perm( sum, diff, _VECTORMATH_PERM_ZXXB ); + res2 = vec_perm( sum, diff, _VECTORMATH_PERM_YXXC ); + res3 = diff; + res0 = vec_sel( res0, radicand, select_x ); + res1 = vec_sel( res1, radicand, select_y ); + res2 = vec_sel( res2, radicand, select_z ); + res3 = vec_sel( res3, radicand, select_w ); + res0 = vec_madd( res0, vec_splat( scale, 0 ), zero ); + res1 = vec_madd( res1, vec_splat( scale, 1 ), zero ); + res2 = vec_madd( res2, vec_splat( scale, 2 ), zero ); + res3 = vec_madd( res3, vec_splat( scale, 3 ), zero ); + + /* determine case and select answer */ + + xx = vec_splat( col0, 0 ); + yy = vec_splat( col1, 1 ); + zz = vec_splat( col2, 2 ); + res = vec_sel( res0, res1, vec_cmpgt( yy, xx ) ); + res = vec_sel( res, res2, vec_and( vec_cmpgt( zz, xx ), vec_cmpgt( zz, yy ) ) ); + res = vec_sel( res, res3, vec_cmpgt( vec_splat( diagSum, 0 ), zero ) ); + mVec128 = res; +} + +inline const Matrix3 outer( Vector3 tfrm0, Vector3 tfrm1 ) +{ + return Matrix3( + ( tfrm0 * tfrm1.getX( ) ), + ( tfrm0 * tfrm1.getY( ) ), + ( tfrm0 * tfrm1.getZ( ) ) + ); +} + +inline const Matrix4 outer( Vector4 tfrm0, Vector4 tfrm1 ) +{ + return Matrix4( + ( tfrm0 * tfrm1.getX( ) ), + ( tfrm0 * tfrm1.getY( ) ), + ( tfrm0 * tfrm1.getZ( ) ), + ( tfrm0 * tfrm1.getW( ) ) + ); +} + +inline const Vector3 rowMul( Vector3 vec, const Matrix3 & mat ) +{ + vec_float4 tmp0, tmp1, mcol0, mcol1, mcol2, res; + vec_float4 xxxx, yyyy, zzzz; + tmp0 = vec_mergeh( mat.getCol0().get128(), mat.getCol2().get128() ); + tmp1 = vec_mergel( mat.getCol0().get128(), mat.getCol2().get128() ); + xxxx = vec_splat( vec.get128(), 0 ); + mcol0 = vec_mergeh( tmp0, mat.getCol1().get128() ); + mcol1 = vec_perm( tmp0, mat.getCol1().get128(), _VECTORMATH_PERM_ZBWX ); + mcol2 = vec_perm( tmp1, mat.getCol1().get128(), _VECTORMATH_PERM_XCYX ); + yyyy = vec_splat( vec.get128(), 1 ); + res = vec_madd( mcol0, xxxx, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + zzzz = vec_splat( vec.get128(), 2 ); + res = vec_madd( mcol1, yyyy, res ); + res = vec_madd( mcol2, zzzz, res ); + return Vector3( res ); +} + +inline const Matrix3 crossMatrix( Vector3 vec ) +{ + vec_float4 neg, res0, res1, res2; + neg = negatef4( vec.get128() ); + res0 = vec_perm( vec.get128(), neg, _VECTORMATH_PERM_XZBX ); + res1 = vec_perm( vec.get128(), neg, _VECTORMATH_PERM_CXXX ); + res2 = vec_perm( vec.get128(), neg, _VECTORMATH_PERM_YAXX ); + res0 = vec_andc( res0, (vec_float4)_VECTORMATH_MASK_0xF000 ); + res1 = vec_andc( res1, (vec_float4)_VECTORMATH_MASK_0x0F00 ); + res2 = vec_andc( res2, (vec_float4)_VECTORMATH_MASK_0x00F0 ); + return Matrix3( + Vector3( res0 ), + Vector3( res1 ), + Vector3( res2 ) + ); +} + +inline const Matrix3 crossMatrixMul( Vector3 vec, const Matrix3 & mat ) +{ + return Matrix3( cross( vec, mat.getCol0() ), cross( vec, mat.getCol1() ), cross( vec, mat.getCol2() ) ); +} + +} // namespace Aos +} // namespace Vectormath + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/ppu/cpp/mat_soa.h b/Extras/vectormathlibrary/include/vectormath/ppu/cpp/mat_soa.h new file mode 100644 index 000000000..7868cfd4b --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/ppu/cpp/mat_soa.h @@ -0,0 +1,1744 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_MAT_SOA_CPP_H +#define _VECTORMATH_MAT_SOA_CPP_H + +namespace Vectormath { +namespace Soa { + +//----------------------------------------------------------------------------- +// Constants + +#define _VECTORMATH_PI_OVER_2 1.570796327f + +//----------------------------------------------------------------------------- +// Definitions + +inline Matrix3::Matrix3( const Matrix3 & mat ) +{ + mCol0 = mat.mCol0; + mCol1 = mat.mCol1; + mCol2 = mat.mCol2; +} + +inline Matrix3::Matrix3( vec_float4 scalar ) +{ + mCol0 = Vector3( scalar ); + mCol1 = Vector3( scalar ); + mCol2 = Vector3( scalar ); +} + +inline Matrix3::Matrix3( const Quat & unitQuat ) +{ + vec_float4 qx, qy, qz, qw, qx2, qy2, qz2, qxqx2, qyqy2, qzqz2, qxqy2, qyqz2, qzqw2, qxqz2, qyqw2, qxqw2; + qx = unitQuat.getX(); + qy = unitQuat.getY(); + qz = unitQuat.getZ(); + qw = unitQuat.getW(); + qx2 = vec_add( qx, qx ); + qy2 = vec_add( qy, qy ); + qz2 = vec_add( qz, qz ); + qxqx2 = vec_madd( qx, qx2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + qxqy2 = vec_madd( qx, qy2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + qxqz2 = vec_madd( qx, qz2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + qxqw2 = vec_madd( qw, qx2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + qyqy2 = vec_madd( qy, qy2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + qyqz2 = vec_madd( qy, qz2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + qyqw2 = vec_madd( qw, qy2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + qzqz2 = vec_madd( qz, qz2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + qzqw2 = vec_madd( qw, qz2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + mCol0 = Vector3( vec_sub( vec_sub( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), qyqy2 ), qzqz2 ), vec_add( qxqy2, qzqw2 ), vec_sub( qxqz2, qyqw2 ) ); + mCol1 = Vector3( vec_sub( qxqy2, qzqw2 ), vec_sub( vec_sub( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), qxqx2 ), qzqz2 ), vec_add( qyqz2, qxqw2 ) ); + mCol2 = Vector3( vec_add( qxqz2, qyqw2 ), vec_sub( qyqz2, qxqw2 ), vec_sub( vec_sub( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), qxqx2 ), qyqy2 ) ); +} + +inline Matrix3::Matrix3( const Vector3 & _col0, const Vector3 & _col1, const Vector3 & _col2 ) +{ + mCol0 = _col0; + mCol1 = _col1; + mCol2 = _col2; +} + +inline Matrix3::Matrix3( const Aos::Matrix3 & mat ) +{ + mCol0 = Vector3( mat.getCol0() ); + mCol1 = Vector3( mat.getCol1() ); + mCol2 = Vector3( mat.getCol2() ); +} + +inline Matrix3::Matrix3( const Aos::Matrix3 & mat0, const Aos::Matrix3 & mat1, const Aos::Matrix3 & mat2, const Aos::Matrix3 & mat3 ) +{ + mCol0 = Vector3( mat0.getCol0(), mat1.getCol0(), mat2.getCol0(), mat3.getCol0() ); + mCol1 = Vector3( mat0.getCol1(), mat1.getCol1(), mat2.getCol1(), mat3.getCol1() ); + mCol2 = Vector3( mat0.getCol2(), mat1.getCol2(), mat2.getCol2(), mat3.getCol2() ); +} + +inline void Matrix3::get4Aos( Aos::Matrix3 & result0, Aos::Matrix3 & result1, Aos::Matrix3 & result2, Aos::Matrix3 & result3 ) const +{ + Aos::Vector3 tmpV3_0, tmpV3_1, tmpV3_2, tmpV3_3; + mCol0.get4Aos( tmpV3_0, tmpV3_1, tmpV3_2, tmpV3_3 ); + result0.setCol0( tmpV3_0 ); + result1.setCol0( tmpV3_1 ); + result2.setCol0( tmpV3_2 ); + result3.setCol0( tmpV3_3 ); + mCol1.get4Aos( tmpV3_0, tmpV3_1, tmpV3_2, tmpV3_3 ); + result0.setCol1( tmpV3_0 ); + result1.setCol1( tmpV3_1 ); + result2.setCol1( tmpV3_2 ); + result3.setCol1( tmpV3_3 ); + mCol2.get4Aos( tmpV3_0, tmpV3_1, tmpV3_2, tmpV3_3 ); + result0.setCol2( tmpV3_0 ); + result1.setCol2( tmpV3_1 ); + result2.setCol2( tmpV3_2 ); + result3.setCol2( tmpV3_3 ); +} + +inline Matrix3 & Matrix3::setCol0( const Vector3 & _col0 ) +{ + mCol0 = _col0; + return *this; +} + +inline Matrix3 & Matrix3::setCol1( const Vector3 & _col1 ) +{ + mCol1 = _col1; + return *this; +} + +inline Matrix3 & Matrix3::setCol2( const Vector3 & _col2 ) +{ + mCol2 = _col2; + return *this; +} + +inline Matrix3 & Matrix3::setCol( int col, const Vector3 & vec ) +{ + *(&mCol0 + col) = vec; + return *this; +} + +inline Matrix3 & Matrix3::setRow( int row, const Vector3 & vec ) +{ + mCol0.setElem( row, vec.getElem( 0 ) ); + mCol1.setElem( row, vec.getElem( 1 ) ); + mCol2.setElem( row, vec.getElem( 2 ) ); + return *this; +} + +inline Matrix3 & Matrix3::setElem( int col, int row, vec_float4 val ) +{ + Vector3 tmpV3_0; + tmpV3_0 = this->getCol( col ); + tmpV3_0.setElem( row, val ); + this->setCol( col, tmpV3_0 ); + return *this; +} + +inline vec_float4 Matrix3::getElem( int col, int row ) const +{ + return this->getCol( col ).getElem( row ); +} + +inline const Vector3 Matrix3::getCol0( ) const +{ + return mCol0; +} + +inline const Vector3 Matrix3::getCol1( ) const +{ + return mCol1; +} + +inline const Vector3 Matrix3::getCol2( ) const +{ + return mCol2; +} + +inline const Vector3 Matrix3::getCol( int col ) const +{ + return *(&mCol0 + col); +} + +inline const Vector3 Matrix3::getRow( int row ) const +{ + return Vector3( mCol0.getElem( row ), mCol1.getElem( row ), mCol2.getElem( row ) ); +} + +inline Vector3 & Matrix3::operator []( int col ) +{ + return *(&mCol0 + col); +} + +inline const Vector3 Matrix3::operator []( int col ) const +{ + return *(&mCol0 + col); +} + +inline Matrix3 & Matrix3::operator =( const Matrix3 & mat ) +{ + mCol0 = mat.mCol0; + mCol1 = mat.mCol1; + mCol2 = mat.mCol2; + return *this; +} + +inline const Matrix3 transpose( const Matrix3 & mat ) +{ + return Matrix3( + Vector3( mat.getCol0().getX(), mat.getCol1().getX(), mat.getCol2().getX() ), + Vector3( mat.getCol0().getY(), mat.getCol1().getY(), mat.getCol2().getY() ), + Vector3( mat.getCol0().getZ(), mat.getCol1().getZ(), mat.getCol2().getZ() ) + ); +} + +inline const Matrix3 inverse( const Matrix3 & mat ) +{ + Vector3 tmp0, tmp1, tmp2; + vec_float4 detinv; + tmp0 = cross( mat.getCol1(), mat.getCol2() ); + tmp1 = cross( mat.getCol2(), mat.getCol0() ); + tmp2 = cross( mat.getCol0(), mat.getCol1() ); + detinv = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), dot( mat.getCol2(), tmp2 ) ); + return Matrix3( + Vector3( vec_madd( tmp0.getX(), detinv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( tmp1.getX(), detinv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( tmp2.getX(), detinv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), + Vector3( vec_madd( tmp0.getY(), detinv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( tmp1.getY(), detinv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( tmp2.getY(), detinv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), + Vector3( vec_madd( tmp0.getZ(), detinv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( tmp1.getZ(), detinv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( tmp2.getZ(), detinv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ) + ); +} + +inline vec_float4 determinant( const Matrix3 & mat ) +{ + return dot( mat.getCol2(), cross( mat.getCol0(), mat.getCol1() ) ); +} + +inline const Matrix3 Matrix3::operator +( const Matrix3 & mat ) const +{ + return Matrix3( + ( mCol0 + mat.mCol0 ), + ( mCol1 + mat.mCol1 ), + ( mCol2 + mat.mCol2 ) + ); +} + +inline const Matrix3 Matrix3::operator -( const Matrix3 & mat ) const +{ + return Matrix3( + ( mCol0 - mat.mCol0 ), + ( mCol1 - mat.mCol1 ), + ( mCol2 - mat.mCol2 ) + ); +} + +inline Matrix3 & Matrix3::operator +=( const Matrix3 & mat ) +{ + *this = *this + mat; + return *this; +} + +inline Matrix3 & Matrix3::operator -=( const Matrix3 & mat ) +{ + *this = *this - mat; + return *this; +} + +inline const Matrix3 Matrix3::operator -( ) const +{ + return Matrix3( + ( -mCol0 ), + ( -mCol1 ), + ( -mCol2 ) + ); +} + +inline const Matrix3 absPerElem( const Matrix3 & mat ) +{ + return Matrix3( + absPerElem( mat.getCol0() ), + absPerElem( mat.getCol1() ), + absPerElem( mat.getCol2() ) + ); +} + +inline const Matrix3 Matrix3::operator *( vec_float4 scalar ) const +{ + return Matrix3( + ( mCol0 * scalar ), + ( mCol1 * scalar ), + ( mCol2 * scalar ) + ); +} + +inline Matrix3 & Matrix3::operator *=( vec_float4 scalar ) +{ + *this = *this * scalar; + return *this; +} + +inline const Matrix3 operator *( vec_float4 scalar, const Matrix3 & mat ) +{ + return mat * scalar; +} + +inline const Vector3 Matrix3::operator *( const Vector3 & vec ) const +{ + return Vector3( + vec_add( vec_add( vec_madd( mCol0.getX(), vec.getX(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mCol1.getX(), vec.getY(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mCol2.getX(), vec.getZ(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), + vec_add( vec_add( vec_madd( mCol0.getY(), vec.getX(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mCol1.getY(), vec.getY(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mCol2.getY(), vec.getZ(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), + vec_add( vec_add( vec_madd( mCol0.getZ(), vec.getX(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mCol1.getZ(), vec.getY(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mCol2.getZ(), vec.getZ(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ) + ); +} + +inline const Matrix3 Matrix3::operator *( const Matrix3 & mat ) const +{ + return Matrix3( + ( *this * mat.mCol0 ), + ( *this * mat.mCol1 ), + ( *this * mat.mCol2 ) + ); +} + +inline Matrix3 & Matrix3::operator *=( const Matrix3 & mat ) +{ + *this = *this * mat; + return *this; +} + +inline const Matrix3 mulPerElem( const Matrix3 & mat0, const Matrix3 & mat1 ) +{ + return Matrix3( + mulPerElem( mat0.getCol0(), mat1.getCol0() ), + mulPerElem( mat0.getCol1(), mat1.getCol1() ), + mulPerElem( mat0.getCol2(), mat1.getCol2() ) + ); +} + +inline const Matrix3 Matrix3::identity( ) +{ + return Matrix3( + Vector3::xAxis( ), + Vector3::yAxis( ), + Vector3::zAxis( ) + ); +} + +inline const Matrix3 Matrix3::rotationX( vec_float4 radians ) +{ + vec_float4 s, c; + sincosf4( radians, &s, &c ); + return Matrix3( + Vector3::xAxis( ), + Vector3( ((vec_float4){0.0f,0.0f,0.0f,0.0f}), c, s ), + Vector3( ((vec_float4){0.0f,0.0f,0.0f,0.0f}), negatef4( s ), c ) + ); +} + +inline const Matrix3 Matrix3::rotationY( vec_float4 radians ) +{ + vec_float4 s, c; + sincosf4( radians, &s, &c ); + return Matrix3( + Vector3( c, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), negatef4( s ) ), + Vector3::yAxis( ), + Vector3( s, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), c ) + ); +} + +inline const Matrix3 Matrix3::rotationZ( vec_float4 radians ) +{ + vec_float4 s, c; + sincosf4( radians, &s, &c ); + return Matrix3( + Vector3( c, s, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), + Vector3( negatef4( s ), c, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), + Vector3::zAxis( ) + ); +} + +inline const Matrix3 Matrix3::rotationZYX( const Vector3 & radiansXYZ ) +{ + vec_float4 sX, cX, sY, cY, sZ, cZ, tmp0, tmp1; + sincosf4( radiansXYZ.getX(), &sX, &cX ); + sincosf4( radiansXYZ.getY(), &sY, &cY ); + sincosf4( radiansXYZ.getZ(), &sZ, &cZ ); + tmp0 = vec_madd( cZ, sY, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + tmp1 = vec_madd( sZ, sY, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + return Matrix3( + Vector3( vec_madd( cZ, cY, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( sZ, cY, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), negatef4( sY ) ), + Vector3( vec_sub( vec_madd( tmp0, sX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( sZ, cX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_add( vec_madd( tmp1, sX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( cZ, cX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( cY, sX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), + Vector3( vec_add( vec_madd( tmp0, cX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( sZ, sX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_sub( vec_madd( tmp1, cX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( cZ, sX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( cY, cX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ) + ); +} + +inline const Matrix3 Matrix3::rotation( vec_float4 radians, const Vector3 & unitVec ) +{ + vec_float4 x, y, z, s, c, oneMinusC, xy, yz, zx; + sincosf4( radians, &s, &c ); + x = unitVec.getX(); + y = unitVec.getY(); + z = unitVec.getZ(); + xy = vec_madd( x, y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + yz = vec_madd( y, z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + zx = vec_madd( z, x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + oneMinusC = vec_sub( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), c ); + return Matrix3( + Vector3( vec_add( vec_madd( vec_madd( x, x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), oneMinusC, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), c ), vec_add( vec_madd( xy, oneMinusC, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( z, s, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_sub( vec_madd( zx, oneMinusC, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( y, s, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ) ), + Vector3( vec_sub( vec_madd( xy, oneMinusC, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( z, s, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_add( vec_madd( vec_madd( y, y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), oneMinusC, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), c ), vec_add( vec_madd( yz, oneMinusC, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( x, s, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ) ), + Vector3( vec_add( vec_madd( zx, oneMinusC, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( y, s, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_sub( vec_madd( yz, oneMinusC, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( x, s, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_add( vec_madd( vec_madd( z, z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), oneMinusC, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), c ) ) + ); +} + +inline const Matrix3 Matrix3::rotation( const Quat & unitQuat ) +{ + return Matrix3( unitQuat ); +} + +inline const Matrix3 Matrix3::scale( const Vector3 & scaleVec ) +{ + return Matrix3( + Vector3( scaleVec.getX(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), + Vector3( ((vec_float4){0.0f,0.0f,0.0f,0.0f}), scaleVec.getY(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), + Vector3( ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), scaleVec.getZ() ) + ); +} + +inline const Matrix3 appendScale( const Matrix3 & mat, const Vector3 & scaleVec ) +{ + return Matrix3( + ( mat.getCol0() * scaleVec.getX( ) ), + ( mat.getCol1() * scaleVec.getY( ) ), + ( mat.getCol2() * scaleVec.getZ( ) ) + ); +} + +inline const Matrix3 prependScale( const Vector3 & scaleVec, const Matrix3 & mat ) +{ + return Matrix3( + mulPerElem( mat.getCol0(), scaleVec ), + mulPerElem( mat.getCol1(), scaleVec ), + mulPerElem( mat.getCol2(), scaleVec ) + ); +} + +inline const Matrix3 select( const Matrix3 & mat0, const Matrix3 & mat1, vec_uint4 select1 ) +{ + return Matrix3( + select( mat0.getCol0(), mat1.getCol0(), select1 ), + select( mat0.getCol1(), mat1.getCol1(), select1 ), + select( mat0.getCol2(), mat1.getCol2(), select1 ) + ); +} + +#ifdef _VECTORMATH_DEBUG + +inline void print( const Matrix3 & mat ) +{ + Aos::Matrix3 mat0, mat1, mat2, mat3; + mat.get4Aos( mat0, mat1, mat2, mat3 ); + printf("slot 0:\n"); + print( mat0 ); + printf("slot 1:\n"); + print( mat1 ); + printf("slot 2:\n"); + print( mat2 ); + printf("slot 3:\n"); + print( mat3 ); +} + +inline void print( const Matrix3 & mat, const char * name ) +{ + printf("%s:\n", name); + print( mat ); +} + +#endif + +inline Matrix4::Matrix4( const Matrix4 & mat ) +{ + mCol0 = mat.mCol0; + mCol1 = mat.mCol1; + mCol2 = mat.mCol2; + mCol3 = mat.mCol3; +} + +inline Matrix4::Matrix4( vec_float4 scalar ) +{ + mCol0 = Vector4( scalar ); + mCol1 = Vector4( scalar ); + mCol2 = Vector4( scalar ); + mCol3 = Vector4( scalar ); +} + +inline Matrix4::Matrix4( const Transform3 & mat ) +{ + mCol0 = Vector4( mat.getCol0(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + mCol1 = Vector4( mat.getCol1(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + mCol2 = Vector4( mat.getCol2(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + mCol3 = Vector4( mat.getCol3(), ((vec_float4){1.0f,1.0f,1.0f,1.0f}) ); +} + +inline Matrix4::Matrix4( const Vector4 & _col0, const Vector4 & _col1, const Vector4 & _col2, const Vector4 & _col3 ) +{ + mCol0 = _col0; + mCol1 = _col1; + mCol2 = _col2; + mCol3 = _col3; +} + +inline Matrix4::Matrix4( const Matrix3 & mat, const Vector3 & translateVec ) +{ + mCol0 = Vector4( mat.getCol0(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + mCol1 = Vector4( mat.getCol1(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + mCol2 = Vector4( mat.getCol2(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + mCol3 = Vector4( translateVec, ((vec_float4){1.0f,1.0f,1.0f,1.0f}) ); +} + +inline Matrix4::Matrix4( const Quat & unitQuat, const Vector3 & translateVec ) +{ + Matrix3 mat; + mat = Matrix3( unitQuat ); + mCol0 = Vector4( mat.getCol0(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + mCol1 = Vector4( mat.getCol1(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + mCol2 = Vector4( mat.getCol2(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + mCol3 = Vector4( translateVec, ((vec_float4){1.0f,1.0f,1.0f,1.0f}) ); +} + +inline Matrix4::Matrix4( const Aos::Matrix4 & mat ) +{ + mCol0 = Vector4( mat.getCol0() ); + mCol1 = Vector4( mat.getCol1() ); + mCol2 = Vector4( mat.getCol2() ); + mCol3 = Vector4( mat.getCol3() ); +} + +inline Matrix4::Matrix4( const Aos::Matrix4 & mat0, const Aos::Matrix4 & mat1, const Aos::Matrix4 & mat2, const Aos::Matrix4 & mat3 ) +{ + mCol0 = Vector4( mat0.getCol0(), mat1.getCol0(), mat2.getCol0(), mat3.getCol0() ); + mCol1 = Vector4( mat0.getCol1(), mat1.getCol1(), mat2.getCol1(), mat3.getCol1() ); + mCol2 = Vector4( mat0.getCol2(), mat1.getCol2(), mat2.getCol2(), mat3.getCol2() ); + mCol3 = Vector4( mat0.getCol3(), mat1.getCol3(), mat2.getCol3(), mat3.getCol3() ); +} + +inline void Matrix4::get4Aos( Aos::Matrix4 & result0, Aos::Matrix4 & result1, Aos::Matrix4 & result2, Aos::Matrix4 & result3 ) const +{ + Aos::Vector4 tmpV4_0, tmpV4_1, tmpV4_2, tmpV4_3; + mCol0.get4Aos( tmpV4_0, tmpV4_1, tmpV4_2, tmpV4_3 ); + result0.setCol0( tmpV4_0 ); + result1.setCol0( tmpV4_1 ); + result2.setCol0( tmpV4_2 ); + result3.setCol0( tmpV4_3 ); + mCol1.get4Aos( tmpV4_0, tmpV4_1, tmpV4_2, tmpV4_3 ); + result0.setCol1( tmpV4_0 ); + result1.setCol1( tmpV4_1 ); + result2.setCol1( tmpV4_2 ); + result3.setCol1( tmpV4_3 ); + mCol2.get4Aos( tmpV4_0, tmpV4_1, tmpV4_2, tmpV4_3 ); + result0.setCol2( tmpV4_0 ); + result1.setCol2( tmpV4_1 ); + result2.setCol2( tmpV4_2 ); + result3.setCol2( tmpV4_3 ); + mCol3.get4Aos( tmpV4_0, tmpV4_1, tmpV4_2, tmpV4_3 ); + result0.setCol3( tmpV4_0 ); + result1.setCol3( tmpV4_1 ); + result2.setCol3( tmpV4_2 ); + result3.setCol3( tmpV4_3 ); +} + +inline Matrix4 & Matrix4::setCol0( const Vector4 & _col0 ) +{ + mCol0 = _col0; + return *this; +} + +inline Matrix4 & Matrix4::setCol1( const Vector4 & _col1 ) +{ + mCol1 = _col1; + return *this; +} + +inline Matrix4 & Matrix4::setCol2( const Vector4 & _col2 ) +{ + mCol2 = _col2; + return *this; +} + +inline Matrix4 & Matrix4::setCol3( const Vector4 & _col3 ) +{ + mCol3 = _col3; + return *this; +} + +inline Matrix4 & Matrix4::setCol( int col, const Vector4 & vec ) +{ + *(&mCol0 + col) = vec; + return *this; +} + +inline Matrix4 & Matrix4::setRow( int row, const Vector4 & vec ) +{ + mCol0.setElem( row, vec.getElem( 0 ) ); + mCol1.setElem( row, vec.getElem( 1 ) ); + mCol2.setElem( row, vec.getElem( 2 ) ); + mCol3.setElem( row, vec.getElem( 3 ) ); + return *this; +} + +inline Matrix4 & Matrix4::setElem( int col, int row, vec_float4 val ) +{ + Vector4 tmpV3_0; + tmpV3_0 = this->getCol( col ); + tmpV3_0.setElem( row, val ); + this->setCol( col, tmpV3_0 ); + return *this; +} + +inline vec_float4 Matrix4::getElem( int col, int row ) const +{ + return this->getCol( col ).getElem( row ); +} + +inline const Vector4 Matrix4::getCol0( ) const +{ + return mCol0; +} + +inline const Vector4 Matrix4::getCol1( ) const +{ + return mCol1; +} + +inline const Vector4 Matrix4::getCol2( ) const +{ + return mCol2; +} + +inline const Vector4 Matrix4::getCol3( ) const +{ + return mCol3; +} + +inline const Vector4 Matrix4::getCol( int col ) const +{ + return *(&mCol0 + col); +} + +inline const Vector4 Matrix4::getRow( int row ) const +{ + return Vector4( mCol0.getElem( row ), mCol1.getElem( row ), mCol2.getElem( row ), mCol3.getElem( row ) ); +} + +inline Vector4 & Matrix4::operator []( int col ) +{ + return *(&mCol0 + col); +} + +inline const Vector4 Matrix4::operator []( int col ) const +{ + return *(&mCol0 + col); +} + +inline Matrix4 & Matrix4::operator =( const Matrix4 & mat ) +{ + mCol0 = mat.mCol0; + mCol1 = mat.mCol1; + mCol2 = mat.mCol2; + mCol3 = mat.mCol3; + return *this; +} + +inline const Matrix4 transpose( const Matrix4 & mat ) +{ + return Matrix4( + Vector4( mat.getCol0().getX(), mat.getCol1().getX(), mat.getCol2().getX(), mat.getCol3().getX() ), + Vector4( mat.getCol0().getY(), mat.getCol1().getY(), mat.getCol2().getY(), mat.getCol3().getY() ), + Vector4( mat.getCol0().getZ(), mat.getCol1().getZ(), mat.getCol2().getZ(), mat.getCol3().getZ() ), + Vector4( mat.getCol0().getW(), mat.getCol1().getW(), mat.getCol2().getW(), mat.getCol3().getW() ) + ); +} + +inline const Matrix4 inverse( const Matrix4 & mat ) +{ + Vector4 res0, res1, res2, res3; + vec_float4 mA, mB, mC, mD, mE, mF, mG, mH, mI, mJ, mK, mL, mM, mN, mO, mP, tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, detInv; + mA = mat.getCol0().getX(); + mB = mat.getCol0().getY(); + mC = mat.getCol0().getZ(); + mD = mat.getCol0().getW(); + mE = mat.getCol1().getX(); + mF = mat.getCol1().getY(); + mG = mat.getCol1().getZ(); + mH = mat.getCol1().getW(); + mI = mat.getCol2().getX(); + mJ = mat.getCol2().getY(); + mK = mat.getCol2().getZ(); + mL = mat.getCol2().getW(); + mM = mat.getCol3().getX(); + mN = mat.getCol3().getY(); + mO = mat.getCol3().getZ(); + mP = mat.getCol3().getW(); + tmp0 = vec_sub( vec_madd( mK, mD, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mC, mL, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + tmp1 = vec_sub( vec_madd( mO, mH, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mG, mP, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + tmp2 = vec_sub( vec_madd( mB, mK, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mJ, mC, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + tmp3 = vec_sub( vec_madd( mF, mO, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mN, mG, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + tmp4 = vec_sub( vec_madd( mJ, mD, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mB, mL, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + tmp5 = vec_sub( vec_madd( mN, mH, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mF, mP, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + res0.setX( vec_sub( vec_sub( vec_madd( mJ, tmp1, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mL, tmp3, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mK, tmp5, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ) ); + res0.setY( vec_sub( vec_sub( vec_madd( mN, tmp0, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mP, tmp2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mO, tmp4, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ) ); + res0.setZ( vec_sub( vec_add( vec_madd( mD, tmp3, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mC, tmp5, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mB, tmp1, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ) ); + res0.setW( vec_sub( vec_add( vec_madd( mH, tmp2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mG, tmp4, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mF, tmp0, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ) ); + detInv = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), vec_add( vec_add( vec_add( vec_madd( mA, res0.getX(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mE, res0.getY(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mI, res0.getZ(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mM, res0.getW(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ) ); + res1.setX( vec_madd( mI, tmp1, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + res1.setY( vec_madd( mM, tmp0, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + res1.setZ( vec_madd( mA, tmp1, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + res1.setW( vec_madd( mE, tmp0, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + res3.setX( vec_madd( mI, tmp3, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + res3.setY( vec_madd( mM, tmp2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + res3.setZ( vec_madd( mA, tmp3, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + res3.setW( vec_madd( mE, tmp2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + res2.setX( vec_madd( mI, tmp5, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + res2.setY( vec_madd( mM, tmp4, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + res2.setZ( vec_madd( mA, tmp5, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + res2.setW( vec_madd( mE, tmp4, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + tmp0 = vec_sub( vec_madd( mI, mB, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mA, mJ, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + tmp1 = vec_sub( vec_madd( mM, mF, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mE, mN, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + tmp2 = vec_sub( vec_madd( mI, mD, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mA, mL, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + tmp3 = vec_sub( vec_madd( mM, mH, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mE, mP, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + tmp4 = vec_sub( vec_madd( mI, mC, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mA, mK, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + tmp5 = vec_sub( vec_madd( mM, mG, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mE, mO, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + res2.setX( vec_add( vec_sub( vec_madd( mL, tmp1, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mJ, tmp3, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), res2.getX() ) ); + res2.setY( vec_add( vec_sub( vec_madd( mP, tmp0, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mN, tmp2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), res2.getY() ) ); + res2.setZ( vec_sub( vec_sub( vec_madd( mB, tmp3, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mD, tmp1, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), res2.getZ() ) ); + res2.setW( vec_sub( vec_sub( vec_madd( mF, tmp2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mH, tmp0, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), res2.getW() ) ); + res3.setX( vec_add( vec_sub( vec_madd( mJ, tmp5, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mK, tmp1, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), res3.getX() ) ); + res3.setY( vec_add( vec_sub( vec_madd( mN, tmp4, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mO, tmp0, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), res3.getY() ) ); + res3.setZ( vec_sub( vec_sub( vec_madd( mC, tmp1, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mB, tmp5, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), res3.getZ() ) ); + res3.setW( vec_sub( vec_sub( vec_madd( mG, tmp0, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mF, tmp4, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), res3.getW() ) ); + res1.setX( vec_sub( vec_sub( vec_madd( mK, tmp3, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mL, tmp5, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), res1.getX() ) ); + res1.setY( vec_sub( vec_sub( vec_madd( mO, tmp2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mP, tmp4, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), res1.getY() ) ); + res1.setZ( vec_add( vec_sub( vec_madd( mD, tmp5, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mC, tmp3, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), res1.getZ() ) ); + res1.setW( vec_add( vec_sub( vec_madd( mH, tmp4, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mG, tmp2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), res1.getW() ) ); + return Matrix4( + ( res0 * detInv ), + ( res1 * detInv ), + ( res2 * detInv ), + ( res3 * detInv ) + ); +} + +inline const Matrix4 affineInverse( const Matrix4 & mat ) +{ + Transform3 affineMat; + affineMat.setCol0( mat.getCol0().getXYZ( ) ); + affineMat.setCol1( mat.getCol1().getXYZ( ) ); + affineMat.setCol2( mat.getCol2().getXYZ( ) ); + affineMat.setCol3( mat.getCol3().getXYZ( ) ); + return Matrix4( inverse( affineMat ) ); +} + +inline const Matrix4 orthoInverse( const Matrix4 & mat ) +{ + Transform3 affineMat; + affineMat.setCol0( mat.getCol0().getXYZ( ) ); + affineMat.setCol1( mat.getCol1().getXYZ( ) ); + affineMat.setCol2( mat.getCol2().getXYZ( ) ); + affineMat.setCol3( mat.getCol3().getXYZ( ) ); + return Matrix4( orthoInverse( affineMat ) ); +} + +inline vec_float4 determinant( const Matrix4 & mat ) +{ + vec_float4 dx, dy, dz, dw, mA, mB, mC, mD, mE, mF, mG, mH, mI, mJ, mK, mL, mM, mN, mO, mP, tmp0, tmp1, tmp2, tmp3, tmp4, tmp5; + mA = mat.getCol0().getX(); + mB = mat.getCol0().getY(); + mC = mat.getCol0().getZ(); + mD = mat.getCol0().getW(); + mE = mat.getCol1().getX(); + mF = mat.getCol1().getY(); + mG = mat.getCol1().getZ(); + mH = mat.getCol1().getW(); + mI = mat.getCol2().getX(); + mJ = mat.getCol2().getY(); + mK = mat.getCol2().getZ(); + mL = mat.getCol2().getW(); + mM = mat.getCol3().getX(); + mN = mat.getCol3().getY(); + mO = mat.getCol3().getZ(); + mP = mat.getCol3().getW(); + tmp0 = vec_sub( vec_madd( mK, mD, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mC, mL, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + tmp1 = vec_sub( vec_madd( mO, mH, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mG, mP, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + tmp2 = vec_sub( vec_madd( mB, mK, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mJ, mC, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + tmp3 = vec_sub( vec_madd( mF, mO, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mN, mG, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + tmp4 = vec_sub( vec_madd( mJ, mD, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mB, mL, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + tmp5 = vec_sub( vec_madd( mN, mH, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mF, mP, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + dx = vec_sub( vec_sub( vec_madd( mJ, tmp1, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mL, tmp3, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mK, tmp5, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + dy = vec_sub( vec_sub( vec_madd( mN, tmp0, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mP, tmp2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mO, tmp4, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + dz = vec_sub( vec_add( vec_madd( mD, tmp3, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mC, tmp5, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mB, tmp1, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + dw = vec_sub( vec_add( vec_madd( mH, tmp2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mG, tmp4, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mF, tmp0, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + return vec_add( vec_add( vec_add( vec_madd( mA, dx, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mE, dy, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mI, dz, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mM, dw, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); +} + +inline const Matrix4 Matrix4::operator +( const Matrix4 & mat ) const +{ + return Matrix4( + ( mCol0 + mat.mCol0 ), + ( mCol1 + mat.mCol1 ), + ( mCol2 + mat.mCol2 ), + ( mCol3 + mat.mCol3 ) + ); +} + +inline const Matrix4 Matrix4::operator -( const Matrix4 & mat ) const +{ + return Matrix4( + ( mCol0 - mat.mCol0 ), + ( mCol1 - mat.mCol1 ), + ( mCol2 - mat.mCol2 ), + ( mCol3 - mat.mCol3 ) + ); +} + +inline Matrix4 & Matrix4::operator +=( const Matrix4 & mat ) +{ + *this = *this + mat; + return *this; +} + +inline Matrix4 & Matrix4::operator -=( const Matrix4 & mat ) +{ + *this = *this - mat; + return *this; +} + +inline const Matrix4 Matrix4::operator -( ) const +{ + return Matrix4( + ( -mCol0 ), + ( -mCol1 ), + ( -mCol2 ), + ( -mCol3 ) + ); +} + +inline const Matrix4 absPerElem( const Matrix4 & mat ) +{ + return Matrix4( + absPerElem( mat.getCol0() ), + absPerElem( mat.getCol1() ), + absPerElem( mat.getCol2() ), + absPerElem( mat.getCol3() ) + ); +} + +inline const Matrix4 Matrix4::operator *( vec_float4 scalar ) const +{ + return Matrix4( + ( mCol0 * scalar ), + ( mCol1 * scalar ), + ( mCol2 * scalar ), + ( mCol3 * scalar ) + ); +} + +inline Matrix4 & Matrix4::operator *=( vec_float4 scalar ) +{ + *this = *this * scalar; + return *this; +} + +inline const Matrix4 operator *( vec_float4 scalar, const Matrix4 & mat ) +{ + return mat * scalar; +} + +inline const Vector4 Matrix4::operator *( const Vector4 & vec ) const +{ + return Vector4( + vec_add( vec_add( vec_add( vec_madd( mCol0.getX(), vec.getX(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mCol1.getX(), vec.getY(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mCol2.getX(), vec.getZ(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mCol3.getX(), vec.getW(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), + vec_add( vec_add( vec_add( vec_madd( mCol0.getY(), vec.getX(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mCol1.getY(), vec.getY(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mCol2.getY(), vec.getZ(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mCol3.getY(), vec.getW(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), + vec_add( vec_add( vec_add( vec_madd( mCol0.getZ(), vec.getX(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mCol1.getZ(), vec.getY(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mCol2.getZ(), vec.getZ(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mCol3.getZ(), vec.getW(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), + vec_add( vec_add( vec_add( vec_madd( mCol0.getW(), vec.getX(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mCol1.getW(), vec.getY(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mCol2.getW(), vec.getZ(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mCol3.getW(), vec.getW(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ) + ); +} + +inline const Vector4 Matrix4::operator *( const Vector3 & vec ) const +{ + return Vector4( + vec_add( vec_add( vec_madd( mCol0.getX(), vec.getX(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mCol1.getX(), vec.getY(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mCol2.getX(), vec.getZ(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), + vec_add( vec_add( vec_madd( mCol0.getY(), vec.getX(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mCol1.getY(), vec.getY(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mCol2.getY(), vec.getZ(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), + vec_add( vec_add( vec_madd( mCol0.getZ(), vec.getX(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mCol1.getZ(), vec.getY(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mCol2.getZ(), vec.getZ(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), + vec_add( vec_add( vec_madd( mCol0.getW(), vec.getX(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mCol1.getW(), vec.getY(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mCol2.getW(), vec.getZ(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ) + ); +} + +inline const Vector4 Matrix4::operator *( const Point3 & pnt ) const +{ + return Vector4( + vec_add( vec_add( vec_add( vec_madd( mCol0.getX(), pnt.getX(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mCol1.getX(), pnt.getY(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mCol2.getX(), pnt.getZ(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), mCol3.getX() ), + vec_add( vec_add( vec_add( vec_madd( mCol0.getY(), pnt.getX(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mCol1.getY(), pnt.getY(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mCol2.getY(), pnt.getZ(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), mCol3.getY() ), + vec_add( vec_add( vec_add( vec_madd( mCol0.getZ(), pnt.getX(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mCol1.getZ(), pnt.getY(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mCol2.getZ(), pnt.getZ(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), mCol3.getZ() ), + vec_add( vec_add( vec_add( vec_madd( mCol0.getW(), pnt.getX(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mCol1.getW(), pnt.getY(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mCol2.getW(), pnt.getZ(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), mCol3.getW() ) + ); +} + +inline const Matrix4 Matrix4::operator *( const Matrix4 & mat ) const +{ + return Matrix4( + ( *this * mat.mCol0 ), + ( *this * mat.mCol1 ), + ( *this * mat.mCol2 ), + ( *this * mat.mCol3 ) + ); +} + +inline Matrix4 & Matrix4::operator *=( const Matrix4 & mat ) +{ + *this = *this * mat; + return *this; +} + +inline const Matrix4 Matrix4::operator *( const Transform3 & tfrm ) const +{ + return Matrix4( + ( *this * tfrm.getCol0() ), + ( *this * tfrm.getCol1() ), + ( *this * tfrm.getCol2() ), + ( *this * Point3( tfrm.getCol3() ) ) + ); +} + +inline Matrix4 & Matrix4::operator *=( const Transform3 & tfrm ) +{ + *this = *this * tfrm; + return *this; +} + +inline const Matrix4 mulPerElem( const Matrix4 & mat0, const Matrix4 & mat1 ) +{ + return Matrix4( + mulPerElem( mat0.getCol0(), mat1.getCol0() ), + mulPerElem( mat0.getCol1(), mat1.getCol1() ), + mulPerElem( mat0.getCol2(), mat1.getCol2() ), + mulPerElem( mat0.getCol3(), mat1.getCol3() ) + ); +} + +inline const Matrix4 Matrix4::identity( ) +{ + return Matrix4( + Vector4::xAxis( ), + Vector4::yAxis( ), + Vector4::zAxis( ), + Vector4::wAxis( ) + ); +} + +inline Matrix4 & Matrix4::setUpper3x3( const Matrix3 & mat3 ) +{ + mCol0.setXYZ( mat3.getCol0() ); + mCol1.setXYZ( mat3.getCol1() ); + mCol2.setXYZ( mat3.getCol2() ); + return *this; +} + +inline const Matrix3 Matrix4::getUpper3x3( ) const +{ + return Matrix3( + mCol0.getXYZ( ), + mCol1.getXYZ( ), + mCol2.getXYZ( ) + ); +} + +inline Matrix4 & Matrix4::setTranslation( const Vector3 & translateVec ) +{ + mCol3.setXYZ( translateVec ); + return *this; +} + +inline const Vector3 Matrix4::getTranslation( ) const +{ + return mCol3.getXYZ( ); +} + +inline const Matrix4 Matrix4::rotationX( vec_float4 radians ) +{ + vec_float4 s, c; + sincosf4( radians, &s, &c ); + return Matrix4( + Vector4::xAxis( ), + Vector4( ((vec_float4){0.0f,0.0f,0.0f,0.0f}), c, s, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), + Vector4( ((vec_float4){0.0f,0.0f,0.0f,0.0f}), negatef4( s ), c, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), + Vector4::wAxis( ) + ); +} + +inline const Matrix4 Matrix4::rotationY( vec_float4 radians ) +{ + vec_float4 s, c; + sincosf4( radians, &s, &c ); + return Matrix4( + Vector4( c, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), negatef4( s ), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), + Vector4::yAxis( ), + Vector4( s, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), c, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), + Vector4::wAxis( ) + ); +} + +inline const Matrix4 Matrix4::rotationZ( vec_float4 radians ) +{ + vec_float4 s, c; + sincosf4( radians, &s, &c ); + return Matrix4( + Vector4( c, s, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), + Vector4( negatef4( s ), c, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), + Vector4::zAxis( ), + Vector4::wAxis( ) + ); +} + +inline const Matrix4 Matrix4::rotationZYX( const Vector3 & radiansXYZ ) +{ + vec_float4 sX, cX, sY, cY, sZ, cZ, tmp0, tmp1; + sincosf4( radiansXYZ.getX(), &sX, &cX ); + sincosf4( radiansXYZ.getY(), &sY, &cY ); + sincosf4( radiansXYZ.getZ(), &sZ, &cZ ); + tmp0 = vec_madd( cZ, sY, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + tmp1 = vec_madd( sZ, sY, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + return Matrix4( + Vector4( vec_madd( cZ, cY, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( sZ, cY, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), negatef4( sY ), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), + Vector4( vec_sub( vec_madd( tmp0, sX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( sZ, cX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_add( vec_madd( tmp1, sX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( cZ, cX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( cY, sX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), + Vector4( vec_add( vec_madd( tmp0, cX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( sZ, sX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_sub( vec_madd( tmp1, cX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( cZ, sX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( cY, cX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), + Vector4::wAxis( ) + ); +} + +inline const Matrix4 Matrix4::rotation( vec_float4 radians, const Vector3 & unitVec ) +{ + vec_float4 x, y, z, s, c, oneMinusC, xy, yz, zx; + sincosf4( radians, &s, &c ); + x = unitVec.getX(); + y = unitVec.getY(); + z = unitVec.getZ(); + xy = vec_madd( x, y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + yz = vec_madd( y, z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + zx = vec_madd( z, x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + oneMinusC = vec_sub( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), c ); + return Matrix4( + Vector4( vec_add( vec_madd( vec_madd( x, x, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), oneMinusC, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), c ), vec_add( vec_madd( xy, oneMinusC, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( z, s, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_sub( vec_madd( zx, oneMinusC, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( y, s, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), + Vector4( vec_sub( vec_madd( xy, oneMinusC, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( z, s, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_add( vec_madd( vec_madd( y, y, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), oneMinusC, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), c ), vec_add( vec_madd( yz, oneMinusC, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( x, s, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), + Vector4( vec_add( vec_madd( zx, oneMinusC, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( y, s, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_sub( vec_madd( yz, oneMinusC, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( x, s, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_add( vec_madd( vec_madd( z, z, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), oneMinusC, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), c ), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), + Vector4::wAxis( ) + ); +} + +inline const Matrix4 Matrix4::rotation( const Quat & unitQuat ) +{ + return Matrix4( Transform3::rotation( unitQuat ) ); +} + +inline const Matrix4 Matrix4::scale( const Vector3 & scaleVec ) +{ + return Matrix4( + Vector4( scaleVec.getX(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), + Vector4( ((vec_float4){0.0f,0.0f,0.0f,0.0f}), scaleVec.getY(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), + Vector4( ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), scaleVec.getZ(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), + Vector4::wAxis( ) + ); +} + +inline const Matrix4 appendScale( const Matrix4 & mat, const Vector3 & scaleVec ) +{ + return Matrix4( + ( mat.getCol0() * scaleVec.getX( ) ), + ( mat.getCol1() * scaleVec.getY( ) ), + ( mat.getCol2() * scaleVec.getZ( ) ), + mat.getCol3() + ); +} + +inline const Matrix4 prependScale( const Vector3 & scaleVec, const Matrix4 & mat ) +{ + Vector4 scale4; + scale4 = Vector4( scaleVec, ((vec_float4){1.0f,1.0f,1.0f,1.0f}) ); + return Matrix4( + mulPerElem( mat.getCol0(), scale4 ), + mulPerElem( mat.getCol1(), scale4 ), + mulPerElem( mat.getCol2(), scale4 ), + mulPerElem( mat.getCol3(), scale4 ) + ); +} + +inline const Matrix4 Matrix4::translation( const Vector3 & translateVec ) +{ + return Matrix4( + Vector4::xAxis( ), + Vector4::yAxis( ), + Vector4::zAxis( ), + Vector4( translateVec, ((vec_float4){1.0f,1.0f,1.0f,1.0f}) ) + ); +} + +inline const Matrix4 Matrix4::lookAt( const Point3 & eyePos, const Point3 & lookAtPos, const Vector3 & upVec ) +{ + Matrix4 m4EyeFrame; + Vector3 v3X, v3Y, v3Z; + v3Y = normalize( upVec ); + v3Z = normalize( ( eyePos - lookAtPos ) ); + v3X = normalize( cross( v3Y, v3Z ) ); + v3Y = cross( v3Z, v3X ); + m4EyeFrame = Matrix4( Vector4( v3X ), Vector4( v3Y ), Vector4( v3Z ), Vector4( eyePos ) ); + return orthoInverse( m4EyeFrame ); +} + +inline const Matrix4 Matrix4::perspective( vec_float4 fovyRadians, vec_float4 aspect, vec_float4 zNear, vec_float4 zFar ) +{ + vec_float4 f, rangeInv; + f = tanf4( vec_sub( ((vec_float4){_VECTORMATH_PI_OVER_2,_VECTORMATH_PI_OVER_2,_VECTORMATH_PI_OVER_2,_VECTORMATH_PI_OVER_2}), vec_madd( ((vec_float4){0.5f,0.5f,0.5f,0.5f}), fovyRadians, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ) ); + rangeInv = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), vec_sub( zNear, zFar ) ); + return Matrix4( + Vector4( divf4( f, aspect ), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), + Vector4( ((vec_float4){0.0f,0.0f,0.0f,0.0f}), f, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), + Vector4( ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), vec_madd( vec_add( zNear, zFar ), rangeInv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), ((vec_float4){-1.0f,-1.0f,-1.0f,-1.0f}) ), + Vector4( ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), vec_madd( vec_madd( vec_madd( zNear, zFar, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), rangeInv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), ((vec_float4){2.0f,2.0f,2.0f,2.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) + ); +} + +inline const Matrix4 Matrix4::frustum( vec_float4 left, vec_float4 right, vec_float4 bottom, vec_float4 top, vec_float4 zNear, vec_float4 zFar ) +{ + vec_float4 sum_rl, sum_tb, sum_nf, inv_rl, inv_tb, inv_nf, n2; + sum_rl = vec_add( right, left ); + sum_tb = vec_add( top, bottom ); + sum_nf = vec_add( zNear, zFar ); + inv_rl = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), vec_sub( right, left ) ); + inv_tb = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), vec_sub( top, bottom ) ); + inv_nf = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), vec_sub( zNear, zFar ) ); + n2 = vec_add( zNear, zNear ); + return Matrix4( + Vector4( vec_madd( n2, inv_rl, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), + Vector4( ((vec_float4){0.0f,0.0f,0.0f,0.0f}), vec_madd( n2, inv_tb, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), + Vector4( vec_madd( sum_rl, inv_rl, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( sum_tb, inv_tb, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( sum_nf, inv_nf, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), ((vec_float4){-1.0f,-1.0f,-1.0f,-1.0f}) ), + Vector4( ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), vec_madd( vec_madd( n2, inv_nf, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), zFar, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) + ); +} + +inline const Matrix4 Matrix4::orthographic( vec_float4 left, vec_float4 right, vec_float4 bottom, vec_float4 top, vec_float4 zNear, vec_float4 zFar ) +{ + vec_float4 sum_rl, sum_tb, sum_nf, inv_rl, inv_tb, inv_nf; + sum_rl = vec_add( right, left ); + sum_tb = vec_add( top, bottom ); + sum_nf = vec_add( zNear, zFar ); + inv_rl = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), vec_sub( right, left ) ); + inv_tb = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), vec_sub( top, bottom ) ); + inv_nf = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), vec_sub( zNear, zFar ) ); + return Matrix4( + Vector4( vec_add( inv_rl, inv_rl ), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), + Vector4( ((vec_float4){0.0f,0.0f,0.0f,0.0f}), vec_add( inv_tb, inv_tb ), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), + Vector4( ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), vec_add( inv_nf, inv_nf ), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), + Vector4( vec_madd( negatef4( sum_rl ), inv_rl, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( negatef4( sum_tb ), inv_tb, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( sum_nf, inv_nf, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), ((vec_float4){1.0f,1.0f,1.0f,1.0f}) ) + ); +} + +inline const Matrix4 select( const Matrix4 & mat0, const Matrix4 & mat1, vec_uint4 select1 ) +{ + return Matrix4( + select( mat0.getCol0(), mat1.getCol0(), select1 ), + select( mat0.getCol1(), mat1.getCol1(), select1 ), + select( mat0.getCol2(), mat1.getCol2(), select1 ), + select( mat0.getCol3(), mat1.getCol3(), select1 ) + ); +} + +#ifdef _VECTORMATH_DEBUG + +inline void print( const Matrix4 & mat ) +{ + Aos::Matrix4 mat0, mat1, mat2, mat3; + mat.get4Aos( mat0, mat1, mat2, mat3 ); + printf("slot 0:\n"); + print( mat0 ); + printf("slot 1:\n"); + print( mat1 ); + printf("slot 2:\n"); + print( mat2 ); + printf("slot 3:\n"); + print( mat3 ); +} + +inline void print( const Matrix4 & mat, const char * name ) +{ + printf("%s:\n", name); + print( mat ); +} + +#endif + +inline Transform3::Transform3( const Transform3 & tfrm ) +{ + mCol0 = tfrm.mCol0; + mCol1 = tfrm.mCol1; + mCol2 = tfrm.mCol2; + mCol3 = tfrm.mCol3; +} + +inline Transform3::Transform3( vec_float4 scalar ) +{ + mCol0 = Vector3( scalar ); + mCol1 = Vector3( scalar ); + mCol2 = Vector3( scalar ); + mCol3 = Vector3( scalar ); +} + +inline Transform3::Transform3( const Vector3 & _col0, const Vector3 & _col1, const Vector3 & _col2, const Vector3 & _col3 ) +{ + mCol0 = _col0; + mCol1 = _col1; + mCol2 = _col2; + mCol3 = _col3; +} + +inline Transform3::Transform3( const Matrix3 & tfrm, const Vector3 & translateVec ) +{ + this->setUpper3x3( tfrm ); + this->setTranslation( translateVec ); +} + +inline Transform3::Transform3( const Quat & unitQuat, const Vector3 & translateVec ) +{ + this->setUpper3x3( Matrix3( unitQuat ) ); + this->setTranslation( translateVec ); +} + +inline Transform3::Transform3( const Aos::Transform3 & tfrm ) +{ + mCol0 = Vector3( tfrm.getCol0() ); + mCol1 = Vector3( tfrm.getCol1() ); + mCol2 = Vector3( tfrm.getCol2() ); + mCol3 = Vector3( tfrm.getCol3() ); +} + +inline Transform3::Transform3( const Aos::Transform3 & tfrm0, const Aos::Transform3 & tfrm1, const Aos::Transform3 & tfrm2, const Aos::Transform3 & tfrm3 ) +{ + mCol0 = Vector3( tfrm0.getCol0(), tfrm1.getCol0(), tfrm2.getCol0(), tfrm3.getCol0() ); + mCol1 = Vector3( tfrm0.getCol1(), tfrm1.getCol1(), tfrm2.getCol1(), tfrm3.getCol1() ); + mCol2 = Vector3( tfrm0.getCol2(), tfrm1.getCol2(), tfrm2.getCol2(), tfrm3.getCol2() ); + mCol3 = Vector3( tfrm0.getCol3(), tfrm1.getCol3(), tfrm2.getCol3(), tfrm3.getCol3() ); +} + +inline void Transform3::get4Aos( Aos::Transform3 & result0, Aos::Transform3 & result1, Aos::Transform3 & result2, Aos::Transform3 & result3 ) const +{ + Aos::Vector3 tmpV3_0, tmpV3_1, tmpV3_2, tmpV3_3; + mCol0.get4Aos( tmpV3_0, tmpV3_1, tmpV3_2, tmpV3_3 ); + result0.setCol0( tmpV3_0 ); + result1.setCol0( tmpV3_1 ); + result2.setCol0( tmpV3_2 ); + result3.setCol0( tmpV3_3 ); + mCol1.get4Aos( tmpV3_0, tmpV3_1, tmpV3_2, tmpV3_3 ); + result0.setCol1( tmpV3_0 ); + result1.setCol1( tmpV3_1 ); + result2.setCol1( tmpV3_2 ); + result3.setCol1( tmpV3_3 ); + mCol2.get4Aos( tmpV3_0, tmpV3_1, tmpV3_2, tmpV3_3 ); + result0.setCol2( tmpV3_0 ); + result1.setCol2( tmpV3_1 ); + result2.setCol2( tmpV3_2 ); + result3.setCol2( tmpV3_3 ); + mCol3.get4Aos( tmpV3_0, tmpV3_1, tmpV3_2, tmpV3_3 ); + result0.setCol3( tmpV3_0 ); + result1.setCol3( tmpV3_1 ); + result2.setCol3( tmpV3_2 ); + result3.setCol3( tmpV3_3 ); +} + +inline Transform3 & Transform3::setCol0( const Vector3 & _col0 ) +{ + mCol0 = _col0; + return *this; +} + +inline Transform3 & Transform3::setCol1( const Vector3 & _col1 ) +{ + mCol1 = _col1; + return *this; +} + +inline Transform3 & Transform3::setCol2( const Vector3 & _col2 ) +{ + mCol2 = _col2; + return *this; +} + +inline Transform3 & Transform3::setCol3( const Vector3 & _col3 ) +{ + mCol3 = _col3; + return *this; +} + +inline Transform3 & Transform3::setCol( int col, const Vector3 & vec ) +{ + *(&mCol0 + col) = vec; + return *this; +} + +inline Transform3 & Transform3::setRow( int row, const Vector4 & vec ) +{ + mCol0.setElem( row, vec.getElem( 0 ) ); + mCol1.setElem( row, vec.getElem( 1 ) ); + mCol2.setElem( row, vec.getElem( 2 ) ); + mCol3.setElem( row, vec.getElem( 3 ) ); + return *this; +} + +inline Transform3 & Transform3::setElem( int col, int row, vec_float4 val ) +{ + Vector3 tmpV3_0; + tmpV3_0 = this->getCol( col ); + tmpV3_0.setElem( row, val ); + this->setCol( col, tmpV3_0 ); + return *this; +} + +inline vec_float4 Transform3::getElem( int col, int row ) const +{ + return this->getCol( col ).getElem( row ); +} + +inline const Vector3 Transform3::getCol0( ) const +{ + return mCol0; +} + +inline const Vector3 Transform3::getCol1( ) const +{ + return mCol1; +} + +inline const Vector3 Transform3::getCol2( ) const +{ + return mCol2; +} + +inline const Vector3 Transform3::getCol3( ) const +{ + return mCol3; +} + +inline const Vector3 Transform3::getCol( int col ) const +{ + return *(&mCol0 + col); +} + +inline const Vector4 Transform3::getRow( int row ) const +{ + return Vector4( mCol0.getElem( row ), mCol1.getElem( row ), mCol2.getElem( row ), mCol3.getElem( row ) ); +} + +inline Vector3 & Transform3::operator []( int col ) +{ + return *(&mCol0 + col); +} + +inline const Vector3 Transform3::operator []( int col ) const +{ + return *(&mCol0 + col); +} + +inline Transform3 & Transform3::operator =( const Transform3 & tfrm ) +{ + mCol0 = tfrm.mCol0; + mCol1 = tfrm.mCol1; + mCol2 = tfrm.mCol2; + mCol3 = tfrm.mCol3; + return *this; +} + +inline const Transform3 inverse( const Transform3 & tfrm ) +{ + Vector3 tmp0, tmp1, tmp2, inv0, inv1, inv2; + vec_float4 detinv; + tmp0 = cross( tfrm.getCol1(), tfrm.getCol2() ); + tmp1 = cross( tfrm.getCol2(), tfrm.getCol0() ); + tmp2 = cross( tfrm.getCol0(), tfrm.getCol1() ); + detinv = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), dot( tfrm.getCol2(), tmp2 ) ); + inv0 = Vector3( vec_madd( tmp0.getX(), detinv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( tmp1.getX(), detinv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( tmp2.getX(), detinv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + inv1 = Vector3( vec_madd( tmp0.getY(), detinv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( tmp1.getY(), detinv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( tmp2.getY(), detinv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + inv2 = Vector3( vec_madd( tmp0.getZ(), detinv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( tmp1.getZ(), detinv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( tmp2.getZ(), detinv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + return Transform3( + inv0, + inv1, + inv2, + Vector3( ( -( ( inv0 * tfrm.getCol3().getX() ) + ( ( inv1 * tfrm.getCol3().getY() ) + ( inv2 * tfrm.getCol3().getZ() ) ) ) ) ) + ); +} + +inline const Transform3 orthoInverse( const Transform3 & tfrm ) +{ + Vector3 inv0, inv1, inv2; + inv0 = Vector3( tfrm.getCol0().getX(), tfrm.getCol1().getX(), tfrm.getCol2().getX() ); + inv1 = Vector3( tfrm.getCol0().getY(), tfrm.getCol1().getY(), tfrm.getCol2().getY() ); + inv2 = Vector3( tfrm.getCol0().getZ(), tfrm.getCol1().getZ(), tfrm.getCol2().getZ() ); + return Transform3( + inv0, + inv1, + inv2, + Vector3( ( -( ( inv0 * tfrm.getCol3().getX() ) + ( ( inv1 * tfrm.getCol3().getY() ) + ( inv2 * tfrm.getCol3().getZ() ) ) ) ) ) + ); +} + +inline const Transform3 absPerElem( const Transform3 & tfrm ) +{ + return Transform3( + absPerElem( tfrm.getCol0() ), + absPerElem( tfrm.getCol1() ), + absPerElem( tfrm.getCol2() ), + absPerElem( tfrm.getCol3() ) + ); +} + +inline const Vector3 Transform3::operator *( const Vector3 & vec ) const +{ + return Vector3( + vec_add( vec_add( vec_madd( mCol0.getX(), vec.getX(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mCol1.getX(), vec.getY(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mCol2.getX(), vec.getZ(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), + vec_add( vec_add( vec_madd( mCol0.getY(), vec.getX(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mCol1.getY(), vec.getY(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mCol2.getY(), vec.getZ(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), + vec_add( vec_add( vec_madd( mCol0.getZ(), vec.getX(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mCol1.getZ(), vec.getY(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mCol2.getZ(), vec.getZ(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ) + ); +} + +inline const Point3 Transform3::operator *( const Point3 & pnt ) const +{ + return Point3( + vec_add( vec_add( vec_add( vec_madd( mCol0.getX(), pnt.getX(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mCol1.getX(), pnt.getY(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mCol2.getX(), pnt.getZ(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), mCol3.getX() ), + vec_add( vec_add( vec_add( vec_madd( mCol0.getY(), pnt.getX(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mCol1.getY(), pnt.getY(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mCol2.getY(), pnt.getZ(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), mCol3.getY() ), + vec_add( vec_add( vec_add( vec_madd( mCol0.getZ(), pnt.getX(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mCol1.getZ(), pnt.getY(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mCol2.getZ(), pnt.getZ(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), mCol3.getZ() ) + ); +} + +inline const Transform3 Transform3::operator *( const Transform3 & tfrm ) const +{ + return Transform3( + ( *this * tfrm.mCol0 ), + ( *this * tfrm.mCol1 ), + ( *this * tfrm.mCol2 ), + Vector3( ( *this * Point3( tfrm.mCol3 ) ) ) + ); +} + +inline Transform3 & Transform3::operator *=( const Transform3 & tfrm ) +{ + *this = *this * tfrm; + return *this; +} + +inline const Transform3 mulPerElem( const Transform3 & tfrm0, const Transform3 & tfrm1 ) +{ + return Transform3( + mulPerElem( tfrm0.getCol0(), tfrm1.getCol0() ), + mulPerElem( tfrm0.getCol1(), tfrm1.getCol1() ), + mulPerElem( tfrm0.getCol2(), tfrm1.getCol2() ), + mulPerElem( tfrm0.getCol3(), tfrm1.getCol3() ) + ); +} + +inline const Transform3 Transform3::identity( ) +{ + return Transform3( + Vector3::xAxis( ), + Vector3::yAxis( ), + Vector3::zAxis( ), + Vector3( ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) + ); +} + +inline Transform3 & Transform3::setUpper3x3( const Matrix3 & tfrm ) +{ + mCol0 = tfrm.getCol0(); + mCol1 = tfrm.getCol1(); + mCol2 = tfrm.getCol2(); + return *this; +} + +inline const Matrix3 Transform3::getUpper3x3( ) const +{ + return Matrix3( mCol0, mCol1, mCol2 ); +} + +inline Transform3 & Transform3::setTranslation( const Vector3 & translateVec ) +{ + mCol3 = translateVec; + return *this; +} + +inline const Vector3 Transform3::getTranslation( ) const +{ + return mCol3; +} + +inline const Transform3 Transform3::rotationX( vec_float4 radians ) +{ + vec_float4 s, c; + sincosf4( radians, &s, &c ); + return Transform3( + Vector3::xAxis( ), + Vector3( ((vec_float4){0.0f,0.0f,0.0f,0.0f}), c, s ), + Vector3( ((vec_float4){0.0f,0.0f,0.0f,0.0f}), negatef4( s ), c ), + Vector3( ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) + ); +} + +inline const Transform3 Transform3::rotationY( vec_float4 radians ) +{ + vec_float4 s, c; + sincosf4( radians, &s, &c ); + return Transform3( + Vector3( c, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), negatef4( s ) ), + Vector3::yAxis( ), + Vector3( s, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), c ), + Vector3( ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) + ); +} + +inline const Transform3 Transform3::rotationZ( vec_float4 radians ) +{ + vec_float4 s, c; + sincosf4( radians, &s, &c ); + return Transform3( + Vector3( c, s, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), + Vector3( negatef4( s ), c, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), + Vector3::zAxis( ), + Vector3( ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) + ); +} + +inline const Transform3 Transform3::rotationZYX( const Vector3 & radiansXYZ ) +{ + vec_float4 sX, cX, sY, cY, sZ, cZ, tmp0, tmp1; + sincosf4( radiansXYZ.getX(), &sX, &cX ); + sincosf4( radiansXYZ.getY(), &sY, &cY ); + sincosf4( radiansXYZ.getZ(), &sZ, &cZ ); + tmp0 = vec_madd( cZ, sY, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + tmp1 = vec_madd( sZ, sY, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + return Transform3( + Vector3( vec_madd( cZ, cY, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( sZ, cY, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), negatef4( sY ) ), + Vector3( vec_sub( vec_madd( tmp0, sX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( sZ, cX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_add( vec_madd( tmp1, sX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( cZ, cX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( cY, sX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), + Vector3( vec_add( vec_madd( tmp0, cX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( sZ, sX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_sub( vec_madd( tmp1, cX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( cZ, sX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( cY, cX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), + Vector3( ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) + ); +} + +inline const Transform3 Transform3::rotation( vec_float4 radians, const Vector3 & unitVec ) +{ + return Transform3( Matrix3::rotation( radians, unitVec ), Vector3( ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); +} + +inline const Transform3 Transform3::rotation( const Quat & unitQuat ) +{ + return Transform3( Matrix3( unitQuat ), Vector3( ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); +} + +inline const Transform3 Transform3::scale( const Vector3 & scaleVec ) +{ + return Transform3( + Vector3( scaleVec.getX(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), + Vector3( ((vec_float4){0.0f,0.0f,0.0f,0.0f}), scaleVec.getY(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), + Vector3( ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), scaleVec.getZ() ), + Vector3( ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) + ); +} + +inline const Transform3 appendScale( const Transform3 & tfrm, const Vector3 & scaleVec ) +{ + return Transform3( + ( tfrm.getCol0() * scaleVec.getX( ) ), + ( tfrm.getCol1() * scaleVec.getY( ) ), + ( tfrm.getCol2() * scaleVec.getZ( ) ), + tfrm.getCol3() + ); +} + +inline const Transform3 prependScale( const Vector3 & scaleVec, const Transform3 & tfrm ) +{ + return Transform3( + mulPerElem( tfrm.getCol0(), scaleVec ), + mulPerElem( tfrm.getCol1(), scaleVec ), + mulPerElem( tfrm.getCol2(), scaleVec ), + mulPerElem( tfrm.getCol3(), scaleVec ) + ); +} + +inline const Transform3 Transform3::translation( const Vector3 & translateVec ) +{ + return Transform3( + Vector3::xAxis( ), + Vector3::yAxis( ), + Vector3::zAxis( ), + translateVec + ); +} + +inline const Transform3 select( const Transform3 & tfrm0, const Transform3 & tfrm1, vec_uint4 select1 ) +{ + return Transform3( + select( tfrm0.getCol0(), tfrm1.getCol0(), select1 ), + select( tfrm0.getCol1(), tfrm1.getCol1(), select1 ), + select( tfrm0.getCol2(), tfrm1.getCol2(), select1 ), + select( tfrm0.getCol3(), tfrm1.getCol3(), select1 ) + ); +} + +#ifdef _VECTORMATH_DEBUG + +inline void print( const Transform3 & tfrm ) +{ + Aos::Transform3 mat0, mat1, mat2, mat3; + tfrm.get4Aos( mat0, mat1, mat2, mat3 ); + printf("slot 0:\n"); + print( mat0 ); + printf("slot 1:\n"); + print( mat1 ); + printf("slot 2:\n"); + print( mat2 ); + printf("slot 3:\n"); + print( mat3 ); +} + +inline void print( const Transform3 & tfrm, const char * name ) +{ + printf("%s:\n", name); + print( tfrm ); +} + +#endif + +inline Quat::Quat( const Matrix3 & tfrm ) +{ + vec_float4 trace, radicand, scale, xx, yx, zx, xy, yy, zy, xz, yz, zz, tmpx, tmpy, tmpz, tmpw, qx, qy, qz, qw; + vec_uint4 negTrace, ZgtX, ZgtY, YgtX; + vec_uint4 largestXorY, largestYorZ, largestZorX; + + xx = tfrm.getCol0().getX(); + yx = tfrm.getCol0().getY(); + zx = tfrm.getCol0().getZ(); + xy = tfrm.getCol1().getX(); + yy = tfrm.getCol1().getY(); + zy = tfrm.getCol1().getZ(); + xz = tfrm.getCol2().getX(); + yz = tfrm.getCol2().getY(); + zz = tfrm.getCol2().getZ(); + + trace = vec_add( vec_add( xx, yy ), zz ); + + negTrace = (vec_uint4)vec_cmpgt( ((vec_float4){0.0f,0.0f,0.0f,0.0f}), trace ); + ZgtX = (vec_uint4)vec_cmpgt( zz, xx ); + ZgtY = (vec_uint4)vec_cmpgt( zz, yy ); + YgtX = (vec_uint4)vec_cmpgt( yy, xx ); + largestXorY = vec_andc( negTrace, vec_and( ZgtX, ZgtY ) ); + largestYorZ = vec_and( negTrace, vec_or( YgtX, ZgtX ) ); + largestZorX = vec_andc( negTrace, vec_andc( YgtX, ZgtY ) ); + + zz = vec_sel( zz, negatef4(zz), largestXorY ); + xy = vec_sel( xy, negatef4(xy), largestXorY ); + xx = vec_sel( xx, negatef4(xx), largestYorZ ); + yz = vec_sel( yz, negatef4(yz), largestYorZ ); + yy = vec_sel( yy, negatef4(yy), largestZorX ); + zx = vec_sel( zx, negatef4(zx), largestZorX ); + + radicand = vec_add( vec_add( vec_add( xx, yy ), zz ), ((vec_float4){1.0f,1.0f,1.0f,1.0f}) ); + scale = vec_madd( ((vec_float4){0.5f,0.5f,0.5f,0.5f}), divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), sqrtf4( radicand ) ), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + + tmpx = vec_madd( vec_sub( zy, yz ), scale, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + tmpy = vec_madd( vec_sub( xz, zx ), scale, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + tmpz = vec_madd( vec_sub( yx, xy ), scale, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + tmpw = vec_madd( radicand, scale, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + qx = tmpx; + qy = tmpy; + qz = tmpz; + qw = tmpw; + + qx = vec_sel( qx, tmpw, largestXorY ); + qy = vec_sel( qy, tmpz, largestXorY ); + qz = vec_sel( qz, tmpy, largestXorY ); + qw = vec_sel( qw, tmpx, largestXorY ); + tmpx = qx; + tmpz = qz; + qx = vec_sel( qx, qy, largestYorZ ); + qy = vec_sel( qy, tmpx, largestYorZ ); + qz = vec_sel( qz, qw, largestYorZ ); + qw = vec_sel( qw, tmpz, largestYorZ ); + + mX = qx; + mY = qy; + mZ = qz; + mW = qw; +} + +inline const Matrix3 outer( const Vector3 & tfrm0, const Vector3 & tfrm1 ) +{ + return Matrix3( + ( tfrm0 * tfrm1.getX( ) ), + ( tfrm0 * tfrm1.getY( ) ), + ( tfrm0 * tfrm1.getZ( ) ) + ); +} + +inline const Matrix4 outer( const Vector4 & tfrm0, const Vector4 & tfrm1 ) +{ + return Matrix4( + ( tfrm0 * tfrm1.getX( ) ), + ( tfrm0 * tfrm1.getY( ) ), + ( tfrm0 * tfrm1.getZ( ) ), + ( tfrm0 * tfrm1.getW( ) ) + ); +} + +inline const Vector3 rowMul( const Vector3 & vec, const Matrix3 & mat ) +{ + return Vector3( + vec_add( vec_add( vec_madd( vec.getX(), mat.getCol0().getX(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( vec.getY(), mat.getCol0().getY(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( vec.getZ(), mat.getCol0().getZ(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), + vec_add( vec_add( vec_madd( vec.getX(), mat.getCol1().getX(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( vec.getY(), mat.getCol1().getY(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( vec.getZ(), mat.getCol1().getZ(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), + vec_add( vec_add( vec_madd( vec.getX(), mat.getCol2().getX(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( vec.getY(), mat.getCol2().getY(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( vec.getZ(), mat.getCol2().getZ(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ) + ); +} + +inline const Matrix3 crossMatrix( const Vector3 & vec ) +{ + return Matrix3( + Vector3( ((vec_float4){0.0f,0.0f,0.0f,0.0f}), vec.getZ(), negatef4( vec.getY() ) ), + Vector3( negatef4( vec.getZ() ), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), vec.getX() ), + Vector3( vec.getY(), negatef4( vec.getX() ), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) + ); +} + +inline const Matrix3 crossMatrixMul( const Vector3 & vec, const Matrix3 & mat ) +{ + return Matrix3( cross( vec, mat.getCol0() ), cross( vec, mat.getCol1() ), cross( vec, mat.getCol2() ) ); +} + +} // namespace Soa +} // namespace Vectormath + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/ppu/cpp/quat_aos.h b/Extras/vectormathlibrary/include/vectormath/ppu/cpp/quat_aos.h new file mode 100644 index 000000000..196a48d98 --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/ppu/cpp/quat_aos.h @@ -0,0 +1,536 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_QUAT_AOS_CPP_H +#define _VECTORMATH_QUAT_AOS_CPP_H +//----------------------------------------------------------------------------- +// Definitions + +#ifndef _VECTORMATH_INTERNAL_FUNCTIONS +#define _VECTORMATH_INTERNAL_FUNCTIONS + +#endif + +namespace Vectormath { +namespace Aos { + +inline Quat::Quat( float _x, float _y, float _z, float _w ) +{ + if (__builtin_constant_p(_x) & __builtin_constant_p(_y) & + __builtin_constant_p(_z) & __builtin_constant_p(_w)) { + mVec128 = (vec_float4){_x, _y, _z, _w}; + } else { + float *pf = (float *)&mVec128; + pf[0] = _x; + pf[1] = _y; + pf[2] = _z; + pf[3] = _w; + } +} + +inline Quat::Quat( floatInVec _x, floatInVec _y, floatInVec _z, floatInVec _w ) +{ + vec_float4 xz = vec_mergeh( _x.get128(), _z.get128() ); + vec_float4 yw = vec_mergeh( _y.get128(), _w.get128() ); + mVec128 = vec_mergeh( xz, yw ); +} + +inline Quat::Quat( Vector3 xyz, float _w ) +{ + mVec128 = xyz.get128(); + _vmathVfSetElement(mVec128, _w, 3); +} + +inline Quat::Quat( Vector3 xyz, floatInVec _w ) +{ + mVec128 = xyz.get128(); + mVec128 = _vmathVfInsert(mVec128, _w.get128(), 3); +} + +inline Quat::Quat( Vector4 vec ) +{ + mVec128 = vec.get128(); +} + +inline Quat::Quat( float scalar ) +{ + mVec128 = floatInVec(scalar).get128(); +} + +inline Quat::Quat( floatInVec scalar ) +{ + mVec128 = scalar.get128(); +} + +inline Quat::Quat( vec_float4 vf4 ) +{ + mVec128 = vf4; +} + +inline const Quat Quat::identity( ) +{ + return Quat( _VECTORMATH_UNIT_0001 ); +} + +inline const Quat lerp( float t, Quat quat0, Quat quat1 ) +{ + return lerp( floatInVec(t), quat0, quat1 ); +} + +inline const Quat lerp( floatInVec t, Quat quat0, Quat quat1 ) +{ + return ( quat0 + ( ( quat1 - quat0 ) * t ) ); +} + +inline const Quat slerp( float t, Quat unitQuat0, Quat unitQuat1 ) +{ + return slerp( floatInVec(t), unitQuat0, unitQuat1 ); +} + +inline const Quat slerp( floatInVec t, Quat unitQuat0, Quat unitQuat1 ) +{ + Quat start; + vec_float4 scales, scale0, scale1, cosAngle, angle, tttt, oneMinusT, angles, sines; + vec_uint4 selectMask; + cosAngle = _vmathVfDot4( unitQuat0.get128(), unitQuat1.get128() ); + cosAngle = vec_splat( cosAngle, 0 ); + selectMask = (vec_uint4)vec_cmpgt( ((vec_float4){0.0f,0.0f,0.0f,0.0f}), cosAngle ); + cosAngle = vec_sel( cosAngle, negatef4( cosAngle ), selectMask ); + start = Quat( vec_sel( unitQuat0.get128(), negatef4( unitQuat0.get128() ), selectMask ) ); + selectMask = (vec_uint4)vec_cmpgt( ((vec_float4){_VECTORMATH_SLERP_TOL,_VECTORMATH_SLERP_TOL,_VECTORMATH_SLERP_TOL,_VECTORMATH_SLERP_TOL}), cosAngle ); + angle = acosf4( cosAngle ); + tttt = t.get128(); + oneMinusT = vec_sub( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), tttt ); + angles = vec_mergeh( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), tttt ); + angles = vec_mergeh( angles, oneMinusT ); + angles = vec_madd( angles, angle, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + sines = sinf4( angles ); + scales = divf4( sines, vec_splat( sines, 0 ) ); + scale0 = vec_sel( oneMinusT, vec_splat( scales, 1 ), selectMask ); + scale1 = vec_sel( tttt, vec_splat( scales, 2 ), selectMask ); + return Quat( vec_madd( start.get128(), scale0, vec_madd( unitQuat1.get128(), scale1, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ) ); +} + +inline const Quat squad( float t, Quat unitQuat0, Quat unitQuat1, Quat unitQuat2, Quat unitQuat3 ) +{ + return squad( floatInVec(t), unitQuat0, unitQuat1, unitQuat2, unitQuat3 ); +} + +inline const Quat squad( floatInVec t, Quat unitQuat0, Quat unitQuat1, Quat unitQuat2, Quat unitQuat3 ) +{ + Quat tmp0, tmp1; + tmp0 = slerp( t, unitQuat0, unitQuat3 ); + tmp1 = slerp( t, unitQuat1, unitQuat2 ); + return slerp( ( ( floatInVec(2.0f) * t ) * ( floatInVec(1.0f) - t ) ), tmp0, tmp1 ); +} + +inline vec_float4 Quat::get128( ) const +{ + return mVec128; +} + +inline Quat & Quat::operator =( Quat quat ) +{ + mVec128 = quat.mVec128; + return *this; +} + +inline Quat & Quat::setXYZ( Vector3 vec ) +{ + mVec128 = vec_sel( vec.get128(), mVec128, _VECTORMATH_MASK_0x000F ); + return *this; +} + +inline const Vector3 Quat::getXYZ( ) const +{ + return Vector3( mVec128 ); +} + +inline Quat & Quat::setX( float _x ) +{ + _vmathVfSetElement(mVec128, _x, 0); + return *this; +} + +inline Quat & Quat::setX( floatInVec _x ) +{ + mVec128 = _vmathVfInsert(mVec128, _x.get128(), 0); + return *this; +} + +inline const floatInVec Quat::getX( ) const +{ + return floatInVec( mVec128, 0 ); +} + +inline Quat & Quat::setY( float _y ) +{ + _vmathVfSetElement(mVec128, _y, 1); + return *this; +} + +inline Quat & Quat::setY( floatInVec _y ) +{ + mVec128 = _vmathVfInsert(mVec128, _y.get128(), 1); + return *this; +} + +inline const floatInVec Quat::getY( ) const +{ + return floatInVec( mVec128, 1 ); +} + +inline Quat & Quat::setZ( float _z ) +{ + _vmathVfSetElement(mVec128, _z, 2); + return *this; +} + +inline Quat & Quat::setZ( floatInVec _z ) +{ + mVec128 = _vmathVfInsert(mVec128, _z.get128(), 2); + return *this; +} + +inline const floatInVec Quat::getZ( ) const +{ + return floatInVec( mVec128, 2 ); +} + +inline Quat & Quat::setW( float _w ) +{ + _vmathVfSetElement(mVec128, _w, 3); + return *this; +} + +inline Quat & Quat::setW( floatInVec _w ) +{ + mVec128 = _vmathVfInsert(mVec128, _w.get128(), 3); + return *this; +} + +inline const floatInVec Quat::getW( ) const +{ + return floatInVec( mVec128, 3 ); +} + +inline Quat & Quat::setElem( int idx, float value ) +{ + _vmathVfSetElement(mVec128, value, idx); + return *this; +} + +inline Quat & Quat::setElem( int idx, floatInVec value ) +{ + mVec128 = _vmathVfInsert(mVec128, value.get128(), idx); + return *this; +} + +inline const floatInVec Quat::getElem( int idx ) const +{ + return floatInVec( mVec128, idx ); +} + +inline VecIdx Quat::operator []( int idx ) +{ + return VecIdx( mVec128, idx ); +} + +inline const floatInVec Quat::operator []( int idx ) const +{ + return floatInVec( mVec128, idx ); +} + +inline const Quat Quat::operator +( Quat quat ) const +{ + return Quat( vec_add( mVec128, quat.mVec128 ) ); +} + +inline const Quat Quat::operator -( Quat quat ) const +{ + return Quat( vec_sub( mVec128, quat.mVec128 ) ); +} + +inline const Quat Quat::operator *( float scalar ) const +{ + return *this * floatInVec(scalar); +} + +inline const Quat Quat::operator *( floatInVec scalar ) const +{ + return Quat( vec_madd( mVec128, scalar.get128(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); +} + +inline Quat & Quat::operator +=( Quat quat ) +{ + *this = *this + quat; + return *this; +} + +inline Quat & Quat::operator -=( Quat quat ) +{ + *this = *this - quat; + return *this; +} + +inline Quat & Quat::operator *=( float scalar ) +{ + *this = *this * scalar; + return *this; +} + +inline Quat & Quat::operator *=( floatInVec scalar ) +{ + *this = *this * scalar; + return *this; +} + +inline const Quat Quat::operator /( float scalar ) const +{ + return *this / floatInVec(scalar); +} + +inline const Quat Quat::operator /( floatInVec scalar ) const +{ + return Quat( divf4( mVec128, scalar.get128() ) ); +} + +inline Quat & Quat::operator /=( float scalar ) +{ + *this = *this / scalar; + return *this; +} + +inline Quat & Quat::operator /=( floatInVec scalar ) +{ + *this = *this / scalar; + return *this; +} + +inline const Quat Quat::operator -( ) const +{ + return Quat( negatef4( mVec128 ) ); +} + +inline const Quat operator *( float scalar, Quat quat ) +{ + return floatInVec(scalar) * quat; +} + +inline const Quat operator *( floatInVec scalar, Quat quat ) +{ + return quat * scalar; +} + +inline const floatInVec dot( Quat quat0, Quat quat1 ) +{ + return floatInVec( _vmathVfDot4( quat0.get128(), quat1.get128() ), 0 ); +} + +inline const floatInVec norm( Quat quat ) +{ + return floatInVec( _vmathVfDot4( quat.get128(), quat.get128() ), 0 ); +} + +inline const floatInVec length( Quat quat ) +{ + return floatInVec( sqrtf4(_vmathVfDot4( quat.get128(), quat.get128() )), 0 ); +} + +inline const Quat normalize( Quat quat ) +{ + vec_float4 dot = _vmathVfDot4( quat.get128(), quat.get128() ); + return Quat( vec_madd( quat.get128(), rsqrtf4( dot ), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); +} + +inline const Quat Quat::rotation( Vector3 unitVec0, Vector3 unitVec1 ) +{ + Vector3 crossVec; + vec_float4 cosAngle, cosAngleX2Plus2, recipCosHalfAngleX2, cosHalfAngleX2, res; + cosAngle = _vmathVfDot3( unitVec0.get128(), unitVec1.get128() ); + cosAngle = vec_splat( cosAngle, 0 ); + cosAngleX2Plus2 = vec_madd( cosAngle, ((vec_float4){2.0f,2.0f,2.0f,2.0f}), ((vec_float4){2.0f,2.0f,2.0f,2.0f}) ); + recipCosHalfAngleX2 = rsqrtf4( cosAngleX2Plus2 ); + cosHalfAngleX2 = vec_madd( recipCosHalfAngleX2, cosAngleX2Plus2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + crossVec = cross( unitVec0, unitVec1 ); + res = vec_madd( crossVec.get128(), recipCosHalfAngleX2, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + res = vec_sel( res, vec_madd( cosHalfAngleX2, ((vec_float4){0.5f,0.5f,0.5f,0.5f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), _VECTORMATH_MASK_0x000F ); + return Quat( res ); +} + +inline const Quat Quat::rotation( float radians, Vector3 unitVec ) +{ + return rotation( floatInVec(radians), unitVec ); +} + +inline const Quat Quat::rotation( floatInVec radians, Vector3 unitVec ) +{ + vec_float4 s, c, angle, res; + angle = vec_madd( radians.get128(), ((vec_float4){0.5f,0.5f,0.5f,0.5f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + sincosf4( angle, &s, &c ); + res = vec_sel( vec_madd( unitVec.get128(), s, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), c, _VECTORMATH_MASK_0x000F ); + return Quat( res ); +} + +inline const Quat Quat::rotationX( float radians ) +{ + return rotationX( floatInVec(radians) ); +} + +inline const Quat Quat::rotationX( floatInVec radians ) +{ + vec_float4 s, c, angle, res; + angle = vec_madd( radians.get128(), ((vec_float4){0.5f,0.5f,0.5f,0.5f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + sincosf4( angle, &s, &c ); + res = vec_sel( ((vec_float4){0.0f,0.0f,0.0f,0.0f}), s, _VECTORMATH_MASK_0xF000 ); + res = vec_sel( res, c, _VECTORMATH_MASK_0x000F ); + return Quat( res ); +} + +inline const Quat Quat::rotationY( float radians ) +{ + return rotationY( floatInVec(radians) ); +} + +inline const Quat Quat::rotationY( floatInVec radians ) +{ + vec_float4 s, c, angle, res; + angle = vec_madd( radians.get128(), ((vec_float4){0.5f,0.5f,0.5f,0.5f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + sincosf4( angle, &s, &c ); + res = vec_sel( ((vec_float4){0.0f,0.0f,0.0f,0.0f}), s, _VECTORMATH_MASK_0x0F00 ); + res = vec_sel( res, c, _VECTORMATH_MASK_0x000F ); + return Quat( res ); +} + +inline const Quat Quat::rotationZ( float radians ) +{ + return rotationZ( floatInVec(radians) ); +} + +inline const Quat Quat::rotationZ( floatInVec radians ) +{ + vec_float4 s, c, angle, res; + angle = vec_madd( radians.get128(), ((vec_float4){0.5f,0.5f,0.5f,0.5f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + sincosf4( angle, &s, &c ); + res = vec_sel( ((vec_float4){0.0f,0.0f,0.0f,0.0f}), s, _VECTORMATH_MASK_0x00F0 ); + res = vec_sel( res, c, _VECTORMATH_MASK_0x000F ); + return Quat( res ); +} + +inline const Quat Quat::operator *( Quat quat ) const +{ + vec_float4 ldata, rdata, qv, tmp0, tmp1, tmp2, tmp3; + vec_float4 product, l_wxyz, r_wxyz, xy, qw; + ldata = mVec128; + rdata = quat.mVec128; + tmp0 = vec_perm( ldata, ldata, _VECTORMATH_PERM_YZXW ); + tmp1 = vec_perm( rdata, rdata, _VECTORMATH_PERM_ZXYW ); + tmp2 = vec_perm( ldata, ldata, _VECTORMATH_PERM_ZXYW ); + tmp3 = vec_perm( rdata, rdata, _VECTORMATH_PERM_YZXW ); + qv = vec_madd( vec_splat( ldata, 3 ), rdata, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + qv = vec_madd( vec_splat( rdata, 3 ), ldata, qv ); + qv = vec_madd( tmp0, tmp1, qv ); + qv = vec_nmsub( tmp2, tmp3, qv ); + product = vec_madd( ldata, rdata, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + l_wxyz = vec_sld( ldata, ldata, 12 ); + r_wxyz = vec_sld( rdata, rdata, 12 ); + qw = vec_nmsub( l_wxyz, r_wxyz, product ); + xy = vec_madd( l_wxyz, r_wxyz, product ); + qw = vec_sub( qw, vec_sld( xy, xy, 8 ) ); + return Quat( vec_sel( qv, qw, _VECTORMATH_MASK_0x000F ) ); +} + +inline Quat & Quat::operator *=( Quat quat ) +{ + *this = *this * quat; + return *this; +} + +inline const Vector3 rotate( Quat quat, Vector3 vec ) +{ + vec_float4 qdata, vdata, product, tmp0, tmp1, tmp2, tmp3, wwww, qv, qw, res; + qdata = quat.get128(); + vdata = vec.get128(); + tmp0 = vec_perm( qdata, qdata, _VECTORMATH_PERM_YZXW ); + tmp1 = vec_perm( vdata, vdata, _VECTORMATH_PERM_ZXYW ); + tmp2 = vec_perm( qdata, qdata, _VECTORMATH_PERM_ZXYW ); + tmp3 = vec_perm( vdata, vdata, _VECTORMATH_PERM_YZXW ); + wwww = vec_splat( qdata, 3 ); + qv = vec_madd( wwww, vdata, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + qv = vec_madd( tmp0, tmp1, qv ); + qv = vec_nmsub( tmp2, tmp3, qv ); + product = vec_madd( qdata, vdata, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + qw = vec_madd( vec_sld( qdata, qdata, 4 ), vec_sld( vdata, vdata, 4 ), product ); + qw = vec_add( vec_sld( product, product, 8 ), qw ); + tmp1 = vec_perm( qv, qv, _VECTORMATH_PERM_ZXYW ); + tmp3 = vec_perm( qv, qv, _VECTORMATH_PERM_YZXW ); + res = vec_madd( vec_splat( qw, 0 ), qdata, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + res = vec_madd( wwww, qv, res ); + res = vec_madd( tmp0, tmp1, res ); + res = vec_nmsub( tmp2, tmp3, res ); + return Vector3( res ); +} + +inline const Quat conj( Quat quat ) +{ + return Quat( vec_xor( quat.get128(), ((vec_float4)(vec_int4){0x80000000,0x80000000,0x80000000,0}) ) ); +} + +inline const Quat select( Quat quat0, Quat quat1, bool select1 ) +{ + return select( quat0, quat1, boolInVec(select1) ); +} + +inline const Quat select( Quat quat0, Quat quat1, boolInVec select1 ) +{ + return Quat( vec_sel( quat0.get128(), quat1.get128(), select1.get128() ) ); +} + +#ifdef _VECTORMATH_DEBUG + +inline void print( Quat quat ) +{ + union { vec_float4 v; float s[4]; } tmp; + tmp.v = quat.get128(); + printf( "( %f %f %f %f )\n", tmp.s[0], tmp.s[1], tmp.s[2], tmp.s[3] ); +} + +inline void print( Quat quat, const char * name ) +{ + union { vec_float4 v; float s[4]; } tmp; + tmp.v = quat.get128(); + printf( "%s: ( %f %f %f %f )\n", name, tmp.s[0], tmp.s[1], tmp.s[2], tmp.s[3] ); +} + +#endif + +} // namespace Aos +} // namespace Vectormath + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/ppu/cpp/quat_soa.h b/Extras/vectormathlibrary/include/vectormath/ppu/cpp/quat_soa.h new file mode 100644 index 000000000..fb83e8121 --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/ppu/cpp/quat_soa.h @@ -0,0 +1,479 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_QUAT_SOA_CPP_H +#define _VECTORMATH_QUAT_SOA_CPP_H +//----------------------------------------------------------------------------- +// Definitions + +#ifndef _VECTORMATH_INTERNAL_FUNCTIONS +#define _VECTORMATH_INTERNAL_FUNCTIONS + +#endif + +namespace Vectormath { +namespace Soa { + +inline Quat::Quat( const Quat & quat ) +{ + mX = quat.mX; + mY = quat.mY; + mZ = quat.mZ; + mW = quat.mW; +} + +inline Quat::Quat( vec_float4 _x, vec_float4 _y, vec_float4 _z, vec_float4 _w ) +{ + mX = _x; + mY = _y; + mZ = _z; + mW = _w; +} + +inline Quat::Quat( const Vector3 & xyz, vec_float4 _w ) +{ + this->setXYZ( xyz ); + this->setW( _w ); +} + +inline Quat::Quat( const Vector4 & vec ) +{ + mX = vec.getX(); + mY = vec.getY(); + mZ = vec.getZ(); + mW = vec.getW(); +} + +inline Quat::Quat( vec_float4 scalar ) +{ + mX = scalar; + mY = scalar; + mZ = scalar; + mW = scalar; +} + +inline Quat::Quat( Aos::Quat quat ) +{ + vec_float4 vec128 = quat.get128(); + mX = vec_splat( vec128, 0 ); + mY = vec_splat( vec128, 1 ); + mZ = vec_splat( vec128, 2 ); + mW = vec_splat( vec128, 3 ); +} + +inline Quat::Quat( Aos::Quat quat0, Aos::Quat quat1, Aos::Quat quat2, Aos::Quat quat3 ) +{ + vec_float4 tmp0, tmp1, tmp2, tmp3; + tmp0 = vec_mergeh( quat0.get128(), quat2.get128() ); + tmp1 = vec_mergeh( quat1.get128(), quat3.get128() ); + tmp2 = vec_mergel( quat0.get128(), quat2.get128() ); + tmp3 = vec_mergel( quat1.get128(), quat3.get128() ); + mX = vec_mergeh( tmp0, tmp1 ); + mY = vec_mergel( tmp0, tmp1 ); + mZ = vec_mergeh( tmp2, tmp3 ); + mW = vec_mergel( tmp2, tmp3 ); +} + +inline const Quat Quat::identity( ) +{ + return Quat( ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){1.0f,1.0f,1.0f,1.0f}) ); +} + +inline const Quat lerp( vec_float4 t, const Quat & quat0, const Quat & quat1 ) +{ + return ( quat0 + ( ( quat1 - quat0 ) * t ) ); +} + +inline const Quat slerp( vec_float4 t, const Quat & unitQuat0, const Quat & unitQuat1 ) +{ + Quat start; + vec_float4 recipSinAngle, scale0, scale1, cosAngle, angle; + vec_uint4 selectMask; + cosAngle = dot( unitQuat0, unitQuat1 ); + selectMask = (vec_uint4)vec_cmpgt( (vec_float4){0.0f,0.0f,0.0f,0.0f}, cosAngle ); + cosAngle = vec_sel( cosAngle, negatef4( cosAngle ), selectMask ); + start.setX( vec_sel( unitQuat0.getX(), negatef4( unitQuat0.getX() ), selectMask ) ); + start.setY( vec_sel( unitQuat0.getY(), negatef4( unitQuat0.getY() ), selectMask ) ); + start.setZ( vec_sel( unitQuat0.getZ(), negatef4( unitQuat0.getZ() ), selectMask ) ); + start.setW( vec_sel( unitQuat0.getW(), negatef4( unitQuat0.getW() ), selectMask ) ); + selectMask = (vec_uint4)vec_cmpgt( (vec_float4){_VECTORMATH_SLERP_TOL,_VECTORMATH_SLERP_TOL,_VECTORMATH_SLERP_TOL,_VECTORMATH_SLERP_TOL}, cosAngle ); + angle = acosf4( cosAngle ); + recipSinAngle = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), sinf4( angle ) ); + scale0 = vec_sel( vec_sub( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), t ), vec_madd( sinf4( vec_madd( vec_sub( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), t ), angle, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), recipSinAngle, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), selectMask ); + scale1 = vec_sel( t, vec_madd( sinf4( vec_madd( t, angle, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), recipSinAngle, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), selectMask ); + return ( ( start * scale0 ) + ( unitQuat1 * scale1 ) ); +} + +inline const Quat squad( vec_float4 t, const Quat & unitQuat0, const Quat & unitQuat1, const Quat & unitQuat2, const Quat & unitQuat3 ) +{ + Quat tmp0, tmp1; + tmp0 = slerp( t, unitQuat0, unitQuat3 ); + tmp1 = slerp( t, unitQuat1, unitQuat2 ); + return slerp( vec_madd( vec_madd( ((vec_float4){2.0f,2.0f,2.0f,2.0f}), t, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_sub( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), t ), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), tmp0, tmp1 ); +} + +inline void Quat::get4Aos( Aos::Quat & result0, Aos::Quat & result1, Aos::Quat & result2, Aos::Quat & result3 ) const +{ + vec_float4 tmp0, tmp1, tmp2, tmp3; + tmp0 = vec_mergeh( mX, mZ ); + tmp1 = vec_mergeh( mY, mW ); + tmp2 = vec_mergel( mX, mZ ); + tmp3 = vec_mergel( mY, mW ); + result0 = Aos::Quat( vec_mergeh( tmp0, tmp1 ) ); + result1 = Aos::Quat( vec_mergel( tmp0, tmp1 ) ); + result2 = Aos::Quat( vec_mergeh( tmp2, tmp3 ) ); + result3 = Aos::Quat( vec_mergel( tmp2, tmp3 ) ); +} + +inline Quat & Quat::operator =( const Quat & quat ) +{ + mX = quat.mX; + mY = quat.mY; + mZ = quat.mZ; + mW = quat.mW; + return *this; +} + +inline Quat & Quat::setXYZ( const Vector3 & vec ) +{ + mX = vec.getX(); + mY = vec.getY(); + mZ = vec.getZ(); + return *this; +} + +inline const Vector3 Quat::getXYZ( ) const +{ + return Vector3( mX, mY, mZ ); +} + +inline Quat & Quat::setX( vec_float4 _x ) +{ + mX = _x; + return *this; +} + +inline vec_float4 Quat::getX( ) const +{ + return mX; +} + +inline Quat & Quat::setY( vec_float4 _y ) +{ + mY = _y; + return *this; +} + +inline vec_float4 Quat::getY( ) const +{ + return mY; +} + +inline Quat & Quat::setZ( vec_float4 _z ) +{ + mZ = _z; + return *this; +} + +inline vec_float4 Quat::getZ( ) const +{ + return mZ; +} + +inline Quat & Quat::setW( vec_float4 _w ) +{ + mW = _w; + return *this; +} + +inline vec_float4 Quat::getW( ) const +{ + return mW; +} + +inline Quat & Quat::setElem( int idx, vec_float4 value ) +{ + *(&mX + idx) = value; + return *this; +} + +inline vec_float4 Quat::getElem( int idx ) const +{ + return *(&mX + idx); +} + +inline Quat::vec_float4_t & Quat::operator []( int idx ) +{ + return *(&mX + idx); +} + +inline vec_float4 Quat::operator []( int idx ) const +{ + return *(&mX + idx); +} + +inline const Quat Quat::operator +( const Quat & quat ) const +{ + return Quat( + vec_add( mX, quat.mX ), + vec_add( mY, quat.mY ), + vec_add( mZ, quat.mZ ), + vec_add( mW, quat.mW ) + ); +} + +inline const Quat Quat::operator -( const Quat & quat ) const +{ + return Quat( + vec_sub( mX, quat.mX ), + vec_sub( mY, quat.mY ), + vec_sub( mZ, quat.mZ ), + vec_sub( mW, quat.mW ) + ); +} + +inline const Quat Quat::operator *( vec_float4 scalar ) const +{ + return Quat( + vec_madd( mX, scalar, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), + vec_madd( mY, scalar, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), + vec_madd( mZ, scalar, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), + vec_madd( mW, scalar, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) + ); +} + +inline Quat & Quat::operator +=( const Quat & quat ) +{ + *this = *this + quat; + return *this; +} + +inline Quat & Quat::operator -=( const Quat & quat ) +{ + *this = *this - quat; + return *this; +} + +inline Quat & Quat::operator *=( vec_float4 scalar ) +{ + *this = *this * scalar; + return *this; +} + +inline const Quat Quat::operator /( vec_float4 scalar ) const +{ + return Quat( + divf4( mX, scalar ), + divf4( mY, scalar ), + divf4( mZ, scalar ), + divf4( mW, scalar ) + ); +} + +inline Quat & Quat::operator /=( vec_float4 scalar ) +{ + *this = *this / scalar; + return *this; +} + +inline const Quat Quat::operator -( ) const +{ + return Quat( + negatef4( mX ), + negatef4( mY ), + negatef4( mZ ), + negatef4( mW ) + ); +} + +inline const Quat operator *( vec_float4 scalar, const Quat & quat ) +{ + return quat * scalar; +} + +inline vec_float4 dot( const Quat & quat0, const Quat & quat1 ) +{ + vec_float4 result; + result = vec_madd( quat0.getX(), quat1.getX(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + result = vec_add( result, vec_madd( quat0.getY(), quat1.getY(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + result = vec_add( result, vec_madd( quat0.getZ(), quat1.getZ(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + result = vec_add( result, vec_madd( quat0.getW(), quat1.getW(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + return result; +} + +inline vec_float4 norm( const Quat & quat ) +{ + vec_float4 result; + result = vec_madd( quat.getX(), quat.getX(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + result = vec_add( result, vec_madd( quat.getY(), quat.getY(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + result = vec_add( result, vec_madd( quat.getZ(), quat.getZ(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + result = vec_add( result, vec_madd( quat.getW(), quat.getW(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + return result; +} + +inline vec_float4 length( const Quat & quat ) +{ + return sqrtf4( norm( quat ) ); +} + +inline const Quat normalize( const Quat & quat ) +{ + vec_float4 lenSqr, lenInv; + lenSqr = norm( quat ); + lenInv = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), sqrtf4( lenSqr ) ); + return Quat( + vec_madd( quat.getX(), lenInv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), + vec_madd( quat.getY(), lenInv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), + vec_madd( quat.getZ(), lenInv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), + vec_madd( quat.getW(), lenInv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) + ); +} + +inline const Quat Quat::rotation( const Vector3 & unitVec0, const Vector3 & unitVec1 ) +{ + vec_float4 cosHalfAngleX2, recipCosHalfAngleX2; + cosHalfAngleX2 = sqrtf4( vec_madd( ((vec_float4){2.0f,2.0f,2.0f,2.0f}), vec_add( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), dot( unitVec0, unitVec1 ) ), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + recipCosHalfAngleX2 = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), cosHalfAngleX2 ); + return Quat( ( cross( unitVec0, unitVec1 ) * recipCosHalfAngleX2 ), vec_madd( cosHalfAngleX2, ((vec_float4){0.5f,0.5f,0.5f,0.5f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); +} + +inline const Quat Quat::rotation( vec_float4 radians, const Vector3 & unitVec ) +{ + vec_float4 s, c, angle; + angle = vec_madd( radians, ((vec_float4){0.5f,0.5f,0.5f,0.5f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + sincosf4( angle, &s, &c ); + return Quat( ( unitVec * s ), c ); +} + +inline const Quat Quat::rotationX( vec_float4 radians ) +{ + vec_float4 s, c, angle; + angle = vec_madd( radians, ((vec_float4){0.5f,0.5f,0.5f,0.5f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + sincosf4( angle, &s, &c ); + return Quat( s, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), c ); +} + +inline const Quat Quat::rotationY( vec_float4 radians ) +{ + vec_float4 s, c, angle; + angle = vec_madd( radians, ((vec_float4){0.5f,0.5f,0.5f,0.5f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + sincosf4( angle, &s, &c ); + return Quat( ((vec_float4){0.0f,0.0f,0.0f,0.0f}), s, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), c ); +} + +inline const Quat Quat::rotationZ( vec_float4 radians ) +{ + vec_float4 s, c, angle; + angle = vec_madd( radians, ((vec_float4){0.5f,0.5f,0.5f,0.5f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + sincosf4( angle, &s, &c ); + return Quat( ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), s, c ); +} + +inline const Quat Quat::operator *( const Quat & quat ) const +{ + return Quat( + vec_sub( vec_add( vec_add( vec_madd( mW, quat.mX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mX, quat.mW, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mY, quat.mZ, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mZ, quat.mY, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), + vec_sub( vec_add( vec_add( vec_madd( mW, quat.mY, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mY, quat.mW, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mZ, quat.mX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mX, quat.mZ, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), + vec_sub( vec_add( vec_add( vec_madd( mW, quat.mZ, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mZ, quat.mW, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mX, quat.mY, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mY, quat.mX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), + vec_sub( vec_sub( vec_sub( vec_madd( mW, quat.mW, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( mX, quat.mX, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mY, quat.mY, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( mZ, quat.mZ, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ) + ); +} + +inline Quat & Quat::operator *=( const Quat & quat ) +{ + *this = *this * quat; + return *this; +} + +inline const Vector3 rotate( const Quat & quat, const Vector3 & vec ) +{ + vec_float4 tmpX, tmpY, tmpZ, tmpW; + tmpX = vec_sub( vec_add( vec_madd( quat.getW(), vec.getX(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( quat.getY(), vec.getZ(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( quat.getZ(), vec.getY(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + tmpY = vec_sub( vec_add( vec_madd( quat.getW(), vec.getY(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( quat.getZ(), vec.getX(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( quat.getX(), vec.getZ(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + tmpZ = vec_sub( vec_add( vec_madd( quat.getW(), vec.getZ(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( quat.getX(), vec.getY(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( quat.getY(), vec.getX(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + tmpW = vec_add( vec_add( vec_madd( quat.getX(), vec.getX(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( quat.getY(), vec.getY(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( quat.getZ(), vec.getZ(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + return Vector3( + vec_add( vec_sub( vec_add( vec_madd( tmpW, quat.getX(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( tmpX, quat.getW(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( tmpY, quat.getZ(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( tmpZ, quat.getY(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), + vec_add( vec_sub( vec_add( vec_madd( tmpW, quat.getY(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( tmpY, quat.getW(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( tmpZ, quat.getX(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( tmpX, quat.getZ(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), + vec_add( vec_sub( vec_add( vec_madd( tmpW, quat.getZ(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( tmpZ, quat.getW(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( tmpX, quat.getY(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), vec_madd( tmpY, quat.getX(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ) + ); +} + +inline const Quat conj( const Quat & quat ) +{ + return Quat( negatef4( quat.getX() ), negatef4( quat.getY() ), negatef4( quat.getZ() ), quat.getW() ); +} + +inline const Quat select( const Quat & quat0, const Quat & quat1, vec_uint4 select1 ) +{ + return Quat( + vec_sel( quat0.getX(), quat1.getX(), select1 ), + vec_sel( quat0.getY(), quat1.getY(), select1 ), + vec_sel( quat0.getZ(), quat1.getZ(), select1 ), + vec_sel( quat0.getW(), quat1.getW(), select1 ) + ); +} + +#ifdef _VECTORMATH_DEBUG + +inline void print( const Quat & quat ) +{ + Aos::Quat vec0, vec1, vec2, vec3; + quat.get4Aos( vec0, vec1, vec2, vec3 ); + printf("slot 0:\n"); + print( vec0 ); + printf("slot 1:\n"); + print( vec1 ); + printf("slot 2:\n"); + print( vec2 ); + printf("slot 3:\n"); + print( vec3 ); +} + +inline void print( const Quat & quat, const char * name ) +{ + Aos::Quat vec0, vec1, vec2, vec3; + printf( "%s:\n", name ); + quat.get4Aos( vec0, vec1, vec2, vec3 ); + printf("slot 0:\n"); + print( vec0 ); + printf("slot 1:\n"); + print( vec1 ); + printf("slot 2:\n"); + print( vec2 ); + printf("slot 3:\n"); + print( vec3 ); +} + +#endif + +} // namespace Soa +} // namespace Vectormath + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/ppu/cpp/vec_aos.h b/Extras/vectormathlibrary/include/vectormath/ppu/cpp/vec_aos.h new file mode 100644 index 000000000..dc1f9849b --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/ppu/cpp/vec_aos.h @@ -0,0 +1,1492 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_VEC_AOS_CPP_H +#define _VECTORMATH_VEC_AOS_CPP_H +//----------------------------------------------------------------------------- +// Constants +// for permutes words are labeled [x,y,z,w] [a,b,c,d] + +#define _VECTORMATH_PERM_X 0x00010203 +#define _VECTORMATH_PERM_Y 0x04050607 +#define _VECTORMATH_PERM_Z 0x08090a0b +#define _VECTORMATH_PERM_W 0x0c0d0e0f +#define _VECTORMATH_PERM_A 0x10111213 +#define _VECTORMATH_PERM_B 0x14151617 +#define _VECTORMATH_PERM_C 0x18191a1b +#define _VECTORMATH_PERM_D 0x1c1d1e1f +#define _VECTORMATH_PERM_XYZA (vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_X, _VECTORMATH_PERM_Y, _VECTORMATH_PERM_Z, _VECTORMATH_PERM_A } +#define _VECTORMATH_PERM_ZXYW (vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_Z, _VECTORMATH_PERM_X, _VECTORMATH_PERM_Y, _VECTORMATH_PERM_W } +#define _VECTORMATH_PERM_YZXW (vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_Y, _VECTORMATH_PERM_Z, _VECTORMATH_PERM_X, _VECTORMATH_PERM_W } +#define _VECTORMATH_PERM_YZAB (vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_Y, _VECTORMATH_PERM_Z, _VECTORMATH_PERM_A, _VECTORMATH_PERM_B } +#define _VECTORMATH_PERM_ZABC (vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_Z, _VECTORMATH_PERM_A, _VECTORMATH_PERM_B, _VECTORMATH_PERM_C } +#define _VECTORMATH_PERM_XYAW (vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_X, _VECTORMATH_PERM_Y, _VECTORMATH_PERM_A, _VECTORMATH_PERM_W } +#define _VECTORMATH_PERM_XAZW (vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_X, _VECTORMATH_PERM_A, _VECTORMATH_PERM_Z, _VECTORMATH_PERM_W } +#define _VECTORMATH_MASK_0xF000 (vec_uint4){ 0xffffffff, 0, 0, 0 } +#define _VECTORMATH_MASK_0x0F00 (vec_uint4){ 0, 0xffffffff, 0, 0 } +#define _VECTORMATH_MASK_0x00F0 (vec_uint4){ 0, 0, 0xffffffff, 0 } +#define _VECTORMATH_MASK_0x000F (vec_uint4){ 0, 0, 0, 0xffffffff } +#define _VECTORMATH_UNIT_1000 (vec_float4){ 1.0f, 0.0f, 0.0f, 0.0f } +#define _VECTORMATH_UNIT_0100 (vec_float4){ 0.0f, 1.0f, 0.0f, 0.0f } +#define _VECTORMATH_UNIT_0010 (vec_float4){ 0.0f, 0.0f, 1.0f, 0.0f } +#define _VECTORMATH_UNIT_0001 (vec_float4){ 0.0f, 0.0f, 0.0f, 1.0f } +#define _VECTORMATH_SLERP_TOL 0.999f + +//----------------------------------------------------------------------------- +// Definitions + +#ifndef _VECTORMATH_INTERNAL_FUNCTIONS +#define _VECTORMATH_INTERNAL_FUNCTIONS + +static inline vec_float4 _vmathVfDot3( vec_float4 vec0, vec_float4 vec1 ) +{ + vec_float4 result; + result = vec_madd( vec0, vec1, (vec_float4){0.0f,0.0f,0.0f,0.0f} ); + result = vec_madd( vec_sld( vec0, vec0, 4 ), vec_sld( vec1, vec1, 4 ), result ); + return vec_madd( vec_sld( vec0, vec0, 8 ), vec_sld( vec1, vec1, 8 ), result ); +} + +static inline vec_float4 _vmathVfDot4( vec_float4 vec0, vec_float4 vec1 ) +{ + vec_float4 result; + result = vec_madd( vec0, vec1, (vec_float4){0.0f,0.0f,0.0f,0.0f} ); + result = vec_madd( vec_sld( vec0, vec0, 4 ), vec_sld( vec1, vec1, 4 ), result ); + return vec_add( vec_sld( result, result, 8 ), result ); +} + +static inline vec_float4 _vmathVfCross( vec_float4 vec0, vec_float4 vec1 ) +{ + vec_float4 tmp0, tmp1, tmp2, tmp3, result; + tmp0 = vec_perm( vec0, vec0, _VECTORMATH_PERM_YZXW ); + tmp1 = vec_perm( vec1, vec1, _VECTORMATH_PERM_ZXYW ); + tmp2 = vec_perm( vec0, vec0, _VECTORMATH_PERM_ZXYW ); + tmp3 = vec_perm( vec1, vec1, _VECTORMATH_PERM_YZXW ); + result = vec_madd( tmp0, tmp1, (vec_float4){0.0f,0.0f,0.0f,0.0f} ); + result = vec_nmsub( tmp2, tmp3, result ); + return result; +} + +static inline vec_uint4 _vmathVfToHalfFloatsUnpacked(vec_float4 v) +{ + vec_int4 bexp; + vec_uint4 mant, sign, hfloat; + vec_uint4 notZero, isInf; + const vec_uint4 hfloatInf = (vec_uint4){0x00007c00u,0x00007c00u,0x00007c00u,0x00007c00u}; + const vec_uint4 mergeMant = (vec_uint4){0x000003ffu,0x000003ffu,0x000003ffu,0x000003ffu}; + const vec_uint4 mergeSign = (vec_uint4){0x00008000u,0x00008000u,0x00008000u,0x00008000u}; + + sign = vec_sr((vec_uint4)v, (vec_uint4){16,16,16,16}); + mant = vec_sr((vec_uint4)v, (vec_uint4){13,13,13,13}); + bexp = vec_and(vec_sr((vec_int4)v, (vec_uint4){23,23,23,23}), (vec_int4){0xff,0xff,0xff,0xff}); + + notZero = (vec_uint4)vec_cmpgt(bexp, (vec_int4){112,112,112,112}); + isInf = (vec_uint4)vec_cmpgt(bexp, (vec_int4){142,142,142,142}); + + bexp = vec_add(bexp, (vec_int4){-112,-112,-112,-112}); + bexp = vec_sl(bexp, (vec_uint4){10,10,10,10}); + + hfloat = vec_sel((vec_uint4)bexp, mant, mergeMant); + hfloat = vec_sel((vec_uint4){0,0,0,0}, hfloat, notZero); + hfloat = vec_sel(hfloat, hfloatInf, isInf); + hfloat = vec_sel(hfloat, sign, mergeSign); + + return hfloat; +} + +static inline vec_ushort8 _vmath2VfToHalfFloats(vec_float4 u, vec_float4 v) +{ + vec_uint4 hfloat_u, hfloat_v; + const vec_uchar16 pack = (vec_uchar16){2,3,6,7,10,11,14,15,18,19,22,23,26,27,30,31}; + hfloat_u = _vmathVfToHalfFloatsUnpacked(u); + hfloat_v = _vmathVfToHalfFloatsUnpacked(v); + return (vec_ushort8)vec_perm(hfloat_u, hfloat_v, pack); +} + +#ifndef __GNUC__ +#define __builtin_constant_p(x) 0 +#endif + +static inline vec_float4 _vmathVfInsert(vec_float4 dst, vec_float4 src, int slot) +{ +#ifdef __GNUC__ + if (__builtin_constant_p(slot)) { + dst = vec_sld(dst, dst, slot<<2); + dst = vec_sld(dst, src, 4); + if (slot != 3) dst = vec_sld(dst, dst, (3-slot)<<2); + return dst; + } else +#endif + { + vec_uchar16 shiftpattern = vec_lvsr( 0, (float *)(size_t)(slot<<2) ); + vec_uint4 selectmask = (vec_uint4)vec_perm( (vec_uint4){0,0,0,0}, _VECTORMATH_MASK_0xF000, shiftpattern ); + return vec_sel( dst, src, selectmask ); + } +} + +#define _vmathVfGetElement(vec, slot) ((float *)&(vec))[slot] +#ifdef _VECTORMATH_SET_CONSTS_IN_MEM +#define _vmathVfSetElement(vec, scalar, slot) ((float *)&(vec))[slot] = scalar +#else +#define _vmathVfSetElement(vec, scalar, slot) \ +{ \ + if (__builtin_constant_p(scalar)) { \ + (vec) = _vmathVfInsert(vec, (vec_float4){scalar, scalar, scalar, scalar}, slot); \ + } else { \ + ((float *)&(vec))[slot] = scalar; \ + } \ +} +#endif + +static inline vec_float4 _vmathVfSplatScalar(float scalar) +{ + vec_float4 result; + if (__builtin_constant_p(scalar)) { + result = (vec_float4){scalar, scalar, scalar, scalar}; + } else { + result = vec_ld(0, &scalar); + result = vec_splat(vec_perm(result, result, vec_lvsl(0, &scalar)), 0); + } + return result; +} + +static inline vec_uint4 _vmathVuiSplatScalar(unsigned int scalar) +{ + vec_uint4 result; + if (__builtin_constant_p(scalar)) { + result = (vec_uint4){scalar, scalar, scalar, scalar}; + } else { + result = vec_ld(0, &scalar); + result = vec_splat(vec_perm(result, result, vec_lvsl(0, &scalar)), 0); + } + return result; +} + +#endif + +namespace Vectormath { +namespace Aos { + +#ifdef _VECTORMATH_NO_SCALAR_CAST +inline VecIdx::operator floatInVec() const +{ + return floatInVec(ref, i); +} + +inline float VecIdx::getAsFloat() const +#else +inline VecIdx::operator float() const +#endif +{ + return _vmathVfGetElement(ref, i); +} + +inline float VecIdx::operator =( float scalar ) +{ + _vmathVfSetElement(ref, scalar, i); + return scalar; +} + +inline floatInVec VecIdx::operator =( floatInVec scalar ) +{ + ref = _vmathVfInsert(ref, scalar.get128(), i); + return scalar; +} + +inline floatInVec VecIdx::operator =( const VecIdx& scalar ) +{ + return *this = floatInVec(scalar.ref, scalar.i); +} + +inline floatInVec VecIdx::operator *=( float scalar ) +{ + return *this *= floatInVec(scalar); +} + +inline floatInVec VecIdx::operator *=( floatInVec scalar ) +{ + return *this = floatInVec(ref, i) * scalar; +} + +inline floatInVec VecIdx::operator /=( float scalar ) +{ + return *this /= floatInVec(scalar); +} + +inline floatInVec VecIdx::operator /=( floatInVec scalar ) +{ + return *this = floatInVec(ref, i) / scalar; +} + +inline floatInVec VecIdx::operator +=( float scalar ) +{ + return *this += floatInVec(scalar); +} + +inline floatInVec VecIdx::operator +=( floatInVec scalar ) +{ + return *this = floatInVec(ref, i) + scalar; +} + +inline floatInVec VecIdx::operator -=( float scalar ) +{ + return *this -= floatInVec(scalar); +} + +inline floatInVec VecIdx::operator -=( floatInVec scalar ) +{ + return *this = floatInVec(ref, i) - scalar; +} + +inline Vector3::Vector3( float _x, float _y, float _z ) +{ + if (__builtin_constant_p(_x) & __builtin_constant_p(_y) & __builtin_constant_p(_z)) { + mVec128 = (vec_float4){_x, _y, _z, 0.0f}; + } else { + float *pf = (float *)&mVec128; + pf[0] = _x; + pf[1] = _y; + pf[2] = _z; + } +} + +inline Vector3::Vector3( floatInVec _x, floatInVec _y, floatInVec _z ) +{ + vec_float4 xz = vec_mergeh( _x.get128(), _z.get128() ); + mVec128 = vec_mergeh( xz, _y.get128() ); +} + +inline Vector3::Vector3( Point3 pnt ) +{ + mVec128 = pnt.get128(); +} + +inline Vector3::Vector3( float scalar ) +{ + mVec128 = floatInVec(scalar).get128(); +} + +inline Vector3::Vector3( floatInVec scalar ) +{ + mVec128 = scalar.get128(); +} + +inline Vector3::Vector3( vec_float4 vf4 ) +{ + mVec128 = vf4; +} + +inline const Vector3 Vector3::xAxis( ) +{ + return Vector3( _VECTORMATH_UNIT_1000 ); +} + +inline const Vector3 Vector3::yAxis( ) +{ + return Vector3( _VECTORMATH_UNIT_0100 ); +} + +inline const Vector3 Vector3::zAxis( ) +{ + return Vector3( _VECTORMATH_UNIT_0010 ); +} + +inline const Vector3 lerp( float t, Vector3 vec0, Vector3 vec1 ) +{ + return lerp( floatInVec(t), vec0, vec1 ); +} + +inline const Vector3 lerp( floatInVec t, Vector3 vec0, Vector3 vec1 ) +{ + return ( vec0 + ( ( vec1 - vec0 ) * t ) ); +} + +inline const Vector3 slerp( float t, Vector3 unitVec0, Vector3 unitVec1 ) +{ + return slerp( floatInVec(t), unitVec0, unitVec1 ); +} + +inline const Vector3 slerp( floatInVec t, Vector3 unitVec0, Vector3 unitVec1 ) +{ + vec_float4 scales, scale0, scale1, cosAngle, angle, tttt, oneMinusT, angles, sines; + vec_uint4 selectMask; + cosAngle = _vmathVfDot3( unitVec0.get128(), unitVec1.get128() ); + cosAngle = vec_splat( cosAngle, 0 ); + selectMask = (vec_uint4)vec_cmpgt( ((vec_float4){_VECTORMATH_SLERP_TOL,_VECTORMATH_SLERP_TOL,_VECTORMATH_SLERP_TOL,_VECTORMATH_SLERP_TOL}), cosAngle ); + angle = acosf4( cosAngle ); + tttt = t.get128(); + oneMinusT = vec_sub( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), tttt ); + angles = vec_mergeh( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), tttt ); + angles = vec_mergeh( angles, oneMinusT ); + angles = vec_madd( angles, angle, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + sines = sinf4( angles ); + scales = divf4( sines, vec_splat( sines, 0 ) ); + scale0 = vec_sel( oneMinusT, vec_splat( scales, 1 ), selectMask ); + scale1 = vec_sel( tttt, vec_splat( scales, 2 ), selectMask ); + return Vector3( vec_madd( unitVec0.get128(), scale0, vec_madd( unitVec1.get128(), scale1, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ) ); +} + +inline vec_float4 Vector3::get128( ) const +{ + return mVec128; +} + +inline void storeXYZ( Vector3 vec, vec_float4 * quad ) +{ + vec_float4 dstVec = *quad; + vec_uint4 mask = _VECTORMATH_MASK_0x000F; + dstVec = vec_sel(vec.get128(), dstVec, mask); + *quad = dstVec; +} + +inline void loadXYZArray( Vector3 & vec0, Vector3 & vec1, Vector3 & vec2, Vector3 & vec3, const vec_float4 * threeQuads ) +{ + vec_float4 xyzx, yzxy, zxyz, xyz1, xyz2, xyz3; + xyzx = threeQuads[0]; + yzxy = threeQuads[1]; + zxyz = threeQuads[2]; + xyz1 = vec_sld( xyzx, yzxy, 12 ); + xyz2 = vec_sld( yzxy, zxyz, 8 ); + xyz3 = vec_sld( zxyz, zxyz, 4 ); + vec0 = Vector3( xyzx ); + vec1 = Vector3( xyz1 ); + vec2 = Vector3( xyz2 ); + vec3 = Vector3( xyz3 ); +} + +inline void storeXYZArray( Vector3 vec0, Vector3 vec1, Vector3 vec2, Vector3 vec3, vec_float4 * threeQuads ) +{ + vec_float4 xyzx, yzxy, zxyz; + xyzx = vec_perm( vec0.get128(), vec1.get128(), _VECTORMATH_PERM_XYZA ); + yzxy = vec_perm( vec1.get128(), vec2.get128(), _VECTORMATH_PERM_YZAB ); + zxyz = vec_perm( vec2.get128(), vec3.get128(), _VECTORMATH_PERM_ZABC ); + threeQuads[0] = xyzx; + threeQuads[1] = yzxy; + threeQuads[2] = zxyz; +} + +inline void storeHalfFloats( Vector3 vec0, Vector3 vec1, Vector3 vec2, Vector3 vec3, Vector3 vec4, Vector3 vec5, Vector3 vec6, Vector3 vec7, vec_ushort8 * threeQuads ) +{ + vec_float4 xyz0[3]; + vec_float4 xyz1[3]; + storeXYZArray( vec0, vec1, vec2, vec3, xyz0 ); + storeXYZArray( vec4, vec5, vec6, vec7, xyz1 ); + threeQuads[0] = _vmath2VfToHalfFloats(xyz0[0], xyz0[1]); + threeQuads[1] = _vmath2VfToHalfFloats(xyz0[2], xyz1[0]); + threeQuads[2] = _vmath2VfToHalfFloats(xyz1[1], xyz1[2]); +} + +inline Vector3 & Vector3::operator =( Vector3 vec ) +{ + mVec128 = vec.mVec128; + return *this; +} + +inline Vector3 & Vector3::setX( float _x ) +{ + _vmathVfSetElement(mVec128, _x, 0); + return *this; +} + +inline Vector3 & Vector3::setX( floatInVec _x ) +{ + mVec128 = _vmathVfInsert(mVec128, _x.get128(), 0); + return *this; +} + +inline const floatInVec Vector3::getX( ) const +{ + return floatInVec( mVec128, 0 ); +} + +inline Vector3 & Vector3::setY( float _y ) +{ + _vmathVfSetElement(mVec128, _y, 1); + return *this; +} + +inline Vector3 & Vector3::setY( floatInVec _y ) +{ + mVec128 = _vmathVfInsert(mVec128, _y.get128(), 1); + return *this; +} + +inline const floatInVec Vector3::getY( ) const +{ + return floatInVec( mVec128, 1 ); +} + +inline Vector3 & Vector3::setZ( float _z ) +{ + _vmathVfSetElement(mVec128, _z, 2); + return *this; +} + +inline Vector3 & Vector3::setZ( floatInVec _z ) +{ + mVec128 = _vmathVfInsert(mVec128, _z.get128(), 2); + return *this; +} + +inline const floatInVec Vector3::getZ( ) const +{ + return floatInVec( mVec128, 2 ); +} + +inline Vector3 & Vector3::setElem( int idx, float value ) +{ + _vmathVfSetElement(mVec128, value, idx); + return *this; +} + +inline Vector3 & Vector3::setElem( int idx, floatInVec value ) +{ + mVec128 = _vmathVfInsert(mVec128, value.get128(), idx); + return *this; +} + +inline const floatInVec Vector3::getElem( int idx ) const +{ + return floatInVec( mVec128, idx ); +} + +inline VecIdx Vector3::operator []( int idx ) +{ + return VecIdx( mVec128, idx ); +} + +inline const floatInVec Vector3::operator []( int idx ) const +{ + return floatInVec( mVec128, idx ); +} + +inline const Vector3 Vector3::operator +( Vector3 vec ) const +{ + return Vector3( vec_add( mVec128, vec.mVec128 ) ); +} + +inline const Vector3 Vector3::operator -( Vector3 vec ) const +{ + return Vector3( vec_sub( mVec128, vec.mVec128 ) ); +} + +inline const Point3 Vector3::operator +( Point3 pnt ) const +{ + return Point3( vec_add( mVec128, pnt.get128() ) ); +} + +inline const Vector3 Vector3::operator *( float scalar ) const +{ + return *this * floatInVec(scalar); +} + +inline const Vector3 Vector3::operator *( floatInVec scalar ) const +{ + return Vector3( vec_madd( mVec128, scalar.get128(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); +} + +inline Vector3 & Vector3::operator +=( Vector3 vec ) +{ + *this = *this + vec; + return *this; +} + +inline Vector3 & Vector3::operator -=( Vector3 vec ) +{ + *this = *this - vec; + return *this; +} + +inline Vector3 & Vector3::operator *=( float scalar ) +{ + *this = *this * scalar; + return *this; +} + +inline Vector3 & Vector3::operator *=( floatInVec scalar ) +{ + *this = *this * scalar; + return *this; +} + +inline const Vector3 Vector3::operator /( float scalar ) const +{ + return *this / floatInVec(scalar); +} + +inline const Vector3 Vector3::operator /( floatInVec scalar ) const +{ + return Vector3( divf4( mVec128, scalar.get128() ) ); +} + +inline Vector3 & Vector3::operator /=( float scalar ) +{ + *this = *this / scalar; + return *this; +} + +inline Vector3 & Vector3::operator /=( floatInVec scalar ) +{ + *this = *this / scalar; + return *this; +} + +inline const Vector3 Vector3::operator -( ) const +{ + return Vector3( negatef4( mVec128 ) ); +} + +inline const Vector3 operator *( float scalar, Vector3 vec ) +{ + return floatInVec(scalar) * vec; +} + +inline const Vector3 operator *( floatInVec scalar, Vector3 vec ) +{ + return vec * scalar; +} + +inline const Vector3 mulPerElem( Vector3 vec0, Vector3 vec1 ) +{ + return Vector3( vec_madd( vec0.get128(), vec1.get128(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); +} + +inline const Vector3 divPerElem( Vector3 vec0, Vector3 vec1 ) +{ + return Vector3( divf4( vec0.get128(), vec1.get128() ) ); +} + +inline const Vector3 recipPerElem( Vector3 vec ) +{ + return Vector3( recipf4( vec.get128() ) ); +} + +inline const Vector3 sqrtPerElem( Vector3 vec ) +{ + return Vector3( sqrtf4( vec.get128() ) ); +} + +inline const Vector3 rsqrtPerElem( Vector3 vec ) +{ + return Vector3( rsqrtf4( vec.get128() ) ); +} + +inline const Vector3 absPerElem( Vector3 vec ) +{ + return Vector3( fabsf4( vec.get128() ) ); +} + +inline const Vector3 copySignPerElem( Vector3 vec0, Vector3 vec1 ) +{ + return Vector3( copysignf4( vec0.get128(), vec1.get128() ) ); +} + +inline const Vector3 maxPerElem( Vector3 vec0, Vector3 vec1 ) +{ + return Vector3( fmaxf4( vec0.get128(), vec1.get128() ) ); +} + +inline const floatInVec maxElem( Vector3 vec ) +{ + vec_float4 result; + result = fmaxf4( vec_splat( vec.get128(), 1 ), vec.get128() ); + result = fmaxf4( vec_splat( vec.get128(), 2 ), result ); + return floatInVec( result, 0 ); +} + +inline const Vector3 minPerElem( Vector3 vec0, Vector3 vec1 ) +{ + return Vector3( fminf4( vec0.get128(), vec1.get128() ) ); +} + +inline const floatInVec minElem( Vector3 vec ) +{ + vec_float4 result; + result = fminf4( vec_splat( vec.get128(), 1 ), vec.get128() ); + result = fminf4( vec_splat( vec.get128(), 2 ), result ); + return floatInVec( result, 0 ); +} + +inline const floatInVec sum( Vector3 vec ) +{ + vec_float4 result; + result = vec_add( vec_splat( vec.get128(), 1 ), vec.get128() ); + result = vec_add( vec_splat( vec.get128(), 2 ), result ); + return floatInVec( result, 0 ); +} + +inline const floatInVec dot( Vector3 vec0, Vector3 vec1 ) +{ + return floatInVec( _vmathVfDot3( vec0.get128(), vec1.get128() ), 0 ); +} + +inline const floatInVec lengthSqr( Vector3 vec ) +{ + return floatInVec( _vmathVfDot3( vec.get128(), vec.get128() ), 0 ); +} + +inline const floatInVec length( Vector3 vec ) +{ + return floatInVec( sqrtf4(_vmathVfDot3( vec.get128(), vec.get128() )), 0 ); +} + +inline const Vector3 normalize( Vector3 vec ) +{ + vec_float4 dot = _vmathVfDot3( vec.get128(), vec.get128() ); + dot = vec_splat( dot, 0 ); + return Vector3( vec_madd( vec.get128(), rsqrtf4( dot ), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); +} + +inline const Vector3 cross( Vector3 vec0, Vector3 vec1 ) +{ + return Vector3( _vmathVfCross( vec0.get128(), vec1.get128() ) ); +} + +inline const Vector3 select( Vector3 vec0, Vector3 vec1, bool select1 ) +{ + return select( vec0, vec1, boolInVec(select1) ); +} + +inline const Vector3 select( Vector3 vec0, Vector3 vec1, boolInVec select1 ) +{ + return Vector3( vec_sel( vec0.get128(), vec1.get128(), select1.get128() ) ); +} + +#ifdef _VECTORMATH_DEBUG + +inline void print( Vector3 vec ) +{ + union { vec_float4 v; float s[4]; } tmp; + tmp.v = vec.get128(); + printf( "( %f %f %f )\n", tmp.s[0], tmp.s[1], tmp.s[2] ); +} + +inline void print( Vector3 vec, const char * name ) +{ + union { vec_float4 v; float s[4]; } tmp; + tmp.v = vec.get128(); + printf( "%s: ( %f %f %f )\n", name, tmp.s[0], tmp.s[1], tmp.s[2] ); +} + +#endif + +inline Vector4::Vector4( float _x, float _y, float _z, float _w ) +{ + if (__builtin_constant_p(_x) & __builtin_constant_p(_y) & + __builtin_constant_p(_z) & __builtin_constant_p(_w)) { + mVec128 = (vec_float4){_x, _y, _z, _w}; + } else { + float *pf = (float *)&mVec128; + pf[0] = _x; + pf[1] = _y; + pf[2] = _z; + pf[3] = _w; + } +} + +inline Vector4::Vector4( floatInVec _x, floatInVec _y, floatInVec _z, floatInVec _w ) +{ + vec_float4 xz = vec_mergeh( _x.get128(), _z.get128() ); + vec_float4 yw = vec_mergeh( _y.get128(), _w.get128() ); + mVec128 = vec_mergeh( xz, yw ); +} + +inline Vector4::Vector4( Vector3 xyz, float _w ) +{ + mVec128 = xyz.get128(); + _vmathVfSetElement(mVec128, _w, 3); +} + +inline Vector4::Vector4( Vector3 xyz, floatInVec _w ) +{ + mVec128 = xyz.get128(); + mVec128 = _vmathVfInsert(mVec128, _w.get128(), 3); +} + +inline Vector4::Vector4( Vector3 vec ) +{ + mVec128 = vec.get128(); + mVec128 = _vmathVfInsert(mVec128, ((vec_float4){0.0f,0.0f,0.0f,0.0f}), 3); +} + +inline Vector4::Vector4( Point3 pnt ) +{ + mVec128 = pnt.get128(); + mVec128 = _vmathVfInsert(mVec128, ((vec_float4){1.0f,1.0f,1.0f,1.0f}), 3); +} + +inline Vector4::Vector4( Quat quat ) +{ + mVec128 = quat.get128(); +} + +inline Vector4::Vector4( float scalar ) +{ + mVec128 = floatInVec(scalar).get128(); +} + +inline Vector4::Vector4( floatInVec scalar ) +{ + mVec128 = scalar.get128(); +} + +inline Vector4::Vector4( vec_float4 vf4 ) +{ + mVec128 = vf4; +} + +inline const Vector4 Vector4::xAxis( ) +{ + return Vector4( _VECTORMATH_UNIT_1000 ); +} + +inline const Vector4 Vector4::yAxis( ) +{ + return Vector4( _VECTORMATH_UNIT_0100 ); +} + +inline const Vector4 Vector4::zAxis( ) +{ + return Vector4( _VECTORMATH_UNIT_0010 ); +} + +inline const Vector4 Vector4::wAxis( ) +{ + return Vector4( _VECTORMATH_UNIT_0001 ); +} + +inline const Vector4 lerp( float t, Vector4 vec0, Vector4 vec1 ) +{ + return lerp( floatInVec(t), vec0, vec1 ); +} + +inline const Vector4 lerp( floatInVec t, Vector4 vec0, Vector4 vec1 ) +{ + return ( vec0 + ( ( vec1 - vec0 ) * t ) ); +} + +inline const Vector4 slerp( float t, Vector4 unitVec0, Vector4 unitVec1 ) +{ + return slerp( floatInVec(t), unitVec0, unitVec1 ); +} + +inline const Vector4 slerp( floatInVec t, Vector4 unitVec0, Vector4 unitVec1 ) +{ + vec_float4 scales, scale0, scale1, cosAngle, angle, tttt, oneMinusT, angles, sines; + vec_uint4 selectMask; + cosAngle = _vmathVfDot4( unitVec0.get128(), unitVec1.get128() ); + cosAngle = vec_splat( cosAngle, 0 ); + selectMask = (vec_uint4)vec_cmpgt( ((vec_float4){_VECTORMATH_SLERP_TOL,_VECTORMATH_SLERP_TOL,_VECTORMATH_SLERP_TOL,_VECTORMATH_SLERP_TOL}), cosAngle ); + angle = acosf4( cosAngle ); + tttt = t.get128(); + oneMinusT = vec_sub( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), tttt ); + angles = vec_mergeh( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), tttt ); + angles = vec_mergeh( angles, oneMinusT ); + angles = vec_madd( angles, angle, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + sines = sinf4( angles ); + scales = divf4( sines, vec_splat( sines, 0 ) ); + scale0 = vec_sel( oneMinusT, vec_splat( scales, 1 ), selectMask ); + scale1 = vec_sel( tttt, vec_splat( scales, 2 ), selectMask ); + return Vector4( vec_madd( unitVec0.get128(), scale0, vec_madd( unitVec1.get128(), scale1, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ) ); +} + +inline vec_float4 Vector4::get128( ) const +{ + return mVec128; +} + +inline void storeHalfFloats( Vector4 vec0, Vector4 vec1, Vector4 vec2, Vector4 vec3, vec_ushort8 * twoQuads ) +{ + twoQuads[0] = _vmath2VfToHalfFloats(vec0.get128(), vec1.get128()); + twoQuads[1] = _vmath2VfToHalfFloats(vec2.get128(), vec3.get128()); +} + +inline Vector4 & Vector4::operator =( Vector4 vec ) +{ + mVec128 = vec.mVec128; + return *this; +} + +inline Vector4 & Vector4::setXYZ( Vector3 vec ) +{ + mVec128 = vec_sel( vec.get128(), mVec128, _VECTORMATH_MASK_0x000F ); + return *this; +} + +inline const Vector3 Vector4::getXYZ( ) const +{ + return Vector3( mVec128 ); +} + +inline Vector4 & Vector4::setX( float _x ) +{ + _vmathVfSetElement(mVec128, _x, 0); + return *this; +} + +inline Vector4 & Vector4::setX( floatInVec _x ) +{ + mVec128 = _vmathVfInsert(mVec128, _x.get128(), 0); + return *this; +} + +inline const floatInVec Vector4::getX( ) const +{ + return floatInVec( mVec128, 0 ); +} + +inline Vector4 & Vector4::setY( float _y ) +{ + _vmathVfSetElement(mVec128, _y, 1); + return *this; +} + +inline Vector4 & Vector4::setY( floatInVec _y ) +{ + mVec128 = _vmathVfInsert(mVec128, _y.get128(), 1); + return *this; +} + +inline const floatInVec Vector4::getY( ) const +{ + return floatInVec( mVec128, 1 ); +} + +inline Vector4 & Vector4::setZ( float _z ) +{ + _vmathVfSetElement(mVec128, _z, 2); + return *this; +} + +inline Vector4 & Vector4::setZ( floatInVec _z ) +{ + mVec128 = _vmathVfInsert(mVec128, _z.get128(), 2); + return *this; +} + +inline const floatInVec Vector4::getZ( ) const +{ + return floatInVec( mVec128, 2 ); +} + +inline Vector4 & Vector4::setW( float _w ) +{ + _vmathVfSetElement(mVec128, _w, 3); + return *this; +} + +inline Vector4 & Vector4::setW( floatInVec _w ) +{ + mVec128 = _vmathVfInsert(mVec128, _w.get128(), 3); + return *this; +} + +inline const floatInVec Vector4::getW( ) const +{ + return floatInVec( mVec128, 3 ); +} + +inline Vector4 & Vector4::setElem( int idx, float value ) +{ + _vmathVfSetElement(mVec128, value, idx); + return *this; +} + +inline Vector4 & Vector4::setElem( int idx, floatInVec value ) +{ + mVec128 = _vmathVfInsert(mVec128, value.get128(), idx); + return *this; +} + +inline const floatInVec Vector4::getElem( int idx ) const +{ + return floatInVec( mVec128, idx ); +} + +inline VecIdx Vector4::operator []( int idx ) +{ + return VecIdx( mVec128, idx ); +} + +inline const floatInVec Vector4::operator []( int idx ) const +{ + return floatInVec( mVec128, idx ); +} + +inline const Vector4 Vector4::operator +( Vector4 vec ) const +{ + return Vector4( vec_add( mVec128, vec.mVec128 ) ); +} + +inline const Vector4 Vector4::operator -( Vector4 vec ) const +{ + return Vector4( vec_sub( mVec128, vec.mVec128 ) ); +} + +inline const Vector4 Vector4::operator *( float scalar ) const +{ + return *this * floatInVec(scalar); +} + +inline const Vector4 Vector4::operator *( floatInVec scalar ) const +{ + return Vector4( vec_madd( mVec128, scalar.get128(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); +} + +inline Vector4 & Vector4::operator +=( Vector4 vec ) +{ + *this = *this + vec; + return *this; +} + +inline Vector4 & Vector4::operator -=( Vector4 vec ) +{ + *this = *this - vec; + return *this; +} + +inline Vector4 & Vector4::operator *=( float scalar ) +{ + *this = *this * scalar; + return *this; +} + +inline Vector4 & Vector4::operator *=( floatInVec scalar ) +{ + *this = *this * scalar; + return *this; +} + +inline const Vector4 Vector4::operator /( float scalar ) const +{ + return *this / floatInVec(scalar); +} + +inline const Vector4 Vector4::operator /( floatInVec scalar ) const +{ + return Vector4( divf4( mVec128, scalar.get128() ) ); +} + +inline Vector4 & Vector4::operator /=( float scalar ) +{ + *this = *this / scalar; + return *this; +} + +inline Vector4 & Vector4::operator /=( floatInVec scalar ) +{ + *this = *this / scalar; + return *this; +} + +inline const Vector4 Vector4::operator -( ) const +{ + return Vector4( negatef4( mVec128 ) ); +} + +inline const Vector4 operator *( float scalar, Vector4 vec ) +{ + return floatInVec(scalar) * vec; +} + +inline const Vector4 operator *( floatInVec scalar, Vector4 vec ) +{ + return vec * scalar; +} + +inline const Vector4 mulPerElem( Vector4 vec0, Vector4 vec1 ) +{ + return Vector4( vec_madd( vec0.get128(), vec1.get128(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); +} + +inline const Vector4 divPerElem( Vector4 vec0, Vector4 vec1 ) +{ + return Vector4( divf4( vec0.get128(), vec1.get128() ) ); +} + +inline const Vector4 recipPerElem( Vector4 vec ) +{ + return Vector4( recipf4( vec.get128() ) ); +} + +inline const Vector4 sqrtPerElem( Vector4 vec ) +{ + return Vector4( sqrtf4( vec.get128() ) ); +} + +inline const Vector4 rsqrtPerElem( Vector4 vec ) +{ + return Vector4( rsqrtf4( vec.get128() ) ); +} + +inline const Vector4 absPerElem( Vector4 vec ) +{ + return Vector4( fabsf4( vec.get128() ) ); +} + +inline const Vector4 copySignPerElem( Vector4 vec0, Vector4 vec1 ) +{ + return Vector4( copysignf4( vec0.get128(), vec1.get128() ) ); +} + +inline const Vector4 maxPerElem( Vector4 vec0, Vector4 vec1 ) +{ + return Vector4( fmaxf4( vec0.get128(), vec1.get128() ) ); +} + +inline const floatInVec maxElem( Vector4 vec ) +{ + vec_float4 result; + result = fmaxf4( vec_splat( vec.get128(), 1 ), vec.get128() ); + result = fmaxf4( vec_splat( vec.get128(), 2 ), result ); + result = fmaxf4( vec_splat( vec.get128(), 3 ), result ); + return floatInVec( result, 0 ); +} + +inline const Vector4 minPerElem( Vector4 vec0, Vector4 vec1 ) +{ + return Vector4( fminf4( vec0.get128(), vec1.get128() ) ); +} + +inline const floatInVec minElem( Vector4 vec ) +{ + vec_float4 result; + result = fminf4( vec_splat( vec.get128(), 1 ), vec.get128() ); + result = fminf4( vec_splat( vec.get128(), 2 ), result ); + result = fminf4( vec_splat( vec.get128(), 3 ), result ); + return floatInVec( result, 0 ); +} + +inline const floatInVec sum( Vector4 vec ) +{ + vec_float4 result; + result = vec_add( vec_splat( vec.get128(), 1 ), vec.get128() ); + result = vec_add( vec_splat( vec.get128(), 2 ), result ); + result = vec_add( vec_splat( vec.get128(), 3 ), result ); + return floatInVec( result, 0 ); +} + +inline const floatInVec dot( Vector4 vec0, Vector4 vec1 ) +{ + return floatInVec( _vmathVfDot4( vec0.get128(), vec1.get128() ), 0 ); +} + +inline const floatInVec lengthSqr( Vector4 vec ) +{ + return floatInVec( _vmathVfDot4( vec.get128(), vec.get128() ), 0 ); +} + +inline const floatInVec length( Vector4 vec ) +{ + return floatInVec( sqrtf4(_vmathVfDot4( vec.get128(), vec.get128() )), 0 ); +} + +inline const Vector4 normalize( Vector4 vec ) +{ + vec_float4 dot = _vmathVfDot4( vec.get128(), vec.get128() ); + return Vector4( vec_madd( vec.get128(), rsqrtf4( dot ), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); +} + +inline const Vector4 select( Vector4 vec0, Vector4 vec1, bool select1 ) +{ + return select( vec0, vec1, boolInVec(select1) ); +} + +inline const Vector4 select( Vector4 vec0, Vector4 vec1, boolInVec select1 ) +{ + return Vector4( vec_sel( vec0.get128(), vec1.get128(), select1.get128() ) ); +} + +#ifdef _VECTORMATH_DEBUG + +inline void print( Vector4 vec ) +{ + union { vec_float4 v; float s[4]; } tmp; + tmp.v = vec.get128(); + printf( "( %f %f %f %f )\n", tmp.s[0], tmp.s[1], tmp.s[2], tmp.s[3] ); +} + +inline void print( Vector4 vec, const char * name ) +{ + union { vec_float4 v; float s[4]; } tmp; + tmp.v = vec.get128(); + printf( "%s: ( %f %f %f %f )\n", name, tmp.s[0], tmp.s[1], tmp.s[2], tmp.s[3] ); +} + +#endif + +inline Point3::Point3( float _x, float _y, float _z ) +{ + if (__builtin_constant_p(_x) & __builtin_constant_p(_y) & __builtin_constant_p(_z)) { + mVec128 = (vec_float4){_x, _y, _z, 0.0f}; + } else { + float *pf = (float *)&mVec128; + pf[0] = _x; + pf[1] = _y; + pf[2] = _z; + } +} + +inline Point3::Point3( floatInVec _x, floatInVec _y, floatInVec _z ) +{ + vec_float4 xz = vec_mergeh( _x.get128(), _z.get128() ); + mVec128 = vec_mergeh( xz, _y.get128() ); +} + +inline Point3::Point3( Vector3 vec ) +{ + mVec128 = vec.get128(); +} + +inline Point3::Point3( float scalar ) +{ + mVec128 = floatInVec(scalar).get128(); +} + +inline Point3::Point3( floatInVec scalar ) +{ + mVec128 = scalar.get128(); +} + +inline Point3::Point3( vec_float4 vf4 ) +{ + mVec128 = vf4; +} + +inline const Point3 lerp( float t, Point3 pnt0, Point3 pnt1 ) +{ + return lerp( floatInVec(t), pnt0, pnt1 ); +} + +inline const Point3 lerp( floatInVec t, Point3 pnt0, Point3 pnt1 ) +{ + return ( pnt0 + ( ( pnt1 - pnt0 ) * t ) ); +} + +inline vec_float4 Point3::get128( ) const +{ + return mVec128; +} + +inline void storeXYZ( Point3 pnt, vec_float4 * quad ) +{ + vec_float4 dstVec = *quad; + vec_uint4 mask = _VECTORMATH_MASK_0x000F; + dstVec = vec_sel(pnt.get128(), dstVec, mask); + *quad = dstVec; +} + +inline void loadXYZArray( Point3 & pnt0, Point3 & pnt1, Point3 & pnt2, Point3 & pnt3, const vec_float4 * threeQuads ) +{ + vec_float4 xyzx, yzxy, zxyz, xyz1, xyz2, xyz3; + xyzx = threeQuads[0]; + yzxy = threeQuads[1]; + zxyz = threeQuads[2]; + xyz1 = vec_sld( xyzx, yzxy, 12 ); + xyz2 = vec_sld( yzxy, zxyz, 8 ); + xyz3 = vec_sld( zxyz, zxyz, 4 ); + pnt0 = Point3( xyzx ); + pnt1 = Point3( xyz1 ); + pnt2 = Point3( xyz2 ); + pnt3 = Point3( xyz3 ); +} + +inline void storeXYZArray( Point3 pnt0, Point3 pnt1, Point3 pnt2, Point3 pnt3, vec_float4 * threeQuads ) +{ + vec_float4 xyzx, yzxy, zxyz; + xyzx = vec_perm( pnt0.get128(), pnt1.get128(), _VECTORMATH_PERM_XYZA ); + yzxy = vec_perm( pnt1.get128(), pnt2.get128(), _VECTORMATH_PERM_YZAB ); + zxyz = vec_perm( pnt2.get128(), pnt3.get128(), _VECTORMATH_PERM_ZABC ); + threeQuads[0] = xyzx; + threeQuads[1] = yzxy; + threeQuads[2] = zxyz; +} + +inline void storeHalfFloats( Point3 pnt0, Point3 pnt1, Point3 pnt2, Point3 pnt3, Point3 pnt4, Point3 pnt5, Point3 pnt6, Point3 pnt7, vec_ushort8 * threeQuads ) +{ + vec_float4 xyz0[3]; + vec_float4 xyz1[3]; + storeXYZArray( pnt0, pnt1, pnt2, pnt3, xyz0 ); + storeXYZArray( pnt4, pnt5, pnt6, pnt7, xyz1 ); + threeQuads[0] = _vmath2VfToHalfFloats(xyz0[0], xyz0[1]); + threeQuads[1] = _vmath2VfToHalfFloats(xyz0[2], xyz1[0]); + threeQuads[2] = _vmath2VfToHalfFloats(xyz1[1], xyz1[2]); +} + +inline Point3 & Point3::operator =( Point3 pnt ) +{ + mVec128 = pnt.mVec128; + return *this; +} + +inline Point3 & Point3::setX( float _x ) +{ + _vmathVfSetElement(mVec128, _x, 0); + return *this; +} + +inline Point3 & Point3::setX( floatInVec _x ) +{ + mVec128 = _vmathVfInsert(mVec128, _x.get128(), 0); + return *this; +} + +inline const floatInVec Point3::getX( ) const +{ + return floatInVec( mVec128, 0 ); +} + +inline Point3 & Point3::setY( float _y ) +{ + _vmathVfSetElement(mVec128, _y, 1); + return *this; +} + +inline Point3 & Point3::setY( floatInVec _y ) +{ + mVec128 = _vmathVfInsert(mVec128, _y.get128(), 1); + return *this; +} + +inline const floatInVec Point3::getY( ) const +{ + return floatInVec( mVec128, 1 ); +} + +inline Point3 & Point3::setZ( float _z ) +{ + _vmathVfSetElement(mVec128, _z, 2); + return *this; +} + +inline Point3 & Point3::setZ( floatInVec _z ) +{ + mVec128 = _vmathVfInsert(mVec128, _z.get128(), 2); + return *this; +} + +inline const floatInVec Point3::getZ( ) const +{ + return floatInVec( mVec128, 2 ); +} + +inline Point3 & Point3::setElem( int idx, float value ) +{ + _vmathVfSetElement(mVec128, value, idx); + return *this; +} + +inline Point3 & Point3::setElem( int idx, floatInVec value ) +{ + mVec128 = _vmathVfInsert(mVec128, value.get128(), idx); + return *this; +} + +inline const floatInVec Point3::getElem( int idx ) const +{ + return floatInVec( mVec128, idx ); +} + +inline VecIdx Point3::operator []( int idx ) +{ + return VecIdx( mVec128, idx ); +} + +inline const floatInVec Point3::operator []( int idx ) const +{ + return floatInVec( mVec128, idx ); +} + +inline const Vector3 Point3::operator -( Point3 pnt ) const +{ + return Vector3( vec_sub( mVec128, pnt.mVec128 ) ); +} + +inline const Point3 Point3::operator +( Vector3 vec ) const +{ + return Point3( vec_add( mVec128, vec.get128() ) ); +} + +inline const Point3 Point3::operator -( Vector3 vec ) const +{ + return Point3( vec_sub( mVec128, vec.get128() ) ); +} + +inline Point3 & Point3::operator +=( Vector3 vec ) +{ + *this = *this + vec; + return *this; +} + +inline Point3 & Point3::operator -=( Vector3 vec ) +{ + *this = *this - vec; + return *this; +} + +inline const Point3 mulPerElem( Point3 pnt0, Point3 pnt1 ) +{ + return Point3( vec_madd( pnt0.get128(), pnt1.get128(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); +} + +inline const Point3 divPerElem( Point3 pnt0, Point3 pnt1 ) +{ + return Point3( divf4( pnt0.get128(), pnt1.get128() ) ); +} + +inline const Point3 recipPerElem( Point3 pnt ) +{ + return Point3( recipf4( pnt.get128() ) ); +} + +inline const Point3 sqrtPerElem( Point3 pnt ) +{ + return Point3( sqrtf4( pnt.get128() ) ); +} + +inline const Point3 rsqrtPerElem( Point3 pnt ) +{ + return Point3( rsqrtf4( pnt.get128() ) ); +} + +inline const Point3 absPerElem( Point3 pnt ) +{ + return Point3( fabsf4( pnt.get128() ) ); +} + +inline const Point3 copySignPerElem( Point3 pnt0, Point3 pnt1 ) +{ + return Point3( copysignf4( pnt0.get128(), pnt1.get128() ) ); +} + +inline const Point3 maxPerElem( Point3 pnt0, Point3 pnt1 ) +{ + return Point3( fmaxf4( pnt0.get128(), pnt1.get128() ) ); +} + +inline const floatInVec maxElem( Point3 pnt ) +{ + vec_float4 result; + result = fmaxf4( vec_splat( pnt.get128(), 1 ), pnt.get128() ); + result = fmaxf4( vec_splat( pnt.get128(), 2 ), result ); + return floatInVec( result, 0 ); +} + +inline const Point3 minPerElem( Point3 pnt0, Point3 pnt1 ) +{ + return Point3( fminf4( pnt0.get128(), pnt1.get128() ) ); +} + +inline const floatInVec minElem( Point3 pnt ) +{ + vec_float4 result; + result = fminf4( vec_splat( pnt.get128(), 1 ), pnt.get128() ); + result = fminf4( vec_splat( pnt.get128(), 2 ), result ); + return floatInVec( result, 0 ); +} + +inline const floatInVec sum( Point3 pnt ) +{ + vec_float4 result; + result = vec_add( vec_splat( pnt.get128(), 1 ), pnt.get128() ); + result = vec_add( vec_splat( pnt.get128(), 2 ), result ); + return floatInVec( result, 0 ); +} + +inline const Point3 scale( Point3 pnt, float scaleVal ) +{ + return scale( pnt, floatInVec( scaleVal ) ); +} + +inline const Point3 scale( Point3 pnt, floatInVec scaleVal ) +{ + return mulPerElem( pnt, Point3( scaleVal ) ); +} + +inline const Point3 scale( Point3 pnt, Vector3 scaleVec ) +{ + return mulPerElem( pnt, Point3( scaleVec ) ); +} + +inline const floatInVec projection( Point3 pnt, Vector3 unitVec ) +{ + return floatInVec( _vmathVfDot3( pnt.get128(), unitVec.get128() ), 0 ); +} + +inline const floatInVec distSqrFromOrigin( Point3 pnt ) +{ + return lengthSqr( Vector3( pnt ) ); +} + +inline const floatInVec distFromOrigin( Point3 pnt ) +{ + return length( Vector3( pnt ) ); +} + +inline const floatInVec distSqr( Point3 pnt0, Point3 pnt1 ) +{ + return lengthSqr( ( pnt1 - pnt0 ) ); +} + +inline const floatInVec dist( Point3 pnt0, Point3 pnt1 ) +{ + return length( ( pnt1 - pnt0 ) ); +} + +inline const Point3 select( Point3 pnt0, Point3 pnt1, bool select1 ) +{ + return select( pnt0, pnt1, boolInVec(select1) ); +} + +inline const Point3 select( Point3 pnt0, Point3 pnt1, boolInVec select1 ) +{ + return Point3( vec_sel( pnt0.get128(), pnt1.get128(), select1.get128() ) ); +} + +#ifdef _VECTORMATH_DEBUG + +inline void print( Point3 pnt ) +{ + union { vec_float4 v; float s[4]; } tmp; + tmp.v = pnt.get128(); + printf( "( %f %f %f )\n", tmp.s[0], tmp.s[1], tmp.s[2] ); +} + +inline void print( Point3 pnt, const char * name ) +{ + union { vec_float4 v; float s[4]; } tmp; + tmp.v = pnt.get128(); + printf( "%s: ( %f %f %f )\n", name, tmp.s[0], tmp.s[1], tmp.s[2] ); +} + +#endif + +} // namespace Aos +} // namespace Vectormath + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/ppu/cpp/vec_soa.h b/Extras/vectormathlibrary/include/vectormath/ppu/cpp/vec_soa.h new file mode 100644 index 000000000..89fdfcf7f --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/ppu/cpp/vec_soa.h @@ -0,0 +1,1425 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_VEC_SOA_CPP_H +#define _VECTORMATH_VEC_SOA_CPP_H +//----------------------------------------------------------------------------- +// Constants +// for permutes, words are labeled [x,y,z,w] [a,b,c,d] + +#define _VECTORMATH_PERM_X 0x00010203 +#define _VECTORMATH_PERM_Y 0x04050607 +#define _VECTORMATH_PERM_Z 0x08090a0b +#define _VECTORMATH_PERM_W 0x0c0d0e0f +#define _VECTORMATH_PERM_A 0x10111213 +#define _VECTORMATH_PERM_B 0x14151617 +#define _VECTORMATH_PERM_C 0x18191a1b +#define _VECTORMATH_PERM_D 0x1c1d1e1f +#define _VECTORMATH_PERM_ZBWX ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_Z, _VECTORMATH_PERM_B, _VECTORMATH_PERM_W, _VECTORMATH_PERM_X }) +#define _VECTORMATH_PERM_XCYX ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_X, _VECTORMATH_PERM_C, _VECTORMATH_PERM_Y, _VECTORMATH_PERM_X }) +#define _VECTORMATH_PERM_ZDWX ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_Z, _VECTORMATH_PERM_D, _VECTORMATH_PERM_W, _VECTORMATH_PERM_X }) +#define _VECTORMATH_PERM_ZCXA ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_Z, _VECTORMATH_PERM_C, _VECTORMATH_PERM_X, _VECTORMATH_PERM_A }) +#define _VECTORMATH_PERM_XBZD ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_X, _VECTORMATH_PERM_B, _VECTORMATH_PERM_Z, _VECTORMATH_PERM_D }) +#define _VECTORMATH_PERM_WDYB ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_W, _VECTORMATH_PERM_D, _VECTORMATH_PERM_Y, _VECTORMATH_PERM_B }) +#define _VECTORMATH_PERM_ZBXD ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_Z, _VECTORMATH_PERM_B, _VECTORMATH_PERM_X, _VECTORMATH_PERM_D }) +#define _VECTORMATH_PERM_WCYA ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_W, _VECTORMATH_PERM_C, _VECTORMATH_PERM_Y, _VECTORMATH_PERM_A }) +#define _VECTORMATH_PERM_XDZB ((vec_uchar16)(vec_uint4){ _VECTORMATH_PERM_X, _VECTORMATH_PERM_D, _VECTORMATH_PERM_Z, _VECTORMATH_PERM_B }) +#define _VECTORMATH_SLERP_TOL 0.999f + +//----------------------------------------------------------------------------- +// Definitions + +#ifndef _VECTORMATH_INTERNAL_FUNCTIONS +#define _VECTORMATH_INTERNAL_FUNCTIONS + +#endif + +namespace Vectormath { +namespace Soa { + +inline Vector3::Vector3( const Vector3 & vec ) +{ + mX = vec.mX; + mY = vec.mY; + mZ = vec.mZ; +} + +inline Vector3::Vector3( vec_float4 _x, vec_float4 _y, vec_float4 _z ) +{ + mX = _x; + mY = _y; + mZ = _z; +} + +inline Vector3::Vector3( const Point3 & pnt ) +{ + mX = pnt.getX(); + mY = pnt.getY(); + mZ = pnt.getZ(); +} + +inline Vector3::Vector3( vec_float4 scalar ) +{ + mX = scalar; + mY = scalar; + mZ = scalar; +} + +inline Vector3::Vector3( Aos::Vector3 vec ) +{ + vec_float4 vec128 = vec.get128(); + mX = vec_splat( vec128, 0 ); + mY = vec_splat( vec128, 1 ); + mZ = vec_splat( vec128, 2 ); +} + +inline Vector3::Vector3( Aos::Vector3 vec0, Aos::Vector3 vec1, Aos::Vector3 vec2, Aos::Vector3 vec3 ) +{ + vec_float4 tmp0, tmp1, tmp2, tmp3; + tmp0 = vec_mergeh( vec0.get128(), vec2.get128() ); + tmp1 = vec_mergeh( vec1.get128(), vec3.get128() ); + tmp2 = vec_mergel( vec0.get128(), vec2.get128() ); + tmp3 = vec_mergel( vec1.get128(), vec3.get128() ); + mX = vec_mergeh( tmp0, tmp1 ); + mY = vec_mergel( tmp0, tmp1 ); + mZ = vec_mergeh( tmp2, tmp3 ); +} + +inline const Vector3 Vector3::xAxis( ) +{ + return Vector3( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); +} + +inline const Vector3 Vector3::yAxis( ) +{ + return Vector3( ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){1.0f,1.0f,1.0f,1.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); +} + +inline const Vector3 Vector3::zAxis( ) +{ + return Vector3( ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){1.0f,1.0f,1.0f,1.0f}) ); +} + +inline const Vector3 lerp( vec_float4 t, const Vector3 & vec0, const Vector3 & vec1 ) +{ + return ( vec0 + ( ( vec1 - vec0 ) * t ) ); +} + +inline const Vector3 slerp( vec_float4 t, const Vector3 & unitVec0, const Vector3 & unitVec1 ) +{ + vec_float4 recipSinAngle, scale0, scale1, cosAngle, angle; + vec_uint4 selectMask; + cosAngle = dot( unitVec0, unitVec1 ); + selectMask = (vec_uint4)vec_cmpgt( (vec_float4){_VECTORMATH_SLERP_TOL,_VECTORMATH_SLERP_TOL,_VECTORMATH_SLERP_TOL,_VECTORMATH_SLERP_TOL}, cosAngle ); + angle = acosf4( cosAngle ); + recipSinAngle = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), sinf4( angle ) ); + scale0 = vec_sel( vec_sub( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), t ), vec_madd( sinf4( vec_madd( vec_sub( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), t ), angle, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), recipSinAngle, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), selectMask ); + scale1 = vec_sel( t, vec_madd( sinf4( vec_madd( t, angle, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), recipSinAngle, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), selectMask ); + return ( ( unitVec0 * scale0 ) + ( unitVec1 * scale1 ) ); +} + +inline void Vector3::get4Aos( Aos::Vector3 & result0, Aos::Vector3 & result1, Aos::Vector3 & result2, Aos::Vector3 & result3 ) const +{ + vec_float4 tmp0, tmp1; + tmp0 = vec_mergeh( mX, mZ ); + tmp1 = vec_mergel( mX, mZ ); + result0 = Aos::Vector3( vec_mergeh( tmp0, mY ) ); + result1 = Aos::Vector3( vec_perm( tmp0, mY, _VECTORMATH_PERM_ZBWX ) ); + result2 = Aos::Vector3( vec_perm( tmp1, mY, _VECTORMATH_PERM_XCYX ) ); + result3 = Aos::Vector3( vec_perm( tmp1, mY, _VECTORMATH_PERM_ZDWX ) ); +} + +inline void loadXYZArray( Vector3 & vec, const vec_float4 * threeQuads ) +{ + vec_float4 xyxy, yzyz, zxzx, xyzx, yzxy, zxyz; + xyzx = threeQuads[0]; + yzxy = threeQuads[1]; + zxyz = threeQuads[2]; + xyxy = vec_sld( yzxy, xyzx, 8 ); + zxzx = vec_sld( xyzx, zxyz, 8 ); + yzyz = vec_sld( zxyz, yzxy, 8 ); + vec.setX( vec_perm( xyxy, zxzx, _VECTORMATH_PERM_ZBXD ) ); + vec.setY( vec_perm( xyxy, yzyz, _VECTORMATH_PERM_WCYA ) ); + vec.setZ( vec_perm( zxzx, yzyz, _VECTORMATH_PERM_XDZB ) ); +} + +inline void storeXYZArray( const Vector3 & vec, vec_float4 * threeQuads ) +{ + vec_float4 xyzx, yzxy, zxyz, xyxy, zxzx, yzyz; + xyxy = vec_perm( vec.getX(), vec.getY(), _VECTORMATH_PERM_ZCXA ); + zxzx = vec_perm( vec.getZ(), vec.getX(), _VECTORMATH_PERM_XBZD ); + yzyz = vec_perm( vec.getY(), vec.getZ(), _VECTORMATH_PERM_WDYB ); + xyzx = vec_sld( xyxy, zxzx, 8 ); + yzxy = vec_sld( yzyz, xyxy, 8 ); + zxyz = vec_sld( zxzx, yzyz, 8 ); + threeQuads[0] = xyzx; + threeQuads[1] = yzxy; + threeQuads[2] = zxyz; +} + +inline void storeHalfFloats( const Vector3 & vec0, const Vector3 & vec1, vec_ushort8 * threeQuads ) +{ + vec_float4 xyz0[3]; + vec_float4 xyz1[3]; + storeXYZArray( vec0, xyz0 ); + storeXYZArray( vec1, xyz1 ); + threeQuads[0] = _vmath2VfToHalfFloats(xyz0[0], xyz0[1]); + threeQuads[1] = _vmath2VfToHalfFloats(xyz0[2], xyz1[0]); + threeQuads[2] = _vmath2VfToHalfFloats(xyz1[1], xyz1[2]); +} + +inline Vector3 & Vector3::operator =( const Vector3 & vec ) +{ + mX = vec.mX; + mY = vec.mY; + mZ = vec.mZ; + return *this; +} + +inline Vector3 & Vector3::setX( vec_float4 _x ) +{ + mX = _x; + return *this; +} + +inline vec_float4 Vector3::getX( ) const +{ + return mX; +} + +inline Vector3 & Vector3::setY( vec_float4 _y ) +{ + mY = _y; + return *this; +} + +inline vec_float4 Vector3::getY( ) const +{ + return mY; +} + +inline Vector3 & Vector3::setZ( vec_float4 _z ) +{ + mZ = _z; + return *this; +} + +inline vec_float4 Vector3::getZ( ) const +{ + return mZ; +} + +inline Vector3 & Vector3::setElem( int idx, vec_float4 value ) +{ + *(&mX + idx) = value; + return *this; +} + +inline vec_float4 Vector3::getElem( int idx ) const +{ + return *(&mX + idx); +} + +inline Vector3::vec_float4_t & Vector3::operator []( int idx ) +{ + return *(&mX + idx); +} + +inline vec_float4 Vector3::operator []( int idx ) const +{ + return *(&mX + idx); +} + +inline const Vector3 Vector3::operator +( const Vector3 & vec ) const +{ + return Vector3( + vec_add( mX, vec.mX ), + vec_add( mY, vec.mY ), + vec_add( mZ, vec.mZ ) + ); +} + +inline const Vector3 Vector3::operator -( const Vector3 & vec ) const +{ + return Vector3( + vec_sub( mX, vec.mX ), + vec_sub( mY, vec.mY ), + vec_sub( mZ, vec.mZ ) + ); +} + +inline const Point3 Vector3::operator +( const Point3 & pnt ) const +{ + return Point3( + vec_add( mX, pnt.getX() ), + vec_add( mY, pnt.getY() ), + vec_add( mZ, pnt.getZ() ) + ); +} + +inline const Vector3 Vector3::operator *( vec_float4 scalar ) const +{ + return Vector3( + vec_madd( mX, scalar, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), + vec_madd( mY, scalar, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), + vec_madd( mZ, scalar, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) + ); +} + +inline Vector3 & Vector3::operator +=( const Vector3 & vec ) +{ + *this = *this + vec; + return *this; +} + +inline Vector3 & Vector3::operator -=( const Vector3 & vec ) +{ + *this = *this - vec; + return *this; +} + +inline Vector3 & Vector3::operator *=( vec_float4 scalar ) +{ + *this = *this * scalar; + return *this; +} + +inline const Vector3 Vector3::operator /( vec_float4 scalar ) const +{ + return Vector3( + divf4( mX, scalar ), + divf4( mY, scalar ), + divf4( mZ, scalar ) + ); +} + +inline Vector3 & Vector3::operator /=( vec_float4 scalar ) +{ + *this = *this / scalar; + return *this; +} + +inline const Vector3 Vector3::operator -( ) const +{ + return Vector3( + negatef4( mX ), + negatef4( mY ), + negatef4( mZ ) + ); +} + +inline const Vector3 operator *( vec_float4 scalar, const Vector3 & vec ) +{ + return vec * scalar; +} + +inline const Vector3 mulPerElem( const Vector3 & vec0, const Vector3 & vec1 ) +{ + return Vector3( + vec_madd( vec0.getX(), vec1.getX(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), + vec_madd( vec0.getY(), vec1.getY(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), + vec_madd( vec0.getZ(), vec1.getZ(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) + ); +} + +inline const Vector3 divPerElem( const Vector3 & vec0, const Vector3 & vec1 ) +{ + return Vector3( + divf4( vec0.getX(), vec1.getX() ), + divf4( vec0.getY(), vec1.getY() ), + divf4( vec0.getZ(), vec1.getZ() ) + ); +} + +inline const Vector3 recipPerElem( const Vector3 & vec ) +{ + return Vector3( + divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), vec.getX() ), + divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), vec.getY() ), + divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), vec.getZ() ) + ); +} + +inline const Vector3 sqrtPerElem( const Vector3 & vec ) +{ + return Vector3( + sqrtf4( vec.getX() ), + sqrtf4( vec.getY() ), + sqrtf4( vec.getZ() ) + ); +} + +inline const Vector3 rsqrtPerElem( const Vector3 & vec ) +{ + return Vector3( + divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), sqrtf4( vec.getX() ) ), + divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), sqrtf4( vec.getY() ) ), + divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), sqrtf4( vec.getZ() ) ) + ); +} + +inline const Vector3 absPerElem( const Vector3 & vec ) +{ + return Vector3( + fabsf4( vec.getX() ), + fabsf4( vec.getY() ), + fabsf4( vec.getZ() ) + ); +} + +inline const Vector3 copySignPerElem( const Vector3 & vec0, const Vector3 & vec1 ) +{ + return Vector3( + copysignf4( vec0.getX(), vec1.getX() ), + copysignf4( vec0.getY(), vec1.getY() ), + copysignf4( vec0.getZ(), vec1.getZ() ) + ); +} + +inline const Vector3 maxPerElem( const Vector3 & vec0, const Vector3 & vec1 ) +{ + return Vector3( + fmaxf4( vec0.getX(), vec1.getX() ), + fmaxf4( vec0.getY(), vec1.getY() ), + fmaxf4( vec0.getZ(), vec1.getZ() ) + ); +} + +inline vec_float4 maxElem( const Vector3 & vec ) +{ + vec_float4 result; + result = fmaxf4( vec.getX(), vec.getY() ); + result = fmaxf4( vec.getZ(), result ); + return result; +} + +inline const Vector3 minPerElem( const Vector3 & vec0, const Vector3 & vec1 ) +{ + return Vector3( + fminf4( vec0.getX(), vec1.getX() ), + fminf4( vec0.getY(), vec1.getY() ), + fminf4( vec0.getZ(), vec1.getZ() ) + ); +} + +inline vec_float4 minElem( const Vector3 & vec ) +{ + vec_float4 result; + result = fminf4( vec.getX(), vec.getY() ); + result = fminf4( vec.getZ(), result ); + return result; +} + +inline vec_float4 sum( const Vector3 & vec ) +{ + vec_float4 result; + result = vec_add( vec.getX(), vec.getY() ); + result = vec_add( result, vec.getZ() ); + return result; +} + +inline vec_float4 dot( const Vector3 & vec0, const Vector3 & vec1 ) +{ + vec_float4 result; + result = vec_madd( vec0.getX(), vec1.getX(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + result = vec_add( result, vec_madd( vec0.getY(), vec1.getY(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + result = vec_add( result, vec_madd( vec0.getZ(), vec1.getZ(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + return result; +} + +inline vec_float4 lengthSqr( const Vector3 & vec ) +{ + vec_float4 result; + result = vec_madd( vec.getX(), vec.getX(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + result = vec_add( result, vec_madd( vec.getY(), vec.getY(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + result = vec_add( result, vec_madd( vec.getZ(), vec.getZ(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + return result; +} + +inline vec_float4 length( const Vector3 & vec ) +{ + return sqrtf4( lengthSqr( vec ) ); +} + +inline const Vector3 normalize( const Vector3 & vec ) +{ + vec_float4 lenSqr, lenInv; + lenSqr = lengthSqr( vec ); + lenInv = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), sqrtf4( lenSqr ) ); + return Vector3( + vec_madd( vec.getX(), lenInv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), + vec_madd( vec.getY(), lenInv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), + vec_madd( vec.getZ(), lenInv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) + ); +} + +inline const Vector3 cross( const Vector3 & vec0, const Vector3 & vec1 ) +{ + return Vector3( + vec_sub( vec_madd( vec0.getY(), vec1.getZ(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( vec0.getZ(), vec1.getY(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), + vec_sub( vec_madd( vec0.getZ(), vec1.getX(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( vec0.getX(), vec1.getZ(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), + vec_sub( vec_madd( vec0.getX(), vec1.getY(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), vec_madd( vec0.getY(), vec1.getX(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ) + ); +} + +inline const Vector3 select( const Vector3 & vec0, const Vector3 & vec1, vec_uint4 select1 ) +{ + return Vector3( + vec_sel( vec0.getX(), vec1.getX(), select1 ), + vec_sel( vec0.getY(), vec1.getY(), select1 ), + vec_sel( vec0.getZ(), vec1.getZ(), select1 ) + ); +} + +#ifdef _VECTORMATH_DEBUG + +inline void print( const Vector3 & vec ) +{ + Aos::Vector3 vec0, vec1, vec2, vec3; + vec.get4Aos( vec0, vec1, vec2, vec3 ); + printf("slot 0:\n"); + print( vec0 ); + printf("slot 1:\n"); + print( vec1 ); + printf("slot 2:\n"); + print( vec2 ); + printf("slot 3:\n"); + print( vec3 ); +} + +inline void print( const Vector3 & vec, const char * name ) +{ + Aos::Vector3 vec0, vec1, vec2, vec3; + printf( "%s:\n", name ); + vec.get4Aos( vec0, vec1, vec2, vec3 ); + printf("slot 0:\n"); + print( vec0 ); + printf("slot 1:\n"); + print( vec1 ); + printf("slot 2:\n"); + print( vec2 ); + printf("slot 3:\n"); + print( vec3 ); +} + +#endif + +inline Vector4::Vector4( const Vector4 & vec ) +{ + mX = vec.mX; + mY = vec.mY; + mZ = vec.mZ; + mW = vec.mW; +} + +inline Vector4::Vector4( vec_float4 _x, vec_float4 _y, vec_float4 _z, vec_float4 _w ) +{ + mX = _x; + mY = _y; + mZ = _z; + mW = _w; +} + +inline Vector4::Vector4( const Vector3 & xyz, vec_float4 _w ) +{ + this->setXYZ( xyz ); + this->setW( _w ); +} + +inline Vector4::Vector4( const Vector3 & vec ) +{ + mX = vec.getX(); + mY = vec.getY(); + mZ = vec.getZ(); + mW = ((vec_float4){0.0f,0.0f,0.0f,0.0f}); +} + +inline Vector4::Vector4( const Point3 & pnt ) +{ + mX = pnt.getX(); + mY = pnt.getY(); + mZ = pnt.getZ(); + mW = ((vec_float4){1.0f,1.0f,1.0f,1.0f}); +} + +inline Vector4::Vector4( const Quat & quat ) +{ + mX = quat.getX(); + mY = quat.getY(); + mZ = quat.getZ(); + mW = quat.getW(); +} + +inline Vector4::Vector4( vec_float4 scalar ) +{ + mX = scalar; + mY = scalar; + mZ = scalar; + mW = scalar; +} + +inline Vector4::Vector4( Aos::Vector4 vec ) +{ + vec_float4 vec128 = vec.get128(); + mX = vec_splat( vec128, 0 ); + mY = vec_splat( vec128, 1 ); + mZ = vec_splat( vec128, 2 ); + mW = vec_splat( vec128, 3 ); +} + +inline Vector4::Vector4( Aos::Vector4 vec0, Aos::Vector4 vec1, Aos::Vector4 vec2, Aos::Vector4 vec3 ) +{ + vec_float4 tmp0, tmp1, tmp2, tmp3; + tmp0 = vec_mergeh( vec0.get128(), vec2.get128() ); + tmp1 = vec_mergeh( vec1.get128(), vec3.get128() ); + tmp2 = vec_mergel( vec0.get128(), vec2.get128() ); + tmp3 = vec_mergel( vec1.get128(), vec3.get128() ); + mX = vec_mergeh( tmp0, tmp1 ); + mY = vec_mergel( tmp0, tmp1 ); + mZ = vec_mergeh( tmp2, tmp3 ); + mW = vec_mergel( tmp2, tmp3 ); +} + +inline const Vector4 Vector4::xAxis( ) +{ + return Vector4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); +} + +inline const Vector4 Vector4::yAxis( ) +{ + return Vector4( ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){1.0f,1.0f,1.0f,1.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); +} + +inline const Vector4 Vector4::zAxis( ) +{ + return Vector4( ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){1.0f,1.0f,1.0f,1.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); +} + +inline const Vector4 Vector4::wAxis( ) +{ + return Vector4( ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){0.0f,0.0f,0.0f,0.0f}), ((vec_float4){1.0f,1.0f,1.0f,1.0f}) ); +} + +inline const Vector4 lerp( vec_float4 t, const Vector4 & vec0, const Vector4 & vec1 ) +{ + return ( vec0 + ( ( vec1 - vec0 ) * t ) ); +} + +inline const Vector4 slerp( vec_float4 t, const Vector4 & unitVec0, const Vector4 & unitVec1 ) +{ + vec_float4 recipSinAngle, scale0, scale1, cosAngle, angle; + vec_uint4 selectMask; + cosAngle = dot( unitVec0, unitVec1 ); + selectMask = (vec_uint4)vec_cmpgt( (vec_float4){_VECTORMATH_SLERP_TOL,_VECTORMATH_SLERP_TOL,_VECTORMATH_SLERP_TOL,_VECTORMATH_SLERP_TOL}, cosAngle ); + angle = acosf4( cosAngle ); + recipSinAngle = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), sinf4( angle ) ); + scale0 = vec_sel( vec_sub( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), t ), vec_madd( sinf4( vec_madd( vec_sub( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), t ), angle, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), recipSinAngle, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), selectMask ); + scale1 = vec_sel( t, vec_madd( sinf4( vec_madd( t, angle, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ), recipSinAngle, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), selectMask ); + return ( ( unitVec0 * scale0 ) + ( unitVec1 * scale1 ) ); +} + +inline void Vector4::get4Aos( Aos::Vector4 & result0, Aos::Vector4 & result1, Aos::Vector4 & result2, Aos::Vector4 & result3 ) const +{ + vec_float4 tmp0, tmp1, tmp2, tmp3; + tmp0 = vec_mergeh( mX, mZ ); + tmp1 = vec_mergeh( mY, mW ); + tmp2 = vec_mergel( mX, mZ ); + tmp3 = vec_mergel( mY, mW ); + result0 = Aos::Vector4( vec_mergeh( tmp0, tmp1 ) ); + result1 = Aos::Vector4( vec_mergel( tmp0, tmp1 ) ); + result2 = Aos::Vector4( vec_mergeh( tmp2, tmp3 ) ); + result3 = Aos::Vector4( vec_mergel( tmp2, tmp3 ) ); +} + +inline void storeHalfFloats( const Vector4 & vec, vec_ushort8 * twoQuads ) +{ + Aos::Vector4 v0, v1, v2, v3; + vec.get4Aos( v0, v1, v2, v3 ); + twoQuads[0] = _vmath2VfToHalfFloats(v0.get128(), v1.get128()); + twoQuads[1] = _vmath2VfToHalfFloats(v2.get128(), v3.get128()); +} + +inline Vector4 & Vector4::operator =( const Vector4 & vec ) +{ + mX = vec.mX; + mY = vec.mY; + mZ = vec.mZ; + mW = vec.mW; + return *this; +} + +inline Vector4 & Vector4::setXYZ( const Vector3 & vec ) +{ + mX = vec.getX(); + mY = vec.getY(); + mZ = vec.getZ(); + return *this; +} + +inline const Vector3 Vector4::getXYZ( ) const +{ + return Vector3( mX, mY, mZ ); +} + +inline Vector4 & Vector4::setX( vec_float4 _x ) +{ + mX = _x; + return *this; +} + +inline vec_float4 Vector4::getX( ) const +{ + return mX; +} + +inline Vector4 & Vector4::setY( vec_float4 _y ) +{ + mY = _y; + return *this; +} + +inline vec_float4 Vector4::getY( ) const +{ + return mY; +} + +inline Vector4 & Vector4::setZ( vec_float4 _z ) +{ + mZ = _z; + return *this; +} + +inline vec_float4 Vector4::getZ( ) const +{ + return mZ; +} + +inline Vector4 & Vector4::setW( vec_float4 _w ) +{ + mW = _w; + return *this; +} + +inline vec_float4 Vector4::getW( ) const +{ + return mW; +} + +inline Vector4 & Vector4::setElem( int idx, vec_float4 value ) +{ + *(&mX + idx) = value; + return *this; +} + +inline vec_float4 Vector4::getElem( int idx ) const +{ + return *(&mX + idx); +} + +inline Vector4::vec_float4_t & Vector4::operator []( int idx ) +{ + return *(&mX + idx); +} + +inline vec_float4 Vector4::operator []( int idx ) const +{ + return *(&mX + idx); +} + +inline const Vector4 Vector4::operator +( const Vector4 & vec ) const +{ + return Vector4( + vec_add( mX, vec.mX ), + vec_add( mY, vec.mY ), + vec_add( mZ, vec.mZ ), + vec_add( mW, vec.mW ) + ); +} + +inline const Vector4 Vector4::operator -( const Vector4 & vec ) const +{ + return Vector4( + vec_sub( mX, vec.mX ), + vec_sub( mY, vec.mY ), + vec_sub( mZ, vec.mZ ), + vec_sub( mW, vec.mW ) + ); +} + +inline const Vector4 Vector4::operator *( vec_float4 scalar ) const +{ + return Vector4( + vec_madd( mX, scalar, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), + vec_madd( mY, scalar, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), + vec_madd( mZ, scalar, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), + vec_madd( mW, scalar, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) + ); +} + +inline Vector4 & Vector4::operator +=( const Vector4 & vec ) +{ + *this = *this + vec; + return *this; +} + +inline Vector4 & Vector4::operator -=( const Vector4 & vec ) +{ + *this = *this - vec; + return *this; +} + +inline Vector4 & Vector4::operator *=( vec_float4 scalar ) +{ + *this = *this * scalar; + return *this; +} + +inline const Vector4 Vector4::operator /( vec_float4 scalar ) const +{ + return Vector4( + divf4( mX, scalar ), + divf4( mY, scalar ), + divf4( mZ, scalar ), + divf4( mW, scalar ) + ); +} + +inline Vector4 & Vector4::operator /=( vec_float4 scalar ) +{ + *this = *this / scalar; + return *this; +} + +inline const Vector4 Vector4::operator -( ) const +{ + return Vector4( + negatef4( mX ), + negatef4( mY ), + negatef4( mZ ), + negatef4( mW ) + ); +} + +inline const Vector4 operator *( vec_float4 scalar, const Vector4 & vec ) +{ + return vec * scalar; +} + +inline const Vector4 mulPerElem( const Vector4 & vec0, const Vector4 & vec1 ) +{ + return Vector4( + vec_madd( vec0.getX(), vec1.getX(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), + vec_madd( vec0.getY(), vec1.getY(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), + vec_madd( vec0.getZ(), vec1.getZ(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), + vec_madd( vec0.getW(), vec1.getW(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) + ); +} + +inline const Vector4 divPerElem( const Vector4 & vec0, const Vector4 & vec1 ) +{ + return Vector4( + divf4( vec0.getX(), vec1.getX() ), + divf4( vec0.getY(), vec1.getY() ), + divf4( vec0.getZ(), vec1.getZ() ), + divf4( vec0.getW(), vec1.getW() ) + ); +} + +inline const Vector4 recipPerElem( const Vector4 & vec ) +{ + return Vector4( + divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), vec.getX() ), + divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), vec.getY() ), + divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), vec.getZ() ), + divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), vec.getW() ) + ); +} + +inline const Vector4 sqrtPerElem( const Vector4 & vec ) +{ + return Vector4( + sqrtf4( vec.getX() ), + sqrtf4( vec.getY() ), + sqrtf4( vec.getZ() ), + sqrtf4( vec.getW() ) + ); +} + +inline const Vector4 rsqrtPerElem( const Vector4 & vec ) +{ + return Vector4( + divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), sqrtf4( vec.getX() ) ), + divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), sqrtf4( vec.getY() ) ), + divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), sqrtf4( vec.getZ() ) ), + divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), sqrtf4( vec.getW() ) ) + ); +} + +inline const Vector4 absPerElem( const Vector4 & vec ) +{ + return Vector4( + fabsf4( vec.getX() ), + fabsf4( vec.getY() ), + fabsf4( vec.getZ() ), + fabsf4( vec.getW() ) + ); +} + +inline const Vector4 copySignPerElem( const Vector4 & vec0, const Vector4 & vec1 ) +{ + return Vector4( + copysignf4( vec0.getX(), vec1.getX() ), + copysignf4( vec0.getY(), vec1.getY() ), + copysignf4( vec0.getZ(), vec1.getZ() ), + copysignf4( vec0.getW(), vec1.getW() ) + ); +} + +inline const Vector4 maxPerElem( const Vector4 & vec0, const Vector4 & vec1 ) +{ + return Vector4( + fmaxf4( vec0.getX(), vec1.getX() ), + fmaxf4( vec0.getY(), vec1.getY() ), + fmaxf4( vec0.getZ(), vec1.getZ() ), + fmaxf4( vec0.getW(), vec1.getW() ) + ); +} + +inline vec_float4 maxElem( const Vector4 & vec ) +{ + vec_float4 result; + result = fmaxf4( vec.getX(), vec.getY() ); + result = fmaxf4( vec.getZ(), result ); + result = fmaxf4( vec.getW(), result ); + return result; +} + +inline const Vector4 minPerElem( const Vector4 & vec0, const Vector4 & vec1 ) +{ + return Vector4( + fminf4( vec0.getX(), vec1.getX() ), + fminf4( vec0.getY(), vec1.getY() ), + fminf4( vec0.getZ(), vec1.getZ() ), + fminf4( vec0.getW(), vec1.getW() ) + ); +} + +inline vec_float4 minElem( const Vector4 & vec ) +{ + vec_float4 result; + result = fminf4( vec.getX(), vec.getY() ); + result = fminf4( vec.getZ(), result ); + result = fminf4( vec.getW(), result ); + return result; +} + +inline vec_float4 sum( const Vector4 & vec ) +{ + vec_float4 result; + result = vec_add( vec.getX(), vec.getY() ); + result = vec_add( result, vec.getZ() ); + result = vec_add( result, vec.getW() ); + return result; +} + +inline vec_float4 dot( const Vector4 & vec0, const Vector4 & vec1 ) +{ + vec_float4 result; + result = vec_madd( vec0.getX(), vec1.getX(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + result = vec_add( result, vec_madd( vec0.getY(), vec1.getY(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + result = vec_add( result, vec_madd( vec0.getZ(), vec1.getZ(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + result = vec_add( result, vec_madd( vec0.getW(), vec1.getW(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + return result; +} + +inline vec_float4 lengthSqr( const Vector4 & vec ) +{ + vec_float4 result; + result = vec_madd( vec.getX(), vec.getX(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + result = vec_add( result, vec_madd( vec.getY(), vec.getY(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + result = vec_add( result, vec_madd( vec.getZ(), vec.getZ(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + result = vec_add( result, vec_madd( vec.getW(), vec.getW(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + return result; +} + +inline vec_float4 length( const Vector4 & vec ) +{ + return sqrtf4( lengthSqr( vec ) ); +} + +inline const Vector4 normalize( const Vector4 & vec ) +{ + vec_float4 lenSqr, lenInv; + lenSqr = lengthSqr( vec ); + lenInv = divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), sqrtf4( lenSqr ) ); + return Vector4( + vec_madd( vec.getX(), lenInv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), + vec_madd( vec.getY(), lenInv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), + vec_madd( vec.getZ(), lenInv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), + vec_madd( vec.getW(), lenInv, ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) + ); +} + +inline const Vector4 select( const Vector4 & vec0, const Vector4 & vec1, vec_uint4 select1 ) +{ + return Vector4( + vec_sel( vec0.getX(), vec1.getX(), select1 ), + vec_sel( vec0.getY(), vec1.getY(), select1 ), + vec_sel( vec0.getZ(), vec1.getZ(), select1 ), + vec_sel( vec0.getW(), vec1.getW(), select1 ) + ); +} + +#ifdef _VECTORMATH_DEBUG + +inline void print( const Vector4 & vec ) +{ + Aos::Vector4 vec0, vec1, vec2, vec3; + vec.get4Aos( vec0, vec1, vec2, vec3 ); + printf("slot 0:\n"); + print( vec0 ); + printf("slot 1:\n"); + print( vec1 ); + printf("slot 2:\n"); + print( vec2 ); + printf("slot 3:\n"); + print( vec3 ); +} + +inline void print( const Vector4 & vec, const char * name ) +{ + Aos::Vector4 vec0, vec1, vec2, vec3; + printf( "%s:\n", name ); + vec.get4Aos( vec0, vec1, vec2, vec3 ); + printf("slot 0:\n"); + print( vec0 ); + printf("slot 1:\n"); + print( vec1 ); + printf("slot 2:\n"); + print( vec2 ); + printf("slot 3:\n"); + print( vec3 ); +} + +#endif + +inline Point3::Point3( const Point3 & pnt ) +{ + mX = pnt.mX; + mY = pnt.mY; + mZ = pnt.mZ; +} + +inline Point3::Point3( vec_float4 _x, vec_float4 _y, vec_float4 _z ) +{ + mX = _x; + mY = _y; + mZ = _z; +} + +inline Point3::Point3( const Vector3 & vec ) +{ + mX = vec.getX(); + mY = vec.getY(); + mZ = vec.getZ(); +} + +inline Point3::Point3( vec_float4 scalar ) +{ + mX = scalar; + mY = scalar; + mZ = scalar; +} + +inline Point3::Point3( Aos::Point3 pnt ) +{ + vec_float4 vec128 = pnt.get128(); + mX = vec_splat( vec128, 0 ); + mY = vec_splat( vec128, 1 ); + mZ = vec_splat( vec128, 2 ); +} + +inline Point3::Point3( Aos::Point3 pnt0, Aos::Point3 pnt1, Aos::Point3 pnt2, Aos::Point3 pnt3 ) +{ + vec_float4 tmp0, tmp1, tmp2, tmp3; + tmp0 = vec_mergeh( pnt0.get128(), pnt2.get128() ); + tmp1 = vec_mergeh( pnt1.get128(), pnt3.get128() ); + tmp2 = vec_mergel( pnt0.get128(), pnt2.get128() ); + tmp3 = vec_mergel( pnt1.get128(), pnt3.get128() ); + mX = vec_mergeh( tmp0, tmp1 ); + mY = vec_mergel( tmp0, tmp1 ); + mZ = vec_mergeh( tmp2, tmp3 ); +} + +inline const Point3 lerp( vec_float4 t, const Point3 & pnt0, const Point3 & pnt1 ) +{ + return ( pnt0 + ( ( pnt1 - pnt0 ) * t ) ); +} + +inline void Point3::get4Aos( Aos::Point3 & result0, Aos::Point3 & result1, Aos::Point3 & result2, Aos::Point3 & result3 ) const +{ + vec_float4 tmp0, tmp1; + tmp0 = vec_mergeh( mX, mZ ); + tmp1 = vec_mergel( mX, mZ ); + result0 = Aos::Point3( vec_mergeh( tmp0, mY ) ); + result1 = Aos::Point3( vec_perm( tmp0, mY, _VECTORMATH_PERM_ZBWX ) ); + result2 = Aos::Point3( vec_perm( tmp1, mY, _VECTORMATH_PERM_XCYX ) ); + result3 = Aos::Point3( vec_perm( tmp1, mY, _VECTORMATH_PERM_ZDWX ) ); +} + +inline void loadXYZArray( Point3 & vec, const vec_float4 * threeQuads ) +{ + vec_float4 xyxy, yzyz, zxzx, xyzx, yzxy, zxyz; + xyzx = threeQuads[0]; + yzxy = threeQuads[1]; + zxyz = threeQuads[2]; + xyxy = vec_sld( yzxy, xyzx, 8 ); + zxzx = vec_sld( xyzx, zxyz, 8 ); + yzyz = vec_sld( zxyz, yzxy, 8 ); + vec.setX( vec_perm( xyxy, zxzx, _VECTORMATH_PERM_ZBXD ) ); + vec.setY( vec_perm( xyxy, yzyz, _VECTORMATH_PERM_WCYA ) ); + vec.setZ( vec_perm( zxzx, yzyz, _VECTORMATH_PERM_XDZB ) ); +} + +inline void storeXYZArray( const Point3 & vec, vec_float4 * threeQuads ) +{ + vec_float4 xyzx, yzxy, zxyz, xyxy, zxzx, yzyz; + xyxy = vec_perm( vec.getX(), vec.getY(), _VECTORMATH_PERM_ZCXA ); + zxzx = vec_perm( vec.getZ(), vec.getX(), _VECTORMATH_PERM_XBZD ); + yzyz = vec_perm( vec.getY(), vec.getZ(), _VECTORMATH_PERM_WDYB ); + xyzx = vec_sld( xyxy, zxzx, 8 ); + yzxy = vec_sld( yzyz, xyxy, 8 ); + zxyz = vec_sld( zxzx, yzyz, 8 ); + threeQuads[0] = xyzx; + threeQuads[1] = yzxy; + threeQuads[2] = zxyz; +} + +inline void storeHalfFloats( const Point3 & pnt0, const Point3 & pnt1, vec_ushort8 * threeQuads ) +{ + vec_float4 xyz0[3]; + vec_float4 xyz1[3]; + storeXYZArray( pnt0, xyz0 ); + storeXYZArray( pnt1, xyz1 ); + threeQuads[0] = _vmath2VfToHalfFloats(xyz0[0], xyz0[1]); + threeQuads[1] = _vmath2VfToHalfFloats(xyz0[2], xyz1[0]); + threeQuads[2] = _vmath2VfToHalfFloats(xyz1[1], xyz1[2]); +} + +inline Point3 & Point3::operator =( const Point3 & pnt ) +{ + mX = pnt.mX; + mY = pnt.mY; + mZ = pnt.mZ; + return *this; +} + +inline Point3 & Point3::setX( vec_float4 _x ) +{ + mX = _x; + return *this; +} + +inline vec_float4 Point3::getX( ) const +{ + return mX; +} + +inline Point3 & Point3::setY( vec_float4 _y ) +{ + mY = _y; + return *this; +} + +inline vec_float4 Point3::getY( ) const +{ + return mY; +} + +inline Point3 & Point3::setZ( vec_float4 _z ) +{ + mZ = _z; + return *this; +} + +inline vec_float4 Point3::getZ( ) const +{ + return mZ; +} + +inline Point3 & Point3::setElem( int idx, vec_float4 value ) +{ + *(&mX + idx) = value; + return *this; +} + +inline vec_float4 Point3::getElem( int idx ) const +{ + return *(&mX + idx); +} + +inline Point3::vec_float4_t & Point3::operator []( int idx ) +{ + return *(&mX + idx); +} + +inline vec_float4 Point3::operator []( int idx ) const +{ + return *(&mX + idx); +} + +inline const Vector3 Point3::operator -( const Point3 & pnt ) const +{ + return Vector3( + vec_sub( mX, pnt.mX ), + vec_sub( mY, pnt.mY ), + vec_sub( mZ, pnt.mZ ) + ); +} + +inline const Point3 Point3::operator +( const Vector3 & vec ) const +{ + return Point3( + vec_add( mX, vec.getX() ), + vec_add( mY, vec.getY() ), + vec_add( mZ, vec.getZ() ) + ); +} + +inline const Point3 Point3::operator -( const Vector3 & vec ) const +{ + return Point3( + vec_sub( mX, vec.getX() ), + vec_sub( mY, vec.getY() ), + vec_sub( mZ, vec.getZ() ) + ); +} + +inline Point3 & Point3::operator +=( const Vector3 & vec ) +{ + *this = *this + vec; + return *this; +} + +inline Point3 & Point3::operator -=( const Vector3 & vec ) +{ + *this = *this - vec; + return *this; +} + +inline const Point3 mulPerElem( const Point3 & pnt0, const Point3 & pnt1 ) +{ + return Point3( + vec_madd( pnt0.getX(), pnt1.getX(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), + vec_madd( pnt0.getY(), pnt1.getY(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ), + vec_madd( pnt0.getZ(), pnt1.getZ(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) + ); +} + +inline const Point3 divPerElem( const Point3 & pnt0, const Point3 & pnt1 ) +{ + return Point3( + divf4( pnt0.getX(), pnt1.getX() ), + divf4( pnt0.getY(), pnt1.getY() ), + divf4( pnt0.getZ(), pnt1.getZ() ) + ); +} + +inline const Point3 recipPerElem( const Point3 & pnt ) +{ + return Point3( + divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), pnt.getX() ), + divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), pnt.getY() ), + divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), pnt.getZ() ) + ); +} + +inline const Point3 sqrtPerElem( const Point3 & pnt ) +{ + return Point3( + sqrtf4( pnt.getX() ), + sqrtf4( pnt.getY() ), + sqrtf4( pnt.getZ() ) + ); +} + +inline const Point3 rsqrtPerElem( const Point3 & pnt ) +{ + return Point3( + divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), sqrtf4( pnt.getX() ) ), + divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), sqrtf4( pnt.getY() ) ), + divf4( ((vec_float4){1.0f,1.0f,1.0f,1.0f}), sqrtf4( pnt.getZ() ) ) + ); +} + +inline const Point3 absPerElem( const Point3 & pnt ) +{ + return Point3( + fabsf4( pnt.getX() ), + fabsf4( pnt.getY() ), + fabsf4( pnt.getZ() ) + ); +} + +inline const Point3 copySignPerElem( const Point3 & pnt0, const Point3 & pnt1 ) +{ + return Point3( + copysignf4( pnt0.getX(), pnt1.getX() ), + copysignf4( pnt0.getY(), pnt1.getY() ), + copysignf4( pnt0.getZ(), pnt1.getZ() ) + ); +} + +inline const Point3 maxPerElem( const Point3 & pnt0, const Point3 & pnt1 ) +{ + return Point3( + fmaxf4( pnt0.getX(), pnt1.getX() ), + fmaxf4( pnt0.getY(), pnt1.getY() ), + fmaxf4( pnt0.getZ(), pnt1.getZ() ) + ); +} + +inline vec_float4 maxElem( const Point3 & pnt ) +{ + vec_float4 result; + result = fmaxf4( pnt.getX(), pnt.getY() ); + result = fmaxf4( pnt.getZ(), result ); + return result; +} + +inline const Point3 minPerElem( const Point3 & pnt0, const Point3 & pnt1 ) +{ + return Point3( + fminf4( pnt0.getX(), pnt1.getX() ), + fminf4( pnt0.getY(), pnt1.getY() ), + fminf4( pnt0.getZ(), pnt1.getZ() ) + ); +} + +inline vec_float4 minElem( const Point3 & pnt ) +{ + vec_float4 result; + result = fminf4( pnt.getX(), pnt.getY() ); + result = fminf4( pnt.getZ(), result ); + return result; +} + +inline vec_float4 sum( const Point3 & pnt ) +{ + vec_float4 result; + result = vec_add( pnt.getX(), pnt.getY() ); + result = vec_add( result, pnt.getZ() ); + return result; +} + +inline const Point3 scale( const Point3 & pnt, vec_float4 scaleVal ) +{ + return mulPerElem( pnt, Point3( scaleVal ) ); +} + +inline const Point3 scale( const Point3 & pnt, const Vector3 & scaleVec ) +{ + return mulPerElem( pnt, Point3( scaleVec ) ); +} + +inline vec_float4 projection( const Point3 & pnt, const Vector3 & unitVec ) +{ + vec_float4 result; + result = vec_madd( pnt.getX(), unitVec.getX(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ); + result = vec_add( result, vec_madd( pnt.getY(), unitVec.getY(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + result = vec_add( result, vec_madd( pnt.getZ(), unitVec.getZ(), ((vec_float4){0.0f,0.0f,0.0f,0.0f}) ) ); + return result; +} + +inline vec_float4 distSqrFromOrigin( const Point3 & pnt ) +{ + return lengthSqr( Vector3( pnt ) ); +} + +inline vec_float4 distFromOrigin( const Point3 & pnt ) +{ + return length( Vector3( pnt ) ); +} + +inline vec_float4 distSqr( const Point3 & pnt0, const Point3 & pnt1 ) +{ + return lengthSqr( ( pnt1 - pnt0 ) ); +} + +inline vec_float4 dist( const Point3 & pnt0, const Point3 & pnt1 ) +{ + return length( ( pnt1 - pnt0 ) ); +} + +inline const Point3 select( const Point3 & pnt0, const Point3 & pnt1, vec_uint4 select1 ) +{ + return Point3( + vec_sel( pnt0.getX(), pnt1.getX(), select1 ), + vec_sel( pnt0.getY(), pnt1.getY(), select1 ), + vec_sel( pnt0.getZ(), pnt1.getZ(), select1 ) + ); +} + +#ifdef _VECTORMATH_DEBUG + +inline void print( const Point3 & pnt ) +{ + Aos::Point3 vec0, vec1, vec2, vec3; + pnt.get4Aos( vec0, vec1, vec2, vec3 ); + printf("slot 0:\n"); + print( vec0 ); + printf("slot 1:\n"); + print( vec1 ); + printf("slot 2:\n"); + print( vec2 ); + printf("slot 3:\n"); + print( vec3 ); +} + +inline void print( const Point3 & pnt, const char * name ) +{ + Aos::Point3 vec0, vec1, vec2, vec3; + printf( "%s:\n", name ); + pnt.get4Aos( vec0, vec1, vec2, vec3 ); + printf("slot 0:\n"); + print( vec0 ); + printf("slot 1:\n"); + print( vec1 ); + printf("slot 2:\n"); + print( vec2 ); + printf("slot 3:\n"); + print( vec3 ); +} + +#endif + +} // namespace Soa +} // namespace Vectormath + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/ppu/cpp/vecidx_aos.h b/Extras/vectormathlibrary/include/vectormath/ppu/cpp/vecidx_aos.h new file mode 100644 index 000000000..df3357570 --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/ppu/cpp/vecidx_aos.h @@ -0,0 +1,80 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_VECIDX_AOS_H +#define _VECTORMATH_VECIDX_AOS_H + +#include "floatInVec.h" + +namespace Vectormath { +namespace Aos { + +//----------------------------------------------------------------------------- +// VecIdx +// Used in setting elements of Vector3, Vector4, Point3, or Quat with the +// subscripting operator. +// + +class VecIdx +{ +private: + typedef vec_float4 vec_float4_t; + vec_float4_t &ref __attribute__ ((aligned(16))); + int i __attribute__ ((aligned(16))); +public: + inline VecIdx( vec_float4_t& vec, int idx ): ref(vec) { i = idx; } + + // implicitly casts to float unless _VECTORMATH_NO_SCALAR_CAST defined + // in which case, implicitly casts to floatInVec, and one must call + // getAsFloat to convert to float. + // +#ifdef _VECTORMATH_NO_SCALAR_CAST + inline operator floatInVec() const; + inline float getAsFloat() const; +#else + inline operator float() const; +#endif + + inline float operator =( float scalar ); + inline floatInVec operator =( floatInVec scalar ); + inline floatInVec operator =( const VecIdx& scalar ); + inline floatInVec operator *=( float scalar ); + inline floatInVec operator *=( floatInVec scalar ); + inline floatInVec operator /=( float scalar ); + inline floatInVec operator /=( floatInVec scalar ); + inline floatInVec operator +=( float scalar ); + inline floatInVec operator +=( floatInVec scalar ); + inline floatInVec operator -=( float scalar ); + inline floatInVec operator -=( floatInVec scalar ); +}; + +} // namespace Aos +} // namespace Vectormath + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/ppu/cpp/vectormath_aos.h b/Extras/vectormathlibrary/include/vectormath/ppu/cpp/vectormath_aos.h new file mode 100644 index 000000000..fdd039b8a --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/ppu/cpp/vectormath_aos.h @@ -0,0 +1,2244 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_AOS_CPP_H +#define _VECTORMATH_AOS_CPP_H + +#include +#include +#include "vecidx_aos.h" +#include "floatInVec.h" +#include "boolInVec.h" + +#ifdef _VECTORMATH_DEBUG +#include +#endif + +namespace Vectormath { + +namespace Aos { + +//----------------------------------------------------------------------------- +// Forward Declarations +// + +class Vector3; +class Vector4; +class Point3; +class Quat; +class Matrix3; +class Matrix4; +class Transform3; + +// A 3-D vector in array-of-structures format +// +class Vector3 +{ + vec_float4 mVec128; + +public: + // Default constructor; does no initialization + // + inline Vector3( ) { }; + + // Construct a 3-D vector from x, y, and z elements + // + inline Vector3( float x, float y, float z ); + + // Construct a 3-D vector from x, y, and z elements (scalar data contained in vector data type) + // + inline Vector3( floatInVec x, floatInVec y, floatInVec z ); + + // Copy elements from a 3-D point into a 3-D vector + // + explicit inline Vector3( Point3 pnt ); + + // Set all elements of a 3-D vector to the same scalar value + // + explicit inline Vector3( float scalar ); + + // Set all elements of a 3-D vector to the same scalar value (scalar data contained in vector data type) + // + explicit inline Vector3( floatInVec scalar ); + + // Set vector float data in a 3-D vector + // + explicit inline Vector3( vec_float4 vf4 ); + + // Get vector float data from a 3-D vector + // + inline vec_float4 get128( ) const; + + // Assign one 3-D vector to another + // + inline Vector3 & operator =( Vector3 vec ); + + // Set the x element of a 3-D vector + // + inline Vector3 & setX( float x ); + + // Set the y element of a 3-D vector + // + inline Vector3 & setY( float y ); + + // Set the z element of a 3-D vector + // + inline Vector3 & setZ( float z ); + + // Set the x element of a 3-D vector (scalar data contained in vector data type) + // + inline Vector3 & setX( floatInVec x ); + + // Set the y element of a 3-D vector (scalar data contained in vector data type) + // + inline Vector3 & setY( floatInVec y ); + + // Set the z element of a 3-D vector (scalar data contained in vector data type) + // + inline Vector3 & setZ( floatInVec z ); + + // Get the x element of a 3-D vector + // + inline const floatInVec getX( ) const; + + // Get the y element of a 3-D vector + // + inline const floatInVec getY( ) const; + + // Get the z element of a 3-D vector + // + inline const floatInVec getZ( ) const; + + // Set an x, y, or z element of a 3-D vector by index + // + inline Vector3 & setElem( int idx, float value ); + + // Set an x, y, or z element of a 3-D vector by index (scalar data contained in vector data type) + // + inline Vector3 & setElem( int idx, floatInVec value ); + + // Get an x, y, or z element of a 3-D vector by index + // + inline const floatInVec getElem( int idx ) const; + + // Subscripting operator to set or get an element + // + inline VecIdx operator []( int idx ); + + // Subscripting operator to get an element + // + inline const floatInVec operator []( int idx ) const; + + // Add two 3-D vectors + // + inline const Vector3 operator +( Vector3 vec ) const; + + // Subtract a 3-D vector from another 3-D vector + // + inline const Vector3 operator -( Vector3 vec ) const; + + // Add a 3-D vector to a 3-D point + // + inline const Point3 operator +( Point3 pnt ) const; + + // Multiply a 3-D vector by a scalar + // + inline const Vector3 operator *( float scalar ) const; + + // Divide a 3-D vector by a scalar + // + inline const Vector3 operator /( float scalar ) const; + + // Multiply a 3-D vector by a scalar (scalar data contained in vector data type) + // + inline const Vector3 operator *( floatInVec scalar ) const; + + // Divide a 3-D vector by a scalar (scalar data contained in vector data type) + // + inline const Vector3 operator /( floatInVec scalar ) const; + + // Perform compound assignment and addition with a 3-D vector + // + inline Vector3 & operator +=( Vector3 vec ); + + // Perform compound assignment and subtraction by a 3-D vector + // + inline Vector3 & operator -=( Vector3 vec ); + + // Perform compound assignment and multiplication by a scalar + // + inline Vector3 & operator *=( float scalar ); + + // Perform compound assignment and division by a scalar + // + inline Vector3 & operator /=( float scalar ); + + // Perform compound assignment and multiplication by a scalar (scalar data contained in vector data type) + // + inline Vector3 & operator *=( floatInVec scalar ); + + // Perform compound assignment and division by a scalar (scalar data contained in vector data type) + // + inline Vector3 & operator /=( floatInVec scalar ); + + // Negate all elements of a 3-D vector + // + inline const Vector3 operator -( ) const; + + // Construct x axis + // + static inline const Vector3 xAxis( ); + + // Construct y axis + // + static inline const Vector3 yAxis( ); + + // Construct z axis + // + static inline const Vector3 zAxis( ); + +}; + +// Multiply a 3-D vector by a scalar +// +inline const Vector3 operator *( float scalar, Vector3 vec ); + +// Multiply a 3-D vector by a scalar (scalar data contained in vector data type) +// +inline const Vector3 operator *( floatInVec scalar, Vector3 vec ); + +// Multiply two 3-D vectors per element +// +inline const Vector3 mulPerElem( Vector3 vec0, Vector3 vec1 ); + +// Divide two 3-D vectors per element +// NOTE: +// Floating-point behavior matches standard library function divf4. +// +inline const Vector3 divPerElem( Vector3 vec0, Vector3 vec1 ); + +// Compute the reciprocal of a 3-D vector per element +// NOTE: +// Floating-point behavior matches standard library function recipf4. +// +inline const Vector3 recipPerElem( Vector3 vec ); + +// Compute the square root of a 3-D vector per element +// NOTE: +// Floating-point behavior matches standard library function sqrtf4. +// +inline const Vector3 sqrtPerElem( Vector3 vec ); + +// Compute the reciprocal square root of a 3-D vector per element +// NOTE: +// Floating-point behavior matches standard library function rsqrtf4. +// +inline const Vector3 rsqrtPerElem( Vector3 vec ); + +// Compute the absolute value of a 3-D vector per element +// +inline const Vector3 absPerElem( Vector3 vec ); + +// Copy sign from one 3-D vector to another, per element +// +inline const Vector3 copySignPerElem( Vector3 vec0, Vector3 vec1 ); + +// Maximum of two 3-D vectors per element +// +inline const Vector3 maxPerElem( Vector3 vec0, Vector3 vec1 ); + +// Minimum of two 3-D vectors per element +// +inline const Vector3 minPerElem( Vector3 vec0, Vector3 vec1 ); + +// Maximum element of a 3-D vector +// +inline const floatInVec maxElem( Vector3 vec ); + +// Minimum element of a 3-D vector +// +inline const floatInVec minElem( Vector3 vec ); + +// Compute the sum of all elements of a 3-D vector +// +inline const floatInVec sum( Vector3 vec ); + +// Compute the dot product of two 3-D vectors +// +inline const floatInVec dot( Vector3 vec0, Vector3 vec1 ); + +// Compute the square of the length of a 3-D vector +// +inline const floatInVec lengthSqr( Vector3 vec ); + +// Compute the length of a 3-D vector +// +inline const floatInVec length( Vector3 vec ); + +// Normalize a 3-D vector +// NOTE: +// The result is unpredictable when all elements of vec are at or near zero. +// +inline const Vector3 normalize( Vector3 vec ); + +// Compute cross product of two 3-D vectors +// +inline const Vector3 cross( Vector3 vec0, Vector3 vec1 ); + +// Outer product of two 3-D vectors +// +inline const Matrix3 outer( Vector3 vec0, Vector3 vec1 ); + +// Pre-multiply a row vector by a 3x3 matrix +// NOTE: +// Slower than column post-multiply. +// +inline const Vector3 rowMul( Vector3 vec, const Matrix3 & mat ); + +// Cross-product matrix of a 3-D vector +// +inline const Matrix3 crossMatrix( Vector3 vec ); + +// Create cross-product matrix and multiply +// NOTE: +// Faster than separately creating a cross-product matrix and multiplying. +// +inline const Matrix3 crossMatrixMul( Vector3 vec, const Matrix3 & mat ); + +// Linear interpolation between two 3-D vectors +// NOTE: +// Does not clamp t between 0 and 1. +// +inline const Vector3 lerp( float t, Vector3 vec0, Vector3 vec1 ); + +// Linear interpolation between two 3-D vectors (scalar data contained in vector data type) +// NOTE: +// Does not clamp t between 0 and 1. +// +inline const Vector3 lerp( floatInVec t, Vector3 vec0, Vector3 vec1 ); + +// Spherical linear interpolation between two 3-D vectors +// NOTE: +// The result is unpredictable if the vectors point in opposite directions. +// Does not clamp t between 0 and 1. +// +inline const Vector3 slerp( float t, Vector3 unitVec0, Vector3 unitVec1 ); + +// Spherical linear interpolation between two 3-D vectors (scalar data contained in vector data type) +// NOTE: +// The result is unpredictable if the vectors point in opposite directions. +// Does not clamp t between 0 and 1. +// +inline const Vector3 slerp( floatInVec t, Vector3 unitVec0, Vector3 unitVec1 ); + +// Conditionally select between two 3-D vectors +// NOTE: +// This function uses a conditional select instruction to avoid a branch. +// However, the transfer of select1 to a VMX register may use more processing time than a branch. +// Use the boolInVec version for better performance. +// +inline const Vector3 select( Vector3 vec0, Vector3 vec1, bool select1 ); + +// Conditionally select between two 3-D vectors (scalar data contained in vector data type) +// NOTE: +// This function uses a conditional select instruction to avoid a branch. +// +inline const Vector3 select( Vector3 vec0, Vector3 vec1, boolInVec select1 ); + +// Store x, y, and z elements of a 3-D vector in the first three words of a quadword. +// The value of the fourth word (the word with the highest address) remains unchanged +// +inline void storeXYZ( Vector3 vec, vec_float4 * quad ); + +// Load four three-float 3-D vectors, stored in three quadwords +// +inline void loadXYZArray( Vector3 & vec0, Vector3 & vec1, Vector3 & vec2, Vector3 & vec3, const vec_float4 * threeQuads ); + +// Store four 3-D vectors in three quadwords +// +inline void storeXYZArray( Vector3 vec0, Vector3 vec1, Vector3 vec2, Vector3 vec3, vec_float4 * threeQuads ); + +// Store eight 3-D vectors as half-floats +// +inline void storeHalfFloats( Vector3 vec0, Vector3 vec1, Vector3 vec2, Vector3 vec3, Vector3 vec4, Vector3 vec5, Vector3 vec6, Vector3 vec7, vec_ushort8 * threeQuads ); + +#ifdef _VECTORMATH_DEBUG + +// Print a 3-D vector +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( Vector3 vec ); + +// Print a 3-D vector and an associated string identifier +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( Vector3 vec, const char * name ); + +#endif + +// A 4-D vector in array-of-structures format +// +class Vector4 +{ + vec_float4 mVec128; + +public: + // Default constructor; does no initialization + // + inline Vector4( ) { }; + + // Construct a 4-D vector from x, y, z, and w elements + // + inline Vector4( float x, float y, float z, float w ); + + // Construct a 4-D vector from x, y, z, and w elements (scalar data contained in vector data type) + // + inline Vector4( floatInVec x, floatInVec y, floatInVec z, floatInVec w ); + + // Construct a 4-D vector from a 3-D vector and a scalar + // + inline Vector4( Vector3 xyz, float w ); + + // Construct a 4-D vector from a 3-D vector and a scalar (scalar data contained in vector data type) + // + inline Vector4( Vector3 xyz, floatInVec w ); + + // Copy x, y, and z from a 3-D vector into a 4-D vector, and set w to 0 + // + explicit inline Vector4( Vector3 vec ); + + // Copy x, y, and z from a 3-D point into a 4-D vector, and set w to 1 + // + explicit inline Vector4( Point3 pnt ); + + // Copy elements from a quaternion into a 4-D vector + // + explicit inline Vector4( Quat quat ); + + // Set all elements of a 4-D vector to the same scalar value + // + explicit inline Vector4( float scalar ); + + // Set all elements of a 4-D vector to the same scalar value (scalar data contained in vector data type) + // + explicit inline Vector4( floatInVec scalar ); + + // Set vector float data in a 4-D vector + // + explicit inline Vector4( vec_float4 vf4 ); + + // Get vector float data from a 4-D vector + // + inline vec_float4 get128( ) const; + + // Assign one 4-D vector to another + // + inline Vector4 & operator =( Vector4 vec ); + + // Set the x, y, and z elements of a 4-D vector + // NOTE: + // This function does not change the w element. + // + inline Vector4 & setXYZ( Vector3 vec ); + + // Get the x, y, and z elements of a 4-D vector + // + inline const Vector3 getXYZ( ) const; + + // Set the x element of a 4-D vector + // + inline Vector4 & setX( float x ); + + // Set the y element of a 4-D vector + // + inline Vector4 & setY( float y ); + + // Set the z element of a 4-D vector + // + inline Vector4 & setZ( float z ); + + // Set the w element of a 4-D vector + // + inline Vector4 & setW( float w ); + + // Set the x element of a 4-D vector (scalar data contained in vector data type) + // + inline Vector4 & setX( floatInVec x ); + + // Set the y element of a 4-D vector (scalar data contained in vector data type) + // + inline Vector4 & setY( floatInVec y ); + + // Set the z element of a 4-D vector (scalar data contained in vector data type) + // + inline Vector4 & setZ( floatInVec z ); + + // Set the w element of a 4-D vector (scalar data contained in vector data type) + // + inline Vector4 & setW( floatInVec w ); + + // Get the x element of a 4-D vector + // + inline const floatInVec getX( ) const; + + // Get the y element of a 4-D vector + // + inline const floatInVec getY( ) const; + + // Get the z element of a 4-D vector + // + inline const floatInVec getZ( ) const; + + // Get the w element of a 4-D vector + // + inline const floatInVec getW( ) const; + + // Set an x, y, z, or w element of a 4-D vector by index + // + inline Vector4 & setElem( int idx, float value ); + + // Set an x, y, z, or w element of a 4-D vector by index (scalar data contained in vector data type) + // + inline Vector4 & setElem( int idx, floatInVec value ); + + // Get an x, y, z, or w element of a 4-D vector by index + // + inline const floatInVec getElem( int idx ) const; + + // Subscripting operator to set or get an element + // + inline VecIdx operator []( int idx ); + + // Subscripting operator to get an element + // + inline const floatInVec operator []( int idx ) const; + + // Add two 4-D vectors + // + inline const Vector4 operator +( Vector4 vec ) const; + + // Subtract a 4-D vector from another 4-D vector + // + inline const Vector4 operator -( Vector4 vec ) const; + + // Multiply a 4-D vector by a scalar + // + inline const Vector4 operator *( float scalar ) const; + + // Divide a 4-D vector by a scalar + // + inline const Vector4 operator /( float scalar ) const; + + // Multiply a 4-D vector by a scalar (scalar data contained in vector data type) + // + inline const Vector4 operator *( floatInVec scalar ) const; + + // Divide a 4-D vector by a scalar (scalar data contained in vector data type) + // + inline const Vector4 operator /( floatInVec scalar ) const; + + // Perform compound assignment and addition with a 4-D vector + // + inline Vector4 & operator +=( Vector4 vec ); + + // Perform compound assignment and subtraction by a 4-D vector + // + inline Vector4 & operator -=( Vector4 vec ); + + // Perform compound assignment and multiplication by a scalar + // + inline Vector4 & operator *=( float scalar ); + + // Perform compound assignment and division by a scalar + // + inline Vector4 & operator /=( float scalar ); + + // Perform compound assignment and multiplication by a scalar (scalar data contained in vector data type) + // + inline Vector4 & operator *=( floatInVec scalar ); + + // Perform compound assignment and division by a scalar (scalar data contained in vector data type) + // + inline Vector4 & operator /=( floatInVec scalar ); + + // Negate all elements of a 4-D vector + // + inline const Vector4 operator -( ) const; + + // Construct x axis + // + static inline const Vector4 xAxis( ); + + // Construct y axis + // + static inline const Vector4 yAxis( ); + + // Construct z axis + // + static inline const Vector4 zAxis( ); + + // Construct w axis + // + static inline const Vector4 wAxis( ); + +}; + +// Multiply a 4-D vector by a scalar +// +inline const Vector4 operator *( float scalar, Vector4 vec ); + +// Multiply a 4-D vector by a scalar (scalar data contained in vector data type) +// +inline const Vector4 operator *( floatInVec scalar, Vector4 vec ); + +// Multiply two 4-D vectors per element +// +inline const Vector4 mulPerElem( Vector4 vec0, Vector4 vec1 ); + +// Divide two 4-D vectors per element +// NOTE: +// Floating-point behavior matches standard library function divf4. +// +inline const Vector4 divPerElem( Vector4 vec0, Vector4 vec1 ); + +// Compute the reciprocal of a 4-D vector per element +// NOTE: +// Floating-point behavior matches standard library function recipf4. +// +inline const Vector4 recipPerElem( Vector4 vec ); + +// Compute the square root of a 4-D vector per element +// NOTE: +// Floating-point behavior matches standard library function sqrtf4. +// +inline const Vector4 sqrtPerElem( Vector4 vec ); + +// Compute the reciprocal square root of a 4-D vector per element +// NOTE: +// Floating-point behavior matches standard library function rsqrtf4. +// +inline const Vector4 rsqrtPerElem( Vector4 vec ); + +// Compute the absolute value of a 4-D vector per element +// +inline const Vector4 absPerElem( Vector4 vec ); + +// Copy sign from one 4-D vector to another, per element +// +inline const Vector4 copySignPerElem( Vector4 vec0, Vector4 vec1 ); + +// Maximum of two 4-D vectors per element +// +inline const Vector4 maxPerElem( Vector4 vec0, Vector4 vec1 ); + +// Minimum of two 4-D vectors per element +// +inline const Vector4 minPerElem( Vector4 vec0, Vector4 vec1 ); + +// Maximum element of a 4-D vector +// +inline const floatInVec maxElem( Vector4 vec ); + +// Minimum element of a 4-D vector +// +inline const floatInVec minElem( Vector4 vec ); + +// Compute the sum of all elements of a 4-D vector +// +inline const floatInVec sum( Vector4 vec ); + +// Compute the dot product of two 4-D vectors +// +inline const floatInVec dot( Vector4 vec0, Vector4 vec1 ); + +// Compute the square of the length of a 4-D vector +// +inline const floatInVec lengthSqr( Vector4 vec ); + +// Compute the length of a 4-D vector +// +inline const floatInVec length( Vector4 vec ); + +// Normalize a 4-D vector +// NOTE: +// The result is unpredictable when all elements of vec are at or near zero. +// +inline const Vector4 normalize( Vector4 vec ); + +// Outer product of two 4-D vectors +// +inline const Matrix4 outer( Vector4 vec0, Vector4 vec1 ); + +// Linear interpolation between two 4-D vectors +// NOTE: +// Does not clamp t between 0 and 1. +// +inline const Vector4 lerp( float t, Vector4 vec0, Vector4 vec1 ); + +// Linear interpolation between two 4-D vectors (scalar data contained in vector data type) +// NOTE: +// Does not clamp t between 0 and 1. +// +inline const Vector4 lerp( floatInVec t, Vector4 vec0, Vector4 vec1 ); + +// Spherical linear interpolation between two 4-D vectors +// NOTE: +// The result is unpredictable if the vectors point in opposite directions. +// Does not clamp t between 0 and 1. +// +inline const Vector4 slerp( float t, Vector4 unitVec0, Vector4 unitVec1 ); + +// Spherical linear interpolation between two 4-D vectors (scalar data contained in vector data type) +// NOTE: +// The result is unpredictable if the vectors point in opposite directions. +// Does not clamp t between 0 and 1. +// +inline const Vector4 slerp( floatInVec t, Vector4 unitVec0, Vector4 unitVec1 ); + +// Conditionally select between two 4-D vectors +// NOTE: +// This function uses a conditional select instruction to avoid a branch. +// However, the transfer of select1 to a VMX register may use more processing time than a branch. +// Use the boolInVec version for better performance. +// +inline const Vector4 select( Vector4 vec0, Vector4 vec1, bool select1 ); + +// Conditionally select between two 4-D vectors (scalar data contained in vector data type) +// NOTE: +// This function uses a conditional select instruction to avoid a branch. +// +inline const Vector4 select( Vector4 vec0, Vector4 vec1, boolInVec select1 ); + +// Store four 4-D vectors as half-floats +// +inline void storeHalfFloats( Vector4 vec0, Vector4 vec1, Vector4 vec2, Vector4 vec3, vec_ushort8 * twoQuads ); + +#ifdef _VECTORMATH_DEBUG + +// Print a 4-D vector +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( Vector4 vec ); + +// Print a 4-D vector and an associated string identifier +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( Vector4 vec, const char * name ); + +#endif + +// A 3-D point in array-of-structures format +// +class Point3 +{ + vec_float4 mVec128; + +public: + // Default constructor; does no initialization + // + inline Point3( ) { }; + + // Construct a 3-D point from x, y, and z elements + // + inline Point3( float x, float y, float z ); + + // Construct a 3-D point from x, y, and z elements (scalar data contained in vector data type) + // + inline Point3( floatInVec x, floatInVec y, floatInVec z ); + + // Copy elements from a 3-D vector into a 3-D point + // + explicit inline Point3( Vector3 vec ); + + // Set all elements of a 3-D point to the same scalar value + // + explicit inline Point3( float scalar ); + + // Set all elements of a 3-D point to the same scalar value (scalar data contained in vector data type) + // + explicit inline Point3( floatInVec scalar ); + + // Set vector float data in a 3-D point + // + explicit inline Point3( vec_float4 vf4 ); + + // Get vector float data from a 3-D point + // + inline vec_float4 get128( ) const; + + // Assign one 3-D point to another + // + inline Point3 & operator =( Point3 pnt ); + + // Set the x element of a 3-D point + // + inline Point3 & setX( float x ); + + // Set the y element of a 3-D point + // + inline Point3 & setY( float y ); + + // Set the z element of a 3-D point + // + inline Point3 & setZ( float z ); + + // Set the x element of a 3-D point (scalar data contained in vector data type) + // + inline Point3 & setX( floatInVec x ); + + // Set the y element of a 3-D point (scalar data contained in vector data type) + // + inline Point3 & setY( floatInVec y ); + + // Set the z element of a 3-D point (scalar data contained in vector data type) + // + inline Point3 & setZ( floatInVec z ); + + // Get the x element of a 3-D point + // + inline const floatInVec getX( ) const; + + // Get the y element of a 3-D point + // + inline const floatInVec getY( ) const; + + // Get the z element of a 3-D point + // + inline const floatInVec getZ( ) const; + + // Set an x, y, or z element of a 3-D point by index + // + inline Point3 & setElem( int idx, float value ); + + // Set an x, y, or z element of a 3-D point by index (scalar data contained in vector data type) + // + inline Point3 & setElem( int idx, floatInVec value ); + + // Get an x, y, or z element of a 3-D point by index + // + inline const floatInVec getElem( int idx ) const; + + // Subscripting operator to set or get an element + // + inline VecIdx operator []( int idx ); + + // Subscripting operator to get an element + // + inline const floatInVec operator []( int idx ) const; + + // Subtract a 3-D point from another 3-D point + // + inline const Vector3 operator -( Point3 pnt ) const; + + // Add a 3-D point to a 3-D vector + // + inline const Point3 operator +( Vector3 vec ) const; + + // Subtract a 3-D vector from a 3-D point + // + inline const Point3 operator -( Vector3 vec ) const; + + // Perform compound assignment and addition with a 3-D vector + // + inline Point3 & operator +=( Vector3 vec ); + + // Perform compound assignment and subtraction by a 3-D vector + // + inline Point3 & operator -=( Vector3 vec ); + +}; + +// Multiply two 3-D points per element +// +inline const Point3 mulPerElem( Point3 pnt0, Point3 pnt1 ); + +// Divide two 3-D points per element +// NOTE: +// Floating-point behavior matches standard library function divf4. +// +inline const Point3 divPerElem( Point3 pnt0, Point3 pnt1 ); + +// Compute the reciprocal of a 3-D point per element +// NOTE: +// Floating-point behavior matches standard library function recipf4. +// +inline const Point3 recipPerElem( Point3 pnt ); + +// Compute the square root of a 3-D point per element +// NOTE: +// Floating-point behavior matches standard library function sqrtf4. +// +inline const Point3 sqrtPerElem( Point3 pnt ); + +// Compute the reciprocal square root of a 3-D point per element +// NOTE: +// Floating-point behavior matches standard library function rsqrtf4. +// +inline const Point3 rsqrtPerElem( Point3 pnt ); + +// Compute the absolute value of a 3-D point per element +// +inline const Point3 absPerElem( Point3 pnt ); + +// Copy sign from one 3-D point to another, per element +// +inline const Point3 copySignPerElem( Point3 pnt0, Point3 pnt1 ); + +// Maximum of two 3-D points per element +// +inline const Point3 maxPerElem( Point3 pnt0, Point3 pnt1 ); + +// Minimum of two 3-D points per element +// +inline const Point3 minPerElem( Point3 pnt0, Point3 pnt1 ); + +// Maximum element of a 3-D point +// +inline const floatInVec maxElem( Point3 pnt ); + +// Minimum element of a 3-D point +// +inline const floatInVec minElem( Point3 pnt ); + +// Compute the sum of all elements of a 3-D point +// +inline const floatInVec sum( Point3 pnt ); + +// Apply uniform scale to a 3-D point +// +inline const Point3 scale( Point3 pnt, float scaleVal ); + +// Apply uniform scale to a 3-D point (scalar data contained in vector data type) +// +inline const Point3 scale( Point3 pnt, floatInVec scaleVal ); + +// Apply non-uniform scale to a 3-D point +// +inline const Point3 scale( Point3 pnt, Vector3 scaleVec ); + +// Scalar projection of a 3-D point on a unit-length 3-D vector +// +inline const floatInVec projection( Point3 pnt, Vector3 unitVec ); + +// Compute the square of the distance of a 3-D point from the coordinate-system origin +// +inline const floatInVec distSqrFromOrigin( Point3 pnt ); + +// Compute the distance of a 3-D point from the coordinate-system origin +// +inline const floatInVec distFromOrigin( Point3 pnt ); + +// Compute the square of the distance between two 3-D points +// +inline const floatInVec distSqr( Point3 pnt0, Point3 pnt1 ); + +// Compute the distance between two 3-D points +// +inline const floatInVec dist( Point3 pnt0, Point3 pnt1 ); + +// Linear interpolation between two 3-D points +// NOTE: +// Does not clamp t between 0 and 1. +// +inline const Point3 lerp( float t, Point3 pnt0, Point3 pnt1 ); + +// Linear interpolation between two 3-D points (scalar data contained in vector data type) +// NOTE: +// Does not clamp t between 0 and 1. +// +inline const Point3 lerp( floatInVec t, Point3 pnt0, Point3 pnt1 ); + +// Conditionally select between two 3-D points +// NOTE: +// This function uses a conditional select instruction to avoid a branch. +// However, the transfer of select1 to a VMX register may use more processing time than a branch. +// Use the boolInVec version for better performance. +// +inline const Point3 select( Point3 pnt0, Point3 pnt1, bool select1 ); + +// Conditionally select between two 3-D points (scalar data contained in vector data type) +// NOTE: +// This function uses a conditional select instruction to avoid a branch. +// +inline const Point3 select( Point3 pnt0, Point3 pnt1, boolInVec select1 ); + +// Store x, y, and z elements of a 3-D point in the first three words of a quadword. +// The value of the fourth word (the word with the highest address) remains unchanged +// +inline void storeXYZ( Point3 pnt, vec_float4 * quad ); + +// Load four three-float 3-D points, stored in three quadwords +// +inline void loadXYZArray( Point3 & pnt0, Point3 & pnt1, Point3 & pnt2, Point3 & pnt3, const vec_float4 * threeQuads ); + +// Store four 3-D points in three quadwords +// +inline void storeXYZArray( Point3 pnt0, Point3 pnt1, Point3 pnt2, Point3 pnt3, vec_float4 * threeQuads ); + +// Store eight 3-D points as half-floats +// +inline void storeHalfFloats( Point3 pnt0, Point3 pnt1, Point3 pnt2, Point3 pnt3, Point3 pnt4, Point3 pnt5, Point3 pnt6, Point3 pnt7, vec_ushort8 * threeQuads ); + +#ifdef _VECTORMATH_DEBUG + +// Print a 3-D point +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( Point3 pnt ); + +// Print a 3-D point and an associated string identifier +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( Point3 pnt, const char * name ); + +#endif + +// A quaternion in array-of-structures format +// +class Quat +{ + vec_float4 mVec128; + +public: + // Default constructor; does no initialization + // + inline Quat( ) { }; + + // Construct a quaternion from x, y, z, and w elements + // + inline Quat( float x, float y, float z, float w ); + + // Construct a quaternion from x, y, z, and w elements (scalar data contained in vector data type) + // + inline Quat( floatInVec x, floatInVec y, floatInVec z, floatInVec w ); + + // Construct a quaternion from a 3-D vector and a scalar + // + inline Quat( Vector3 xyz, float w ); + + // Construct a quaternion from a 3-D vector and a scalar (scalar data contained in vector data type) + // + inline Quat( Vector3 xyz, floatInVec w ); + + // Copy elements from a 4-D vector into a quaternion + // + explicit inline Quat( Vector4 vec ); + + // Convert a rotation matrix to a unit-length quaternion + // + explicit inline Quat( const Matrix3 & rotMat ); + + // Set all elements of a quaternion to the same scalar value + // + explicit inline Quat( float scalar ); + + // Set all elements of a quaternion to the same scalar value (scalar data contained in vector data type) + // + explicit inline Quat( floatInVec scalar ); + + // Set vector float data in a quaternion + // + explicit inline Quat( vec_float4 vf4 ); + + // Get vector float data from a quaternion + // + inline vec_float4 get128( ) const; + + // Assign one quaternion to another + // + inline Quat & operator =( Quat quat ); + + // Set the x, y, and z elements of a quaternion + // NOTE: + // This function does not change the w element. + // + inline Quat & setXYZ( Vector3 vec ); + + // Get the x, y, and z elements of a quaternion + // + inline const Vector3 getXYZ( ) const; + + // Set the x element of a quaternion + // + inline Quat & setX( float x ); + + // Set the y element of a quaternion + // + inline Quat & setY( float y ); + + // Set the z element of a quaternion + // + inline Quat & setZ( float z ); + + // Set the w element of a quaternion + // + inline Quat & setW( float w ); + + // Set the x element of a quaternion (scalar data contained in vector data type) + // + inline Quat & setX( floatInVec x ); + + // Set the y element of a quaternion (scalar data contained in vector data type) + // + inline Quat & setY( floatInVec y ); + + // Set the z element of a quaternion (scalar data contained in vector data type) + // + inline Quat & setZ( floatInVec z ); + + // Set the w element of a quaternion (scalar data contained in vector data type) + // + inline Quat & setW( floatInVec w ); + + // Get the x element of a quaternion + // + inline const floatInVec getX( ) const; + + // Get the y element of a quaternion + // + inline const floatInVec getY( ) const; + + // Get the z element of a quaternion + // + inline const floatInVec getZ( ) const; + + // Get the w element of a quaternion + // + inline const floatInVec getW( ) const; + + // Set an x, y, z, or w element of a quaternion by index + // + inline Quat & setElem( int idx, float value ); + + // Set an x, y, z, or w element of a quaternion by index (scalar data contained in vector data type) + // + inline Quat & setElem( int idx, floatInVec value ); + + // Get an x, y, z, or w element of a quaternion by index + // + inline const floatInVec getElem( int idx ) const; + + // Subscripting operator to set or get an element + // + inline VecIdx operator []( int idx ); + + // Subscripting operator to get an element + // + inline const floatInVec operator []( int idx ) const; + + // Add two quaternions + // + inline const Quat operator +( Quat quat ) const; + + // Subtract a quaternion from another quaternion + // + inline const Quat operator -( Quat quat ) const; + + // Multiply two quaternions + // + inline const Quat operator *( Quat quat ) const; + + // Multiply a quaternion by a scalar + // + inline const Quat operator *( float scalar ) const; + + // Divide a quaternion by a scalar + // + inline const Quat operator /( float scalar ) const; + + // Multiply a quaternion by a scalar (scalar data contained in vector data type) + // + inline const Quat operator *( floatInVec scalar ) const; + + // Divide a quaternion by a scalar (scalar data contained in vector data type) + // + inline const Quat operator /( floatInVec scalar ) const; + + // Perform compound assignment and addition with a quaternion + // + inline Quat & operator +=( Quat quat ); + + // Perform compound assignment and subtraction by a quaternion + // + inline Quat & operator -=( Quat quat ); + + // Perform compound assignment and multiplication by a quaternion + // + inline Quat & operator *=( Quat quat ); + + // Perform compound assignment and multiplication by a scalar + // + inline Quat & operator *=( float scalar ); + + // Perform compound assignment and division by a scalar + // + inline Quat & operator /=( float scalar ); + + // Perform compound assignment and multiplication by a scalar (scalar data contained in vector data type) + // + inline Quat & operator *=( floatInVec scalar ); + + // Perform compound assignment and division by a scalar (scalar data contained in vector data type) + // + inline Quat & operator /=( floatInVec scalar ); + + // Negate all elements of a quaternion + // + inline const Quat operator -( ) const; + + // Construct an identity quaternion + // + static inline const Quat identity( ); + + // Construct a quaternion to rotate between two unit-length 3-D vectors + // NOTE: + // The result is unpredictable if unitVec0 and unitVec1 point in opposite directions. + // + static inline const Quat rotation( Vector3 unitVec0, Vector3 unitVec1 ); + + // Construct a quaternion to rotate around a unit-length 3-D vector + // + static inline const Quat rotation( float radians, Vector3 unitVec ); + + // Construct a quaternion to rotate around a unit-length 3-D vector (scalar data contained in vector data type) + // + static inline const Quat rotation( floatInVec radians, Vector3 unitVec ); + + // Construct a quaternion to rotate around the x axis + // + static inline const Quat rotationX( float radians ); + + // Construct a quaternion to rotate around the y axis + // + static inline const Quat rotationY( float radians ); + + // Construct a quaternion to rotate around the z axis + // + static inline const Quat rotationZ( float radians ); + + // Construct a quaternion to rotate around the x axis (scalar data contained in vector data type) + // + static inline const Quat rotationX( floatInVec radians ); + + // Construct a quaternion to rotate around the y axis (scalar data contained in vector data type) + // + static inline const Quat rotationY( floatInVec radians ); + + // Construct a quaternion to rotate around the z axis (scalar data contained in vector data type) + // + static inline const Quat rotationZ( floatInVec radians ); + +}; + +// Multiply a quaternion by a scalar +// +inline const Quat operator *( float scalar, Quat quat ); + +// Multiply a quaternion by a scalar (scalar data contained in vector data type) +// +inline const Quat operator *( floatInVec scalar, Quat quat ); + +// Compute the conjugate of a quaternion +// +inline const Quat conj( Quat quat ); + +// Use a unit-length quaternion to rotate a 3-D vector +// +inline const Vector3 rotate( Quat unitQuat, Vector3 vec ); + +// Compute the dot product of two quaternions +// +inline const floatInVec dot( Quat quat0, Quat quat1 ); + +// Compute the norm of a quaternion +// +inline const floatInVec norm( Quat quat ); + +// Compute the length of a quaternion +// +inline const floatInVec length( Quat quat ); + +// Normalize a quaternion +// NOTE: +// The result is unpredictable when all elements of quat are at or near zero. +// +inline const Quat normalize( Quat quat ); + +// Linear interpolation between two quaternions +// NOTE: +// Does not clamp t between 0 and 1. +// +inline const Quat lerp( float t, Quat quat0, Quat quat1 ); + +// Linear interpolation between two quaternions (scalar data contained in vector data type) +// NOTE: +// Does not clamp t between 0 and 1. +// +inline const Quat lerp( floatInVec t, Quat quat0, Quat quat1 ); + +// Spherical linear interpolation between two quaternions +// NOTE: +// Interpolates along the shortest path between orientations. +// Does not clamp t between 0 and 1. +// +inline const Quat slerp( float t, Quat unitQuat0, Quat unitQuat1 ); + +// Spherical linear interpolation between two quaternions (scalar data contained in vector data type) +// NOTE: +// Interpolates along the shortest path between orientations. +// Does not clamp t between 0 and 1. +// +inline const Quat slerp( floatInVec t, Quat unitQuat0, Quat unitQuat1 ); + +// Spherical quadrangle interpolation +// +inline const Quat squad( float t, Quat unitQuat0, Quat unitQuat1, Quat unitQuat2, Quat unitQuat3 ); + +// Spherical quadrangle interpolation (scalar data contained in vector data type) +// +inline const Quat squad( floatInVec t, Quat unitQuat0, Quat unitQuat1, Quat unitQuat2, Quat unitQuat3 ); + +// Conditionally select between two quaternions +// NOTE: +// This function uses a conditional select instruction to avoid a branch. +// However, the transfer of select1 to a VMX register may use more processing time than a branch. +// Use the boolInVec version for better performance. +// +inline const Quat select( Quat quat0, Quat quat1, bool select1 ); + +// Conditionally select between two quaternions (scalar data contained in vector data type) +// NOTE: +// This function uses a conditional select instruction to avoid a branch. +// +inline const Quat select( Quat quat0, Quat quat1, boolInVec select1 ); + +#ifdef _VECTORMATH_DEBUG + +// Print a quaternion +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( Quat quat ); + +// Print a quaternion and an associated string identifier +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( Quat quat, const char * name ); + +#endif + +// A 3x3 matrix in array-of-structures format +// +class Matrix3 +{ + Vector3 mCol0; + Vector3 mCol1; + Vector3 mCol2; + +public: + // Default constructor; does no initialization + // + inline Matrix3( ) { }; + + // Copy a 3x3 matrix + // + inline Matrix3( const Matrix3 & mat ); + + // Construct a 3x3 matrix containing the specified columns + // + inline Matrix3( Vector3 col0, Vector3 col1, Vector3 col2 ); + + // Construct a 3x3 rotation matrix from a unit-length quaternion + // + explicit inline Matrix3( Quat unitQuat ); + + // Set all elements of a 3x3 matrix to the same scalar value + // + explicit inline Matrix3( float scalar ); + + // Set all elements of a 3x3 matrix to the same scalar value (scalar data contained in vector data type) + // + explicit inline Matrix3( floatInVec scalar ); + + // Assign one 3x3 matrix to another + // + inline Matrix3 & operator =( const Matrix3 & mat ); + + // Set column 0 of a 3x3 matrix + // + inline Matrix3 & setCol0( Vector3 col0 ); + + // Set column 1 of a 3x3 matrix + // + inline Matrix3 & setCol1( Vector3 col1 ); + + // Set column 2 of a 3x3 matrix + // + inline Matrix3 & setCol2( Vector3 col2 ); + + // Get column 0 of a 3x3 matrix + // + inline const Vector3 getCol0( ) const; + + // Get column 1 of a 3x3 matrix + // + inline const Vector3 getCol1( ) const; + + // Get column 2 of a 3x3 matrix + // + inline const Vector3 getCol2( ) const; + + // Set the column of a 3x3 matrix referred to by the specified index + // + inline Matrix3 & setCol( int col, Vector3 vec ); + + // Set the row of a 3x3 matrix referred to by the specified index + // + inline Matrix3 & setRow( int row, Vector3 vec ); + + // Get the column of a 3x3 matrix referred to by the specified index + // + inline const Vector3 getCol( int col ) const; + + // Get the row of a 3x3 matrix referred to by the specified index + // + inline const Vector3 getRow( int row ) const; + + // Subscripting operator to set or get a column + // + inline Vector3 & operator []( int col ); + + // Subscripting operator to get a column + // + inline const Vector3 operator []( int col ) const; + + // Set the element of a 3x3 matrix referred to by column and row indices + // + inline Matrix3 & setElem( int col, int row, float val ); + + // Set the element of a 3x3 matrix referred to by column and row indices (scalar data contained in vector data type) + // + inline Matrix3 & setElem( int col, int row, floatInVec val ); + + // Get the element of a 3x3 matrix referred to by column and row indices + // + inline const floatInVec getElem( int col, int row ) const; + + // Add two 3x3 matrices + // + inline const Matrix3 operator +( const Matrix3 & mat ) const; + + // Subtract a 3x3 matrix from another 3x3 matrix + // + inline const Matrix3 operator -( const Matrix3 & mat ) const; + + // Negate all elements of a 3x3 matrix + // + inline const Matrix3 operator -( ) const; + + // Multiply a 3x3 matrix by a scalar + // + inline const Matrix3 operator *( float scalar ) const; + + // Multiply a 3x3 matrix by a scalar (scalar data contained in vector data type) + // + inline const Matrix3 operator *( floatInVec scalar ) const; + + // Multiply a 3x3 matrix by a 3-D vector + // + inline const Vector3 operator *( Vector3 vec ) const; + + // Multiply two 3x3 matrices + // + inline const Matrix3 operator *( const Matrix3 & mat ) const; + + // Perform compound assignment and addition with a 3x3 matrix + // + inline Matrix3 & operator +=( const Matrix3 & mat ); + + // Perform compound assignment and subtraction by a 3x3 matrix + // + inline Matrix3 & operator -=( const Matrix3 & mat ); + + // Perform compound assignment and multiplication by a scalar + // + inline Matrix3 & operator *=( float scalar ); + + // Perform compound assignment and multiplication by a scalar (scalar data contained in vector data type) + // + inline Matrix3 & operator *=( floatInVec scalar ); + + // Perform compound assignment and multiplication by a 3x3 matrix + // + inline Matrix3 & operator *=( const Matrix3 & mat ); + + // Construct an identity 3x3 matrix + // + static inline const Matrix3 identity( ); + + // Construct a 3x3 matrix to rotate around the x axis + // + static inline const Matrix3 rotationX( float radians ); + + // Construct a 3x3 matrix to rotate around the y axis + // + static inline const Matrix3 rotationY( float radians ); + + // Construct a 3x3 matrix to rotate around the z axis + // + static inline const Matrix3 rotationZ( float radians ); + + // Construct a 3x3 matrix to rotate around the x axis (scalar data contained in vector data type) + // + static inline const Matrix3 rotationX( floatInVec radians ); + + // Construct a 3x3 matrix to rotate around the y axis (scalar data contained in vector data type) + // + static inline const Matrix3 rotationY( floatInVec radians ); + + // Construct a 3x3 matrix to rotate around the z axis (scalar data contained in vector data type) + // + static inline const Matrix3 rotationZ( floatInVec radians ); + + // Construct a 3x3 matrix to rotate around the x, y, and z axes + // + static inline const Matrix3 rotationZYX( Vector3 radiansXYZ ); + + // Construct a 3x3 matrix to rotate around a unit-length 3-D vector + // + static inline const Matrix3 rotation( float radians, Vector3 unitVec ); + + // Construct a 3x3 matrix to rotate around a unit-length 3-D vector (scalar data contained in vector data type) + // + static inline const Matrix3 rotation( floatInVec radians, Vector3 unitVec ); + + // Construct a rotation matrix from a unit-length quaternion + // + static inline const Matrix3 rotation( Quat unitQuat ); + + // Construct a 3x3 matrix to perform scaling + // + static inline const Matrix3 scale( Vector3 scaleVec ); + +}; +// Multiply a 3x3 matrix by a scalar +// +inline const Matrix3 operator *( float scalar, const Matrix3 & mat ); + +// Multiply a 3x3 matrix by a scalar (scalar data contained in vector data type) +// +inline const Matrix3 operator *( floatInVec scalar, const Matrix3 & mat ); + +// Append (post-multiply) a scale transformation to a 3x3 matrix +// NOTE: +// Faster than creating and multiplying a scale transformation matrix. +// +inline const Matrix3 appendScale( const Matrix3 & mat, Vector3 scaleVec ); + +// Prepend (pre-multiply) a scale transformation to a 3x3 matrix +// NOTE: +// Faster than creating and multiplying a scale transformation matrix. +// +inline const Matrix3 prependScale( Vector3 scaleVec, const Matrix3 & mat ); + +// Multiply two 3x3 matrices per element +// +inline const Matrix3 mulPerElem( const Matrix3 & mat0, const Matrix3 & mat1 ); + +// Compute the absolute value of a 3x3 matrix per element +// +inline const Matrix3 absPerElem( const Matrix3 & mat ); + +// Transpose of a 3x3 matrix +// +inline const Matrix3 transpose( const Matrix3 & mat ); + +// Compute the inverse of a 3x3 matrix +// NOTE: +// Result is unpredictable when the determinant of mat is equal to or near 0. +// +inline const Matrix3 inverse( const Matrix3 & mat ); + +// Determinant of a 3x3 matrix +// +inline const floatInVec determinant( const Matrix3 & mat ); + +// Conditionally select between two 3x3 matrices +// NOTE: +// This function uses a conditional select instruction to avoid a branch. +// However, the transfer of select1 to a VMX register may use more processing time than a branch. +// Use the boolInVec version for better performance. +// +inline const Matrix3 select( const Matrix3 & mat0, const Matrix3 & mat1, bool select1 ); + +// Conditionally select between two 3x3 matrices (scalar data contained in vector data type) +// NOTE: +// This function uses a conditional select instruction to avoid a branch. +// +inline const Matrix3 select( const Matrix3 & mat0, const Matrix3 & mat1, boolInVec select1 ); + +#ifdef _VECTORMATH_DEBUG + +// Print a 3x3 matrix +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Matrix3 & mat ); + +// Print a 3x3 matrix and an associated string identifier +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Matrix3 & mat, const char * name ); + +#endif + +// A 4x4 matrix in array-of-structures format +// +class Matrix4 +{ + Vector4 mCol0; + Vector4 mCol1; + Vector4 mCol2; + Vector4 mCol3; + +public: + // Default constructor; does no initialization + // + inline Matrix4( ) { }; + + // Copy a 4x4 matrix + // + inline Matrix4( const Matrix4 & mat ); + + // Construct a 4x4 matrix containing the specified columns + // + inline Matrix4( Vector4 col0, Vector4 col1, Vector4 col2, Vector4 col3 ); + + // Construct a 4x4 matrix from a 3x4 transformation matrix + // + explicit inline Matrix4( const Transform3 & mat ); + + // Construct a 4x4 matrix from a 3x3 matrix and a 3-D vector + // + inline Matrix4( const Matrix3 & mat, Vector3 translateVec ); + + // Construct a 4x4 matrix from a unit-length quaternion and a 3-D vector + // + inline Matrix4( Quat unitQuat, Vector3 translateVec ); + + // Set all elements of a 4x4 matrix to the same scalar value + // + explicit inline Matrix4( float scalar ); + + // Set all elements of a 4x4 matrix to the same scalar value (scalar data contained in vector data type) + // + explicit inline Matrix4( floatInVec scalar ); + + // Assign one 4x4 matrix to another + // + inline Matrix4 & operator =( const Matrix4 & mat ); + + // Set the upper-left 3x3 submatrix + // NOTE: + // This function does not change the bottom row elements. + // + inline Matrix4 & setUpper3x3( const Matrix3 & mat3 ); + + // Get the upper-left 3x3 submatrix of a 4x4 matrix + // + inline const Matrix3 getUpper3x3( ) const; + + // Set translation component + // NOTE: + // This function does not change the bottom row elements. + // + inline Matrix4 & setTranslation( Vector3 translateVec ); + + // Get the translation component of a 4x4 matrix + // + inline const Vector3 getTranslation( ) const; + + // Set column 0 of a 4x4 matrix + // + inline Matrix4 & setCol0( Vector4 col0 ); + + // Set column 1 of a 4x4 matrix + // + inline Matrix4 & setCol1( Vector4 col1 ); + + // Set column 2 of a 4x4 matrix + // + inline Matrix4 & setCol2( Vector4 col2 ); + + // Set column 3 of a 4x4 matrix + // + inline Matrix4 & setCol3( Vector4 col3 ); + + // Get column 0 of a 4x4 matrix + // + inline const Vector4 getCol0( ) const; + + // Get column 1 of a 4x4 matrix + // + inline const Vector4 getCol1( ) const; + + // Get column 2 of a 4x4 matrix + // + inline const Vector4 getCol2( ) const; + + // Get column 3 of a 4x4 matrix + // + inline const Vector4 getCol3( ) const; + + // Set the column of a 4x4 matrix referred to by the specified index + // + inline Matrix4 & setCol( int col, Vector4 vec ); + + // Set the row of a 4x4 matrix referred to by the specified index + // + inline Matrix4 & setRow( int row, Vector4 vec ); + + // Get the column of a 4x4 matrix referred to by the specified index + // + inline const Vector4 getCol( int col ) const; + + // Get the row of a 4x4 matrix referred to by the specified index + // + inline const Vector4 getRow( int row ) const; + + // Subscripting operator to set or get a column + // + inline Vector4 & operator []( int col ); + + // Subscripting operator to get a column + // + inline const Vector4 operator []( int col ) const; + + // Set the element of a 4x4 matrix referred to by column and row indices + // + inline Matrix4 & setElem( int col, int row, float val ); + + // Set the element of a 4x4 matrix referred to by column and row indices (scalar data contained in vector data type) + // + inline Matrix4 & setElem( int col, int row, floatInVec val ); + + // Get the element of a 4x4 matrix referred to by column and row indices + // + inline const floatInVec getElem( int col, int row ) const; + + // Add two 4x4 matrices + // + inline const Matrix4 operator +( const Matrix4 & mat ) const; + + // Subtract a 4x4 matrix from another 4x4 matrix + // + inline const Matrix4 operator -( const Matrix4 & mat ) const; + + // Negate all elements of a 4x4 matrix + // + inline const Matrix4 operator -( ) const; + + // Multiply a 4x4 matrix by a scalar + // + inline const Matrix4 operator *( float scalar ) const; + + // Multiply a 4x4 matrix by a scalar (scalar data contained in vector data type) + // + inline const Matrix4 operator *( floatInVec scalar ) const; + + // Multiply a 4x4 matrix by a 4-D vector + // + inline const Vector4 operator *( Vector4 vec ) const; + + // Multiply a 4x4 matrix by a 3-D vector + // + inline const Vector4 operator *( Vector3 vec ) const; + + // Multiply a 4x4 matrix by a 3-D point + // + inline const Vector4 operator *( Point3 pnt ) const; + + // Multiply two 4x4 matrices + // + inline const Matrix4 operator *( const Matrix4 & mat ) const; + + // Multiply a 4x4 matrix by a 3x4 transformation matrix + // + inline const Matrix4 operator *( const Transform3 & tfrm ) const; + + // Perform compound assignment and addition with a 4x4 matrix + // + inline Matrix4 & operator +=( const Matrix4 & mat ); + + // Perform compound assignment and subtraction by a 4x4 matrix + // + inline Matrix4 & operator -=( const Matrix4 & mat ); + + // Perform compound assignment and multiplication by a scalar + // + inline Matrix4 & operator *=( float scalar ); + + // Perform compound assignment and multiplication by a scalar (scalar data contained in vector data type) + // + inline Matrix4 & operator *=( floatInVec scalar ); + + // Perform compound assignment and multiplication by a 4x4 matrix + // + inline Matrix4 & operator *=( const Matrix4 & mat ); + + // Perform compound assignment and multiplication by a 3x4 transformation matrix + // + inline Matrix4 & operator *=( const Transform3 & tfrm ); + + // Construct an identity 4x4 matrix + // + static inline const Matrix4 identity( ); + + // Construct a 4x4 matrix to rotate around the x axis + // + static inline const Matrix4 rotationX( float radians ); + + // Construct a 4x4 matrix to rotate around the y axis + // + static inline const Matrix4 rotationY( float radians ); + + // Construct a 4x4 matrix to rotate around the z axis + // + static inline const Matrix4 rotationZ( float radians ); + + // Construct a 4x4 matrix to rotate around the x axis (scalar data contained in vector data type) + // + static inline const Matrix4 rotationX( floatInVec radians ); + + // Construct a 4x4 matrix to rotate around the y axis (scalar data contained in vector data type) + // + static inline const Matrix4 rotationY( floatInVec radians ); + + // Construct a 4x4 matrix to rotate around the z axis (scalar data contained in vector data type) + // + static inline const Matrix4 rotationZ( floatInVec radians ); + + // Construct a 4x4 matrix to rotate around the x, y, and z axes + // + static inline const Matrix4 rotationZYX( Vector3 radiansXYZ ); + + // Construct a 4x4 matrix to rotate around a unit-length 3-D vector + // + static inline const Matrix4 rotation( float radians, Vector3 unitVec ); + + // Construct a 4x4 matrix to rotate around a unit-length 3-D vector (scalar data contained in vector data type) + // + static inline const Matrix4 rotation( floatInVec radians, Vector3 unitVec ); + + // Construct a rotation matrix from a unit-length quaternion + // + static inline const Matrix4 rotation( Quat unitQuat ); + + // Construct a 4x4 matrix to perform scaling + // + static inline const Matrix4 scale( Vector3 scaleVec ); + + // Construct a 4x4 matrix to perform translation + // + static inline const Matrix4 translation( Vector3 translateVec ); + + // Construct viewing matrix based on eye position, position looked at, and up direction + // + static inline const Matrix4 lookAt( Point3 eyePos, Point3 lookAtPos, Vector3 upVec ); + + // Construct a perspective projection matrix + // + static inline const Matrix4 perspective( float fovyRadians, float aspect, float zNear, float zFar ); + + // Construct a perspective projection matrix based on frustum + // + static inline const Matrix4 frustum( float left, float right, float bottom, float top, float zNear, float zFar ); + + // Construct an orthographic projection matrix + // + static inline const Matrix4 orthographic( float left, float right, float bottom, float top, float zNear, float zFar ); + +}; +// Multiply a 4x4 matrix by a scalar +// +inline const Matrix4 operator *( float scalar, const Matrix4 & mat ); + +// Multiply a 4x4 matrix by a scalar (scalar data contained in vector data type) +// +inline const Matrix4 operator *( floatInVec scalar, const Matrix4 & mat ); + +// Append (post-multiply) a scale transformation to a 4x4 matrix +// NOTE: +// Faster than creating and multiplying a scale transformation matrix. +// +inline const Matrix4 appendScale( const Matrix4 & mat, Vector3 scaleVec ); + +// Prepend (pre-multiply) a scale transformation to a 4x4 matrix +// NOTE: +// Faster than creating and multiplying a scale transformation matrix. +// +inline const Matrix4 prependScale( Vector3 scaleVec, const Matrix4 & mat ); + +// Multiply two 4x4 matrices per element +// +inline const Matrix4 mulPerElem( const Matrix4 & mat0, const Matrix4 & mat1 ); + +// Compute the absolute value of a 4x4 matrix per element +// +inline const Matrix4 absPerElem( const Matrix4 & mat ); + +// Transpose of a 4x4 matrix +// +inline const Matrix4 transpose( const Matrix4 & mat ); + +// Compute the inverse of a 4x4 matrix +// NOTE: +// Result is unpredictable when the determinant of mat is equal to or near 0. +// +inline const Matrix4 inverse( const Matrix4 & mat ); + +// Compute the inverse of a 4x4 matrix, which is expected to be an affine matrix +// NOTE: +// This can be used to achieve better performance than a general inverse when the specified 4x4 matrix meets the given restrictions. The result is unpredictable when the determinant of mat is equal to or near 0. +// +inline const Matrix4 affineInverse( const Matrix4 & mat ); + +// Compute the inverse of a 4x4 matrix, which is expected to be an affine matrix with an orthogonal upper-left 3x3 submatrix +// NOTE: +// This can be used to achieve better performance than a general inverse when the specified 4x4 matrix meets the given restrictions. +// +inline const Matrix4 orthoInverse( const Matrix4 & mat ); + +// Determinant of a 4x4 matrix +// +inline const floatInVec determinant( const Matrix4 & mat ); + +// Conditionally select between two 4x4 matrices +// NOTE: +// This function uses a conditional select instruction to avoid a branch. +// However, the transfer of select1 to a VMX register may use more processing time than a branch. +// Use the boolInVec version for better performance. +// +inline const Matrix4 select( const Matrix4 & mat0, const Matrix4 & mat1, bool select1 ); + +// Conditionally select between two 4x4 matrices (scalar data contained in vector data type) +// NOTE: +// This function uses a conditional select instruction to avoid a branch. +// +inline const Matrix4 select( const Matrix4 & mat0, const Matrix4 & mat1, boolInVec select1 ); + +#ifdef _VECTORMATH_DEBUG + +// Print a 4x4 matrix +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Matrix4 & mat ); + +// Print a 4x4 matrix and an associated string identifier +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Matrix4 & mat, const char * name ); + +#endif + +// A 3x4 transformation matrix in array-of-structures format +// +class Transform3 +{ + Vector3 mCol0; + Vector3 mCol1; + Vector3 mCol2; + Vector3 mCol3; + +public: + // Default constructor; does no initialization + // + inline Transform3( ) { }; + + // Copy a 3x4 transformation matrix + // + inline Transform3( const Transform3 & tfrm ); + + // Construct a 3x4 transformation matrix containing the specified columns + // + inline Transform3( Vector3 col0, Vector3 col1, Vector3 col2, Vector3 col3 ); + + // Construct a 3x4 transformation matrix from a 3x3 matrix and a 3-D vector + // + inline Transform3( const Matrix3 & tfrm, Vector3 translateVec ); + + // Construct a 3x4 transformation matrix from a unit-length quaternion and a 3-D vector + // + inline Transform3( Quat unitQuat, Vector3 translateVec ); + + // Set all elements of a 3x4 transformation matrix to the same scalar value + // + explicit inline Transform3( float scalar ); + + // Set all elements of a 3x4 transformation matrix to the same scalar value (scalar data contained in vector data type) + // + explicit inline Transform3( floatInVec scalar ); + + // Assign one 3x4 transformation matrix to another + // + inline Transform3 & operator =( const Transform3 & tfrm ); + + // Set the upper-left 3x3 submatrix + // + inline Transform3 & setUpper3x3( const Matrix3 & mat3 ); + + // Get the upper-left 3x3 submatrix of a 3x4 transformation matrix + // + inline const Matrix3 getUpper3x3( ) const; + + // Set translation component + // + inline Transform3 & setTranslation( Vector3 translateVec ); + + // Get the translation component of a 3x4 transformation matrix + // + inline const Vector3 getTranslation( ) const; + + // Set column 0 of a 3x4 transformation matrix + // + inline Transform3 & setCol0( Vector3 col0 ); + + // Set column 1 of a 3x4 transformation matrix + // + inline Transform3 & setCol1( Vector3 col1 ); + + // Set column 2 of a 3x4 transformation matrix + // + inline Transform3 & setCol2( Vector3 col2 ); + + // Set column 3 of a 3x4 transformation matrix + // + inline Transform3 & setCol3( Vector3 col3 ); + + // Get column 0 of a 3x4 transformation matrix + // + inline const Vector3 getCol0( ) const; + + // Get column 1 of a 3x4 transformation matrix + // + inline const Vector3 getCol1( ) const; + + // Get column 2 of a 3x4 transformation matrix + // + inline const Vector3 getCol2( ) const; + + // Get column 3 of a 3x4 transformation matrix + // + inline const Vector3 getCol3( ) const; + + // Set the column of a 3x4 transformation matrix referred to by the specified index + // + inline Transform3 & setCol( int col, Vector3 vec ); + + // Set the row of a 3x4 transformation matrix referred to by the specified index + // + inline Transform3 & setRow( int row, Vector4 vec ); + + // Get the column of a 3x4 transformation matrix referred to by the specified index + // + inline const Vector3 getCol( int col ) const; + + // Get the row of a 3x4 transformation matrix referred to by the specified index + // + inline const Vector4 getRow( int row ) const; + + // Subscripting operator to set or get a column + // + inline Vector3 & operator []( int col ); + + // Subscripting operator to get a column + // + inline const Vector3 operator []( int col ) const; + + // Set the element of a 3x4 transformation matrix referred to by column and row indices + // + inline Transform3 & setElem( int col, int row, float val ); + + // Set the element of a 3x4 transformation matrix referred to by column and row indices (scalar data contained in vector data type) + // + inline Transform3 & setElem( int col, int row, floatInVec val ); + + // Get the element of a 3x4 transformation matrix referred to by column and row indices + // + inline const floatInVec getElem( int col, int row ) const; + + // Multiply a 3x4 transformation matrix by a 3-D vector + // + inline const Vector3 operator *( Vector3 vec ) const; + + // Multiply a 3x4 transformation matrix by a 3-D point + // + inline const Point3 operator *( Point3 pnt ) const; + + // Multiply two 3x4 transformation matrices + // + inline const Transform3 operator *( const Transform3 & tfrm ) const; + + // Perform compound assignment and multiplication by a 3x4 transformation matrix + // + inline Transform3 & operator *=( const Transform3 & tfrm ); + + // Construct an identity 3x4 transformation matrix + // + static inline const Transform3 identity( ); + + // Construct a 3x4 transformation matrix to rotate around the x axis + // + static inline const Transform3 rotationX( float radians ); + + // Construct a 3x4 transformation matrix to rotate around the y axis + // + static inline const Transform3 rotationY( float radians ); + + // Construct a 3x4 transformation matrix to rotate around the z axis + // + static inline const Transform3 rotationZ( float radians ); + + // Construct a 3x4 transformation matrix to rotate around the x axis (scalar data contained in vector data type) + // + static inline const Transform3 rotationX( floatInVec radians ); + + // Construct a 3x4 transformation matrix to rotate around the y axis (scalar data contained in vector data type) + // + static inline const Transform3 rotationY( floatInVec radians ); + + // Construct a 3x4 transformation matrix to rotate around the z axis (scalar data contained in vector data type) + // + static inline const Transform3 rotationZ( floatInVec radians ); + + // Construct a 3x4 transformation matrix to rotate around the x, y, and z axes + // + static inline const Transform3 rotationZYX( Vector3 radiansXYZ ); + + // Construct a 3x4 transformation matrix to rotate around a unit-length 3-D vector + // + static inline const Transform3 rotation( float radians, Vector3 unitVec ); + + // Construct a 3x4 transformation matrix to rotate around a unit-length 3-D vector (scalar data contained in vector data type) + // + static inline const Transform3 rotation( floatInVec radians, Vector3 unitVec ); + + // Construct a rotation matrix from a unit-length quaternion + // + static inline const Transform3 rotation( Quat unitQuat ); + + // Construct a 3x4 transformation matrix to perform scaling + // + static inline const Transform3 scale( Vector3 scaleVec ); + + // Construct a 3x4 transformation matrix to perform translation + // + static inline const Transform3 translation( Vector3 translateVec ); + +}; +// Append (post-multiply) a scale transformation to a 3x4 transformation matrix +// NOTE: +// Faster than creating and multiplying a scale transformation matrix. +// +inline const Transform3 appendScale( const Transform3 & tfrm, Vector3 scaleVec ); + +// Prepend (pre-multiply) a scale transformation to a 3x4 transformation matrix +// NOTE: +// Faster than creating and multiplying a scale transformation matrix. +// +inline const Transform3 prependScale( Vector3 scaleVec, const Transform3 & tfrm ); + +// Multiply two 3x4 transformation matrices per element +// +inline const Transform3 mulPerElem( const Transform3 & tfrm0, const Transform3 & tfrm1 ); + +// Compute the absolute value of a 3x4 transformation matrix per element +// +inline const Transform3 absPerElem( const Transform3 & tfrm ); + +// Inverse of a 3x4 transformation matrix +// NOTE: +// Result is unpredictable when the determinant of the left 3x3 submatrix is equal to or near 0. +// +inline const Transform3 inverse( const Transform3 & tfrm ); + +// Compute the inverse of a 3x4 transformation matrix, expected to have an orthogonal upper-left 3x3 submatrix +// NOTE: +// This can be used to achieve better performance than a general inverse when the specified 3x4 transformation matrix meets the given restrictions. +// +inline const Transform3 orthoInverse( const Transform3 & tfrm ); + +// Conditionally select between two 3x4 transformation matrices +// NOTE: +// This function uses a conditional select instruction to avoid a branch. +// However, the transfer of select1 to a VMX register may use more processing time than a branch. +// Use the boolInVec version for better performance. +// +inline const Transform3 select( const Transform3 & tfrm0, const Transform3 & tfrm1, bool select1 ); + +// Conditionally select between two 3x4 transformation matrices (scalar data contained in vector data type) +// NOTE: +// This function uses a conditional select instruction to avoid a branch. +// +inline const Transform3 select( const Transform3 & tfrm0, const Transform3 & tfrm1, boolInVec select1 ); + +#ifdef _VECTORMATH_DEBUG + +// Print a 3x4 transformation matrix +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Transform3 & tfrm ); + +// Print a 3x4 transformation matrix and an associated string identifier +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Transform3 & tfrm, const char * name ); + +#endif + +} // namespace Aos +} // namespace Vectormath + +#include "vec_aos.h" +#include "quat_aos.h" +#include "mat_aos.h" + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/ppu/cpp/vectormath_soa.h b/Extras/vectormathlibrary/include/vectormath/ppu/cpp/vectormath_soa.h new file mode 100644 index 000000000..f580153f0 --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/ppu/cpp/vectormath_soa.h @@ -0,0 +1,1919 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_SOA_CPP_H +#define _VECTORMATH_SOA_CPP_H + +#include +#include +#include "vectormath_aos.h" + +#ifdef _VECTORMATH_DEBUG +#include +#endif + +namespace Vectormath { + +namespace Soa { + +//----------------------------------------------------------------------------- +// Forward Declarations +// + +class Vector3; +class Vector4; +class Point3; +class Quat; +class Matrix3; +class Matrix4; +class Transform3; + +// A set of four 3-D vectors in structure-of-arrays format +// +class Vector3 +{ + typedef vec_float4 vec_float4_t; + vec_float4 mX; + vec_float4 mY; + vec_float4 mZ; + +public: + // Default constructor; does no initialization + // + inline Vector3( ) { }; + + // Copy a 3-D vector + // + inline Vector3( const Vector3 & vec ); + + // Construct a 3-D vector from x, y, and z elements + // + inline Vector3( vec_float4 x, vec_float4 y, vec_float4 z ); + + // Copy elements from a 3-D point into a 3-D vector + // + explicit inline Vector3( const Point3 & pnt ); + + // Set all elements of a 3-D vector to the same scalar value + // + explicit inline Vector3( vec_float4 scalar ); + + // Replicate an AoS 3-D vector + // + inline Vector3( Aos::Vector3 vec ); + + // Insert four AoS 3-D vectors + // + inline Vector3( Aos::Vector3 vec0, Aos::Vector3 vec1, Aos::Vector3 vec2, Aos::Vector3 vec3 ); + + // Extract four AoS 3-D vectors + // + inline void get4Aos( Aos::Vector3 & result0, Aos::Vector3 & result1, Aos::Vector3 & result2, Aos::Vector3 & result3 ) const; + + // Assign one 3-D vector to another + // + inline Vector3 & operator =( const Vector3 & vec ); + + // Set the x element of a 3-D vector + // + inline Vector3 & setX( vec_float4 x ); + + // Set the y element of a 3-D vector + // + inline Vector3 & setY( vec_float4 y ); + + // Set the z element of a 3-D vector + // + inline Vector3 & setZ( vec_float4 z ); + + // Get the x element of a 3-D vector + // + inline vec_float4 getX( ) const; + + // Get the y element of a 3-D vector + // + inline vec_float4 getY( ) const; + + // Get the z element of a 3-D vector + // + inline vec_float4 getZ( ) const; + + // Set an x, y, or z element of a 3-D vector by index + // + inline Vector3 & setElem( int idx, vec_float4 value ); + + // Get an x, y, or z element of a 3-D vector by index + // + inline vec_float4 getElem( int idx ) const; + + // Subscripting operator to set or get an element + // + inline vec_float4_t & operator []( int idx ); + + // Subscripting operator to get an element + // + inline vec_float4 operator []( int idx ) const; + + // Add two 3-D vectors + // + inline const Vector3 operator +( const Vector3 & vec ) const; + + // Subtract a 3-D vector from another 3-D vector + // + inline const Vector3 operator -( const Vector3 & vec ) const; + + // Add a 3-D vector to a 3-D point + // + inline const Point3 operator +( const Point3 & pnt ) const; + + // Multiply a 3-D vector by a scalar + // + inline const Vector3 operator *( vec_float4 scalar ) const; + + // Divide a 3-D vector by a scalar + // + inline const Vector3 operator /( vec_float4 scalar ) const; + + // Perform compound assignment and addition with a 3-D vector + // + inline Vector3 & operator +=( const Vector3 & vec ); + + // Perform compound assignment and subtraction by a 3-D vector + // + inline Vector3 & operator -=( const Vector3 & vec ); + + // Perform compound assignment and multiplication by a scalar + // + inline Vector3 & operator *=( vec_float4 scalar ); + + // Perform compound assignment and division by a scalar + // + inline Vector3 & operator /=( vec_float4 scalar ); + + // Negate all elements of a 3-D vector + // + inline const Vector3 operator -( ) const; + + // Construct x axis + // + static inline const Vector3 xAxis( ); + + // Construct y axis + // + static inline const Vector3 yAxis( ); + + // Construct z axis + // + static inline const Vector3 zAxis( ); + +}; + +// Multiply a 3-D vector by a scalar +// +inline const Vector3 operator *( vec_float4 scalar, const Vector3 & vec ); + +// Multiply two 3-D vectors per element +// +inline const Vector3 mulPerElem( const Vector3 & vec0, const Vector3 & vec1 ); + +// Divide two 3-D vectors per element +// NOTE: +// Floating-point behavior matches standard library function divf4. +// +inline const Vector3 divPerElem( const Vector3 & vec0, const Vector3 & vec1 ); + +// Compute the reciprocal of a 3-D vector per element +// NOTE: +// Floating-point behavior matches standard library function recipf4. +// +inline const Vector3 recipPerElem( const Vector3 & vec ); + +// Compute the square root of a 3-D vector per element +// NOTE: +// Floating-point behavior matches standard library function sqrtf4. +// +inline const Vector3 sqrtPerElem( const Vector3 & vec ); + +// Compute the reciprocal square root of a 3-D vector per element +// NOTE: +// Floating-point behavior matches standard library function rsqrtf4. +// +inline const Vector3 rsqrtPerElem( const Vector3 & vec ); + +// Compute the absolute value of a 3-D vector per element +// +inline const Vector3 absPerElem( const Vector3 & vec ); + +// Copy sign from one 3-D vector to another, per element +// +inline const Vector3 copySignPerElem( const Vector3 & vec0, const Vector3 & vec1 ); + +// Maximum of two 3-D vectors per element +// +inline const Vector3 maxPerElem( const Vector3 & vec0, const Vector3 & vec1 ); + +// Minimum of two 3-D vectors per element +// +inline const Vector3 minPerElem( const Vector3 & vec0, const Vector3 & vec1 ); + +// Maximum element of a 3-D vector +// +inline vec_float4 maxElem( const Vector3 & vec ); + +// Minimum element of a 3-D vector +// +inline vec_float4 minElem( const Vector3 & vec ); + +// Compute the sum of all elements of a 3-D vector +// +inline vec_float4 sum( const Vector3 & vec ); + +// Compute the dot product of two 3-D vectors +// +inline vec_float4 dot( const Vector3 & vec0, const Vector3 & vec1 ); + +// Compute the square of the length of a 3-D vector +// +inline vec_float4 lengthSqr( const Vector3 & vec ); + +// Compute the length of a 3-D vector +// +inline vec_float4 length( const Vector3 & vec ); + +// Normalize a 3-D vector +// NOTE: +// The result is unpredictable when all elements of vec are at or near zero. +// +inline const Vector3 normalize( const Vector3 & vec ); + +// Compute cross product of two 3-D vectors +// +inline const Vector3 cross( const Vector3 & vec0, const Vector3 & vec1 ); + +// Outer product of two 3-D vectors +// +inline const Matrix3 outer( const Vector3 & vec0, const Vector3 & vec1 ); + +// Pre-multiply a row vector by a 3x3 matrix +// +inline const Vector3 rowMul( const Vector3 & vec, const Matrix3 & mat ); + +// Cross-product matrix of a 3-D vector +// +inline const Matrix3 crossMatrix( const Vector3 & vec ); + +// Create cross-product matrix and multiply +// NOTE: +// Faster than separately creating a cross-product matrix and multiplying. +// +inline const Matrix3 crossMatrixMul( const Vector3 & vec, const Matrix3 & mat ); + +// Linear interpolation between two 3-D vectors +// NOTE: +// Does not clamp t between 0 and 1. +// +inline const Vector3 lerp( vec_float4 t, const Vector3 & vec0, const Vector3 & vec1 ); + +// Spherical linear interpolation between two 3-D vectors +// NOTE: +// The result is unpredictable if the vectors point in opposite directions. +// Does not clamp t between 0 and 1. +// +inline const Vector3 slerp( vec_float4 t, const Vector3 & unitVec0, const Vector3 & unitVec1 ); + +// Conditionally select between two 3-D vectors +// NOTE: +// This function uses a conditional select instruction to avoid a branch. +// +inline const Vector3 select( const Vector3 & vec0, const Vector3 & vec1, vec_uint4 select1 ); + +// Load four three-float 3-D vectors, stored in three quadwords +// +inline void loadXYZArray( Vector3 & vec, const vec_float4 * threeQuads ); + +// Store four slots of an SoA 3-D vector in three quadwords +// +inline void storeXYZArray( const Vector3 & vec, vec_float4 * threeQuads ); + +// Store eight slots of two SoA 3-D vectors as half-floats +// +inline void storeHalfFloats( const Vector3 & vec0, const Vector3 & vec1, vec_ushort8 * threeQuads ); + +#ifdef _VECTORMATH_DEBUG + +// Print a 3-D vector +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Vector3 & vec ); + +// Print a 3-D vector and an associated string identifier +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Vector3 & vec, const char * name ); + +#endif + +// A set of four 4-D vectors in structure-of-arrays format +// +class Vector4 +{ + typedef vec_float4 vec_float4_t; + vec_float4 mX; + vec_float4 mY; + vec_float4 mZ; + vec_float4 mW; + +public: + // Default constructor; does no initialization + // + inline Vector4( ) { }; + + // Copy a 4-D vector + // + inline Vector4( const Vector4 & vec ); + + // Construct a 4-D vector from x, y, z, and w elements + // + inline Vector4( vec_float4 x, vec_float4 y, vec_float4 z, vec_float4 w ); + + // Construct a 4-D vector from a 3-D vector and a scalar + // + inline Vector4( const Vector3 & xyz, vec_float4 w ); + + // Copy x, y, and z from a 3-D vector into a 4-D vector, and set w to 0 + // + explicit inline Vector4( const Vector3 & vec ); + + // Copy x, y, and z from a 3-D point into a 4-D vector, and set w to 1 + // + explicit inline Vector4( const Point3 & pnt ); + + // Copy elements from a quaternion into a 4-D vector + // + explicit inline Vector4( const Quat & quat ); + + // Set all elements of a 4-D vector to the same scalar value + // + explicit inline Vector4( vec_float4 scalar ); + + // Replicate an AoS 4-D vector + // + inline Vector4( Aos::Vector4 vec ); + + // Insert four AoS 4-D vectors + // + inline Vector4( Aos::Vector4 vec0, Aos::Vector4 vec1, Aos::Vector4 vec2, Aos::Vector4 vec3 ); + + // Extract four AoS 4-D vectors + // + inline void get4Aos( Aos::Vector4 & result0, Aos::Vector4 & result1, Aos::Vector4 & result2, Aos::Vector4 & result3 ) const; + + // Assign one 4-D vector to another + // + inline Vector4 & operator =( const Vector4 & vec ); + + // Set the x, y, and z elements of a 4-D vector + // NOTE: + // This function does not change the w element. + // + inline Vector4 & setXYZ( const Vector3 & vec ); + + // Get the x, y, and z elements of a 4-D vector + // + inline const Vector3 getXYZ( ) const; + + // Set the x element of a 4-D vector + // + inline Vector4 & setX( vec_float4 x ); + + // Set the y element of a 4-D vector + // + inline Vector4 & setY( vec_float4 y ); + + // Set the z element of a 4-D vector + // + inline Vector4 & setZ( vec_float4 z ); + + // Set the w element of a 4-D vector + // + inline Vector4 & setW( vec_float4 w ); + + // Get the x element of a 4-D vector + // + inline vec_float4 getX( ) const; + + // Get the y element of a 4-D vector + // + inline vec_float4 getY( ) const; + + // Get the z element of a 4-D vector + // + inline vec_float4 getZ( ) const; + + // Get the w element of a 4-D vector + // + inline vec_float4 getW( ) const; + + // Set an x, y, z, or w element of a 4-D vector by index + // + inline Vector4 & setElem( int idx, vec_float4 value ); + + // Get an x, y, z, or w element of a 4-D vector by index + // + inline vec_float4 getElem( int idx ) const; + + // Subscripting operator to set or get an element + // + inline vec_float4_t & operator []( int idx ); + + // Subscripting operator to get an element + // + inline vec_float4 operator []( int idx ) const; + + // Add two 4-D vectors + // + inline const Vector4 operator +( const Vector4 & vec ) const; + + // Subtract a 4-D vector from another 4-D vector + // + inline const Vector4 operator -( const Vector4 & vec ) const; + + // Multiply a 4-D vector by a scalar + // + inline const Vector4 operator *( vec_float4 scalar ) const; + + // Divide a 4-D vector by a scalar + // + inline const Vector4 operator /( vec_float4 scalar ) const; + + // Perform compound assignment and addition with a 4-D vector + // + inline Vector4 & operator +=( const Vector4 & vec ); + + // Perform compound assignment and subtraction by a 4-D vector + // + inline Vector4 & operator -=( const Vector4 & vec ); + + // Perform compound assignment and multiplication by a scalar + // + inline Vector4 & operator *=( vec_float4 scalar ); + + // Perform compound assignment and division by a scalar + // + inline Vector4 & operator /=( vec_float4 scalar ); + + // Negate all elements of a 4-D vector + // + inline const Vector4 operator -( ) const; + + // Construct x axis + // + static inline const Vector4 xAxis( ); + + // Construct y axis + // + static inline const Vector4 yAxis( ); + + // Construct z axis + // + static inline const Vector4 zAxis( ); + + // Construct w axis + // + static inline const Vector4 wAxis( ); + +}; + +// Multiply a 4-D vector by a scalar +// +inline const Vector4 operator *( vec_float4 scalar, const Vector4 & vec ); + +// Multiply two 4-D vectors per element +// +inline const Vector4 mulPerElem( const Vector4 & vec0, const Vector4 & vec1 ); + +// Divide two 4-D vectors per element +// NOTE: +// Floating-point behavior matches standard library function divf4. +// +inline const Vector4 divPerElem( const Vector4 & vec0, const Vector4 & vec1 ); + +// Compute the reciprocal of a 4-D vector per element +// NOTE: +// Floating-point behavior matches standard library function recipf4. +// +inline const Vector4 recipPerElem( const Vector4 & vec ); + +// Compute the square root of a 4-D vector per element +// NOTE: +// Floating-point behavior matches standard library function sqrtf4. +// +inline const Vector4 sqrtPerElem( const Vector4 & vec ); + +// Compute the reciprocal square root of a 4-D vector per element +// NOTE: +// Floating-point behavior matches standard library function rsqrtf4. +// +inline const Vector4 rsqrtPerElem( const Vector4 & vec ); + +// Compute the absolute value of a 4-D vector per element +// +inline const Vector4 absPerElem( const Vector4 & vec ); + +// Copy sign from one 4-D vector to another, per element +// +inline const Vector4 copySignPerElem( const Vector4 & vec0, const Vector4 & vec1 ); + +// Maximum of two 4-D vectors per element +// +inline const Vector4 maxPerElem( const Vector4 & vec0, const Vector4 & vec1 ); + +// Minimum of two 4-D vectors per element +// +inline const Vector4 minPerElem( const Vector4 & vec0, const Vector4 & vec1 ); + +// Maximum element of a 4-D vector +// +inline vec_float4 maxElem( const Vector4 & vec ); + +// Minimum element of a 4-D vector +// +inline vec_float4 minElem( const Vector4 & vec ); + +// Compute the sum of all elements of a 4-D vector +// +inline vec_float4 sum( const Vector4 & vec ); + +// Compute the dot product of two 4-D vectors +// +inline vec_float4 dot( const Vector4 & vec0, const Vector4 & vec1 ); + +// Compute the square of the length of a 4-D vector +// +inline vec_float4 lengthSqr( const Vector4 & vec ); + +// Compute the length of a 4-D vector +// +inline vec_float4 length( const Vector4 & vec ); + +// Normalize a 4-D vector +// NOTE: +// The result is unpredictable when all elements of vec are at or near zero. +// +inline const Vector4 normalize( const Vector4 & vec ); + +// Outer product of two 4-D vectors +// +inline const Matrix4 outer( const Vector4 & vec0, const Vector4 & vec1 ); + +// Linear interpolation between two 4-D vectors +// NOTE: +// Does not clamp t between 0 and 1. +// +inline const Vector4 lerp( vec_float4 t, const Vector4 & vec0, const Vector4 & vec1 ); + +// Spherical linear interpolation between two 4-D vectors +// NOTE: +// The result is unpredictable if the vectors point in opposite directions. +// Does not clamp t between 0 and 1. +// +inline const Vector4 slerp( vec_float4 t, const Vector4 & unitVec0, const Vector4 & unitVec1 ); + +// Conditionally select between two 4-D vectors +// NOTE: +// This function uses a conditional select instruction to avoid a branch. +// +inline const Vector4 select( const Vector4 & vec0, const Vector4 & vec1, vec_uint4 select1 ); + +// Store four slots of an SoA 4-D vector as half-floats +// +inline void storeHalfFloats( const Vector4 & vec, vec_ushort8 * twoQuads ); + +#ifdef _VECTORMATH_DEBUG + +// Print a 4-D vector +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Vector4 & vec ); + +// Print a 4-D vector and an associated string identifier +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Vector4 & vec, const char * name ); + +#endif + +// A set of four 3-D points in structure-of-arrays format +// +class Point3 +{ + typedef vec_float4 vec_float4_t; + vec_float4 mX; + vec_float4 mY; + vec_float4 mZ; + +public: + // Default constructor; does no initialization + // + inline Point3( ) { }; + + // Copy a 3-D point + // + inline Point3( const Point3 & pnt ); + + // Construct a 3-D point from x, y, and z elements + // + inline Point3( vec_float4 x, vec_float4 y, vec_float4 z ); + + // Copy elements from a 3-D vector into a 3-D point + // + explicit inline Point3( const Vector3 & vec ); + + // Set all elements of a 3-D point to the same scalar value + // + explicit inline Point3( vec_float4 scalar ); + + // Replicate an AoS 3-D point + // + inline Point3( Aos::Point3 pnt ); + + // Insert four AoS 3-D points + // + inline Point3( Aos::Point3 pnt0, Aos::Point3 pnt1, Aos::Point3 pnt2, Aos::Point3 pnt3 ); + + // Extract four AoS 3-D points + // + inline void get4Aos( Aos::Point3 & result0, Aos::Point3 & result1, Aos::Point3 & result2, Aos::Point3 & result3 ) const; + + // Assign one 3-D point to another + // + inline Point3 & operator =( const Point3 & pnt ); + + // Set the x element of a 3-D point + // + inline Point3 & setX( vec_float4 x ); + + // Set the y element of a 3-D point + // + inline Point3 & setY( vec_float4 y ); + + // Set the z element of a 3-D point + // + inline Point3 & setZ( vec_float4 z ); + + // Get the x element of a 3-D point + // + inline vec_float4 getX( ) const; + + // Get the y element of a 3-D point + // + inline vec_float4 getY( ) const; + + // Get the z element of a 3-D point + // + inline vec_float4 getZ( ) const; + + // Set an x, y, or z element of a 3-D point by index + // + inline Point3 & setElem( int idx, vec_float4 value ); + + // Get an x, y, or z element of a 3-D point by index + // + inline vec_float4 getElem( int idx ) const; + + // Subscripting operator to set or get an element + // + inline vec_float4_t & operator []( int idx ); + + // Subscripting operator to get an element + // + inline vec_float4 operator []( int idx ) const; + + // Subtract a 3-D point from another 3-D point + // + inline const Vector3 operator -( const Point3 & pnt ) const; + + // Add a 3-D point to a 3-D vector + // + inline const Point3 operator +( const Vector3 & vec ) const; + + // Subtract a 3-D vector from a 3-D point + // + inline const Point3 operator -( const Vector3 & vec ) const; + + // Perform compound assignment and addition with a 3-D vector + // + inline Point3 & operator +=( const Vector3 & vec ); + + // Perform compound assignment and subtraction by a 3-D vector + // + inline Point3 & operator -=( const Vector3 & vec ); + +}; + +// Multiply two 3-D points per element +// +inline const Point3 mulPerElem( const Point3 & pnt0, const Point3 & pnt1 ); + +// Divide two 3-D points per element +// NOTE: +// Floating-point behavior matches standard library function divf4. +// +inline const Point3 divPerElem( const Point3 & pnt0, const Point3 & pnt1 ); + +// Compute the reciprocal of a 3-D point per element +// NOTE: +// Floating-point behavior matches standard library function recipf4. +// +inline const Point3 recipPerElem( const Point3 & pnt ); + +// Compute the square root of a 3-D point per element +// NOTE: +// Floating-point behavior matches standard library function sqrtf4. +// +inline const Point3 sqrtPerElem( const Point3 & pnt ); + +// Compute the reciprocal square root of a 3-D point per element +// NOTE: +// Floating-point behavior matches standard library function rsqrtf4. +// +inline const Point3 rsqrtPerElem( const Point3 & pnt ); + +// Compute the absolute value of a 3-D point per element +// +inline const Point3 absPerElem( const Point3 & pnt ); + +// Copy sign from one 3-D point to another, per element +// +inline const Point3 copySignPerElem( const Point3 & pnt0, const Point3 & pnt1 ); + +// Maximum of two 3-D points per element +// +inline const Point3 maxPerElem( const Point3 & pnt0, const Point3 & pnt1 ); + +// Minimum of two 3-D points per element +// +inline const Point3 minPerElem( const Point3 & pnt0, const Point3 & pnt1 ); + +// Maximum element of a 3-D point +// +inline vec_float4 maxElem( const Point3 & pnt ); + +// Minimum element of a 3-D point +// +inline vec_float4 minElem( const Point3 & pnt ); + +// Compute the sum of all elements of a 3-D point +// +inline vec_float4 sum( const Point3 & pnt ); + +// Apply uniform scale to a 3-D point +// +inline const Point3 scale( const Point3 & pnt, vec_float4 scaleVal ); + +// Apply non-uniform scale to a 3-D point +// +inline const Point3 scale( const Point3 & pnt, const Vector3 & scaleVec ); + +// Scalar projection of a 3-D point on a unit-length 3-D vector +// +inline vec_float4 projection( const Point3 & pnt, const Vector3 & unitVec ); + +// Compute the square of the distance of a 3-D point from the coordinate-system origin +// +inline vec_float4 distSqrFromOrigin( const Point3 & pnt ); + +// Compute the distance of a 3-D point from the coordinate-system origin +// +inline vec_float4 distFromOrigin( const Point3 & pnt ); + +// Compute the square of the distance between two 3-D points +// +inline vec_float4 distSqr( const Point3 & pnt0, const Point3 & pnt1 ); + +// Compute the distance between two 3-D points +// +inline vec_float4 dist( const Point3 & pnt0, const Point3 & pnt1 ); + +// Linear interpolation between two 3-D points +// NOTE: +// Does not clamp t between 0 and 1. +// +inline const Point3 lerp( vec_float4 t, const Point3 & pnt0, const Point3 & pnt1 ); + +// Conditionally select between two 3-D points +// NOTE: +// This function uses a conditional select instruction to avoid a branch. +// +inline const Point3 select( const Point3 & pnt0, const Point3 & pnt1, vec_uint4 select1 ); + +// Load four three-float 3-D points, stored in three quadwords +// +inline void loadXYZArray( Point3 & pnt, const vec_float4 * threeQuads ); + +// Store four slots of an SoA 3-D point in three quadwords +// +inline void storeXYZArray( const Point3 & pnt, vec_float4 * threeQuads ); + +// Store eight slots of two SoA 3-D points as half-floats +// +inline void storeHalfFloats( const Point3 & pnt0, const Point3 & pnt1, vec_ushort8 * threeQuads ); + +#ifdef _VECTORMATH_DEBUG + +// Print a 3-D point +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Point3 & pnt ); + +// Print a 3-D point and an associated string identifier +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Point3 & pnt, const char * name ); + +#endif + +// A set of four quaternions in structure-of-arrays format +// +class Quat +{ + typedef vec_float4 vec_float4_t; + vec_float4 mX; + vec_float4 mY; + vec_float4 mZ; + vec_float4 mW; + +public: + // Default constructor; does no initialization + // + inline Quat( ) { }; + + // Copy a quaternion + // + inline Quat( const Quat & quat ); + + // Construct a quaternion from x, y, z, and w elements + // + inline Quat( vec_float4 x, vec_float4 y, vec_float4 z, vec_float4 w ); + + // Construct a quaternion from a 3-D vector and a scalar + // + inline Quat( const Vector3 & xyz, vec_float4 w ); + + // Copy elements from a 4-D vector into a quaternion + // + explicit inline Quat( const Vector4 & vec ); + + // Convert a rotation matrix to a unit-length quaternion + // + explicit inline Quat( const Matrix3 & rotMat ); + + // Set all elements of a quaternion to the same scalar value + // + explicit inline Quat( vec_float4 scalar ); + + // Replicate an AoS quaternion + // + inline Quat( Aos::Quat quat ); + + // Insert four AoS quaternions + // + inline Quat( Aos::Quat quat0, Aos::Quat quat1, Aos::Quat quat2, Aos::Quat quat3 ); + + // Extract four AoS quaternions + // + inline void get4Aos( Aos::Quat & result0, Aos::Quat & result1, Aos::Quat & result2, Aos::Quat & result3 ) const; + + // Assign one quaternion to another + // + inline Quat & operator =( const Quat & quat ); + + // Set the x, y, and z elements of a quaternion + // NOTE: + // This function does not change the w element. + // + inline Quat & setXYZ( const Vector3 & vec ); + + // Get the x, y, and z elements of a quaternion + // + inline const Vector3 getXYZ( ) const; + + // Set the x element of a quaternion + // + inline Quat & setX( vec_float4 x ); + + // Set the y element of a quaternion + // + inline Quat & setY( vec_float4 y ); + + // Set the z element of a quaternion + // + inline Quat & setZ( vec_float4 z ); + + // Set the w element of a quaternion + // + inline Quat & setW( vec_float4 w ); + + // Get the x element of a quaternion + // + inline vec_float4 getX( ) const; + + // Get the y element of a quaternion + // + inline vec_float4 getY( ) const; + + // Get the z element of a quaternion + // + inline vec_float4 getZ( ) const; + + // Get the w element of a quaternion + // + inline vec_float4 getW( ) const; + + // Set an x, y, z, or w element of a quaternion by index + // + inline Quat & setElem( int idx, vec_float4 value ); + + // Get an x, y, z, or w element of a quaternion by index + // + inline vec_float4 getElem( int idx ) const; + + // Subscripting operator to set or get an element + // + inline vec_float4_t & operator []( int idx ); + + // Subscripting operator to get an element + // + inline vec_float4 operator []( int idx ) const; + + // Add two quaternions + // + inline const Quat operator +( const Quat & quat ) const; + + // Subtract a quaternion from another quaternion + // + inline const Quat operator -( const Quat & quat ) const; + + // Multiply two quaternions + // + inline const Quat operator *( const Quat & quat ) const; + + // Multiply a quaternion by a scalar + // + inline const Quat operator *( vec_float4 scalar ) const; + + // Divide a quaternion by a scalar + // + inline const Quat operator /( vec_float4 scalar ) const; + + // Perform compound assignment and addition with a quaternion + // + inline Quat & operator +=( const Quat & quat ); + + // Perform compound assignment and subtraction by a quaternion + // + inline Quat & operator -=( const Quat & quat ); + + // Perform compound assignment and multiplication by a quaternion + // + inline Quat & operator *=( const Quat & quat ); + + // Perform compound assignment and multiplication by a scalar + // + inline Quat & operator *=( vec_float4 scalar ); + + // Perform compound assignment and division by a scalar + // + inline Quat & operator /=( vec_float4 scalar ); + + // Negate all elements of a quaternion + // + inline const Quat operator -( ) const; + + // Construct an identity quaternion + // + static inline const Quat identity( ); + + // Construct a quaternion to rotate between two unit-length 3-D vectors + // NOTE: + // The result is unpredictable if unitVec0 and unitVec1 point in opposite directions. + // + static inline const Quat rotation( const Vector3 & unitVec0, const Vector3 & unitVec1 ); + + // Construct a quaternion to rotate around a unit-length 3-D vector + // + static inline const Quat rotation( vec_float4 radians, const Vector3 & unitVec ); + + // Construct a quaternion to rotate around the x axis + // + static inline const Quat rotationX( vec_float4 radians ); + + // Construct a quaternion to rotate around the y axis + // + static inline const Quat rotationY( vec_float4 radians ); + + // Construct a quaternion to rotate around the z axis + // + static inline const Quat rotationZ( vec_float4 radians ); + +}; + +// Multiply a quaternion by a scalar +// +inline const Quat operator *( vec_float4 scalar, const Quat & quat ); + +// Compute the conjugate of a quaternion +// +inline const Quat conj( const Quat & quat ); + +// Use a unit-length quaternion to rotate a 3-D vector +// +inline const Vector3 rotate( const Quat & unitQuat, const Vector3 & vec ); + +// Compute the dot product of two quaternions +// +inline vec_float4 dot( const Quat & quat0, const Quat & quat1 ); + +// Compute the norm of a quaternion +// +inline vec_float4 norm( const Quat & quat ); + +// Compute the length of a quaternion +// +inline vec_float4 length( const Quat & quat ); + +// Normalize a quaternion +// NOTE: +// The result is unpredictable when all elements of quat are at or near zero. +// +inline const Quat normalize( const Quat & quat ); + +// Linear interpolation between two quaternions +// NOTE: +// Does not clamp t between 0 and 1. +// +inline const Quat lerp( vec_float4 t, const Quat & quat0, const Quat & quat1 ); + +// Spherical linear interpolation between two quaternions +// NOTE: +// Interpolates along the shortest path between orientations. +// Does not clamp t between 0 and 1. +// +inline const Quat slerp( vec_float4 t, const Quat & unitQuat0, const Quat & unitQuat1 ); + +// Spherical quadrangle interpolation +// +inline const Quat squad( vec_float4 t, const Quat & unitQuat0, const Quat & unitQuat1, const Quat & unitQuat2, const Quat & unitQuat3 ); + +// Conditionally select between two quaternions +// NOTE: +// This function uses a conditional select instruction to avoid a branch. +// +inline const Quat select( const Quat & quat0, const Quat & quat1, vec_uint4 select1 ); + +#ifdef _VECTORMATH_DEBUG + +// Print a quaternion +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Quat & quat ); + +// Print a quaternion and an associated string identifier +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Quat & quat, const char * name ); + +#endif + +// A set of four 3x3 matrices in structure-of-arrays format +// +class Matrix3 +{ + Vector3 mCol0; + Vector3 mCol1; + Vector3 mCol2; + +public: + // Default constructor; does no initialization + // + inline Matrix3( ) { }; + + // Copy a 3x3 matrix + // + inline Matrix3( const Matrix3 & mat ); + + // Construct a 3x3 matrix containing the specified columns + // + inline Matrix3( const Vector3 & col0, const Vector3 & col1, const Vector3 & col2 ); + + // Construct a 3x3 rotation matrix from a unit-length quaternion + // + explicit inline Matrix3( const Quat & unitQuat ); + + // Set all elements of a 3x3 matrix to the same scalar value + // + explicit inline Matrix3( vec_float4 scalar ); + + // Replicate an AoS 3x3 matrix + // + inline Matrix3( const Aos::Matrix3 & mat ); + + // Insert four AoS 3x3 matrices + // + inline Matrix3( const Aos::Matrix3 & mat0, const Aos::Matrix3 & mat1, const Aos::Matrix3 & mat2, const Aos::Matrix3 & mat3 ); + + // Extract four AoS 3x3 matrices + // + inline void get4Aos( Aos::Matrix3 & result0, Aos::Matrix3 & result1, Aos::Matrix3 & result2, Aos::Matrix3 & result3 ) const; + + // Assign one 3x3 matrix to another + // + inline Matrix3 & operator =( const Matrix3 & mat ); + + // Set column 0 of a 3x3 matrix + // + inline Matrix3 & setCol0( const Vector3 & col0 ); + + // Set column 1 of a 3x3 matrix + // + inline Matrix3 & setCol1( const Vector3 & col1 ); + + // Set column 2 of a 3x3 matrix + // + inline Matrix3 & setCol2( const Vector3 & col2 ); + + // Get column 0 of a 3x3 matrix + // + inline const Vector3 getCol0( ) const; + + // Get column 1 of a 3x3 matrix + // + inline const Vector3 getCol1( ) const; + + // Get column 2 of a 3x3 matrix + // + inline const Vector3 getCol2( ) const; + + // Set the column of a 3x3 matrix referred to by the specified index + // + inline Matrix3 & setCol( int col, const Vector3 & vec ); + + // Set the row of a 3x3 matrix referred to by the specified index + // + inline Matrix3 & setRow( int row, const Vector3 & vec ); + + // Get the column of a 3x3 matrix referred to by the specified index + // + inline const Vector3 getCol( int col ) const; + + // Get the row of a 3x3 matrix referred to by the specified index + // + inline const Vector3 getRow( int row ) const; + + // Subscripting operator to set or get a column + // + inline Vector3 & operator []( int col ); + + // Subscripting operator to get a column + // + inline const Vector3 operator []( int col ) const; + + // Set the element of a 3x3 matrix referred to by column and row indices + // + inline Matrix3 & setElem( int col, int row, vec_float4 val ); + + // Get the element of a 3x3 matrix referred to by column and row indices + // + inline vec_float4 getElem( int col, int row ) const; + + // Add two 3x3 matrices + // + inline const Matrix3 operator +( const Matrix3 & mat ) const; + + // Subtract a 3x3 matrix from another 3x3 matrix + // + inline const Matrix3 operator -( const Matrix3 & mat ) const; + + // Negate all elements of a 3x3 matrix + // + inline const Matrix3 operator -( ) const; + + // Multiply a 3x3 matrix by a scalar + // + inline const Matrix3 operator *( vec_float4 scalar ) const; + + // Multiply a 3x3 matrix by a 3-D vector + // + inline const Vector3 operator *( const Vector3 & vec ) const; + + // Multiply two 3x3 matrices + // + inline const Matrix3 operator *( const Matrix3 & mat ) const; + + // Perform compound assignment and addition with a 3x3 matrix + // + inline Matrix3 & operator +=( const Matrix3 & mat ); + + // Perform compound assignment and subtraction by a 3x3 matrix + // + inline Matrix3 & operator -=( const Matrix3 & mat ); + + // Perform compound assignment and multiplication by a scalar + // + inline Matrix3 & operator *=( vec_float4 scalar ); + + // Perform compound assignment and multiplication by a 3x3 matrix + // + inline Matrix3 & operator *=( const Matrix3 & mat ); + + // Construct an identity 3x3 matrix + // + static inline const Matrix3 identity( ); + + // Construct a 3x3 matrix to rotate around the x axis + // + static inline const Matrix3 rotationX( vec_float4 radians ); + + // Construct a 3x3 matrix to rotate around the y axis + // + static inline const Matrix3 rotationY( vec_float4 radians ); + + // Construct a 3x3 matrix to rotate around the z axis + // + static inline const Matrix3 rotationZ( vec_float4 radians ); + + // Construct a 3x3 matrix to rotate around the x, y, and z axes + // + static inline const Matrix3 rotationZYX( const Vector3 & radiansXYZ ); + + // Construct a 3x3 matrix to rotate around a unit-length 3-D vector + // + static inline const Matrix3 rotation( vec_float4 radians, const Vector3 & unitVec ); + + // Construct a rotation matrix from a unit-length quaternion + // + static inline const Matrix3 rotation( const Quat & unitQuat ); + + // Construct a 3x3 matrix to perform scaling + // + static inline const Matrix3 scale( const Vector3 & scaleVec ); + +}; +// Multiply a 3x3 matrix by a scalar +// +inline const Matrix3 operator *( vec_float4 scalar, const Matrix3 & mat ); + +// Append (post-multiply) a scale transformation to a 3x3 matrix +// NOTE: +// Faster than creating and multiplying a scale transformation matrix. +// +inline const Matrix3 appendScale( const Matrix3 & mat, const Vector3 & scaleVec ); + +// Prepend (pre-multiply) a scale transformation to a 3x3 matrix +// NOTE: +// Faster than creating and multiplying a scale transformation matrix. +// +inline const Matrix3 prependScale( const Vector3 & scaleVec, const Matrix3 & mat ); + +// Multiply two 3x3 matrices per element +// +inline const Matrix3 mulPerElem( const Matrix3 & mat0, const Matrix3 & mat1 ); + +// Compute the absolute value of a 3x3 matrix per element +// +inline const Matrix3 absPerElem( const Matrix3 & mat ); + +// Transpose of a 3x3 matrix +// +inline const Matrix3 transpose( const Matrix3 & mat ); + +// Compute the inverse of a 3x3 matrix +// NOTE: +// Result is unpredictable when the determinant of mat is equal to or near 0. +// +inline const Matrix3 inverse( const Matrix3 & mat ); + +// Determinant of a 3x3 matrix +// +inline vec_float4 determinant( const Matrix3 & mat ); + +// Conditionally select between two 3x3 matrices +// NOTE: +// This function uses a conditional select instruction to avoid a branch. +// +inline const Matrix3 select( const Matrix3 & mat0, const Matrix3 & mat1, vec_uint4 select1 ); + +#ifdef _VECTORMATH_DEBUG + +// Print a 3x3 matrix +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Matrix3 & mat ); + +// Print a 3x3 matrix and an associated string identifier +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Matrix3 & mat, const char * name ); + +#endif + +// A set of four 4x4 matrices in structure-of-arrays format +// +class Matrix4 +{ + Vector4 mCol0; + Vector4 mCol1; + Vector4 mCol2; + Vector4 mCol3; + +public: + // Default constructor; does no initialization + // + inline Matrix4( ) { }; + + // Copy a 4x4 matrix + // + inline Matrix4( const Matrix4 & mat ); + + // Construct a 4x4 matrix containing the specified columns + // + inline Matrix4( const Vector4 & col0, const Vector4 & col1, const Vector4 & col2, const Vector4 & col3 ); + + // Construct a 4x4 matrix from a 3x4 transformation matrix + // + explicit inline Matrix4( const Transform3 & mat ); + + // Construct a 4x4 matrix from a 3x3 matrix and a 3-D vector + // + inline Matrix4( const Matrix3 & mat, const Vector3 & translateVec ); + + // Construct a 4x4 matrix from a unit-length quaternion and a 3-D vector + // + inline Matrix4( const Quat & unitQuat, const Vector3 & translateVec ); + + // Set all elements of a 4x4 matrix to the same scalar value + // + explicit inline Matrix4( vec_float4 scalar ); + + // Replicate an AoS 4x4 matrix + // + inline Matrix4( const Aos::Matrix4 & mat ); + + // Insert four AoS 4x4 matrices + // + inline Matrix4( const Aos::Matrix4 & mat0, const Aos::Matrix4 & mat1, const Aos::Matrix4 & mat2, const Aos::Matrix4 & mat3 ); + + // Extract four AoS 4x4 matrices + // + inline void get4Aos( Aos::Matrix4 & result0, Aos::Matrix4 & result1, Aos::Matrix4 & result2, Aos::Matrix4 & result3 ) const; + + // Assign one 4x4 matrix to another + // + inline Matrix4 & operator =( const Matrix4 & mat ); + + // Set the upper-left 3x3 submatrix + // NOTE: + // This function does not change the bottom row elements. + // + inline Matrix4 & setUpper3x3( const Matrix3 & mat3 ); + + // Get the upper-left 3x3 submatrix of a 4x4 matrix + // + inline const Matrix3 getUpper3x3( ) const; + + // Set translation component + // NOTE: + // This function does not change the bottom row elements. + // + inline Matrix4 & setTranslation( const Vector3 & translateVec ); + + // Get the translation component of a 4x4 matrix + // + inline const Vector3 getTranslation( ) const; + + // Set column 0 of a 4x4 matrix + // + inline Matrix4 & setCol0( const Vector4 & col0 ); + + // Set column 1 of a 4x4 matrix + // + inline Matrix4 & setCol1( const Vector4 & col1 ); + + // Set column 2 of a 4x4 matrix + // + inline Matrix4 & setCol2( const Vector4 & col2 ); + + // Set column 3 of a 4x4 matrix + // + inline Matrix4 & setCol3( const Vector4 & col3 ); + + // Get column 0 of a 4x4 matrix + // + inline const Vector4 getCol0( ) const; + + // Get column 1 of a 4x4 matrix + // + inline const Vector4 getCol1( ) const; + + // Get column 2 of a 4x4 matrix + // + inline const Vector4 getCol2( ) const; + + // Get column 3 of a 4x4 matrix + // + inline const Vector4 getCol3( ) const; + + // Set the column of a 4x4 matrix referred to by the specified index + // + inline Matrix4 & setCol( int col, const Vector4 & vec ); + + // Set the row of a 4x4 matrix referred to by the specified index + // + inline Matrix4 & setRow( int row, const Vector4 & vec ); + + // Get the column of a 4x4 matrix referred to by the specified index + // + inline const Vector4 getCol( int col ) const; + + // Get the row of a 4x4 matrix referred to by the specified index + // + inline const Vector4 getRow( int row ) const; + + // Subscripting operator to set or get a column + // + inline Vector4 & operator []( int col ); + + // Subscripting operator to get a column + // + inline const Vector4 operator []( int col ) const; + + // Set the element of a 4x4 matrix referred to by column and row indices + // + inline Matrix4 & setElem( int col, int row, vec_float4 val ); + + // Get the element of a 4x4 matrix referred to by column and row indices + // + inline vec_float4 getElem( int col, int row ) const; + + // Add two 4x4 matrices + // + inline const Matrix4 operator +( const Matrix4 & mat ) const; + + // Subtract a 4x4 matrix from another 4x4 matrix + // + inline const Matrix4 operator -( const Matrix4 & mat ) const; + + // Negate all elements of a 4x4 matrix + // + inline const Matrix4 operator -( ) const; + + // Multiply a 4x4 matrix by a scalar + // + inline const Matrix4 operator *( vec_float4 scalar ) const; + + // Multiply a 4x4 matrix by a 4-D vector + // + inline const Vector4 operator *( const Vector4 & vec ) const; + + // Multiply a 4x4 matrix by a 3-D vector + // + inline const Vector4 operator *( const Vector3 & vec ) const; + + // Multiply a 4x4 matrix by a 3-D point + // + inline const Vector4 operator *( const Point3 & pnt ) const; + + // Multiply two 4x4 matrices + // + inline const Matrix4 operator *( const Matrix4 & mat ) const; + + // Multiply a 4x4 matrix by a 3x4 transformation matrix + // + inline const Matrix4 operator *( const Transform3 & tfrm ) const; + + // Perform compound assignment and addition with a 4x4 matrix + // + inline Matrix4 & operator +=( const Matrix4 & mat ); + + // Perform compound assignment and subtraction by a 4x4 matrix + // + inline Matrix4 & operator -=( const Matrix4 & mat ); + + // Perform compound assignment and multiplication by a scalar + // + inline Matrix4 & operator *=( vec_float4 scalar ); + + // Perform compound assignment and multiplication by a 4x4 matrix + // + inline Matrix4 & operator *=( const Matrix4 & mat ); + + // Perform compound assignment and multiplication by a 3x4 transformation matrix + // + inline Matrix4 & operator *=( const Transform3 & tfrm ); + + // Construct an identity 4x4 matrix + // + static inline const Matrix4 identity( ); + + // Construct a 4x4 matrix to rotate around the x axis + // + static inline const Matrix4 rotationX( vec_float4 radians ); + + // Construct a 4x4 matrix to rotate around the y axis + // + static inline const Matrix4 rotationY( vec_float4 radians ); + + // Construct a 4x4 matrix to rotate around the z axis + // + static inline const Matrix4 rotationZ( vec_float4 radians ); + + // Construct a 4x4 matrix to rotate around the x, y, and z axes + // + static inline const Matrix4 rotationZYX( const Vector3 & radiansXYZ ); + + // Construct a 4x4 matrix to rotate around a unit-length 3-D vector + // + static inline const Matrix4 rotation( vec_float4 radians, const Vector3 & unitVec ); + + // Construct a rotation matrix from a unit-length quaternion + // + static inline const Matrix4 rotation( const Quat & unitQuat ); + + // Construct a 4x4 matrix to perform scaling + // + static inline const Matrix4 scale( const Vector3 & scaleVec ); + + // Construct a 4x4 matrix to perform translation + // + static inline const Matrix4 translation( const Vector3 & translateVec ); + + // Construct viewing matrix based on eye position, position looked at, and up direction + // + static inline const Matrix4 lookAt( const Point3 & eyePos, const Point3 & lookAtPos, const Vector3 & upVec ); + + // Construct a perspective projection matrix + // + static inline const Matrix4 perspective( vec_float4 fovyRadians, vec_float4 aspect, vec_float4 zNear, vec_float4 zFar ); + + // Construct a perspective projection matrix based on frustum + // + static inline const Matrix4 frustum( vec_float4 left, vec_float4 right, vec_float4 bottom, vec_float4 top, vec_float4 zNear, vec_float4 zFar ); + + // Construct an orthographic projection matrix + // + static inline const Matrix4 orthographic( vec_float4 left, vec_float4 right, vec_float4 bottom, vec_float4 top, vec_float4 zNear, vec_float4 zFar ); + +}; +// Multiply a 4x4 matrix by a scalar +// +inline const Matrix4 operator *( vec_float4 scalar, const Matrix4 & mat ); + +// Append (post-multiply) a scale transformation to a 4x4 matrix +// NOTE: +// Faster than creating and multiplying a scale transformation matrix. +// +inline const Matrix4 appendScale( const Matrix4 & mat, const Vector3 & scaleVec ); + +// Prepend (pre-multiply) a scale transformation to a 4x4 matrix +// NOTE: +// Faster than creating and multiplying a scale transformation matrix. +// +inline const Matrix4 prependScale( const Vector3 & scaleVec, const Matrix4 & mat ); + +// Multiply two 4x4 matrices per element +// +inline const Matrix4 mulPerElem( const Matrix4 & mat0, const Matrix4 & mat1 ); + +// Compute the absolute value of a 4x4 matrix per element +// +inline const Matrix4 absPerElem( const Matrix4 & mat ); + +// Transpose of a 4x4 matrix +// +inline const Matrix4 transpose( const Matrix4 & mat ); + +// Compute the inverse of a 4x4 matrix +// NOTE: +// Result is unpredictable when the determinant of mat is equal to or near 0. +// +inline const Matrix4 inverse( const Matrix4 & mat ); + +// Compute the inverse of a 4x4 matrix, which is expected to be an affine matrix +// NOTE: +// This can be used to achieve better performance than a general inverse when the specified 4x4 matrix meets the given restrictions. The result is unpredictable when the determinant of mat is equal to or near 0. +// +inline const Matrix4 affineInverse( const Matrix4 & mat ); + +// Compute the inverse of a 4x4 matrix, which is expected to be an affine matrix with an orthogonal upper-left 3x3 submatrix +// NOTE: +// This can be used to achieve better performance than a general inverse when the specified 4x4 matrix meets the given restrictions. +// +inline const Matrix4 orthoInverse( const Matrix4 & mat ); + +// Determinant of a 4x4 matrix +// +inline vec_float4 determinant( const Matrix4 & mat ); + +// Conditionally select between two 4x4 matrices +// NOTE: +// This function uses a conditional select instruction to avoid a branch. +// +inline const Matrix4 select( const Matrix4 & mat0, const Matrix4 & mat1, vec_uint4 select1 ); + +#ifdef _VECTORMATH_DEBUG + +// Print a 4x4 matrix +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Matrix4 & mat ); + +// Print a 4x4 matrix and an associated string identifier +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Matrix4 & mat, const char * name ); + +#endif + +// A set of four 3x4 transformation matrices in structure-of-arrays format +// +class Transform3 +{ + Vector3 mCol0; + Vector3 mCol1; + Vector3 mCol2; + Vector3 mCol3; + +public: + // Default constructor; does no initialization + // + inline Transform3( ) { }; + + // Copy a 3x4 transformation matrix + // + inline Transform3( const Transform3 & tfrm ); + + // Construct a 3x4 transformation matrix containing the specified columns + // + inline Transform3( const Vector3 & col0, const Vector3 & col1, const Vector3 & col2, const Vector3 & col3 ); + + // Construct a 3x4 transformation matrix from a 3x3 matrix and a 3-D vector + // + inline Transform3( const Matrix3 & tfrm, const Vector3 & translateVec ); + + // Construct a 3x4 transformation matrix from a unit-length quaternion and a 3-D vector + // + inline Transform3( const Quat & unitQuat, const Vector3 & translateVec ); + + // Set all elements of a 3x4 transformation matrix to the same scalar value + // + explicit inline Transform3( vec_float4 scalar ); + + // Replicate an AoS 3x4 transformation matrix + // + inline Transform3( const Aos::Transform3 & tfrm ); + + // Insert four AoS 3x4 transformation matrices + // + inline Transform3( const Aos::Transform3 & tfrm0, const Aos::Transform3 & tfrm1, const Aos::Transform3 & tfrm2, const Aos::Transform3 & tfrm3 ); + + // Extract four AoS 3x4 transformation matrices + // + inline void get4Aos( Aos::Transform3 & result0, Aos::Transform3 & result1, Aos::Transform3 & result2, Aos::Transform3 & result3 ) const; + + // Assign one 3x4 transformation matrix to another + // + inline Transform3 & operator =( const Transform3 & tfrm ); + + // Set the upper-left 3x3 submatrix + // + inline Transform3 & setUpper3x3( const Matrix3 & mat3 ); + + // Get the upper-left 3x3 submatrix of a 3x4 transformation matrix + // + inline const Matrix3 getUpper3x3( ) const; + + // Set translation component + // + inline Transform3 & setTranslation( const Vector3 & translateVec ); + + // Get the translation component of a 3x4 transformation matrix + // + inline const Vector3 getTranslation( ) const; + + // Set column 0 of a 3x4 transformation matrix + // + inline Transform3 & setCol0( const Vector3 & col0 ); + + // Set column 1 of a 3x4 transformation matrix + // + inline Transform3 & setCol1( const Vector3 & col1 ); + + // Set column 2 of a 3x4 transformation matrix + // + inline Transform3 & setCol2( const Vector3 & col2 ); + + // Set column 3 of a 3x4 transformation matrix + // + inline Transform3 & setCol3( const Vector3 & col3 ); + + // Get column 0 of a 3x4 transformation matrix + // + inline const Vector3 getCol0( ) const; + + // Get column 1 of a 3x4 transformation matrix + // + inline const Vector3 getCol1( ) const; + + // Get column 2 of a 3x4 transformation matrix + // + inline const Vector3 getCol2( ) const; + + // Get column 3 of a 3x4 transformation matrix + // + inline const Vector3 getCol3( ) const; + + // Set the column of a 3x4 transformation matrix referred to by the specified index + // + inline Transform3 & setCol( int col, const Vector3 & vec ); + + // Set the row of a 3x4 transformation matrix referred to by the specified index + // + inline Transform3 & setRow( int row, const Vector4 & vec ); + + // Get the column of a 3x4 transformation matrix referred to by the specified index + // + inline const Vector3 getCol( int col ) const; + + // Get the row of a 3x4 transformation matrix referred to by the specified index + // + inline const Vector4 getRow( int row ) const; + + // Subscripting operator to set or get a column + // + inline Vector3 & operator []( int col ); + + // Subscripting operator to get a column + // + inline const Vector3 operator []( int col ) const; + + // Set the element of a 3x4 transformation matrix referred to by column and row indices + // + inline Transform3 & setElem( int col, int row, vec_float4 val ); + + // Get the element of a 3x4 transformation matrix referred to by column and row indices + // + inline vec_float4 getElem( int col, int row ) const; + + // Multiply a 3x4 transformation matrix by a 3-D vector + // + inline const Vector3 operator *( const Vector3 & vec ) const; + + // Multiply a 3x4 transformation matrix by a 3-D point + // + inline const Point3 operator *( const Point3 & pnt ) const; + + // Multiply two 3x4 transformation matrices + // + inline const Transform3 operator *( const Transform3 & tfrm ) const; + + // Perform compound assignment and multiplication by a 3x4 transformation matrix + // + inline Transform3 & operator *=( const Transform3 & tfrm ); + + // Construct an identity 3x4 transformation matrix + // + static inline const Transform3 identity( ); + + // Construct a 3x4 transformation matrix to rotate around the x axis + // + static inline const Transform3 rotationX( vec_float4 radians ); + + // Construct a 3x4 transformation matrix to rotate around the y axis + // + static inline const Transform3 rotationY( vec_float4 radians ); + + // Construct a 3x4 transformation matrix to rotate around the z axis + // + static inline const Transform3 rotationZ( vec_float4 radians ); + + // Construct a 3x4 transformation matrix to rotate around the x, y, and z axes + // + static inline const Transform3 rotationZYX( const Vector3 & radiansXYZ ); + + // Construct a 3x4 transformation matrix to rotate around a unit-length 3-D vector + // + static inline const Transform3 rotation( vec_float4 radians, const Vector3 & unitVec ); + + // Construct a rotation matrix from a unit-length quaternion + // + static inline const Transform3 rotation( const Quat & unitQuat ); + + // Construct a 3x4 transformation matrix to perform scaling + // + static inline const Transform3 scale( const Vector3 & scaleVec ); + + // Construct a 3x4 transformation matrix to perform translation + // + static inline const Transform3 translation( const Vector3 & translateVec ); + +}; +// Append (post-multiply) a scale transformation to a 3x4 transformation matrix +// NOTE: +// Faster than creating and multiplying a scale transformation matrix. +// +inline const Transform3 appendScale( const Transform3 & tfrm, const Vector3 & scaleVec ); + +// Prepend (pre-multiply) a scale transformation to a 3x4 transformation matrix +// NOTE: +// Faster than creating and multiplying a scale transformation matrix. +// +inline const Transform3 prependScale( const Vector3 & scaleVec, const Transform3 & tfrm ); + +// Multiply two 3x4 transformation matrices per element +// +inline const Transform3 mulPerElem( const Transform3 & tfrm0, const Transform3 & tfrm1 ); + +// Compute the absolute value of a 3x4 transformation matrix per element +// +inline const Transform3 absPerElem( const Transform3 & tfrm ); + +// Inverse of a 3x4 transformation matrix +// NOTE: +// Result is unpredictable when the determinant of the left 3x3 submatrix is equal to or near 0. +// +inline const Transform3 inverse( const Transform3 & tfrm ); + +// Compute the inverse of a 3x4 transformation matrix, expected to have an orthogonal upper-left 3x3 submatrix +// NOTE: +// This can be used to achieve better performance than a general inverse when the specified 3x4 transformation matrix meets the given restrictions. +// +inline const Transform3 orthoInverse( const Transform3 & tfrm ); + +// Conditionally select between two 3x4 transformation matrices +// NOTE: +// This function uses a conditional select instruction to avoid a branch. +// +inline const Transform3 select( const Transform3 & tfrm0, const Transform3 & tfrm1, vec_uint4 select1 ); + +#ifdef _VECTORMATH_DEBUG + +// Print a 3x4 transformation matrix +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Transform3 & tfrm ); + +// Print a 3x4 transformation matrix and an associated string identifier +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Transform3 & tfrm, const char * name ); + +#endif + +} // namespace Soa +} // namespace Vectormath + +#include "vec_soa.h" +#include "quat_soa.h" +#include "mat_soa.h" + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/scalar/c/mat_aos.h b/Extras/vectormathlibrary/include/vectormath/scalar/c/mat_aos.h new file mode 100644 index 000000000..4e0d6ee5c --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/scalar/c/mat_aos.h @@ -0,0 +1,1452 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_MAT_AOS_C_H +#define _VECTORMATH_MAT_AOS_C_H + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/*----------------------------------------------------------------------------- + * Constants + */ +#define _VECTORMATH_PI_OVER_2 1.570796327f + +/*----------------------------------------------------------------------------- + * Definitions + */ +static inline void vmathM3Copy( VmathMatrix3 *result, const VmathMatrix3 *mat ) +{ + vmathV3Copy( &result->col0, &mat->col0 ); + vmathV3Copy( &result->col1, &mat->col1 ); + vmathV3Copy( &result->col2, &mat->col2 ); +} + +static inline void vmathM3MakeFromScalar( VmathMatrix3 *result, float scalar ) +{ + vmathV3MakeFromScalar( &result->col0, scalar ); + vmathV3MakeFromScalar( &result->col1, scalar ); + vmathV3MakeFromScalar( &result->col2, scalar ); +} + +static inline void vmathM3MakeFromQ( VmathMatrix3 *result, const VmathQuat *unitQuat ) +{ + float qx, qy, qz, qw, qx2, qy2, qz2, qxqx2, qyqy2, qzqz2, qxqy2, qyqz2, qzqw2, qxqz2, qyqw2, qxqw2; + qx = unitQuat->x; + qy = unitQuat->y; + qz = unitQuat->z; + qw = unitQuat->w; + qx2 = ( qx + qx ); + qy2 = ( qy + qy ); + qz2 = ( qz + qz ); + qxqx2 = ( qx * qx2 ); + qxqy2 = ( qx * qy2 ); + qxqz2 = ( qx * qz2 ); + qxqw2 = ( qw * qx2 ); + qyqy2 = ( qy * qy2 ); + qyqz2 = ( qy * qz2 ); + qyqw2 = ( qw * qy2 ); + qzqz2 = ( qz * qz2 ); + qzqw2 = ( qw * qz2 ); + vmathV3MakeFromElems( &result->col0, ( ( 1.0f - qyqy2 ) - qzqz2 ), ( qxqy2 + qzqw2 ), ( qxqz2 - qyqw2 ) ); + vmathV3MakeFromElems( &result->col1, ( qxqy2 - qzqw2 ), ( ( 1.0f - qxqx2 ) - qzqz2 ), ( qyqz2 + qxqw2 ) ); + vmathV3MakeFromElems( &result->col2, ( qxqz2 + qyqw2 ), ( qyqz2 - qxqw2 ), ( ( 1.0f - qxqx2 ) - qyqy2 ) ); +} + +static inline void vmathM3MakeFromCols( VmathMatrix3 *result, const VmathVector3 *_col0, const VmathVector3 *_col1, const VmathVector3 *_col2 ) +{ + vmathV3Copy( &result->col0, _col0 ); + vmathV3Copy( &result->col1, _col1 ); + vmathV3Copy( &result->col2, _col2 ); +} + +static inline void vmathM3SetCol0( VmathMatrix3 *result, const VmathVector3 *_col0 ) +{ + vmathV3Copy( &result->col0, _col0 ); +} + +static inline void vmathM3SetCol1( VmathMatrix3 *result, const VmathVector3 *_col1 ) +{ + vmathV3Copy( &result->col1, _col1 ); +} + +static inline void vmathM3SetCol2( VmathMatrix3 *result, const VmathVector3 *_col2 ) +{ + vmathV3Copy( &result->col2, _col2 ); +} + +static inline void vmathM3SetCol( VmathMatrix3 *result, int col, const VmathVector3 *vec ) +{ + vmathV3Copy( (&result->col0 + col), vec ); +} + +static inline void vmathM3SetRow( VmathMatrix3 *result, int row, const VmathVector3 *vec ) +{ + vmathV3SetElem( &result->col0, row, vmathV3GetElem( vec, 0 ) ); + vmathV3SetElem( &result->col1, row, vmathV3GetElem( vec, 1 ) ); + vmathV3SetElem( &result->col2, row, vmathV3GetElem( vec, 2 ) ); +} + +static inline void vmathM3SetElem( VmathMatrix3 *result, int col, int row, float val ) +{ + VmathVector3 tmpV3_0; + vmathM3GetCol( &tmpV3_0, result, col ); + vmathV3SetElem( &tmpV3_0, row, val ); + vmathM3SetCol( result, col, &tmpV3_0 ); +} + +static inline float vmathM3GetElem( const VmathMatrix3 *mat, int col, int row ) +{ + VmathVector3 tmpV3_0; + vmathM3GetCol( &tmpV3_0, mat, col ); + return vmathV3GetElem( &tmpV3_0, row ); +} + +static inline void vmathM3GetCol0( VmathVector3 *result, const VmathMatrix3 *mat ) +{ + vmathV3Copy( result, &mat->col0 ); +} + +static inline void vmathM3GetCol1( VmathVector3 *result, const VmathMatrix3 *mat ) +{ + vmathV3Copy( result, &mat->col1 ); +} + +static inline void vmathM3GetCol2( VmathVector3 *result, const VmathMatrix3 *mat ) +{ + vmathV3Copy( result, &mat->col2 ); +} + +static inline void vmathM3GetCol( VmathVector3 *result, const VmathMatrix3 *mat, int col ) +{ + vmathV3Copy( result, (&mat->col0 + col) ); +} + +static inline void vmathM3GetRow( VmathVector3 *result, const VmathMatrix3 *mat, int row ) +{ + vmathV3MakeFromElems( result, vmathV3GetElem( &mat->col0, row ), vmathV3GetElem( &mat->col1, row ), vmathV3GetElem( &mat->col2, row ) ); +} + +static inline void vmathM3Transpose( VmathMatrix3 *result, const VmathMatrix3 *mat ) +{ + VmathMatrix3 tmpResult; + vmathV3MakeFromElems( &tmpResult.col0, mat->col0.x, mat->col1.x, mat->col2.x ); + vmathV3MakeFromElems( &tmpResult.col1, mat->col0.y, mat->col1.y, mat->col2.y ); + vmathV3MakeFromElems( &tmpResult.col2, mat->col0.z, mat->col1.z, mat->col2.z ); + vmathM3Copy( result, &tmpResult ); +} + +static inline void vmathM3Inverse( VmathMatrix3 *result, const VmathMatrix3 *mat ) +{ + VmathVector3 tmp0, tmp1, tmp2; + float detinv; + vmathV3Cross( &tmp0, &mat->col1, &mat->col2 ); + vmathV3Cross( &tmp1, &mat->col2, &mat->col0 ); + vmathV3Cross( &tmp2, &mat->col0, &mat->col1 ); + detinv = ( 1.0f / vmathV3Dot( &mat->col2, &tmp2 ) ); + vmathV3MakeFromElems( &result->col0, ( tmp0.x * detinv ), ( tmp1.x * detinv ), ( tmp2.x * detinv ) ); + vmathV3MakeFromElems( &result->col1, ( tmp0.y * detinv ), ( tmp1.y * detinv ), ( tmp2.y * detinv ) ); + vmathV3MakeFromElems( &result->col2, ( tmp0.z * detinv ), ( tmp1.z * detinv ), ( tmp2.z * detinv ) ); +} + +static inline float vmathM3Determinant( const VmathMatrix3 *mat ) +{ + VmathVector3 tmpV3_0; + vmathV3Cross( &tmpV3_0, &mat->col0, &mat->col1 ); + return vmathV3Dot( &mat->col2, &tmpV3_0 ); +} + +static inline void vmathM3Add( VmathMatrix3 *result, const VmathMatrix3 *mat0, const VmathMatrix3 *mat1 ) +{ + vmathV3Add( &result->col0, &mat0->col0, &mat1->col0 ); + vmathV3Add( &result->col1, &mat0->col1, &mat1->col1 ); + vmathV3Add( &result->col2, &mat0->col2, &mat1->col2 ); +} + +static inline void vmathM3Sub( VmathMatrix3 *result, const VmathMatrix3 *mat0, const VmathMatrix3 *mat1 ) +{ + vmathV3Sub( &result->col0, &mat0->col0, &mat1->col0 ); + vmathV3Sub( &result->col1, &mat0->col1, &mat1->col1 ); + vmathV3Sub( &result->col2, &mat0->col2, &mat1->col2 ); +} + +static inline void vmathM3Neg( VmathMatrix3 *result, const VmathMatrix3 *mat ) +{ + vmathV3Neg( &result->col0, &mat->col0 ); + vmathV3Neg( &result->col1, &mat->col1 ); + vmathV3Neg( &result->col2, &mat->col2 ); +} + +static inline void vmathM3AbsPerElem( VmathMatrix3 *result, const VmathMatrix3 *mat ) +{ + vmathV3AbsPerElem( &result->col0, &mat->col0 ); + vmathV3AbsPerElem( &result->col1, &mat->col1 ); + vmathV3AbsPerElem( &result->col2, &mat->col2 ); +} + +static inline void vmathM3ScalarMul( VmathMatrix3 *result, const VmathMatrix3 *mat, float scalar ) +{ + vmathV3ScalarMul( &result->col0, &mat->col0, scalar ); + vmathV3ScalarMul( &result->col1, &mat->col1, scalar ); + vmathV3ScalarMul( &result->col2, &mat->col2, scalar ); +} + +static inline void vmathM3MulV3( VmathVector3 *result, const VmathMatrix3 *mat, const VmathVector3 *vec ) +{ + float tmpX, tmpY, tmpZ; + tmpX = ( ( ( mat->col0.x * vec->x ) + ( mat->col1.x * vec->y ) ) + ( mat->col2.x * vec->z ) ); + tmpY = ( ( ( mat->col0.y * vec->x ) + ( mat->col1.y * vec->y ) ) + ( mat->col2.y * vec->z ) ); + tmpZ = ( ( ( mat->col0.z * vec->x ) + ( mat->col1.z * vec->y ) ) + ( mat->col2.z * vec->z ) ); + vmathV3MakeFromElems( result, tmpX, tmpY, tmpZ ); +} + +static inline void vmathM3Mul( VmathMatrix3 *result, const VmathMatrix3 *mat0, const VmathMatrix3 *mat1 ) +{ + VmathMatrix3 tmpResult; + vmathM3MulV3( &tmpResult.col0, mat0, &mat1->col0 ); + vmathM3MulV3( &tmpResult.col1, mat0, &mat1->col1 ); + vmathM3MulV3( &tmpResult.col2, mat0, &mat1->col2 ); + vmathM3Copy( result, &tmpResult ); +} + +static inline void vmathM3MulPerElem( VmathMatrix3 *result, const VmathMatrix3 *mat0, const VmathMatrix3 *mat1 ) +{ + vmathV3MulPerElem( &result->col0, &mat0->col0, &mat1->col0 ); + vmathV3MulPerElem( &result->col1, &mat0->col1, &mat1->col1 ); + vmathV3MulPerElem( &result->col2, &mat0->col2, &mat1->col2 ); +} + +static inline void vmathM3MakeIdentity( VmathMatrix3 *result ) +{ + vmathV3MakeXAxis( &result->col0 ); + vmathV3MakeYAxis( &result->col1 ); + vmathV3MakeZAxis( &result->col2 ); +} + +static inline void vmathM3MakeRotationX( VmathMatrix3 *result, float radians ) +{ + float s, c; + s = sinf( radians ); + c = cosf( radians ); + vmathV3MakeXAxis( &result->col0 ); + vmathV3MakeFromElems( &result->col1, 0.0f, c, s ); + vmathV3MakeFromElems( &result->col2, 0.0f, -s, c ); +} + +static inline void vmathM3MakeRotationY( VmathMatrix3 *result, float radians ) +{ + float s, c; + s = sinf( radians ); + c = cosf( radians ); + vmathV3MakeFromElems( &result->col0, c, 0.0f, -s ); + vmathV3MakeYAxis( &result->col1 ); + vmathV3MakeFromElems( &result->col2, s, 0.0f, c ); +} + +static inline void vmathM3MakeRotationZ( VmathMatrix3 *result, float radians ) +{ + float s, c; + s = sinf( radians ); + c = cosf( radians ); + vmathV3MakeFromElems( &result->col0, c, s, 0.0f ); + vmathV3MakeFromElems( &result->col1, -s, c, 0.0f ); + vmathV3MakeZAxis( &result->col2 ); +} + +static inline void vmathM3MakeRotationZYX( VmathMatrix3 *result, const VmathVector3 *radiansXYZ ) +{ + float sX, cX, sY, cY, sZ, cZ, tmp0, tmp1; + sX = sinf( radiansXYZ->x ); + cX = cosf( radiansXYZ->x ); + sY = sinf( radiansXYZ->y ); + cY = cosf( radiansXYZ->y ); + sZ = sinf( radiansXYZ->z ); + cZ = cosf( radiansXYZ->z ); + tmp0 = ( cZ * sY ); + tmp1 = ( sZ * sY ); + vmathV3MakeFromElems( &result->col0, ( cZ * cY ), ( sZ * cY ), -sY ); + vmathV3MakeFromElems( &result->col1, ( ( tmp0 * sX ) - ( sZ * cX ) ), ( ( tmp1 * sX ) + ( cZ * cX ) ), ( cY * sX ) ); + vmathV3MakeFromElems( &result->col2, ( ( tmp0 * cX ) + ( sZ * sX ) ), ( ( tmp1 * cX ) - ( cZ * sX ) ), ( cY * cX ) ); +} + +static inline void vmathM3MakeRotationAxis( VmathMatrix3 *result, float radians, const VmathVector3 *unitVec ) +{ + float x, y, z, s, c, oneMinusC, xy, yz, zx; + s = sinf( radians ); + c = cosf( radians ); + x = unitVec->x; + y = unitVec->y; + z = unitVec->z; + xy = ( x * y ); + yz = ( y * z ); + zx = ( z * x ); + oneMinusC = ( 1.0f - c ); + vmathV3MakeFromElems( &result->col0, ( ( ( x * x ) * oneMinusC ) + c ), ( ( xy * oneMinusC ) + ( z * s ) ), ( ( zx * oneMinusC ) - ( y * s ) ) ); + vmathV3MakeFromElems( &result->col1, ( ( xy * oneMinusC ) - ( z * s ) ), ( ( ( y * y ) * oneMinusC ) + c ), ( ( yz * oneMinusC ) + ( x * s ) ) ); + vmathV3MakeFromElems( &result->col2, ( ( zx * oneMinusC ) + ( y * s ) ), ( ( yz * oneMinusC ) - ( x * s ) ), ( ( ( z * z ) * oneMinusC ) + c ) ); +} + +static inline void vmathM3MakeRotationQ( VmathMatrix3 *result, const VmathQuat *unitQuat ) +{ + vmathM3MakeFromQ( result, unitQuat ); +} + +static inline void vmathM3MakeScale( VmathMatrix3 *result, const VmathVector3 *scaleVec ) +{ + vmathV3MakeFromElems( &result->col0, scaleVec->x, 0.0f, 0.0f ); + vmathV3MakeFromElems( &result->col1, 0.0f, scaleVec->y, 0.0f ); + vmathV3MakeFromElems( &result->col2, 0.0f, 0.0f, scaleVec->z ); +} + +static inline void vmathM3AppendScale( VmathMatrix3 *result, const VmathMatrix3 *mat, const VmathVector3 *scaleVec ) +{ + vmathV3ScalarMul( &result->col0, &mat->col0, vmathV3GetX( scaleVec ) ); + vmathV3ScalarMul( &result->col1, &mat->col1, vmathV3GetY( scaleVec ) ); + vmathV3ScalarMul( &result->col2, &mat->col2, vmathV3GetZ( scaleVec ) ); +} + +static inline void vmathM3PrependScale( VmathMatrix3 *result, const VmathVector3 *scaleVec, const VmathMatrix3 *mat ) +{ + vmathV3MulPerElem( &result->col0, &mat->col0, scaleVec ); + vmathV3MulPerElem( &result->col1, &mat->col1, scaleVec ); + vmathV3MulPerElem( &result->col2, &mat->col2, scaleVec ); +} + +static inline void vmathM3Select( VmathMatrix3 *result, const VmathMatrix3 *mat0, const VmathMatrix3 *mat1, unsigned int select1 ) +{ + vmathV3Select( &result->col0, &mat0->col0, &mat1->col0, select1 ); + vmathV3Select( &result->col1, &mat0->col1, &mat1->col1, select1 ); + vmathV3Select( &result->col2, &mat0->col2, &mat1->col2, select1 ); +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathM3Print( const VmathMatrix3 *mat ) +{ + VmathVector3 tmpV3_0, tmpV3_1, tmpV3_2; + vmathM3GetRow( &tmpV3_0, mat, 0 ); + vmathV3Print( &tmpV3_0 ); + vmathM3GetRow( &tmpV3_1, mat, 1 ); + vmathV3Print( &tmpV3_1 ); + vmathM3GetRow( &tmpV3_2, mat, 2 ); + vmathV3Print( &tmpV3_2 ); +} + +static inline void vmathM3Prints( const VmathMatrix3 *mat, const char *name ) +{ + printf("%s:\n", name); + vmathM3Print( mat ); +} + +#endif + +static inline void vmathM4Copy( VmathMatrix4 *result, const VmathMatrix4 *mat ) +{ + vmathV4Copy( &result->col0, &mat->col0 ); + vmathV4Copy( &result->col1, &mat->col1 ); + vmathV4Copy( &result->col2, &mat->col2 ); + vmathV4Copy( &result->col3, &mat->col3 ); +} + +static inline void vmathM4MakeFromScalar( VmathMatrix4 *result, float scalar ) +{ + vmathV4MakeFromScalar( &result->col0, scalar ); + vmathV4MakeFromScalar( &result->col1, scalar ); + vmathV4MakeFromScalar( &result->col2, scalar ); + vmathV4MakeFromScalar( &result->col3, scalar ); +} + +static inline void vmathM4MakeFromT3( VmathMatrix4 *result, const VmathTransform3 *mat ) +{ + vmathV4MakeFromV3Scalar( &result->col0, &mat->col0, 0.0f ); + vmathV4MakeFromV3Scalar( &result->col1, &mat->col1, 0.0f ); + vmathV4MakeFromV3Scalar( &result->col2, &mat->col2, 0.0f ); + vmathV4MakeFromV3Scalar( &result->col3, &mat->col3, 1.0f ); +} + +static inline void vmathM4MakeFromCols( VmathMatrix4 *result, const VmathVector4 *_col0, const VmathVector4 *_col1, const VmathVector4 *_col2, const VmathVector4 *_col3 ) +{ + vmathV4Copy( &result->col0, _col0 ); + vmathV4Copy( &result->col1, _col1 ); + vmathV4Copy( &result->col2, _col2 ); + vmathV4Copy( &result->col3, _col3 ); +} + +static inline void vmathM4MakeFromM3V3( VmathMatrix4 *result, const VmathMatrix3 *mat, const VmathVector3 *translateVec ) +{ + vmathV4MakeFromV3Scalar( &result->col0, &mat->col0, 0.0f ); + vmathV4MakeFromV3Scalar( &result->col1, &mat->col1, 0.0f ); + vmathV4MakeFromV3Scalar( &result->col2, &mat->col2, 0.0f ); + vmathV4MakeFromV3Scalar( &result->col3, translateVec, 1.0f ); +} + +static inline void vmathM4MakeFromQV3( VmathMatrix4 *result, const VmathQuat *unitQuat, const VmathVector3 *translateVec ) +{ + VmathMatrix3 mat; + vmathM3MakeFromQ( &mat, unitQuat ); + vmathV4MakeFromV3Scalar( &result->col0, &mat.col0, 0.0f ); + vmathV4MakeFromV3Scalar( &result->col1, &mat.col1, 0.0f ); + vmathV4MakeFromV3Scalar( &result->col2, &mat.col2, 0.0f ); + vmathV4MakeFromV3Scalar( &result->col3, translateVec, 1.0f ); +} + +static inline void vmathM4SetCol0( VmathMatrix4 *result, const VmathVector4 *_col0 ) +{ + vmathV4Copy( &result->col0, _col0 ); +} + +static inline void vmathM4SetCol1( VmathMatrix4 *result, const VmathVector4 *_col1 ) +{ + vmathV4Copy( &result->col1, _col1 ); +} + +static inline void vmathM4SetCol2( VmathMatrix4 *result, const VmathVector4 *_col2 ) +{ + vmathV4Copy( &result->col2, _col2 ); +} + +static inline void vmathM4SetCol3( VmathMatrix4 *result, const VmathVector4 *_col3 ) +{ + vmathV4Copy( &result->col3, _col3 ); +} + +static inline void vmathM4SetCol( VmathMatrix4 *result, int col, const VmathVector4 *vec ) +{ + vmathV4Copy( (&result->col0 + col), vec ); +} + +static inline void vmathM4SetRow( VmathMatrix4 *result, int row, const VmathVector4 *vec ) +{ + vmathV4SetElem( &result->col0, row, vmathV4GetElem( vec, 0 ) ); + vmathV4SetElem( &result->col1, row, vmathV4GetElem( vec, 1 ) ); + vmathV4SetElem( &result->col2, row, vmathV4GetElem( vec, 2 ) ); + vmathV4SetElem( &result->col3, row, vmathV4GetElem( vec, 3 ) ); +} + +static inline void vmathM4SetElem( VmathMatrix4 *result, int col, int row, float val ) +{ + VmathVector4 tmpV3_0; + vmathM4GetCol( &tmpV3_0, result, col ); + vmathV4SetElem( &tmpV3_0, row, val ); + vmathM4SetCol( result, col, &tmpV3_0 ); +} + +static inline float vmathM4GetElem( const VmathMatrix4 *mat, int col, int row ) +{ + VmathVector4 tmpV4_0; + vmathM4GetCol( &tmpV4_0, mat, col ); + return vmathV4GetElem( &tmpV4_0, row ); +} + +static inline void vmathM4GetCol0( VmathVector4 *result, const VmathMatrix4 *mat ) +{ + vmathV4Copy( result, &mat->col0 ); +} + +static inline void vmathM4GetCol1( VmathVector4 *result, const VmathMatrix4 *mat ) +{ + vmathV4Copy( result, &mat->col1 ); +} + +static inline void vmathM4GetCol2( VmathVector4 *result, const VmathMatrix4 *mat ) +{ + vmathV4Copy( result, &mat->col2 ); +} + +static inline void vmathM4GetCol3( VmathVector4 *result, const VmathMatrix4 *mat ) +{ + vmathV4Copy( result, &mat->col3 ); +} + +static inline void vmathM4GetCol( VmathVector4 *result, const VmathMatrix4 *mat, int col ) +{ + vmathV4Copy( result, (&mat->col0 + col) ); +} + +static inline void vmathM4GetRow( VmathVector4 *result, const VmathMatrix4 *mat, int row ) +{ + vmathV4MakeFromElems( result, vmathV4GetElem( &mat->col0, row ), vmathV4GetElem( &mat->col1, row ), vmathV4GetElem( &mat->col2, row ), vmathV4GetElem( &mat->col3, row ) ); +} + +static inline void vmathM4Transpose( VmathMatrix4 *result, const VmathMatrix4 *mat ) +{ + VmathMatrix4 tmpResult; + vmathV4MakeFromElems( &tmpResult.col0, mat->col0.x, mat->col1.x, mat->col2.x, mat->col3.x ); + vmathV4MakeFromElems( &tmpResult.col1, mat->col0.y, mat->col1.y, mat->col2.y, mat->col3.y ); + vmathV4MakeFromElems( &tmpResult.col2, mat->col0.z, mat->col1.z, mat->col2.z, mat->col3.z ); + vmathV4MakeFromElems( &tmpResult.col3, mat->col0.w, mat->col1.w, mat->col2.w, mat->col3.w ); + vmathM4Copy( result, &tmpResult ); +} + +static inline void vmathM4Inverse( VmathMatrix4 *result, const VmathMatrix4 *mat ) +{ + VmathVector4 res0, res1, res2, res3; + float mA, mB, mC, mD, mE, mF, mG, mH, mI, mJ, mK, mL, mM, mN, mO, mP, tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, detInv; + mA = mat->col0.x; + mB = mat->col0.y; + mC = mat->col0.z; + mD = mat->col0.w; + mE = mat->col1.x; + mF = mat->col1.y; + mG = mat->col1.z; + mH = mat->col1.w; + mI = mat->col2.x; + mJ = mat->col2.y; + mK = mat->col2.z; + mL = mat->col2.w; + mM = mat->col3.x; + mN = mat->col3.y; + mO = mat->col3.z; + mP = mat->col3.w; + tmp0 = ( ( mK * mD ) - ( mC * mL ) ); + tmp1 = ( ( mO * mH ) - ( mG * mP ) ); + tmp2 = ( ( mB * mK ) - ( mJ * mC ) ); + tmp3 = ( ( mF * mO ) - ( mN * mG ) ); + tmp4 = ( ( mJ * mD ) - ( mB * mL ) ); + tmp5 = ( ( mN * mH ) - ( mF * mP ) ); + vmathV4SetX( &res0, ( ( ( mJ * tmp1 ) - ( mL * tmp3 ) ) - ( mK * tmp5 ) ) ); + vmathV4SetY( &res0, ( ( ( mN * tmp0 ) - ( mP * tmp2 ) ) - ( mO * tmp4 ) ) ); + vmathV4SetZ( &res0, ( ( ( mD * tmp3 ) + ( mC * tmp5 ) ) - ( mB * tmp1 ) ) ); + vmathV4SetW( &res0, ( ( ( mH * tmp2 ) + ( mG * tmp4 ) ) - ( mF * tmp0 ) ) ); + detInv = ( 1.0f / ( ( ( ( mA * res0.x ) + ( mE * res0.y ) ) + ( mI * res0.z ) ) + ( mM * res0.w ) ) ); + vmathV4SetX( &res1, ( mI * tmp1 ) ); + vmathV4SetY( &res1, ( mM * tmp0 ) ); + vmathV4SetZ( &res1, ( mA * tmp1 ) ); + vmathV4SetW( &res1, ( mE * tmp0 ) ); + vmathV4SetX( &res3, ( mI * tmp3 ) ); + vmathV4SetY( &res3, ( mM * tmp2 ) ); + vmathV4SetZ( &res3, ( mA * tmp3 ) ); + vmathV4SetW( &res3, ( mE * tmp2 ) ); + vmathV4SetX( &res2, ( mI * tmp5 ) ); + vmathV4SetY( &res2, ( mM * tmp4 ) ); + vmathV4SetZ( &res2, ( mA * tmp5 ) ); + vmathV4SetW( &res2, ( mE * tmp4 ) ); + tmp0 = ( ( mI * mB ) - ( mA * mJ ) ); + tmp1 = ( ( mM * mF ) - ( mE * mN ) ); + tmp2 = ( ( mI * mD ) - ( mA * mL ) ); + tmp3 = ( ( mM * mH ) - ( mE * mP ) ); + tmp4 = ( ( mI * mC ) - ( mA * mK ) ); + tmp5 = ( ( mM * mG ) - ( mE * mO ) ); + vmathV4SetX( &res2, ( ( ( mL * tmp1 ) - ( mJ * tmp3 ) ) + res2.x ) ); + vmathV4SetY( &res2, ( ( ( mP * tmp0 ) - ( mN * tmp2 ) ) + res2.y ) ); + vmathV4SetZ( &res2, ( ( ( mB * tmp3 ) - ( mD * tmp1 ) ) - res2.z ) ); + vmathV4SetW( &res2, ( ( ( mF * tmp2 ) - ( mH * tmp0 ) ) - res2.w ) ); + vmathV4SetX( &res3, ( ( ( mJ * tmp5 ) - ( mK * tmp1 ) ) + res3.x ) ); + vmathV4SetY( &res3, ( ( ( mN * tmp4 ) - ( mO * tmp0 ) ) + res3.y ) ); + vmathV4SetZ( &res3, ( ( ( mC * tmp1 ) - ( mB * tmp5 ) ) - res3.z ) ); + vmathV4SetW( &res3, ( ( ( mG * tmp0 ) - ( mF * tmp4 ) ) - res3.w ) ); + vmathV4SetX( &res1, ( ( ( mK * tmp3 ) - ( mL * tmp5 ) ) - res1.x ) ); + vmathV4SetY( &res1, ( ( ( mO * tmp2 ) - ( mP * tmp4 ) ) - res1.y ) ); + vmathV4SetZ( &res1, ( ( ( mD * tmp5 ) - ( mC * tmp3 ) ) + res1.z ) ); + vmathV4SetW( &res1, ( ( ( mH * tmp4 ) - ( mG * tmp2 ) ) + res1.w ) ); + vmathV4ScalarMul( &result->col0, &res0, detInv ); + vmathV4ScalarMul( &result->col1, &res1, detInv ); + vmathV4ScalarMul( &result->col2, &res2, detInv ); + vmathV4ScalarMul( &result->col3, &res3, detInv ); +} + +static inline void vmathM4AffineInverse( VmathMatrix4 *result, const VmathMatrix4 *mat ) +{ + VmathTransform3 affineMat, tmpT3_0; + VmathVector3 tmpV3_0, tmpV3_1, tmpV3_2, tmpV3_3; + vmathV4GetXYZ( &tmpV3_0, &mat->col0 ); + vmathT3SetCol0( &affineMat, &tmpV3_0 ); + vmathV4GetXYZ( &tmpV3_1, &mat->col1 ); + vmathT3SetCol1( &affineMat, &tmpV3_1 ); + vmathV4GetXYZ( &tmpV3_2, &mat->col2 ); + vmathT3SetCol2( &affineMat, &tmpV3_2 ); + vmathV4GetXYZ( &tmpV3_3, &mat->col3 ); + vmathT3SetCol3( &affineMat, &tmpV3_3 ); + vmathT3Inverse( &tmpT3_0, &affineMat ); + vmathM4MakeFromT3( result, &tmpT3_0 ); +} + +static inline void vmathM4OrthoInverse( VmathMatrix4 *result, const VmathMatrix4 *mat ) +{ + VmathTransform3 affineMat, tmpT3_0; + VmathVector3 tmpV3_0, tmpV3_1, tmpV3_2, tmpV3_3; + vmathV4GetXYZ( &tmpV3_0, &mat->col0 ); + vmathT3SetCol0( &affineMat, &tmpV3_0 ); + vmathV4GetXYZ( &tmpV3_1, &mat->col1 ); + vmathT3SetCol1( &affineMat, &tmpV3_1 ); + vmathV4GetXYZ( &tmpV3_2, &mat->col2 ); + vmathT3SetCol2( &affineMat, &tmpV3_2 ); + vmathV4GetXYZ( &tmpV3_3, &mat->col3 ); + vmathT3SetCol3( &affineMat, &tmpV3_3 ); + vmathT3OrthoInverse( &tmpT3_0, &affineMat ); + vmathM4MakeFromT3( result, &tmpT3_0 ); +} + +static inline float vmathM4Determinant( const VmathMatrix4 *mat ) +{ + float dx, dy, dz, dw, mA, mB, mC, mD, mE, mF, mG, mH, mI, mJ, mK, mL, mM, mN, mO, mP, tmp0, tmp1, tmp2, tmp3, tmp4, tmp5; + mA = mat->col0.x; + mB = mat->col0.y; + mC = mat->col0.z; + mD = mat->col0.w; + mE = mat->col1.x; + mF = mat->col1.y; + mG = mat->col1.z; + mH = mat->col1.w; + mI = mat->col2.x; + mJ = mat->col2.y; + mK = mat->col2.z; + mL = mat->col2.w; + mM = mat->col3.x; + mN = mat->col3.y; + mO = mat->col3.z; + mP = mat->col3.w; + tmp0 = ( ( mK * mD ) - ( mC * mL ) ); + tmp1 = ( ( mO * mH ) - ( mG * mP ) ); + tmp2 = ( ( mB * mK ) - ( mJ * mC ) ); + tmp3 = ( ( mF * mO ) - ( mN * mG ) ); + tmp4 = ( ( mJ * mD ) - ( mB * mL ) ); + tmp5 = ( ( mN * mH ) - ( mF * mP ) ); + dx = ( ( ( mJ * tmp1 ) - ( mL * tmp3 ) ) - ( mK * tmp5 ) ); + dy = ( ( ( mN * tmp0 ) - ( mP * tmp2 ) ) - ( mO * tmp4 ) ); + dz = ( ( ( mD * tmp3 ) + ( mC * tmp5 ) ) - ( mB * tmp1 ) ); + dw = ( ( ( mH * tmp2 ) + ( mG * tmp4 ) ) - ( mF * tmp0 ) ); + return ( ( ( ( mA * dx ) + ( mE * dy ) ) + ( mI * dz ) ) + ( mM * dw ) ); +} + +static inline void vmathM4Add( VmathMatrix4 *result, const VmathMatrix4 *mat0, const VmathMatrix4 *mat1 ) +{ + vmathV4Add( &result->col0, &mat0->col0, &mat1->col0 ); + vmathV4Add( &result->col1, &mat0->col1, &mat1->col1 ); + vmathV4Add( &result->col2, &mat0->col2, &mat1->col2 ); + vmathV4Add( &result->col3, &mat0->col3, &mat1->col3 ); +} + +static inline void vmathM4Sub( VmathMatrix4 *result, const VmathMatrix4 *mat0, const VmathMatrix4 *mat1 ) +{ + vmathV4Sub( &result->col0, &mat0->col0, &mat1->col0 ); + vmathV4Sub( &result->col1, &mat0->col1, &mat1->col1 ); + vmathV4Sub( &result->col2, &mat0->col2, &mat1->col2 ); + vmathV4Sub( &result->col3, &mat0->col3, &mat1->col3 ); +} + +static inline void vmathM4Neg( VmathMatrix4 *result, const VmathMatrix4 *mat ) +{ + vmathV4Neg( &result->col0, &mat->col0 ); + vmathV4Neg( &result->col1, &mat->col1 ); + vmathV4Neg( &result->col2, &mat->col2 ); + vmathV4Neg( &result->col3, &mat->col3 ); +} + +static inline void vmathM4AbsPerElem( VmathMatrix4 *result, const VmathMatrix4 *mat ) +{ + vmathV4AbsPerElem( &result->col0, &mat->col0 ); + vmathV4AbsPerElem( &result->col1, &mat->col1 ); + vmathV4AbsPerElem( &result->col2, &mat->col2 ); + vmathV4AbsPerElem( &result->col3, &mat->col3 ); +} + +static inline void vmathM4ScalarMul( VmathMatrix4 *result, const VmathMatrix4 *mat, float scalar ) +{ + vmathV4ScalarMul( &result->col0, &mat->col0, scalar ); + vmathV4ScalarMul( &result->col1, &mat->col1, scalar ); + vmathV4ScalarMul( &result->col2, &mat->col2, scalar ); + vmathV4ScalarMul( &result->col3, &mat->col3, scalar ); +} + +static inline void vmathM4MulV4( VmathVector4 *result, const VmathMatrix4 *mat, const VmathVector4 *vec ) +{ + float tmpX, tmpY, tmpZ, tmpW; + tmpX = ( ( ( ( mat->col0.x * vec->x ) + ( mat->col1.x * vec->y ) ) + ( mat->col2.x * vec->z ) ) + ( mat->col3.x * vec->w ) ); + tmpY = ( ( ( ( mat->col0.y * vec->x ) + ( mat->col1.y * vec->y ) ) + ( mat->col2.y * vec->z ) ) + ( mat->col3.y * vec->w ) ); + tmpZ = ( ( ( ( mat->col0.z * vec->x ) + ( mat->col1.z * vec->y ) ) + ( mat->col2.z * vec->z ) ) + ( mat->col3.z * vec->w ) ); + tmpW = ( ( ( ( mat->col0.w * vec->x ) + ( mat->col1.w * vec->y ) ) + ( mat->col2.w * vec->z ) ) + ( mat->col3.w * vec->w ) ); + vmathV4MakeFromElems( result, tmpX, tmpY, tmpZ, tmpW ); +} + +static inline void vmathM4MulV3( VmathVector4 *result, const VmathMatrix4 *mat, const VmathVector3 *vec ) +{ + result->x = ( ( ( mat->col0.x * vec->x ) + ( mat->col1.x * vec->y ) ) + ( mat->col2.x * vec->z ) ); + result->y = ( ( ( mat->col0.y * vec->x ) + ( mat->col1.y * vec->y ) ) + ( mat->col2.y * vec->z ) ); + result->z = ( ( ( mat->col0.z * vec->x ) + ( mat->col1.z * vec->y ) ) + ( mat->col2.z * vec->z ) ); + result->w = ( ( ( mat->col0.w * vec->x ) + ( mat->col1.w * vec->y ) ) + ( mat->col2.w * vec->z ) ); +} + +static inline void vmathM4MulP3( VmathVector4 *result, const VmathMatrix4 *mat, const VmathPoint3 *pnt ) +{ + result->x = ( ( ( ( mat->col0.x * pnt->x ) + ( mat->col1.x * pnt->y ) ) + ( mat->col2.x * pnt->z ) ) + mat->col3.x ); + result->y = ( ( ( ( mat->col0.y * pnt->x ) + ( mat->col1.y * pnt->y ) ) + ( mat->col2.y * pnt->z ) ) + mat->col3.y ); + result->z = ( ( ( ( mat->col0.z * pnt->x ) + ( mat->col1.z * pnt->y ) ) + ( mat->col2.z * pnt->z ) ) + mat->col3.z ); + result->w = ( ( ( ( mat->col0.w * pnt->x ) + ( mat->col1.w * pnt->y ) ) + ( mat->col2.w * pnt->z ) ) + mat->col3.w ); +} + +static inline void vmathM4Mul( VmathMatrix4 *result, const VmathMatrix4 *mat0, const VmathMatrix4 *mat1 ) +{ + VmathMatrix4 tmpResult; + vmathM4MulV4( &tmpResult.col0, mat0, &mat1->col0 ); + vmathM4MulV4( &tmpResult.col1, mat0, &mat1->col1 ); + vmathM4MulV4( &tmpResult.col2, mat0, &mat1->col2 ); + vmathM4MulV4( &tmpResult.col3, mat0, &mat1->col3 ); + vmathM4Copy( result, &tmpResult ); +} + +static inline void vmathM4MulT3( VmathMatrix4 *result, const VmathMatrix4 *mat, const VmathTransform3 *tfrm1 ) +{ + VmathMatrix4 tmpResult; + VmathPoint3 tmpP3_0; + vmathM4MulV3( &tmpResult.col0, mat, &tfrm1->col0 ); + vmathM4MulV3( &tmpResult.col1, mat, &tfrm1->col1 ); + vmathM4MulV3( &tmpResult.col2, mat, &tfrm1->col2 ); + vmathP3MakeFromV3( &tmpP3_0, &tfrm1->col3 ); + vmathM4MulP3( &tmpResult.col3, mat, &tmpP3_0 ); + vmathM4Copy( result, &tmpResult ); +} + +static inline void vmathM4MulPerElem( VmathMatrix4 *result, const VmathMatrix4 *mat0, const VmathMatrix4 *mat1 ) +{ + vmathV4MulPerElem( &result->col0, &mat0->col0, &mat1->col0 ); + vmathV4MulPerElem( &result->col1, &mat0->col1, &mat1->col1 ); + vmathV4MulPerElem( &result->col2, &mat0->col2, &mat1->col2 ); + vmathV4MulPerElem( &result->col3, &mat0->col3, &mat1->col3 ); +} + +static inline void vmathM4MakeIdentity( VmathMatrix4 *result ) +{ + vmathV4MakeXAxis( &result->col0 ); + vmathV4MakeYAxis( &result->col1 ); + vmathV4MakeZAxis( &result->col2 ); + vmathV4MakeWAxis( &result->col3 ); +} + +static inline void vmathM4SetUpper3x3( VmathMatrix4 *result, const VmathMatrix3 *mat3 ) +{ + vmathV4SetXYZ( &result->col0, &mat3->col0 ); + vmathV4SetXYZ( &result->col1, &mat3->col1 ); + vmathV4SetXYZ( &result->col2, &mat3->col2 ); +} + +static inline void vmathM4GetUpper3x3( VmathMatrix3 *result, const VmathMatrix4 *mat ) +{ + vmathV4GetXYZ( &result->col0, &mat->col0 ); + vmathV4GetXYZ( &result->col1, &mat->col1 ); + vmathV4GetXYZ( &result->col2, &mat->col2 ); +} + +static inline void vmathM4SetTranslation( VmathMatrix4 *result, const VmathVector3 *translateVec ) +{ + vmathV4SetXYZ( &result->col3, translateVec ); +} + +static inline void vmathM4GetTranslation( VmathVector3 *result, const VmathMatrix4 *mat ) +{ + vmathV4GetXYZ( result, &mat->col3 ); +} + +static inline void vmathM4MakeRotationX( VmathMatrix4 *result, float radians ) +{ + float s, c; + s = sinf( radians ); + c = cosf( radians ); + vmathV4MakeXAxis( &result->col0 ); + vmathV4MakeFromElems( &result->col1, 0.0f, c, s, 0.0f ); + vmathV4MakeFromElems( &result->col2, 0.0f, -s, c, 0.0f ); + vmathV4MakeWAxis( &result->col3 ); +} + +static inline void vmathM4MakeRotationY( VmathMatrix4 *result, float radians ) +{ + float s, c; + s = sinf( radians ); + c = cosf( radians ); + vmathV4MakeFromElems( &result->col0, c, 0.0f, -s, 0.0f ); + vmathV4MakeYAxis( &result->col1 ); + vmathV4MakeFromElems( &result->col2, s, 0.0f, c, 0.0f ); + vmathV4MakeWAxis( &result->col3 ); +} + +static inline void vmathM4MakeRotationZ( VmathMatrix4 *result, float radians ) +{ + float s, c; + s = sinf( radians ); + c = cosf( radians ); + vmathV4MakeFromElems( &result->col0, c, s, 0.0f, 0.0f ); + vmathV4MakeFromElems( &result->col1, -s, c, 0.0f, 0.0f ); + vmathV4MakeZAxis( &result->col2 ); + vmathV4MakeWAxis( &result->col3 ); +} + +static inline void vmathM4MakeRotationZYX( VmathMatrix4 *result, const VmathVector3 *radiansXYZ ) +{ + float sX, cX, sY, cY, sZ, cZ, tmp0, tmp1; + sX = sinf( radiansXYZ->x ); + cX = cosf( radiansXYZ->x ); + sY = sinf( radiansXYZ->y ); + cY = cosf( radiansXYZ->y ); + sZ = sinf( radiansXYZ->z ); + cZ = cosf( radiansXYZ->z ); + tmp0 = ( cZ * sY ); + tmp1 = ( sZ * sY ); + vmathV4MakeFromElems( &result->col0, ( cZ * cY ), ( sZ * cY ), -sY, 0.0f ); + vmathV4MakeFromElems( &result->col1, ( ( tmp0 * sX ) - ( sZ * cX ) ), ( ( tmp1 * sX ) + ( cZ * cX ) ), ( cY * sX ), 0.0f ); + vmathV4MakeFromElems( &result->col2, ( ( tmp0 * cX ) + ( sZ * sX ) ), ( ( tmp1 * cX ) - ( cZ * sX ) ), ( cY * cX ), 0.0f ); + vmathV4MakeWAxis( &result->col3 ); +} + +static inline void vmathM4MakeRotationAxis( VmathMatrix4 *result, float radians, const VmathVector3 *unitVec ) +{ + float x, y, z, s, c, oneMinusC, xy, yz, zx; + s = sinf( radians ); + c = cosf( radians ); + x = unitVec->x; + y = unitVec->y; + z = unitVec->z; + xy = ( x * y ); + yz = ( y * z ); + zx = ( z * x ); + oneMinusC = ( 1.0f - c ); + vmathV4MakeFromElems( &result->col0, ( ( ( x * x ) * oneMinusC ) + c ), ( ( xy * oneMinusC ) + ( z * s ) ), ( ( zx * oneMinusC ) - ( y * s ) ), 0.0f ); + vmathV4MakeFromElems( &result->col1, ( ( xy * oneMinusC ) - ( z * s ) ), ( ( ( y * y ) * oneMinusC ) + c ), ( ( yz * oneMinusC ) + ( x * s ) ), 0.0f ); + vmathV4MakeFromElems( &result->col2, ( ( zx * oneMinusC ) + ( y * s ) ), ( ( yz * oneMinusC ) - ( x * s ) ), ( ( ( z * z ) * oneMinusC ) + c ), 0.0f ); + vmathV4MakeWAxis( &result->col3 ); +} + +static inline void vmathM4MakeRotationQ( VmathMatrix4 *result, const VmathQuat *unitQuat ) +{ + VmathTransform3 tmpT3_0; + vmathT3MakeRotationQ( &tmpT3_0, unitQuat ); + vmathM4MakeFromT3( result, &tmpT3_0 ); +} + +static inline void vmathM4MakeScale( VmathMatrix4 *result, const VmathVector3 *scaleVec ) +{ + vmathV4MakeFromElems( &result->col0, scaleVec->x, 0.0f, 0.0f, 0.0f ); + vmathV4MakeFromElems( &result->col1, 0.0f, scaleVec->y, 0.0f, 0.0f ); + vmathV4MakeFromElems( &result->col2, 0.0f, 0.0f, scaleVec->z, 0.0f ); + vmathV4MakeWAxis( &result->col3 ); +} + +static inline void vmathM4AppendScale( VmathMatrix4 *result, const VmathMatrix4 *mat, const VmathVector3 *scaleVec ) +{ + vmathV4ScalarMul( &result->col0, &mat->col0, vmathV3GetX( scaleVec ) ); + vmathV4ScalarMul( &result->col1, &mat->col1, vmathV3GetY( scaleVec ) ); + vmathV4ScalarMul( &result->col2, &mat->col2, vmathV3GetZ( scaleVec ) ); + vmathV4Copy( &result->col3, &mat->col3 ); +} + +static inline void vmathM4PrependScale( VmathMatrix4 *result, const VmathVector3 *scaleVec, const VmathMatrix4 *mat ) +{ + VmathVector4 scale4; + vmathV4MakeFromV3Scalar( &scale4, scaleVec, 1.0f ); + vmathV4MulPerElem( &result->col0, &mat->col0, &scale4 ); + vmathV4MulPerElem( &result->col1, &mat->col1, &scale4 ); + vmathV4MulPerElem( &result->col2, &mat->col2, &scale4 ); + vmathV4MulPerElem( &result->col3, &mat->col3, &scale4 ); +} + +static inline void vmathM4MakeTranslation( VmathMatrix4 *result, const VmathVector3 *translateVec ) +{ + vmathV4MakeXAxis( &result->col0 ); + vmathV4MakeYAxis( &result->col1 ); + vmathV4MakeZAxis( &result->col2 ); + vmathV4MakeFromV3Scalar( &result->col3, translateVec, 1.0f ); +} + +static inline void vmathM4MakeLookAt( VmathMatrix4 *result, const VmathPoint3 *eyePos, const VmathPoint3 *lookAtPos, const VmathVector3 *upVec ) +{ + VmathMatrix4 m4EyeFrame; + VmathVector3 v3X, v3Y, v3Z, tmpV3_0, tmpV3_1; + VmathVector4 tmpV4_0, tmpV4_1, tmpV4_2, tmpV4_3; + vmathV3Normalize( &v3Y, upVec ); + vmathP3Sub( &tmpV3_0, eyePos, lookAtPos ); + vmathV3Normalize( &v3Z, &tmpV3_0 ); + vmathV3Cross( &tmpV3_1, &v3Y, &v3Z ); + vmathV3Normalize( &v3X, &tmpV3_1 ); + vmathV3Cross( &v3Y, &v3Z, &v3X ); + vmathV4MakeFromV3( &tmpV4_0, &v3X ); + vmathV4MakeFromV3( &tmpV4_1, &v3Y ); + vmathV4MakeFromV3( &tmpV4_2, &v3Z ); + vmathV4MakeFromP3( &tmpV4_3, eyePos ); + vmathM4MakeFromCols( &m4EyeFrame, &tmpV4_0, &tmpV4_1, &tmpV4_2, &tmpV4_3 ); + vmathM4OrthoInverse( result, &m4EyeFrame ); +} + +static inline void vmathM4MakePerspective( VmathMatrix4 *result, float fovyRadians, float aspect, float zNear, float zFar ) +{ + float f, rangeInv; + f = tanf( ( (float)( _VECTORMATH_PI_OVER_2 ) - ( 0.5f * fovyRadians ) ) ); + rangeInv = ( 1.0f / ( zNear - zFar ) ); + vmathV4MakeFromElems( &result->col0, ( f / aspect ), 0.0f, 0.0f, 0.0f ); + vmathV4MakeFromElems( &result->col1, 0.0f, f, 0.0f, 0.0f ); + vmathV4MakeFromElems( &result->col2, 0.0f, 0.0f, ( ( zNear + zFar ) * rangeInv ), -1.0f ); + vmathV4MakeFromElems( &result->col3, 0.0f, 0.0f, ( ( ( zNear * zFar ) * rangeInv ) * 2.0f ), 0.0f ); +} + +static inline void vmathM4MakeFrustum( VmathMatrix4 *result, float left, float right, float bottom, float top, float zNear, float zFar ) +{ + float sum_rl, sum_tb, sum_nf, inv_rl, inv_tb, inv_nf, n2; + sum_rl = ( right + left ); + sum_tb = ( top + bottom ); + sum_nf = ( zNear + zFar ); + inv_rl = ( 1.0f / ( right - left ) ); + inv_tb = ( 1.0f / ( top - bottom ) ); + inv_nf = ( 1.0f / ( zNear - zFar ) ); + n2 = ( zNear + zNear ); + vmathV4MakeFromElems( &result->col0, ( n2 * inv_rl ), 0.0f, 0.0f, 0.0f ); + vmathV4MakeFromElems( &result->col1, 0.0f, ( n2 * inv_tb ), 0.0f, 0.0f ); + vmathV4MakeFromElems( &result->col2, ( sum_rl * inv_rl ), ( sum_tb * inv_tb ), ( sum_nf * inv_nf ), -1.0f ); + vmathV4MakeFromElems( &result->col3, 0.0f, 0.0f, ( ( n2 * inv_nf ) * zFar ), 0.0f ); +} + +static inline void vmathM4MakeOrthographic( VmathMatrix4 *result, float left, float right, float bottom, float top, float zNear, float zFar ) +{ + float sum_rl, sum_tb, sum_nf, inv_rl, inv_tb, inv_nf; + sum_rl = ( right + left ); + sum_tb = ( top + bottom ); + sum_nf = ( zNear + zFar ); + inv_rl = ( 1.0f / ( right - left ) ); + inv_tb = ( 1.0f / ( top - bottom ) ); + inv_nf = ( 1.0f / ( zNear - zFar ) ); + vmathV4MakeFromElems( &result->col0, ( inv_rl + inv_rl ), 0.0f, 0.0f, 0.0f ); + vmathV4MakeFromElems( &result->col1, 0.0f, ( inv_tb + inv_tb ), 0.0f, 0.0f ); + vmathV4MakeFromElems( &result->col2, 0.0f, 0.0f, ( inv_nf + inv_nf ), 0.0f ); + vmathV4MakeFromElems( &result->col3, ( -sum_rl * inv_rl ), ( -sum_tb * inv_tb ), ( sum_nf * inv_nf ), 1.0f ); +} + +static inline void vmathM4Select( VmathMatrix4 *result, const VmathMatrix4 *mat0, const VmathMatrix4 *mat1, unsigned int select1 ) +{ + vmathV4Select( &result->col0, &mat0->col0, &mat1->col0, select1 ); + vmathV4Select( &result->col1, &mat0->col1, &mat1->col1, select1 ); + vmathV4Select( &result->col2, &mat0->col2, &mat1->col2, select1 ); + vmathV4Select( &result->col3, &mat0->col3, &mat1->col3, select1 ); +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathM4Print( const VmathMatrix4 *mat ) +{ + VmathVector4 tmpV4_0, tmpV4_1, tmpV4_2, tmpV4_3; + vmathM4GetRow( &tmpV4_0, mat, 0 ); + vmathV4Print( &tmpV4_0 ); + vmathM4GetRow( &tmpV4_1, mat, 1 ); + vmathV4Print( &tmpV4_1 ); + vmathM4GetRow( &tmpV4_2, mat, 2 ); + vmathV4Print( &tmpV4_2 ); + vmathM4GetRow( &tmpV4_3, mat, 3 ); + vmathV4Print( &tmpV4_3 ); +} + +static inline void vmathM4Prints( const VmathMatrix4 *mat, const char *name ) +{ + printf("%s:\n", name); + vmathM4Print( mat ); +} + +#endif + +static inline void vmathT3Copy( VmathTransform3 *result, const VmathTransform3 *tfrm ) +{ + vmathV3Copy( &result->col0, &tfrm->col0 ); + vmathV3Copy( &result->col1, &tfrm->col1 ); + vmathV3Copy( &result->col2, &tfrm->col2 ); + vmathV3Copy( &result->col3, &tfrm->col3 ); +} + +static inline void vmathT3MakeFromScalar( VmathTransform3 *result, float scalar ) +{ + vmathV3MakeFromScalar( &result->col0, scalar ); + vmathV3MakeFromScalar( &result->col1, scalar ); + vmathV3MakeFromScalar( &result->col2, scalar ); + vmathV3MakeFromScalar( &result->col3, scalar ); +} + +static inline void vmathT3MakeFromCols( VmathTransform3 *result, const VmathVector3 *_col0, const VmathVector3 *_col1, const VmathVector3 *_col2, const VmathVector3 *_col3 ) +{ + vmathV3Copy( &result->col0, _col0 ); + vmathV3Copy( &result->col1, _col1 ); + vmathV3Copy( &result->col2, _col2 ); + vmathV3Copy( &result->col3, _col3 ); +} + +static inline void vmathT3MakeFromM3V3( VmathTransform3 *result, const VmathMatrix3 *tfrm, const VmathVector3 *translateVec ) +{ + vmathT3SetUpper3x3( result, tfrm ); + vmathT3SetTranslation( result, translateVec ); +} + +static inline void vmathT3MakeFromQV3( VmathTransform3 *result, const VmathQuat *unitQuat, const VmathVector3 *translateVec ) +{ + VmathMatrix3 tmpM3_0; + vmathM3MakeFromQ( &tmpM3_0, unitQuat ); + vmathT3SetUpper3x3( result, &tmpM3_0 ); + vmathT3SetTranslation( result, translateVec ); +} + +static inline void vmathT3SetCol0( VmathTransform3 *result, const VmathVector3 *_col0 ) +{ + vmathV3Copy( &result->col0, _col0 ); +} + +static inline void vmathT3SetCol1( VmathTransform3 *result, const VmathVector3 *_col1 ) +{ + vmathV3Copy( &result->col1, _col1 ); +} + +static inline void vmathT3SetCol2( VmathTransform3 *result, const VmathVector3 *_col2 ) +{ + vmathV3Copy( &result->col2, _col2 ); +} + +static inline void vmathT3SetCol3( VmathTransform3 *result, const VmathVector3 *_col3 ) +{ + vmathV3Copy( &result->col3, _col3 ); +} + +static inline void vmathT3SetCol( VmathTransform3 *result, int col, const VmathVector3 *vec ) +{ + vmathV3Copy( (&result->col0 + col), vec ); +} + +static inline void vmathT3SetRow( VmathTransform3 *result, int row, const VmathVector4 *vec ) +{ + vmathV3SetElem( &result->col0, row, vmathV4GetElem( vec, 0 ) ); + vmathV3SetElem( &result->col1, row, vmathV4GetElem( vec, 1 ) ); + vmathV3SetElem( &result->col2, row, vmathV4GetElem( vec, 2 ) ); + vmathV3SetElem( &result->col3, row, vmathV4GetElem( vec, 3 ) ); +} + +static inline void vmathT3SetElem( VmathTransform3 *result, int col, int row, float val ) +{ + VmathVector3 tmpV3_0; + vmathT3GetCol( &tmpV3_0, result, col ); + vmathV3SetElem( &tmpV3_0, row, val ); + vmathT3SetCol( result, col, &tmpV3_0 ); +} + +static inline float vmathT3GetElem( const VmathTransform3 *tfrm, int col, int row ) +{ + VmathVector3 tmpV3_0; + vmathT3GetCol( &tmpV3_0, tfrm, col ); + return vmathV3GetElem( &tmpV3_0, row ); +} + +static inline void vmathT3GetCol0( VmathVector3 *result, const VmathTransform3 *tfrm ) +{ + vmathV3Copy( result, &tfrm->col0 ); +} + +static inline void vmathT3GetCol1( VmathVector3 *result, const VmathTransform3 *tfrm ) +{ + vmathV3Copy( result, &tfrm->col1 ); +} + +static inline void vmathT3GetCol2( VmathVector3 *result, const VmathTransform3 *tfrm ) +{ + vmathV3Copy( result, &tfrm->col2 ); +} + +static inline void vmathT3GetCol3( VmathVector3 *result, const VmathTransform3 *tfrm ) +{ + vmathV3Copy( result, &tfrm->col3 ); +} + +static inline void vmathT3GetCol( VmathVector3 *result, const VmathTransform3 *tfrm, int col ) +{ + vmathV3Copy( result, (&tfrm->col0 + col) ); +} + +static inline void vmathT3GetRow( VmathVector4 *result, const VmathTransform3 *tfrm, int row ) +{ + vmathV4MakeFromElems( result, vmathV3GetElem( &tfrm->col0, row ), vmathV3GetElem( &tfrm->col1, row ), vmathV3GetElem( &tfrm->col2, row ), vmathV3GetElem( &tfrm->col3, row ) ); +} + +static inline void vmathT3Inverse( VmathTransform3 *result, const VmathTransform3 *tfrm ) +{ + VmathVector3 tmp0, tmp1, tmp2, inv0, inv1, inv2, tmpV3_0, tmpV3_1, tmpV3_2, tmpV3_3, tmpV3_4, tmpV3_5; + float detinv; + vmathV3Cross( &tmp0, &tfrm->col1, &tfrm->col2 ); + vmathV3Cross( &tmp1, &tfrm->col2, &tfrm->col0 ); + vmathV3Cross( &tmp2, &tfrm->col0, &tfrm->col1 ); + detinv = ( 1.0f / vmathV3Dot( &tfrm->col2, &tmp2 ) ); + vmathV3MakeFromElems( &inv0, ( tmp0.x * detinv ), ( tmp1.x * detinv ), ( tmp2.x * detinv ) ); + vmathV3MakeFromElems( &inv1, ( tmp0.y * detinv ), ( tmp1.y * detinv ), ( tmp2.y * detinv ) ); + vmathV3MakeFromElems( &inv2, ( tmp0.z * detinv ), ( tmp1.z * detinv ), ( tmp2.z * detinv ) ); + vmathV3Copy( &result->col0, &inv0 ); + vmathV3Copy( &result->col1, &inv1 ); + vmathV3Copy( &result->col2, &inv2 ); + vmathV3ScalarMul( &tmpV3_0, &inv0, tfrm->col3.x ); + vmathV3ScalarMul( &tmpV3_1, &inv1, tfrm->col3.y ); + vmathV3ScalarMul( &tmpV3_2, &inv2, tfrm->col3.z ); + vmathV3Add( &tmpV3_3, &tmpV3_1, &tmpV3_2 ); + vmathV3Add( &tmpV3_4, &tmpV3_0, &tmpV3_3 ); + vmathV3Neg( &tmpV3_5, &tmpV3_4 ); + vmathV3Copy( &result->col3, &tmpV3_5 ); +} + +static inline void vmathT3OrthoInverse( VmathTransform3 *result, const VmathTransform3 *tfrm ) +{ + VmathVector3 inv0, inv1, inv2, tmpV3_0, tmpV3_1, tmpV3_2, tmpV3_3, tmpV3_4, tmpV3_5; + vmathV3MakeFromElems( &inv0, tfrm->col0.x, tfrm->col1.x, tfrm->col2.x ); + vmathV3MakeFromElems( &inv1, tfrm->col0.y, tfrm->col1.y, tfrm->col2.y ); + vmathV3MakeFromElems( &inv2, tfrm->col0.z, tfrm->col1.z, tfrm->col2.z ); + vmathV3Copy( &result->col0, &inv0 ); + vmathV3Copy( &result->col1, &inv1 ); + vmathV3Copy( &result->col2, &inv2 ); + vmathV3ScalarMul( &tmpV3_0, &inv0, tfrm->col3.x ); + vmathV3ScalarMul( &tmpV3_1, &inv1, tfrm->col3.y ); + vmathV3ScalarMul( &tmpV3_2, &inv2, tfrm->col3.z ); + vmathV3Add( &tmpV3_3, &tmpV3_1, &tmpV3_2 ); + vmathV3Add( &tmpV3_4, &tmpV3_0, &tmpV3_3 ); + vmathV3Neg( &tmpV3_5, &tmpV3_4 ); + vmathV3Copy( &result->col3, &tmpV3_5 ); +} + +static inline void vmathT3AbsPerElem( VmathTransform3 *result, const VmathTransform3 *tfrm ) +{ + vmathV3AbsPerElem( &result->col0, &tfrm->col0 ); + vmathV3AbsPerElem( &result->col1, &tfrm->col1 ); + vmathV3AbsPerElem( &result->col2, &tfrm->col2 ); + vmathV3AbsPerElem( &result->col3, &tfrm->col3 ); +} + +static inline void vmathT3MulV3( VmathVector3 *result, const VmathTransform3 *tfrm, const VmathVector3 *vec ) +{ + float tmpX, tmpY, tmpZ; + tmpX = ( ( ( tfrm->col0.x * vec->x ) + ( tfrm->col1.x * vec->y ) ) + ( tfrm->col2.x * vec->z ) ); + tmpY = ( ( ( tfrm->col0.y * vec->x ) + ( tfrm->col1.y * vec->y ) ) + ( tfrm->col2.y * vec->z ) ); + tmpZ = ( ( ( tfrm->col0.z * vec->x ) + ( tfrm->col1.z * vec->y ) ) + ( tfrm->col2.z * vec->z ) ); + vmathV3MakeFromElems( result, tmpX, tmpY, tmpZ ); +} + +static inline void vmathT3MulP3( VmathPoint3 *result, const VmathTransform3 *tfrm, const VmathPoint3 *pnt ) +{ + float tmpX, tmpY, tmpZ; + tmpX = ( ( ( ( tfrm->col0.x * pnt->x ) + ( tfrm->col1.x * pnt->y ) ) + ( tfrm->col2.x * pnt->z ) ) + tfrm->col3.x ); + tmpY = ( ( ( ( tfrm->col0.y * pnt->x ) + ( tfrm->col1.y * pnt->y ) ) + ( tfrm->col2.y * pnt->z ) ) + tfrm->col3.y ); + tmpZ = ( ( ( ( tfrm->col0.z * pnt->x ) + ( tfrm->col1.z * pnt->y ) ) + ( tfrm->col2.z * pnt->z ) ) + tfrm->col3.z ); + vmathP3MakeFromElems( result, tmpX, tmpY, tmpZ ); +} + +static inline void vmathT3Mul( VmathTransform3 *result, const VmathTransform3 *tfrm0, const VmathTransform3 *tfrm1 ) +{ + VmathTransform3 tmpResult; + VmathPoint3 tmpP3_0, tmpP3_1; + vmathT3MulV3( &tmpResult.col0, tfrm0, &tfrm1->col0 ); + vmathT3MulV3( &tmpResult.col1, tfrm0, &tfrm1->col1 ); + vmathT3MulV3( &tmpResult.col2, tfrm0, &tfrm1->col2 ); + vmathP3MakeFromV3( &tmpP3_0, &tfrm1->col3 ); + vmathT3MulP3( &tmpP3_1, tfrm0, &tmpP3_0 ); + vmathV3MakeFromP3( &tmpResult.col3, &tmpP3_1 ); + vmathT3Copy( result, &tmpResult ); +} + +static inline void vmathT3MulPerElem( VmathTransform3 *result, const VmathTransform3 *tfrm0, const VmathTransform3 *tfrm1 ) +{ + vmathV3MulPerElem( &result->col0, &tfrm0->col0, &tfrm1->col0 ); + vmathV3MulPerElem( &result->col1, &tfrm0->col1, &tfrm1->col1 ); + vmathV3MulPerElem( &result->col2, &tfrm0->col2, &tfrm1->col2 ); + vmathV3MulPerElem( &result->col3, &tfrm0->col3, &tfrm1->col3 ); +} + +static inline void vmathT3MakeIdentity( VmathTransform3 *result ) +{ + vmathV3MakeXAxis( &result->col0 ); + vmathV3MakeYAxis( &result->col1 ); + vmathV3MakeZAxis( &result->col2 ); + vmathV3MakeFromScalar( &result->col3, 0.0f ); +} + +static inline void vmathT3SetUpper3x3( VmathTransform3 *result, const VmathMatrix3 *tfrm ) +{ + vmathV3Copy( &result->col0, &tfrm->col0 ); + vmathV3Copy( &result->col1, &tfrm->col1 ); + vmathV3Copy( &result->col2, &tfrm->col2 ); +} + +static inline void vmathT3GetUpper3x3( VmathMatrix3 *result, const VmathTransform3 *tfrm ) +{ + vmathM3MakeFromCols( result, &tfrm->col0, &tfrm->col1, &tfrm->col2 ); +} + +static inline void vmathT3SetTranslation( VmathTransform3 *result, const VmathVector3 *translateVec ) +{ + vmathV3Copy( &result->col3, translateVec ); +} + +static inline void vmathT3GetTranslation( VmathVector3 *result, const VmathTransform3 *tfrm ) +{ + vmathV3Copy( result, &tfrm->col3 ); +} + +static inline void vmathT3MakeRotationX( VmathTransform3 *result, float radians ) +{ + float s, c; + s = sinf( radians ); + c = cosf( radians ); + vmathV3MakeXAxis( &result->col0 ); + vmathV3MakeFromElems( &result->col1, 0.0f, c, s ); + vmathV3MakeFromElems( &result->col2, 0.0f, -s, c ); + vmathV3MakeFromScalar( &result->col3, 0.0f ); +} + +static inline void vmathT3MakeRotationY( VmathTransform3 *result, float radians ) +{ + float s, c; + s = sinf( radians ); + c = cosf( radians ); + vmathV3MakeFromElems( &result->col0, c, 0.0f, -s ); + vmathV3MakeYAxis( &result->col1 ); + vmathV3MakeFromElems( &result->col2, s, 0.0f, c ); + vmathV3MakeFromScalar( &result->col3, 0.0f ); +} + +static inline void vmathT3MakeRotationZ( VmathTransform3 *result, float radians ) +{ + float s, c; + s = sinf( radians ); + c = cosf( radians ); + vmathV3MakeFromElems( &result->col0, c, s, 0.0f ); + vmathV3MakeFromElems( &result->col1, -s, c, 0.0f ); + vmathV3MakeZAxis( &result->col2 ); + vmathV3MakeFromScalar( &result->col3, 0.0f ); +} + +static inline void vmathT3MakeRotationZYX( VmathTransform3 *result, const VmathVector3 *radiansXYZ ) +{ + float sX, cX, sY, cY, sZ, cZ, tmp0, tmp1; + sX = sinf( radiansXYZ->x ); + cX = cosf( radiansXYZ->x ); + sY = sinf( radiansXYZ->y ); + cY = cosf( radiansXYZ->y ); + sZ = sinf( radiansXYZ->z ); + cZ = cosf( radiansXYZ->z ); + tmp0 = ( cZ * sY ); + tmp1 = ( sZ * sY ); + vmathV3MakeFromElems( &result->col0, ( cZ * cY ), ( sZ * cY ), -sY ); + vmathV3MakeFromElems( &result->col1, ( ( tmp0 * sX ) - ( sZ * cX ) ), ( ( tmp1 * sX ) + ( cZ * cX ) ), ( cY * sX ) ); + vmathV3MakeFromElems( &result->col2, ( ( tmp0 * cX ) + ( sZ * sX ) ), ( ( tmp1 * cX ) - ( cZ * sX ) ), ( cY * cX ) ); + vmathV3MakeFromScalar( &result->col3, 0.0f ); +} + +static inline void vmathT3MakeRotationAxis( VmathTransform3 *result, float radians, const VmathVector3 *unitVec ) +{ + VmathMatrix3 tmpM3_0; + VmathVector3 tmpV3_0; + vmathM3MakeRotationAxis( &tmpM3_0, radians, unitVec ); + vmathV3MakeFromScalar( &tmpV3_0, 0.0f ); + vmathT3MakeFromM3V3( result, &tmpM3_0, &tmpV3_0 ); +} + +static inline void vmathT3MakeRotationQ( VmathTransform3 *result, const VmathQuat *unitQuat ) +{ + VmathMatrix3 tmpM3_0; + VmathVector3 tmpV3_0; + vmathM3MakeFromQ( &tmpM3_0, unitQuat ); + vmathV3MakeFromScalar( &tmpV3_0, 0.0f ); + vmathT3MakeFromM3V3( result, &tmpM3_0, &tmpV3_0 ); +} + +static inline void vmathT3MakeScale( VmathTransform3 *result, const VmathVector3 *scaleVec ) +{ + vmathV3MakeFromElems( &result->col0, scaleVec->x, 0.0f, 0.0f ); + vmathV3MakeFromElems( &result->col1, 0.0f, scaleVec->y, 0.0f ); + vmathV3MakeFromElems( &result->col2, 0.0f, 0.0f, scaleVec->z ); + vmathV3MakeFromScalar( &result->col3, 0.0f ); +} + +static inline void vmathT3AppendScale( VmathTransform3 *result, const VmathTransform3 *tfrm, const VmathVector3 *scaleVec ) +{ + vmathV3ScalarMul( &result->col0, &tfrm->col0, vmathV3GetX( scaleVec ) ); + vmathV3ScalarMul( &result->col1, &tfrm->col1, vmathV3GetY( scaleVec ) ); + vmathV3ScalarMul( &result->col2, &tfrm->col2, vmathV3GetZ( scaleVec ) ); + vmathV3Copy( &result->col3, &tfrm->col3 ); +} + +static inline void vmathT3PrependScale( VmathTransform3 *result, const VmathVector3 *scaleVec, const VmathTransform3 *tfrm ) +{ + vmathV3MulPerElem( &result->col0, &tfrm->col0, scaleVec ); + vmathV3MulPerElem( &result->col1, &tfrm->col1, scaleVec ); + vmathV3MulPerElem( &result->col2, &tfrm->col2, scaleVec ); + vmathV3MulPerElem( &result->col3, &tfrm->col3, scaleVec ); +} + +static inline void vmathT3MakeTranslation( VmathTransform3 *result, const VmathVector3 *translateVec ) +{ + vmathV3MakeXAxis( &result->col0 ); + vmathV3MakeYAxis( &result->col1 ); + vmathV3MakeZAxis( &result->col2 ); + vmathV3Copy( &result->col3, translateVec ); +} + +static inline void vmathT3Select( VmathTransform3 *result, const VmathTransform3 *tfrm0, const VmathTransform3 *tfrm1, unsigned int select1 ) +{ + vmathV3Select( &result->col0, &tfrm0->col0, &tfrm1->col0, select1 ); + vmathV3Select( &result->col1, &tfrm0->col1, &tfrm1->col1, select1 ); + vmathV3Select( &result->col2, &tfrm0->col2, &tfrm1->col2, select1 ); + vmathV3Select( &result->col3, &tfrm0->col3, &tfrm1->col3, select1 ); +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathT3Print( const VmathTransform3 *tfrm ) +{ + VmathVector4 tmpV4_0, tmpV4_1, tmpV4_2; + vmathT3GetRow( &tmpV4_0, tfrm, 0 ); + vmathV4Print( &tmpV4_0 ); + vmathT3GetRow( &tmpV4_1, tfrm, 1 ); + vmathV4Print( &tmpV4_1 ); + vmathT3GetRow( &tmpV4_2, tfrm, 2 ); + vmathV4Print( &tmpV4_2 ); +} + +static inline void vmathT3Prints( const VmathTransform3 *tfrm, const char *name ) +{ + printf("%s:\n", name); + vmathT3Print( tfrm ); +} + +#endif + +static inline void vmathQMakeFromM3( VmathQuat *result, const VmathMatrix3 *tfrm ) +{ + float trace, radicand, scale, xx, yx, zx, xy, yy, zy, xz, yz, zz, tmpx, tmpy, tmpz, tmpw, qx, qy, qz, qw; + int negTrace, ZgtX, ZgtY, YgtX; + int largestXorY, largestYorZ, largestZorX; + + xx = tfrm->col0.x; + yx = tfrm->col0.y; + zx = tfrm->col0.z; + xy = tfrm->col1.x; + yy = tfrm->col1.y; + zy = tfrm->col1.z; + xz = tfrm->col2.x; + yz = tfrm->col2.y; + zz = tfrm->col2.z; + + trace = ( ( xx + yy ) + zz ); + + negTrace = ( trace < 0.0f ); + ZgtX = zz > xx; + ZgtY = zz > yy; + YgtX = yy > xx; + largestXorY = ( !ZgtX || !ZgtY ) && negTrace; + largestYorZ = ( YgtX || ZgtX ) && negTrace; + largestZorX = ( ZgtY || !YgtX ) && negTrace; + + if ( largestXorY ) + { + zz = -zz; + xy = -xy; + } + if ( largestYorZ ) + { + xx = -xx; + yz = -yz; + } + if ( largestZorX ) + { + yy = -yy; + zx = -zx; + } + + radicand = ( ( ( xx + yy ) + zz ) + 1.0f ); + scale = ( 0.5f * ( 1.0f / sqrtf( radicand ) ) ); + + tmpx = ( ( zy - yz ) * scale ); + tmpy = ( ( xz - zx ) * scale ); + tmpz = ( ( yx - xy ) * scale ); + tmpw = ( radicand * scale ); + qx = tmpx; + qy = tmpy; + qz = tmpz; + qw = tmpw; + + if ( largestXorY ) + { + qx = tmpw; + qy = tmpz; + qz = tmpy; + qw = tmpx; + } + if ( largestYorZ ) + { + tmpx = qx; + tmpz = qz; + qx = qy; + qy = tmpx; + qz = qw; + qw = tmpz; + } + + result->x = qx; + result->y = qy; + result->z = qz; + result->w = qw; +} + +static inline void vmathV3Outer( VmathMatrix3 *result, const VmathVector3 *tfrm0, const VmathVector3 *tfrm1 ) +{ + vmathV3ScalarMul( &result->col0, tfrm0, vmathV3GetX( tfrm1 ) ); + vmathV3ScalarMul( &result->col1, tfrm0, vmathV3GetY( tfrm1 ) ); + vmathV3ScalarMul( &result->col2, tfrm0, vmathV3GetZ( tfrm1 ) ); +} + +static inline void vmathV4Outer( VmathMatrix4 *result, const VmathVector4 *tfrm0, const VmathVector4 *tfrm1 ) +{ + vmathV4ScalarMul( &result->col0, tfrm0, vmathV4GetX( tfrm1 ) ); + vmathV4ScalarMul( &result->col1, tfrm0, vmathV4GetY( tfrm1 ) ); + vmathV4ScalarMul( &result->col2, tfrm0, vmathV4GetZ( tfrm1 ) ); + vmathV4ScalarMul( &result->col3, tfrm0, vmathV4GetW( tfrm1 ) ); +} + +static inline void vmathV3RowMul( VmathVector3 *result, const VmathVector3 *vec, const VmathMatrix3 *mat ) +{ + float tmpX, tmpY, tmpZ; + tmpX = ( ( ( vec->x * mat->col0.x ) + ( vec->y * mat->col0.y ) ) + ( vec->z * mat->col0.z ) ); + tmpY = ( ( ( vec->x * mat->col1.x ) + ( vec->y * mat->col1.y ) ) + ( vec->z * mat->col1.z ) ); + tmpZ = ( ( ( vec->x * mat->col2.x ) + ( vec->y * mat->col2.y ) ) + ( vec->z * mat->col2.z ) ); + vmathV3MakeFromElems( result, tmpX, tmpY, tmpZ ); +} + +static inline void vmathV3CrossMatrix( VmathMatrix3 *result, const VmathVector3 *vec ) +{ + vmathV3MakeFromElems( &result->col0, 0.0f, vec->z, -vec->y ); + vmathV3MakeFromElems( &result->col1, -vec->z, 0.0f, vec->x ); + vmathV3MakeFromElems( &result->col2, vec->y, -vec->x, 0.0f ); +} + +static inline void vmathV3CrossMatrixMul( VmathMatrix3 *result, const VmathVector3 *vec, const VmathMatrix3 *mat ) +{ + VmathVector3 tmpV3_0, tmpV3_1, tmpV3_2; + vmathV3Cross( &tmpV3_0, vec, &mat->col0 ); + vmathV3Cross( &tmpV3_1, vec, &mat->col1 ); + vmathV3Cross( &tmpV3_2, vec, &mat->col2 ); + vmathM3MakeFromCols( result, &tmpV3_0, &tmpV3_1, &tmpV3_2 ); +} + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/scalar/c/mat_aos_v.h b/Extras/vectormathlibrary/include/vectormath/scalar/c/mat_aos_v.h new file mode 100644 index 000000000..270ffcb50 --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/scalar/c/mat_aos_v.h @@ -0,0 +1,1006 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_MAT_AOS_V_C_H +#define _VECTORMATH_MAT_AOS_V_C_H + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/*----------------------------------------------------------------------------- + * Constants + */ +#define _VECTORMATH_PI_OVER_2 1.570796327f + +/*----------------------------------------------------------------------------- + * Definitions + */ +static inline VmathMatrix3 vmathM3MakeFromScalar_V( float scalar ) +{ + VmathMatrix3 result; + vmathM3MakeFromScalar(&result, scalar); + return result; +} + +static inline VmathMatrix3 vmathM3MakeFromQ_V( VmathQuat unitQuat ) +{ + VmathMatrix3 result; + vmathM3MakeFromQ(&result, &unitQuat); + return result; +} + +static inline VmathMatrix3 vmathM3MakeFromCols_V( VmathVector3 _col0, VmathVector3 _col1, VmathVector3 _col2 ) +{ + VmathMatrix3 result; + vmathM3MakeFromCols(&result, &_col0, &_col1, &_col2); + return result; +} + +static inline void vmathM3SetCol0_V( VmathMatrix3 *result, VmathVector3 _col0 ) +{ + vmathM3SetCol0(result, &_col0); +} + +static inline void vmathM3SetCol1_V( VmathMatrix3 *result, VmathVector3 _col1 ) +{ + vmathM3SetCol1(result, &_col1); +} + +static inline void vmathM3SetCol2_V( VmathMatrix3 *result, VmathVector3 _col2 ) +{ + vmathM3SetCol2(result, &_col2); +} + +static inline void vmathM3SetCol_V( VmathMatrix3 *result, int col, VmathVector3 vec ) +{ + vmathM3SetCol(result, col, &vec); +} + +static inline void vmathM3SetRow_V( VmathMatrix3 *result, int row, VmathVector3 vec ) +{ + vmathM3SetRow(result, row, &vec); +} + +static inline void vmathM3SetElem_V( VmathMatrix3 *result, int col, int row, float val ) +{ + vmathM3SetElem(result, col, row, val); +} + +static inline float vmathM3GetElem_V( VmathMatrix3 mat, int col, int row ) +{ + return vmathM3GetElem(&mat, col, row); +} + +static inline VmathVector3 vmathM3GetCol0_V( VmathMatrix3 mat ) +{ + VmathVector3 result; + vmathM3GetCol0(&result, &mat); + return result; +} + +static inline VmathVector3 vmathM3GetCol1_V( VmathMatrix3 mat ) +{ + VmathVector3 result; + vmathM3GetCol1(&result, &mat); + return result; +} + +static inline VmathVector3 vmathM3GetCol2_V( VmathMatrix3 mat ) +{ + VmathVector3 result; + vmathM3GetCol2(&result, &mat); + return result; +} + +static inline VmathVector3 vmathM3GetCol_V( VmathMatrix3 mat, int col ) +{ + VmathVector3 result; + vmathM3GetCol(&result, &mat, col); + return result; +} + +static inline VmathVector3 vmathM3GetRow_V( VmathMatrix3 mat, int row ) +{ + VmathVector3 result; + vmathM3GetRow(&result, &mat, row); + return result; +} + +static inline VmathMatrix3 vmathM3Transpose_V( VmathMatrix3 mat ) +{ + VmathMatrix3 result; + vmathM3Transpose(&result, &mat); + return result; +} + +static inline VmathMatrix3 vmathM3Inverse_V( VmathMatrix3 mat ) +{ + VmathMatrix3 result; + vmathM3Inverse(&result, &mat); + return result; +} + +static inline float vmathM3Determinant_V( VmathMatrix3 mat ) +{ + return vmathM3Determinant(&mat); +} + +static inline VmathMatrix3 vmathM3Add_V( VmathMatrix3 mat0, VmathMatrix3 mat1 ) +{ + VmathMatrix3 result; + vmathM3Add(&result, &mat0, &mat1); + return result; +} + +static inline VmathMatrix3 vmathM3Sub_V( VmathMatrix3 mat0, VmathMatrix3 mat1 ) +{ + VmathMatrix3 result; + vmathM3Sub(&result, &mat0, &mat1); + return result; +} + +static inline VmathMatrix3 vmathM3Neg_V( VmathMatrix3 mat ) +{ + VmathMatrix3 result; + vmathM3Neg(&result, &mat); + return result; +} + +static inline VmathMatrix3 vmathM3AbsPerElem_V( VmathMatrix3 mat ) +{ + VmathMatrix3 result; + vmathM3AbsPerElem(&result, &mat); + return result; +} + +static inline VmathMatrix3 vmathM3ScalarMul_V( VmathMatrix3 mat, float scalar ) +{ + VmathMatrix3 result; + vmathM3ScalarMul(&result, &mat, scalar); + return result; +} + +static inline VmathVector3 vmathM3MulV3_V( VmathMatrix3 mat, VmathVector3 vec ) +{ + VmathVector3 result; + vmathM3MulV3(&result, &mat, &vec); + return result; +} + +static inline VmathMatrix3 vmathM3Mul_V( VmathMatrix3 mat0, VmathMatrix3 mat1 ) +{ + VmathMatrix3 result; + vmathM3Mul(&result, &mat0, &mat1); + return result; +} + +static inline VmathMatrix3 vmathM3MulPerElem_V( VmathMatrix3 mat0, VmathMatrix3 mat1 ) +{ + VmathMatrix3 result; + vmathM3MulPerElem(&result, &mat0, &mat1); + return result; +} + +static inline VmathMatrix3 vmathM3MakeIdentity_V( ) +{ + VmathMatrix3 result; + vmathM3MakeIdentity(&result); + return result; +} + +static inline VmathMatrix3 vmathM3MakeRotationX_V( float radians ) +{ + VmathMatrix3 result; + vmathM3MakeRotationX(&result, radians); + return result; +} + +static inline VmathMatrix3 vmathM3MakeRotationY_V( float radians ) +{ + VmathMatrix3 result; + vmathM3MakeRotationY(&result, radians); + return result; +} + +static inline VmathMatrix3 vmathM3MakeRotationZ_V( float radians ) +{ + VmathMatrix3 result; + vmathM3MakeRotationZ(&result, radians); + return result; +} + +static inline VmathMatrix3 vmathM3MakeRotationZYX_V( VmathVector3 radiansXYZ ) +{ + VmathMatrix3 result; + vmathM3MakeRotationZYX(&result, &radiansXYZ); + return result; +} + +static inline VmathMatrix3 vmathM3MakeRotationAxis_V( float radians, VmathVector3 unitVec ) +{ + VmathMatrix3 result; + vmathM3MakeRotationAxis(&result, radians, &unitVec); + return result; +} + +static inline VmathMatrix3 vmathM3MakeRotationQ_V( VmathQuat unitQuat ) +{ + VmathMatrix3 result; + vmathM3MakeRotationQ(&result, &unitQuat); + return result; +} + +static inline VmathMatrix3 vmathM3MakeScale_V( VmathVector3 scaleVec ) +{ + VmathMatrix3 result; + vmathM3MakeScale(&result, &scaleVec); + return result; +} + +static inline VmathMatrix3 vmathM3AppendScale_V( VmathMatrix3 mat, VmathVector3 scaleVec ) +{ + VmathMatrix3 result; + vmathM3AppendScale(&result, &mat, &scaleVec); + return result; +} + +static inline VmathMatrix3 vmathM3PrependScale_V( VmathVector3 scaleVec, VmathMatrix3 mat ) +{ + VmathMatrix3 result; + vmathM3PrependScale(&result, &scaleVec, &mat); + return result; +} + +static inline VmathMatrix3 vmathM3Select_V( VmathMatrix3 mat0, VmathMatrix3 mat1, unsigned int select1 ) +{ + VmathMatrix3 result; + vmathM3Select(&result, &mat0, &mat1, select1); + return result; +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathM3Print_V( VmathMatrix3 mat ) +{ + vmathM3Print(&mat); +} + +static inline void vmathM3Prints_V( VmathMatrix3 mat, const char *name ) +{ + vmathM3Prints(&mat, name); +} + +#endif + +static inline VmathMatrix4 vmathM4MakeFromScalar_V( float scalar ) +{ + VmathMatrix4 result; + vmathM4MakeFromScalar(&result, scalar); + return result; +} + +static inline VmathMatrix4 vmathM4MakeFromT3_V( VmathTransform3 mat ) +{ + VmathMatrix4 result; + vmathM4MakeFromT3(&result, &mat); + return result; +} + +static inline VmathMatrix4 vmathM4MakeFromCols_V( VmathVector4 _col0, VmathVector4 _col1, VmathVector4 _col2, VmathVector4 _col3 ) +{ + VmathMatrix4 result; + vmathM4MakeFromCols(&result, &_col0, &_col1, &_col2, &_col3); + return result; +} + +static inline VmathMatrix4 vmathM4MakeFromM3V3_V( VmathMatrix3 mat, VmathVector3 translateVec ) +{ + VmathMatrix4 result; + vmathM4MakeFromM3V3(&result, &mat, &translateVec); + return result; +} + +static inline VmathMatrix4 vmathM4MakeFromQV3_V( VmathQuat unitQuat, VmathVector3 translateVec ) +{ + VmathMatrix4 result; + vmathM4MakeFromQV3(&result, &unitQuat, &translateVec); + return result; +} + +static inline void vmathM4SetCol0_V( VmathMatrix4 *result, VmathVector4 _col0 ) +{ + vmathM4SetCol0(result, &_col0); +} + +static inline void vmathM4SetCol1_V( VmathMatrix4 *result, VmathVector4 _col1 ) +{ + vmathM4SetCol1(result, &_col1); +} + +static inline void vmathM4SetCol2_V( VmathMatrix4 *result, VmathVector4 _col2 ) +{ + vmathM4SetCol2(result, &_col2); +} + +static inline void vmathM4SetCol3_V( VmathMatrix4 *result, VmathVector4 _col3 ) +{ + vmathM4SetCol3(result, &_col3); +} + +static inline void vmathM4SetCol_V( VmathMatrix4 *result, int col, VmathVector4 vec ) +{ + vmathM4SetCol(result, col, &vec); +} + +static inline void vmathM4SetRow_V( VmathMatrix4 *result, int row, VmathVector4 vec ) +{ + vmathM4SetRow(result, row, &vec); +} + +static inline void vmathM4SetElem_V( VmathMatrix4 *result, int col, int row, float val ) +{ + vmathM4SetElem(result, col, row, val); +} + +static inline float vmathM4GetElem_V( VmathMatrix4 mat, int col, int row ) +{ + return vmathM4GetElem(&mat, col, row); +} + +static inline VmathVector4 vmathM4GetCol0_V( VmathMatrix4 mat ) +{ + VmathVector4 result; + vmathM4GetCol0(&result, &mat); + return result; +} + +static inline VmathVector4 vmathM4GetCol1_V( VmathMatrix4 mat ) +{ + VmathVector4 result; + vmathM4GetCol1(&result, &mat); + return result; +} + +static inline VmathVector4 vmathM4GetCol2_V( VmathMatrix4 mat ) +{ + VmathVector4 result; + vmathM4GetCol2(&result, &mat); + return result; +} + +static inline VmathVector4 vmathM4GetCol3_V( VmathMatrix4 mat ) +{ + VmathVector4 result; + vmathM4GetCol3(&result, &mat); + return result; +} + +static inline VmathVector4 vmathM4GetCol_V( VmathMatrix4 mat, int col ) +{ + VmathVector4 result; + vmathM4GetCol(&result, &mat, col); + return result; +} + +static inline VmathVector4 vmathM4GetRow_V( VmathMatrix4 mat, int row ) +{ + VmathVector4 result; + vmathM4GetRow(&result, &mat, row); + return result; +} + +static inline VmathMatrix4 vmathM4Transpose_V( VmathMatrix4 mat ) +{ + VmathMatrix4 result; + vmathM4Transpose(&result, &mat); + return result; +} + +static inline VmathMatrix4 vmathM4Inverse_V( VmathMatrix4 mat ) +{ + VmathMatrix4 result; + vmathM4Inverse(&result, &mat); + return result; +} + +static inline VmathMatrix4 vmathM4AffineInverse_V( VmathMatrix4 mat ) +{ + VmathMatrix4 result; + vmathM4AffineInverse(&result, &mat); + return result; +} + +static inline VmathMatrix4 vmathM4OrthoInverse_V( VmathMatrix4 mat ) +{ + VmathMatrix4 result; + vmathM4OrthoInverse(&result, &mat); + return result; +} + +static inline float vmathM4Determinant_V( VmathMatrix4 mat ) +{ + return vmathM4Determinant(&mat); +} + +static inline VmathMatrix4 vmathM4Add_V( VmathMatrix4 mat0, VmathMatrix4 mat1 ) +{ + VmathMatrix4 result; + vmathM4Add(&result, &mat0, &mat1); + return result; +} + +static inline VmathMatrix4 vmathM4Sub_V( VmathMatrix4 mat0, VmathMatrix4 mat1 ) +{ + VmathMatrix4 result; + vmathM4Sub(&result, &mat0, &mat1); + return result; +} + +static inline VmathMatrix4 vmathM4Neg_V( VmathMatrix4 mat ) +{ + VmathMatrix4 result; + vmathM4Neg(&result, &mat); + return result; +} + +static inline VmathMatrix4 vmathM4AbsPerElem_V( VmathMatrix4 mat ) +{ + VmathMatrix4 result; + vmathM4AbsPerElem(&result, &mat); + return result; +} + +static inline VmathMatrix4 vmathM4ScalarMul_V( VmathMatrix4 mat, float scalar ) +{ + VmathMatrix4 result; + vmathM4ScalarMul(&result, &mat, scalar); + return result; +} + +static inline VmathVector4 vmathM4MulV4_V( VmathMatrix4 mat, VmathVector4 vec ) +{ + VmathVector4 result; + vmathM4MulV4(&result, &mat, &vec); + return result; +} + +static inline VmathVector4 vmathM4MulV3_V( VmathMatrix4 mat, VmathVector3 vec ) +{ + VmathVector4 result; + vmathM4MulV3(&result, &mat, &vec); + return result; +} + +static inline VmathVector4 vmathM4MulP3_V( VmathMatrix4 mat, VmathPoint3 pnt ) +{ + VmathVector4 result; + vmathM4MulP3(&result, &mat, &pnt); + return result; +} + +static inline VmathMatrix4 vmathM4Mul_V( VmathMatrix4 mat0, VmathMatrix4 mat1 ) +{ + VmathMatrix4 result; + vmathM4Mul(&result, &mat0, &mat1); + return result; +} + +static inline VmathMatrix4 vmathM4MulT3_V( VmathMatrix4 mat, VmathTransform3 tfrm1 ) +{ + VmathMatrix4 result; + vmathM4MulT3(&result, &mat, &tfrm1); + return result; +} + +static inline VmathMatrix4 vmathM4MulPerElem_V( VmathMatrix4 mat0, VmathMatrix4 mat1 ) +{ + VmathMatrix4 result; + vmathM4MulPerElem(&result, &mat0, &mat1); + return result; +} + +static inline VmathMatrix4 vmathM4MakeIdentity_V( ) +{ + VmathMatrix4 result; + vmathM4MakeIdentity(&result); + return result; +} + +static inline void vmathM4SetUpper3x3_V( VmathMatrix4 *result, VmathMatrix3 mat3 ) +{ + vmathM4SetUpper3x3(result, &mat3); +} + +static inline VmathMatrix3 vmathM4GetUpper3x3_V( VmathMatrix4 mat ) +{ + VmathMatrix3 result; + vmathM4GetUpper3x3(&result, &mat); + return result; +} + +static inline void vmathM4SetTranslation_V( VmathMatrix4 *result, VmathVector3 translateVec ) +{ + vmathM4SetTranslation(result, &translateVec); +} + +static inline VmathVector3 vmathM4GetTranslation_V( VmathMatrix4 mat ) +{ + VmathVector3 result; + vmathM4GetTranslation(&result, &mat); + return result; +} + +static inline VmathMatrix4 vmathM4MakeRotationX_V( float radians ) +{ + VmathMatrix4 result; + vmathM4MakeRotationX(&result, radians); + return result; +} + +static inline VmathMatrix4 vmathM4MakeRotationY_V( float radians ) +{ + VmathMatrix4 result; + vmathM4MakeRotationY(&result, radians); + return result; +} + +static inline VmathMatrix4 vmathM4MakeRotationZ_V( float radians ) +{ + VmathMatrix4 result; + vmathM4MakeRotationZ(&result, radians); + return result; +} + +static inline VmathMatrix4 vmathM4MakeRotationZYX_V( VmathVector3 radiansXYZ ) +{ + VmathMatrix4 result; + vmathM4MakeRotationZYX(&result, &radiansXYZ); + return result; +} + +static inline VmathMatrix4 vmathM4MakeRotationAxis_V( float radians, VmathVector3 unitVec ) +{ + VmathMatrix4 result; + vmathM4MakeRotationAxis(&result, radians, &unitVec); + return result; +} + +static inline VmathMatrix4 vmathM4MakeRotationQ_V( VmathQuat unitQuat ) +{ + VmathMatrix4 result; + vmathM4MakeRotationQ(&result, &unitQuat); + return result; +} + +static inline VmathMatrix4 vmathM4MakeScale_V( VmathVector3 scaleVec ) +{ + VmathMatrix4 result; + vmathM4MakeScale(&result, &scaleVec); + return result; +} + +static inline VmathMatrix4 vmathM4AppendScale_V( VmathMatrix4 mat, VmathVector3 scaleVec ) +{ + VmathMatrix4 result; + vmathM4AppendScale(&result, &mat, &scaleVec); + return result; +} + +static inline VmathMatrix4 vmathM4PrependScale_V( VmathVector3 scaleVec, VmathMatrix4 mat ) +{ + VmathMatrix4 result; + vmathM4PrependScale(&result, &scaleVec, &mat); + return result; +} + +static inline VmathMatrix4 vmathM4MakeTranslation_V( VmathVector3 translateVec ) +{ + VmathMatrix4 result; + vmathM4MakeTranslation(&result, &translateVec); + return result; +} + +static inline VmathMatrix4 vmathM4MakeLookAt_V( VmathPoint3 eyePos, VmathPoint3 lookAtPos, VmathVector3 upVec ) +{ + VmathMatrix4 result; + vmathM4MakeLookAt(&result, &eyePos, &lookAtPos, &upVec); + return result; +} + +static inline VmathMatrix4 vmathM4MakePerspective_V( float fovyRadians, float aspect, float zNear, float zFar ) +{ + VmathMatrix4 result; + vmathM4MakePerspective(&result, fovyRadians, aspect, zNear, zFar); + return result; +} + +static inline VmathMatrix4 vmathM4MakeFrustum_V( float left, float right, float bottom, float top, float zNear, float zFar ) +{ + VmathMatrix4 result; + vmathM4MakeFrustum(&result, left, right, bottom, top, zNear, zFar); + return result; +} + +static inline VmathMatrix4 vmathM4MakeOrthographic_V( float left, float right, float bottom, float top, float zNear, float zFar ) +{ + VmathMatrix4 result; + vmathM4MakeOrthographic(&result, left, right, bottom, top, zNear, zFar); + return result; +} + +static inline VmathMatrix4 vmathM4Select_V( VmathMatrix4 mat0, VmathMatrix4 mat1, unsigned int select1 ) +{ + VmathMatrix4 result; + vmathM4Select(&result, &mat0, &mat1, select1); + return result; +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathM4Print_V( VmathMatrix4 mat ) +{ + vmathM4Print(&mat); +} + +static inline void vmathM4Prints_V( VmathMatrix4 mat, const char *name ) +{ + vmathM4Prints(&mat, name); +} + +#endif + +static inline VmathTransform3 vmathT3MakeFromScalar_V( float scalar ) +{ + VmathTransform3 result; + vmathT3MakeFromScalar(&result, scalar); + return result; +} + +static inline VmathTransform3 vmathT3MakeFromCols_V( VmathVector3 _col0, VmathVector3 _col1, VmathVector3 _col2, VmathVector3 _col3 ) +{ + VmathTransform3 result; + vmathT3MakeFromCols(&result, &_col0, &_col1, &_col2, &_col3); + return result; +} + +static inline VmathTransform3 vmathT3MakeFromM3V3_V( VmathMatrix3 tfrm, VmathVector3 translateVec ) +{ + VmathTransform3 result; + vmathT3MakeFromM3V3(&result, &tfrm, &translateVec); + return result; +} + +static inline VmathTransform3 vmathT3MakeFromQV3_V( VmathQuat unitQuat, VmathVector3 translateVec ) +{ + VmathTransform3 result; + vmathT3MakeFromQV3(&result, &unitQuat, &translateVec); + return result; +} + +static inline void vmathT3SetCol0_V( VmathTransform3 *result, VmathVector3 _col0 ) +{ + vmathT3SetCol0(result, &_col0); +} + +static inline void vmathT3SetCol1_V( VmathTransform3 *result, VmathVector3 _col1 ) +{ + vmathT3SetCol1(result, &_col1); +} + +static inline void vmathT3SetCol2_V( VmathTransform3 *result, VmathVector3 _col2 ) +{ + vmathT3SetCol2(result, &_col2); +} + +static inline void vmathT3SetCol3_V( VmathTransform3 *result, VmathVector3 _col3 ) +{ + vmathT3SetCol3(result, &_col3); +} + +static inline void vmathT3SetCol_V( VmathTransform3 *result, int col, VmathVector3 vec ) +{ + vmathT3SetCol(result, col, &vec); +} + +static inline void vmathT3SetRow_V( VmathTransform3 *result, int row, VmathVector4 vec ) +{ + vmathT3SetRow(result, row, &vec); +} + +static inline void vmathT3SetElem_V( VmathTransform3 *result, int col, int row, float val ) +{ + vmathT3SetElem(result, col, row, val); +} + +static inline float vmathT3GetElem_V( VmathTransform3 tfrm, int col, int row ) +{ + return vmathT3GetElem(&tfrm, col, row); +} + +static inline VmathVector3 vmathT3GetCol0_V( VmathTransform3 tfrm ) +{ + VmathVector3 result; + vmathT3GetCol0(&result, &tfrm); + return result; +} + +static inline VmathVector3 vmathT3GetCol1_V( VmathTransform3 tfrm ) +{ + VmathVector3 result; + vmathT3GetCol1(&result, &tfrm); + return result; +} + +static inline VmathVector3 vmathT3GetCol2_V( VmathTransform3 tfrm ) +{ + VmathVector3 result; + vmathT3GetCol2(&result, &tfrm); + return result; +} + +static inline VmathVector3 vmathT3GetCol3_V( VmathTransform3 tfrm ) +{ + VmathVector3 result; + vmathT3GetCol3(&result, &tfrm); + return result; +} + +static inline VmathVector3 vmathT3GetCol_V( VmathTransform3 tfrm, int col ) +{ + VmathVector3 result; + vmathT3GetCol(&result, &tfrm, col); + return result; +} + +static inline VmathVector4 vmathT3GetRow_V( VmathTransform3 tfrm, int row ) +{ + VmathVector4 result; + vmathT3GetRow(&result, &tfrm, row); + return result; +} + +static inline VmathTransform3 vmathT3Inverse_V( VmathTransform3 tfrm ) +{ + VmathTransform3 result; + vmathT3Inverse(&result, &tfrm); + return result; +} + +static inline VmathTransform3 vmathT3OrthoInverse_V( VmathTransform3 tfrm ) +{ + VmathTransform3 result; + vmathT3OrthoInverse(&result, &tfrm); + return result; +} + +static inline VmathTransform3 vmathT3AbsPerElem_V( VmathTransform3 tfrm ) +{ + VmathTransform3 result; + vmathT3AbsPerElem(&result, &tfrm); + return result; +} + +static inline VmathVector3 vmathT3MulV3_V( VmathTransform3 tfrm, VmathVector3 vec ) +{ + VmathVector3 result; + vmathT3MulV3(&result, &tfrm, &vec); + return result; +} + +static inline VmathPoint3 vmathT3MulP3_V( VmathTransform3 tfrm, VmathPoint3 pnt ) +{ + VmathPoint3 result; + vmathT3MulP3(&result, &tfrm, &pnt); + return result; +} + +static inline VmathTransform3 vmathT3Mul_V( VmathTransform3 tfrm0, VmathTransform3 tfrm1 ) +{ + VmathTransform3 result; + vmathT3Mul(&result, &tfrm0, &tfrm1); + return result; +} + +static inline VmathTransform3 vmathT3MulPerElem_V( VmathTransform3 tfrm0, VmathTransform3 tfrm1 ) +{ + VmathTransform3 result; + vmathT3MulPerElem(&result, &tfrm0, &tfrm1); + return result; +} + +static inline VmathTransform3 vmathT3MakeIdentity_V( ) +{ + VmathTransform3 result; + vmathT3MakeIdentity(&result); + return result; +} + +static inline void vmathT3SetUpper3x3_V( VmathTransform3 *result, VmathMatrix3 tfrm ) +{ + vmathT3SetUpper3x3(result, &tfrm); +} + +static inline VmathMatrix3 vmathT3GetUpper3x3_V( VmathTransform3 tfrm ) +{ + VmathMatrix3 result; + vmathT3GetUpper3x3(&result, &tfrm); + return result; +} + +static inline void vmathT3SetTranslation_V( VmathTransform3 *result, VmathVector3 translateVec ) +{ + vmathT3SetTranslation(result, &translateVec); +} + +static inline VmathVector3 vmathT3GetTranslation_V( VmathTransform3 tfrm ) +{ + VmathVector3 result; + vmathT3GetTranslation(&result, &tfrm); + return result; +} + +static inline VmathTransform3 vmathT3MakeRotationX_V( float radians ) +{ + VmathTransform3 result; + vmathT3MakeRotationX(&result, radians); + return result; +} + +static inline VmathTransform3 vmathT3MakeRotationY_V( float radians ) +{ + VmathTransform3 result; + vmathT3MakeRotationY(&result, radians); + return result; +} + +static inline VmathTransform3 vmathT3MakeRotationZ_V( float radians ) +{ + VmathTransform3 result; + vmathT3MakeRotationZ(&result, radians); + return result; +} + +static inline VmathTransform3 vmathT3MakeRotationZYX_V( VmathVector3 radiansXYZ ) +{ + VmathTransform3 result; + vmathT3MakeRotationZYX(&result, &radiansXYZ); + return result; +} + +static inline VmathTransform3 vmathT3MakeRotationAxis_V( float radians, VmathVector3 unitVec ) +{ + VmathTransform3 result; + vmathT3MakeRotationAxis(&result, radians, &unitVec); + return result; +} + +static inline VmathTransform3 vmathT3MakeRotationQ_V( VmathQuat unitQuat ) +{ + VmathTransform3 result; + vmathT3MakeRotationQ(&result, &unitQuat); + return result; +} + +static inline VmathTransform3 vmathT3MakeScale_V( VmathVector3 scaleVec ) +{ + VmathTransform3 result; + vmathT3MakeScale(&result, &scaleVec); + return result; +} + +static inline VmathTransform3 vmathT3AppendScale_V( VmathTransform3 tfrm, VmathVector3 scaleVec ) +{ + VmathTransform3 result; + vmathT3AppendScale(&result, &tfrm, &scaleVec); + return result; +} + +static inline VmathTransform3 vmathT3PrependScale_V( VmathVector3 scaleVec, VmathTransform3 tfrm ) +{ + VmathTransform3 result; + vmathT3PrependScale(&result, &scaleVec, &tfrm); + return result; +} + +static inline VmathTransform3 vmathT3MakeTranslation_V( VmathVector3 translateVec ) +{ + VmathTransform3 result; + vmathT3MakeTranslation(&result, &translateVec); + return result; +} + +static inline VmathTransform3 vmathT3Select_V( VmathTransform3 tfrm0, VmathTransform3 tfrm1, unsigned int select1 ) +{ + VmathTransform3 result; + vmathT3Select(&result, &tfrm0, &tfrm1, select1); + return result; +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathT3Print_V( VmathTransform3 tfrm ) +{ + vmathT3Print(&tfrm); +} + +static inline void vmathT3Prints_V( VmathTransform3 tfrm, const char *name ) +{ + vmathT3Prints(&tfrm, name); +} + +#endif + +static inline VmathQuat vmathQMakeFromM3_V( VmathMatrix3 tfrm ) +{ + VmathQuat result; + vmathQMakeFromM3(&result, &tfrm); + return result; +} + +static inline VmathMatrix3 vmathV3Outer_V( VmathVector3 tfrm0, VmathVector3 tfrm1 ) +{ + VmathMatrix3 result; + vmathV3Outer(&result, &tfrm0, &tfrm1); + return result; +} + +static inline VmathMatrix4 vmathV4Outer_V( VmathVector4 tfrm0, VmathVector4 tfrm1 ) +{ + VmathMatrix4 result; + vmathV4Outer(&result, &tfrm0, &tfrm1); + return result; +} + +static inline VmathVector3 vmathV3RowMul_V( VmathVector3 vec, VmathMatrix3 mat ) +{ + VmathVector3 result; + vmathV3RowMul(&result, &vec, &mat); + return result; +} + +static inline VmathMatrix3 vmathV3CrossMatrix_V( VmathVector3 vec ) +{ + VmathMatrix3 result; + vmathV3CrossMatrix(&result, &vec); + return result; +} + +static inline VmathMatrix3 vmathV3CrossMatrixMul_V( VmathVector3 vec, VmathMatrix3 mat ) +{ + VmathMatrix3 result; + vmathV3CrossMatrixMul(&result, &vec, &mat); + return result; +} + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/scalar/c/quat_aos.h b/Extras/vectormathlibrary/include/vectormath/scalar/c/quat_aos.h new file mode 100644 index 000000000..c886ab669 --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/scalar/c/quat_aos.h @@ -0,0 +1,368 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_QUAT_AOS_C_H +#define _VECTORMATH_QUAT_AOS_C_H +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/*----------------------------------------------------------------------------- + * Definitions + */ +#ifndef _VECTORMATH_INTERNAL_FUNCTIONS +#define _VECTORMATH_INTERNAL_FUNCTIONS + +#endif + +static inline void vmathQCopy( VmathQuat *result, const VmathQuat *quat ) +{ + result->x = quat->x; + result->y = quat->y; + result->z = quat->z; + result->w = quat->w; +} + +static inline void vmathQMakeFromElems( VmathQuat *result, float _x, float _y, float _z, float _w ) +{ + result->x = _x; + result->y = _y; + result->z = _z; + result->w = _w; +} + +static inline void vmathQMakeFromV3Scalar( VmathQuat *result, const VmathVector3 *xyz, float _w ) +{ + vmathQSetXYZ( result, xyz ); + vmathQSetW( result, _w ); +} + +static inline void vmathQMakeFromV4( VmathQuat *result, const VmathVector4 *vec ) +{ + result->x = vec->x; + result->y = vec->y; + result->z = vec->z; + result->w = vec->w; +} + +static inline void vmathQMakeFromScalar( VmathQuat *result, float scalar ) +{ + result->x = scalar; + result->y = scalar; + result->z = scalar; + result->w = scalar; +} + +static inline void vmathQMakeIdentity( VmathQuat *result ) +{ + vmathQMakeFromElems( result, 0.0f, 0.0f, 0.0f, 1.0f ); +} + +static inline void vmathQLerp( VmathQuat *result, float t, const VmathQuat *quat0, const VmathQuat *quat1 ) +{ + VmathQuat tmpQ_0, tmpQ_1; + vmathQSub( &tmpQ_0, quat1, quat0 ); + vmathQScalarMul( &tmpQ_1, &tmpQ_0, t ); + vmathQAdd( result, quat0, &tmpQ_1 ); +} + +static inline void vmathQSlerp( VmathQuat *result, float t, const VmathQuat *unitQuat0, const VmathQuat *unitQuat1 ) +{ + VmathQuat start, tmpQ_0, tmpQ_1; + float recipSinAngle, scale0, scale1, cosAngle, angle; + cosAngle = vmathQDot( unitQuat0, unitQuat1 ); + if ( cosAngle < 0.0f ) { + cosAngle = -cosAngle; + vmathQNeg( &start, unitQuat0 ); + } else { + vmathQCopy( &start, unitQuat0 ); + } + if ( cosAngle < _VECTORMATH_SLERP_TOL ) { + angle = acosf( cosAngle ); + recipSinAngle = ( 1.0f / sinf( angle ) ); + scale0 = ( sinf( ( ( 1.0f - t ) * angle ) ) * recipSinAngle ); + scale1 = ( sinf( ( t * angle ) ) * recipSinAngle ); + } else { + scale0 = ( 1.0f - t ); + scale1 = t; + } + vmathQScalarMul( &tmpQ_0, &start, scale0 ); + vmathQScalarMul( &tmpQ_1, unitQuat1, scale1 ); + vmathQAdd( result, &tmpQ_0, &tmpQ_1 ); +} + +static inline void vmathQSquad( VmathQuat *result, float t, const VmathQuat *unitQuat0, const VmathQuat *unitQuat1, const VmathQuat *unitQuat2, const VmathQuat *unitQuat3 ) +{ + VmathQuat tmp0, tmp1; + vmathQSlerp( &tmp0, t, unitQuat0, unitQuat3 ); + vmathQSlerp( &tmp1, t, unitQuat1, unitQuat2 ); + vmathQSlerp( result, ( ( 2.0f * t ) * ( 1.0f - t ) ), &tmp0, &tmp1 ); +} + +static inline void vmathQSetXYZ( VmathQuat *result, const VmathVector3 *vec ) +{ + result->x = vec->x; + result->y = vec->y; + result->z = vec->z; +} + +static inline void vmathQGetXYZ( VmathVector3 *result, const VmathQuat *quat ) +{ + vmathV3MakeFromElems( result, quat->x, quat->y, quat->z ); +} + +static inline void vmathQSetX( VmathQuat *result, float _x ) +{ + result->x = _x; +} + +static inline float vmathQGetX( const VmathQuat *quat ) +{ + return quat->x; +} + +static inline void vmathQSetY( VmathQuat *result, float _y ) +{ + result->y = _y; +} + +static inline float vmathQGetY( const VmathQuat *quat ) +{ + return quat->y; +} + +static inline void vmathQSetZ( VmathQuat *result, float _z ) +{ + result->z = _z; +} + +static inline float vmathQGetZ( const VmathQuat *quat ) +{ + return quat->z; +} + +static inline void vmathQSetW( VmathQuat *result, float _w ) +{ + result->w = _w; +} + +static inline float vmathQGetW( const VmathQuat *quat ) +{ + return quat->w; +} + +static inline void vmathQSetElem( VmathQuat *result, int idx, float value ) +{ + *(&result->x + idx) = value; +} + +static inline float vmathQGetElem( const VmathQuat *quat, int idx ) +{ + return *(&quat->x + idx); +} + +static inline void vmathQAdd( VmathQuat *result, const VmathQuat *quat0, const VmathQuat *quat1 ) +{ + result->x = ( quat0->x + quat1->x ); + result->y = ( quat0->y + quat1->y ); + result->z = ( quat0->z + quat1->z ); + result->w = ( quat0->w + quat1->w ); +} + +static inline void vmathQSub( VmathQuat *result, const VmathQuat *quat0, const VmathQuat *quat1 ) +{ + result->x = ( quat0->x - quat1->x ); + result->y = ( quat0->y - quat1->y ); + result->z = ( quat0->z - quat1->z ); + result->w = ( quat0->w - quat1->w ); +} + +static inline void vmathQScalarMul( VmathQuat *result, const VmathQuat *quat, float scalar ) +{ + result->x = ( quat->x * scalar ); + result->y = ( quat->y * scalar ); + result->z = ( quat->z * scalar ); + result->w = ( quat->w * scalar ); +} + +static inline void vmathQScalarDiv( VmathQuat *result, const VmathQuat *quat, float scalar ) +{ + result->x = ( quat->x / scalar ); + result->y = ( quat->y / scalar ); + result->z = ( quat->z / scalar ); + result->w = ( quat->w / scalar ); +} + +static inline void vmathQNeg( VmathQuat *result, const VmathQuat *quat ) +{ + result->x = -quat->x; + result->y = -quat->y; + result->z = -quat->z; + result->w = -quat->w; +} + +static inline float vmathQDot( const VmathQuat *quat0, const VmathQuat *quat1 ) +{ + float result; + result = ( quat0->x * quat1->x ); + result = ( result + ( quat0->y * quat1->y ) ); + result = ( result + ( quat0->z * quat1->z ) ); + result = ( result + ( quat0->w * quat1->w ) ); + return result; +} + +static inline float vmathQNorm( const VmathQuat *quat ) +{ + float result; + result = ( quat->x * quat->x ); + result = ( result + ( quat->y * quat->y ) ); + result = ( result + ( quat->z * quat->z ) ); + result = ( result + ( quat->w * quat->w ) ); + return result; +} + +static inline float vmathQLength( const VmathQuat *quat ) +{ + return sqrtf( vmathQNorm( quat ) ); +} + +static inline void vmathQNormalize( VmathQuat *result, const VmathQuat *quat ) +{ + float lenSqr, lenInv; + lenSqr = vmathQNorm( quat ); + lenInv = ( 1.0f / sqrtf( lenSqr ) ); + result->x = ( quat->x * lenInv ); + result->y = ( quat->y * lenInv ); + result->z = ( quat->z * lenInv ); + result->w = ( quat->w * lenInv ); +} + +static inline void vmathQMakeRotationArc( VmathQuat *result, const VmathVector3 *unitVec0, const VmathVector3 *unitVec1 ) +{ + VmathVector3 tmpV3_0, tmpV3_1; + float cosHalfAngleX2, recipCosHalfAngleX2; + cosHalfAngleX2 = sqrtf( ( 2.0f * ( 1.0f + vmathV3Dot( unitVec0, unitVec1 ) ) ) ); + recipCosHalfAngleX2 = ( 1.0f / cosHalfAngleX2 ); + vmathV3Cross( &tmpV3_0, unitVec0, unitVec1 ); + vmathV3ScalarMul( &tmpV3_1, &tmpV3_0, recipCosHalfAngleX2 ); + vmathQMakeFromV3Scalar( result, &tmpV3_1, ( cosHalfAngleX2 * 0.5f ) ); +} + +static inline void vmathQMakeRotationAxis( VmathQuat *result, float radians, const VmathVector3 *unitVec ) +{ + VmathVector3 tmpV3_0; + float s, c, angle; + angle = ( radians * 0.5f ); + s = sinf( angle ); + c = cosf( angle ); + vmathV3ScalarMul( &tmpV3_0, unitVec, s ); + vmathQMakeFromV3Scalar( result, &tmpV3_0, c ); +} + +static inline void vmathQMakeRotationX( VmathQuat *result, float radians ) +{ + float s, c, angle; + angle = ( radians * 0.5f ); + s = sinf( angle ); + c = cosf( angle ); + vmathQMakeFromElems( result, s, 0.0f, 0.0f, c ); +} + +static inline void vmathQMakeRotationY( VmathQuat *result, float radians ) +{ + float s, c, angle; + angle = ( radians * 0.5f ); + s = sinf( angle ); + c = cosf( angle ); + vmathQMakeFromElems( result, 0.0f, s, 0.0f, c ); +} + +static inline void vmathQMakeRotationZ( VmathQuat *result, float radians ) +{ + float s, c, angle; + angle = ( radians * 0.5f ); + s = sinf( angle ); + c = cosf( angle ); + vmathQMakeFromElems( result, 0.0f, 0.0f, s, c ); +} + +static inline void vmathQMul( VmathQuat *result, const VmathQuat *quat0, const VmathQuat *quat1 ) +{ + float tmpX, tmpY, tmpZ, tmpW; + tmpX = ( ( ( ( quat0->w * quat1->x ) + ( quat0->x * quat1->w ) ) + ( quat0->y * quat1->z ) ) - ( quat0->z * quat1->y ) ); + tmpY = ( ( ( ( quat0->w * quat1->y ) + ( quat0->y * quat1->w ) ) + ( quat0->z * quat1->x ) ) - ( quat0->x * quat1->z ) ); + tmpZ = ( ( ( ( quat0->w * quat1->z ) + ( quat0->z * quat1->w ) ) + ( quat0->x * quat1->y ) ) - ( quat0->y * quat1->x ) ); + tmpW = ( ( ( ( quat0->w * quat1->w ) - ( quat0->x * quat1->x ) ) - ( quat0->y * quat1->y ) ) - ( quat0->z * quat1->z ) ); + vmathQMakeFromElems( result, tmpX, tmpY, tmpZ, tmpW ); +} + +static inline void vmathQRotate( VmathVector3 *result, const VmathQuat *quat, const VmathVector3 *vec ) +{ + float tmpX, tmpY, tmpZ, tmpW; + tmpX = ( ( ( quat->w * vec->x ) + ( quat->y * vec->z ) ) - ( quat->z * vec->y ) ); + tmpY = ( ( ( quat->w * vec->y ) + ( quat->z * vec->x ) ) - ( quat->x * vec->z ) ); + tmpZ = ( ( ( quat->w * vec->z ) + ( quat->x * vec->y ) ) - ( quat->y * vec->x ) ); + tmpW = ( ( ( quat->x * vec->x ) + ( quat->y * vec->y ) ) + ( quat->z * vec->z ) ); + result->x = ( ( ( ( tmpW * quat->x ) + ( tmpX * quat->w ) ) - ( tmpY * quat->z ) ) + ( tmpZ * quat->y ) ); + result->y = ( ( ( ( tmpW * quat->y ) + ( tmpY * quat->w ) ) - ( tmpZ * quat->x ) ) + ( tmpX * quat->z ) ); + result->z = ( ( ( ( tmpW * quat->z ) + ( tmpZ * quat->w ) ) - ( tmpX * quat->y ) ) + ( tmpY * quat->x ) ); +} + +static inline void vmathQConj( VmathQuat *result, const VmathQuat *quat ) +{ + vmathQMakeFromElems( result, -quat->x, -quat->y, -quat->z, quat->w ); +} + +static inline void vmathQSelect( VmathQuat *result, const VmathQuat *quat0, const VmathQuat *quat1, unsigned int select1 ) +{ + result->x = ( select1 )? quat1->x : quat0->x; + result->y = ( select1 )? quat1->y : quat0->y; + result->z = ( select1 )? quat1->z : quat0->z; + result->w = ( select1 )? quat1->w : quat0->w; +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathQPrint( const VmathQuat *quat ) +{ + printf( "( %f %f %f %f )\n", quat->x, quat->y, quat->z, quat->w ); +} + +static inline void vmathQPrints( const VmathQuat *quat, const char *name ) +{ + printf( "%s: ( %f %f %f %f )\n", name, quat->x, quat->y, quat->z, quat->w ); +} + +#endif + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/scalar/c/quat_aos_v.h b/Extras/vectormathlibrary/include/vectormath/scalar/c/quat_aos_v.h new file mode 100644 index 000000000..b5a9e248d --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/scalar/c/quat_aos_v.h @@ -0,0 +1,300 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_QUAT_AOS_V_C_H +#define _VECTORMATH_QUAT_AOS_V_C_H +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/*----------------------------------------------------------------------------- + * Definitions + */ +#ifndef _VECTORMATH_INTERNAL_FUNCTIONS +#define _VECTORMATH_INTERNAL_FUNCTIONS + +#endif + +static inline VmathQuat vmathQMakeFromElems_V( float _x, float _y, float _z, float _w ) +{ + VmathQuat result; + vmathQMakeFromElems(&result, _x, _y, _z, _w); + return result; +} + +static inline VmathQuat vmathQMakeFromV3Scalar_V( VmathVector3 xyz, float _w ) +{ + VmathQuat result; + vmathQMakeFromV3Scalar(&result, &xyz, _w); + return result; +} + +static inline VmathQuat vmathQMakeFromV4_V( VmathVector4 vec ) +{ + VmathQuat result; + vmathQMakeFromV4(&result, &vec); + return result; +} + +static inline VmathQuat vmathQMakeFromScalar_V( float scalar ) +{ + VmathQuat result; + vmathQMakeFromScalar(&result, scalar); + return result; +} + +static inline VmathQuat vmathQMakeIdentity_V( ) +{ + VmathQuat result; + vmathQMakeIdentity(&result); + return result; +} + +static inline VmathQuat vmathQLerp_V( float t, VmathQuat quat0, VmathQuat quat1 ) +{ + VmathQuat result; + vmathQLerp(&result, t, &quat0, &quat1); + return result; +} + +static inline VmathQuat vmathQSlerp_V( float t, VmathQuat unitQuat0, VmathQuat unitQuat1 ) +{ + VmathQuat result; + vmathQSlerp(&result, t, &unitQuat0, &unitQuat1); + return result; +} + +static inline VmathQuat vmathQSquad_V( float t, VmathQuat unitQuat0, VmathQuat unitQuat1, VmathQuat unitQuat2, VmathQuat unitQuat3 ) +{ + VmathQuat result; + vmathQSquad(&result, t, &unitQuat0, &unitQuat1, &unitQuat2, &unitQuat3); + return result; +} + +static inline void vmathQSetXYZ_V( VmathQuat *result, VmathVector3 vec ) +{ + vmathQSetXYZ(result, &vec); +} + +static inline VmathVector3 vmathQGetXYZ_V( VmathQuat quat ) +{ + VmathVector3 result; + vmathQGetXYZ(&result, &quat); + return result; +} + +static inline void vmathQSetX_V( VmathQuat *result, float _x ) +{ + vmathQSetX(result, _x); +} + +static inline float vmathQGetX_V( VmathQuat quat ) +{ + return vmathQGetX(&quat); +} + +static inline void vmathQSetY_V( VmathQuat *result, float _y ) +{ + vmathQSetY(result, _y); +} + +static inline float vmathQGetY_V( VmathQuat quat ) +{ + return vmathQGetY(&quat); +} + +static inline void vmathQSetZ_V( VmathQuat *result, float _z ) +{ + vmathQSetZ(result, _z); +} + +static inline float vmathQGetZ_V( VmathQuat quat ) +{ + return vmathQGetZ(&quat); +} + +static inline void vmathQSetW_V( VmathQuat *result, float _w ) +{ + vmathQSetW(result, _w); +} + +static inline float vmathQGetW_V( VmathQuat quat ) +{ + return vmathQGetW(&quat); +} + +static inline void vmathQSetElem_V( VmathQuat *result, int idx, float value ) +{ + vmathQSetElem(result, idx, value); +} + +static inline float vmathQGetElem_V( VmathQuat quat, int idx ) +{ + return vmathQGetElem(&quat, idx); +} + +static inline VmathQuat vmathQAdd_V( VmathQuat quat0, VmathQuat quat1 ) +{ + VmathQuat result; + vmathQAdd(&result, &quat0, &quat1); + return result; +} + +static inline VmathQuat vmathQSub_V( VmathQuat quat0, VmathQuat quat1 ) +{ + VmathQuat result; + vmathQSub(&result, &quat0, &quat1); + return result; +} + +static inline VmathQuat vmathQScalarMul_V( VmathQuat quat, float scalar ) +{ + VmathQuat result; + vmathQScalarMul(&result, &quat, scalar); + return result; +} + +static inline VmathQuat vmathQScalarDiv_V( VmathQuat quat, float scalar ) +{ + VmathQuat result; + vmathQScalarDiv(&result, &quat, scalar); + return result; +} + +static inline VmathQuat vmathQNeg_V( VmathQuat quat ) +{ + VmathQuat result; + vmathQNeg(&result, &quat); + return result; +} + +static inline float vmathQDot_V( VmathQuat quat0, VmathQuat quat1 ) +{ + return vmathQDot(&quat0, &quat1); +} + +static inline float vmathQNorm_V( VmathQuat quat ) +{ + return vmathQNorm(&quat); +} + +static inline float vmathQLength_V( VmathQuat quat ) +{ + return vmathQLength(&quat); +} + +static inline VmathQuat vmathQNormalize_V( VmathQuat quat ) +{ + VmathQuat result; + vmathQNormalize(&result, &quat); + return result; +} + +static inline VmathQuat vmathQMakeRotationArc_V( VmathVector3 unitVec0, VmathVector3 unitVec1 ) +{ + VmathQuat result; + vmathQMakeRotationArc(&result, &unitVec0, &unitVec1); + return result; +} + +static inline VmathQuat vmathQMakeRotationAxis_V( float radians, VmathVector3 unitVec ) +{ + VmathQuat result; + vmathQMakeRotationAxis(&result, radians, &unitVec); + return result; +} + +static inline VmathQuat vmathQMakeRotationX_V( float radians ) +{ + VmathQuat result; + vmathQMakeRotationX(&result, radians); + return result; +} + +static inline VmathQuat vmathQMakeRotationY_V( float radians ) +{ + VmathQuat result; + vmathQMakeRotationY(&result, radians); + return result; +} + +static inline VmathQuat vmathQMakeRotationZ_V( float radians ) +{ + VmathQuat result; + vmathQMakeRotationZ(&result, radians); + return result; +} + +static inline VmathQuat vmathQMul_V( VmathQuat quat0, VmathQuat quat1 ) +{ + VmathQuat result; + vmathQMul(&result, &quat0, &quat1); + return result; +} + +static inline VmathVector3 vmathQRotate_V( VmathQuat quat, VmathVector3 vec ) +{ + VmathVector3 result; + vmathQRotate(&result, &quat, &vec); + return result; +} + +static inline VmathQuat vmathQConj_V( VmathQuat quat ) +{ + VmathQuat result; + vmathQConj(&result, &quat); + return result; +} + +static inline VmathQuat vmathQSelect_V( VmathQuat quat0, VmathQuat quat1, unsigned int select1 ) +{ + VmathQuat result; + vmathQSelect(&result, &quat0, &quat1, select1); + return result; +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathQPrint_V( VmathQuat quat ) +{ + vmathQPrint(&quat); +} + +static inline void vmathQPrints_V( VmathQuat quat, const char *name ) +{ + vmathQPrints(&quat, name); +} + +#endif + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/scalar/c/vec_aos.h b/Extras/vectormathlibrary/include/vectormath/scalar/c/vec_aos.h new file mode 100644 index 000000000..f0b0f437d --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/scalar/c/vec_aos.h @@ -0,0 +1,971 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_VEC_AOS_C_H +#define _VECTORMATH_VEC_AOS_C_H +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/*----------------------------------------------------------------------------- + * Constants + */ +#define _VECTORMATH_SLERP_TOL 0.999f + +/*----------------------------------------------------------------------------- + * Definitions + */ +#ifndef _VECTORMATH_INTERNAL_FUNCTIONS +#define _VECTORMATH_INTERNAL_FUNCTIONS + +#endif + +static inline void vmathV3Copy( VmathVector3 *result, const VmathVector3 *vec ) +{ + result->x = vec->x; + result->y = vec->y; + result->z = vec->z; +} + +static inline void vmathV3MakeFromElems( VmathVector3 *result, float _x, float _y, float _z ) +{ + result->x = _x; + result->y = _y; + result->z = _z; +} + +static inline void vmathV3MakeFromP3( VmathVector3 *result, const VmathPoint3 *pnt ) +{ + result->x = pnt->x; + result->y = pnt->y; + result->z = pnt->z; +} + +static inline void vmathV3MakeFromScalar( VmathVector3 *result, float scalar ) +{ + result->x = scalar; + result->y = scalar; + result->z = scalar; +} + +static inline void vmathV3MakeXAxis( VmathVector3 *result ) +{ + vmathV3MakeFromElems( result, 1.0f, 0.0f, 0.0f ); +} + +static inline void vmathV3MakeYAxis( VmathVector3 *result ) +{ + vmathV3MakeFromElems( result, 0.0f, 1.0f, 0.0f ); +} + +static inline void vmathV3MakeZAxis( VmathVector3 *result ) +{ + vmathV3MakeFromElems( result, 0.0f, 0.0f, 1.0f ); +} + +static inline void vmathV3Lerp( VmathVector3 *result, float t, const VmathVector3 *vec0, const VmathVector3 *vec1 ) +{ + VmathVector3 tmpV3_0, tmpV3_1; + vmathV3Sub( &tmpV3_0, vec1, vec0 ); + vmathV3ScalarMul( &tmpV3_1, &tmpV3_0, t ); + vmathV3Add( result, vec0, &tmpV3_1 ); +} + +static inline void vmathV3Slerp( VmathVector3 *result, float t, const VmathVector3 *unitVec0, const VmathVector3 *unitVec1 ) +{ + VmathVector3 tmpV3_0, tmpV3_1; + float recipSinAngle, scale0, scale1, cosAngle, angle; + cosAngle = vmathV3Dot( unitVec0, unitVec1 ); + if ( cosAngle < _VECTORMATH_SLERP_TOL ) { + angle = acosf( cosAngle ); + recipSinAngle = ( 1.0f / sinf( angle ) ); + scale0 = ( sinf( ( ( 1.0f - t ) * angle ) ) * recipSinAngle ); + scale1 = ( sinf( ( t * angle ) ) * recipSinAngle ); + } else { + scale0 = ( 1.0f - t ); + scale1 = t; + } + vmathV3ScalarMul( &tmpV3_0, unitVec0, scale0 ); + vmathV3ScalarMul( &tmpV3_1, unitVec1, scale1 ); + vmathV3Add( result, &tmpV3_0, &tmpV3_1 ); +} + +static inline void vmathV3SetX( VmathVector3 *result, float _x ) +{ + result->x = _x; +} + +static inline float vmathV3GetX( const VmathVector3 *vec ) +{ + return vec->x; +} + +static inline void vmathV3SetY( VmathVector3 *result, float _y ) +{ + result->y = _y; +} + +static inline float vmathV3GetY( const VmathVector3 *vec ) +{ + return vec->y; +} + +static inline void vmathV3SetZ( VmathVector3 *result, float _z ) +{ + result->z = _z; +} + +static inline float vmathV3GetZ( const VmathVector3 *vec ) +{ + return vec->z; +} + +static inline void vmathV3SetElem( VmathVector3 *result, int idx, float value ) +{ + *(&result->x + idx) = value; +} + +static inline float vmathV3GetElem( const VmathVector3 *vec, int idx ) +{ + return *(&vec->x + idx); +} + +static inline void vmathV3Add( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1 ) +{ + result->x = ( vec0->x + vec1->x ); + result->y = ( vec0->y + vec1->y ); + result->z = ( vec0->z + vec1->z ); +} + +static inline void vmathV3Sub( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1 ) +{ + result->x = ( vec0->x - vec1->x ); + result->y = ( vec0->y - vec1->y ); + result->z = ( vec0->z - vec1->z ); +} + +static inline void vmathV3AddP3( VmathPoint3 *result, const VmathVector3 *vec, const VmathPoint3 *pnt1 ) +{ + result->x = ( vec->x + pnt1->x ); + result->y = ( vec->y + pnt1->y ); + result->z = ( vec->z + pnt1->z ); +} + +static inline void vmathV3ScalarMul( VmathVector3 *result, const VmathVector3 *vec, float scalar ) +{ + result->x = ( vec->x * scalar ); + result->y = ( vec->y * scalar ); + result->z = ( vec->z * scalar ); +} + +static inline void vmathV3ScalarDiv( VmathVector3 *result, const VmathVector3 *vec, float scalar ) +{ + result->x = ( vec->x / scalar ); + result->y = ( vec->y / scalar ); + result->z = ( vec->z / scalar ); +} + +static inline void vmathV3Neg( VmathVector3 *result, const VmathVector3 *vec ) +{ + result->x = -vec->x; + result->y = -vec->y; + result->z = -vec->z; +} + +static inline void vmathV3MulPerElem( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1 ) +{ + result->x = ( vec0->x * vec1->x ); + result->y = ( vec0->y * vec1->y ); + result->z = ( vec0->z * vec1->z ); +} + +static inline void vmathV3DivPerElem( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1 ) +{ + result->x = ( vec0->x / vec1->x ); + result->y = ( vec0->y / vec1->y ); + result->z = ( vec0->z / vec1->z ); +} + +static inline void vmathV3RecipPerElem( VmathVector3 *result, const VmathVector3 *vec ) +{ + result->x = ( 1.0f / vec->x ); + result->y = ( 1.0f / vec->y ); + result->z = ( 1.0f / vec->z ); +} + +static inline void vmathV3SqrtPerElem( VmathVector3 *result, const VmathVector3 *vec ) +{ + result->x = sqrtf( vec->x ); + result->y = sqrtf( vec->y ); + result->z = sqrtf( vec->z ); +} + +static inline void vmathV3RsqrtPerElem( VmathVector3 *result, const VmathVector3 *vec ) +{ + result->x = ( 1.0f / sqrtf( vec->x ) ); + result->y = ( 1.0f / sqrtf( vec->y ) ); + result->z = ( 1.0f / sqrtf( vec->z ) ); +} + +static inline void vmathV3AbsPerElem( VmathVector3 *result, const VmathVector3 *vec ) +{ + result->x = fabsf( vec->x ); + result->y = fabsf( vec->y ); + result->z = fabsf( vec->z ); +} + +static inline void vmathV3CopySignPerElem( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1 ) +{ + result->x = ( vec1->x < 0.0f )? -fabsf( vec0->x ) : fabsf( vec0->x ); + result->y = ( vec1->y < 0.0f )? -fabsf( vec0->y ) : fabsf( vec0->y ); + result->z = ( vec1->z < 0.0f )? -fabsf( vec0->z ) : fabsf( vec0->z ); +} + +static inline void vmathV3MaxPerElem( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1 ) +{ + result->x = (vec0->x > vec1->x)? vec0->x : vec1->x; + result->y = (vec0->y > vec1->y)? vec0->y : vec1->y; + result->z = (vec0->z > vec1->z)? vec0->z : vec1->z; +} + +static inline float vmathV3MaxElem( const VmathVector3 *vec ) +{ + float result; + result = (vec->x > vec->y)? vec->x : vec->y; + result = (vec->z > result)? vec->z : result; + return result; +} + +static inline void vmathV3MinPerElem( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1 ) +{ + result->x = (vec0->x < vec1->x)? vec0->x : vec1->x; + result->y = (vec0->y < vec1->y)? vec0->y : vec1->y; + result->z = (vec0->z < vec1->z)? vec0->z : vec1->z; +} + +static inline float vmathV3MinElem( const VmathVector3 *vec ) +{ + float result; + result = (vec->x < vec->y)? vec->x : vec->y; + result = (vec->z < result)? vec->z : result; + return result; +} + +static inline float vmathV3Sum( const VmathVector3 *vec ) +{ + float result; + result = ( vec->x + vec->y ); + result = ( result + vec->z ); + return result; +} + +static inline float vmathV3Dot( const VmathVector3 *vec0, const VmathVector3 *vec1 ) +{ + float result; + result = ( vec0->x * vec1->x ); + result = ( result + ( vec0->y * vec1->y ) ); + result = ( result + ( vec0->z * vec1->z ) ); + return result; +} + +static inline float vmathV3LengthSqr( const VmathVector3 *vec ) +{ + float result; + result = ( vec->x * vec->x ); + result = ( result + ( vec->y * vec->y ) ); + result = ( result + ( vec->z * vec->z ) ); + return result; +} + +static inline float vmathV3Length( const VmathVector3 *vec ) +{ + return sqrtf( vmathV3LengthSqr( vec ) ); +} + +static inline void vmathV3Normalize( VmathVector3 *result, const VmathVector3 *vec ) +{ + float lenSqr, lenInv; + lenSqr = vmathV3LengthSqr( vec ); + lenInv = ( 1.0f / sqrtf( lenSqr ) ); + result->x = ( vec->x * lenInv ); + result->y = ( vec->y * lenInv ); + result->z = ( vec->z * lenInv ); +} + +static inline void vmathV3Cross( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1 ) +{ + float tmpX, tmpY, tmpZ; + tmpX = ( ( vec0->y * vec1->z ) - ( vec0->z * vec1->y ) ); + tmpY = ( ( vec0->z * vec1->x ) - ( vec0->x * vec1->z ) ); + tmpZ = ( ( vec0->x * vec1->y ) - ( vec0->y * vec1->x ) ); + vmathV3MakeFromElems( result, tmpX, tmpY, tmpZ ); +} + +static inline void vmathV3Select( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1, unsigned int select1 ) +{ + result->x = ( select1 )? vec1->x : vec0->x; + result->y = ( select1 )? vec1->y : vec0->y; + result->z = ( select1 )? vec1->z : vec0->z; +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathV3Print( const VmathVector3 *vec ) +{ + printf( "( %f %f %f )\n", vec->x, vec->y, vec->z ); +} + +static inline void vmathV3Prints( const VmathVector3 *vec, const char *name ) +{ + printf( "%s: ( %f %f %f )\n", name, vec->x, vec->y, vec->z ); +} + +#endif + +static inline void vmathV4Copy( VmathVector4 *result, const VmathVector4 *vec ) +{ + result->x = vec->x; + result->y = vec->y; + result->z = vec->z; + result->w = vec->w; +} + +static inline void vmathV4MakeFromElems( VmathVector4 *result, float _x, float _y, float _z, float _w ) +{ + result->x = _x; + result->y = _y; + result->z = _z; + result->w = _w; +} + +static inline void vmathV4MakeFromV3Scalar( VmathVector4 *result, const VmathVector3 *xyz, float _w ) +{ + vmathV4SetXYZ( result, xyz ); + vmathV4SetW( result, _w ); +} + +static inline void vmathV4MakeFromV3( VmathVector4 *result, const VmathVector3 *vec ) +{ + result->x = vec->x; + result->y = vec->y; + result->z = vec->z; + result->w = 0.0f; +} + +static inline void vmathV4MakeFromP3( VmathVector4 *result, const VmathPoint3 *pnt ) +{ + result->x = pnt->x; + result->y = pnt->y; + result->z = pnt->z; + result->w = 1.0f; +} + +static inline void vmathV4MakeFromQ( VmathVector4 *result, const VmathQuat *quat ) +{ + result->x = quat->x; + result->y = quat->y; + result->z = quat->z; + result->w = quat->w; +} + +static inline void vmathV4MakeFromScalar( VmathVector4 *result, float scalar ) +{ + result->x = scalar; + result->y = scalar; + result->z = scalar; + result->w = scalar; +} + +static inline void vmathV4MakeXAxis( VmathVector4 *result ) +{ + vmathV4MakeFromElems( result, 1.0f, 0.0f, 0.0f, 0.0f ); +} + +static inline void vmathV4MakeYAxis( VmathVector4 *result ) +{ + vmathV4MakeFromElems( result, 0.0f, 1.0f, 0.0f, 0.0f ); +} + +static inline void vmathV4MakeZAxis( VmathVector4 *result ) +{ + vmathV4MakeFromElems( result, 0.0f, 0.0f, 1.0f, 0.0f ); +} + +static inline void vmathV4MakeWAxis( VmathVector4 *result ) +{ + vmathV4MakeFromElems( result, 0.0f, 0.0f, 0.0f, 1.0f ); +} + +static inline void vmathV4Lerp( VmathVector4 *result, float t, const VmathVector4 *vec0, const VmathVector4 *vec1 ) +{ + VmathVector4 tmpV4_0, tmpV4_1; + vmathV4Sub( &tmpV4_0, vec1, vec0 ); + vmathV4ScalarMul( &tmpV4_1, &tmpV4_0, t ); + vmathV4Add( result, vec0, &tmpV4_1 ); +} + +static inline void vmathV4Slerp( VmathVector4 *result, float t, const VmathVector4 *unitVec0, const VmathVector4 *unitVec1 ) +{ + VmathVector4 tmpV4_0, tmpV4_1; + float recipSinAngle, scale0, scale1, cosAngle, angle; + cosAngle = vmathV4Dot( unitVec0, unitVec1 ); + if ( cosAngle < _VECTORMATH_SLERP_TOL ) { + angle = acosf( cosAngle ); + recipSinAngle = ( 1.0f / sinf( angle ) ); + scale0 = ( sinf( ( ( 1.0f - t ) * angle ) ) * recipSinAngle ); + scale1 = ( sinf( ( t * angle ) ) * recipSinAngle ); + } else { + scale0 = ( 1.0f - t ); + scale1 = t; + } + vmathV4ScalarMul( &tmpV4_0, unitVec0, scale0 ); + vmathV4ScalarMul( &tmpV4_1, unitVec1, scale1 ); + vmathV4Add( result, &tmpV4_0, &tmpV4_1 ); +} + +static inline void vmathV4SetXYZ( VmathVector4 *result, const VmathVector3 *vec ) +{ + result->x = vec->x; + result->y = vec->y; + result->z = vec->z; +} + +static inline void vmathV4GetXYZ( VmathVector3 *result, const VmathVector4 *vec ) +{ + vmathV3MakeFromElems( result, vec->x, vec->y, vec->z ); +} + +static inline void vmathV4SetX( VmathVector4 *result, float _x ) +{ + result->x = _x; +} + +static inline float vmathV4GetX( const VmathVector4 *vec ) +{ + return vec->x; +} + +static inline void vmathV4SetY( VmathVector4 *result, float _y ) +{ + result->y = _y; +} + +static inline float vmathV4GetY( const VmathVector4 *vec ) +{ + return vec->y; +} + +static inline void vmathV4SetZ( VmathVector4 *result, float _z ) +{ + result->z = _z; +} + +static inline float vmathV4GetZ( const VmathVector4 *vec ) +{ + return vec->z; +} + +static inline void vmathV4SetW( VmathVector4 *result, float _w ) +{ + result->w = _w; +} + +static inline float vmathV4GetW( const VmathVector4 *vec ) +{ + return vec->w; +} + +static inline void vmathV4SetElem( VmathVector4 *result, int idx, float value ) +{ + *(&result->x + idx) = value; +} + +static inline float vmathV4GetElem( const VmathVector4 *vec, int idx ) +{ + return *(&vec->x + idx); +} + +static inline void vmathV4Add( VmathVector4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1 ) +{ + result->x = ( vec0->x + vec1->x ); + result->y = ( vec0->y + vec1->y ); + result->z = ( vec0->z + vec1->z ); + result->w = ( vec0->w + vec1->w ); +} + +static inline void vmathV4Sub( VmathVector4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1 ) +{ + result->x = ( vec0->x - vec1->x ); + result->y = ( vec0->y - vec1->y ); + result->z = ( vec0->z - vec1->z ); + result->w = ( vec0->w - vec1->w ); +} + +static inline void vmathV4ScalarMul( VmathVector4 *result, const VmathVector4 *vec, float scalar ) +{ + result->x = ( vec->x * scalar ); + result->y = ( vec->y * scalar ); + result->z = ( vec->z * scalar ); + result->w = ( vec->w * scalar ); +} + +static inline void vmathV4ScalarDiv( VmathVector4 *result, const VmathVector4 *vec, float scalar ) +{ + result->x = ( vec->x / scalar ); + result->y = ( vec->y / scalar ); + result->z = ( vec->z / scalar ); + result->w = ( vec->w / scalar ); +} + +static inline void vmathV4Neg( VmathVector4 *result, const VmathVector4 *vec ) +{ + result->x = -vec->x; + result->y = -vec->y; + result->z = -vec->z; + result->w = -vec->w; +} + +static inline void vmathV4MulPerElem( VmathVector4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1 ) +{ + result->x = ( vec0->x * vec1->x ); + result->y = ( vec0->y * vec1->y ); + result->z = ( vec0->z * vec1->z ); + result->w = ( vec0->w * vec1->w ); +} + +static inline void vmathV4DivPerElem( VmathVector4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1 ) +{ + result->x = ( vec0->x / vec1->x ); + result->y = ( vec0->y / vec1->y ); + result->z = ( vec0->z / vec1->z ); + result->w = ( vec0->w / vec1->w ); +} + +static inline void vmathV4RecipPerElem( VmathVector4 *result, const VmathVector4 *vec ) +{ + result->x = ( 1.0f / vec->x ); + result->y = ( 1.0f / vec->y ); + result->z = ( 1.0f / vec->z ); + result->w = ( 1.0f / vec->w ); +} + +static inline void vmathV4SqrtPerElem( VmathVector4 *result, const VmathVector4 *vec ) +{ + result->x = sqrtf( vec->x ); + result->y = sqrtf( vec->y ); + result->z = sqrtf( vec->z ); + result->w = sqrtf( vec->w ); +} + +static inline void vmathV4RsqrtPerElem( VmathVector4 *result, const VmathVector4 *vec ) +{ + result->x = ( 1.0f / sqrtf( vec->x ) ); + result->y = ( 1.0f / sqrtf( vec->y ) ); + result->z = ( 1.0f / sqrtf( vec->z ) ); + result->w = ( 1.0f / sqrtf( vec->w ) ); +} + +static inline void vmathV4AbsPerElem( VmathVector4 *result, const VmathVector4 *vec ) +{ + result->x = fabsf( vec->x ); + result->y = fabsf( vec->y ); + result->z = fabsf( vec->z ); + result->w = fabsf( vec->w ); +} + +static inline void vmathV4CopySignPerElem( VmathVector4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1 ) +{ + result->x = ( vec1->x < 0.0f )? -fabsf( vec0->x ) : fabsf( vec0->x ); + result->y = ( vec1->y < 0.0f )? -fabsf( vec0->y ) : fabsf( vec0->y ); + result->z = ( vec1->z < 0.0f )? -fabsf( vec0->z ) : fabsf( vec0->z ); + result->w = ( vec1->w < 0.0f )? -fabsf( vec0->w ) : fabsf( vec0->w ); +} + +static inline void vmathV4MaxPerElem( VmathVector4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1 ) +{ + result->x = (vec0->x > vec1->x)? vec0->x : vec1->x; + result->y = (vec0->y > vec1->y)? vec0->y : vec1->y; + result->z = (vec0->z > vec1->z)? vec0->z : vec1->z; + result->w = (vec0->w > vec1->w)? vec0->w : vec1->w; +} + +static inline float vmathV4MaxElem( const VmathVector4 *vec ) +{ + float result; + result = (vec->x > vec->y)? vec->x : vec->y; + result = (vec->z > result)? vec->z : result; + result = (vec->w > result)? vec->w : result; + return result; +} + +static inline void vmathV4MinPerElem( VmathVector4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1 ) +{ + result->x = (vec0->x < vec1->x)? vec0->x : vec1->x; + result->y = (vec0->y < vec1->y)? vec0->y : vec1->y; + result->z = (vec0->z < vec1->z)? vec0->z : vec1->z; + result->w = (vec0->w < vec1->w)? vec0->w : vec1->w; +} + +static inline float vmathV4MinElem( const VmathVector4 *vec ) +{ + float result; + result = (vec->x < vec->y)? vec->x : vec->y; + result = (vec->z < result)? vec->z : result; + result = (vec->w < result)? vec->w : result; + return result; +} + +static inline float vmathV4Sum( const VmathVector4 *vec ) +{ + float result; + result = ( vec->x + vec->y ); + result = ( result + vec->z ); + result = ( result + vec->w ); + return result; +} + +static inline float vmathV4Dot( const VmathVector4 *vec0, const VmathVector4 *vec1 ) +{ + float result; + result = ( vec0->x * vec1->x ); + result = ( result + ( vec0->y * vec1->y ) ); + result = ( result + ( vec0->z * vec1->z ) ); + result = ( result + ( vec0->w * vec1->w ) ); + return result; +} + +static inline float vmathV4LengthSqr( const VmathVector4 *vec ) +{ + float result; + result = ( vec->x * vec->x ); + result = ( result + ( vec->y * vec->y ) ); + result = ( result + ( vec->z * vec->z ) ); + result = ( result + ( vec->w * vec->w ) ); + return result; +} + +static inline float vmathV4Length( const VmathVector4 *vec ) +{ + return sqrtf( vmathV4LengthSqr( vec ) ); +} + +static inline void vmathV4Normalize( VmathVector4 *result, const VmathVector4 *vec ) +{ + float lenSqr, lenInv; + lenSqr = vmathV4LengthSqr( vec ); + lenInv = ( 1.0f / sqrtf( lenSqr ) ); + result->x = ( vec->x * lenInv ); + result->y = ( vec->y * lenInv ); + result->z = ( vec->z * lenInv ); + result->w = ( vec->w * lenInv ); +} + +static inline void vmathV4Select( VmathVector4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1, unsigned int select1 ) +{ + result->x = ( select1 )? vec1->x : vec0->x; + result->y = ( select1 )? vec1->y : vec0->y; + result->z = ( select1 )? vec1->z : vec0->z; + result->w = ( select1 )? vec1->w : vec0->w; +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathV4Print( const VmathVector4 *vec ) +{ + printf( "( %f %f %f %f )\n", vec->x, vec->y, vec->z, vec->w ); +} + +static inline void vmathV4Prints( const VmathVector4 *vec, const char *name ) +{ + printf( "%s: ( %f %f %f %f )\n", name, vec->x, vec->y, vec->z, vec->w ); +} + +#endif + +static inline void vmathP3Copy( VmathPoint3 *result, const VmathPoint3 *pnt ) +{ + result->x = pnt->x; + result->y = pnt->y; + result->z = pnt->z; +} + +static inline void vmathP3MakeFromElems( VmathPoint3 *result, float _x, float _y, float _z ) +{ + result->x = _x; + result->y = _y; + result->z = _z; +} + +static inline void vmathP3MakeFromV3( VmathPoint3 *result, const VmathVector3 *vec ) +{ + result->x = vec->x; + result->y = vec->y; + result->z = vec->z; +} + +static inline void vmathP3MakeFromScalar( VmathPoint3 *result, float scalar ) +{ + result->x = scalar; + result->y = scalar; + result->z = scalar; +} + +static inline void vmathP3Lerp( VmathPoint3 *result, float t, const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ) +{ + VmathVector3 tmpV3_0, tmpV3_1; + vmathP3Sub( &tmpV3_0, pnt1, pnt0 ); + vmathV3ScalarMul( &tmpV3_1, &tmpV3_0, t ); + vmathP3AddV3( result, pnt0, &tmpV3_1 ); +} + +static inline void vmathP3SetX( VmathPoint3 *result, float _x ) +{ + result->x = _x; +} + +static inline float vmathP3GetX( const VmathPoint3 *pnt ) +{ + return pnt->x; +} + +static inline void vmathP3SetY( VmathPoint3 *result, float _y ) +{ + result->y = _y; +} + +static inline float vmathP3GetY( const VmathPoint3 *pnt ) +{ + return pnt->y; +} + +static inline void vmathP3SetZ( VmathPoint3 *result, float _z ) +{ + result->z = _z; +} + +static inline float vmathP3GetZ( const VmathPoint3 *pnt ) +{ + return pnt->z; +} + +static inline void vmathP3SetElem( VmathPoint3 *result, int idx, float value ) +{ + *(&result->x + idx) = value; +} + +static inline float vmathP3GetElem( const VmathPoint3 *pnt, int idx ) +{ + return *(&pnt->x + idx); +} + +static inline void vmathP3Sub( VmathVector3 *result, const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ) +{ + result->x = ( pnt0->x - pnt1->x ); + result->y = ( pnt0->y - pnt1->y ); + result->z = ( pnt0->z - pnt1->z ); +} + +static inline void vmathP3AddV3( VmathPoint3 *result, const VmathPoint3 *pnt, const VmathVector3 *vec1 ) +{ + result->x = ( pnt->x + vec1->x ); + result->y = ( pnt->y + vec1->y ); + result->z = ( pnt->z + vec1->z ); +} + +static inline void vmathP3SubV3( VmathPoint3 *result, const VmathPoint3 *pnt, const VmathVector3 *vec1 ) +{ + result->x = ( pnt->x - vec1->x ); + result->y = ( pnt->y - vec1->y ); + result->z = ( pnt->z - vec1->z ); +} + +static inline void vmathP3MulPerElem( VmathPoint3 *result, const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ) +{ + result->x = ( pnt0->x * pnt1->x ); + result->y = ( pnt0->y * pnt1->y ); + result->z = ( pnt0->z * pnt1->z ); +} + +static inline void vmathP3DivPerElem( VmathPoint3 *result, const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ) +{ + result->x = ( pnt0->x / pnt1->x ); + result->y = ( pnt0->y / pnt1->y ); + result->z = ( pnt0->z / pnt1->z ); +} + +static inline void vmathP3RecipPerElem( VmathPoint3 *result, const VmathPoint3 *pnt ) +{ + result->x = ( 1.0f / pnt->x ); + result->y = ( 1.0f / pnt->y ); + result->z = ( 1.0f / pnt->z ); +} + +static inline void vmathP3SqrtPerElem( VmathPoint3 *result, const VmathPoint3 *pnt ) +{ + result->x = sqrtf( pnt->x ); + result->y = sqrtf( pnt->y ); + result->z = sqrtf( pnt->z ); +} + +static inline void vmathP3RsqrtPerElem( VmathPoint3 *result, const VmathPoint3 *pnt ) +{ + result->x = ( 1.0f / sqrtf( pnt->x ) ); + result->y = ( 1.0f / sqrtf( pnt->y ) ); + result->z = ( 1.0f / sqrtf( pnt->z ) ); +} + +static inline void vmathP3AbsPerElem( VmathPoint3 *result, const VmathPoint3 *pnt ) +{ + result->x = fabsf( pnt->x ); + result->y = fabsf( pnt->y ); + result->z = fabsf( pnt->z ); +} + +static inline void vmathP3CopySignPerElem( VmathPoint3 *result, const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ) +{ + result->x = ( pnt1->x < 0.0f )? -fabsf( pnt0->x ) : fabsf( pnt0->x ); + result->y = ( pnt1->y < 0.0f )? -fabsf( pnt0->y ) : fabsf( pnt0->y ); + result->z = ( pnt1->z < 0.0f )? -fabsf( pnt0->z ) : fabsf( pnt0->z ); +} + +static inline void vmathP3MaxPerElem( VmathPoint3 *result, const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ) +{ + result->x = (pnt0->x > pnt1->x)? pnt0->x : pnt1->x; + result->y = (pnt0->y > pnt1->y)? pnt0->y : pnt1->y; + result->z = (pnt0->z > pnt1->z)? pnt0->z : pnt1->z; +} + +static inline float vmathP3MaxElem( const VmathPoint3 *pnt ) +{ + float result; + result = (pnt->x > pnt->y)? pnt->x : pnt->y; + result = (pnt->z > result)? pnt->z : result; + return result; +} + +static inline void vmathP3MinPerElem( VmathPoint3 *result, const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ) +{ + result->x = (pnt0->x < pnt1->x)? pnt0->x : pnt1->x; + result->y = (pnt0->y < pnt1->y)? pnt0->y : pnt1->y; + result->z = (pnt0->z < pnt1->z)? pnt0->z : pnt1->z; +} + +static inline float vmathP3MinElem( const VmathPoint3 *pnt ) +{ + float result; + result = (pnt->x < pnt->y)? pnt->x : pnt->y; + result = (pnt->z < result)? pnt->z : result; + return result; +} + +static inline float vmathP3Sum( const VmathPoint3 *pnt ) +{ + float result; + result = ( pnt->x + pnt->y ); + result = ( result + pnt->z ); + return result; +} + +static inline void vmathP3Scale( VmathPoint3 *result, const VmathPoint3 *pnt, float scaleVal ) +{ + VmathPoint3 tmpP3_0; + vmathP3MakeFromScalar( &tmpP3_0, scaleVal ); + vmathP3MulPerElem( result, pnt, &tmpP3_0 ); +} + +static inline void vmathP3NonUniformScale( VmathPoint3 *result, const VmathPoint3 *pnt, const VmathVector3 *scaleVec ) +{ + VmathPoint3 tmpP3_0; + vmathP3MakeFromV3( &tmpP3_0, scaleVec ); + vmathP3MulPerElem( result, pnt, &tmpP3_0 ); +} + +static inline float vmathP3Projection( const VmathPoint3 *pnt, const VmathVector3 *unitVec ) +{ + float result; + result = ( pnt->x * unitVec->x ); + result = ( result + ( pnt->y * unitVec->y ) ); + result = ( result + ( pnt->z * unitVec->z ) ); + return result; +} + +static inline float vmathP3DistSqrFromOrigin( const VmathPoint3 *pnt ) +{ + VmathVector3 tmpV3_0; + vmathV3MakeFromP3( &tmpV3_0, pnt ); + return vmathV3LengthSqr( &tmpV3_0 ); +} + +static inline float vmathP3DistFromOrigin( const VmathPoint3 *pnt ) +{ + VmathVector3 tmpV3_0; + vmathV3MakeFromP3( &tmpV3_0, pnt ); + return vmathV3Length( &tmpV3_0 ); +} + +static inline float vmathP3DistSqr( const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ) +{ + VmathVector3 tmpV3_0; + vmathP3Sub( &tmpV3_0, pnt1, pnt0 ); + return vmathV3LengthSqr( &tmpV3_0 ); +} + +static inline float vmathP3Dist( const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ) +{ + VmathVector3 tmpV3_0; + vmathP3Sub( &tmpV3_0, pnt1, pnt0 ); + return vmathV3Length( &tmpV3_0 ); +} + +static inline void vmathP3Select( VmathPoint3 *result, const VmathPoint3 *pnt0, const VmathPoint3 *pnt1, unsigned int select1 ) +{ + result->x = ( select1 )? pnt1->x : pnt0->x; + result->y = ( select1 )? pnt1->y : pnt0->y; + result->z = ( select1 )? pnt1->z : pnt0->z; +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathP3Print( const VmathPoint3 *pnt ) +{ + printf( "( %f %f %f )\n", pnt->x, pnt->y, pnt->z ); +} + +static inline void vmathP3Prints( const VmathPoint3 *pnt, const char *name ) +{ + printf( "%s: ( %f %f %f )\n", name, pnt->x, pnt->y, pnt->z ); +} + +#endif + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/scalar/c/vec_aos_v.h b/Extras/vectormathlibrary/include/vectormath/scalar/c/vec_aos_v.h new file mode 100644 index 000000000..75c49370d --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/scalar/c/vec_aos_v.h @@ -0,0 +1,848 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_VEC_AOS_V_C_H +#define _VECTORMATH_VEC_AOS_V_C_H +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/*----------------------------------------------------------------------------- + * Constants + */ +#define _VECTORMATH_SLERP_TOL 0.999f + +/*----------------------------------------------------------------------------- + * Definitions + */ +#ifndef _VECTORMATH_INTERNAL_FUNCTIONS +#define _VECTORMATH_INTERNAL_FUNCTIONS + +#endif + +static inline VmathVector3 vmathV3MakeFromElems_V( float _x, float _y, float _z ) +{ + VmathVector3 result; + vmathV3MakeFromElems(&result, _x, _y, _z); + return result; +} + +static inline VmathVector3 vmathV3MakeFromP3_V( VmathPoint3 pnt ) +{ + VmathVector3 result; + vmathV3MakeFromP3(&result, &pnt); + return result; +} + +static inline VmathVector3 vmathV3MakeFromScalar_V( float scalar ) +{ + VmathVector3 result; + vmathV3MakeFromScalar(&result, scalar); + return result; +} + +static inline VmathVector3 vmathV3MakeXAxis_V( ) +{ + VmathVector3 result; + vmathV3MakeXAxis(&result); + return result; +} + +static inline VmathVector3 vmathV3MakeYAxis_V( ) +{ + VmathVector3 result; + vmathV3MakeYAxis(&result); + return result; +} + +static inline VmathVector3 vmathV3MakeZAxis_V( ) +{ + VmathVector3 result; + vmathV3MakeZAxis(&result); + return result; +} + +static inline VmathVector3 vmathV3Lerp_V( float t, VmathVector3 vec0, VmathVector3 vec1 ) +{ + VmathVector3 result; + vmathV3Lerp(&result, t, &vec0, &vec1); + return result; +} + +static inline VmathVector3 vmathV3Slerp_V( float t, VmathVector3 unitVec0, VmathVector3 unitVec1 ) +{ + VmathVector3 result; + vmathV3Slerp(&result, t, &unitVec0, &unitVec1); + return result; +} + +static inline void vmathV3SetX_V( VmathVector3 *result, float _x ) +{ + vmathV3SetX(result, _x); +} + +static inline float vmathV3GetX_V( VmathVector3 vec ) +{ + return vmathV3GetX(&vec); +} + +static inline void vmathV3SetY_V( VmathVector3 *result, float _y ) +{ + vmathV3SetY(result, _y); +} + +static inline float vmathV3GetY_V( VmathVector3 vec ) +{ + return vmathV3GetY(&vec); +} + +static inline void vmathV3SetZ_V( VmathVector3 *result, float _z ) +{ + vmathV3SetZ(result, _z); +} + +static inline float vmathV3GetZ_V( VmathVector3 vec ) +{ + return vmathV3GetZ(&vec); +} + +static inline void vmathV3SetElem_V( VmathVector3 *result, int idx, float value ) +{ + vmathV3SetElem(result, idx, value); +} + +static inline float vmathV3GetElem_V( VmathVector3 vec, int idx ) +{ + return vmathV3GetElem(&vec, idx); +} + +static inline VmathVector3 vmathV3Add_V( VmathVector3 vec0, VmathVector3 vec1 ) +{ + VmathVector3 result; + vmathV3Add(&result, &vec0, &vec1); + return result; +} + +static inline VmathVector3 vmathV3Sub_V( VmathVector3 vec0, VmathVector3 vec1 ) +{ + VmathVector3 result; + vmathV3Sub(&result, &vec0, &vec1); + return result; +} + +static inline VmathPoint3 vmathV3AddP3_V( VmathVector3 vec, VmathPoint3 pnt1 ) +{ + VmathPoint3 result; + vmathV3AddP3(&result, &vec, &pnt1); + return result; +} + +static inline VmathVector3 vmathV3ScalarMul_V( VmathVector3 vec, float scalar ) +{ + VmathVector3 result; + vmathV3ScalarMul(&result, &vec, scalar); + return result; +} + +static inline VmathVector3 vmathV3ScalarDiv_V( VmathVector3 vec, float scalar ) +{ + VmathVector3 result; + vmathV3ScalarDiv(&result, &vec, scalar); + return result; +} + +static inline VmathVector3 vmathV3Neg_V( VmathVector3 vec ) +{ + VmathVector3 result; + vmathV3Neg(&result, &vec); + return result; +} + +static inline VmathVector3 vmathV3MulPerElem_V( VmathVector3 vec0, VmathVector3 vec1 ) +{ + VmathVector3 result; + vmathV3MulPerElem(&result, &vec0, &vec1); + return result; +} + +static inline VmathVector3 vmathV3DivPerElem_V( VmathVector3 vec0, VmathVector3 vec1 ) +{ + VmathVector3 result; + vmathV3DivPerElem(&result, &vec0, &vec1); + return result; +} + +static inline VmathVector3 vmathV3RecipPerElem_V( VmathVector3 vec ) +{ + VmathVector3 result; + vmathV3RecipPerElem(&result, &vec); + return result; +} + +static inline VmathVector3 vmathV3SqrtPerElem_V( VmathVector3 vec ) +{ + VmathVector3 result; + vmathV3SqrtPerElem(&result, &vec); + return result; +} + +static inline VmathVector3 vmathV3RsqrtPerElem_V( VmathVector3 vec ) +{ + VmathVector3 result; + vmathV3RsqrtPerElem(&result, &vec); + return result; +} + +static inline VmathVector3 vmathV3AbsPerElem_V( VmathVector3 vec ) +{ + VmathVector3 result; + vmathV3AbsPerElem(&result, &vec); + return result; +} + +static inline VmathVector3 vmathV3CopySignPerElem_V( VmathVector3 vec0, VmathVector3 vec1 ) +{ + VmathVector3 result; + vmathV3CopySignPerElem(&result, &vec0, &vec1); + return result; +} + +static inline VmathVector3 vmathV3MaxPerElem_V( VmathVector3 vec0, VmathVector3 vec1 ) +{ + VmathVector3 result; + vmathV3MaxPerElem(&result, &vec0, &vec1); + return result; +} + +static inline float vmathV3MaxElem_V( VmathVector3 vec ) +{ + return vmathV3MaxElem(&vec); +} + +static inline VmathVector3 vmathV3MinPerElem_V( VmathVector3 vec0, VmathVector3 vec1 ) +{ + VmathVector3 result; + vmathV3MinPerElem(&result, &vec0, &vec1); + return result; +} + +static inline float vmathV3MinElem_V( VmathVector3 vec ) +{ + return vmathV3MinElem(&vec); +} + +static inline float vmathV3Sum_V( VmathVector3 vec ) +{ + return vmathV3Sum(&vec); +} + +static inline float vmathV3Dot_V( VmathVector3 vec0, VmathVector3 vec1 ) +{ + return vmathV3Dot(&vec0, &vec1); +} + +static inline float vmathV3LengthSqr_V( VmathVector3 vec ) +{ + return vmathV3LengthSqr(&vec); +} + +static inline float vmathV3Length_V( VmathVector3 vec ) +{ + return vmathV3Length(&vec); +} + +static inline VmathVector3 vmathV3Normalize_V( VmathVector3 vec ) +{ + VmathVector3 result; + vmathV3Normalize(&result, &vec); + return result; +} + +static inline VmathVector3 vmathV3Cross_V( VmathVector3 vec0, VmathVector3 vec1 ) +{ + VmathVector3 result; + vmathV3Cross(&result, &vec0, &vec1); + return result; +} + +static inline VmathVector3 vmathV3Select_V( VmathVector3 vec0, VmathVector3 vec1, unsigned int select1 ) +{ + VmathVector3 result; + vmathV3Select(&result, &vec0, &vec1, select1); + return result; +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathV3Print_V( VmathVector3 vec ) +{ + vmathV3Print(&vec); +} + +static inline void vmathV3Prints_V( VmathVector3 vec, const char *name ) +{ + vmathV3Prints(&vec, name); +} + +#endif + +static inline VmathVector4 vmathV4MakeFromElems_V( float _x, float _y, float _z, float _w ) +{ + VmathVector4 result; + vmathV4MakeFromElems(&result, _x, _y, _z, _w); + return result; +} + +static inline VmathVector4 vmathV4MakeFromV3Scalar_V( VmathVector3 xyz, float _w ) +{ + VmathVector4 result; + vmathV4MakeFromV3Scalar(&result, &xyz, _w); + return result; +} + +static inline VmathVector4 vmathV4MakeFromV3_V( VmathVector3 vec ) +{ + VmathVector4 result; + vmathV4MakeFromV3(&result, &vec); + return result; +} + +static inline VmathVector4 vmathV4MakeFromP3_V( VmathPoint3 pnt ) +{ + VmathVector4 result; + vmathV4MakeFromP3(&result, &pnt); + return result; +} + +static inline VmathVector4 vmathV4MakeFromQ_V( VmathQuat quat ) +{ + VmathVector4 result; + vmathV4MakeFromQ(&result, &quat); + return result; +} + +static inline VmathVector4 vmathV4MakeFromScalar_V( float scalar ) +{ + VmathVector4 result; + vmathV4MakeFromScalar(&result, scalar); + return result; +} + +static inline VmathVector4 vmathV4MakeXAxis_V( ) +{ + VmathVector4 result; + vmathV4MakeXAxis(&result); + return result; +} + +static inline VmathVector4 vmathV4MakeYAxis_V( ) +{ + VmathVector4 result; + vmathV4MakeYAxis(&result); + return result; +} + +static inline VmathVector4 vmathV4MakeZAxis_V( ) +{ + VmathVector4 result; + vmathV4MakeZAxis(&result); + return result; +} + +static inline VmathVector4 vmathV4MakeWAxis_V( ) +{ + VmathVector4 result; + vmathV4MakeWAxis(&result); + return result; +} + +static inline VmathVector4 vmathV4Lerp_V( float t, VmathVector4 vec0, VmathVector4 vec1 ) +{ + VmathVector4 result; + vmathV4Lerp(&result, t, &vec0, &vec1); + return result; +} + +static inline VmathVector4 vmathV4Slerp_V( float t, VmathVector4 unitVec0, VmathVector4 unitVec1 ) +{ + VmathVector4 result; + vmathV4Slerp(&result, t, &unitVec0, &unitVec1); + return result; +} + +static inline void vmathV4SetXYZ_V( VmathVector4 *result, VmathVector3 vec ) +{ + vmathV4SetXYZ(result, &vec); +} + +static inline VmathVector3 vmathV4GetXYZ_V( VmathVector4 vec ) +{ + VmathVector3 result; + vmathV4GetXYZ(&result, &vec); + return result; +} + +static inline void vmathV4SetX_V( VmathVector4 *result, float _x ) +{ + vmathV4SetX(result, _x); +} + +static inline float vmathV4GetX_V( VmathVector4 vec ) +{ + return vmathV4GetX(&vec); +} + +static inline void vmathV4SetY_V( VmathVector4 *result, float _y ) +{ + vmathV4SetY(result, _y); +} + +static inline float vmathV4GetY_V( VmathVector4 vec ) +{ + return vmathV4GetY(&vec); +} + +static inline void vmathV4SetZ_V( VmathVector4 *result, float _z ) +{ + vmathV4SetZ(result, _z); +} + +static inline float vmathV4GetZ_V( VmathVector4 vec ) +{ + return vmathV4GetZ(&vec); +} + +static inline void vmathV4SetW_V( VmathVector4 *result, float _w ) +{ + vmathV4SetW(result, _w); +} + +static inline float vmathV4GetW_V( VmathVector4 vec ) +{ + return vmathV4GetW(&vec); +} + +static inline void vmathV4SetElem_V( VmathVector4 *result, int idx, float value ) +{ + vmathV4SetElem(result, idx, value); +} + +static inline float vmathV4GetElem_V( VmathVector4 vec, int idx ) +{ + return vmathV4GetElem(&vec, idx); +} + +static inline VmathVector4 vmathV4Add_V( VmathVector4 vec0, VmathVector4 vec1 ) +{ + VmathVector4 result; + vmathV4Add(&result, &vec0, &vec1); + return result; +} + +static inline VmathVector4 vmathV4Sub_V( VmathVector4 vec0, VmathVector4 vec1 ) +{ + VmathVector4 result; + vmathV4Sub(&result, &vec0, &vec1); + return result; +} + +static inline VmathVector4 vmathV4ScalarMul_V( VmathVector4 vec, float scalar ) +{ + VmathVector4 result; + vmathV4ScalarMul(&result, &vec, scalar); + return result; +} + +static inline VmathVector4 vmathV4ScalarDiv_V( VmathVector4 vec, float scalar ) +{ + VmathVector4 result; + vmathV4ScalarDiv(&result, &vec, scalar); + return result; +} + +static inline VmathVector4 vmathV4Neg_V( VmathVector4 vec ) +{ + VmathVector4 result; + vmathV4Neg(&result, &vec); + return result; +} + +static inline VmathVector4 vmathV4MulPerElem_V( VmathVector4 vec0, VmathVector4 vec1 ) +{ + VmathVector4 result; + vmathV4MulPerElem(&result, &vec0, &vec1); + return result; +} + +static inline VmathVector4 vmathV4DivPerElem_V( VmathVector4 vec0, VmathVector4 vec1 ) +{ + VmathVector4 result; + vmathV4DivPerElem(&result, &vec0, &vec1); + return result; +} + +static inline VmathVector4 vmathV4RecipPerElem_V( VmathVector4 vec ) +{ + VmathVector4 result; + vmathV4RecipPerElem(&result, &vec); + return result; +} + +static inline VmathVector4 vmathV4SqrtPerElem_V( VmathVector4 vec ) +{ + VmathVector4 result; + vmathV4SqrtPerElem(&result, &vec); + return result; +} + +static inline VmathVector4 vmathV4RsqrtPerElem_V( VmathVector4 vec ) +{ + VmathVector4 result; + vmathV4RsqrtPerElem(&result, &vec); + return result; +} + +static inline VmathVector4 vmathV4AbsPerElem_V( VmathVector4 vec ) +{ + VmathVector4 result; + vmathV4AbsPerElem(&result, &vec); + return result; +} + +static inline VmathVector4 vmathV4CopySignPerElem_V( VmathVector4 vec0, VmathVector4 vec1 ) +{ + VmathVector4 result; + vmathV4CopySignPerElem(&result, &vec0, &vec1); + return result; +} + +static inline VmathVector4 vmathV4MaxPerElem_V( VmathVector4 vec0, VmathVector4 vec1 ) +{ + VmathVector4 result; + vmathV4MaxPerElem(&result, &vec0, &vec1); + return result; +} + +static inline float vmathV4MaxElem_V( VmathVector4 vec ) +{ + return vmathV4MaxElem(&vec); +} + +static inline VmathVector4 vmathV4MinPerElem_V( VmathVector4 vec0, VmathVector4 vec1 ) +{ + VmathVector4 result; + vmathV4MinPerElem(&result, &vec0, &vec1); + return result; +} + +static inline float vmathV4MinElem_V( VmathVector4 vec ) +{ + return vmathV4MinElem(&vec); +} + +static inline float vmathV4Sum_V( VmathVector4 vec ) +{ + return vmathV4Sum(&vec); +} + +static inline float vmathV4Dot_V( VmathVector4 vec0, VmathVector4 vec1 ) +{ + return vmathV4Dot(&vec0, &vec1); +} + +static inline float vmathV4LengthSqr_V( VmathVector4 vec ) +{ + return vmathV4LengthSqr(&vec); +} + +static inline float vmathV4Length_V( VmathVector4 vec ) +{ + return vmathV4Length(&vec); +} + +static inline VmathVector4 vmathV4Normalize_V( VmathVector4 vec ) +{ + VmathVector4 result; + vmathV4Normalize(&result, &vec); + return result; +} + +static inline VmathVector4 vmathV4Select_V( VmathVector4 vec0, VmathVector4 vec1, unsigned int select1 ) +{ + VmathVector4 result; + vmathV4Select(&result, &vec0, &vec1, select1); + return result; +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathV4Print_V( VmathVector4 vec ) +{ + vmathV4Print(&vec); +} + +static inline void vmathV4Prints_V( VmathVector4 vec, const char *name ) +{ + vmathV4Prints(&vec, name); +} + +#endif + +static inline VmathPoint3 vmathP3MakeFromElems_V( float _x, float _y, float _z ) +{ + VmathPoint3 result; + vmathP3MakeFromElems(&result, _x, _y, _z); + return result; +} + +static inline VmathPoint3 vmathP3MakeFromV3_V( VmathVector3 vec ) +{ + VmathPoint3 result; + vmathP3MakeFromV3(&result, &vec); + return result; +} + +static inline VmathPoint3 vmathP3MakeFromScalar_V( float scalar ) +{ + VmathPoint3 result; + vmathP3MakeFromScalar(&result, scalar); + return result; +} + +static inline VmathPoint3 vmathP3Lerp_V( float t, VmathPoint3 pnt0, VmathPoint3 pnt1 ) +{ + VmathPoint3 result; + vmathP3Lerp(&result, t, &pnt0, &pnt1); + return result; +} + +static inline void vmathP3SetX_V( VmathPoint3 *result, float _x ) +{ + vmathP3SetX(result, _x); +} + +static inline float vmathP3GetX_V( VmathPoint3 pnt ) +{ + return vmathP3GetX(&pnt); +} + +static inline void vmathP3SetY_V( VmathPoint3 *result, float _y ) +{ + vmathP3SetY(result, _y); +} + +static inline float vmathP3GetY_V( VmathPoint3 pnt ) +{ + return vmathP3GetY(&pnt); +} + +static inline void vmathP3SetZ_V( VmathPoint3 *result, float _z ) +{ + vmathP3SetZ(result, _z); +} + +static inline float vmathP3GetZ_V( VmathPoint3 pnt ) +{ + return vmathP3GetZ(&pnt); +} + +static inline void vmathP3SetElem_V( VmathPoint3 *result, int idx, float value ) +{ + vmathP3SetElem(result, idx, value); +} + +static inline float vmathP3GetElem_V( VmathPoint3 pnt, int idx ) +{ + return vmathP3GetElem(&pnt, idx); +} + +static inline VmathVector3 vmathP3Sub_V( VmathPoint3 pnt0, VmathPoint3 pnt1 ) +{ + VmathVector3 result; + vmathP3Sub(&result, &pnt0, &pnt1); + return result; +} + +static inline VmathPoint3 vmathP3AddV3_V( VmathPoint3 pnt, VmathVector3 vec1 ) +{ + VmathPoint3 result; + vmathP3AddV3(&result, &pnt, &vec1); + return result; +} + +static inline VmathPoint3 vmathP3SubV3_V( VmathPoint3 pnt, VmathVector3 vec1 ) +{ + VmathPoint3 result; + vmathP3SubV3(&result, &pnt, &vec1); + return result; +} + +static inline VmathPoint3 vmathP3MulPerElem_V( VmathPoint3 pnt0, VmathPoint3 pnt1 ) +{ + VmathPoint3 result; + vmathP3MulPerElem(&result, &pnt0, &pnt1); + return result; +} + +static inline VmathPoint3 vmathP3DivPerElem_V( VmathPoint3 pnt0, VmathPoint3 pnt1 ) +{ + VmathPoint3 result; + vmathP3DivPerElem(&result, &pnt0, &pnt1); + return result; +} + +static inline VmathPoint3 vmathP3RecipPerElem_V( VmathPoint3 pnt ) +{ + VmathPoint3 result; + vmathP3RecipPerElem(&result, &pnt); + return result; +} + +static inline VmathPoint3 vmathP3SqrtPerElem_V( VmathPoint3 pnt ) +{ + VmathPoint3 result; + vmathP3SqrtPerElem(&result, &pnt); + return result; +} + +static inline VmathPoint3 vmathP3RsqrtPerElem_V( VmathPoint3 pnt ) +{ + VmathPoint3 result; + vmathP3RsqrtPerElem(&result, &pnt); + return result; +} + +static inline VmathPoint3 vmathP3AbsPerElem_V( VmathPoint3 pnt ) +{ + VmathPoint3 result; + vmathP3AbsPerElem(&result, &pnt); + return result; +} + +static inline VmathPoint3 vmathP3CopySignPerElem_V( VmathPoint3 pnt0, VmathPoint3 pnt1 ) +{ + VmathPoint3 result; + vmathP3CopySignPerElem(&result, &pnt0, &pnt1); + return result; +} + +static inline VmathPoint3 vmathP3MaxPerElem_V( VmathPoint3 pnt0, VmathPoint3 pnt1 ) +{ + VmathPoint3 result; + vmathP3MaxPerElem(&result, &pnt0, &pnt1); + return result; +} + +static inline float vmathP3MaxElem_V( VmathPoint3 pnt ) +{ + return vmathP3MaxElem(&pnt); +} + +static inline VmathPoint3 vmathP3MinPerElem_V( VmathPoint3 pnt0, VmathPoint3 pnt1 ) +{ + VmathPoint3 result; + vmathP3MinPerElem(&result, &pnt0, &pnt1); + return result; +} + +static inline float vmathP3MinElem_V( VmathPoint3 pnt ) +{ + return vmathP3MinElem(&pnt); +} + +static inline float vmathP3Sum_V( VmathPoint3 pnt ) +{ + return vmathP3Sum(&pnt); +} + +static inline VmathPoint3 vmathP3Scale_V( VmathPoint3 pnt, float scaleVal ) +{ + VmathPoint3 result; + vmathP3Scale(&result, &pnt, scaleVal); + return result; +} + +static inline VmathPoint3 vmathP3NonUniformScale_V( VmathPoint3 pnt, VmathVector3 scaleVec ) +{ + VmathPoint3 result; + vmathP3NonUniformScale(&result, &pnt, &scaleVec); + return result; +} + +static inline float vmathP3Projection_V( VmathPoint3 pnt, VmathVector3 unitVec ) +{ + return vmathP3Projection(&pnt, &unitVec); +} + +static inline float vmathP3DistSqrFromOrigin_V( VmathPoint3 pnt ) +{ + return vmathP3DistSqrFromOrigin(&pnt); +} + +static inline float vmathP3DistFromOrigin_V( VmathPoint3 pnt ) +{ + return vmathP3DistFromOrigin(&pnt); +} + +static inline float vmathP3DistSqr_V( VmathPoint3 pnt0, VmathPoint3 pnt1 ) +{ + return vmathP3DistSqr(&pnt0, &pnt1); +} + +static inline float vmathP3Dist_V( VmathPoint3 pnt0, VmathPoint3 pnt1 ) +{ + return vmathP3Dist(&pnt0, &pnt1); +} + +static inline VmathPoint3 vmathP3Select_V( VmathPoint3 pnt0, VmathPoint3 pnt1, unsigned int select1 ) +{ + VmathPoint3 result; + vmathP3Select(&result, &pnt0, &pnt1, select1); + return result; +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathP3Print_V( VmathPoint3 pnt ) +{ + vmathP3Print(&pnt); +} + +static inline void vmathP3Prints_V( VmathPoint3 pnt, const char *name ) +{ + vmathP3Prints(&pnt, name); +} + +#endif + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/scalar/c/vectormath_aos.h b/Extras/vectormathlibrary/include/vectormath/scalar/c/vectormath_aos.h new file mode 100644 index 000000000..33afb9577 --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/scalar/c/vectormath_aos.h @@ -0,0 +1,1879 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_AOS_C_H +#define _VECTORMATH_AOS_C_H + +#include + +#ifdef _VECTORMATH_DEBUG +#include +#endif + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#ifndef _VECTORMATH_AOS_C_TYPES_H +#define _VECTORMATH_AOS_C_TYPES_H + +/* A 3-D vector in array-of-structures format + */ +typedef struct _VmathVector3 +{ + float x; + float y; + float z; +#ifndef __GNUC__ + float d; +#endif +} +#ifdef __GNUC__ +__attribute__ ((aligned(16))) +#endif +VmathVector3; + +/* A 4-D vector in array-of-structures format + */ +typedef struct _VmathVector4 +{ + float x; + float y; + float z; + float w; +} +#ifdef __GNUC__ +__attribute__ ((aligned(16))) +#endif +VmathVector4; + +/* A 3-D point in array-of-structures format + */ +typedef struct _VmathPoint3 +{ + float x; + float y; + float z; +#ifndef __GNUC__ + float d; +#endif +} +#ifdef __GNUC__ +__attribute__ ((aligned(16))) +#endif +VmathPoint3; + +/* A quaternion in array-of-structures format + */ +typedef struct _VmathQuat +{ + float x; + float y; + float z; + float w; +} +#ifdef __GNUC__ +__attribute__ ((aligned(16))) +#endif +VmathQuat; + +/* A 3x3 matrix in array-of-structures format + */ +typedef struct _VmathMatrix3 +{ + VmathVector3 col0; + VmathVector3 col1; + VmathVector3 col2; +} VmathMatrix3; + +/* A 4x4 matrix in array-of-structures format + */ +typedef struct _VmathMatrix4 +{ + VmathVector4 col0; + VmathVector4 col1; + VmathVector4 col2; + VmathVector4 col3; +} VmathMatrix4; + +/* A 3x4 transformation matrix in array-of-structures format + */ +typedef struct _VmathTransform3 +{ + VmathVector3 col0; + VmathVector3 col1; + VmathVector3 col2; + VmathVector3 col3; +} VmathTransform3; + +#endif + +/* + * Copy a 3-D vector + */ +static inline void vmathV3Copy( VmathVector3 *result, const VmathVector3 *vec ); + +/* + * Construct a 3-D vector from x, y, and z elements + */ +static inline void vmathV3MakeFromElems( VmathVector3 *result, float x, float y, float z ); + +/* + * Copy elements from a 3-D point into a 3-D vector + */ +static inline void vmathV3MakeFromP3( VmathVector3 *result, const VmathPoint3 *pnt ); + +/* + * Set all elements of a 3-D vector to the same scalar value + */ +static inline void vmathV3MakeFromScalar( VmathVector3 *result, float scalar ); + +/* + * Set the x element of a 3-D vector + */ +static inline void vmathV3SetX( VmathVector3 *result, float x ); + +/* + * Set the y element of a 3-D vector + */ +static inline void vmathV3SetY( VmathVector3 *result, float y ); + +/* + * Set the z element of a 3-D vector + */ +static inline void vmathV3SetZ( VmathVector3 *result, float z ); + +/* + * Get the x element of a 3-D vector + */ +static inline float vmathV3GetX( const VmathVector3 *vec ); + +/* + * Get the y element of a 3-D vector + */ +static inline float vmathV3GetY( const VmathVector3 *vec ); + +/* + * Get the z element of a 3-D vector + */ +static inline float vmathV3GetZ( const VmathVector3 *vec ); + +/* + * Set an x, y, or z element of a 3-D vector by index + */ +static inline void vmathV3SetElem( VmathVector3 *result, int idx, float value ); + +/* + * Get an x, y, or z element of a 3-D vector by index + */ +static inline float vmathV3GetElem( const VmathVector3 *vec, int idx ); + +/* + * Add two 3-D vectors + */ +static inline void vmathV3Add( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1 ); + +/* + * Subtract a 3-D vector from another 3-D vector + */ +static inline void vmathV3Sub( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1 ); + +/* + * Add a 3-D vector to a 3-D point + */ +static inline void vmathV3AddP3( VmathPoint3 *result, const VmathVector3 *vec, const VmathPoint3 *pnt ); + +/* + * Multiply a 3-D vector by a scalar + */ +static inline void vmathV3ScalarMul( VmathVector3 *result, const VmathVector3 *vec, float scalar ); + +/* + * Divide a 3-D vector by a scalar + */ +static inline void vmathV3ScalarDiv( VmathVector3 *result, const VmathVector3 *vec, float scalar ); + +/* + * Negate all elements of a 3-D vector + */ +static inline void vmathV3Neg( VmathVector3 *result, const VmathVector3 *vec ); + +/* + * Construct x axis + */ +static inline void vmathV3MakeXAxis( VmathVector3 *result ); + +/* + * Construct y axis + */ +static inline void vmathV3MakeYAxis( VmathVector3 *result ); + +/* + * Construct z axis + */ +static inline void vmathV3MakeZAxis( VmathVector3 *result ); + +/* + * Multiply two 3-D vectors per element + */ +static inline void vmathV3MulPerElem( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1 ); + +/* + * Divide two 3-D vectors per element + * NOTE: + * Floating-point behavior matches standard library function divf4. + */ +static inline void vmathV3DivPerElem( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1 ); + +/* + * Compute the reciprocal of a 3-D vector per element + * NOTE: + * Floating-point behavior matches standard library function recipf4. + */ +static inline void vmathV3RecipPerElem( VmathVector3 *result, const VmathVector3 *vec ); + +/* + * Compute the square root of a 3-D vector per element + * NOTE: + * Floating-point behavior matches standard library function sqrtf4. + */ +static inline void vmathV3SqrtPerElem( VmathVector3 *result, const VmathVector3 *vec ); + +/* + * Compute the reciprocal square root of a 3-D vector per element + * NOTE: + * Floating-point behavior matches standard library function rsqrtf4. + */ +static inline void vmathV3RsqrtPerElem( VmathVector3 *result, const VmathVector3 *vec ); + +/* + * Compute the absolute value of a 3-D vector per element + */ +static inline void vmathV3AbsPerElem( VmathVector3 *result, const VmathVector3 *vec ); + +/* + * Copy sign from one 3-D vector to another, per element + */ +static inline void vmathV3CopySignPerElem( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1 ); + +/* + * Maximum of two 3-D vectors per element + */ +static inline void vmathV3MaxPerElem( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1 ); + +/* + * Minimum of two 3-D vectors per element + */ +static inline void vmathV3MinPerElem( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1 ); + +/* + * Maximum element of a 3-D vector + */ +static inline float vmathV3MaxElem( const VmathVector3 *vec ); + +/* + * Minimum element of a 3-D vector + */ +static inline float vmathV3MinElem( const VmathVector3 *vec ); + +/* + * Compute the sum of all elements of a 3-D vector + */ +static inline float vmathV3Sum( const VmathVector3 *vec ); + +/* + * Compute the dot product of two 3-D vectors + */ +static inline float vmathV3Dot( const VmathVector3 *vec0, const VmathVector3 *vec1 ); + +/* + * Compute the square of the length of a 3-D vector + */ +static inline float vmathV3LengthSqr( const VmathVector3 *vec ); + +/* + * Compute the length of a 3-D vector + */ +static inline float vmathV3Length( const VmathVector3 *vec ); + +/* + * Normalize a 3-D vector + * NOTE: + * The result is unpredictable when all elements of vec are at or near zero. + */ +static inline void vmathV3Normalize( VmathVector3 *result, const VmathVector3 *vec ); + +/* + * Compute cross product of two 3-D vectors + */ +static inline void vmathV3Cross( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1 ); + +/* + * Outer product of two 3-D vectors + */ +static inline void vmathV3Outer( VmathMatrix3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1 ); + +/* + * Pre-multiply a row vector by a 3x3 matrix + */ +static inline void vmathV3RowMul( VmathVector3 *result, const VmathVector3 *vec, const VmathMatrix3 *mat ); + +/* + * Cross-product matrix of a 3-D vector + */ +static inline void vmathV3CrossMatrix( VmathMatrix3 *result, const VmathVector3 *vec ); + +/* + * Create cross-product matrix and multiply + * NOTE: + * Faster than separately creating a cross-product matrix and multiplying. + */ +static inline void vmathV3CrossMatrixMul( VmathMatrix3 *result, const VmathVector3 *vec, const VmathMatrix3 *mat ); + +/* + * Linear interpolation between two 3-D vectors + * NOTE: + * Does not clamp t between 0 and 1. + */ +static inline void vmathV3Lerp( VmathVector3 *result, float t, const VmathVector3 *vec0, const VmathVector3 *vec1 ); + +/* + * Spherical linear interpolation between two 3-D vectors + * NOTE: + * The result is unpredictable if the vectors point in opposite directions. + * Does not clamp t between 0 and 1. + */ +static inline void vmathV3Slerp( VmathVector3 *result, float t, const VmathVector3 *unitVec0, const VmathVector3 *unitVec1 ); + +/* + * Conditionally select between two 3-D vectors + */ +static inline void vmathV3Select( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1, unsigned int select1 ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 3-D vector + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathV3Print( const VmathVector3 *vec ); + +/* + * Print a 3-D vector and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathV3Prints( const VmathVector3 *vec, const char *name ); + +#endif + +/* + * Copy a 4-D vector + */ +static inline void vmathV4Copy( VmathVector4 *result, const VmathVector4 *vec ); + +/* + * Construct a 4-D vector from x, y, z, and w elements + */ +static inline void vmathV4MakeFromElems( VmathVector4 *result, float x, float y, float z, float w ); + +/* + * Construct a 4-D vector from a 3-D vector and a scalar + */ +static inline void vmathV4MakeFromV3Scalar( VmathVector4 *result, const VmathVector3 *xyz, float w ); + +/* + * Copy x, y, and z from a 3-D vector into a 4-D vector, and set w to 0 + */ +static inline void vmathV4MakeFromV3( VmathVector4 *result, const VmathVector3 *vec ); + +/* + * Copy x, y, and z from a 3-D point into a 4-D vector, and set w to 1 + */ +static inline void vmathV4MakeFromP3( VmathVector4 *result, const VmathPoint3 *pnt ); + +/* + * Copy elements from a quaternion into a 4-D vector + */ +static inline void vmathV4MakeFromQ( VmathVector4 *result, const VmathQuat *quat ); + +/* + * Set all elements of a 4-D vector to the same scalar value + */ +static inline void vmathV4MakeFromScalar( VmathVector4 *result, float scalar ); + +/* + * Set the x, y, and z elements of a 4-D vector + * NOTE: + * This function does not change the w element. + */ +static inline void vmathV4SetXYZ( VmathVector4 *result, const VmathVector3 *vec ); + +/* + * Get the x, y, and z elements of a 4-D vector + */ +static inline void vmathV4GetXYZ( VmathVector3 *result, const VmathVector4 *vec ); + +/* + * Set the x element of a 4-D vector + */ +static inline void vmathV4SetX( VmathVector4 *result, float x ); + +/* + * Set the y element of a 4-D vector + */ +static inline void vmathV4SetY( VmathVector4 *result, float y ); + +/* + * Set the z element of a 4-D vector + */ +static inline void vmathV4SetZ( VmathVector4 *result, float z ); + +/* + * Set the w element of a 4-D vector + */ +static inline void vmathV4SetW( VmathVector4 *result, float w ); + +/* + * Get the x element of a 4-D vector + */ +static inline float vmathV4GetX( const VmathVector4 *vec ); + +/* + * Get the y element of a 4-D vector + */ +static inline float vmathV4GetY( const VmathVector4 *vec ); + +/* + * Get the z element of a 4-D vector + */ +static inline float vmathV4GetZ( const VmathVector4 *vec ); + +/* + * Get the w element of a 4-D vector + */ +static inline float vmathV4GetW( const VmathVector4 *vec ); + +/* + * Set an x, y, z, or w element of a 4-D vector by index + */ +static inline void vmathV4SetElem( VmathVector4 *result, int idx, float value ); + +/* + * Get an x, y, z, or w element of a 4-D vector by index + */ +static inline float vmathV4GetElem( const VmathVector4 *vec, int idx ); + +/* + * Add two 4-D vectors + */ +static inline void vmathV4Add( VmathVector4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1 ); + +/* + * Subtract a 4-D vector from another 4-D vector + */ +static inline void vmathV4Sub( VmathVector4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1 ); + +/* + * Multiply a 4-D vector by a scalar + */ +static inline void vmathV4ScalarMul( VmathVector4 *result, const VmathVector4 *vec, float scalar ); + +/* + * Divide a 4-D vector by a scalar + */ +static inline void vmathV4ScalarDiv( VmathVector4 *result, const VmathVector4 *vec, float scalar ); + +/* + * Negate all elements of a 4-D vector + */ +static inline void vmathV4Neg( VmathVector4 *result, const VmathVector4 *vec ); + +/* + * Construct x axis + */ +static inline void vmathV4MakeXAxis( VmathVector4 *result ); + +/* + * Construct y axis + */ +static inline void vmathV4MakeYAxis( VmathVector4 *result ); + +/* + * Construct z axis + */ +static inline void vmathV4MakeZAxis( VmathVector4 *result ); + +/* + * Construct w axis + */ +static inline void vmathV4MakeWAxis( VmathVector4 *result ); + +/* + * Multiply two 4-D vectors per element + */ +static inline void vmathV4MulPerElem( VmathVector4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1 ); + +/* + * Divide two 4-D vectors per element + * NOTE: + * Floating-point behavior matches standard library function divf4. + */ +static inline void vmathV4DivPerElem( VmathVector4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1 ); + +/* + * Compute the reciprocal of a 4-D vector per element + * NOTE: + * Floating-point behavior matches standard library function recipf4. + */ +static inline void vmathV4RecipPerElem( VmathVector4 *result, const VmathVector4 *vec ); + +/* + * Compute the square root of a 4-D vector per element + * NOTE: + * Floating-point behavior matches standard library function sqrtf4. + */ +static inline void vmathV4SqrtPerElem( VmathVector4 *result, const VmathVector4 *vec ); + +/* + * Compute the reciprocal square root of a 4-D vector per element + * NOTE: + * Floating-point behavior matches standard library function rsqrtf4. + */ +static inline void vmathV4RsqrtPerElem( VmathVector4 *result, const VmathVector4 *vec ); + +/* + * Compute the absolute value of a 4-D vector per element + */ +static inline void vmathV4AbsPerElem( VmathVector4 *result, const VmathVector4 *vec ); + +/* + * Copy sign from one 4-D vector to another, per element + */ +static inline void vmathV4CopySignPerElem( VmathVector4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1 ); + +/* + * Maximum of two 4-D vectors per element + */ +static inline void vmathV4MaxPerElem( VmathVector4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1 ); + +/* + * Minimum of two 4-D vectors per element + */ +static inline void vmathV4MinPerElem( VmathVector4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1 ); + +/* + * Maximum element of a 4-D vector + */ +static inline float vmathV4MaxElem( const VmathVector4 *vec ); + +/* + * Minimum element of a 4-D vector + */ +static inline float vmathV4MinElem( const VmathVector4 *vec ); + +/* + * Compute the sum of all elements of a 4-D vector + */ +static inline float vmathV4Sum( const VmathVector4 *vec ); + +/* + * Compute the dot product of two 4-D vectors + */ +static inline float vmathV4Dot( const VmathVector4 *vec0, const VmathVector4 *vec1 ); + +/* + * Compute the square of the length of a 4-D vector + */ +static inline float vmathV4LengthSqr( const VmathVector4 *vec ); + +/* + * Compute the length of a 4-D vector + */ +static inline float vmathV4Length( const VmathVector4 *vec ); + +/* + * Normalize a 4-D vector + * NOTE: + * The result is unpredictable when all elements of vec are at or near zero. + */ +static inline void vmathV4Normalize( VmathVector4 *result, const VmathVector4 *vec ); + +/* + * Outer product of two 4-D vectors + */ +static inline void vmathV4Outer( VmathMatrix4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1 ); + +/* + * Linear interpolation between two 4-D vectors + * NOTE: + * Does not clamp t between 0 and 1. + */ +static inline void vmathV4Lerp( VmathVector4 *result, float t, const VmathVector4 *vec0, const VmathVector4 *vec1 ); + +/* + * Spherical linear interpolation between two 4-D vectors + * NOTE: + * The result is unpredictable if the vectors point in opposite directions. + * Does not clamp t between 0 and 1. + */ +static inline void vmathV4Slerp( VmathVector4 *result, float t, const VmathVector4 *unitVec0, const VmathVector4 *unitVec1 ); + +/* + * Conditionally select between two 4-D vectors + */ +static inline void vmathV4Select( VmathVector4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1, unsigned int select1 ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 4-D vector + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathV4Print( const VmathVector4 *vec ); + +/* + * Print a 4-D vector and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathV4Prints( const VmathVector4 *vec, const char *name ); + +#endif + +/* + * Copy a 3-D point + */ +static inline void vmathP3Copy( VmathPoint3 *result, const VmathPoint3 *pnt ); + +/* + * Construct a 3-D point from x, y, and z elements + */ +static inline void vmathP3MakeFromElems( VmathPoint3 *result, float x, float y, float z ); + +/* + * Copy elements from a 3-D vector into a 3-D point + */ +static inline void vmathP3MakeFromV3( VmathPoint3 *result, const VmathVector3 *vec ); + +/* + * Set all elements of a 3-D point to the same scalar value + */ +static inline void vmathP3MakeFromScalar( VmathPoint3 *result, float scalar ); + +/* + * Set the x element of a 3-D point + */ +static inline void vmathP3SetX( VmathPoint3 *result, float x ); + +/* + * Set the y element of a 3-D point + */ +static inline void vmathP3SetY( VmathPoint3 *result, float y ); + +/* + * Set the z element of a 3-D point + */ +static inline void vmathP3SetZ( VmathPoint3 *result, float z ); + +/* + * Get the x element of a 3-D point + */ +static inline float vmathP3GetX( const VmathPoint3 *pnt ); + +/* + * Get the y element of a 3-D point + */ +static inline float vmathP3GetY( const VmathPoint3 *pnt ); + +/* + * Get the z element of a 3-D point + */ +static inline float vmathP3GetZ( const VmathPoint3 *pnt ); + +/* + * Set an x, y, or z element of a 3-D point by index + */ +static inline void vmathP3SetElem( VmathPoint3 *result, int idx, float value ); + +/* + * Get an x, y, or z element of a 3-D point by index + */ +static inline float vmathP3GetElem( const VmathPoint3 *pnt, int idx ); + +/* + * Subtract a 3-D point from another 3-D point + */ +static inline void vmathP3Sub( VmathVector3 *result, const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ); + +/* + * Add a 3-D point to a 3-D vector + */ +static inline void vmathP3AddV3( VmathPoint3 *result, const VmathPoint3 *pnt, const VmathVector3 *vec ); + +/* + * Subtract a 3-D vector from a 3-D point + */ +static inline void vmathP3SubV3( VmathPoint3 *result, const VmathPoint3 *pnt, const VmathVector3 *vec ); + +/* + * Multiply two 3-D points per element + */ +static inline void vmathP3MulPerElem( VmathPoint3 *result, const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ); + +/* + * Divide two 3-D points per element + * NOTE: + * Floating-point behavior matches standard library function divf4. + */ +static inline void vmathP3DivPerElem( VmathPoint3 *result, const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ); + +/* + * Compute the reciprocal of a 3-D point per element + * NOTE: + * Floating-point behavior matches standard library function recipf4. + */ +static inline void vmathP3RecipPerElem( VmathPoint3 *result, const VmathPoint3 *pnt ); + +/* + * Compute the square root of a 3-D point per element + * NOTE: + * Floating-point behavior matches standard library function sqrtf4. + */ +static inline void vmathP3SqrtPerElem( VmathPoint3 *result, const VmathPoint3 *pnt ); + +/* + * Compute the reciprocal square root of a 3-D point per element + * NOTE: + * Floating-point behavior matches standard library function rsqrtf4. + */ +static inline void vmathP3RsqrtPerElem( VmathPoint3 *result, const VmathPoint3 *pnt ); + +/* + * Compute the absolute value of a 3-D point per element + */ +static inline void vmathP3AbsPerElem( VmathPoint3 *result, const VmathPoint3 *pnt ); + +/* + * Copy sign from one 3-D point to another, per element + */ +static inline void vmathP3CopySignPerElem( VmathPoint3 *result, const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ); + +/* + * Maximum of two 3-D points per element + */ +static inline void vmathP3MaxPerElem( VmathPoint3 *result, const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ); + +/* + * Minimum of two 3-D points per element + */ +static inline void vmathP3MinPerElem( VmathPoint3 *result, const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ); + +/* + * Maximum element of a 3-D point + */ +static inline float vmathP3MaxElem( const VmathPoint3 *pnt ); + +/* + * Minimum element of a 3-D point + */ +static inline float vmathP3MinElem( const VmathPoint3 *pnt ); + +/* + * Compute the sum of all elements of a 3-D point + */ +static inline float vmathP3Sum( const VmathPoint3 *pnt ); + +/* + * Apply uniform scale to a 3-D point + */ +static inline void vmathP3Scale( VmathPoint3 *result, const VmathPoint3 *pnt, float scaleVal ); + +/* + * Apply non-uniform scale to a 3-D point + */ +static inline void vmathP3NonUniformScale( VmathPoint3 *result, const VmathPoint3 *pnt, const VmathVector3 *scaleVec ); + +/* + * Scalar projection of a 3-D point on a unit-length 3-D vector + */ +static inline float vmathP3Projection( const VmathPoint3 *pnt, const VmathVector3 *unitVec ); + +/* + * Compute the square of the distance of a 3-D point from the coordinate-system origin + */ +static inline float vmathP3DistSqrFromOrigin( const VmathPoint3 *pnt ); + +/* + * Compute the distance of a 3-D point from the coordinate-system origin + */ +static inline float vmathP3DistFromOrigin( const VmathPoint3 *pnt ); + +/* + * Compute the square of the distance between two 3-D points + */ +static inline float vmathP3DistSqr( const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ); + +/* + * Compute the distance between two 3-D points + */ +static inline float vmathP3Dist( const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ); + +/* + * Linear interpolation between two 3-D points + * NOTE: + * Does not clamp t between 0 and 1. + */ +static inline void vmathP3Lerp( VmathPoint3 *result, float t, const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ); + +/* + * Conditionally select between two 3-D points + */ +static inline void vmathP3Select( VmathPoint3 *result, const VmathPoint3 *pnt0, const VmathPoint3 *pnt1, unsigned int select1 ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 3-D point + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathP3Print( const VmathPoint3 *pnt ); + +/* + * Print a 3-D point and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathP3Prints( const VmathPoint3 *pnt, const char *name ); + +#endif + +/* + * Copy a quaternion + */ +static inline void vmathQCopy( VmathQuat *result, const VmathQuat *quat ); + +/* + * Construct a quaternion from x, y, z, and w elements + */ +static inline void vmathQMakeFromElems( VmathQuat *result, float x, float y, float z, float w ); + +/* + * Construct a quaternion from a 3-D vector and a scalar + */ +static inline void vmathQMakeFromV3Scalar( VmathQuat *result, const VmathVector3 *xyz, float w ); + +/* + * Copy elements from a 4-D vector into a quaternion + */ +static inline void vmathQMakeFromV4( VmathQuat *result, const VmathVector4 *vec ); + +/* + * Convert a rotation matrix to a unit-length quaternion + */ +static inline void vmathQMakeFromM3( VmathQuat *result, const VmathMatrix3 *rotMat ); + +/* + * Set all elements of a quaternion to the same scalar value + */ +static inline void vmathQMakeFromScalar( VmathQuat *result, float scalar ); + +/* + * Set the x, y, and z elements of a quaternion + * NOTE: + * This function does not change the w element. + */ +static inline void vmathQSetXYZ( VmathQuat *result, const VmathVector3 *vec ); + +/* + * Get the x, y, and z elements of a quaternion + */ +static inline void vmathQGetXYZ( VmathVector3 *result, const VmathQuat *quat ); + +/* + * Set the x element of a quaternion + */ +static inline void vmathQSetX( VmathQuat *result, float x ); + +/* + * Set the y element of a quaternion + */ +static inline void vmathQSetY( VmathQuat *result, float y ); + +/* + * Set the z element of a quaternion + */ +static inline void vmathQSetZ( VmathQuat *result, float z ); + +/* + * Set the w element of a quaternion + */ +static inline void vmathQSetW( VmathQuat *result, float w ); + +/* + * Get the x element of a quaternion + */ +static inline float vmathQGetX( const VmathQuat *quat ); + +/* + * Get the y element of a quaternion + */ +static inline float vmathQGetY( const VmathQuat *quat ); + +/* + * Get the z element of a quaternion + */ +static inline float vmathQGetZ( const VmathQuat *quat ); + +/* + * Get the w element of a quaternion + */ +static inline float vmathQGetW( const VmathQuat *quat ); + +/* + * Set an x, y, z, or w element of a quaternion by index + */ +static inline void vmathQSetElem( VmathQuat *result, int idx, float value ); + +/* + * Get an x, y, z, or w element of a quaternion by index + */ +static inline float vmathQGetElem( const VmathQuat *quat, int idx ); + +/* + * Add two quaternions + */ +static inline void vmathQAdd( VmathQuat *result, const VmathQuat *quat0, const VmathQuat *quat1 ); + +/* + * Subtract a quaternion from another quaternion + */ +static inline void vmathQSub( VmathQuat *result, const VmathQuat *quat0, const VmathQuat *quat1 ); + +/* + * Multiply two quaternions + */ +static inline void vmathQMul( VmathQuat *result, const VmathQuat *quat0, const VmathQuat *quat1 ); + +/* + * Multiply a quaternion by a scalar + */ +static inline void vmathQScalarMul( VmathQuat *result, const VmathQuat *quat, float scalar ); + +/* + * Divide a quaternion by a scalar + */ +static inline void vmathQScalarDiv( VmathQuat *result, const VmathQuat *quat, float scalar ); + +/* + * Negate all elements of a quaternion + */ +static inline void vmathQNeg( VmathQuat *result, const VmathQuat *quat ); + +/* + * Construct an identity quaternion + */ +static inline void vmathQMakeIdentity( VmathQuat *result ); + +/* + * Construct a quaternion to rotate between two unit-length 3-D vectors + * NOTE: + * The result is unpredictable if unitVec0 and unitVec1 point in opposite directions. + */ +static inline void vmathQMakeRotationArc( VmathQuat *result, const VmathVector3 *unitVec0, const VmathVector3 *unitVec1 ); + +/* + * Construct a quaternion to rotate around a unit-length 3-D vector + */ +static inline void vmathQMakeRotationAxis( VmathQuat *result, float radians, const VmathVector3 *unitVec ); + +/* + * Construct a quaternion to rotate around the x axis + */ +static inline void vmathQMakeRotationX( VmathQuat *result, float radians ); + +/* + * Construct a quaternion to rotate around the y axis + */ +static inline void vmathQMakeRotationY( VmathQuat *result, float radians ); + +/* + * Construct a quaternion to rotate around the z axis + */ +static inline void vmathQMakeRotationZ( VmathQuat *result, float radians ); + +/* + * Compute the conjugate of a quaternion + */ +static inline void vmathQConj( VmathQuat *result, const VmathQuat *quat ); + +/* + * Use a unit-length quaternion to rotate a 3-D vector + */ +static inline void vmathQRotate( VmathVector3 *result, const VmathQuat *unitQuat, const VmathVector3 *vec ); + +/* + * Compute the dot product of two quaternions + */ +static inline float vmathQDot( const VmathQuat *quat0, const VmathQuat *quat1 ); + +/* + * Compute the norm of a quaternion + */ +static inline float vmathQNorm( const VmathQuat *quat ); + +/* + * Compute the length of a quaternion + */ +static inline float vmathQLength( const VmathQuat *quat ); + +/* + * Normalize a quaternion + * NOTE: + * The result is unpredictable when all elements of quat are at or near zero. + */ +static inline void vmathQNormalize( VmathQuat *result, const VmathQuat *quat ); + +/* + * Linear interpolation between two quaternions + * NOTE: + * Does not clamp t between 0 and 1. + */ +static inline void vmathQLerp( VmathQuat *result, float t, const VmathQuat *quat0, const VmathQuat *quat1 ); + +/* + * Spherical linear interpolation between two quaternions + * NOTE: + * Interpolates along the shortest path between orientations. + * Does not clamp t between 0 and 1. + */ +static inline void vmathQSlerp( VmathQuat *result, float t, const VmathQuat *unitQuat0, const VmathQuat *unitQuat1 ); + +/* + * Spherical quadrangle interpolation + */ +static inline void vmathQSquad( VmathQuat *result, float t, const VmathQuat *unitQuat0, const VmathQuat *unitQuat1, const VmathQuat *unitQuat2, const VmathQuat *unitQuat3 ); + +/* + * Conditionally select between two quaternions + */ +static inline void vmathQSelect( VmathQuat *result, const VmathQuat *quat0, const VmathQuat *quat1, unsigned int select1 ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a quaternion + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathQPrint( const VmathQuat *quat ); + +/* + * Print a quaternion and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathQPrints( const VmathQuat *quat, const char *name ); + +#endif + +/* + * Copy a 3x3 matrix + */ +static inline void vmathM3Copy( VmathMatrix3 *result, const VmathMatrix3 *mat ); + +/* + * Construct a 3x3 matrix containing the specified columns + */ +static inline void vmathM3MakeFromCols( VmathMatrix3 *result, const VmathVector3 *col0, const VmathVector3 *col1, const VmathVector3 *col2 ); + +/* + * Construct a 3x3 rotation matrix from a unit-length quaternion + */ +static inline void vmathM3MakeFromQ( VmathMatrix3 *result, const VmathQuat *unitQuat ); + +/* + * Set all elements of a 3x3 matrix to the same scalar value + */ +static inline void vmathM3MakeFromScalar( VmathMatrix3 *result, float scalar ); + +/* + * Set column 0 of a 3x3 matrix + */ +static inline void vmathM3SetCol0( VmathMatrix3 *result, const VmathVector3 *col0 ); + +/* + * Set column 1 of a 3x3 matrix + */ +static inline void vmathM3SetCol1( VmathMatrix3 *result, const VmathVector3 *col1 ); + +/* + * Set column 2 of a 3x3 matrix + */ +static inline void vmathM3SetCol2( VmathMatrix3 *result, const VmathVector3 *col2 ); + +/* + * Get column 0 of a 3x3 matrix + */ +static inline void vmathM3GetCol0( VmathVector3 *result, const VmathMatrix3 *mat ); + +/* + * Get column 1 of a 3x3 matrix + */ +static inline void vmathM3GetCol1( VmathVector3 *result, const VmathMatrix3 *mat ); + +/* + * Get column 2 of a 3x3 matrix + */ +static inline void vmathM3GetCol2( VmathVector3 *result, const VmathMatrix3 *mat ); + +/* + * Set the column of a 3x3 matrix referred to by the specified index + */ +static inline void vmathM3SetCol( VmathMatrix3 *result, int col, const VmathVector3 *vec ); + +/* + * Set the row of a 3x3 matrix referred to by the specified index + */ +static inline void vmathM3SetRow( VmathMatrix3 *result, int row, const VmathVector3 *vec ); + +/* + * Get the column of a 3x3 matrix referred to by the specified index + */ +static inline void vmathM3GetCol( VmathVector3 *result, const VmathMatrix3 *mat, int col ); + +/* + * Get the row of a 3x3 matrix referred to by the specified index + */ +static inline void vmathM3GetRow( VmathVector3 *result, const VmathMatrix3 *mat, int row ); + +/* + * Set the element of a 3x3 matrix referred to by column and row indices + */ +static inline void vmathM3SetElem( VmathMatrix3 *result, int col, int row, float val ); + +/* + * Get the element of a 3x3 matrix referred to by column and row indices + */ +static inline float vmathM3GetElem( const VmathMatrix3 *mat, int col, int row ); + +/* + * Add two 3x3 matrices + */ +static inline void vmathM3Add( VmathMatrix3 *result, const VmathMatrix3 *mat0, const VmathMatrix3 *mat1 ); + +/* + * Subtract a 3x3 matrix from another 3x3 matrix + */ +static inline void vmathM3Sub( VmathMatrix3 *result, const VmathMatrix3 *mat0, const VmathMatrix3 *mat1 ); + +/* + * Negate all elements of a 3x3 matrix + */ +static inline void vmathM3Neg( VmathMatrix3 *result, const VmathMatrix3 *mat ); + +/* + * Multiply a 3x3 matrix by a scalar + */ +static inline void vmathM3ScalarMul( VmathMatrix3 *result, const VmathMatrix3 *mat, float scalar ); + +/* + * Multiply a 3x3 matrix by a 3-D vector + */ +static inline void vmathM3MulV3( VmathVector3 *result, const VmathMatrix3 *mat, const VmathVector3 *vec ); + +/* + * Multiply two 3x3 matrices + */ +static inline void vmathM3Mul( VmathMatrix3 *result, const VmathMatrix3 *mat0, const VmathMatrix3 *mat1 ); + +/* + * Construct an identity 3x3 matrix + */ +static inline void vmathM3MakeIdentity( VmathMatrix3 *result ); + +/* + * Construct a 3x3 matrix to rotate around the x axis + */ +static inline void vmathM3MakeRotationX( VmathMatrix3 *result, float radians ); + +/* + * Construct a 3x3 matrix to rotate around the y axis + */ +static inline void vmathM3MakeRotationY( VmathMatrix3 *result, float radians ); + +/* + * Construct a 3x3 matrix to rotate around the z axis + */ +static inline void vmathM3MakeRotationZ( VmathMatrix3 *result, float radians ); + +/* + * Construct a 3x3 matrix to rotate around the x, y, and z axes + */ +static inline void vmathM3MakeRotationZYX( VmathMatrix3 *result, const VmathVector3 *radiansXYZ ); + +/* + * Construct a 3x3 matrix to rotate around a unit-length 3-D vector + */ +static inline void vmathM3MakeRotationAxis( VmathMatrix3 *result, float radians, const VmathVector3 *unitVec ); + +/* + * Construct a rotation matrix from a unit-length quaternion + */ +static inline void vmathM3MakeRotationQ( VmathMatrix3 *result, const VmathQuat *unitQuat ); + +/* + * Construct a 3x3 matrix to perform scaling + */ +static inline void vmathM3MakeScale( VmathMatrix3 *result, const VmathVector3 *scaleVec ); + +/* + * Append (post-multiply) a scale transformation to a 3x3 matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline void vmathM3AppendScale( VmathMatrix3 *result, const VmathMatrix3 *mat, const VmathVector3 *scaleVec ); + +/* + * Prepend (pre-multiply) a scale transformation to a 3x3 matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline void vmathM3PrependScale( VmathMatrix3 *result, const VmathVector3 *scaleVec, const VmathMatrix3 *mat ); + +/* + * Multiply two 3x3 matrices per element + */ +static inline void vmathM3MulPerElem( VmathMatrix3 *result, const VmathMatrix3 *mat0, const VmathMatrix3 *mat1 ); + +/* + * Compute the absolute value of a 3x3 matrix per element + */ +static inline void vmathM3AbsPerElem( VmathMatrix3 *result, const VmathMatrix3 *mat ); + +/* + * Transpose of a 3x3 matrix + */ +static inline void vmathM3Transpose( VmathMatrix3 *result, const VmathMatrix3 *mat ); + +/* + * Compute the inverse of a 3x3 matrix + * NOTE: + * Result is unpredictable when the determinant of mat is equal to or near 0. + */ +static inline void vmathM3Inverse( VmathMatrix3 *result, const VmathMatrix3 *mat ); + +/* + * Determinant of a 3x3 matrix + */ +static inline float vmathM3Determinant( const VmathMatrix3 *mat ); + +/* + * Conditionally select between two 3x3 matrices + */ +static inline void vmathM3Select( VmathMatrix3 *result, const VmathMatrix3 *mat0, const VmathMatrix3 *mat1, unsigned int select1 ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 3x3 matrix + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathM3Print( const VmathMatrix3 *mat ); + +/* + * Print a 3x3 matrix and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathM3Prints( const VmathMatrix3 *mat, const char *name ); + +#endif + +/* + * Copy a 4x4 matrix + */ +static inline void vmathM4Copy( VmathMatrix4 *result, const VmathMatrix4 *mat ); + +/* + * Construct a 4x4 matrix containing the specified columns + */ +static inline void vmathM4MakeFromCols( VmathMatrix4 *result, const VmathVector4 *col0, const VmathVector4 *col1, const VmathVector4 *col2, const VmathVector4 *col3 ); + +/* + * Construct a 4x4 matrix from a 3x4 transformation matrix + */ +static inline void vmathM4MakeFromT3( VmathMatrix4 *result, const VmathTransform3 *mat ); + +/* + * Construct a 4x4 matrix from a 3x3 matrix and a 3-D vector + */ +static inline void vmathM4MakeFromM3V3( VmathMatrix4 *result, const VmathMatrix3 *mat, const VmathVector3 *translateVec ); + +/* + * Construct a 4x4 matrix from a unit-length quaternion and a 3-D vector + */ +static inline void vmathM4MakeFromQV3( VmathMatrix4 *result, const VmathQuat *unitQuat, const VmathVector3 *translateVec ); + +/* + * Set all elements of a 4x4 matrix to the same scalar value + */ +static inline void vmathM4MakeFromScalar( VmathMatrix4 *result, float scalar ); + +/* + * Set the upper-left 3x3 submatrix + * NOTE: + * This function does not change the bottom row elements. + */ +static inline void vmathM4SetUpper3x3( VmathMatrix4 *result, const VmathMatrix3 *mat3 ); + +/* + * Get the upper-left 3x3 submatrix of a 4x4 matrix + */ +static inline void vmathM4GetUpper3x3( VmathMatrix3 *result, const VmathMatrix4 *mat ); + +/* + * Set translation component + * NOTE: + * This function does not change the bottom row elements. + */ +static inline void vmathM4SetTranslation( VmathMatrix4 *result, const VmathVector3 *translateVec ); + +/* + * Get the translation component of a 4x4 matrix + */ +static inline void vmathM4GetTranslation( VmathVector3 *result, const VmathMatrix4 *mat ); + +/* + * Set column 0 of a 4x4 matrix + */ +static inline void vmathM4SetCol0( VmathMatrix4 *result, const VmathVector4 *col0 ); + +/* + * Set column 1 of a 4x4 matrix + */ +static inline void vmathM4SetCol1( VmathMatrix4 *result, const VmathVector4 *col1 ); + +/* + * Set column 2 of a 4x4 matrix + */ +static inline void vmathM4SetCol2( VmathMatrix4 *result, const VmathVector4 *col2 ); + +/* + * Set column 3 of a 4x4 matrix + */ +static inline void vmathM4SetCol3( VmathMatrix4 *result, const VmathVector4 *col3 ); + +/* + * Get column 0 of a 4x4 matrix + */ +static inline void vmathM4GetCol0( VmathVector4 *result, const VmathMatrix4 *mat ); + +/* + * Get column 1 of a 4x4 matrix + */ +static inline void vmathM4GetCol1( VmathVector4 *result, const VmathMatrix4 *mat ); + +/* + * Get column 2 of a 4x4 matrix + */ +static inline void vmathM4GetCol2( VmathVector4 *result, const VmathMatrix4 *mat ); + +/* + * Get column 3 of a 4x4 matrix + */ +static inline void vmathM4GetCol3( VmathVector4 *result, const VmathMatrix4 *mat ); + +/* + * Set the column of a 4x4 matrix referred to by the specified index + */ +static inline void vmathM4SetCol( VmathMatrix4 *result, int col, const VmathVector4 *vec ); + +/* + * Set the row of a 4x4 matrix referred to by the specified index + */ +static inline void vmathM4SetRow( VmathMatrix4 *result, int row, const VmathVector4 *vec ); + +/* + * Get the column of a 4x4 matrix referred to by the specified index + */ +static inline void vmathM4GetCol( VmathVector4 *result, const VmathMatrix4 *mat, int col ); + +/* + * Get the row of a 4x4 matrix referred to by the specified index + */ +static inline void vmathM4GetRow( VmathVector4 *result, const VmathMatrix4 *mat, int row ); + +/* + * Set the element of a 4x4 matrix referred to by column and row indices + */ +static inline void vmathM4SetElem( VmathMatrix4 *result, int col, int row, float val ); + +/* + * Get the element of a 4x4 matrix referred to by column and row indices + */ +static inline float vmathM4GetElem( const VmathMatrix4 *mat, int col, int row ); + +/* + * Add two 4x4 matrices + */ +static inline void vmathM4Add( VmathMatrix4 *result, const VmathMatrix4 *mat0, const VmathMatrix4 *mat1 ); + +/* + * Subtract a 4x4 matrix from another 4x4 matrix + */ +static inline void vmathM4Sub( VmathMatrix4 *result, const VmathMatrix4 *mat0, const VmathMatrix4 *mat1 ); + +/* + * Negate all elements of a 4x4 matrix + */ +static inline void vmathM4Neg( VmathMatrix4 *result, const VmathMatrix4 *mat ); + +/* + * Multiply a 4x4 matrix by a scalar + */ +static inline void vmathM4ScalarMul( VmathMatrix4 *result, const VmathMatrix4 *mat, float scalar ); + +/* + * Multiply a 4x4 matrix by a 4-D vector + */ +static inline void vmathM4MulV4( VmathVector4 *result, const VmathMatrix4 *mat, const VmathVector4 *vec ); + +/* + * Multiply a 4x4 matrix by a 3-D vector + */ +static inline void vmathM4MulV3( VmathVector4 *result, const VmathMatrix4 *mat, const VmathVector3 *vec ); + +/* + * Multiply a 4x4 matrix by a 3-D point + */ +static inline void vmathM4MulP3( VmathVector4 *result, const VmathMatrix4 *mat, const VmathPoint3 *pnt ); + +/* + * Multiply two 4x4 matrices + */ +static inline void vmathM4Mul( VmathMatrix4 *result, const VmathMatrix4 *mat0, const VmathMatrix4 *mat1 ); + +/* + * Multiply a 4x4 matrix by a 3x4 transformation matrix + */ +static inline void vmathM4MulT3( VmathMatrix4 *result, const VmathMatrix4 *mat, const VmathTransform3 *tfrm ); + +/* + * Construct an identity 4x4 matrix + */ +static inline void vmathM4MakeIdentity( VmathMatrix4 *result ); + +/* + * Construct a 4x4 matrix to rotate around the x axis + */ +static inline void vmathM4MakeRotationX( VmathMatrix4 *result, float radians ); + +/* + * Construct a 4x4 matrix to rotate around the y axis + */ +static inline void vmathM4MakeRotationY( VmathMatrix4 *result, float radians ); + +/* + * Construct a 4x4 matrix to rotate around the z axis + */ +static inline void vmathM4MakeRotationZ( VmathMatrix4 *result, float radians ); + +/* + * Construct a 4x4 matrix to rotate around the x, y, and z axes + */ +static inline void vmathM4MakeRotationZYX( VmathMatrix4 *result, const VmathVector3 *radiansXYZ ); + +/* + * Construct a 4x4 matrix to rotate around a unit-length 3-D vector + */ +static inline void vmathM4MakeRotationAxis( VmathMatrix4 *result, float radians, const VmathVector3 *unitVec ); + +/* + * Construct a rotation matrix from a unit-length quaternion + */ +static inline void vmathM4MakeRotationQ( VmathMatrix4 *result, const VmathQuat *unitQuat ); + +/* + * Construct a 4x4 matrix to perform scaling + */ +static inline void vmathM4MakeScale( VmathMatrix4 *result, const VmathVector3 *scaleVec ); + +/* + * Construct a 4x4 matrix to perform translation + */ +static inline void vmathM4MakeTranslation( VmathMatrix4 *result, const VmathVector3 *translateVec ); + +/* + * Construct viewing matrix based on eye position, position looked at, and up direction + */ +static inline void vmathM4MakeLookAt( VmathMatrix4 *result, const VmathPoint3 *eyePos, const VmathPoint3 *lookAtPos, const VmathVector3 *upVec ); + +/* + * Construct a perspective projection matrix + */ +static inline void vmathM4MakePerspective( VmathMatrix4 *result, float fovyRadians, float aspect, float zNear, float zFar ); + +/* + * Construct a perspective projection matrix based on frustum + */ +static inline void vmathM4MakeFrustum( VmathMatrix4 *result, float left, float right, float bottom, float top, float zNear, float zFar ); + +/* + * Construct an orthographic projection matrix + */ +static inline void vmathM4MakeOrthographic( VmathMatrix4 *result, float left, float right, float bottom, float top, float zNear, float zFar ); + +/* + * Append (post-multiply) a scale transformation to a 4x4 matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline void vmathM4AppendScale( VmathMatrix4 *result, const VmathMatrix4 *mat, const VmathVector3 *scaleVec ); + +/* + * Prepend (pre-multiply) a scale transformation to a 4x4 matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline void vmathM4PrependScale( VmathMatrix4 *result, const VmathVector3 *scaleVec, const VmathMatrix4 *mat ); + +/* + * Multiply two 4x4 matrices per element + */ +static inline void vmathM4MulPerElem( VmathMatrix4 *result, const VmathMatrix4 *mat0, const VmathMatrix4 *mat1 ); + +/* + * Compute the absolute value of a 4x4 matrix per element + */ +static inline void vmathM4AbsPerElem( VmathMatrix4 *result, const VmathMatrix4 *mat ); + +/* + * Transpose of a 4x4 matrix + */ +static inline void vmathM4Transpose( VmathMatrix4 *result, const VmathMatrix4 *mat ); + +/* + * Compute the inverse of a 4x4 matrix + * NOTE: + * Result is unpredictable when the determinant of mat is equal to or near 0. + */ +static inline void vmathM4Inverse( VmathMatrix4 *result, const VmathMatrix4 *mat ); + +/* + * Compute the inverse of a 4x4 matrix, which is expected to be an affine matrix + * NOTE: + * This can be used to achieve better performance than a general inverse when the specified 4x4 matrix meets the given restrictions. The result is unpredictable when the determinant of mat is equal to or near 0. + */ +static inline void vmathM4AffineInverse( VmathMatrix4 *result, const VmathMatrix4 *mat ); + +/* + * Compute the inverse of a 4x4 matrix, which is expected to be an affine matrix with an orthogonal upper-left 3x3 submatrix + * NOTE: + * This can be used to achieve better performance than a general inverse when the specified 4x4 matrix meets the given restrictions. + */ +static inline void vmathM4OrthoInverse( VmathMatrix4 *result, const VmathMatrix4 *mat ); + +/* + * Determinant of a 4x4 matrix + */ +static inline float vmathM4Determinant( const VmathMatrix4 *mat ); + +/* + * Conditionally select between two 4x4 matrices + */ +static inline void vmathM4Select( VmathMatrix4 *result, const VmathMatrix4 *mat0, const VmathMatrix4 *mat1, unsigned int select1 ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 4x4 matrix + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathM4Print( const VmathMatrix4 *mat ); + +/* + * Print a 4x4 matrix and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathM4Prints( const VmathMatrix4 *mat, const char *name ); + +#endif + +/* + * Copy a 3x4 transformation matrix + */ +static inline void vmathT3Copy( VmathTransform3 *result, const VmathTransform3 *tfrm ); + +/* + * Construct a 3x4 transformation matrix containing the specified columns + */ +static inline void vmathT3MakeFromCols( VmathTransform3 *result, const VmathVector3 *col0, const VmathVector3 *col1, const VmathVector3 *col2, const VmathVector3 *col3 ); + +/* + * Construct a 3x4 transformation matrix from a 3x3 matrix and a 3-D vector + */ +static inline void vmathT3MakeFromM3V3( VmathTransform3 *result, const VmathMatrix3 *tfrm, const VmathVector3 *translateVec ); + +/* + * Construct a 3x4 transformation matrix from a unit-length quaternion and a 3-D vector + */ +static inline void vmathT3MakeFromQV3( VmathTransform3 *result, const VmathQuat *unitQuat, const VmathVector3 *translateVec ); + +/* + * Set all elements of a 3x4 transformation matrix to the same scalar value + */ +static inline void vmathT3MakeFromScalar( VmathTransform3 *result, float scalar ); + +/* + * Set the upper-left 3x3 submatrix + */ +static inline void vmathT3SetUpper3x3( VmathTransform3 *result, const VmathMatrix3 *mat3 ); + +/* + * Get the upper-left 3x3 submatrix of a 3x4 transformation matrix + */ +static inline void vmathT3GetUpper3x3( VmathMatrix3 *result, const VmathTransform3 *tfrm ); + +/* + * Set translation component + */ +static inline void vmathT3SetTranslation( VmathTransform3 *result, const VmathVector3 *translateVec ); + +/* + * Get the translation component of a 3x4 transformation matrix + */ +static inline void vmathT3GetTranslation( VmathVector3 *result, const VmathTransform3 *tfrm ); + +/* + * Set column 0 of a 3x4 transformation matrix + */ +static inline void vmathT3SetCol0( VmathTransform3 *result, const VmathVector3 *col0 ); + +/* + * Set column 1 of a 3x4 transformation matrix + */ +static inline void vmathT3SetCol1( VmathTransform3 *result, const VmathVector3 *col1 ); + +/* + * Set column 2 of a 3x4 transformation matrix + */ +static inline void vmathT3SetCol2( VmathTransform3 *result, const VmathVector3 *col2 ); + +/* + * Set column 3 of a 3x4 transformation matrix + */ +static inline void vmathT3SetCol3( VmathTransform3 *result, const VmathVector3 *col3 ); + +/* + * Get column 0 of a 3x4 transformation matrix + */ +static inline void vmathT3GetCol0( VmathVector3 *result, const VmathTransform3 *tfrm ); + +/* + * Get column 1 of a 3x4 transformation matrix + */ +static inline void vmathT3GetCol1( VmathVector3 *result, const VmathTransform3 *tfrm ); + +/* + * Get column 2 of a 3x4 transformation matrix + */ +static inline void vmathT3GetCol2( VmathVector3 *result, const VmathTransform3 *tfrm ); + +/* + * Get column 3 of a 3x4 transformation matrix + */ +static inline void vmathT3GetCol3( VmathVector3 *result, const VmathTransform3 *tfrm ); + +/* + * Set the column of a 3x4 transformation matrix referred to by the specified index + */ +static inline void vmathT3SetCol( VmathTransform3 *result, int col, const VmathVector3 *vec ); + +/* + * Set the row of a 3x4 transformation matrix referred to by the specified index + */ +static inline void vmathT3SetRow( VmathTransform3 *result, int row, const VmathVector4 *vec ); + +/* + * Get the column of a 3x4 transformation matrix referred to by the specified index + */ +static inline void vmathT3GetCol( VmathVector3 *result, const VmathTransform3 *tfrm, int col ); + +/* + * Get the row of a 3x4 transformation matrix referred to by the specified index + */ +static inline void vmathT3GetRow( VmathVector4 *result, const VmathTransform3 *tfrm, int row ); + +/* + * Set the element of a 3x4 transformation matrix referred to by column and row indices + */ +static inline void vmathT3SetElem( VmathTransform3 *result, int col, int row, float val ); + +/* + * Get the element of a 3x4 transformation matrix referred to by column and row indices + */ +static inline float vmathT3GetElem( const VmathTransform3 *tfrm, int col, int row ); + +/* + * Multiply a 3x4 transformation matrix by a 3-D vector + */ +static inline void vmathT3MulV3( VmathVector3 *result, const VmathTransform3 *tfrm, const VmathVector3 *vec ); + +/* + * Multiply a 3x4 transformation matrix by a 3-D point + */ +static inline void vmathT3MulP3( VmathPoint3 *result, const VmathTransform3 *tfrm, const VmathPoint3 *pnt ); + +/* + * Multiply two 3x4 transformation matrices + */ +static inline void vmathT3Mul( VmathTransform3 *result, const VmathTransform3 *tfrm0, const VmathTransform3 *tfrm1 ); + +/* + * Construct an identity 3x4 transformation matrix + */ +static inline void vmathT3MakeIdentity( VmathTransform3 *result ); + +/* + * Construct a 3x4 transformation matrix to rotate around the x axis + */ +static inline void vmathT3MakeRotationX( VmathTransform3 *result, float radians ); + +/* + * Construct a 3x4 transformation matrix to rotate around the y axis + */ +static inline void vmathT3MakeRotationY( VmathTransform3 *result, float radians ); + +/* + * Construct a 3x4 transformation matrix to rotate around the z axis + */ +static inline void vmathT3MakeRotationZ( VmathTransform3 *result, float radians ); + +/* + * Construct a 3x4 transformation matrix to rotate around the x, y, and z axes + */ +static inline void vmathT3MakeRotationZYX( VmathTransform3 *result, const VmathVector3 *radiansXYZ ); + +/* + * Construct a 3x4 transformation matrix to rotate around a unit-length 3-D vector + */ +static inline void vmathT3MakeRotationAxis( VmathTransform3 *result, float radians, const VmathVector3 *unitVec ); + +/* + * Construct a rotation matrix from a unit-length quaternion + */ +static inline void vmathT3MakeRotationQ( VmathTransform3 *result, const VmathQuat *unitQuat ); + +/* + * Construct a 3x4 transformation matrix to perform scaling + */ +static inline void vmathT3MakeScale( VmathTransform3 *result, const VmathVector3 *scaleVec ); + +/* + * Construct a 3x4 transformation matrix to perform translation + */ +static inline void vmathT3MakeTranslation( VmathTransform3 *result, const VmathVector3 *translateVec ); + +/* + * Append (post-multiply) a scale transformation to a 3x4 transformation matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline void vmathT3AppendScale( VmathTransform3 *result, const VmathTransform3 *tfrm, const VmathVector3 *scaleVec ); + +/* + * Prepend (pre-multiply) a scale transformation to a 3x4 transformation matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline void vmathT3PrependScale( VmathTransform3 *result, const VmathVector3 *scaleVec, const VmathTransform3 *tfrm ); + +/* + * Multiply two 3x4 transformation matrices per element + */ +static inline void vmathT3MulPerElem( VmathTransform3 *result, const VmathTransform3 *tfrm0, const VmathTransform3 *tfrm1 ); + +/* + * Compute the absolute value of a 3x4 transformation matrix per element + */ +static inline void vmathT3AbsPerElem( VmathTransform3 *result, const VmathTransform3 *tfrm ); + +/* + * Inverse of a 3x4 transformation matrix + * NOTE: + * Result is unpredictable when the determinant of the left 3x3 submatrix is equal to or near 0. + */ +static inline void vmathT3Inverse( VmathTransform3 *result, const VmathTransform3 *tfrm ); + +/* + * Compute the inverse of a 3x4 transformation matrix, expected to have an orthogonal upper-left 3x3 submatrix + * NOTE: + * This can be used to achieve better performance than a general inverse when the specified 3x4 transformation matrix meets the given restrictions. + */ +static inline void vmathT3OrthoInverse( VmathTransform3 *result, const VmathTransform3 *tfrm ); + +/* + * Conditionally select between two 3x4 transformation matrices + */ +static inline void vmathT3Select( VmathTransform3 *result, const VmathTransform3 *tfrm0, const VmathTransform3 *tfrm1, unsigned int select1 ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 3x4 transformation matrix + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathT3Print( const VmathTransform3 *tfrm ); + +/* + * Print a 3x4 transformation matrix and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathT3Prints( const VmathTransform3 *tfrm, const char *name ); + +#endif + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#include "vec_aos.h" +#include "quat_aos.h" +#include "mat_aos.h" + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/scalar/c/vectormath_aos_v.h b/Extras/vectormathlibrary/include/vectormath/scalar/c/vectormath_aos_v.h new file mode 100644 index 000000000..a977c806d --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/scalar/c/vectormath_aos_v.h @@ -0,0 +1,1845 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_AOS_C_V_H +#define _VECTORMATH_AOS_C_V_H + +#include + +#ifdef _VECTORMATH_DEBUG +#include +#endif + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#ifndef _VECTORMATH_AOS_C_TYPES_H +#define _VECTORMATH_AOS_C_TYPES_H + +/* A 3-D vector in array-of-structures format + */ +typedef struct _VmathVector3 +{ + float x; + float y; + float z; +#ifndef __GNUC__ + float d; +#endif +} +#ifdef __GNUC__ +__attribute__ ((aligned(16))) +#endif +VmathVector3; + +/* A 4-D vector in array-of-structures format + */ +typedef struct _VmathVector4 +{ + float x; + float y; + float z; + float w; +} +#ifdef __GNUC__ +__attribute__ ((aligned(16))) +#endif +VmathVector4; + +/* A 3-D point in array-of-structures format + */ +typedef struct _VmathPoint3 +{ + float x; + float y; + float z; +#ifndef __GNUC__ + float d; +#endif +} +#ifdef __GNUC__ +__attribute__ ((aligned(16))) +#endif +VmathPoint3; + +/* A quaternion in array-of-structures format + */ +typedef struct _VmathQuat +{ + float x; + float y; + float z; + float w; +} +#ifdef __GNUC__ +__attribute__ ((aligned(16))) +#endif +VmathQuat; + +/* A 3x3 matrix in array-of-structures format + */ +typedef struct _VmathMatrix3 +{ + VmathVector3 col0; + VmathVector3 col1; + VmathVector3 col2; +} VmathMatrix3; + +/* A 4x4 matrix in array-of-structures format + */ +typedef struct _VmathMatrix4 +{ + VmathVector4 col0; + VmathVector4 col1; + VmathVector4 col2; + VmathVector4 col3; +} VmathMatrix4; + +/* A 3x4 transformation matrix in array-of-structures format + */ +typedef struct _VmathTransform3 +{ + VmathVector3 col0; + VmathVector3 col1; + VmathVector3 col2; + VmathVector3 col3; +} VmathTransform3; + +#endif + +/* + * Construct a 3-D vector from x, y, and z elements + */ +static inline VmathVector3 vmathV3MakeFromElems_V( float x, float y, float z ); + +/* + * Copy elements from a 3-D point into a 3-D vector + */ +static inline VmathVector3 vmathV3MakeFromP3_V( VmathPoint3 pnt ); + +/* + * Set all elements of a 3-D vector to the same scalar value + */ +static inline VmathVector3 vmathV3MakeFromScalar_V( float scalar ); + +/* + * Set the x element of a 3-D vector + */ +static inline void vmathV3SetX_V( VmathVector3 *result, float x ); + +/* + * Set the y element of a 3-D vector + */ +static inline void vmathV3SetY_V( VmathVector3 *result, float y ); + +/* + * Set the z element of a 3-D vector + */ +static inline void vmathV3SetZ_V( VmathVector3 *result, float z ); + +/* + * Get the x element of a 3-D vector + */ +static inline float vmathV3GetX_V( VmathVector3 vec ); + +/* + * Get the y element of a 3-D vector + */ +static inline float vmathV3GetY_V( VmathVector3 vec ); + +/* + * Get the z element of a 3-D vector + */ +static inline float vmathV3GetZ_V( VmathVector3 vec ); + +/* + * Set an x, y, or z element of a 3-D vector by index + */ +static inline void vmathV3SetElem_V( VmathVector3 *result, int idx, float value ); + +/* + * Get an x, y, or z element of a 3-D vector by index + */ +static inline float vmathV3GetElem_V( VmathVector3 vec, int idx ); + +/* + * Add two 3-D vectors + */ +static inline VmathVector3 vmathV3Add_V( VmathVector3 vec0, VmathVector3 vec1 ); + +/* + * Subtract a 3-D vector from another 3-D vector + */ +static inline VmathVector3 vmathV3Sub_V( VmathVector3 vec0, VmathVector3 vec1 ); + +/* + * Add a 3-D vector to a 3-D point + */ +static inline VmathPoint3 vmathV3AddP3_V( VmathVector3 vec, VmathPoint3 pnt ); + +/* + * Multiply a 3-D vector by a scalar + */ +static inline VmathVector3 vmathV3ScalarMul_V( VmathVector3 vec, float scalar ); + +/* + * Divide a 3-D vector by a scalar + */ +static inline VmathVector3 vmathV3ScalarDiv_V( VmathVector3 vec, float scalar ); + +/* + * Negate all elements of a 3-D vector + */ +static inline VmathVector3 vmathV3Neg_V( VmathVector3 vec ); + +/* + * Construct x axis + */ +static inline VmathVector3 vmathV3MakeXAxis_V( ); + +/* + * Construct y axis + */ +static inline VmathVector3 vmathV3MakeYAxis_V( ); + +/* + * Construct z axis + */ +static inline VmathVector3 vmathV3MakeZAxis_V( ); + +/* + * Multiply two 3-D vectors per element + */ +static inline VmathVector3 vmathV3MulPerElem_V( VmathVector3 vec0, VmathVector3 vec1 ); + +/* + * Divide two 3-D vectors per element + * NOTE: + * Floating-point behavior matches standard library function divf4. + */ +static inline VmathVector3 vmathV3DivPerElem_V( VmathVector3 vec0, VmathVector3 vec1 ); + +/* + * Compute the reciprocal of a 3-D vector per element + * NOTE: + * Floating-point behavior matches standard library function recipf4. + */ +static inline VmathVector3 vmathV3RecipPerElem_V( VmathVector3 vec ); + +/* + * Compute the square root of a 3-D vector per element + * NOTE: + * Floating-point behavior matches standard library function sqrtf4. + */ +static inline VmathVector3 vmathV3SqrtPerElem_V( VmathVector3 vec ); + +/* + * Compute the reciprocal square root of a 3-D vector per element + * NOTE: + * Floating-point behavior matches standard library function rsqrtf4. + */ +static inline VmathVector3 vmathV3RsqrtPerElem_V( VmathVector3 vec ); + +/* + * Compute the absolute value of a 3-D vector per element + */ +static inline VmathVector3 vmathV3AbsPerElem_V( VmathVector3 vec ); + +/* + * Copy sign from one 3-D vector to another, per element + */ +static inline VmathVector3 vmathV3CopySignPerElem_V( VmathVector3 vec0, VmathVector3 vec1 ); + +/* + * Maximum of two 3-D vectors per element + */ +static inline VmathVector3 vmathV3MaxPerElem_V( VmathVector3 vec0, VmathVector3 vec1 ); + +/* + * Minimum of two 3-D vectors per element + */ +static inline VmathVector3 vmathV3MinPerElem_V( VmathVector3 vec0, VmathVector3 vec1 ); + +/* + * Maximum element of a 3-D vector + */ +static inline float vmathV3MaxElem_V( VmathVector3 vec ); + +/* + * Minimum element of a 3-D vector + */ +static inline float vmathV3MinElem_V( VmathVector3 vec ); + +/* + * Compute the sum of all elements of a 3-D vector + */ +static inline float vmathV3Sum_V( VmathVector3 vec ); + +/* + * Compute the dot product of two 3-D vectors + */ +static inline float vmathV3Dot_V( VmathVector3 vec0, VmathVector3 vec1 ); + +/* + * Compute the square of the length of a 3-D vector + */ +static inline float vmathV3LengthSqr_V( VmathVector3 vec ); + +/* + * Compute the length of a 3-D vector + */ +static inline float vmathV3Length_V( VmathVector3 vec ); + +/* + * Normalize a 3-D vector + * NOTE: + * The result is unpredictable when all elements of vec are at or near zero. + */ +static inline VmathVector3 vmathV3Normalize_V( VmathVector3 vec ); + +/* + * Compute cross product of two 3-D vectors + */ +static inline VmathVector3 vmathV3Cross_V( VmathVector3 vec0, VmathVector3 vec1 ); + +/* + * Outer product of two 3-D vectors + */ +static inline VmathMatrix3 vmathV3Outer_V( VmathVector3 vec0, VmathVector3 vec1 ); + +/* + * Pre-multiply a row vector by a 3x3 matrix + */ +static inline VmathVector3 vmathV3RowMul_V( VmathVector3 vec, VmathMatrix3 mat ); + +/* + * Cross-product matrix of a 3-D vector + */ +static inline VmathMatrix3 vmathV3CrossMatrix_V( VmathVector3 vec ); + +/* + * Create cross-product matrix and multiply + * NOTE: + * Faster than separately creating a cross-product matrix and multiplying. + */ +static inline VmathMatrix3 vmathV3CrossMatrixMul_V( VmathVector3 vec, VmathMatrix3 mat ); + +/* + * Linear interpolation between two 3-D vectors + * NOTE: + * Does not clamp t between 0 and 1. + */ +static inline VmathVector3 vmathV3Lerp_V( float t, VmathVector3 vec0, VmathVector3 vec1 ); + +/* + * Spherical linear interpolation between two 3-D vectors + * NOTE: + * The result is unpredictable if the vectors point in opposite directions. + * Does not clamp t between 0 and 1. + */ +static inline VmathVector3 vmathV3Slerp_V( float t, VmathVector3 unitVec0, VmathVector3 unitVec1 ); + +/* + * Conditionally select between two 3-D vectors + */ +static inline VmathVector3 vmathV3Select_V( VmathVector3 vec0, VmathVector3 vec1, unsigned int select1 ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 3-D vector + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathV3Print_V( VmathVector3 vec ); + +/* + * Print a 3-D vector and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathV3Prints_V( VmathVector3 vec, const char *name ); + +#endif + +/* + * Construct a 4-D vector from x, y, z, and w elements + */ +static inline VmathVector4 vmathV4MakeFromElems_V( float x, float y, float z, float w ); + +/* + * Construct a 4-D vector from a 3-D vector and a scalar + */ +static inline VmathVector4 vmathV4MakeFromV3Scalar_V( VmathVector3 xyz, float w ); + +/* + * Copy x, y, and z from a 3-D vector into a 4-D vector, and set w to 0 + */ +static inline VmathVector4 vmathV4MakeFromV3_V( VmathVector3 vec ); + +/* + * Copy x, y, and z from a 3-D point into a 4-D vector, and set w to 1 + */ +static inline VmathVector4 vmathV4MakeFromP3_V( VmathPoint3 pnt ); + +/* + * Copy elements from a quaternion into a 4-D vector + */ +static inline VmathVector4 vmathV4MakeFromQ_V( VmathQuat quat ); + +/* + * Set all elements of a 4-D vector to the same scalar value + */ +static inline VmathVector4 vmathV4MakeFromScalar_V( float scalar ); + +/* + * Set the x, y, and z elements of a 4-D vector + * NOTE: + * This function does not change the w element. + */ +static inline void vmathV4SetXYZ_V( VmathVector4 *result, VmathVector3 vec ); + +/* + * Get the x, y, and z elements of a 4-D vector + */ +static inline VmathVector3 vmathV4GetXYZ_V( VmathVector4 vec ); + +/* + * Set the x element of a 4-D vector + */ +static inline void vmathV4SetX_V( VmathVector4 *result, float x ); + +/* + * Set the y element of a 4-D vector + */ +static inline void vmathV4SetY_V( VmathVector4 *result, float y ); + +/* + * Set the z element of a 4-D vector + */ +static inline void vmathV4SetZ_V( VmathVector4 *result, float z ); + +/* + * Set the w element of a 4-D vector + */ +static inline void vmathV4SetW_V( VmathVector4 *result, float w ); + +/* + * Get the x element of a 4-D vector + */ +static inline float vmathV4GetX_V( VmathVector4 vec ); + +/* + * Get the y element of a 4-D vector + */ +static inline float vmathV4GetY_V( VmathVector4 vec ); + +/* + * Get the z element of a 4-D vector + */ +static inline float vmathV4GetZ_V( VmathVector4 vec ); + +/* + * Get the w element of a 4-D vector + */ +static inline float vmathV4GetW_V( VmathVector4 vec ); + +/* + * Set an x, y, z, or w element of a 4-D vector by index + */ +static inline void vmathV4SetElem_V( VmathVector4 *result, int idx, float value ); + +/* + * Get an x, y, z, or w element of a 4-D vector by index + */ +static inline float vmathV4GetElem_V( VmathVector4 vec, int idx ); + +/* + * Add two 4-D vectors + */ +static inline VmathVector4 vmathV4Add_V( VmathVector4 vec0, VmathVector4 vec1 ); + +/* + * Subtract a 4-D vector from another 4-D vector + */ +static inline VmathVector4 vmathV4Sub_V( VmathVector4 vec0, VmathVector4 vec1 ); + +/* + * Multiply a 4-D vector by a scalar + */ +static inline VmathVector4 vmathV4ScalarMul_V( VmathVector4 vec, float scalar ); + +/* + * Divide a 4-D vector by a scalar + */ +static inline VmathVector4 vmathV4ScalarDiv_V( VmathVector4 vec, float scalar ); + +/* + * Negate all elements of a 4-D vector + */ +static inline VmathVector4 vmathV4Neg_V( VmathVector4 vec ); + +/* + * Construct x axis + */ +static inline VmathVector4 vmathV4MakeXAxis_V( ); + +/* + * Construct y axis + */ +static inline VmathVector4 vmathV4MakeYAxis_V( ); + +/* + * Construct z axis + */ +static inline VmathVector4 vmathV4MakeZAxis_V( ); + +/* + * Construct w axis + */ +static inline VmathVector4 vmathV4MakeWAxis_V( ); + +/* + * Multiply two 4-D vectors per element + */ +static inline VmathVector4 vmathV4MulPerElem_V( VmathVector4 vec0, VmathVector4 vec1 ); + +/* + * Divide two 4-D vectors per element + * NOTE: + * Floating-point behavior matches standard library function divf4. + */ +static inline VmathVector4 vmathV4DivPerElem_V( VmathVector4 vec0, VmathVector4 vec1 ); + +/* + * Compute the reciprocal of a 4-D vector per element + * NOTE: + * Floating-point behavior matches standard library function recipf4. + */ +static inline VmathVector4 vmathV4RecipPerElem_V( VmathVector4 vec ); + +/* + * Compute the square root of a 4-D vector per element + * NOTE: + * Floating-point behavior matches standard library function sqrtf4. + */ +static inline VmathVector4 vmathV4SqrtPerElem_V( VmathVector4 vec ); + +/* + * Compute the reciprocal square root of a 4-D vector per element + * NOTE: + * Floating-point behavior matches standard library function rsqrtf4. + */ +static inline VmathVector4 vmathV4RsqrtPerElem_V( VmathVector4 vec ); + +/* + * Compute the absolute value of a 4-D vector per element + */ +static inline VmathVector4 vmathV4AbsPerElem_V( VmathVector4 vec ); + +/* + * Copy sign from one 4-D vector to another, per element + */ +static inline VmathVector4 vmathV4CopySignPerElem_V( VmathVector4 vec0, VmathVector4 vec1 ); + +/* + * Maximum of two 4-D vectors per element + */ +static inline VmathVector4 vmathV4MaxPerElem_V( VmathVector4 vec0, VmathVector4 vec1 ); + +/* + * Minimum of two 4-D vectors per element + */ +static inline VmathVector4 vmathV4MinPerElem_V( VmathVector4 vec0, VmathVector4 vec1 ); + +/* + * Maximum element of a 4-D vector + */ +static inline float vmathV4MaxElem_V( VmathVector4 vec ); + +/* + * Minimum element of a 4-D vector + */ +static inline float vmathV4MinElem_V( VmathVector4 vec ); + +/* + * Compute the sum of all elements of a 4-D vector + */ +static inline float vmathV4Sum_V( VmathVector4 vec ); + +/* + * Compute the dot product of two 4-D vectors + */ +static inline float vmathV4Dot_V( VmathVector4 vec0, VmathVector4 vec1 ); + +/* + * Compute the square of the length of a 4-D vector + */ +static inline float vmathV4LengthSqr_V( VmathVector4 vec ); + +/* + * Compute the length of a 4-D vector + */ +static inline float vmathV4Length_V( VmathVector4 vec ); + +/* + * Normalize a 4-D vector + * NOTE: + * The result is unpredictable when all elements of vec are at or near zero. + */ +static inline VmathVector4 vmathV4Normalize_V( VmathVector4 vec ); + +/* + * Outer product of two 4-D vectors + */ +static inline VmathMatrix4 vmathV4Outer_V( VmathVector4 vec0, VmathVector4 vec1 ); + +/* + * Linear interpolation between two 4-D vectors + * NOTE: + * Does not clamp t between 0 and 1. + */ +static inline VmathVector4 vmathV4Lerp_V( float t, VmathVector4 vec0, VmathVector4 vec1 ); + +/* + * Spherical linear interpolation between two 4-D vectors + * NOTE: + * The result is unpredictable if the vectors point in opposite directions. + * Does not clamp t between 0 and 1. + */ +static inline VmathVector4 vmathV4Slerp_V( float t, VmathVector4 unitVec0, VmathVector4 unitVec1 ); + +/* + * Conditionally select between two 4-D vectors + */ +static inline VmathVector4 vmathV4Select_V( VmathVector4 vec0, VmathVector4 vec1, unsigned int select1 ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 4-D vector + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathV4Print_V( VmathVector4 vec ); + +/* + * Print a 4-D vector and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathV4Prints_V( VmathVector4 vec, const char *name ); + +#endif + +/* + * Construct a 3-D point from x, y, and z elements + */ +static inline VmathPoint3 vmathP3MakeFromElems_V( float x, float y, float z ); + +/* + * Copy elements from a 3-D vector into a 3-D point + */ +static inline VmathPoint3 vmathP3MakeFromV3_V( VmathVector3 vec ); + +/* + * Set all elements of a 3-D point to the same scalar value + */ +static inline VmathPoint3 vmathP3MakeFromScalar_V( float scalar ); + +/* + * Set the x element of a 3-D point + */ +static inline void vmathP3SetX_V( VmathPoint3 *result, float x ); + +/* + * Set the y element of a 3-D point + */ +static inline void vmathP3SetY_V( VmathPoint3 *result, float y ); + +/* + * Set the z element of a 3-D point + */ +static inline void vmathP3SetZ_V( VmathPoint3 *result, float z ); + +/* + * Get the x element of a 3-D point + */ +static inline float vmathP3GetX_V( VmathPoint3 pnt ); + +/* + * Get the y element of a 3-D point + */ +static inline float vmathP3GetY_V( VmathPoint3 pnt ); + +/* + * Get the z element of a 3-D point + */ +static inline float vmathP3GetZ_V( VmathPoint3 pnt ); + +/* + * Set an x, y, or z element of a 3-D point by index + */ +static inline void vmathP3SetElem_V( VmathPoint3 *result, int idx, float value ); + +/* + * Get an x, y, or z element of a 3-D point by index + */ +static inline float vmathP3GetElem_V( VmathPoint3 pnt, int idx ); + +/* + * Subtract a 3-D point from another 3-D point + */ +static inline VmathVector3 vmathP3Sub_V( VmathPoint3 pnt0, VmathPoint3 pnt1 ); + +/* + * Add a 3-D point to a 3-D vector + */ +static inline VmathPoint3 vmathP3AddV3_V( VmathPoint3 pnt, VmathVector3 vec ); + +/* + * Subtract a 3-D vector from a 3-D point + */ +static inline VmathPoint3 vmathP3SubV3_V( VmathPoint3 pnt, VmathVector3 vec ); + +/* + * Multiply two 3-D points per element + */ +static inline VmathPoint3 vmathP3MulPerElem_V( VmathPoint3 pnt0, VmathPoint3 pnt1 ); + +/* + * Divide two 3-D points per element + * NOTE: + * Floating-point behavior matches standard library function divf4. + */ +static inline VmathPoint3 vmathP3DivPerElem_V( VmathPoint3 pnt0, VmathPoint3 pnt1 ); + +/* + * Compute the reciprocal of a 3-D point per element + * NOTE: + * Floating-point behavior matches standard library function recipf4. + */ +static inline VmathPoint3 vmathP3RecipPerElem_V( VmathPoint3 pnt ); + +/* + * Compute the square root of a 3-D point per element + * NOTE: + * Floating-point behavior matches standard library function sqrtf4. + */ +static inline VmathPoint3 vmathP3SqrtPerElem_V( VmathPoint3 pnt ); + +/* + * Compute the reciprocal square root of a 3-D point per element + * NOTE: + * Floating-point behavior matches standard library function rsqrtf4. + */ +static inline VmathPoint3 vmathP3RsqrtPerElem_V( VmathPoint3 pnt ); + +/* + * Compute the absolute value of a 3-D point per element + */ +static inline VmathPoint3 vmathP3AbsPerElem_V( VmathPoint3 pnt ); + +/* + * Copy sign from one 3-D point to another, per element + */ +static inline VmathPoint3 vmathP3CopySignPerElem_V( VmathPoint3 pnt0, VmathPoint3 pnt1 ); + +/* + * Maximum of two 3-D points per element + */ +static inline VmathPoint3 vmathP3MaxPerElem_V( VmathPoint3 pnt0, VmathPoint3 pnt1 ); + +/* + * Minimum of two 3-D points per element + */ +static inline VmathPoint3 vmathP3MinPerElem_V( VmathPoint3 pnt0, VmathPoint3 pnt1 ); + +/* + * Maximum element of a 3-D point + */ +static inline float vmathP3MaxElem_V( VmathPoint3 pnt ); + +/* + * Minimum element of a 3-D point + */ +static inline float vmathP3MinElem_V( VmathPoint3 pnt ); + +/* + * Compute the sum of all elements of a 3-D point + */ +static inline float vmathP3Sum_V( VmathPoint3 pnt ); + +/* + * Apply uniform scale to a 3-D point + */ +static inline VmathPoint3 vmathP3Scale_V( VmathPoint3 pnt, float scaleVal ); + +/* + * Apply non-uniform scale to a 3-D point + */ +static inline VmathPoint3 vmathP3NonUniformScale_V( VmathPoint3 pnt, VmathVector3 scaleVec ); + +/* + * Scalar projection of a 3-D point on a unit-length 3-D vector + */ +static inline float vmathP3Projection_V( VmathPoint3 pnt, VmathVector3 unitVec ); + +/* + * Compute the square of the distance of a 3-D point from the coordinate-system origin + */ +static inline float vmathP3DistSqrFromOrigin_V( VmathPoint3 pnt ); + +/* + * Compute the distance of a 3-D point from the coordinate-system origin + */ +static inline float vmathP3DistFromOrigin_V( VmathPoint3 pnt ); + +/* + * Compute the square of the distance between two 3-D points + */ +static inline float vmathP3DistSqr_V( VmathPoint3 pnt0, VmathPoint3 pnt1 ); + +/* + * Compute the distance between two 3-D points + */ +static inline float vmathP3Dist_V( VmathPoint3 pnt0, VmathPoint3 pnt1 ); + +/* + * Linear interpolation between two 3-D points + * NOTE: + * Does not clamp t between 0 and 1. + */ +static inline VmathPoint3 vmathP3Lerp_V( float t, VmathPoint3 pnt0, VmathPoint3 pnt1 ); + +/* + * Conditionally select between two 3-D points + */ +static inline VmathPoint3 vmathP3Select_V( VmathPoint3 pnt0, VmathPoint3 pnt1, unsigned int select1 ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 3-D point + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathP3Print_V( VmathPoint3 pnt ); + +/* + * Print a 3-D point and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathP3Prints_V( VmathPoint3 pnt, const char *name ); + +#endif + +/* + * Construct a quaternion from x, y, z, and w elements + */ +static inline VmathQuat vmathQMakeFromElems_V( float x, float y, float z, float w ); + +/* + * Construct a quaternion from a 3-D vector and a scalar + */ +static inline VmathQuat vmathQMakeFromV3Scalar_V( VmathVector3 xyz, float w ); + +/* + * Copy elements from a 4-D vector into a quaternion + */ +static inline VmathQuat vmathQMakeFromV4_V( VmathVector4 vec ); + +/* + * Convert a rotation matrix to a unit-length quaternion + */ +static inline VmathQuat vmathQMakeFromM3_V( VmathMatrix3 rotMat ); + +/* + * Set all elements of a quaternion to the same scalar value + */ +static inline VmathQuat vmathQMakeFromScalar_V( float scalar ); + +/* + * Set the x, y, and z elements of a quaternion + * NOTE: + * This function does not change the w element. + */ +static inline void vmathQSetXYZ_V( VmathQuat *result, VmathVector3 vec ); + +/* + * Get the x, y, and z elements of a quaternion + */ +static inline VmathVector3 vmathQGetXYZ_V( VmathQuat quat ); + +/* + * Set the x element of a quaternion + */ +static inline void vmathQSetX_V( VmathQuat *result, float x ); + +/* + * Set the y element of a quaternion + */ +static inline void vmathQSetY_V( VmathQuat *result, float y ); + +/* + * Set the z element of a quaternion + */ +static inline void vmathQSetZ_V( VmathQuat *result, float z ); + +/* + * Set the w element of a quaternion + */ +static inline void vmathQSetW_V( VmathQuat *result, float w ); + +/* + * Get the x element of a quaternion + */ +static inline float vmathQGetX_V( VmathQuat quat ); + +/* + * Get the y element of a quaternion + */ +static inline float vmathQGetY_V( VmathQuat quat ); + +/* + * Get the z element of a quaternion + */ +static inline float vmathQGetZ_V( VmathQuat quat ); + +/* + * Get the w element of a quaternion + */ +static inline float vmathQGetW_V( VmathQuat quat ); + +/* + * Set an x, y, z, or w element of a quaternion by index + */ +static inline void vmathQSetElem_V( VmathQuat *result, int idx, float value ); + +/* + * Get an x, y, z, or w element of a quaternion by index + */ +static inline float vmathQGetElem_V( VmathQuat quat, int idx ); + +/* + * Add two quaternions + */ +static inline VmathQuat vmathQAdd_V( VmathQuat quat0, VmathQuat quat1 ); + +/* + * Subtract a quaternion from another quaternion + */ +static inline VmathQuat vmathQSub_V( VmathQuat quat0, VmathQuat quat1 ); + +/* + * Multiply two quaternions + */ +static inline VmathQuat vmathQMul_V( VmathQuat quat0, VmathQuat quat1 ); + +/* + * Multiply a quaternion by a scalar + */ +static inline VmathQuat vmathQScalarMul_V( VmathQuat quat, float scalar ); + +/* + * Divide a quaternion by a scalar + */ +static inline VmathQuat vmathQScalarDiv_V( VmathQuat quat, float scalar ); + +/* + * Negate all elements of a quaternion + */ +static inline VmathQuat vmathQNeg_V( VmathQuat quat ); + +/* + * Construct an identity quaternion + */ +static inline VmathQuat vmathQMakeIdentity_V( ); + +/* + * Construct a quaternion to rotate between two unit-length 3-D vectors + * NOTE: + * The result is unpredictable if unitVec0 and unitVec1 point in opposite directions. + */ +static inline VmathQuat vmathQMakeRotationArc_V( VmathVector3 unitVec0, VmathVector3 unitVec1 ); + +/* + * Construct a quaternion to rotate around a unit-length 3-D vector + */ +static inline VmathQuat vmathQMakeRotationAxis_V( float radians, VmathVector3 unitVec ); + +/* + * Construct a quaternion to rotate around the x axis + */ +static inline VmathQuat vmathQMakeRotationX_V( float radians ); + +/* + * Construct a quaternion to rotate around the y axis + */ +static inline VmathQuat vmathQMakeRotationY_V( float radians ); + +/* + * Construct a quaternion to rotate around the z axis + */ +static inline VmathQuat vmathQMakeRotationZ_V( float radians ); + +/* + * Compute the conjugate of a quaternion + */ +static inline VmathQuat vmathQConj_V( VmathQuat quat ); + +/* + * Use a unit-length quaternion to rotate a 3-D vector + */ +static inline VmathVector3 vmathQRotate_V( VmathQuat unitQuat, VmathVector3 vec ); + +/* + * Compute the dot product of two quaternions + */ +static inline float vmathQDot_V( VmathQuat quat0, VmathQuat quat1 ); + +/* + * Compute the norm of a quaternion + */ +static inline float vmathQNorm_V( VmathQuat quat ); + +/* + * Compute the length of a quaternion + */ +static inline float vmathQLength_V( VmathQuat quat ); + +/* + * Normalize a quaternion + * NOTE: + * The result is unpredictable when all elements of quat are at or near zero. + */ +static inline VmathQuat vmathQNormalize_V( VmathQuat quat ); + +/* + * Linear interpolation between two quaternions + * NOTE: + * Does not clamp t between 0 and 1. + */ +static inline VmathQuat vmathQLerp_V( float t, VmathQuat quat0, VmathQuat quat1 ); + +/* + * Spherical linear interpolation between two quaternions + * NOTE: + * Interpolates along the shortest path between orientations. + * Does not clamp t between 0 and 1. + */ +static inline VmathQuat vmathQSlerp_V( float t, VmathQuat unitQuat0, VmathQuat unitQuat1 ); + +/* + * Spherical quadrangle interpolation + */ +static inline VmathQuat vmathQSquad_V( float t, VmathQuat unitQuat0, VmathQuat unitQuat1, VmathQuat unitQuat2, VmathQuat unitQuat3 ); + +/* + * Conditionally select between two quaternions + */ +static inline VmathQuat vmathQSelect_V( VmathQuat quat0, VmathQuat quat1, unsigned int select1 ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a quaternion + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathQPrint_V( VmathQuat quat ); + +/* + * Print a quaternion and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathQPrints_V( VmathQuat quat, const char *name ); + +#endif + +/* + * Construct a 3x3 matrix containing the specified columns + */ +static inline VmathMatrix3 vmathM3MakeFromCols_V( VmathVector3 col0, VmathVector3 col1, VmathVector3 col2 ); + +/* + * Construct a 3x3 rotation matrix from a unit-length quaternion + */ +static inline VmathMatrix3 vmathM3MakeFromQ_V( VmathQuat unitQuat ); + +/* + * Set all elements of a 3x3 matrix to the same scalar value + */ +static inline VmathMatrix3 vmathM3MakeFromScalar_V( float scalar ); + +/* + * Set column 0 of a 3x3 matrix + */ +static inline void vmathM3SetCol0_V( VmathMatrix3 *result, VmathVector3 col0 ); + +/* + * Set column 1 of a 3x3 matrix + */ +static inline void vmathM3SetCol1_V( VmathMatrix3 *result, VmathVector3 col1 ); + +/* + * Set column 2 of a 3x3 matrix + */ +static inline void vmathM3SetCol2_V( VmathMatrix3 *result, VmathVector3 col2 ); + +/* + * Get column 0 of a 3x3 matrix + */ +static inline VmathVector3 vmathM3GetCol0_V( VmathMatrix3 mat ); + +/* + * Get column 1 of a 3x3 matrix + */ +static inline VmathVector3 vmathM3GetCol1_V( VmathMatrix3 mat ); + +/* + * Get column 2 of a 3x3 matrix + */ +static inline VmathVector3 vmathM3GetCol2_V( VmathMatrix3 mat ); + +/* + * Set the column of a 3x3 matrix referred to by the specified index + */ +static inline void vmathM3SetCol_V( VmathMatrix3 *result, int col, VmathVector3 vec ); + +/* + * Set the row of a 3x3 matrix referred to by the specified index + */ +static inline void vmathM3SetRow_V( VmathMatrix3 *result, int row, VmathVector3 vec ); + +/* + * Get the column of a 3x3 matrix referred to by the specified index + */ +static inline VmathVector3 vmathM3GetCol_V( VmathMatrix3 mat, int col ); + +/* + * Get the row of a 3x3 matrix referred to by the specified index + */ +static inline VmathVector3 vmathM3GetRow_V( VmathMatrix3 mat, int row ); + +/* + * Set the element of a 3x3 matrix referred to by column and row indices + */ +static inline void vmathM3SetElem_V( VmathMatrix3 *result, int col, int row, float val ); + +/* + * Get the element of a 3x3 matrix referred to by column and row indices + */ +static inline float vmathM3GetElem_V( VmathMatrix3 mat, int col, int row ); + +/* + * Add two 3x3 matrices + */ +static inline VmathMatrix3 vmathM3Add_V( VmathMatrix3 mat0, VmathMatrix3 mat1 ); + +/* + * Subtract a 3x3 matrix from another 3x3 matrix + */ +static inline VmathMatrix3 vmathM3Sub_V( VmathMatrix3 mat0, VmathMatrix3 mat1 ); + +/* + * Negate all elements of a 3x3 matrix + */ +static inline VmathMatrix3 vmathM3Neg_V( VmathMatrix3 mat ); + +/* + * Multiply a 3x3 matrix by a scalar + */ +static inline VmathMatrix3 vmathM3ScalarMul_V( VmathMatrix3 mat, float scalar ); + +/* + * Multiply a 3x3 matrix by a 3-D vector + */ +static inline VmathVector3 vmathM3MulV3_V( VmathMatrix3 mat, VmathVector3 vec ); + +/* + * Multiply two 3x3 matrices + */ +static inline VmathMatrix3 vmathM3Mul_V( VmathMatrix3 mat0, VmathMatrix3 mat1 ); + +/* + * Construct an identity 3x3 matrix + */ +static inline VmathMatrix3 vmathM3MakeIdentity_V( ); + +/* + * Construct a 3x3 matrix to rotate around the x axis + */ +static inline VmathMatrix3 vmathM3MakeRotationX_V( float radians ); + +/* + * Construct a 3x3 matrix to rotate around the y axis + */ +static inline VmathMatrix3 vmathM3MakeRotationY_V( float radians ); + +/* + * Construct a 3x3 matrix to rotate around the z axis + */ +static inline VmathMatrix3 vmathM3MakeRotationZ_V( float radians ); + +/* + * Construct a 3x3 matrix to rotate around the x, y, and z axes + */ +static inline VmathMatrix3 vmathM3MakeRotationZYX_V( VmathVector3 radiansXYZ ); + +/* + * Construct a 3x3 matrix to rotate around a unit-length 3-D vector + */ +static inline VmathMatrix3 vmathM3MakeRotationAxis_V( float radians, VmathVector3 unitVec ); + +/* + * Construct a rotation matrix from a unit-length quaternion + */ +static inline VmathMatrix3 vmathM3MakeRotationQ_V( VmathQuat unitQuat ); + +/* + * Construct a 3x3 matrix to perform scaling + */ +static inline VmathMatrix3 vmathM3MakeScale_V( VmathVector3 scaleVec ); + +/* + * Append (post-multiply) a scale transformation to a 3x3 matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline VmathMatrix3 vmathM3AppendScale_V( VmathMatrix3 mat, VmathVector3 scaleVec ); + +/* + * Prepend (pre-multiply) a scale transformation to a 3x3 matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline VmathMatrix3 vmathM3PrependScale_V( VmathVector3 scaleVec, VmathMatrix3 mat ); + +/* + * Multiply two 3x3 matrices per element + */ +static inline VmathMatrix3 vmathM3MulPerElem_V( VmathMatrix3 mat0, VmathMatrix3 mat1 ); + +/* + * Compute the absolute value of a 3x3 matrix per element + */ +static inline VmathMatrix3 vmathM3AbsPerElem_V( VmathMatrix3 mat ); + +/* + * Transpose of a 3x3 matrix + */ +static inline VmathMatrix3 vmathM3Transpose_V( VmathMatrix3 mat ); + +/* + * Compute the inverse of a 3x3 matrix + * NOTE: + * Result is unpredictable when the determinant of mat is equal to or near 0. + */ +static inline VmathMatrix3 vmathM3Inverse_V( VmathMatrix3 mat ); + +/* + * Determinant of a 3x3 matrix + */ +static inline float vmathM3Determinant_V( VmathMatrix3 mat ); + +/* + * Conditionally select between two 3x3 matrices + */ +static inline VmathMatrix3 vmathM3Select_V( VmathMatrix3 mat0, VmathMatrix3 mat1, unsigned int select1 ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 3x3 matrix + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathM3Print_V( VmathMatrix3 mat ); + +/* + * Print a 3x3 matrix and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathM3Prints_V( VmathMatrix3 mat, const char *name ); + +#endif + +/* + * Construct a 4x4 matrix containing the specified columns + */ +static inline VmathMatrix4 vmathM4MakeFromCols_V( VmathVector4 col0, VmathVector4 col1, VmathVector4 col2, VmathVector4 col3 ); + +/* + * Construct a 4x4 matrix from a 3x4 transformation matrix + */ +static inline VmathMatrix4 vmathM4MakeFromT3_V( VmathTransform3 mat ); + +/* + * Construct a 4x4 matrix from a 3x3 matrix and a 3-D vector + */ +static inline VmathMatrix4 vmathM4MakeFromM3V3_V( VmathMatrix3 mat, VmathVector3 translateVec ); + +/* + * Construct a 4x4 matrix from a unit-length quaternion and a 3-D vector + */ +static inline VmathMatrix4 vmathM4MakeFromQV3_V( VmathQuat unitQuat, VmathVector3 translateVec ); + +/* + * Set all elements of a 4x4 matrix to the same scalar value + */ +static inline VmathMatrix4 vmathM4MakeFromScalar_V( float scalar ); + +/* + * Set the upper-left 3x3 submatrix + * NOTE: + * This function does not change the bottom row elements. + */ +static inline void vmathM4SetUpper3x3_V( VmathMatrix4 *result, VmathMatrix3 mat3 ); + +/* + * Get the upper-left 3x3 submatrix of a 4x4 matrix + */ +static inline VmathMatrix3 vmathM4GetUpper3x3_V( VmathMatrix4 mat ); + +/* + * Set translation component + * NOTE: + * This function does not change the bottom row elements. + */ +static inline void vmathM4SetTranslation_V( VmathMatrix4 *result, VmathVector3 translateVec ); + +/* + * Get the translation component of a 4x4 matrix + */ +static inline VmathVector3 vmathM4GetTranslation_V( VmathMatrix4 mat ); + +/* + * Set column 0 of a 4x4 matrix + */ +static inline void vmathM4SetCol0_V( VmathMatrix4 *result, VmathVector4 col0 ); + +/* + * Set column 1 of a 4x4 matrix + */ +static inline void vmathM4SetCol1_V( VmathMatrix4 *result, VmathVector4 col1 ); + +/* + * Set column 2 of a 4x4 matrix + */ +static inline void vmathM4SetCol2_V( VmathMatrix4 *result, VmathVector4 col2 ); + +/* + * Set column 3 of a 4x4 matrix + */ +static inline void vmathM4SetCol3_V( VmathMatrix4 *result, VmathVector4 col3 ); + +/* + * Get column 0 of a 4x4 matrix + */ +static inline VmathVector4 vmathM4GetCol0_V( VmathMatrix4 mat ); + +/* + * Get column 1 of a 4x4 matrix + */ +static inline VmathVector4 vmathM4GetCol1_V( VmathMatrix4 mat ); + +/* + * Get column 2 of a 4x4 matrix + */ +static inline VmathVector4 vmathM4GetCol2_V( VmathMatrix4 mat ); + +/* + * Get column 3 of a 4x4 matrix + */ +static inline VmathVector4 vmathM4GetCol3_V( VmathMatrix4 mat ); + +/* + * Set the column of a 4x4 matrix referred to by the specified index + */ +static inline void vmathM4SetCol_V( VmathMatrix4 *result, int col, VmathVector4 vec ); + +/* + * Set the row of a 4x4 matrix referred to by the specified index + */ +static inline void vmathM4SetRow_V( VmathMatrix4 *result, int row, VmathVector4 vec ); + +/* + * Get the column of a 4x4 matrix referred to by the specified index + */ +static inline VmathVector4 vmathM4GetCol_V( VmathMatrix4 mat, int col ); + +/* + * Get the row of a 4x4 matrix referred to by the specified index + */ +static inline VmathVector4 vmathM4GetRow_V( VmathMatrix4 mat, int row ); + +/* + * Set the element of a 4x4 matrix referred to by column and row indices + */ +static inline void vmathM4SetElem_V( VmathMatrix4 *result, int col, int row, float val ); + +/* + * Get the element of a 4x4 matrix referred to by column and row indices + */ +static inline float vmathM4GetElem_V( VmathMatrix4 mat, int col, int row ); + +/* + * Add two 4x4 matrices + */ +static inline VmathMatrix4 vmathM4Add_V( VmathMatrix4 mat0, VmathMatrix4 mat1 ); + +/* + * Subtract a 4x4 matrix from another 4x4 matrix + */ +static inline VmathMatrix4 vmathM4Sub_V( VmathMatrix4 mat0, VmathMatrix4 mat1 ); + +/* + * Negate all elements of a 4x4 matrix + */ +static inline VmathMatrix4 vmathM4Neg_V( VmathMatrix4 mat ); + +/* + * Multiply a 4x4 matrix by a scalar + */ +static inline VmathMatrix4 vmathM4ScalarMul_V( VmathMatrix4 mat, float scalar ); + +/* + * Multiply a 4x4 matrix by a 4-D vector + */ +static inline VmathVector4 vmathM4MulV4_V( VmathMatrix4 mat, VmathVector4 vec ); + +/* + * Multiply a 4x4 matrix by a 3-D vector + */ +static inline VmathVector4 vmathM4MulV3_V( VmathMatrix4 mat, VmathVector3 vec ); + +/* + * Multiply a 4x4 matrix by a 3-D point + */ +static inline VmathVector4 vmathM4MulP3_V( VmathMatrix4 mat, VmathPoint3 pnt ); + +/* + * Multiply two 4x4 matrices + */ +static inline VmathMatrix4 vmathM4Mul_V( VmathMatrix4 mat0, VmathMatrix4 mat1 ); + +/* + * Multiply a 4x4 matrix by a 3x4 transformation matrix + */ +static inline VmathMatrix4 vmathM4MulT3_V( VmathMatrix4 mat, VmathTransform3 tfrm ); + +/* + * Construct an identity 4x4 matrix + */ +static inline VmathMatrix4 vmathM4MakeIdentity_V( ); + +/* + * Construct a 4x4 matrix to rotate around the x axis + */ +static inline VmathMatrix4 vmathM4MakeRotationX_V( float radians ); + +/* + * Construct a 4x4 matrix to rotate around the y axis + */ +static inline VmathMatrix4 vmathM4MakeRotationY_V( float radians ); + +/* + * Construct a 4x4 matrix to rotate around the z axis + */ +static inline VmathMatrix4 vmathM4MakeRotationZ_V( float radians ); + +/* + * Construct a 4x4 matrix to rotate around the x, y, and z axes + */ +static inline VmathMatrix4 vmathM4MakeRotationZYX_V( VmathVector3 radiansXYZ ); + +/* + * Construct a 4x4 matrix to rotate around a unit-length 3-D vector + */ +static inline VmathMatrix4 vmathM4MakeRotationAxis_V( float radians, VmathVector3 unitVec ); + +/* + * Construct a rotation matrix from a unit-length quaternion + */ +static inline VmathMatrix4 vmathM4MakeRotationQ_V( VmathQuat unitQuat ); + +/* + * Construct a 4x4 matrix to perform scaling + */ +static inline VmathMatrix4 vmathM4MakeScale_V( VmathVector3 scaleVec ); + +/* + * Construct a 4x4 matrix to perform translation + */ +static inline VmathMatrix4 vmathM4MakeTranslation_V( VmathVector3 translateVec ); + +/* + * Construct viewing matrix based on eye position, position looked at, and up direction + */ +static inline VmathMatrix4 vmathM4MakeLookAt_V( VmathPoint3 eyePos, VmathPoint3 lookAtPos, VmathVector3 upVec ); + +/* + * Construct a perspective projection matrix + */ +static inline VmathMatrix4 vmathM4MakePerspective_V( float fovyRadians, float aspect, float zNear, float zFar ); + +/* + * Construct a perspective projection matrix based on frustum + */ +static inline VmathMatrix4 vmathM4MakeFrustum_V( float left, float right, float bottom, float top, float zNear, float zFar ); + +/* + * Construct an orthographic projection matrix + */ +static inline VmathMatrix4 vmathM4MakeOrthographic_V( float left, float right, float bottom, float top, float zNear, float zFar ); + +/* + * Append (post-multiply) a scale transformation to a 4x4 matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline VmathMatrix4 vmathM4AppendScale_V( VmathMatrix4 mat, VmathVector3 scaleVec ); + +/* + * Prepend (pre-multiply) a scale transformation to a 4x4 matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline VmathMatrix4 vmathM4PrependScale_V( VmathVector3 scaleVec, VmathMatrix4 mat ); + +/* + * Multiply two 4x4 matrices per element + */ +static inline VmathMatrix4 vmathM4MulPerElem_V( VmathMatrix4 mat0, VmathMatrix4 mat1 ); + +/* + * Compute the absolute value of a 4x4 matrix per element + */ +static inline VmathMatrix4 vmathM4AbsPerElem_V( VmathMatrix4 mat ); + +/* + * Transpose of a 4x4 matrix + */ +static inline VmathMatrix4 vmathM4Transpose_V( VmathMatrix4 mat ); + +/* + * Compute the inverse of a 4x4 matrix + * NOTE: + * Result is unpredictable when the determinant of mat is equal to or near 0. + */ +static inline VmathMatrix4 vmathM4Inverse_V( VmathMatrix4 mat ); + +/* + * Compute the inverse of a 4x4 matrix, which is expected to be an affine matrix + * NOTE: + * This can be used to achieve better performance than a general inverse when the specified 4x4 matrix meets the given restrictions. The result is unpredictable when the determinant of mat is equal to or near 0. + */ +static inline VmathMatrix4 vmathM4AffineInverse_V( VmathMatrix4 mat ); + +/* + * Compute the inverse of a 4x4 matrix, which is expected to be an affine matrix with an orthogonal upper-left 3x3 submatrix + * NOTE: + * This can be used to achieve better performance than a general inverse when the specified 4x4 matrix meets the given restrictions. + */ +static inline VmathMatrix4 vmathM4OrthoInverse_V( VmathMatrix4 mat ); + +/* + * Determinant of a 4x4 matrix + */ +static inline float vmathM4Determinant_V( VmathMatrix4 mat ); + +/* + * Conditionally select between two 4x4 matrices + */ +static inline VmathMatrix4 vmathM4Select_V( VmathMatrix4 mat0, VmathMatrix4 mat1, unsigned int select1 ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 4x4 matrix + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathM4Print_V( VmathMatrix4 mat ); + +/* + * Print a 4x4 matrix and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathM4Prints_V( VmathMatrix4 mat, const char *name ); + +#endif + +/* + * Construct a 3x4 transformation matrix containing the specified columns + */ +static inline VmathTransform3 vmathT3MakeFromCols_V( VmathVector3 col0, VmathVector3 col1, VmathVector3 col2, VmathVector3 col3 ); + +/* + * Construct a 3x4 transformation matrix from a 3x3 matrix and a 3-D vector + */ +static inline VmathTransform3 vmathT3MakeFromM3V3_V( VmathMatrix3 tfrm, VmathVector3 translateVec ); + +/* + * Construct a 3x4 transformation matrix from a unit-length quaternion and a 3-D vector + */ +static inline VmathTransform3 vmathT3MakeFromQV3_V( VmathQuat unitQuat, VmathVector3 translateVec ); + +/* + * Set all elements of a 3x4 transformation matrix to the same scalar value + */ +static inline VmathTransform3 vmathT3MakeFromScalar_V( float scalar ); + +/* + * Set the upper-left 3x3 submatrix + */ +static inline void vmathT3SetUpper3x3_V( VmathTransform3 *result, VmathMatrix3 mat3 ); + +/* + * Get the upper-left 3x3 submatrix of a 3x4 transformation matrix + */ +static inline VmathMatrix3 vmathT3GetUpper3x3_V( VmathTransform3 tfrm ); + +/* + * Set translation component + */ +static inline void vmathT3SetTranslation_V( VmathTransform3 *result, VmathVector3 translateVec ); + +/* + * Get the translation component of a 3x4 transformation matrix + */ +static inline VmathVector3 vmathT3GetTranslation_V( VmathTransform3 tfrm ); + +/* + * Set column 0 of a 3x4 transformation matrix + */ +static inline void vmathT3SetCol0_V( VmathTransform3 *result, VmathVector3 col0 ); + +/* + * Set column 1 of a 3x4 transformation matrix + */ +static inline void vmathT3SetCol1_V( VmathTransform3 *result, VmathVector3 col1 ); + +/* + * Set column 2 of a 3x4 transformation matrix + */ +static inline void vmathT3SetCol2_V( VmathTransform3 *result, VmathVector3 col2 ); + +/* + * Set column 3 of a 3x4 transformation matrix + */ +static inline void vmathT3SetCol3_V( VmathTransform3 *result, VmathVector3 col3 ); + +/* + * Get column 0 of a 3x4 transformation matrix + */ +static inline VmathVector3 vmathT3GetCol0_V( VmathTransform3 tfrm ); + +/* + * Get column 1 of a 3x4 transformation matrix + */ +static inline VmathVector3 vmathT3GetCol1_V( VmathTransform3 tfrm ); + +/* + * Get column 2 of a 3x4 transformation matrix + */ +static inline VmathVector3 vmathT3GetCol2_V( VmathTransform3 tfrm ); + +/* + * Get column 3 of a 3x4 transformation matrix + */ +static inline VmathVector3 vmathT3GetCol3_V( VmathTransform3 tfrm ); + +/* + * Set the column of a 3x4 transformation matrix referred to by the specified index + */ +static inline void vmathT3SetCol_V( VmathTransform3 *result, int col, VmathVector3 vec ); + +/* + * Set the row of a 3x4 transformation matrix referred to by the specified index + */ +static inline void vmathT3SetRow_V( VmathTransform3 *result, int row, VmathVector4 vec ); + +/* + * Get the column of a 3x4 transformation matrix referred to by the specified index + */ +static inline VmathVector3 vmathT3GetCol_V( VmathTransform3 tfrm, int col ); + +/* + * Get the row of a 3x4 transformation matrix referred to by the specified index + */ +static inline VmathVector4 vmathT3GetRow_V( VmathTransform3 tfrm, int row ); + +/* + * Set the element of a 3x4 transformation matrix referred to by column and row indices + */ +static inline void vmathT3SetElem_V( VmathTransform3 *result, int col, int row, float val ); + +/* + * Get the element of a 3x4 transformation matrix referred to by column and row indices + */ +static inline float vmathT3GetElem_V( VmathTransform3 tfrm, int col, int row ); + +/* + * Multiply a 3x4 transformation matrix by a 3-D vector + */ +static inline VmathVector3 vmathT3MulV3_V( VmathTransform3 tfrm, VmathVector3 vec ); + +/* + * Multiply a 3x4 transformation matrix by a 3-D point + */ +static inline VmathPoint3 vmathT3MulP3_V( VmathTransform3 tfrm, VmathPoint3 pnt ); + +/* + * Multiply two 3x4 transformation matrices + */ +static inline VmathTransform3 vmathT3Mul_V( VmathTransform3 tfrm0, VmathTransform3 tfrm1 ); + +/* + * Construct an identity 3x4 transformation matrix + */ +static inline VmathTransform3 vmathT3MakeIdentity_V( ); + +/* + * Construct a 3x4 transformation matrix to rotate around the x axis + */ +static inline VmathTransform3 vmathT3MakeRotationX_V( float radians ); + +/* + * Construct a 3x4 transformation matrix to rotate around the y axis + */ +static inline VmathTransform3 vmathT3MakeRotationY_V( float radians ); + +/* + * Construct a 3x4 transformation matrix to rotate around the z axis + */ +static inline VmathTransform3 vmathT3MakeRotationZ_V( float radians ); + +/* + * Construct a 3x4 transformation matrix to rotate around the x, y, and z axes + */ +static inline VmathTransform3 vmathT3MakeRotationZYX_V( VmathVector3 radiansXYZ ); + +/* + * Construct a 3x4 transformation matrix to rotate around a unit-length 3-D vector + */ +static inline VmathTransform3 vmathT3MakeRotationAxis_V( float radians, VmathVector3 unitVec ); + +/* + * Construct a rotation matrix from a unit-length quaternion + */ +static inline VmathTransform3 vmathT3MakeRotationQ_V( VmathQuat unitQuat ); + +/* + * Construct a 3x4 transformation matrix to perform scaling + */ +static inline VmathTransform3 vmathT3MakeScale_V( VmathVector3 scaleVec ); + +/* + * Construct a 3x4 transformation matrix to perform translation + */ +static inline VmathTransform3 vmathT3MakeTranslation_V( VmathVector3 translateVec ); + +/* + * Append (post-multiply) a scale transformation to a 3x4 transformation matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline VmathTransform3 vmathT3AppendScale_V( VmathTransform3 tfrm, VmathVector3 scaleVec ); + +/* + * Prepend (pre-multiply) a scale transformation to a 3x4 transformation matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline VmathTransform3 vmathT3PrependScale_V( VmathVector3 scaleVec, VmathTransform3 tfrm ); + +/* + * Multiply two 3x4 transformation matrices per element + */ +static inline VmathTransform3 vmathT3MulPerElem_V( VmathTransform3 tfrm0, VmathTransform3 tfrm1 ); + +/* + * Compute the absolute value of a 3x4 transformation matrix per element + */ +static inline VmathTransform3 vmathT3AbsPerElem_V( VmathTransform3 tfrm ); + +/* + * Inverse of a 3x4 transformation matrix + * NOTE: + * Result is unpredictable when the determinant of the left 3x3 submatrix is equal to or near 0. + */ +static inline VmathTransform3 vmathT3Inverse_V( VmathTransform3 tfrm ); + +/* + * Compute the inverse of a 3x4 transformation matrix, expected to have an orthogonal upper-left 3x3 submatrix + * NOTE: + * This can be used to achieve better performance than a general inverse when the specified 3x4 transformation matrix meets the given restrictions. + */ +static inline VmathTransform3 vmathT3OrthoInverse_V( VmathTransform3 tfrm ); + +/* + * Conditionally select between two 3x4 transformation matrices + */ +static inline VmathTransform3 vmathT3Select_V( VmathTransform3 tfrm0, VmathTransform3 tfrm1, unsigned int select1 ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 3x4 transformation matrix + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathT3Print_V( VmathTransform3 tfrm ); + +/* + * Print a 3x4 transformation matrix and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathT3Prints_V( VmathTransform3 tfrm, const char *name ); + +#endif + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#include "vectormath_aos.h" +#include "vec_aos_v.h" +#include "quat_aos_v.h" +#include "mat_aos_v.h" + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/scalar/cpp/mat_aos.h b/Extras/vectormathlibrary/include/vectormath/scalar/cpp/mat_aos.h new file mode 100644 index 000000000..5d5d012d9 --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/scalar/cpp/mat_aos.h @@ -0,0 +1,1643 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_MAT_AOS_CPP_H +#define _VECTORMATH_MAT_AOS_CPP_H + +namespace Vectormath { +namespace Aos { + +//----------------------------------------------------------------------------- +// Constants + +#define _VECTORMATH_PI_OVER_2 1.570796327f + +//----------------------------------------------------------------------------- +// Definitions + +inline Matrix3::Matrix3( const Matrix3 & mat ) +{ + mCol0 = mat.mCol0; + mCol1 = mat.mCol1; + mCol2 = mat.mCol2; +} + +inline Matrix3::Matrix3( float scalar ) +{ + mCol0 = Vector3( scalar ); + mCol1 = Vector3( scalar ); + mCol2 = Vector3( scalar ); +} + +inline Matrix3::Matrix3( const Quat & unitQuat ) +{ + float qx, qy, qz, qw, qx2, qy2, qz2, qxqx2, qyqy2, qzqz2, qxqy2, qyqz2, qzqw2, qxqz2, qyqw2, qxqw2; + qx = unitQuat.getX(); + qy = unitQuat.getY(); + qz = unitQuat.getZ(); + qw = unitQuat.getW(); + qx2 = ( qx + qx ); + qy2 = ( qy + qy ); + qz2 = ( qz + qz ); + qxqx2 = ( qx * qx2 ); + qxqy2 = ( qx * qy2 ); + qxqz2 = ( qx * qz2 ); + qxqw2 = ( qw * qx2 ); + qyqy2 = ( qy * qy2 ); + qyqz2 = ( qy * qz2 ); + qyqw2 = ( qw * qy2 ); + qzqz2 = ( qz * qz2 ); + qzqw2 = ( qw * qz2 ); + mCol0 = Vector3( ( ( 1.0f - qyqy2 ) - qzqz2 ), ( qxqy2 + qzqw2 ), ( qxqz2 - qyqw2 ) ); + mCol1 = Vector3( ( qxqy2 - qzqw2 ), ( ( 1.0f - qxqx2 ) - qzqz2 ), ( qyqz2 + qxqw2 ) ); + mCol2 = Vector3( ( qxqz2 + qyqw2 ), ( qyqz2 - qxqw2 ), ( ( 1.0f - qxqx2 ) - qyqy2 ) ); +} + +inline Matrix3::Matrix3( const Vector3 & _col0, const Vector3 & _col1, const Vector3 & _col2 ) +{ + mCol0 = _col0; + mCol1 = _col1; + mCol2 = _col2; +} + +inline Matrix3 & Matrix3::setCol0( const Vector3 & _col0 ) +{ + mCol0 = _col0; + return *this; +} + +inline Matrix3 & Matrix3::setCol1( const Vector3 & _col1 ) +{ + mCol1 = _col1; + return *this; +} + +inline Matrix3 & Matrix3::setCol2( const Vector3 & _col2 ) +{ + mCol2 = _col2; + return *this; +} + +inline Matrix3 & Matrix3::setCol( int col, const Vector3 & vec ) +{ + *(&mCol0 + col) = vec; + return *this; +} + +inline Matrix3 & Matrix3::setRow( int row, const Vector3 & vec ) +{ + mCol0.setElem( row, vec.getElem( 0 ) ); + mCol1.setElem( row, vec.getElem( 1 ) ); + mCol2.setElem( row, vec.getElem( 2 ) ); + return *this; +} + +inline Matrix3 & Matrix3::setElem( int col, int row, float val ) +{ + Vector3 tmpV3_0; + tmpV3_0 = this->getCol( col ); + tmpV3_0.setElem( row, val ); + this->setCol( col, tmpV3_0 ); + return *this; +} + +inline float Matrix3::getElem( int col, int row ) const +{ + return this->getCol( col ).getElem( row ); +} + +inline const Vector3 Matrix3::getCol0( ) const +{ + return mCol0; +} + +inline const Vector3 Matrix3::getCol1( ) const +{ + return mCol1; +} + +inline const Vector3 Matrix3::getCol2( ) const +{ + return mCol2; +} + +inline const Vector3 Matrix3::getCol( int col ) const +{ + return *(&mCol0 + col); +} + +inline const Vector3 Matrix3::getRow( int row ) const +{ + return Vector3( mCol0.getElem( row ), mCol1.getElem( row ), mCol2.getElem( row ) ); +} + +inline Vector3 & Matrix3::operator []( int col ) +{ + return *(&mCol0 + col); +} + +inline const Vector3 Matrix3::operator []( int col ) const +{ + return *(&mCol0 + col); +} + +inline Matrix3 & Matrix3::operator =( const Matrix3 & mat ) +{ + mCol0 = mat.mCol0; + mCol1 = mat.mCol1; + mCol2 = mat.mCol2; + return *this; +} + +inline const Matrix3 transpose( const Matrix3 & mat ) +{ + return Matrix3( + Vector3( mat.getCol0().getX(), mat.getCol1().getX(), mat.getCol2().getX() ), + Vector3( mat.getCol0().getY(), mat.getCol1().getY(), mat.getCol2().getY() ), + Vector3( mat.getCol0().getZ(), mat.getCol1().getZ(), mat.getCol2().getZ() ) + ); +} + +inline const Matrix3 inverse( const Matrix3 & mat ) +{ + Vector3 tmp0, tmp1, tmp2; + float detinv; + tmp0 = cross( mat.getCol1(), mat.getCol2() ); + tmp1 = cross( mat.getCol2(), mat.getCol0() ); + tmp2 = cross( mat.getCol0(), mat.getCol1() ); + detinv = ( 1.0f / dot( mat.getCol2(), tmp2 ) ); + return Matrix3( + Vector3( ( tmp0.getX() * detinv ), ( tmp1.getX() * detinv ), ( tmp2.getX() * detinv ) ), + Vector3( ( tmp0.getY() * detinv ), ( tmp1.getY() * detinv ), ( tmp2.getY() * detinv ) ), + Vector3( ( tmp0.getZ() * detinv ), ( tmp1.getZ() * detinv ), ( tmp2.getZ() * detinv ) ) + ); +} + +inline float determinant( const Matrix3 & mat ) +{ + return dot( mat.getCol2(), cross( mat.getCol0(), mat.getCol1() ) ); +} + +inline const Matrix3 Matrix3::operator +( const Matrix3 & mat ) const +{ + return Matrix3( + ( mCol0 + mat.mCol0 ), + ( mCol1 + mat.mCol1 ), + ( mCol2 + mat.mCol2 ) + ); +} + +inline const Matrix3 Matrix3::operator -( const Matrix3 & mat ) const +{ + return Matrix3( + ( mCol0 - mat.mCol0 ), + ( mCol1 - mat.mCol1 ), + ( mCol2 - mat.mCol2 ) + ); +} + +inline Matrix3 & Matrix3::operator +=( const Matrix3 & mat ) +{ + *this = *this + mat; + return *this; +} + +inline Matrix3 & Matrix3::operator -=( const Matrix3 & mat ) +{ + *this = *this - mat; + return *this; +} + +inline const Matrix3 Matrix3::operator -( ) const +{ + return Matrix3( + ( -mCol0 ), + ( -mCol1 ), + ( -mCol2 ) + ); +} + +inline const Matrix3 absPerElem( const Matrix3 & mat ) +{ + return Matrix3( + absPerElem( mat.getCol0() ), + absPerElem( mat.getCol1() ), + absPerElem( mat.getCol2() ) + ); +} + +inline const Matrix3 Matrix3::operator *( float scalar ) const +{ + return Matrix3( + ( mCol0 * scalar ), + ( mCol1 * scalar ), + ( mCol2 * scalar ) + ); +} + +inline Matrix3 & Matrix3::operator *=( float scalar ) +{ + *this = *this * scalar; + return *this; +} + +inline const Matrix3 operator *( float scalar, const Matrix3 & mat ) +{ + return mat * scalar; +} + +inline const Vector3 Matrix3::operator *( const Vector3 & vec ) const +{ + return Vector3( + ( ( ( mCol0.getX() * vec.getX() ) + ( mCol1.getX() * vec.getY() ) ) + ( mCol2.getX() * vec.getZ() ) ), + ( ( ( mCol0.getY() * vec.getX() ) + ( mCol1.getY() * vec.getY() ) ) + ( mCol2.getY() * vec.getZ() ) ), + ( ( ( mCol0.getZ() * vec.getX() ) + ( mCol1.getZ() * vec.getY() ) ) + ( mCol2.getZ() * vec.getZ() ) ) + ); +} + +inline const Matrix3 Matrix3::operator *( const Matrix3 & mat ) const +{ + return Matrix3( + ( *this * mat.mCol0 ), + ( *this * mat.mCol1 ), + ( *this * mat.mCol2 ) + ); +} + +inline Matrix3 & Matrix3::operator *=( const Matrix3 & mat ) +{ + *this = *this * mat; + return *this; +} + +inline const Matrix3 mulPerElem( const Matrix3 & mat0, const Matrix3 & mat1 ) +{ + return Matrix3( + mulPerElem( mat0.getCol0(), mat1.getCol0() ), + mulPerElem( mat0.getCol1(), mat1.getCol1() ), + mulPerElem( mat0.getCol2(), mat1.getCol2() ) + ); +} + +inline const Matrix3 Matrix3::identity( ) +{ + return Matrix3( + Vector3::xAxis( ), + Vector3::yAxis( ), + Vector3::zAxis( ) + ); +} + +inline const Matrix3 Matrix3::rotationX( float radians ) +{ + float s, c; + s = sinf( radians ); + c = cosf( radians ); + return Matrix3( + Vector3::xAxis( ), + Vector3( 0.0f, c, s ), + Vector3( 0.0f, -s, c ) + ); +} + +inline const Matrix3 Matrix3::rotationY( float radians ) +{ + float s, c; + s = sinf( radians ); + c = cosf( radians ); + return Matrix3( + Vector3( c, 0.0f, -s ), + Vector3::yAxis( ), + Vector3( s, 0.0f, c ) + ); +} + +inline const Matrix3 Matrix3::rotationZ( float radians ) +{ + float s, c; + s = sinf( radians ); + c = cosf( radians ); + return Matrix3( + Vector3( c, s, 0.0f ), + Vector3( -s, c, 0.0f ), + Vector3::zAxis( ) + ); +} + +inline const Matrix3 Matrix3::rotationZYX( const Vector3 & radiansXYZ ) +{ + float sX, cX, sY, cY, sZ, cZ, tmp0, tmp1; + sX = sinf( radiansXYZ.getX() ); + cX = cosf( radiansXYZ.getX() ); + sY = sinf( radiansXYZ.getY() ); + cY = cosf( radiansXYZ.getY() ); + sZ = sinf( radiansXYZ.getZ() ); + cZ = cosf( radiansXYZ.getZ() ); + tmp0 = ( cZ * sY ); + tmp1 = ( sZ * sY ); + return Matrix3( + Vector3( ( cZ * cY ), ( sZ * cY ), -sY ), + Vector3( ( ( tmp0 * sX ) - ( sZ * cX ) ), ( ( tmp1 * sX ) + ( cZ * cX ) ), ( cY * sX ) ), + Vector3( ( ( tmp0 * cX ) + ( sZ * sX ) ), ( ( tmp1 * cX ) - ( cZ * sX ) ), ( cY * cX ) ) + ); +} + +inline const Matrix3 Matrix3::rotation( float radians, const Vector3 & unitVec ) +{ + float x, y, z, s, c, oneMinusC, xy, yz, zx; + s = sinf( radians ); + c = cosf( radians ); + x = unitVec.getX(); + y = unitVec.getY(); + z = unitVec.getZ(); + xy = ( x * y ); + yz = ( y * z ); + zx = ( z * x ); + oneMinusC = ( 1.0f - c ); + return Matrix3( + Vector3( ( ( ( x * x ) * oneMinusC ) + c ), ( ( xy * oneMinusC ) + ( z * s ) ), ( ( zx * oneMinusC ) - ( y * s ) ) ), + Vector3( ( ( xy * oneMinusC ) - ( z * s ) ), ( ( ( y * y ) * oneMinusC ) + c ), ( ( yz * oneMinusC ) + ( x * s ) ) ), + Vector3( ( ( zx * oneMinusC ) + ( y * s ) ), ( ( yz * oneMinusC ) - ( x * s ) ), ( ( ( z * z ) * oneMinusC ) + c ) ) + ); +} + +inline const Matrix3 Matrix3::rotation( const Quat & unitQuat ) +{ + return Matrix3( unitQuat ); +} + +inline const Matrix3 Matrix3::scale( const Vector3 & scaleVec ) +{ + return Matrix3( + Vector3( scaleVec.getX(), 0.0f, 0.0f ), + Vector3( 0.0f, scaleVec.getY(), 0.0f ), + Vector3( 0.0f, 0.0f, scaleVec.getZ() ) + ); +} + +inline const Matrix3 appendScale( const Matrix3 & mat, const Vector3 & scaleVec ) +{ + return Matrix3( + ( mat.getCol0() * scaleVec.getX( ) ), + ( mat.getCol1() * scaleVec.getY( ) ), + ( mat.getCol2() * scaleVec.getZ( ) ) + ); +} + +inline const Matrix3 prependScale( const Vector3 & scaleVec, const Matrix3 & mat ) +{ + return Matrix3( + mulPerElem( mat.getCol0(), scaleVec ), + mulPerElem( mat.getCol1(), scaleVec ), + mulPerElem( mat.getCol2(), scaleVec ) + ); +} + +inline const Matrix3 select( const Matrix3 & mat0, const Matrix3 & mat1, bool select1 ) +{ + return Matrix3( + select( mat0.getCol0(), mat1.getCol0(), select1 ), + select( mat0.getCol1(), mat1.getCol1(), select1 ), + select( mat0.getCol2(), mat1.getCol2(), select1 ) + ); +} + +#ifdef _VECTORMATH_DEBUG + +inline void print( const Matrix3 & mat ) +{ + print( mat.getRow( 0 ) ); + print( mat.getRow( 1 ) ); + print( mat.getRow( 2 ) ); +} + +inline void print( const Matrix3 & mat, const char * name ) +{ + printf("%s:\n", name); + print( mat ); +} + +#endif + +inline Matrix4::Matrix4( const Matrix4 & mat ) +{ + mCol0 = mat.mCol0; + mCol1 = mat.mCol1; + mCol2 = mat.mCol2; + mCol3 = mat.mCol3; +} + +inline Matrix4::Matrix4( float scalar ) +{ + mCol0 = Vector4( scalar ); + mCol1 = Vector4( scalar ); + mCol2 = Vector4( scalar ); + mCol3 = Vector4( scalar ); +} + +inline Matrix4::Matrix4( const Transform3 & mat ) +{ + mCol0 = Vector4( mat.getCol0(), 0.0f ); + mCol1 = Vector4( mat.getCol1(), 0.0f ); + mCol2 = Vector4( mat.getCol2(), 0.0f ); + mCol3 = Vector4( mat.getCol3(), 1.0f ); +} + +inline Matrix4::Matrix4( const Vector4 & _col0, const Vector4 & _col1, const Vector4 & _col2, const Vector4 & _col3 ) +{ + mCol0 = _col0; + mCol1 = _col1; + mCol2 = _col2; + mCol3 = _col3; +} + +inline Matrix4::Matrix4( const Matrix3 & mat, const Vector3 & translateVec ) +{ + mCol0 = Vector4( mat.getCol0(), 0.0f ); + mCol1 = Vector4( mat.getCol1(), 0.0f ); + mCol2 = Vector4( mat.getCol2(), 0.0f ); + mCol3 = Vector4( translateVec, 1.0f ); +} + +inline Matrix4::Matrix4( const Quat & unitQuat, const Vector3 & translateVec ) +{ + Matrix3 mat; + mat = Matrix3( unitQuat ); + mCol0 = Vector4( mat.getCol0(), 0.0f ); + mCol1 = Vector4( mat.getCol1(), 0.0f ); + mCol2 = Vector4( mat.getCol2(), 0.0f ); + mCol3 = Vector4( translateVec, 1.0f ); +} + +inline Matrix4 & Matrix4::setCol0( const Vector4 & _col0 ) +{ + mCol0 = _col0; + return *this; +} + +inline Matrix4 & Matrix4::setCol1( const Vector4 & _col1 ) +{ + mCol1 = _col1; + return *this; +} + +inline Matrix4 & Matrix4::setCol2( const Vector4 & _col2 ) +{ + mCol2 = _col2; + return *this; +} + +inline Matrix4 & Matrix4::setCol3( const Vector4 & _col3 ) +{ + mCol3 = _col3; + return *this; +} + +inline Matrix4 & Matrix4::setCol( int col, const Vector4 & vec ) +{ + *(&mCol0 + col) = vec; + return *this; +} + +inline Matrix4 & Matrix4::setRow( int row, const Vector4 & vec ) +{ + mCol0.setElem( row, vec.getElem( 0 ) ); + mCol1.setElem( row, vec.getElem( 1 ) ); + mCol2.setElem( row, vec.getElem( 2 ) ); + mCol3.setElem( row, vec.getElem( 3 ) ); + return *this; +} + +inline Matrix4 & Matrix4::setElem( int col, int row, float val ) +{ + Vector4 tmpV3_0; + tmpV3_0 = this->getCol( col ); + tmpV3_0.setElem( row, val ); + this->setCol( col, tmpV3_0 ); + return *this; +} + +inline float Matrix4::getElem( int col, int row ) const +{ + return this->getCol( col ).getElem( row ); +} + +inline const Vector4 Matrix4::getCol0( ) const +{ + return mCol0; +} + +inline const Vector4 Matrix4::getCol1( ) const +{ + return mCol1; +} + +inline const Vector4 Matrix4::getCol2( ) const +{ + return mCol2; +} + +inline const Vector4 Matrix4::getCol3( ) const +{ + return mCol3; +} + +inline const Vector4 Matrix4::getCol( int col ) const +{ + return *(&mCol0 + col); +} + +inline const Vector4 Matrix4::getRow( int row ) const +{ + return Vector4( mCol0.getElem( row ), mCol1.getElem( row ), mCol2.getElem( row ), mCol3.getElem( row ) ); +} + +inline Vector4 & Matrix4::operator []( int col ) +{ + return *(&mCol0 + col); +} + +inline const Vector4 Matrix4::operator []( int col ) const +{ + return *(&mCol0 + col); +} + +inline Matrix4 & Matrix4::operator =( const Matrix4 & mat ) +{ + mCol0 = mat.mCol0; + mCol1 = mat.mCol1; + mCol2 = mat.mCol2; + mCol3 = mat.mCol3; + return *this; +} + +inline const Matrix4 transpose( const Matrix4 & mat ) +{ + return Matrix4( + Vector4( mat.getCol0().getX(), mat.getCol1().getX(), mat.getCol2().getX(), mat.getCol3().getX() ), + Vector4( mat.getCol0().getY(), mat.getCol1().getY(), mat.getCol2().getY(), mat.getCol3().getY() ), + Vector4( mat.getCol0().getZ(), mat.getCol1().getZ(), mat.getCol2().getZ(), mat.getCol3().getZ() ), + Vector4( mat.getCol0().getW(), mat.getCol1().getW(), mat.getCol2().getW(), mat.getCol3().getW() ) + ); +} + +inline const Matrix4 inverse( const Matrix4 & mat ) +{ + Vector4 res0, res1, res2, res3; + float mA, mB, mC, mD, mE, mF, mG, mH, mI, mJ, mK, mL, mM, mN, mO, mP, tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, detInv; + mA = mat.getCol0().getX(); + mB = mat.getCol0().getY(); + mC = mat.getCol0().getZ(); + mD = mat.getCol0().getW(); + mE = mat.getCol1().getX(); + mF = mat.getCol1().getY(); + mG = mat.getCol1().getZ(); + mH = mat.getCol1().getW(); + mI = mat.getCol2().getX(); + mJ = mat.getCol2().getY(); + mK = mat.getCol2().getZ(); + mL = mat.getCol2().getW(); + mM = mat.getCol3().getX(); + mN = mat.getCol3().getY(); + mO = mat.getCol3().getZ(); + mP = mat.getCol3().getW(); + tmp0 = ( ( mK * mD ) - ( mC * mL ) ); + tmp1 = ( ( mO * mH ) - ( mG * mP ) ); + tmp2 = ( ( mB * mK ) - ( mJ * mC ) ); + tmp3 = ( ( mF * mO ) - ( mN * mG ) ); + tmp4 = ( ( mJ * mD ) - ( mB * mL ) ); + tmp5 = ( ( mN * mH ) - ( mF * mP ) ); + res0.setX( ( ( ( mJ * tmp1 ) - ( mL * tmp3 ) ) - ( mK * tmp5 ) ) ); + res0.setY( ( ( ( mN * tmp0 ) - ( mP * tmp2 ) ) - ( mO * tmp4 ) ) ); + res0.setZ( ( ( ( mD * tmp3 ) + ( mC * tmp5 ) ) - ( mB * tmp1 ) ) ); + res0.setW( ( ( ( mH * tmp2 ) + ( mG * tmp4 ) ) - ( mF * tmp0 ) ) ); + detInv = ( 1.0f / ( ( ( ( mA * res0.getX() ) + ( mE * res0.getY() ) ) + ( mI * res0.getZ() ) ) + ( mM * res0.getW() ) ) ); + res1.setX( ( mI * tmp1 ) ); + res1.setY( ( mM * tmp0 ) ); + res1.setZ( ( mA * tmp1 ) ); + res1.setW( ( mE * tmp0 ) ); + res3.setX( ( mI * tmp3 ) ); + res3.setY( ( mM * tmp2 ) ); + res3.setZ( ( mA * tmp3 ) ); + res3.setW( ( mE * tmp2 ) ); + res2.setX( ( mI * tmp5 ) ); + res2.setY( ( mM * tmp4 ) ); + res2.setZ( ( mA * tmp5 ) ); + res2.setW( ( mE * tmp4 ) ); + tmp0 = ( ( mI * mB ) - ( mA * mJ ) ); + tmp1 = ( ( mM * mF ) - ( mE * mN ) ); + tmp2 = ( ( mI * mD ) - ( mA * mL ) ); + tmp3 = ( ( mM * mH ) - ( mE * mP ) ); + tmp4 = ( ( mI * mC ) - ( mA * mK ) ); + tmp5 = ( ( mM * mG ) - ( mE * mO ) ); + res2.setX( ( ( ( mL * tmp1 ) - ( mJ * tmp3 ) ) + res2.getX() ) ); + res2.setY( ( ( ( mP * tmp0 ) - ( mN * tmp2 ) ) + res2.getY() ) ); + res2.setZ( ( ( ( mB * tmp3 ) - ( mD * tmp1 ) ) - res2.getZ() ) ); + res2.setW( ( ( ( mF * tmp2 ) - ( mH * tmp0 ) ) - res2.getW() ) ); + res3.setX( ( ( ( mJ * tmp5 ) - ( mK * tmp1 ) ) + res3.getX() ) ); + res3.setY( ( ( ( mN * tmp4 ) - ( mO * tmp0 ) ) + res3.getY() ) ); + res3.setZ( ( ( ( mC * tmp1 ) - ( mB * tmp5 ) ) - res3.getZ() ) ); + res3.setW( ( ( ( mG * tmp0 ) - ( mF * tmp4 ) ) - res3.getW() ) ); + res1.setX( ( ( ( mK * tmp3 ) - ( mL * tmp5 ) ) - res1.getX() ) ); + res1.setY( ( ( ( mO * tmp2 ) - ( mP * tmp4 ) ) - res1.getY() ) ); + res1.setZ( ( ( ( mD * tmp5 ) - ( mC * tmp3 ) ) + res1.getZ() ) ); + res1.setW( ( ( ( mH * tmp4 ) - ( mG * tmp2 ) ) + res1.getW() ) ); + return Matrix4( + ( res0 * detInv ), + ( res1 * detInv ), + ( res2 * detInv ), + ( res3 * detInv ) + ); +} + +inline const Matrix4 affineInverse( const Matrix4 & mat ) +{ + Transform3 affineMat; + affineMat.setCol0( mat.getCol0().getXYZ( ) ); + affineMat.setCol1( mat.getCol1().getXYZ( ) ); + affineMat.setCol2( mat.getCol2().getXYZ( ) ); + affineMat.setCol3( mat.getCol3().getXYZ( ) ); + return Matrix4( inverse( affineMat ) ); +} + +inline const Matrix4 orthoInverse( const Matrix4 & mat ) +{ + Transform3 affineMat; + affineMat.setCol0( mat.getCol0().getXYZ( ) ); + affineMat.setCol1( mat.getCol1().getXYZ( ) ); + affineMat.setCol2( mat.getCol2().getXYZ( ) ); + affineMat.setCol3( mat.getCol3().getXYZ( ) ); + return Matrix4( orthoInverse( affineMat ) ); +} + +inline float determinant( const Matrix4 & mat ) +{ + float dx, dy, dz, dw, mA, mB, mC, mD, mE, mF, mG, mH, mI, mJ, mK, mL, mM, mN, mO, mP, tmp0, tmp1, tmp2, tmp3, tmp4, tmp5; + mA = mat.getCol0().getX(); + mB = mat.getCol0().getY(); + mC = mat.getCol0().getZ(); + mD = mat.getCol0().getW(); + mE = mat.getCol1().getX(); + mF = mat.getCol1().getY(); + mG = mat.getCol1().getZ(); + mH = mat.getCol1().getW(); + mI = mat.getCol2().getX(); + mJ = mat.getCol2().getY(); + mK = mat.getCol2().getZ(); + mL = mat.getCol2().getW(); + mM = mat.getCol3().getX(); + mN = mat.getCol3().getY(); + mO = mat.getCol3().getZ(); + mP = mat.getCol3().getW(); + tmp0 = ( ( mK * mD ) - ( mC * mL ) ); + tmp1 = ( ( mO * mH ) - ( mG * mP ) ); + tmp2 = ( ( mB * mK ) - ( mJ * mC ) ); + tmp3 = ( ( mF * mO ) - ( mN * mG ) ); + tmp4 = ( ( mJ * mD ) - ( mB * mL ) ); + tmp5 = ( ( mN * mH ) - ( mF * mP ) ); + dx = ( ( ( mJ * tmp1 ) - ( mL * tmp3 ) ) - ( mK * tmp5 ) ); + dy = ( ( ( mN * tmp0 ) - ( mP * tmp2 ) ) - ( mO * tmp4 ) ); + dz = ( ( ( mD * tmp3 ) + ( mC * tmp5 ) ) - ( mB * tmp1 ) ); + dw = ( ( ( mH * tmp2 ) + ( mG * tmp4 ) ) - ( mF * tmp0 ) ); + return ( ( ( ( mA * dx ) + ( mE * dy ) ) + ( mI * dz ) ) + ( mM * dw ) ); +} + +inline const Matrix4 Matrix4::operator +( const Matrix4 & mat ) const +{ + return Matrix4( + ( mCol0 + mat.mCol0 ), + ( mCol1 + mat.mCol1 ), + ( mCol2 + mat.mCol2 ), + ( mCol3 + mat.mCol3 ) + ); +} + +inline const Matrix4 Matrix4::operator -( const Matrix4 & mat ) const +{ + return Matrix4( + ( mCol0 - mat.mCol0 ), + ( mCol1 - mat.mCol1 ), + ( mCol2 - mat.mCol2 ), + ( mCol3 - mat.mCol3 ) + ); +} + +inline Matrix4 & Matrix4::operator +=( const Matrix4 & mat ) +{ + *this = *this + mat; + return *this; +} + +inline Matrix4 & Matrix4::operator -=( const Matrix4 & mat ) +{ + *this = *this - mat; + return *this; +} + +inline const Matrix4 Matrix4::operator -( ) const +{ + return Matrix4( + ( -mCol0 ), + ( -mCol1 ), + ( -mCol2 ), + ( -mCol3 ) + ); +} + +inline const Matrix4 absPerElem( const Matrix4 & mat ) +{ + return Matrix4( + absPerElem( mat.getCol0() ), + absPerElem( mat.getCol1() ), + absPerElem( mat.getCol2() ), + absPerElem( mat.getCol3() ) + ); +} + +inline const Matrix4 Matrix4::operator *( float scalar ) const +{ + return Matrix4( + ( mCol0 * scalar ), + ( mCol1 * scalar ), + ( mCol2 * scalar ), + ( mCol3 * scalar ) + ); +} + +inline Matrix4 & Matrix4::operator *=( float scalar ) +{ + *this = *this * scalar; + return *this; +} + +inline const Matrix4 operator *( float scalar, const Matrix4 & mat ) +{ + return mat * scalar; +} + +inline const Vector4 Matrix4::operator *( const Vector4 & vec ) const +{ + return Vector4( + ( ( ( ( mCol0.getX() * vec.getX() ) + ( mCol1.getX() * vec.getY() ) ) + ( mCol2.getX() * vec.getZ() ) ) + ( mCol3.getX() * vec.getW() ) ), + ( ( ( ( mCol0.getY() * vec.getX() ) + ( mCol1.getY() * vec.getY() ) ) + ( mCol2.getY() * vec.getZ() ) ) + ( mCol3.getY() * vec.getW() ) ), + ( ( ( ( mCol0.getZ() * vec.getX() ) + ( mCol1.getZ() * vec.getY() ) ) + ( mCol2.getZ() * vec.getZ() ) ) + ( mCol3.getZ() * vec.getW() ) ), + ( ( ( ( mCol0.getW() * vec.getX() ) + ( mCol1.getW() * vec.getY() ) ) + ( mCol2.getW() * vec.getZ() ) ) + ( mCol3.getW() * vec.getW() ) ) + ); +} + +inline const Vector4 Matrix4::operator *( const Vector3 & vec ) const +{ + return Vector4( + ( ( ( mCol0.getX() * vec.getX() ) + ( mCol1.getX() * vec.getY() ) ) + ( mCol2.getX() * vec.getZ() ) ), + ( ( ( mCol0.getY() * vec.getX() ) + ( mCol1.getY() * vec.getY() ) ) + ( mCol2.getY() * vec.getZ() ) ), + ( ( ( mCol0.getZ() * vec.getX() ) + ( mCol1.getZ() * vec.getY() ) ) + ( mCol2.getZ() * vec.getZ() ) ), + ( ( ( mCol0.getW() * vec.getX() ) + ( mCol1.getW() * vec.getY() ) ) + ( mCol2.getW() * vec.getZ() ) ) + ); +} + +inline const Vector4 Matrix4::operator *( const Point3 & pnt ) const +{ + return Vector4( + ( ( ( ( mCol0.getX() * pnt.getX() ) + ( mCol1.getX() * pnt.getY() ) ) + ( mCol2.getX() * pnt.getZ() ) ) + mCol3.getX() ), + ( ( ( ( mCol0.getY() * pnt.getX() ) + ( mCol1.getY() * pnt.getY() ) ) + ( mCol2.getY() * pnt.getZ() ) ) + mCol3.getY() ), + ( ( ( ( mCol0.getZ() * pnt.getX() ) + ( mCol1.getZ() * pnt.getY() ) ) + ( mCol2.getZ() * pnt.getZ() ) ) + mCol3.getZ() ), + ( ( ( ( mCol0.getW() * pnt.getX() ) + ( mCol1.getW() * pnt.getY() ) ) + ( mCol2.getW() * pnt.getZ() ) ) + mCol3.getW() ) + ); +} + +inline const Matrix4 Matrix4::operator *( const Matrix4 & mat ) const +{ + return Matrix4( + ( *this * mat.mCol0 ), + ( *this * mat.mCol1 ), + ( *this * mat.mCol2 ), + ( *this * mat.mCol3 ) + ); +} + +inline Matrix4 & Matrix4::operator *=( const Matrix4 & mat ) +{ + *this = *this * mat; + return *this; +} + +inline const Matrix4 Matrix4::operator *( const Transform3 & tfrm ) const +{ + return Matrix4( + ( *this * tfrm.getCol0() ), + ( *this * tfrm.getCol1() ), + ( *this * tfrm.getCol2() ), + ( *this * Point3( tfrm.getCol3() ) ) + ); +} + +inline Matrix4 & Matrix4::operator *=( const Transform3 & tfrm ) +{ + *this = *this * tfrm; + return *this; +} + +inline const Matrix4 mulPerElem( const Matrix4 & mat0, const Matrix4 & mat1 ) +{ + return Matrix4( + mulPerElem( mat0.getCol0(), mat1.getCol0() ), + mulPerElem( mat0.getCol1(), mat1.getCol1() ), + mulPerElem( mat0.getCol2(), mat1.getCol2() ), + mulPerElem( mat0.getCol3(), mat1.getCol3() ) + ); +} + +inline const Matrix4 Matrix4::identity( ) +{ + return Matrix4( + Vector4::xAxis( ), + Vector4::yAxis( ), + Vector4::zAxis( ), + Vector4::wAxis( ) + ); +} + +inline Matrix4 & Matrix4::setUpper3x3( const Matrix3 & mat3 ) +{ + mCol0.setXYZ( mat3.getCol0() ); + mCol1.setXYZ( mat3.getCol1() ); + mCol2.setXYZ( mat3.getCol2() ); + return *this; +} + +inline const Matrix3 Matrix4::getUpper3x3( ) const +{ + return Matrix3( + mCol0.getXYZ( ), + mCol1.getXYZ( ), + mCol2.getXYZ( ) + ); +} + +inline Matrix4 & Matrix4::setTranslation( const Vector3 & translateVec ) +{ + mCol3.setXYZ( translateVec ); + return *this; +} + +inline const Vector3 Matrix4::getTranslation( ) const +{ + return mCol3.getXYZ( ); +} + +inline const Matrix4 Matrix4::rotationX( float radians ) +{ + float s, c; + s = sinf( radians ); + c = cosf( radians ); + return Matrix4( + Vector4::xAxis( ), + Vector4( 0.0f, c, s, 0.0f ), + Vector4( 0.0f, -s, c, 0.0f ), + Vector4::wAxis( ) + ); +} + +inline const Matrix4 Matrix4::rotationY( float radians ) +{ + float s, c; + s = sinf( radians ); + c = cosf( radians ); + return Matrix4( + Vector4( c, 0.0f, -s, 0.0f ), + Vector4::yAxis( ), + Vector4( s, 0.0f, c, 0.0f ), + Vector4::wAxis( ) + ); +} + +inline const Matrix4 Matrix4::rotationZ( float radians ) +{ + float s, c; + s = sinf( radians ); + c = cosf( radians ); + return Matrix4( + Vector4( c, s, 0.0f, 0.0f ), + Vector4( -s, c, 0.0f, 0.0f ), + Vector4::zAxis( ), + Vector4::wAxis( ) + ); +} + +inline const Matrix4 Matrix4::rotationZYX( const Vector3 & radiansXYZ ) +{ + float sX, cX, sY, cY, sZ, cZ, tmp0, tmp1; + sX = sinf( radiansXYZ.getX() ); + cX = cosf( radiansXYZ.getX() ); + sY = sinf( radiansXYZ.getY() ); + cY = cosf( radiansXYZ.getY() ); + sZ = sinf( radiansXYZ.getZ() ); + cZ = cosf( radiansXYZ.getZ() ); + tmp0 = ( cZ * sY ); + tmp1 = ( sZ * sY ); + return Matrix4( + Vector4( ( cZ * cY ), ( sZ * cY ), -sY, 0.0f ), + Vector4( ( ( tmp0 * sX ) - ( sZ * cX ) ), ( ( tmp1 * sX ) + ( cZ * cX ) ), ( cY * sX ), 0.0f ), + Vector4( ( ( tmp0 * cX ) + ( sZ * sX ) ), ( ( tmp1 * cX ) - ( cZ * sX ) ), ( cY * cX ), 0.0f ), + Vector4::wAxis( ) + ); +} + +inline const Matrix4 Matrix4::rotation( float radians, const Vector3 & unitVec ) +{ + float x, y, z, s, c, oneMinusC, xy, yz, zx; + s = sinf( radians ); + c = cosf( radians ); + x = unitVec.getX(); + y = unitVec.getY(); + z = unitVec.getZ(); + xy = ( x * y ); + yz = ( y * z ); + zx = ( z * x ); + oneMinusC = ( 1.0f - c ); + return Matrix4( + Vector4( ( ( ( x * x ) * oneMinusC ) + c ), ( ( xy * oneMinusC ) + ( z * s ) ), ( ( zx * oneMinusC ) - ( y * s ) ), 0.0f ), + Vector4( ( ( xy * oneMinusC ) - ( z * s ) ), ( ( ( y * y ) * oneMinusC ) + c ), ( ( yz * oneMinusC ) + ( x * s ) ), 0.0f ), + Vector4( ( ( zx * oneMinusC ) + ( y * s ) ), ( ( yz * oneMinusC ) - ( x * s ) ), ( ( ( z * z ) * oneMinusC ) + c ), 0.0f ), + Vector4::wAxis( ) + ); +} + +inline const Matrix4 Matrix4::rotation( const Quat & unitQuat ) +{ + return Matrix4( Transform3::rotation( unitQuat ) ); +} + +inline const Matrix4 Matrix4::scale( const Vector3 & scaleVec ) +{ + return Matrix4( + Vector4( scaleVec.getX(), 0.0f, 0.0f, 0.0f ), + Vector4( 0.0f, scaleVec.getY(), 0.0f, 0.0f ), + Vector4( 0.0f, 0.0f, scaleVec.getZ(), 0.0f ), + Vector4::wAxis( ) + ); +} + +inline const Matrix4 appendScale( const Matrix4 & mat, const Vector3 & scaleVec ) +{ + return Matrix4( + ( mat.getCol0() * scaleVec.getX( ) ), + ( mat.getCol1() * scaleVec.getY( ) ), + ( mat.getCol2() * scaleVec.getZ( ) ), + mat.getCol3() + ); +} + +inline const Matrix4 prependScale( const Vector3 & scaleVec, const Matrix4 & mat ) +{ + Vector4 scale4; + scale4 = Vector4( scaleVec, 1.0f ); + return Matrix4( + mulPerElem( mat.getCol0(), scale4 ), + mulPerElem( mat.getCol1(), scale4 ), + mulPerElem( mat.getCol2(), scale4 ), + mulPerElem( mat.getCol3(), scale4 ) + ); +} + +inline const Matrix4 Matrix4::translation( const Vector3 & translateVec ) +{ + return Matrix4( + Vector4::xAxis( ), + Vector4::yAxis( ), + Vector4::zAxis( ), + Vector4( translateVec, 1.0f ) + ); +} + +inline const Matrix4 Matrix4::lookAt( const Point3 & eyePos, const Point3 & lookAtPos, const Vector3 & upVec ) +{ + Matrix4 m4EyeFrame; + Vector3 v3X, v3Y, v3Z; + v3Y = normalize( upVec ); + v3Z = normalize( ( eyePos - lookAtPos ) ); + v3X = normalize( cross( v3Y, v3Z ) ); + v3Y = cross( v3Z, v3X ); + m4EyeFrame = Matrix4( Vector4( v3X ), Vector4( v3Y ), Vector4( v3Z ), Vector4( eyePos ) ); + return orthoInverse( m4EyeFrame ); +} + +inline const Matrix4 Matrix4::perspective( float fovyRadians, float aspect, float zNear, float zFar ) +{ + float f, rangeInv; + f = tanf( ( (float)( _VECTORMATH_PI_OVER_2 ) - ( 0.5f * fovyRadians ) ) ); + rangeInv = ( 1.0f / ( zNear - zFar ) ); + return Matrix4( + Vector4( ( f / aspect ), 0.0f, 0.0f, 0.0f ), + Vector4( 0.0f, f, 0.0f, 0.0f ), + Vector4( 0.0f, 0.0f, ( ( zNear + zFar ) * rangeInv ), -1.0f ), + Vector4( 0.0f, 0.0f, ( ( ( zNear * zFar ) * rangeInv ) * 2.0f ), 0.0f ) + ); +} + +inline const Matrix4 Matrix4::frustum( float left, float right, float bottom, float top, float zNear, float zFar ) +{ + float sum_rl, sum_tb, sum_nf, inv_rl, inv_tb, inv_nf, n2; + sum_rl = ( right + left ); + sum_tb = ( top + bottom ); + sum_nf = ( zNear + zFar ); + inv_rl = ( 1.0f / ( right - left ) ); + inv_tb = ( 1.0f / ( top - bottom ) ); + inv_nf = ( 1.0f / ( zNear - zFar ) ); + n2 = ( zNear + zNear ); + return Matrix4( + Vector4( ( n2 * inv_rl ), 0.0f, 0.0f, 0.0f ), + Vector4( 0.0f, ( n2 * inv_tb ), 0.0f, 0.0f ), + Vector4( ( sum_rl * inv_rl ), ( sum_tb * inv_tb ), ( sum_nf * inv_nf ), -1.0f ), + Vector4( 0.0f, 0.0f, ( ( n2 * inv_nf ) * zFar ), 0.0f ) + ); +} + +inline const Matrix4 Matrix4::orthographic( float left, float right, float bottom, float top, float zNear, float zFar ) +{ + float sum_rl, sum_tb, sum_nf, inv_rl, inv_tb, inv_nf; + sum_rl = ( right + left ); + sum_tb = ( top + bottom ); + sum_nf = ( zNear + zFar ); + inv_rl = ( 1.0f / ( right - left ) ); + inv_tb = ( 1.0f / ( top - bottom ) ); + inv_nf = ( 1.0f / ( zNear - zFar ) ); + return Matrix4( + Vector4( ( inv_rl + inv_rl ), 0.0f, 0.0f, 0.0f ), + Vector4( 0.0f, ( inv_tb + inv_tb ), 0.0f, 0.0f ), + Vector4( 0.0f, 0.0f, ( inv_nf + inv_nf ), 0.0f ), + Vector4( ( -sum_rl * inv_rl ), ( -sum_tb * inv_tb ), ( sum_nf * inv_nf ), 1.0f ) + ); +} + +inline const Matrix4 select( const Matrix4 & mat0, const Matrix4 & mat1, bool select1 ) +{ + return Matrix4( + select( mat0.getCol0(), mat1.getCol0(), select1 ), + select( mat0.getCol1(), mat1.getCol1(), select1 ), + select( mat0.getCol2(), mat1.getCol2(), select1 ), + select( mat0.getCol3(), mat1.getCol3(), select1 ) + ); +} + +#ifdef _VECTORMATH_DEBUG + +inline void print( const Matrix4 & mat ) +{ + print( mat.getRow( 0 ) ); + print( mat.getRow( 1 ) ); + print( mat.getRow( 2 ) ); + print( mat.getRow( 3 ) ); +} + +inline void print( const Matrix4 & mat, const char * name ) +{ + printf("%s:\n", name); + print( mat ); +} + +#endif + +inline Transform3::Transform3( const Transform3 & tfrm ) +{ + mCol0 = tfrm.mCol0; + mCol1 = tfrm.mCol1; + mCol2 = tfrm.mCol2; + mCol3 = tfrm.mCol3; +} + +inline Transform3::Transform3( float scalar ) +{ + mCol0 = Vector3( scalar ); + mCol1 = Vector3( scalar ); + mCol2 = Vector3( scalar ); + mCol3 = Vector3( scalar ); +} + +inline Transform3::Transform3( const Vector3 & _col0, const Vector3 & _col1, const Vector3 & _col2, const Vector3 & _col3 ) +{ + mCol0 = _col0; + mCol1 = _col1; + mCol2 = _col2; + mCol3 = _col3; +} + +inline Transform3::Transform3( const Matrix3 & tfrm, const Vector3 & translateVec ) +{ + this->setUpper3x3( tfrm ); + this->setTranslation( translateVec ); +} + +inline Transform3::Transform3( const Quat & unitQuat, const Vector3 & translateVec ) +{ + this->setUpper3x3( Matrix3( unitQuat ) ); + this->setTranslation( translateVec ); +} + +inline Transform3 & Transform3::setCol0( const Vector3 & _col0 ) +{ + mCol0 = _col0; + return *this; +} + +inline Transform3 & Transform3::setCol1( const Vector3 & _col1 ) +{ + mCol1 = _col1; + return *this; +} + +inline Transform3 & Transform3::setCol2( const Vector3 & _col2 ) +{ + mCol2 = _col2; + return *this; +} + +inline Transform3 & Transform3::setCol3( const Vector3 & _col3 ) +{ + mCol3 = _col3; + return *this; +} + +inline Transform3 & Transform3::setCol( int col, const Vector3 & vec ) +{ + *(&mCol0 + col) = vec; + return *this; +} + +inline Transform3 & Transform3::setRow( int row, const Vector4 & vec ) +{ + mCol0.setElem( row, vec.getElem( 0 ) ); + mCol1.setElem( row, vec.getElem( 1 ) ); + mCol2.setElem( row, vec.getElem( 2 ) ); + mCol3.setElem( row, vec.getElem( 3 ) ); + return *this; +} + +inline Transform3 & Transform3::setElem( int col, int row, float val ) +{ + Vector3 tmpV3_0; + tmpV3_0 = this->getCol( col ); + tmpV3_0.setElem( row, val ); + this->setCol( col, tmpV3_0 ); + return *this; +} + +inline float Transform3::getElem( int col, int row ) const +{ + return this->getCol( col ).getElem( row ); +} + +inline const Vector3 Transform3::getCol0( ) const +{ + return mCol0; +} + +inline const Vector3 Transform3::getCol1( ) const +{ + return mCol1; +} + +inline const Vector3 Transform3::getCol2( ) const +{ + return mCol2; +} + +inline const Vector3 Transform3::getCol3( ) const +{ + return mCol3; +} + +inline const Vector3 Transform3::getCol( int col ) const +{ + return *(&mCol0 + col); +} + +inline const Vector4 Transform3::getRow( int row ) const +{ + return Vector4( mCol0.getElem( row ), mCol1.getElem( row ), mCol2.getElem( row ), mCol3.getElem( row ) ); +} + +inline Vector3 & Transform3::operator []( int col ) +{ + return *(&mCol0 + col); +} + +inline const Vector3 Transform3::operator []( int col ) const +{ + return *(&mCol0 + col); +} + +inline Transform3 & Transform3::operator =( const Transform3 & tfrm ) +{ + mCol0 = tfrm.mCol0; + mCol1 = tfrm.mCol1; + mCol2 = tfrm.mCol2; + mCol3 = tfrm.mCol3; + return *this; +} + +inline const Transform3 inverse( const Transform3 & tfrm ) +{ + Vector3 tmp0, tmp1, tmp2, inv0, inv1, inv2; + float detinv; + tmp0 = cross( tfrm.getCol1(), tfrm.getCol2() ); + tmp1 = cross( tfrm.getCol2(), tfrm.getCol0() ); + tmp2 = cross( tfrm.getCol0(), tfrm.getCol1() ); + detinv = ( 1.0f / dot( tfrm.getCol2(), tmp2 ) ); + inv0 = Vector3( ( tmp0.getX() * detinv ), ( tmp1.getX() * detinv ), ( tmp2.getX() * detinv ) ); + inv1 = Vector3( ( tmp0.getY() * detinv ), ( tmp1.getY() * detinv ), ( tmp2.getY() * detinv ) ); + inv2 = Vector3( ( tmp0.getZ() * detinv ), ( tmp1.getZ() * detinv ), ( tmp2.getZ() * detinv ) ); + return Transform3( + inv0, + inv1, + inv2, + Vector3( ( -( ( inv0 * tfrm.getCol3().getX() ) + ( ( inv1 * tfrm.getCol3().getY() ) + ( inv2 * tfrm.getCol3().getZ() ) ) ) ) ) + ); +} + +inline const Transform3 orthoInverse( const Transform3 & tfrm ) +{ + Vector3 inv0, inv1, inv2; + inv0 = Vector3( tfrm.getCol0().getX(), tfrm.getCol1().getX(), tfrm.getCol2().getX() ); + inv1 = Vector3( tfrm.getCol0().getY(), tfrm.getCol1().getY(), tfrm.getCol2().getY() ); + inv2 = Vector3( tfrm.getCol0().getZ(), tfrm.getCol1().getZ(), tfrm.getCol2().getZ() ); + return Transform3( + inv0, + inv1, + inv2, + Vector3( ( -( ( inv0 * tfrm.getCol3().getX() ) + ( ( inv1 * tfrm.getCol3().getY() ) + ( inv2 * tfrm.getCol3().getZ() ) ) ) ) ) + ); +} + +inline const Transform3 absPerElem( const Transform3 & tfrm ) +{ + return Transform3( + absPerElem( tfrm.getCol0() ), + absPerElem( tfrm.getCol1() ), + absPerElem( tfrm.getCol2() ), + absPerElem( tfrm.getCol3() ) + ); +} + +inline const Vector3 Transform3::operator *( const Vector3 & vec ) const +{ + return Vector3( + ( ( ( mCol0.getX() * vec.getX() ) + ( mCol1.getX() * vec.getY() ) ) + ( mCol2.getX() * vec.getZ() ) ), + ( ( ( mCol0.getY() * vec.getX() ) + ( mCol1.getY() * vec.getY() ) ) + ( mCol2.getY() * vec.getZ() ) ), + ( ( ( mCol0.getZ() * vec.getX() ) + ( mCol1.getZ() * vec.getY() ) ) + ( mCol2.getZ() * vec.getZ() ) ) + ); +} + +inline const Point3 Transform3::operator *( const Point3 & pnt ) const +{ + return Point3( + ( ( ( ( mCol0.getX() * pnt.getX() ) + ( mCol1.getX() * pnt.getY() ) ) + ( mCol2.getX() * pnt.getZ() ) ) + mCol3.getX() ), + ( ( ( ( mCol0.getY() * pnt.getX() ) + ( mCol1.getY() * pnt.getY() ) ) + ( mCol2.getY() * pnt.getZ() ) ) + mCol3.getY() ), + ( ( ( ( mCol0.getZ() * pnt.getX() ) + ( mCol1.getZ() * pnt.getY() ) ) + ( mCol2.getZ() * pnt.getZ() ) ) + mCol3.getZ() ) + ); +} + +inline const Transform3 Transform3::operator *( const Transform3 & tfrm ) const +{ + return Transform3( + ( *this * tfrm.mCol0 ), + ( *this * tfrm.mCol1 ), + ( *this * tfrm.mCol2 ), + Vector3( ( *this * Point3( tfrm.mCol3 ) ) ) + ); +} + +inline Transform3 & Transform3::operator *=( const Transform3 & tfrm ) +{ + *this = *this * tfrm; + return *this; +} + +inline const Transform3 mulPerElem( const Transform3 & tfrm0, const Transform3 & tfrm1 ) +{ + return Transform3( + mulPerElem( tfrm0.getCol0(), tfrm1.getCol0() ), + mulPerElem( tfrm0.getCol1(), tfrm1.getCol1() ), + mulPerElem( tfrm0.getCol2(), tfrm1.getCol2() ), + mulPerElem( tfrm0.getCol3(), tfrm1.getCol3() ) + ); +} + +inline const Transform3 Transform3::identity( ) +{ + return Transform3( + Vector3::xAxis( ), + Vector3::yAxis( ), + Vector3::zAxis( ), + Vector3( 0.0f ) + ); +} + +inline Transform3 & Transform3::setUpper3x3( const Matrix3 & tfrm ) +{ + mCol0 = tfrm.getCol0(); + mCol1 = tfrm.getCol1(); + mCol2 = tfrm.getCol2(); + return *this; +} + +inline const Matrix3 Transform3::getUpper3x3( ) const +{ + return Matrix3( mCol0, mCol1, mCol2 ); +} + +inline Transform3 & Transform3::setTranslation( const Vector3 & translateVec ) +{ + mCol3 = translateVec; + return *this; +} + +inline const Vector3 Transform3::getTranslation( ) const +{ + return mCol3; +} + +inline const Transform3 Transform3::rotationX( float radians ) +{ + float s, c; + s = sinf( radians ); + c = cosf( radians ); + return Transform3( + Vector3::xAxis( ), + Vector3( 0.0f, c, s ), + Vector3( 0.0f, -s, c ), + Vector3( 0.0f ) + ); +} + +inline const Transform3 Transform3::rotationY( float radians ) +{ + float s, c; + s = sinf( radians ); + c = cosf( radians ); + return Transform3( + Vector3( c, 0.0f, -s ), + Vector3::yAxis( ), + Vector3( s, 0.0f, c ), + Vector3( 0.0f ) + ); +} + +inline const Transform3 Transform3::rotationZ( float radians ) +{ + float s, c; + s = sinf( radians ); + c = cosf( radians ); + return Transform3( + Vector3( c, s, 0.0f ), + Vector3( -s, c, 0.0f ), + Vector3::zAxis( ), + Vector3( 0.0f ) + ); +} + +inline const Transform3 Transform3::rotationZYX( const Vector3 & radiansXYZ ) +{ + float sX, cX, sY, cY, sZ, cZ, tmp0, tmp1; + sX = sinf( radiansXYZ.getX() ); + cX = cosf( radiansXYZ.getX() ); + sY = sinf( radiansXYZ.getY() ); + cY = cosf( radiansXYZ.getY() ); + sZ = sinf( radiansXYZ.getZ() ); + cZ = cosf( radiansXYZ.getZ() ); + tmp0 = ( cZ * sY ); + tmp1 = ( sZ * sY ); + return Transform3( + Vector3( ( cZ * cY ), ( sZ * cY ), -sY ), + Vector3( ( ( tmp0 * sX ) - ( sZ * cX ) ), ( ( tmp1 * sX ) + ( cZ * cX ) ), ( cY * sX ) ), + Vector3( ( ( tmp0 * cX ) + ( sZ * sX ) ), ( ( tmp1 * cX ) - ( cZ * sX ) ), ( cY * cX ) ), + Vector3( 0.0f ) + ); +} + +inline const Transform3 Transform3::rotation( float radians, const Vector3 & unitVec ) +{ + return Transform3( Matrix3::rotation( radians, unitVec ), Vector3( 0.0f ) ); +} + +inline const Transform3 Transform3::rotation( const Quat & unitQuat ) +{ + return Transform3( Matrix3( unitQuat ), Vector3( 0.0f ) ); +} + +inline const Transform3 Transform3::scale( const Vector3 & scaleVec ) +{ + return Transform3( + Vector3( scaleVec.getX(), 0.0f, 0.0f ), + Vector3( 0.0f, scaleVec.getY(), 0.0f ), + Vector3( 0.0f, 0.0f, scaleVec.getZ() ), + Vector3( 0.0f ) + ); +} + +inline const Transform3 appendScale( const Transform3 & tfrm, const Vector3 & scaleVec ) +{ + return Transform3( + ( tfrm.getCol0() * scaleVec.getX( ) ), + ( tfrm.getCol1() * scaleVec.getY( ) ), + ( tfrm.getCol2() * scaleVec.getZ( ) ), + tfrm.getCol3() + ); +} + +inline const Transform3 prependScale( const Vector3 & scaleVec, const Transform3 & tfrm ) +{ + return Transform3( + mulPerElem( tfrm.getCol0(), scaleVec ), + mulPerElem( tfrm.getCol1(), scaleVec ), + mulPerElem( tfrm.getCol2(), scaleVec ), + mulPerElem( tfrm.getCol3(), scaleVec ) + ); +} + +inline const Transform3 Transform3::translation( const Vector3 & translateVec ) +{ + return Transform3( + Vector3::xAxis( ), + Vector3::yAxis( ), + Vector3::zAxis( ), + translateVec + ); +} + +inline const Transform3 select( const Transform3 & tfrm0, const Transform3 & tfrm1, bool select1 ) +{ + return Transform3( + select( tfrm0.getCol0(), tfrm1.getCol0(), select1 ), + select( tfrm0.getCol1(), tfrm1.getCol1(), select1 ), + select( tfrm0.getCol2(), tfrm1.getCol2(), select1 ), + select( tfrm0.getCol3(), tfrm1.getCol3(), select1 ) + ); +} + +#ifdef _VECTORMATH_DEBUG + +inline void print( const Transform3 & tfrm ) +{ + print( tfrm.getRow( 0 ) ); + print( tfrm.getRow( 1 ) ); + print( tfrm.getRow( 2 ) ); +} + +inline void print( const Transform3 & tfrm, const char * name ) +{ + printf("%s:\n", name); + print( tfrm ); +} + +#endif + +inline Quat::Quat( const Matrix3 & tfrm ) +{ + float trace, radicand, scale, xx, yx, zx, xy, yy, zy, xz, yz, zz, tmpx, tmpy, tmpz, tmpw, qx, qy, qz, qw; + int negTrace, ZgtX, ZgtY, YgtX; + int largestXorY, largestYorZ, largestZorX; + + xx = tfrm.getCol0().getX(); + yx = tfrm.getCol0().getY(); + zx = tfrm.getCol0().getZ(); + xy = tfrm.getCol1().getX(); + yy = tfrm.getCol1().getY(); + zy = tfrm.getCol1().getZ(); + xz = tfrm.getCol2().getX(); + yz = tfrm.getCol2().getY(); + zz = tfrm.getCol2().getZ(); + + trace = ( ( xx + yy ) + zz ); + + negTrace = ( trace < 0.0f ); + ZgtX = zz > xx; + ZgtY = zz > yy; + YgtX = yy > xx; + largestXorY = ( !ZgtX || !ZgtY ) && negTrace; + largestYorZ = ( YgtX || ZgtX ) && negTrace; + largestZorX = ( ZgtY || !YgtX ) && negTrace; + + if ( largestXorY ) + { + zz = -zz; + xy = -xy; + } + if ( largestYorZ ) + { + xx = -xx; + yz = -yz; + } + if ( largestZorX ) + { + yy = -yy; + zx = -zx; + } + + radicand = ( ( ( xx + yy ) + zz ) + 1.0f ); + scale = ( 0.5f * ( 1.0f / sqrtf( radicand ) ) ); + + tmpx = ( ( zy - yz ) * scale ); + tmpy = ( ( xz - zx ) * scale ); + tmpz = ( ( yx - xy ) * scale ); + tmpw = ( radicand * scale ); + qx = tmpx; + qy = tmpy; + qz = tmpz; + qw = tmpw; + + if ( largestXorY ) + { + qx = tmpw; + qy = tmpz; + qz = tmpy; + qw = tmpx; + } + if ( largestYorZ ) + { + tmpx = qx; + tmpz = qz; + qx = qy; + qy = tmpx; + qz = qw; + qw = tmpz; + } + + mX = qx; + mY = qy; + mZ = qz; + mW = qw; +} + +inline const Matrix3 outer( const Vector3 & tfrm0, const Vector3 & tfrm1 ) +{ + return Matrix3( + ( tfrm0 * tfrm1.getX( ) ), + ( tfrm0 * tfrm1.getY( ) ), + ( tfrm0 * tfrm1.getZ( ) ) + ); +} + +inline const Matrix4 outer( const Vector4 & tfrm0, const Vector4 & tfrm1 ) +{ + return Matrix4( + ( tfrm0 * tfrm1.getX( ) ), + ( tfrm0 * tfrm1.getY( ) ), + ( tfrm0 * tfrm1.getZ( ) ), + ( tfrm0 * tfrm1.getW( ) ) + ); +} + +inline const Vector3 rowMul( const Vector3 & vec, const Matrix3 & mat ) +{ + return Vector3( + ( ( ( vec.getX() * mat.getCol0().getX() ) + ( vec.getY() * mat.getCol0().getY() ) ) + ( vec.getZ() * mat.getCol0().getZ() ) ), + ( ( ( vec.getX() * mat.getCol1().getX() ) + ( vec.getY() * mat.getCol1().getY() ) ) + ( vec.getZ() * mat.getCol1().getZ() ) ), + ( ( ( vec.getX() * mat.getCol2().getX() ) + ( vec.getY() * mat.getCol2().getY() ) ) + ( vec.getZ() * mat.getCol2().getZ() ) ) + ); +} + +inline const Matrix3 crossMatrix( const Vector3 & vec ) +{ + return Matrix3( + Vector3( 0.0f, vec.getZ(), -vec.getY() ), + Vector3( -vec.getZ(), 0.0f, vec.getX() ), + Vector3( vec.getY(), -vec.getX(), 0.0f ) + ); +} + +inline const Matrix3 crossMatrixMul( const Vector3 & vec, const Matrix3 & mat ) +{ + return Matrix3( cross( vec, mat.getCol0() ), cross( vec, mat.getCol1() ), cross( vec, mat.getCol2() ) ); +} + +} // namespace Aos +} // namespace Vectormath + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/scalar/cpp/quat_aos.h b/Extras/vectormathlibrary/include/vectormath/scalar/cpp/quat_aos.h new file mode 100644 index 000000000..7f1e8822b --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/scalar/cpp/quat_aos.h @@ -0,0 +1,432 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_QUAT_AOS_CPP_H +#define _VECTORMATH_QUAT_AOS_CPP_H +//----------------------------------------------------------------------------- +// Definitions + +#ifndef _VECTORMATH_INTERNAL_FUNCTIONS +#define _VECTORMATH_INTERNAL_FUNCTIONS + +#endif + +namespace Vectormath { +namespace Aos { + +inline Quat::Quat( const Quat & quat ) +{ + mX = quat.mX; + mY = quat.mY; + mZ = quat.mZ; + mW = quat.mW; +} + +inline Quat::Quat( float _x, float _y, float _z, float _w ) +{ + mX = _x; + mY = _y; + mZ = _z; + mW = _w; +} + +inline Quat::Quat( const Vector3 & xyz, float _w ) +{ + this->setXYZ( xyz ); + this->setW( _w ); +} + +inline Quat::Quat( const Vector4 & vec ) +{ + mX = vec.getX(); + mY = vec.getY(); + mZ = vec.getZ(); + mW = vec.getW(); +} + +inline Quat::Quat( float scalar ) +{ + mX = scalar; + mY = scalar; + mZ = scalar; + mW = scalar; +} + +inline const Quat Quat::identity( ) +{ + return Quat( 0.0f, 0.0f, 0.0f, 1.0f ); +} + +inline const Quat lerp( float t, const Quat & quat0, const Quat & quat1 ) +{ + return ( quat0 + ( ( quat1 - quat0 ) * t ) ); +} + +inline const Quat slerp( float t, const Quat & unitQuat0, const Quat & unitQuat1 ) +{ + Quat start; + float recipSinAngle, scale0, scale1, cosAngle, angle; + cosAngle = dot( unitQuat0, unitQuat1 ); + if ( cosAngle < 0.0f ) { + cosAngle = -cosAngle; + start = ( -unitQuat0 ); + } else { + start = unitQuat0; + } + if ( cosAngle < _VECTORMATH_SLERP_TOL ) { + angle = acosf( cosAngle ); + recipSinAngle = ( 1.0f / sinf( angle ) ); + scale0 = ( sinf( ( ( 1.0f - t ) * angle ) ) * recipSinAngle ); + scale1 = ( sinf( ( t * angle ) ) * recipSinAngle ); + } else { + scale0 = ( 1.0f - t ); + scale1 = t; + } + return ( ( start * scale0 ) + ( unitQuat1 * scale1 ) ); +} + +inline const Quat squad( float t, const Quat & unitQuat0, const Quat & unitQuat1, const Quat & unitQuat2, const Quat & unitQuat3 ) +{ + Quat tmp0, tmp1; + tmp0 = slerp( t, unitQuat0, unitQuat3 ); + tmp1 = slerp( t, unitQuat1, unitQuat2 ); + return slerp( ( ( 2.0f * t ) * ( 1.0f - t ) ), tmp0, tmp1 ); +} + +inline Quat & Quat::operator =( const Quat & quat ) +{ + mX = quat.mX; + mY = quat.mY; + mZ = quat.mZ; + mW = quat.mW; + return *this; +} + +inline Quat & Quat::setXYZ( const Vector3 & vec ) +{ + mX = vec.getX(); + mY = vec.getY(); + mZ = vec.getZ(); + return *this; +} + +inline const Vector3 Quat::getXYZ( ) const +{ + return Vector3( mX, mY, mZ ); +} + +inline Quat & Quat::setX( float _x ) +{ + mX = _x; + return *this; +} + +inline float Quat::getX( ) const +{ + return mX; +} + +inline Quat & Quat::setY( float _y ) +{ + mY = _y; + return *this; +} + +inline float Quat::getY( ) const +{ + return mY; +} + +inline Quat & Quat::setZ( float _z ) +{ + mZ = _z; + return *this; +} + +inline float Quat::getZ( ) const +{ + return mZ; +} + +inline Quat & Quat::setW( float _w ) +{ + mW = _w; + return *this; +} + +inline float Quat::getW( ) const +{ + return mW; +} + +inline Quat & Quat::setElem( int idx, float value ) +{ + *(&mX + idx) = value; + return *this; +} + +inline float Quat::getElem( int idx ) const +{ + return *(&mX + idx); +} + +inline float & Quat::operator []( int idx ) +{ + return *(&mX + idx); +} + +inline float Quat::operator []( int idx ) const +{ + return *(&mX + idx); +} + +inline const Quat Quat::operator +( const Quat & quat ) const +{ + return Quat( + ( mX + quat.mX ), + ( mY + quat.mY ), + ( mZ + quat.mZ ), + ( mW + quat.mW ) + ); +} + +inline const Quat Quat::operator -( const Quat & quat ) const +{ + return Quat( + ( mX - quat.mX ), + ( mY - quat.mY ), + ( mZ - quat.mZ ), + ( mW - quat.mW ) + ); +} + +inline const Quat Quat::operator *( float scalar ) const +{ + return Quat( + ( mX * scalar ), + ( mY * scalar ), + ( mZ * scalar ), + ( mW * scalar ) + ); +} + +inline Quat & Quat::operator +=( const Quat & quat ) +{ + *this = *this + quat; + return *this; +} + +inline Quat & Quat::operator -=( const Quat & quat ) +{ + *this = *this - quat; + return *this; +} + +inline Quat & Quat::operator *=( float scalar ) +{ + *this = *this * scalar; + return *this; +} + +inline const Quat Quat::operator /( float scalar ) const +{ + return Quat( + ( mX / scalar ), + ( mY / scalar ), + ( mZ / scalar ), + ( mW / scalar ) + ); +} + +inline Quat & Quat::operator /=( float scalar ) +{ + *this = *this / scalar; + return *this; +} + +inline const Quat Quat::operator -( ) const +{ + return Quat( + -mX, + -mY, + -mZ, + -mW + ); +} + +inline const Quat operator *( float scalar, const Quat & quat ) +{ + return quat * scalar; +} + +inline float dot( const Quat & quat0, const Quat & quat1 ) +{ + float result; + result = ( quat0.getX() * quat1.getX() ); + result = ( result + ( quat0.getY() * quat1.getY() ) ); + result = ( result + ( quat0.getZ() * quat1.getZ() ) ); + result = ( result + ( quat0.getW() * quat1.getW() ) ); + return result; +} + +inline float norm( const Quat & quat ) +{ + float result; + result = ( quat.getX() * quat.getX() ); + result = ( result + ( quat.getY() * quat.getY() ) ); + result = ( result + ( quat.getZ() * quat.getZ() ) ); + result = ( result + ( quat.getW() * quat.getW() ) ); + return result; +} + +inline float length( const Quat & quat ) +{ + return sqrtf( norm( quat ) ); +} + +inline const Quat normalize( const Quat & quat ) +{ + float lenSqr, lenInv; + lenSqr = norm( quat ); + lenInv = ( 1.0f / sqrtf( lenSqr ) ); + return Quat( + ( quat.getX() * lenInv ), + ( quat.getY() * lenInv ), + ( quat.getZ() * lenInv ), + ( quat.getW() * lenInv ) + ); +} + +inline const Quat Quat::rotation( const Vector3 & unitVec0, const Vector3 & unitVec1 ) +{ + float cosHalfAngleX2, recipCosHalfAngleX2; + cosHalfAngleX2 = sqrtf( ( 2.0f * ( 1.0f + dot( unitVec0, unitVec1 ) ) ) ); + recipCosHalfAngleX2 = ( 1.0f / cosHalfAngleX2 ); + return Quat( ( cross( unitVec0, unitVec1 ) * recipCosHalfAngleX2 ), ( cosHalfAngleX2 * 0.5f ) ); +} + +inline const Quat Quat::rotation( float radians, const Vector3 & unitVec ) +{ + float s, c, angle; + angle = ( radians * 0.5f ); + s = sinf( angle ); + c = cosf( angle ); + return Quat( ( unitVec * s ), c ); +} + +inline const Quat Quat::rotationX( float radians ) +{ + float s, c, angle; + angle = ( radians * 0.5f ); + s = sinf( angle ); + c = cosf( angle ); + return Quat( s, 0.0f, 0.0f, c ); +} + +inline const Quat Quat::rotationY( float radians ) +{ + float s, c, angle; + angle = ( radians * 0.5f ); + s = sinf( angle ); + c = cosf( angle ); + return Quat( 0.0f, s, 0.0f, c ); +} + +inline const Quat Quat::rotationZ( float radians ) +{ + float s, c, angle; + angle = ( radians * 0.5f ); + s = sinf( angle ); + c = cosf( angle ); + return Quat( 0.0f, 0.0f, s, c ); +} + +inline const Quat Quat::operator *( const Quat & quat ) const +{ + return Quat( + ( ( ( ( mW * quat.mX ) + ( mX * quat.mW ) ) + ( mY * quat.mZ ) ) - ( mZ * quat.mY ) ), + ( ( ( ( mW * quat.mY ) + ( mY * quat.mW ) ) + ( mZ * quat.mX ) ) - ( mX * quat.mZ ) ), + ( ( ( ( mW * quat.mZ ) + ( mZ * quat.mW ) ) + ( mX * quat.mY ) ) - ( mY * quat.mX ) ), + ( ( ( ( mW * quat.mW ) - ( mX * quat.mX ) ) - ( mY * quat.mY ) ) - ( mZ * quat.mZ ) ) + ); +} + +inline Quat & Quat::operator *=( const Quat & quat ) +{ + *this = *this * quat; + return *this; +} + +inline const Vector3 rotate( const Quat & quat, const Vector3 & vec ) +{ + float tmpX, tmpY, tmpZ, tmpW; + tmpX = ( ( ( quat.getW() * vec.getX() ) + ( quat.getY() * vec.getZ() ) ) - ( quat.getZ() * vec.getY() ) ); + tmpY = ( ( ( quat.getW() * vec.getY() ) + ( quat.getZ() * vec.getX() ) ) - ( quat.getX() * vec.getZ() ) ); + tmpZ = ( ( ( quat.getW() * vec.getZ() ) + ( quat.getX() * vec.getY() ) ) - ( quat.getY() * vec.getX() ) ); + tmpW = ( ( ( quat.getX() * vec.getX() ) + ( quat.getY() * vec.getY() ) ) + ( quat.getZ() * vec.getZ() ) ); + return Vector3( + ( ( ( ( tmpW * quat.getX() ) + ( tmpX * quat.getW() ) ) - ( tmpY * quat.getZ() ) ) + ( tmpZ * quat.getY() ) ), + ( ( ( ( tmpW * quat.getY() ) + ( tmpY * quat.getW() ) ) - ( tmpZ * quat.getX() ) ) + ( tmpX * quat.getZ() ) ), + ( ( ( ( tmpW * quat.getZ() ) + ( tmpZ * quat.getW() ) ) - ( tmpX * quat.getY() ) ) + ( tmpY * quat.getX() ) ) + ); +} + +inline const Quat conj( const Quat & quat ) +{ + return Quat( -quat.getX(), -quat.getY(), -quat.getZ(), quat.getW() ); +} + +inline const Quat select( const Quat & quat0, const Quat & quat1, bool select1 ) +{ + return Quat( + ( select1 )? quat1.getX() : quat0.getX(), + ( select1 )? quat1.getY() : quat0.getY(), + ( select1 )? quat1.getZ() : quat0.getZ(), + ( select1 )? quat1.getW() : quat0.getW() + ); +} + +#ifdef _VECTORMATH_DEBUG + +inline void print( const Quat & quat ) +{ + printf( "( %f %f %f %f )\n", quat.getX(), quat.getY(), quat.getZ(), quat.getW() ); +} + +inline void print( const Quat & quat, const char * name ) +{ + printf( "%s: ( %f %f %f %f )\n", name, quat.getX(), quat.getY(), quat.getZ(), quat.getW() ); +} + +#endif + +} // namespace Aos +} // namespace Vectormath + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/scalar/cpp/vec_aos.h b/Extras/vectormathlibrary/include/vectormath/scalar/cpp/vec_aos.h new file mode 100644 index 000000000..a1a75333a --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/scalar/cpp/vec_aos.h @@ -0,0 +1,1173 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_VEC_AOS_CPP_H +#define _VECTORMATH_VEC_AOS_CPP_H +//----------------------------------------------------------------------------- +// Constants + +#define _VECTORMATH_SLERP_TOL 0.999f + +//----------------------------------------------------------------------------- +// Definitions + +#ifndef _VECTORMATH_INTERNAL_FUNCTIONS +#define _VECTORMATH_INTERNAL_FUNCTIONS + +#endif + +namespace Vectormath { +namespace Aos { + +inline Vector3::Vector3( const Vector3 & vec ) +{ + mX = vec.mX; + mY = vec.mY; + mZ = vec.mZ; +} + +inline Vector3::Vector3( float _x, float _y, float _z ) +{ + mX = _x; + mY = _y; + mZ = _z; +} + +inline Vector3::Vector3( const Point3 & pnt ) +{ + mX = pnt.getX(); + mY = pnt.getY(); + mZ = pnt.getZ(); +} + +inline Vector3::Vector3( float scalar ) +{ + mX = scalar; + mY = scalar; + mZ = scalar; +} + +inline const Vector3 Vector3::xAxis( ) +{ + return Vector3( 1.0f, 0.0f, 0.0f ); +} + +inline const Vector3 Vector3::yAxis( ) +{ + return Vector3( 0.0f, 1.0f, 0.0f ); +} + +inline const Vector3 Vector3::zAxis( ) +{ + return Vector3( 0.0f, 0.0f, 1.0f ); +} + +inline const Vector3 lerp( float t, const Vector3 & vec0, const Vector3 & vec1 ) +{ + return ( vec0 + ( ( vec1 - vec0 ) * t ) ); +} + +inline const Vector3 slerp( float t, const Vector3 & unitVec0, const Vector3 & unitVec1 ) +{ + float recipSinAngle, scale0, scale1, cosAngle, angle; + cosAngle = dot( unitVec0, unitVec1 ); + if ( cosAngle < _VECTORMATH_SLERP_TOL ) { + angle = acosf( cosAngle ); + recipSinAngle = ( 1.0f / sinf( angle ) ); + scale0 = ( sinf( ( ( 1.0f - t ) * angle ) ) * recipSinAngle ); + scale1 = ( sinf( ( t * angle ) ) * recipSinAngle ); + } else { + scale0 = ( 1.0f - t ); + scale1 = t; + } + return ( ( unitVec0 * scale0 ) + ( unitVec1 * scale1 ) ); +} + +inline Vector3 & Vector3::operator =( const Vector3 & vec ) +{ + mX = vec.mX; + mY = vec.mY; + mZ = vec.mZ; + return *this; +} + +inline Vector3 & Vector3::setX( float _x ) +{ + mX = _x; + return *this; +} + +inline float Vector3::getX( ) const +{ + return mX; +} + +inline Vector3 & Vector3::setY( float _y ) +{ + mY = _y; + return *this; +} + +inline float Vector3::getY( ) const +{ + return mY; +} + +inline Vector3 & Vector3::setZ( float _z ) +{ + mZ = _z; + return *this; +} + +inline float Vector3::getZ( ) const +{ + return mZ; +} + +inline Vector3 & Vector3::setElem( int idx, float value ) +{ + *(&mX + idx) = value; + return *this; +} + +inline float Vector3::getElem( int idx ) const +{ + return *(&mX + idx); +} + +inline float & Vector3::operator []( int idx ) +{ + return *(&mX + idx); +} + +inline float Vector3::operator []( int idx ) const +{ + return *(&mX + idx); +} + +inline const Vector3 Vector3::operator +( const Vector3 & vec ) const +{ + return Vector3( + ( mX + vec.mX ), + ( mY + vec.mY ), + ( mZ + vec.mZ ) + ); +} + +inline const Vector3 Vector3::operator -( const Vector3 & vec ) const +{ + return Vector3( + ( mX - vec.mX ), + ( mY - vec.mY ), + ( mZ - vec.mZ ) + ); +} + +inline const Point3 Vector3::operator +( const Point3 & pnt ) const +{ + return Point3( + ( mX + pnt.getX() ), + ( mY + pnt.getY() ), + ( mZ + pnt.getZ() ) + ); +} + +inline const Vector3 Vector3::operator *( float scalar ) const +{ + return Vector3( + ( mX * scalar ), + ( mY * scalar ), + ( mZ * scalar ) + ); +} + +inline Vector3 & Vector3::operator +=( const Vector3 & vec ) +{ + *this = *this + vec; + return *this; +} + +inline Vector3 & Vector3::operator -=( const Vector3 & vec ) +{ + *this = *this - vec; + return *this; +} + +inline Vector3 & Vector3::operator *=( float scalar ) +{ + *this = *this * scalar; + return *this; +} + +inline const Vector3 Vector3::operator /( float scalar ) const +{ + return Vector3( + ( mX / scalar ), + ( mY / scalar ), + ( mZ / scalar ) + ); +} + +inline Vector3 & Vector3::operator /=( float scalar ) +{ + *this = *this / scalar; + return *this; +} + +inline const Vector3 Vector3::operator -( ) const +{ + return Vector3( + -mX, + -mY, + -mZ + ); +} + +inline const Vector3 operator *( float scalar, const Vector3 & vec ) +{ + return vec * scalar; +} + +inline const Vector3 mulPerElem( const Vector3 & vec0, const Vector3 & vec1 ) +{ + return Vector3( + ( vec0.getX() * vec1.getX() ), + ( vec0.getY() * vec1.getY() ), + ( vec0.getZ() * vec1.getZ() ) + ); +} + +inline const Vector3 divPerElem( const Vector3 & vec0, const Vector3 & vec1 ) +{ + return Vector3( + ( vec0.getX() / vec1.getX() ), + ( vec0.getY() / vec1.getY() ), + ( vec0.getZ() / vec1.getZ() ) + ); +} + +inline const Vector3 recipPerElem( const Vector3 & vec ) +{ + return Vector3( + ( 1.0f / vec.getX() ), + ( 1.0f / vec.getY() ), + ( 1.0f / vec.getZ() ) + ); +} + +inline const Vector3 sqrtPerElem( const Vector3 & vec ) +{ + return Vector3( + sqrtf( vec.getX() ), + sqrtf( vec.getY() ), + sqrtf( vec.getZ() ) + ); +} + +inline const Vector3 rsqrtPerElem( const Vector3 & vec ) +{ + return Vector3( + ( 1.0f / sqrtf( vec.getX() ) ), + ( 1.0f / sqrtf( vec.getY() ) ), + ( 1.0f / sqrtf( vec.getZ() ) ) + ); +} + +inline const Vector3 absPerElem( const Vector3 & vec ) +{ + return Vector3( + fabsf( vec.getX() ), + fabsf( vec.getY() ), + fabsf( vec.getZ() ) + ); +} + +inline const Vector3 copySignPerElem( const Vector3 & vec0, const Vector3 & vec1 ) +{ + return Vector3( + ( vec1.getX() < 0.0f )? -fabsf( vec0.getX() ) : fabsf( vec0.getX() ), + ( vec1.getY() < 0.0f )? -fabsf( vec0.getY() ) : fabsf( vec0.getY() ), + ( vec1.getZ() < 0.0f )? -fabsf( vec0.getZ() ) : fabsf( vec0.getZ() ) + ); +} + +inline const Vector3 maxPerElem( const Vector3 & vec0, const Vector3 & vec1 ) +{ + return Vector3( + (vec0.getX() > vec1.getX())? vec0.getX() : vec1.getX(), + (vec0.getY() > vec1.getY())? vec0.getY() : vec1.getY(), + (vec0.getZ() > vec1.getZ())? vec0.getZ() : vec1.getZ() + ); +} + +inline float maxElem( const Vector3 & vec ) +{ + float result; + result = (vec.getX() > vec.getY())? vec.getX() : vec.getY(); + result = (vec.getZ() > result)? vec.getZ() : result; + return result; +} + +inline const Vector3 minPerElem( const Vector3 & vec0, const Vector3 & vec1 ) +{ + return Vector3( + (vec0.getX() < vec1.getX())? vec0.getX() : vec1.getX(), + (vec0.getY() < vec1.getY())? vec0.getY() : vec1.getY(), + (vec0.getZ() < vec1.getZ())? vec0.getZ() : vec1.getZ() + ); +} + +inline float minElem( const Vector3 & vec ) +{ + float result; + result = (vec.getX() < vec.getY())? vec.getX() : vec.getY(); + result = (vec.getZ() < result)? vec.getZ() : result; + return result; +} + +inline float sum( const Vector3 & vec ) +{ + float result; + result = ( vec.getX() + vec.getY() ); + result = ( result + vec.getZ() ); + return result; +} + +inline float dot( const Vector3 & vec0, const Vector3 & vec1 ) +{ + float result; + result = ( vec0.getX() * vec1.getX() ); + result = ( result + ( vec0.getY() * vec1.getY() ) ); + result = ( result + ( vec0.getZ() * vec1.getZ() ) ); + return result; +} + +inline float lengthSqr( const Vector3 & vec ) +{ + float result; + result = ( vec.getX() * vec.getX() ); + result = ( result + ( vec.getY() * vec.getY() ) ); + result = ( result + ( vec.getZ() * vec.getZ() ) ); + return result; +} + +inline float length( const Vector3 & vec ) +{ + return sqrtf( lengthSqr( vec ) ); +} + +inline const Vector3 normalize( const Vector3 & vec ) +{ + float lenSqr, lenInv; + lenSqr = lengthSqr( vec ); + lenInv = ( 1.0f / sqrtf( lenSqr ) ); + return Vector3( + ( vec.getX() * lenInv ), + ( vec.getY() * lenInv ), + ( vec.getZ() * lenInv ) + ); +} + +inline const Vector3 cross( const Vector3 & vec0, const Vector3 & vec1 ) +{ + return Vector3( + ( ( vec0.getY() * vec1.getZ() ) - ( vec0.getZ() * vec1.getY() ) ), + ( ( vec0.getZ() * vec1.getX() ) - ( vec0.getX() * vec1.getZ() ) ), + ( ( vec0.getX() * vec1.getY() ) - ( vec0.getY() * vec1.getX() ) ) + ); +} + +inline const Vector3 select( const Vector3 & vec0, const Vector3 & vec1, bool select1 ) +{ + return Vector3( + ( select1 )? vec1.getX() : vec0.getX(), + ( select1 )? vec1.getY() : vec0.getY(), + ( select1 )? vec1.getZ() : vec0.getZ() + ); +} + +#ifdef _VECTORMATH_DEBUG + +inline void print( const Vector3 & vec ) +{ + printf( "( %f %f %f )\n", vec.getX(), vec.getY(), vec.getZ() ); +} + +inline void print( const Vector3 & vec, const char * name ) +{ + printf( "%s: ( %f %f %f )\n", name, vec.getX(), vec.getY(), vec.getZ() ); +} + +#endif + +inline Vector4::Vector4( const Vector4 & vec ) +{ + mX = vec.mX; + mY = vec.mY; + mZ = vec.mZ; + mW = vec.mW; +} + +inline Vector4::Vector4( float _x, float _y, float _z, float _w ) +{ + mX = _x; + mY = _y; + mZ = _z; + mW = _w; +} + +inline Vector4::Vector4( const Vector3 & xyz, float _w ) +{ + this->setXYZ( xyz ); + this->setW( _w ); +} + +inline Vector4::Vector4( const Vector3 & vec ) +{ + mX = vec.getX(); + mY = vec.getY(); + mZ = vec.getZ(); + mW = 0.0f; +} + +inline Vector4::Vector4( const Point3 & pnt ) +{ + mX = pnt.getX(); + mY = pnt.getY(); + mZ = pnt.getZ(); + mW = 1.0f; +} + +inline Vector4::Vector4( const Quat & quat ) +{ + mX = quat.getX(); + mY = quat.getY(); + mZ = quat.getZ(); + mW = quat.getW(); +} + +inline Vector4::Vector4( float scalar ) +{ + mX = scalar; + mY = scalar; + mZ = scalar; + mW = scalar; +} + +inline const Vector4 Vector4::xAxis( ) +{ + return Vector4( 1.0f, 0.0f, 0.0f, 0.0f ); +} + +inline const Vector4 Vector4::yAxis( ) +{ + return Vector4( 0.0f, 1.0f, 0.0f, 0.0f ); +} + +inline const Vector4 Vector4::zAxis( ) +{ + return Vector4( 0.0f, 0.0f, 1.0f, 0.0f ); +} + +inline const Vector4 Vector4::wAxis( ) +{ + return Vector4( 0.0f, 0.0f, 0.0f, 1.0f ); +} + +inline const Vector4 lerp( float t, const Vector4 & vec0, const Vector4 & vec1 ) +{ + return ( vec0 + ( ( vec1 - vec0 ) * t ) ); +} + +inline const Vector4 slerp( float t, const Vector4 & unitVec0, const Vector4 & unitVec1 ) +{ + float recipSinAngle, scale0, scale1, cosAngle, angle; + cosAngle = dot( unitVec0, unitVec1 ); + if ( cosAngle < _VECTORMATH_SLERP_TOL ) { + angle = acosf( cosAngle ); + recipSinAngle = ( 1.0f / sinf( angle ) ); + scale0 = ( sinf( ( ( 1.0f - t ) * angle ) ) * recipSinAngle ); + scale1 = ( sinf( ( t * angle ) ) * recipSinAngle ); + } else { + scale0 = ( 1.0f - t ); + scale1 = t; + } + return ( ( unitVec0 * scale0 ) + ( unitVec1 * scale1 ) ); +} + +inline Vector4 & Vector4::operator =( const Vector4 & vec ) +{ + mX = vec.mX; + mY = vec.mY; + mZ = vec.mZ; + mW = vec.mW; + return *this; +} + +inline Vector4 & Vector4::setXYZ( const Vector3 & vec ) +{ + mX = vec.getX(); + mY = vec.getY(); + mZ = vec.getZ(); + return *this; +} + +inline const Vector3 Vector4::getXYZ( ) const +{ + return Vector3( mX, mY, mZ ); +} + +inline Vector4 & Vector4::setX( float _x ) +{ + mX = _x; + return *this; +} + +inline float Vector4::getX( ) const +{ + return mX; +} + +inline Vector4 & Vector4::setY( float _y ) +{ + mY = _y; + return *this; +} + +inline float Vector4::getY( ) const +{ + return mY; +} + +inline Vector4 & Vector4::setZ( float _z ) +{ + mZ = _z; + return *this; +} + +inline float Vector4::getZ( ) const +{ + return mZ; +} + +inline Vector4 & Vector4::setW( float _w ) +{ + mW = _w; + return *this; +} + +inline float Vector4::getW( ) const +{ + return mW; +} + +inline Vector4 & Vector4::setElem( int idx, float value ) +{ + *(&mX + idx) = value; + return *this; +} + +inline float Vector4::getElem( int idx ) const +{ + return *(&mX + idx); +} + +inline float & Vector4::operator []( int idx ) +{ + return *(&mX + idx); +} + +inline float Vector4::operator []( int idx ) const +{ + return *(&mX + idx); +} + +inline const Vector4 Vector4::operator +( const Vector4 & vec ) const +{ + return Vector4( + ( mX + vec.mX ), + ( mY + vec.mY ), + ( mZ + vec.mZ ), + ( mW + vec.mW ) + ); +} + +inline const Vector4 Vector4::operator -( const Vector4 & vec ) const +{ + return Vector4( + ( mX - vec.mX ), + ( mY - vec.mY ), + ( mZ - vec.mZ ), + ( mW - vec.mW ) + ); +} + +inline const Vector4 Vector4::operator *( float scalar ) const +{ + return Vector4( + ( mX * scalar ), + ( mY * scalar ), + ( mZ * scalar ), + ( mW * scalar ) + ); +} + +inline Vector4 & Vector4::operator +=( const Vector4 & vec ) +{ + *this = *this + vec; + return *this; +} + +inline Vector4 & Vector4::operator -=( const Vector4 & vec ) +{ + *this = *this - vec; + return *this; +} + +inline Vector4 & Vector4::operator *=( float scalar ) +{ + *this = *this * scalar; + return *this; +} + +inline const Vector4 Vector4::operator /( float scalar ) const +{ + return Vector4( + ( mX / scalar ), + ( mY / scalar ), + ( mZ / scalar ), + ( mW / scalar ) + ); +} + +inline Vector4 & Vector4::operator /=( float scalar ) +{ + *this = *this / scalar; + return *this; +} + +inline const Vector4 Vector4::operator -( ) const +{ + return Vector4( + -mX, + -mY, + -mZ, + -mW + ); +} + +inline const Vector4 operator *( float scalar, const Vector4 & vec ) +{ + return vec * scalar; +} + +inline const Vector4 mulPerElem( const Vector4 & vec0, const Vector4 & vec1 ) +{ + return Vector4( + ( vec0.getX() * vec1.getX() ), + ( vec0.getY() * vec1.getY() ), + ( vec0.getZ() * vec1.getZ() ), + ( vec0.getW() * vec1.getW() ) + ); +} + +inline const Vector4 divPerElem( const Vector4 & vec0, const Vector4 & vec1 ) +{ + return Vector4( + ( vec0.getX() / vec1.getX() ), + ( vec0.getY() / vec1.getY() ), + ( vec0.getZ() / vec1.getZ() ), + ( vec0.getW() / vec1.getW() ) + ); +} + +inline const Vector4 recipPerElem( const Vector4 & vec ) +{ + return Vector4( + ( 1.0f / vec.getX() ), + ( 1.0f / vec.getY() ), + ( 1.0f / vec.getZ() ), + ( 1.0f / vec.getW() ) + ); +} + +inline const Vector4 sqrtPerElem( const Vector4 & vec ) +{ + return Vector4( + sqrtf( vec.getX() ), + sqrtf( vec.getY() ), + sqrtf( vec.getZ() ), + sqrtf( vec.getW() ) + ); +} + +inline const Vector4 rsqrtPerElem( const Vector4 & vec ) +{ + return Vector4( + ( 1.0f / sqrtf( vec.getX() ) ), + ( 1.0f / sqrtf( vec.getY() ) ), + ( 1.0f / sqrtf( vec.getZ() ) ), + ( 1.0f / sqrtf( vec.getW() ) ) + ); +} + +inline const Vector4 absPerElem( const Vector4 & vec ) +{ + return Vector4( + fabsf( vec.getX() ), + fabsf( vec.getY() ), + fabsf( vec.getZ() ), + fabsf( vec.getW() ) + ); +} + +inline const Vector4 copySignPerElem( const Vector4 & vec0, const Vector4 & vec1 ) +{ + return Vector4( + ( vec1.getX() < 0.0f )? -fabsf( vec0.getX() ) : fabsf( vec0.getX() ), + ( vec1.getY() < 0.0f )? -fabsf( vec0.getY() ) : fabsf( vec0.getY() ), + ( vec1.getZ() < 0.0f )? -fabsf( vec0.getZ() ) : fabsf( vec0.getZ() ), + ( vec1.getW() < 0.0f )? -fabsf( vec0.getW() ) : fabsf( vec0.getW() ) + ); +} + +inline const Vector4 maxPerElem( const Vector4 & vec0, const Vector4 & vec1 ) +{ + return Vector4( + (vec0.getX() > vec1.getX())? vec0.getX() : vec1.getX(), + (vec0.getY() > vec1.getY())? vec0.getY() : vec1.getY(), + (vec0.getZ() > vec1.getZ())? vec0.getZ() : vec1.getZ(), + (vec0.getW() > vec1.getW())? vec0.getW() : vec1.getW() + ); +} + +inline float maxElem( const Vector4 & vec ) +{ + float result; + result = (vec.getX() > vec.getY())? vec.getX() : vec.getY(); + result = (vec.getZ() > result)? vec.getZ() : result; + result = (vec.getW() > result)? vec.getW() : result; + return result; +} + +inline const Vector4 minPerElem( const Vector4 & vec0, const Vector4 & vec1 ) +{ + return Vector4( + (vec0.getX() < vec1.getX())? vec0.getX() : vec1.getX(), + (vec0.getY() < vec1.getY())? vec0.getY() : vec1.getY(), + (vec0.getZ() < vec1.getZ())? vec0.getZ() : vec1.getZ(), + (vec0.getW() < vec1.getW())? vec0.getW() : vec1.getW() + ); +} + +inline float minElem( const Vector4 & vec ) +{ + float result; + result = (vec.getX() < vec.getY())? vec.getX() : vec.getY(); + result = (vec.getZ() < result)? vec.getZ() : result; + result = (vec.getW() < result)? vec.getW() : result; + return result; +} + +inline float sum( const Vector4 & vec ) +{ + float result; + result = ( vec.getX() + vec.getY() ); + result = ( result + vec.getZ() ); + result = ( result + vec.getW() ); + return result; +} + +inline float dot( const Vector4 & vec0, const Vector4 & vec1 ) +{ + float result; + result = ( vec0.getX() * vec1.getX() ); + result = ( result + ( vec0.getY() * vec1.getY() ) ); + result = ( result + ( vec0.getZ() * vec1.getZ() ) ); + result = ( result + ( vec0.getW() * vec1.getW() ) ); + return result; +} + +inline float lengthSqr( const Vector4 & vec ) +{ + float result; + result = ( vec.getX() * vec.getX() ); + result = ( result + ( vec.getY() * vec.getY() ) ); + result = ( result + ( vec.getZ() * vec.getZ() ) ); + result = ( result + ( vec.getW() * vec.getW() ) ); + return result; +} + +inline float length( const Vector4 & vec ) +{ + return sqrtf( lengthSqr( vec ) ); +} + +inline const Vector4 normalize( const Vector4 & vec ) +{ + float lenSqr, lenInv; + lenSqr = lengthSqr( vec ); + lenInv = ( 1.0f / sqrtf( lenSqr ) ); + return Vector4( + ( vec.getX() * lenInv ), + ( vec.getY() * lenInv ), + ( vec.getZ() * lenInv ), + ( vec.getW() * lenInv ) + ); +} + +inline const Vector4 select( const Vector4 & vec0, const Vector4 & vec1, bool select1 ) +{ + return Vector4( + ( select1 )? vec1.getX() : vec0.getX(), + ( select1 )? vec1.getY() : vec0.getY(), + ( select1 )? vec1.getZ() : vec0.getZ(), + ( select1 )? vec1.getW() : vec0.getW() + ); +} + +#ifdef _VECTORMATH_DEBUG + +inline void print( const Vector4 & vec ) +{ + printf( "( %f %f %f %f )\n", vec.getX(), vec.getY(), vec.getZ(), vec.getW() ); +} + +inline void print( const Vector4 & vec, const char * name ) +{ + printf( "%s: ( %f %f %f %f )\n", name, vec.getX(), vec.getY(), vec.getZ(), vec.getW() ); +} + +#endif + +inline Point3::Point3( const Point3 & pnt ) +{ + mX = pnt.mX; + mY = pnt.mY; + mZ = pnt.mZ; +} + +inline Point3::Point3( float _x, float _y, float _z ) +{ + mX = _x; + mY = _y; + mZ = _z; +} + +inline Point3::Point3( const Vector3 & vec ) +{ + mX = vec.getX(); + mY = vec.getY(); + mZ = vec.getZ(); +} + +inline Point3::Point3( float scalar ) +{ + mX = scalar; + mY = scalar; + mZ = scalar; +} + +inline const Point3 lerp( float t, const Point3 & pnt0, const Point3 & pnt1 ) +{ + return ( pnt0 + ( ( pnt1 - pnt0 ) * t ) ); +} + +inline Point3 & Point3::operator =( const Point3 & pnt ) +{ + mX = pnt.mX; + mY = pnt.mY; + mZ = pnt.mZ; + return *this; +} + +inline Point3 & Point3::setX( float _x ) +{ + mX = _x; + return *this; +} + +inline float Point3::getX( ) const +{ + return mX; +} + +inline Point3 & Point3::setY( float _y ) +{ + mY = _y; + return *this; +} + +inline float Point3::getY( ) const +{ + return mY; +} + +inline Point3 & Point3::setZ( float _z ) +{ + mZ = _z; + return *this; +} + +inline float Point3::getZ( ) const +{ + return mZ; +} + +inline Point3 & Point3::setElem( int idx, float value ) +{ + *(&mX + idx) = value; + return *this; +} + +inline float Point3::getElem( int idx ) const +{ + return *(&mX + idx); +} + +inline float & Point3::operator []( int idx ) +{ + return *(&mX + idx); +} + +inline float Point3::operator []( int idx ) const +{ + return *(&mX + idx); +} + +inline const Vector3 Point3::operator -( const Point3 & pnt ) const +{ + return Vector3( + ( mX - pnt.mX ), + ( mY - pnt.mY ), + ( mZ - pnt.mZ ) + ); +} + +inline const Point3 Point3::operator +( const Vector3 & vec ) const +{ + return Point3( + ( mX + vec.getX() ), + ( mY + vec.getY() ), + ( mZ + vec.getZ() ) + ); +} + +inline const Point3 Point3::operator -( const Vector3 & vec ) const +{ + return Point3( + ( mX - vec.getX() ), + ( mY - vec.getY() ), + ( mZ - vec.getZ() ) + ); +} + +inline Point3 & Point3::operator +=( const Vector3 & vec ) +{ + *this = *this + vec; + return *this; +} + +inline Point3 & Point3::operator -=( const Vector3 & vec ) +{ + *this = *this - vec; + return *this; +} + +inline const Point3 mulPerElem( const Point3 & pnt0, const Point3 & pnt1 ) +{ + return Point3( + ( pnt0.getX() * pnt1.getX() ), + ( pnt0.getY() * pnt1.getY() ), + ( pnt0.getZ() * pnt1.getZ() ) + ); +} + +inline const Point3 divPerElem( const Point3 & pnt0, const Point3 & pnt1 ) +{ + return Point3( + ( pnt0.getX() / pnt1.getX() ), + ( pnt0.getY() / pnt1.getY() ), + ( pnt0.getZ() / pnt1.getZ() ) + ); +} + +inline const Point3 recipPerElem( const Point3 & pnt ) +{ + return Point3( + ( 1.0f / pnt.getX() ), + ( 1.0f / pnt.getY() ), + ( 1.0f / pnt.getZ() ) + ); +} + +inline const Point3 sqrtPerElem( const Point3 & pnt ) +{ + return Point3( + sqrtf( pnt.getX() ), + sqrtf( pnt.getY() ), + sqrtf( pnt.getZ() ) + ); +} + +inline const Point3 rsqrtPerElem( const Point3 & pnt ) +{ + return Point3( + ( 1.0f / sqrtf( pnt.getX() ) ), + ( 1.0f / sqrtf( pnt.getY() ) ), + ( 1.0f / sqrtf( pnt.getZ() ) ) + ); +} + +inline const Point3 absPerElem( const Point3 & pnt ) +{ + return Point3( + fabsf( pnt.getX() ), + fabsf( pnt.getY() ), + fabsf( pnt.getZ() ) + ); +} + +inline const Point3 copySignPerElem( const Point3 & pnt0, const Point3 & pnt1 ) +{ + return Point3( + ( pnt1.getX() < 0.0f )? -fabsf( pnt0.getX() ) : fabsf( pnt0.getX() ), + ( pnt1.getY() < 0.0f )? -fabsf( pnt0.getY() ) : fabsf( pnt0.getY() ), + ( pnt1.getZ() < 0.0f )? -fabsf( pnt0.getZ() ) : fabsf( pnt0.getZ() ) + ); +} + +inline const Point3 maxPerElem( const Point3 & pnt0, const Point3 & pnt1 ) +{ + return Point3( + (pnt0.getX() > pnt1.getX())? pnt0.getX() : pnt1.getX(), + (pnt0.getY() > pnt1.getY())? pnt0.getY() : pnt1.getY(), + (pnt0.getZ() > pnt1.getZ())? pnt0.getZ() : pnt1.getZ() + ); +} + +inline float maxElem( const Point3 & pnt ) +{ + float result; + result = (pnt.getX() > pnt.getY())? pnt.getX() : pnt.getY(); + result = (pnt.getZ() > result)? pnt.getZ() : result; + return result; +} + +inline const Point3 minPerElem( const Point3 & pnt0, const Point3 & pnt1 ) +{ + return Point3( + (pnt0.getX() < pnt1.getX())? pnt0.getX() : pnt1.getX(), + (pnt0.getY() < pnt1.getY())? pnt0.getY() : pnt1.getY(), + (pnt0.getZ() < pnt1.getZ())? pnt0.getZ() : pnt1.getZ() + ); +} + +inline float minElem( const Point3 & pnt ) +{ + float result; + result = (pnt.getX() < pnt.getY())? pnt.getX() : pnt.getY(); + result = (pnt.getZ() < result)? pnt.getZ() : result; + return result; +} + +inline float sum( const Point3 & pnt ) +{ + float result; + result = ( pnt.getX() + pnt.getY() ); + result = ( result + pnt.getZ() ); + return result; +} + +inline const Point3 scale( const Point3 & pnt, float scaleVal ) +{ + return mulPerElem( pnt, Point3( scaleVal ) ); +} + +inline const Point3 scale( const Point3 & pnt, const Vector3 & scaleVec ) +{ + return mulPerElem( pnt, Point3( scaleVec ) ); +} + +inline float projection( const Point3 & pnt, const Vector3 & unitVec ) +{ + float result; + result = ( pnt.getX() * unitVec.getX() ); + result = ( result + ( pnt.getY() * unitVec.getY() ) ); + result = ( result + ( pnt.getZ() * unitVec.getZ() ) ); + return result; +} + +inline float distSqrFromOrigin( const Point3 & pnt ) +{ + return lengthSqr( Vector3( pnt ) ); +} + +inline float distFromOrigin( const Point3 & pnt ) +{ + return length( Vector3( pnt ) ); +} + +inline float distSqr( const Point3 & pnt0, const Point3 & pnt1 ) +{ + return lengthSqr( ( pnt1 - pnt0 ) ); +} + +inline float dist( const Point3 & pnt0, const Point3 & pnt1 ) +{ + return length( ( pnt1 - pnt0 ) ); +} + +inline const Point3 select( const Point3 & pnt0, const Point3 & pnt1, bool select1 ) +{ + return Point3( + ( select1 )? pnt1.getX() : pnt0.getX(), + ( select1 )? pnt1.getY() : pnt0.getY(), + ( select1 )? pnt1.getZ() : pnt0.getZ() + ); +} + +#ifdef _VECTORMATH_DEBUG + +inline void print( const Point3 & pnt ) +{ + printf( "( %f %f %f )\n", pnt.getX(), pnt.getY(), pnt.getZ() ); +} + +inline void print( const Point3 & pnt, const char * name ) +{ + printf( "%s: ( %f %f %f )\n", name, pnt.getX(), pnt.getY(), pnt.getZ() ); +} + +#endif + +} // namespace Aos +} // namespace Vectormath + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/scalar/cpp/vectormath_aos.h b/Extras/vectormathlibrary/include/vectormath/scalar/cpp/vectormath_aos.h new file mode 100644 index 000000000..a99f56372 --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/scalar/cpp/vectormath_aos.h @@ -0,0 +1,1809 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_AOS_CPP_H +#define _VECTORMATH_AOS_CPP_H + +#include + +#ifdef _VECTORMATH_DEBUG +#include +#endif + +namespace Vectormath { + +namespace Aos { + +//----------------------------------------------------------------------------- +// Forward Declarations +// + +class Vector3; +class Vector4; +class Point3; +class Quat; +class Matrix3; +class Matrix4; +class Transform3; + +// A 3-D vector in array-of-structures format +// +class Vector3 +{ + float mX; + float mY; + float mZ; +#ifndef __GNUC__ + float d; +#endif + +public: + // Default constructor; does no initialization + // + inline Vector3( ) { }; + + // Copy a 3-D vector + // + inline Vector3( const Vector3 & vec ); + + // Construct a 3-D vector from x, y, and z elements + // + inline Vector3( float x, float y, float z ); + + // Copy elements from a 3-D point into a 3-D vector + // + explicit inline Vector3( const Point3 & pnt ); + + // Set all elements of a 3-D vector to the same scalar value + // + explicit inline Vector3( float scalar ); + + // Assign one 3-D vector to another + // + inline Vector3 & operator =( const Vector3 & vec ); + + // Set the x element of a 3-D vector + // + inline Vector3 & setX( float x ); + + // Set the y element of a 3-D vector + // + inline Vector3 & setY( float y ); + + // Set the z element of a 3-D vector + // + inline Vector3 & setZ( float z ); + + // Get the x element of a 3-D vector + // + inline float getX( ) const; + + // Get the y element of a 3-D vector + // + inline float getY( ) const; + + // Get the z element of a 3-D vector + // + inline float getZ( ) const; + + // Set an x, y, or z element of a 3-D vector by index + // + inline Vector3 & setElem( int idx, float value ); + + // Get an x, y, or z element of a 3-D vector by index + // + inline float getElem( int idx ) const; + + // Subscripting operator to set or get an element + // + inline float & operator []( int idx ); + + // Subscripting operator to get an element + // + inline float operator []( int idx ) const; + + // Add two 3-D vectors + // + inline const Vector3 operator +( const Vector3 & vec ) const; + + // Subtract a 3-D vector from another 3-D vector + // + inline const Vector3 operator -( const Vector3 & vec ) const; + + // Add a 3-D vector to a 3-D point + // + inline const Point3 operator +( const Point3 & pnt ) const; + + // Multiply a 3-D vector by a scalar + // + inline const Vector3 operator *( float scalar ) const; + + // Divide a 3-D vector by a scalar + // + inline const Vector3 operator /( float scalar ) const; + + // Perform compound assignment and addition with a 3-D vector + // + inline Vector3 & operator +=( const Vector3 & vec ); + + // Perform compound assignment and subtraction by a 3-D vector + // + inline Vector3 & operator -=( const Vector3 & vec ); + + // Perform compound assignment and multiplication by a scalar + // + inline Vector3 & operator *=( float scalar ); + + // Perform compound assignment and division by a scalar + // + inline Vector3 & operator /=( float scalar ); + + // Negate all elements of a 3-D vector + // + inline const Vector3 operator -( ) const; + + // Construct x axis + // + static inline const Vector3 xAxis( ); + + // Construct y axis + // + static inline const Vector3 yAxis( ); + + // Construct z axis + // + static inline const Vector3 zAxis( ); + +} +#ifdef __GNUC__ +__attribute__ ((aligned(16))) +#endif +; + +// Multiply a 3-D vector by a scalar +// +inline const Vector3 operator *( float scalar, const Vector3 & vec ); + +// Multiply two 3-D vectors per element +// +inline const Vector3 mulPerElem( const Vector3 & vec0, const Vector3 & vec1 ); + +// Divide two 3-D vectors per element +// NOTE: +// Floating-point behavior matches standard library function divf4. +// +inline const Vector3 divPerElem( const Vector3 & vec0, const Vector3 & vec1 ); + +// Compute the reciprocal of a 3-D vector per element +// NOTE: +// Floating-point behavior matches standard library function recipf4. +// +inline const Vector3 recipPerElem( const Vector3 & vec ); + +// Compute the square root of a 3-D vector per element +// NOTE: +// Floating-point behavior matches standard library function sqrtf4. +// +inline const Vector3 sqrtPerElem( const Vector3 & vec ); + +// Compute the reciprocal square root of a 3-D vector per element +// NOTE: +// Floating-point behavior matches standard library function rsqrtf4. +// +inline const Vector3 rsqrtPerElem( const Vector3 & vec ); + +// Compute the absolute value of a 3-D vector per element +// +inline const Vector3 absPerElem( const Vector3 & vec ); + +// Copy sign from one 3-D vector to another, per element +// +inline const Vector3 copySignPerElem( const Vector3 & vec0, const Vector3 & vec1 ); + +// Maximum of two 3-D vectors per element +// +inline const Vector3 maxPerElem( const Vector3 & vec0, const Vector3 & vec1 ); + +// Minimum of two 3-D vectors per element +// +inline const Vector3 minPerElem( const Vector3 & vec0, const Vector3 & vec1 ); + +// Maximum element of a 3-D vector +// +inline float maxElem( const Vector3 & vec ); + +// Minimum element of a 3-D vector +// +inline float minElem( const Vector3 & vec ); + +// Compute the sum of all elements of a 3-D vector +// +inline float sum( const Vector3 & vec ); + +// Compute the dot product of two 3-D vectors +// +inline float dot( const Vector3 & vec0, const Vector3 & vec1 ); + +// Compute the square of the length of a 3-D vector +// +inline float lengthSqr( const Vector3 & vec ); + +// Compute the length of a 3-D vector +// +inline float length( const Vector3 & vec ); + +// Normalize a 3-D vector +// NOTE: +// The result is unpredictable when all elements of vec are at or near zero. +// +inline const Vector3 normalize( const Vector3 & vec ); + +// Compute cross product of two 3-D vectors +// +inline const Vector3 cross( const Vector3 & vec0, const Vector3 & vec1 ); + +// Outer product of two 3-D vectors +// +inline const Matrix3 outer( const Vector3 & vec0, const Vector3 & vec1 ); + +// Pre-multiply a row vector by a 3x3 matrix +// +inline const Vector3 rowMul( const Vector3 & vec, const Matrix3 & mat ); + +// Cross-product matrix of a 3-D vector +// +inline const Matrix3 crossMatrix( const Vector3 & vec ); + +// Create cross-product matrix and multiply +// NOTE: +// Faster than separately creating a cross-product matrix and multiplying. +// +inline const Matrix3 crossMatrixMul( const Vector3 & vec, const Matrix3 & mat ); + +// Linear interpolation between two 3-D vectors +// NOTE: +// Does not clamp t between 0 and 1. +// +inline const Vector3 lerp( float t, const Vector3 & vec0, const Vector3 & vec1 ); + +// Spherical linear interpolation between two 3-D vectors +// NOTE: +// The result is unpredictable if the vectors point in opposite directions. +// Does not clamp t between 0 and 1. +// +inline const Vector3 slerp( float t, const Vector3 & unitVec0, const Vector3 & unitVec1 ); + +// Conditionally select between two 3-D vectors +// +inline const Vector3 select( const Vector3 & vec0, const Vector3 & vec1, bool select1 ); + +#ifdef _VECTORMATH_DEBUG + +// Print a 3-D vector +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Vector3 & vec ); + +// Print a 3-D vector and an associated string identifier +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Vector3 & vec, const char * name ); + +#endif + +// A 4-D vector in array-of-structures format +// +class Vector4 +{ + float mX; + float mY; + float mZ; + float mW; + +public: + // Default constructor; does no initialization + // + inline Vector4( ) { }; + + // Copy a 4-D vector + // + inline Vector4( const Vector4 & vec ); + + // Construct a 4-D vector from x, y, z, and w elements + // + inline Vector4( float x, float y, float z, float w ); + + // Construct a 4-D vector from a 3-D vector and a scalar + // + inline Vector4( const Vector3 & xyz, float w ); + + // Copy x, y, and z from a 3-D vector into a 4-D vector, and set w to 0 + // + explicit inline Vector4( const Vector3 & vec ); + + // Copy x, y, and z from a 3-D point into a 4-D vector, and set w to 1 + // + explicit inline Vector4( const Point3 & pnt ); + + // Copy elements from a quaternion into a 4-D vector + // + explicit inline Vector4( const Quat & quat ); + + // Set all elements of a 4-D vector to the same scalar value + // + explicit inline Vector4( float scalar ); + + // Assign one 4-D vector to another + // + inline Vector4 & operator =( const Vector4 & vec ); + + // Set the x, y, and z elements of a 4-D vector + // NOTE: + // This function does not change the w element. + // + inline Vector4 & setXYZ( const Vector3 & vec ); + + // Get the x, y, and z elements of a 4-D vector + // + inline const Vector3 getXYZ( ) const; + + // Set the x element of a 4-D vector + // + inline Vector4 & setX( float x ); + + // Set the y element of a 4-D vector + // + inline Vector4 & setY( float y ); + + // Set the z element of a 4-D vector + // + inline Vector4 & setZ( float z ); + + // Set the w element of a 4-D vector + // + inline Vector4 & setW( float w ); + + // Get the x element of a 4-D vector + // + inline float getX( ) const; + + // Get the y element of a 4-D vector + // + inline float getY( ) const; + + // Get the z element of a 4-D vector + // + inline float getZ( ) const; + + // Get the w element of a 4-D vector + // + inline float getW( ) const; + + // Set an x, y, z, or w element of a 4-D vector by index + // + inline Vector4 & setElem( int idx, float value ); + + // Get an x, y, z, or w element of a 4-D vector by index + // + inline float getElem( int idx ) const; + + // Subscripting operator to set or get an element + // + inline float & operator []( int idx ); + + // Subscripting operator to get an element + // + inline float operator []( int idx ) const; + + // Add two 4-D vectors + // + inline const Vector4 operator +( const Vector4 & vec ) const; + + // Subtract a 4-D vector from another 4-D vector + // + inline const Vector4 operator -( const Vector4 & vec ) const; + + // Multiply a 4-D vector by a scalar + // + inline const Vector4 operator *( float scalar ) const; + + // Divide a 4-D vector by a scalar + // + inline const Vector4 operator /( float scalar ) const; + + // Perform compound assignment and addition with a 4-D vector + // + inline Vector4 & operator +=( const Vector4 & vec ); + + // Perform compound assignment and subtraction by a 4-D vector + // + inline Vector4 & operator -=( const Vector4 & vec ); + + // Perform compound assignment and multiplication by a scalar + // + inline Vector4 & operator *=( float scalar ); + + // Perform compound assignment and division by a scalar + // + inline Vector4 & operator /=( float scalar ); + + // Negate all elements of a 4-D vector + // + inline const Vector4 operator -( ) const; + + // Construct x axis + // + static inline const Vector4 xAxis( ); + + // Construct y axis + // + static inline const Vector4 yAxis( ); + + // Construct z axis + // + static inline const Vector4 zAxis( ); + + // Construct w axis + // + static inline const Vector4 wAxis( ); + +} +#ifdef __GNUC__ +__attribute__ ((aligned(16))) +#endif +; + +// Multiply a 4-D vector by a scalar +// +inline const Vector4 operator *( float scalar, const Vector4 & vec ); + +// Multiply two 4-D vectors per element +// +inline const Vector4 mulPerElem( const Vector4 & vec0, const Vector4 & vec1 ); + +// Divide two 4-D vectors per element +// NOTE: +// Floating-point behavior matches standard library function divf4. +// +inline const Vector4 divPerElem( const Vector4 & vec0, const Vector4 & vec1 ); + +// Compute the reciprocal of a 4-D vector per element +// NOTE: +// Floating-point behavior matches standard library function recipf4. +// +inline const Vector4 recipPerElem( const Vector4 & vec ); + +// Compute the square root of a 4-D vector per element +// NOTE: +// Floating-point behavior matches standard library function sqrtf4. +// +inline const Vector4 sqrtPerElem( const Vector4 & vec ); + +// Compute the reciprocal square root of a 4-D vector per element +// NOTE: +// Floating-point behavior matches standard library function rsqrtf4. +// +inline const Vector4 rsqrtPerElem( const Vector4 & vec ); + +// Compute the absolute value of a 4-D vector per element +// +inline const Vector4 absPerElem( const Vector4 & vec ); + +// Copy sign from one 4-D vector to another, per element +// +inline const Vector4 copySignPerElem( const Vector4 & vec0, const Vector4 & vec1 ); + +// Maximum of two 4-D vectors per element +// +inline const Vector4 maxPerElem( const Vector4 & vec0, const Vector4 & vec1 ); + +// Minimum of two 4-D vectors per element +// +inline const Vector4 minPerElem( const Vector4 & vec0, const Vector4 & vec1 ); + +// Maximum element of a 4-D vector +// +inline float maxElem( const Vector4 & vec ); + +// Minimum element of a 4-D vector +// +inline float minElem( const Vector4 & vec ); + +// Compute the sum of all elements of a 4-D vector +// +inline float sum( const Vector4 & vec ); + +// Compute the dot product of two 4-D vectors +// +inline float dot( const Vector4 & vec0, const Vector4 & vec1 ); + +// Compute the square of the length of a 4-D vector +// +inline float lengthSqr( const Vector4 & vec ); + +// Compute the length of a 4-D vector +// +inline float length( const Vector4 & vec ); + +// Normalize a 4-D vector +// NOTE: +// The result is unpredictable when all elements of vec are at or near zero. +// +inline const Vector4 normalize( const Vector4 & vec ); + +// Outer product of two 4-D vectors +// +inline const Matrix4 outer( const Vector4 & vec0, const Vector4 & vec1 ); + +// Linear interpolation between two 4-D vectors +// NOTE: +// Does not clamp t between 0 and 1. +// +inline const Vector4 lerp( float t, const Vector4 & vec0, const Vector4 & vec1 ); + +// Spherical linear interpolation between two 4-D vectors +// NOTE: +// The result is unpredictable if the vectors point in opposite directions. +// Does not clamp t between 0 and 1. +// +inline const Vector4 slerp( float t, const Vector4 & unitVec0, const Vector4 & unitVec1 ); + +// Conditionally select between two 4-D vectors +// +inline const Vector4 select( const Vector4 & vec0, const Vector4 & vec1, bool select1 ); + +#ifdef _VECTORMATH_DEBUG + +// Print a 4-D vector +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Vector4 & vec ); + +// Print a 4-D vector and an associated string identifier +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Vector4 & vec, const char * name ); + +#endif + +// A 3-D point in array-of-structures format +// +class Point3 +{ + float mX; + float mY; + float mZ; +#ifndef __GNUC__ + float d; +#endif + +public: + // Default constructor; does no initialization + // + inline Point3( ) { }; + + // Copy a 3-D point + // + inline Point3( const Point3 & pnt ); + + // Construct a 3-D point from x, y, and z elements + // + inline Point3( float x, float y, float z ); + + // Copy elements from a 3-D vector into a 3-D point + // + explicit inline Point3( const Vector3 & vec ); + + // Set all elements of a 3-D point to the same scalar value + // + explicit inline Point3( float scalar ); + + // Assign one 3-D point to another + // + inline Point3 & operator =( const Point3 & pnt ); + + // Set the x element of a 3-D point + // + inline Point3 & setX( float x ); + + // Set the y element of a 3-D point + // + inline Point3 & setY( float y ); + + // Set the z element of a 3-D point + // + inline Point3 & setZ( float z ); + + // Get the x element of a 3-D point + // + inline float getX( ) const; + + // Get the y element of a 3-D point + // + inline float getY( ) const; + + // Get the z element of a 3-D point + // + inline float getZ( ) const; + + // Set an x, y, or z element of a 3-D point by index + // + inline Point3 & setElem( int idx, float value ); + + // Get an x, y, or z element of a 3-D point by index + // + inline float getElem( int idx ) const; + + // Subscripting operator to set or get an element + // + inline float & operator []( int idx ); + + // Subscripting operator to get an element + // + inline float operator []( int idx ) const; + + // Subtract a 3-D point from another 3-D point + // + inline const Vector3 operator -( const Point3 & pnt ) const; + + // Add a 3-D point to a 3-D vector + // + inline const Point3 operator +( const Vector3 & vec ) const; + + // Subtract a 3-D vector from a 3-D point + // + inline const Point3 operator -( const Vector3 & vec ) const; + + // Perform compound assignment and addition with a 3-D vector + // + inline Point3 & operator +=( const Vector3 & vec ); + + // Perform compound assignment and subtraction by a 3-D vector + // + inline Point3 & operator -=( const Vector3 & vec ); + +} +#ifdef __GNUC__ +__attribute__ ((aligned(16))) +#endif +; + +// Multiply two 3-D points per element +// +inline const Point3 mulPerElem( const Point3 & pnt0, const Point3 & pnt1 ); + +// Divide two 3-D points per element +// NOTE: +// Floating-point behavior matches standard library function divf4. +// +inline const Point3 divPerElem( const Point3 & pnt0, const Point3 & pnt1 ); + +// Compute the reciprocal of a 3-D point per element +// NOTE: +// Floating-point behavior matches standard library function recipf4. +// +inline const Point3 recipPerElem( const Point3 & pnt ); + +// Compute the square root of a 3-D point per element +// NOTE: +// Floating-point behavior matches standard library function sqrtf4. +// +inline const Point3 sqrtPerElem( const Point3 & pnt ); + +// Compute the reciprocal square root of a 3-D point per element +// NOTE: +// Floating-point behavior matches standard library function rsqrtf4. +// +inline const Point3 rsqrtPerElem( const Point3 & pnt ); + +// Compute the absolute value of a 3-D point per element +// +inline const Point3 absPerElem( const Point3 & pnt ); + +// Copy sign from one 3-D point to another, per element +// +inline const Point3 copySignPerElem( const Point3 & pnt0, const Point3 & pnt1 ); + +// Maximum of two 3-D points per element +// +inline const Point3 maxPerElem( const Point3 & pnt0, const Point3 & pnt1 ); + +// Minimum of two 3-D points per element +// +inline const Point3 minPerElem( const Point3 & pnt0, const Point3 & pnt1 ); + +// Maximum element of a 3-D point +// +inline float maxElem( const Point3 & pnt ); + +// Minimum element of a 3-D point +// +inline float minElem( const Point3 & pnt ); + +// Compute the sum of all elements of a 3-D point +// +inline float sum( const Point3 & pnt ); + +// Apply uniform scale to a 3-D point +// +inline const Point3 scale( const Point3 & pnt, float scaleVal ); + +// Apply non-uniform scale to a 3-D point +// +inline const Point3 scale( const Point3 & pnt, const Vector3 & scaleVec ); + +// Scalar projection of a 3-D point on a unit-length 3-D vector +// +inline float projection( const Point3 & pnt, const Vector3 & unitVec ); + +// Compute the square of the distance of a 3-D point from the coordinate-system origin +// +inline float distSqrFromOrigin( const Point3 & pnt ); + +// Compute the distance of a 3-D point from the coordinate-system origin +// +inline float distFromOrigin( const Point3 & pnt ); + +// Compute the square of the distance between two 3-D points +// +inline float distSqr( const Point3 & pnt0, const Point3 & pnt1 ); + +// Compute the distance between two 3-D points +// +inline float dist( const Point3 & pnt0, const Point3 & pnt1 ); + +// Linear interpolation between two 3-D points +// NOTE: +// Does not clamp t between 0 and 1. +// +inline const Point3 lerp( float t, const Point3 & pnt0, const Point3 & pnt1 ); + +// Conditionally select between two 3-D points +// +inline const Point3 select( const Point3 & pnt0, const Point3 & pnt1, bool select1 ); + +#ifdef _VECTORMATH_DEBUG + +// Print a 3-D point +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Point3 & pnt ); + +// Print a 3-D point and an associated string identifier +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Point3 & pnt, const char * name ); + +#endif + +// A quaternion in array-of-structures format +// +class Quat +{ + float mX; + float mY; + float mZ; + float mW; + +public: + // Default constructor; does no initialization + // + inline Quat( ) { }; + + // Copy a quaternion + // + inline Quat( const Quat & quat ); + + // Construct a quaternion from x, y, z, and w elements + // + inline Quat( float x, float y, float z, float w ); + + // Construct a quaternion from a 3-D vector and a scalar + // + inline Quat( const Vector3 & xyz, float w ); + + // Copy elements from a 4-D vector into a quaternion + // + explicit inline Quat( const Vector4 & vec ); + + // Convert a rotation matrix to a unit-length quaternion + // + explicit inline Quat( const Matrix3 & rotMat ); + + // Set all elements of a quaternion to the same scalar value + // + explicit inline Quat( float scalar ); + + // Assign one quaternion to another + // + inline Quat & operator =( const Quat & quat ); + + // Set the x, y, and z elements of a quaternion + // NOTE: + // This function does not change the w element. + // + inline Quat & setXYZ( const Vector3 & vec ); + + // Get the x, y, and z elements of a quaternion + // + inline const Vector3 getXYZ( ) const; + + // Set the x element of a quaternion + // + inline Quat & setX( float x ); + + // Set the y element of a quaternion + // + inline Quat & setY( float y ); + + // Set the z element of a quaternion + // + inline Quat & setZ( float z ); + + // Set the w element of a quaternion + // + inline Quat & setW( float w ); + + // Get the x element of a quaternion + // + inline float getX( ) const; + + // Get the y element of a quaternion + // + inline float getY( ) const; + + // Get the z element of a quaternion + // + inline float getZ( ) const; + + // Get the w element of a quaternion + // + inline float getW( ) const; + + // Set an x, y, z, or w element of a quaternion by index + // + inline Quat & setElem( int idx, float value ); + + // Get an x, y, z, or w element of a quaternion by index + // + inline float getElem( int idx ) const; + + // Subscripting operator to set or get an element + // + inline float & operator []( int idx ); + + // Subscripting operator to get an element + // + inline float operator []( int idx ) const; + + // Add two quaternions + // + inline const Quat operator +( const Quat & quat ) const; + + // Subtract a quaternion from another quaternion + // + inline const Quat operator -( const Quat & quat ) const; + + // Multiply two quaternions + // + inline const Quat operator *( const Quat & quat ) const; + + // Multiply a quaternion by a scalar + // + inline const Quat operator *( float scalar ) const; + + // Divide a quaternion by a scalar + // + inline const Quat operator /( float scalar ) const; + + // Perform compound assignment and addition with a quaternion + // + inline Quat & operator +=( const Quat & quat ); + + // Perform compound assignment and subtraction by a quaternion + // + inline Quat & operator -=( const Quat & quat ); + + // Perform compound assignment and multiplication by a quaternion + // + inline Quat & operator *=( const Quat & quat ); + + // Perform compound assignment and multiplication by a scalar + // + inline Quat & operator *=( float scalar ); + + // Perform compound assignment and division by a scalar + // + inline Quat & operator /=( float scalar ); + + // Negate all elements of a quaternion + // + inline const Quat operator -( ) const; + + // Construct an identity quaternion + // + static inline const Quat identity( ); + + // Construct a quaternion to rotate between two unit-length 3-D vectors + // NOTE: + // The result is unpredictable if unitVec0 and unitVec1 point in opposite directions. + // + static inline const Quat rotation( const Vector3 & unitVec0, const Vector3 & unitVec1 ); + + // Construct a quaternion to rotate around a unit-length 3-D vector + // + static inline const Quat rotation( float radians, const Vector3 & unitVec ); + + // Construct a quaternion to rotate around the x axis + // + static inline const Quat rotationX( float radians ); + + // Construct a quaternion to rotate around the y axis + // + static inline const Quat rotationY( float radians ); + + // Construct a quaternion to rotate around the z axis + // + static inline const Quat rotationZ( float radians ); + +} +#ifdef __GNUC__ +__attribute__ ((aligned(16))) +#endif +; + +// Multiply a quaternion by a scalar +// +inline const Quat operator *( float scalar, const Quat & quat ); + +// Compute the conjugate of a quaternion +// +inline const Quat conj( const Quat & quat ); + +// Use a unit-length quaternion to rotate a 3-D vector +// +inline const Vector3 rotate( const Quat & unitQuat, const Vector3 & vec ); + +// Compute the dot product of two quaternions +// +inline float dot( const Quat & quat0, const Quat & quat1 ); + +// Compute the norm of a quaternion +// +inline float norm( const Quat & quat ); + +// Compute the length of a quaternion +// +inline float length( const Quat & quat ); + +// Normalize a quaternion +// NOTE: +// The result is unpredictable when all elements of quat are at or near zero. +// +inline const Quat normalize( const Quat & quat ); + +// Linear interpolation between two quaternions +// NOTE: +// Does not clamp t between 0 and 1. +// +inline const Quat lerp( float t, const Quat & quat0, const Quat & quat1 ); + +// Spherical linear interpolation between two quaternions +// NOTE: +// Interpolates along the shortest path between orientations. +// Does not clamp t between 0 and 1. +// +inline const Quat slerp( float t, const Quat & unitQuat0, const Quat & unitQuat1 ); + +// Spherical quadrangle interpolation +// +inline const Quat squad( float t, const Quat & unitQuat0, const Quat & unitQuat1, const Quat & unitQuat2, const Quat & unitQuat3 ); + +// Conditionally select between two quaternions +// +inline const Quat select( const Quat & quat0, const Quat & quat1, bool select1 ); + +#ifdef _VECTORMATH_DEBUG + +// Print a quaternion +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Quat & quat ); + +// Print a quaternion and an associated string identifier +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Quat & quat, const char * name ); + +#endif + +// A 3x3 matrix in array-of-structures format +// +class Matrix3 +{ + Vector3 mCol0; + Vector3 mCol1; + Vector3 mCol2; + +public: + // Default constructor; does no initialization + // + inline Matrix3( ) { }; + + // Copy a 3x3 matrix + // + inline Matrix3( const Matrix3 & mat ); + + // Construct a 3x3 matrix containing the specified columns + // + inline Matrix3( const Vector3 & col0, const Vector3 & col1, const Vector3 & col2 ); + + // Construct a 3x3 rotation matrix from a unit-length quaternion + // + explicit inline Matrix3( const Quat & unitQuat ); + + // Set all elements of a 3x3 matrix to the same scalar value + // + explicit inline Matrix3( float scalar ); + + // Assign one 3x3 matrix to another + // + inline Matrix3 & operator =( const Matrix3 & mat ); + + // Set column 0 of a 3x3 matrix + // + inline Matrix3 & setCol0( const Vector3 & col0 ); + + // Set column 1 of a 3x3 matrix + // + inline Matrix3 & setCol1( const Vector3 & col1 ); + + // Set column 2 of a 3x3 matrix + // + inline Matrix3 & setCol2( const Vector3 & col2 ); + + // Get column 0 of a 3x3 matrix + // + inline const Vector3 getCol0( ) const; + + // Get column 1 of a 3x3 matrix + // + inline const Vector3 getCol1( ) const; + + // Get column 2 of a 3x3 matrix + // + inline const Vector3 getCol2( ) const; + + // Set the column of a 3x3 matrix referred to by the specified index + // + inline Matrix3 & setCol( int col, const Vector3 & vec ); + + // Set the row of a 3x3 matrix referred to by the specified index + // + inline Matrix3 & setRow( int row, const Vector3 & vec ); + + // Get the column of a 3x3 matrix referred to by the specified index + // + inline const Vector3 getCol( int col ) const; + + // Get the row of a 3x3 matrix referred to by the specified index + // + inline const Vector3 getRow( int row ) const; + + // Subscripting operator to set or get a column + // + inline Vector3 & operator []( int col ); + + // Subscripting operator to get a column + // + inline const Vector3 operator []( int col ) const; + + // Set the element of a 3x3 matrix referred to by column and row indices + // + inline Matrix3 & setElem( int col, int row, float val ); + + // Get the element of a 3x3 matrix referred to by column and row indices + // + inline float getElem( int col, int row ) const; + + // Add two 3x3 matrices + // + inline const Matrix3 operator +( const Matrix3 & mat ) const; + + // Subtract a 3x3 matrix from another 3x3 matrix + // + inline const Matrix3 operator -( const Matrix3 & mat ) const; + + // Negate all elements of a 3x3 matrix + // + inline const Matrix3 operator -( ) const; + + // Multiply a 3x3 matrix by a scalar + // + inline const Matrix3 operator *( float scalar ) const; + + // Multiply a 3x3 matrix by a 3-D vector + // + inline const Vector3 operator *( const Vector3 & vec ) const; + + // Multiply two 3x3 matrices + // + inline const Matrix3 operator *( const Matrix3 & mat ) const; + + // Perform compound assignment and addition with a 3x3 matrix + // + inline Matrix3 & operator +=( const Matrix3 & mat ); + + // Perform compound assignment and subtraction by a 3x3 matrix + // + inline Matrix3 & operator -=( const Matrix3 & mat ); + + // Perform compound assignment and multiplication by a scalar + // + inline Matrix3 & operator *=( float scalar ); + + // Perform compound assignment and multiplication by a 3x3 matrix + // + inline Matrix3 & operator *=( const Matrix3 & mat ); + + // Construct an identity 3x3 matrix + // + static inline const Matrix3 identity( ); + + // Construct a 3x3 matrix to rotate around the x axis + // + static inline const Matrix3 rotationX( float radians ); + + // Construct a 3x3 matrix to rotate around the y axis + // + static inline const Matrix3 rotationY( float radians ); + + // Construct a 3x3 matrix to rotate around the z axis + // + static inline const Matrix3 rotationZ( float radians ); + + // Construct a 3x3 matrix to rotate around the x, y, and z axes + // + static inline const Matrix3 rotationZYX( const Vector3 & radiansXYZ ); + + // Construct a 3x3 matrix to rotate around a unit-length 3-D vector + // + static inline const Matrix3 rotation( float radians, const Vector3 & unitVec ); + + // Construct a rotation matrix from a unit-length quaternion + // + static inline const Matrix3 rotation( const Quat & unitQuat ); + + // Construct a 3x3 matrix to perform scaling + // + static inline const Matrix3 scale( const Vector3 & scaleVec ); + +}; +// Multiply a 3x3 matrix by a scalar +// +inline const Matrix3 operator *( float scalar, const Matrix3 & mat ); + +// Append (post-multiply) a scale transformation to a 3x3 matrix +// NOTE: +// Faster than creating and multiplying a scale transformation matrix. +// +inline const Matrix3 appendScale( const Matrix3 & mat, const Vector3 & scaleVec ); + +// Prepend (pre-multiply) a scale transformation to a 3x3 matrix +// NOTE: +// Faster than creating and multiplying a scale transformation matrix. +// +inline const Matrix3 prependScale( const Vector3 & scaleVec, const Matrix3 & mat ); + +// Multiply two 3x3 matrices per element +// +inline const Matrix3 mulPerElem( const Matrix3 & mat0, const Matrix3 & mat1 ); + +// Compute the absolute value of a 3x3 matrix per element +// +inline const Matrix3 absPerElem( const Matrix3 & mat ); + +// Transpose of a 3x3 matrix +// +inline const Matrix3 transpose( const Matrix3 & mat ); + +// Compute the inverse of a 3x3 matrix +// NOTE: +// Result is unpredictable when the determinant of mat is equal to or near 0. +// +inline const Matrix3 inverse( const Matrix3 & mat ); + +// Determinant of a 3x3 matrix +// +inline float determinant( const Matrix3 & mat ); + +// Conditionally select between two 3x3 matrices +// +inline const Matrix3 select( const Matrix3 & mat0, const Matrix3 & mat1, bool select1 ); + +#ifdef _VECTORMATH_DEBUG + +// Print a 3x3 matrix +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Matrix3 & mat ); + +// Print a 3x3 matrix and an associated string identifier +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Matrix3 & mat, const char * name ); + +#endif + +// A 4x4 matrix in array-of-structures format +// +class Matrix4 +{ + Vector4 mCol0; + Vector4 mCol1; + Vector4 mCol2; + Vector4 mCol3; + +public: + // Default constructor; does no initialization + // + inline Matrix4( ) { }; + + // Copy a 4x4 matrix + // + inline Matrix4( const Matrix4 & mat ); + + // Construct a 4x4 matrix containing the specified columns + // + inline Matrix4( const Vector4 & col0, const Vector4 & col1, const Vector4 & col2, const Vector4 & col3 ); + + // Construct a 4x4 matrix from a 3x4 transformation matrix + // + explicit inline Matrix4( const Transform3 & mat ); + + // Construct a 4x4 matrix from a 3x3 matrix and a 3-D vector + // + inline Matrix4( const Matrix3 & mat, const Vector3 & translateVec ); + + // Construct a 4x4 matrix from a unit-length quaternion and a 3-D vector + // + inline Matrix4( const Quat & unitQuat, const Vector3 & translateVec ); + + // Set all elements of a 4x4 matrix to the same scalar value + // + explicit inline Matrix4( float scalar ); + + // Assign one 4x4 matrix to another + // + inline Matrix4 & operator =( const Matrix4 & mat ); + + // Set the upper-left 3x3 submatrix + // NOTE: + // This function does not change the bottom row elements. + // + inline Matrix4 & setUpper3x3( const Matrix3 & mat3 ); + + // Get the upper-left 3x3 submatrix of a 4x4 matrix + // + inline const Matrix3 getUpper3x3( ) const; + + // Set translation component + // NOTE: + // This function does not change the bottom row elements. + // + inline Matrix4 & setTranslation( const Vector3 & translateVec ); + + // Get the translation component of a 4x4 matrix + // + inline const Vector3 getTranslation( ) const; + + // Set column 0 of a 4x4 matrix + // + inline Matrix4 & setCol0( const Vector4 & col0 ); + + // Set column 1 of a 4x4 matrix + // + inline Matrix4 & setCol1( const Vector4 & col1 ); + + // Set column 2 of a 4x4 matrix + // + inline Matrix4 & setCol2( const Vector4 & col2 ); + + // Set column 3 of a 4x4 matrix + // + inline Matrix4 & setCol3( const Vector4 & col3 ); + + // Get column 0 of a 4x4 matrix + // + inline const Vector4 getCol0( ) const; + + // Get column 1 of a 4x4 matrix + // + inline const Vector4 getCol1( ) const; + + // Get column 2 of a 4x4 matrix + // + inline const Vector4 getCol2( ) const; + + // Get column 3 of a 4x4 matrix + // + inline const Vector4 getCol3( ) const; + + // Set the column of a 4x4 matrix referred to by the specified index + // + inline Matrix4 & setCol( int col, const Vector4 & vec ); + + // Set the row of a 4x4 matrix referred to by the specified index + // + inline Matrix4 & setRow( int row, const Vector4 & vec ); + + // Get the column of a 4x4 matrix referred to by the specified index + // + inline const Vector4 getCol( int col ) const; + + // Get the row of a 4x4 matrix referred to by the specified index + // + inline const Vector4 getRow( int row ) const; + + // Subscripting operator to set or get a column + // + inline Vector4 & operator []( int col ); + + // Subscripting operator to get a column + // + inline const Vector4 operator []( int col ) const; + + // Set the element of a 4x4 matrix referred to by column and row indices + // + inline Matrix4 & setElem( int col, int row, float val ); + + // Get the element of a 4x4 matrix referred to by column and row indices + // + inline float getElem( int col, int row ) const; + + // Add two 4x4 matrices + // + inline const Matrix4 operator +( const Matrix4 & mat ) const; + + // Subtract a 4x4 matrix from another 4x4 matrix + // + inline const Matrix4 operator -( const Matrix4 & mat ) const; + + // Negate all elements of a 4x4 matrix + // + inline const Matrix4 operator -( ) const; + + // Multiply a 4x4 matrix by a scalar + // + inline const Matrix4 operator *( float scalar ) const; + + // Multiply a 4x4 matrix by a 4-D vector + // + inline const Vector4 operator *( const Vector4 & vec ) const; + + // Multiply a 4x4 matrix by a 3-D vector + // + inline const Vector4 operator *( const Vector3 & vec ) const; + + // Multiply a 4x4 matrix by a 3-D point + // + inline const Vector4 operator *( const Point3 & pnt ) const; + + // Multiply two 4x4 matrices + // + inline const Matrix4 operator *( const Matrix4 & mat ) const; + + // Multiply a 4x4 matrix by a 3x4 transformation matrix + // + inline const Matrix4 operator *( const Transform3 & tfrm ) const; + + // Perform compound assignment and addition with a 4x4 matrix + // + inline Matrix4 & operator +=( const Matrix4 & mat ); + + // Perform compound assignment and subtraction by a 4x4 matrix + // + inline Matrix4 & operator -=( const Matrix4 & mat ); + + // Perform compound assignment and multiplication by a scalar + // + inline Matrix4 & operator *=( float scalar ); + + // Perform compound assignment and multiplication by a 4x4 matrix + // + inline Matrix4 & operator *=( const Matrix4 & mat ); + + // Perform compound assignment and multiplication by a 3x4 transformation matrix + // + inline Matrix4 & operator *=( const Transform3 & tfrm ); + + // Construct an identity 4x4 matrix + // + static inline const Matrix4 identity( ); + + // Construct a 4x4 matrix to rotate around the x axis + // + static inline const Matrix4 rotationX( float radians ); + + // Construct a 4x4 matrix to rotate around the y axis + // + static inline const Matrix4 rotationY( float radians ); + + // Construct a 4x4 matrix to rotate around the z axis + // + static inline const Matrix4 rotationZ( float radians ); + + // Construct a 4x4 matrix to rotate around the x, y, and z axes + // + static inline const Matrix4 rotationZYX( const Vector3 & radiansXYZ ); + + // Construct a 4x4 matrix to rotate around a unit-length 3-D vector + // + static inline const Matrix4 rotation( float radians, const Vector3 & unitVec ); + + // Construct a rotation matrix from a unit-length quaternion + // + static inline const Matrix4 rotation( const Quat & unitQuat ); + + // Construct a 4x4 matrix to perform scaling + // + static inline const Matrix4 scale( const Vector3 & scaleVec ); + + // Construct a 4x4 matrix to perform translation + // + static inline const Matrix4 translation( const Vector3 & translateVec ); + + // Construct viewing matrix based on eye position, position looked at, and up direction + // + static inline const Matrix4 lookAt( const Point3 & eyePos, const Point3 & lookAtPos, const Vector3 & upVec ); + + // Construct a perspective projection matrix + // + static inline const Matrix4 perspective( float fovyRadians, float aspect, float zNear, float zFar ); + + // Construct a perspective projection matrix based on frustum + // + static inline const Matrix4 frustum( float left, float right, float bottom, float top, float zNear, float zFar ); + + // Construct an orthographic projection matrix + // + static inline const Matrix4 orthographic( float left, float right, float bottom, float top, float zNear, float zFar ); + +}; +// Multiply a 4x4 matrix by a scalar +// +inline const Matrix4 operator *( float scalar, const Matrix4 & mat ); + +// Append (post-multiply) a scale transformation to a 4x4 matrix +// NOTE: +// Faster than creating and multiplying a scale transformation matrix. +// +inline const Matrix4 appendScale( const Matrix4 & mat, const Vector3 & scaleVec ); + +// Prepend (pre-multiply) a scale transformation to a 4x4 matrix +// NOTE: +// Faster than creating and multiplying a scale transformation matrix. +// +inline const Matrix4 prependScale( const Vector3 & scaleVec, const Matrix4 & mat ); + +// Multiply two 4x4 matrices per element +// +inline const Matrix4 mulPerElem( const Matrix4 & mat0, const Matrix4 & mat1 ); + +// Compute the absolute value of a 4x4 matrix per element +// +inline const Matrix4 absPerElem( const Matrix4 & mat ); + +// Transpose of a 4x4 matrix +// +inline const Matrix4 transpose( const Matrix4 & mat ); + +// Compute the inverse of a 4x4 matrix +// NOTE: +// Result is unpredictable when the determinant of mat is equal to or near 0. +// +inline const Matrix4 inverse( const Matrix4 & mat ); + +// Compute the inverse of a 4x4 matrix, which is expected to be an affine matrix +// NOTE: +// This can be used to achieve better performance than a general inverse when the specified 4x4 matrix meets the given restrictions. The result is unpredictable when the determinant of mat is equal to or near 0. +// +inline const Matrix4 affineInverse( const Matrix4 & mat ); + +// Compute the inverse of a 4x4 matrix, which is expected to be an affine matrix with an orthogonal upper-left 3x3 submatrix +// NOTE: +// This can be used to achieve better performance than a general inverse when the specified 4x4 matrix meets the given restrictions. +// +inline const Matrix4 orthoInverse( const Matrix4 & mat ); + +// Determinant of a 4x4 matrix +// +inline float determinant( const Matrix4 & mat ); + +// Conditionally select between two 4x4 matrices +// +inline const Matrix4 select( const Matrix4 & mat0, const Matrix4 & mat1, bool select1 ); + +#ifdef _VECTORMATH_DEBUG + +// Print a 4x4 matrix +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Matrix4 & mat ); + +// Print a 4x4 matrix and an associated string identifier +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Matrix4 & mat, const char * name ); + +#endif + +// A 3x4 transformation matrix in array-of-structures format +// +class Transform3 +{ + Vector3 mCol0; + Vector3 mCol1; + Vector3 mCol2; + Vector3 mCol3; + +public: + // Default constructor; does no initialization + // + inline Transform3( ) { }; + + // Copy a 3x4 transformation matrix + // + inline Transform3( const Transform3 & tfrm ); + + // Construct a 3x4 transformation matrix containing the specified columns + // + inline Transform3( const Vector3 & col0, const Vector3 & col1, const Vector3 & col2, const Vector3 & col3 ); + + // Construct a 3x4 transformation matrix from a 3x3 matrix and a 3-D vector + // + inline Transform3( const Matrix3 & tfrm, const Vector3 & translateVec ); + + // Construct a 3x4 transformation matrix from a unit-length quaternion and a 3-D vector + // + inline Transform3( const Quat & unitQuat, const Vector3 & translateVec ); + + // Set all elements of a 3x4 transformation matrix to the same scalar value + // + explicit inline Transform3( float scalar ); + + // Assign one 3x4 transformation matrix to another + // + inline Transform3 & operator =( const Transform3 & tfrm ); + + // Set the upper-left 3x3 submatrix + // + inline Transform3 & setUpper3x3( const Matrix3 & mat3 ); + + // Get the upper-left 3x3 submatrix of a 3x4 transformation matrix + // + inline const Matrix3 getUpper3x3( ) const; + + // Set translation component + // + inline Transform3 & setTranslation( const Vector3 & translateVec ); + + // Get the translation component of a 3x4 transformation matrix + // + inline const Vector3 getTranslation( ) const; + + // Set column 0 of a 3x4 transformation matrix + // + inline Transform3 & setCol0( const Vector3 & col0 ); + + // Set column 1 of a 3x4 transformation matrix + // + inline Transform3 & setCol1( const Vector3 & col1 ); + + // Set column 2 of a 3x4 transformation matrix + // + inline Transform3 & setCol2( const Vector3 & col2 ); + + // Set column 3 of a 3x4 transformation matrix + // + inline Transform3 & setCol3( const Vector3 & col3 ); + + // Get column 0 of a 3x4 transformation matrix + // + inline const Vector3 getCol0( ) const; + + // Get column 1 of a 3x4 transformation matrix + // + inline const Vector3 getCol1( ) const; + + // Get column 2 of a 3x4 transformation matrix + // + inline const Vector3 getCol2( ) const; + + // Get column 3 of a 3x4 transformation matrix + // + inline const Vector3 getCol3( ) const; + + // Set the column of a 3x4 transformation matrix referred to by the specified index + // + inline Transform3 & setCol( int col, const Vector3 & vec ); + + // Set the row of a 3x4 transformation matrix referred to by the specified index + // + inline Transform3 & setRow( int row, const Vector4 & vec ); + + // Get the column of a 3x4 transformation matrix referred to by the specified index + // + inline const Vector3 getCol( int col ) const; + + // Get the row of a 3x4 transformation matrix referred to by the specified index + // + inline const Vector4 getRow( int row ) const; + + // Subscripting operator to set or get a column + // + inline Vector3 & operator []( int col ); + + // Subscripting operator to get a column + // + inline const Vector3 operator []( int col ) const; + + // Set the element of a 3x4 transformation matrix referred to by column and row indices + // + inline Transform3 & setElem( int col, int row, float val ); + + // Get the element of a 3x4 transformation matrix referred to by column and row indices + // + inline float getElem( int col, int row ) const; + + // Multiply a 3x4 transformation matrix by a 3-D vector + // + inline const Vector3 operator *( const Vector3 & vec ) const; + + // Multiply a 3x4 transformation matrix by a 3-D point + // + inline const Point3 operator *( const Point3 & pnt ) const; + + // Multiply two 3x4 transformation matrices + // + inline const Transform3 operator *( const Transform3 & tfrm ) const; + + // Perform compound assignment and multiplication by a 3x4 transformation matrix + // + inline Transform3 & operator *=( const Transform3 & tfrm ); + + // Construct an identity 3x4 transformation matrix + // + static inline const Transform3 identity( ); + + // Construct a 3x4 transformation matrix to rotate around the x axis + // + static inline const Transform3 rotationX( float radians ); + + // Construct a 3x4 transformation matrix to rotate around the y axis + // + static inline const Transform3 rotationY( float radians ); + + // Construct a 3x4 transformation matrix to rotate around the z axis + // + static inline const Transform3 rotationZ( float radians ); + + // Construct a 3x4 transformation matrix to rotate around the x, y, and z axes + // + static inline const Transform3 rotationZYX( const Vector3 & radiansXYZ ); + + // Construct a 3x4 transformation matrix to rotate around a unit-length 3-D vector + // + static inline const Transform3 rotation( float radians, const Vector3 & unitVec ); + + // Construct a rotation matrix from a unit-length quaternion + // + static inline const Transform3 rotation( const Quat & unitQuat ); + + // Construct a 3x4 transformation matrix to perform scaling + // + static inline const Transform3 scale( const Vector3 & scaleVec ); + + // Construct a 3x4 transformation matrix to perform translation + // + static inline const Transform3 translation( const Vector3 & translateVec ); + +}; +// Append (post-multiply) a scale transformation to a 3x4 transformation matrix +// NOTE: +// Faster than creating and multiplying a scale transformation matrix. +// +inline const Transform3 appendScale( const Transform3 & tfrm, const Vector3 & scaleVec ); + +// Prepend (pre-multiply) a scale transformation to a 3x4 transformation matrix +// NOTE: +// Faster than creating and multiplying a scale transformation matrix. +// +inline const Transform3 prependScale( const Vector3 & scaleVec, const Transform3 & tfrm ); + +// Multiply two 3x4 transformation matrices per element +// +inline const Transform3 mulPerElem( const Transform3 & tfrm0, const Transform3 & tfrm1 ); + +// Compute the absolute value of a 3x4 transformation matrix per element +// +inline const Transform3 absPerElem( const Transform3 & tfrm ); + +// Inverse of a 3x4 transformation matrix +// NOTE: +// Result is unpredictable when the determinant of the left 3x3 submatrix is equal to or near 0. +// +inline const Transform3 inverse( const Transform3 & tfrm ); + +// Compute the inverse of a 3x4 transformation matrix, expected to have an orthogonal upper-left 3x3 submatrix +// NOTE: +// This can be used to achieve better performance than a general inverse when the specified 3x4 transformation matrix meets the given restrictions. +// +inline const Transform3 orthoInverse( const Transform3 & tfrm ); + +// Conditionally select between two 3x4 transformation matrices +// +inline const Transform3 select( const Transform3 & tfrm0, const Transform3 & tfrm1, bool select1 ); + +#ifdef _VECTORMATH_DEBUG + +// Print a 3x4 transformation matrix +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Transform3 & tfrm ); + +// Print a 3x4 transformation matrix and an associated string identifier +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Transform3 & tfrm, const char * name ); + +#endif + +} // namespace Aos +} // namespace Vectormath + +#include "vec_aos.h" +#include "quat_aos.h" +#include "mat_aos.h" + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/spu/c/mat_aos.h b/Extras/vectormathlibrary/include/vectormath/spu/c/mat_aos.h new file mode 100644 index 000000000..d6b4cb0ba --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/spu/c/mat_aos.h @@ -0,0 +1,1833 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_MAT_AOS_C_H +#define _VECTORMATH_MAT_AOS_C_H + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/*----------------------------------------------------------------------------- + * Constants + * for shuffles, words are labeled [x,y,z,w] [a,b,c,d] + */ +#define _VECTORMATH_SHUF_XAYB ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_A, _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_B }) +#define _VECTORMATH_SHUF_ZCWD ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_C, _VECTORMATH_SHUF_W, _VECTORMATH_SHUF_D }) +#define _VECTORMATH_SHUF_ZBW0 ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_B, _VECTORMATH_SHUF_W, _VECTORMATH_SHUF_0 }) +#define _VECTORMATH_SHUF_XCY0 ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_C, _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_0 }) +#define _VECTORMATH_SHUF_XYAB ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_A, _VECTORMATH_SHUF_B }) +#define _VECTORMATH_SHUF_ZWCD ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_W, _VECTORMATH_SHUF_C, _VECTORMATH_SHUF_D }) +#define _VECTORMATH_SHUF_0ZB0 ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_0, _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_B, _VECTORMATH_SHUF_0 }) +#define _VECTORMATH_SHUF_C0X0 ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_C, _VECTORMATH_SHUF_0, _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_0 }) +#define _VECTORMATH_SHUF_YA00 ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_A, _VECTORMATH_SHUF_0, _VECTORMATH_SHUF_0 }) +#define _VECTORMATH_SHUF_XAZC ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_A, _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_C }) +#define _VECTORMATH_SHUF_YXWZ ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_W, _VECTORMATH_SHUF_Z }) +#define _VECTORMATH_SHUF_YBWD ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_B, _VECTORMATH_SHUF_W, _VECTORMATH_SHUF_D }) +#define _VECTORMATH_SHUF_XYCX ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_C, _VECTORMATH_SHUF_X }) +#define _VECTORMATH_SHUF_YCXY ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_C, _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_Y }) +#define _VECTORMATH_SHUF_CXYC ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_C, _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_C }) +#define _VECTORMATH_SHUF_ZAY0 ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_A, _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_0 }) +#define _VECTORMATH_SHUF_BZX0 ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_B, _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_0 }) +#define _VECTORMATH_SHUF_0ZYA ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_0, _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_A }) +#define _VECTORMATH_SHUF_Z0XB ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_0, _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_B }) +#define _VECTORMATH_SHUF_YX0C ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_0, _VECTORMATH_SHUF_C }) +#define _VECTORMATH_SHUF_CZD0 ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_C, _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_D, _VECTORMATH_SHUF_0 }) +#define _VECTORMATH_SHUF_BBY0 ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_B, _VECTORMATH_SHUF_B, _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_0 }) +#define _VECTORMATH_PI_OVER_2 1.570796327f + +/*----------------------------------------------------------------------------- + * Definitions + */ +static inline void vmathM3Copy( VmathMatrix3 *result, const VmathMatrix3 *mat ) +{ + vmathV3Copy( &result->col0, &mat->col0 ); + vmathV3Copy( &result->col1, &mat->col1 ); + vmathV3Copy( &result->col2, &mat->col2 ); +} + +static inline void vmathM3MakeFromScalar( VmathMatrix3 *result, float scalar ) +{ + vmathV3MakeFromScalar( &result->col0, scalar ); + vmathV3MakeFromScalar( &result->col1, scalar ); + vmathV3MakeFromScalar( &result->col2, scalar ); +} + +static inline void vmathM3MakeFromQ( VmathMatrix3 *result, const VmathQuat *unitQuat ) +{ + vec_float4 xyzw_2, wwww, yzxw, zxyw, yzxw_2, zxyw_2; + vec_float4 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5; + vec_uchar16 shuffle_wwww = (vec_uchar16)spu_splats((int)0x0c0d0e0f); + vec_uint4 select_x = (vec_uint4)spu_maskb(0xf000); + vec_uint4 select_z = (vec_uint4)spu_maskb(0x00f0); + xyzw_2 = spu_add( unitQuat->vec128, unitQuat->vec128 ); + wwww = spu_shuffle( unitQuat->vec128, unitQuat->vec128, shuffle_wwww ); + yzxw = spu_shuffle( unitQuat->vec128, unitQuat->vec128, _VECTORMATH_SHUF_YZXW ); + zxyw = spu_shuffle( unitQuat->vec128, unitQuat->vec128, _VECTORMATH_SHUF_ZXYW ); + yzxw_2 = spu_shuffle( xyzw_2, xyzw_2, _VECTORMATH_SHUF_YZXW ); + zxyw_2 = spu_shuffle( xyzw_2, xyzw_2, _VECTORMATH_SHUF_ZXYW ); + tmp0 = spu_mul( yzxw_2, wwww ); + tmp1 = spu_nmsub( yzxw, yzxw_2, spu_splats(1.0f) ); + tmp2 = spu_mul( yzxw, xyzw_2 ); + tmp0 = spu_madd( zxyw, xyzw_2, tmp0 ); + tmp1 = spu_nmsub( zxyw, zxyw_2, tmp1 ); + tmp2 = spu_nmsub( zxyw_2, wwww, tmp2 ); + tmp3 = spu_sel( tmp0, tmp1, select_x ); + tmp4 = spu_sel( tmp1, tmp2, select_x ); + tmp5 = spu_sel( tmp2, tmp0, select_x ); + result->col0.vec128 = spu_sel( tmp3, tmp2, select_z ); + result->col1.vec128 = spu_sel( tmp4, tmp0, select_z ); + result->col2.vec128 = spu_sel( tmp5, tmp1, select_z ); +} + +static inline void vmathM3MakeFromCols( VmathMatrix3 *result, const VmathVector3 *_col0, const VmathVector3 *_col1, const VmathVector3 *_col2 ) +{ + vmathV3Copy( &result->col0, _col0 ); + vmathV3Copy( &result->col1, _col1 ); + vmathV3Copy( &result->col2, _col2 ); +} + +static inline void vmathM3SetCol0( VmathMatrix3 *result, const VmathVector3 *_col0 ) +{ + vmathV3Copy( &result->col0, _col0 ); +} + +static inline void vmathM3SetCol1( VmathMatrix3 *result, const VmathVector3 *_col1 ) +{ + vmathV3Copy( &result->col1, _col1 ); +} + +static inline void vmathM3SetCol2( VmathMatrix3 *result, const VmathVector3 *_col2 ) +{ + vmathV3Copy( &result->col2, _col2 ); +} + +static inline void vmathM3SetCol( VmathMatrix3 *result, int col, const VmathVector3 *vec ) +{ + vmathV3Copy( (&result->col0 + col), vec ); +} + +static inline void vmathM3SetRow( VmathMatrix3 *result, int row, const VmathVector3 *vec ) +{ + vmathV3SetElem( &result->col0, row, vmathV3GetElem( vec, 0 ) ); + vmathV3SetElem( &result->col1, row, vmathV3GetElem( vec, 1 ) ); + vmathV3SetElem( &result->col2, row, vmathV3GetElem( vec, 2 ) ); +} + +static inline void vmathM3SetElem( VmathMatrix3 *result, int col, int row, float val ) +{ + VmathVector3 tmpV3_0; + vmathM3GetCol( &tmpV3_0, result, col ); + vmathV3SetElem( &tmpV3_0, row, val ); + vmathM3SetCol( result, col, &tmpV3_0 ); +} + +static inline float vmathM3GetElem( const VmathMatrix3 *mat, int col, int row ) +{ + VmathVector3 tmpV3_0; + vmathM3GetCol( &tmpV3_0, mat, col ); + return vmathV3GetElem( &tmpV3_0, row ); +} + +static inline void vmathM3GetCol0( VmathVector3 *result, const VmathMatrix3 *mat ) +{ + vmathV3Copy( result, &mat->col0 ); +} + +static inline void vmathM3GetCol1( VmathVector3 *result, const VmathMatrix3 *mat ) +{ + vmathV3Copy( result, &mat->col1 ); +} + +static inline void vmathM3GetCol2( VmathVector3 *result, const VmathMatrix3 *mat ) +{ + vmathV3Copy( result, &mat->col2 ); +} + +static inline void vmathM3GetCol( VmathVector3 *result, const VmathMatrix3 *mat, int col ) +{ + vmathV3Copy( result, (&mat->col0 + col) ); +} + +static inline void vmathM3GetRow( VmathVector3 *result, const VmathMatrix3 *mat, int row ) +{ + vmathV3MakeFromElems( result, vmathV3GetElem( &mat->col0, row ), vmathV3GetElem( &mat->col1, row ), vmathV3GetElem( &mat->col2, row ) ); +} + +static inline void vmathM3Transpose( VmathMatrix3 *result, const VmathMatrix3 *mat ) +{ + vec_float4 tmp0, tmp1, res0, res1, res2; + tmp0 = spu_shuffle( mat->col0.vec128, mat->col2.vec128, _VECTORMATH_SHUF_XAYB ); + tmp1 = spu_shuffle( mat->col0.vec128, mat->col2.vec128, _VECTORMATH_SHUF_ZCWD ); + res0 = spu_shuffle( tmp0, mat->col1.vec128, _VECTORMATH_SHUF_XAYB ); + res1 = spu_shuffle( tmp0, mat->col1.vec128, _VECTORMATH_SHUF_ZBW0 ); + res2 = spu_shuffle( tmp1, mat->col1.vec128, _VECTORMATH_SHUF_XCY0 ); + result->col0.vec128 = res0; + result->col1.vec128 = res1; + result->col2.vec128 = res2; +} + +static inline void vmathM3Inverse( VmathMatrix3 *result, const VmathMatrix3 *mat ) +{ + vec_float4 tmp0, tmp1, tmp2, tmp3, tmp4, dot, invdet, inv0, inv1, inv2; + tmp2 = _vmathVfCross( mat->col0.vec128, mat->col1.vec128 ); + tmp0 = _vmathVfCross( mat->col1.vec128, mat->col2.vec128 ); + tmp1 = _vmathVfCross( mat->col2.vec128, mat->col0.vec128 ); + dot = _vmathVfDot3( tmp2, mat->col2.vec128 ); + dot = spu_shuffle( dot, dot, (vec_uchar16)spu_splats(0x00010203) ); + invdet = recipf4( dot ); + tmp3 = spu_shuffle( tmp0, tmp2, _VECTORMATH_SHUF_XAYB ); + tmp4 = spu_shuffle( tmp0, tmp2, _VECTORMATH_SHUF_ZCWD ); + inv0 = spu_shuffle( tmp3, tmp1, _VECTORMATH_SHUF_XAYB ); + inv1 = spu_shuffle( tmp3, tmp1, _VECTORMATH_SHUF_ZBW0 ); + inv2 = spu_shuffle( tmp4, tmp1, _VECTORMATH_SHUF_XCY0 ); + inv0 = spu_mul( inv0, invdet ); + inv1 = spu_mul( inv1, invdet ); + inv2 = spu_mul( inv2, invdet ); + result->col0.vec128 = inv0; + result->col1.vec128 = inv1; + result->col2.vec128 = inv2; +} + +static inline float vmathM3Determinant( const VmathMatrix3 *mat ) +{ + VmathVector3 tmpV3_0; + vmathV3Cross( &tmpV3_0, &mat->col0, &mat->col1 ); + return vmathV3Dot( &mat->col2, &tmpV3_0 ); +} + +static inline void vmathM3Add( VmathMatrix3 *result, const VmathMatrix3 *mat0, const VmathMatrix3 *mat1 ) +{ + vmathV3Add( &result->col0, &mat0->col0, &mat1->col0 ); + vmathV3Add( &result->col1, &mat0->col1, &mat1->col1 ); + vmathV3Add( &result->col2, &mat0->col2, &mat1->col2 ); +} + +static inline void vmathM3Sub( VmathMatrix3 *result, const VmathMatrix3 *mat0, const VmathMatrix3 *mat1 ) +{ + vmathV3Sub( &result->col0, &mat0->col0, &mat1->col0 ); + vmathV3Sub( &result->col1, &mat0->col1, &mat1->col1 ); + vmathV3Sub( &result->col2, &mat0->col2, &mat1->col2 ); +} + +static inline void vmathM3Neg( VmathMatrix3 *result, const VmathMatrix3 *mat ) +{ + vmathV3Neg( &result->col0, &mat->col0 ); + vmathV3Neg( &result->col1, &mat->col1 ); + vmathV3Neg( &result->col2, &mat->col2 ); +} + +static inline void vmathM3AbsPerElem( VmathMatrix3 *result, const VmathMatrix3 *mat ) +{ + vmathV3AbsPerElem( &result->col0, &mat->col0 ); + vmathV3AbsPerElem( &result->col1, &mat->col1 ); + vmathV3AbsPerElem( &result->col2, &mat->col2 ); +} + +static inline void vmathM3ScalarMul( VmathMatrix3 *result, const VmathMatrix3 *mat, float scalar ) +{ + vmathV3ScalarMul( &result->col0, &mat->col0, scalar ); + vmathV3ScalarMul( &result->col1, &mat->col1, scalar ); + vmathV3ScalarMul( &result->col2, &mat->col2, scalar ); +} + +static inline void vmathM3MulV3( VmathVector3 *result, const VmathMatrix3 *mat, const VmathVector3 *vec ) +{ + vec_float4 res; + vec_float4 xxxx, yyyy, zzzz; + vec_uchar16 shuffle_xxxx = (vec_uchar16)spu_splats((int)0x00010203); + vec_uchar16 shuffle_yyyy = (vec_uchar16)spu_splats((int)0x04050607); + vec_uchar16 shuffle_zzzz = (vec_uchar16)spu_splats((int)0x08090a0b); + xxxx = spu_shuffle( vec->vec128, vec->vec128, shuffle_xxxx ); + yyyy = spu_shuffle( vec->vec128, vec->vec128, shuffle_yyyy ); + zzzz = spu_shuffle( vec->vec128, vec->vec128, shuffle_zzzz ); + res = spu_mul( mat->col0.vec128, xxxx ); + res = spu_madd( mat->col1.vec128, yyyy, res ); + res = spu_madd( mat->col2.vec128, zzzz, res ); + result->vec128 = res; +} + +static inline void vmathM3Mul( VmathMatrix3 *result, const VmathMatrix3 *mat0, const VmathMatrix3 *mat1 ) +{ + VmathMatrix3 tmpResult; + vmathM3MulV3( &tmpResult.col0, mat0, &mat1->col0 ); + vmathM3MulV3( &tmpResult.col1, mat0, &mat1->col1 ); + vmathM3MulV3( &tmpResult.col2, mat0, &mat1->col2 ); + vmathM3Copy( result, &tmpResult ); +} + +static inline void vmathM3MulPerElem( VmathMatrix3 *result, const VmathMatrix3 *mat0, const VmathMatrix3 *mat1 ) +{ + vmathV3MulPerElem( &result->col0, &mat0->col0, &mat1->col0 ); + vmathV3MulPerElem( &result->col1, &mat0->col1, &mat1->col1 ); + vmathV3MulPerElem( &result->col2, &mat0->col2, &mat1->col2 ); +} + +static inline void vmathM3MakeIdentity( VmathMatrix3 *result ) +{ + vmathV3MakeXAxis( &result->col0 ); + vmathV3MakeYAxis( &result->col1 ); + vmathV3MakeZAxis( &result->col2 ); +} + +static inline void vmathM3MakeRotationX( VmathMatrix3 *result, float radians ) +{ + vec_float4 s, c, res1, res2; + vec_uint4 select_y, select_z; + vec_float4 zero; + select_y = (vec_uint4)spu_maskb(0x0f00); + select_z = (vec_uint4)spu_maskb(0x00f0); + zero = spu_splats(0.0f); + sincosf4( spu_splats(radians), &s, &c ); + res1 = spu_sel( zero, c, select_y ); + res1 = spu_sel( res1, s, select_z ); + res2 = spu_sel( zero, negatef4(s), select_y ); + res2 = spu_sel( res2, c, select_z ); + vmathV3MakeXAxis( &result->col0 ); + result->col1.vec128 = res1; + result->col2.vec128 = res2; +} + +static inline void vmathM3MakeRotationY( VmathMatrix3 *result, float radians ) +{ + vec_float4 s, c, res0, res2; + vec_uint4 select_x, select_z; + vec_float4 zero; + select_x = (vec_uint4)spu_maskb(0xf000); + select_z = (vec_uint4)spu_maskb(0x00f0); + zero = spu_splats(0.0f); + sincosf4( spu_splats(radians), &s, &c ); + res0 = spu_sel( zero, c, select_x ); + res0 = spu_sel( res0, negatef4(s), select_z ); + res2 = spu_sel( zero, s, select_x ); + res2 = spu_sel( res2, c, select_z ); + result->col0.vec128 = res0; + vmathV3MakeYAxis( &result->col1 ); + result->col2.vec128 = res2; +} + +static inline void vmathM3MakeRotationZ( VmathMatrix3 *result, float radians ) +{ + vec_float4 s, c, res0, res1; + vec_uint4 select_x, select_y; + vec_float4 zero; + select_x = (vec_uint4)spu_maskb(0xf000); + select_y = (vec_uint4)spu_maskb(0x0f00); + zero = spu_splats(0.0f); + sincosf4( spu_splats(radians), &s, &c ); + res0 = spu_sel( zero, c, select_x ); + res0 = spu_sel( res0, s, select_y ); + res1 = spu_sel( zero, negatef4(s), select_x ); + res1 = spu_sel( res1, c, select_y ); + result->col0.vec128 = res0; + result->col1.vec128 = res1; + vmathV3MakeZAxis( &result->col2 ); +} + +static inline void vmathM3MakeRotationZYX( VmathMatrix3 *result, const VmathVector3 *radiansXYZ ) +{ + vec_float4 angles, s, negS, c, X0, X1, Y0, Y1, Z0, Z1, tmp; + vec_uchar16 shuffle_xxxx = (vec_uchar16)spu_splats((int)0x00010203); + angles = radiansXYZ->vec128; + angles = spu_insert( 0.0f, angles, 3 ); + sincosf4( angles, &s, &c ); + negS = negatef4( s ); + Z0 = spu_shuffle( s, c, _VECTORMATH_SHUF_CZD0 ); + Z1 = spu_shuffle( c, negS, _VECTORMATH_SHUF_CZD0 ); + Y0 = spu_shuffle( negS, c, _VECTORMATH_SHUF_BBY0 ); + Y1 = spu_shuffle( c, s, _VECTORMATH_SHUF_BBY0 ); + X0 = spu_shuffle( s, s, shuffle_xxxx ); + X1 = spu_shuffle( c, c, shuffle_xxxx ); + tmp = spu_mul( Z0, Y1 ); + result->col0.vec128 = spu_mul( Z0, Y0 ); + result->col1.vec128 = spu_madd( Z1, X1, spu_mul( tmp, X0 ) ); + result->col2.vec128 = spu_nmsub( Z1, X0, spu_mul( tmp, X1 ) ); +} + +static inline void vmathM3MakeRotationAxis( VmathMatrix3 *result, float radians, const VmathVector3 *unitVec ) +{ + vec_float4 axis, s, c, oneMinusC, axisS, negAxisS, xxxx, yyyy, zzzz, tmp0, tmp1, tmp2; + vec_uchar16 shuffle_xxxx = (vec_uchar16)spu_splats((int)0x00010203); + vec_uchar16 shuffle_yyyy = (vec_uchar16)spu_splats((int)0x04050607); + vec_uchar16 shuffle_zzzz = (vec_uchar16)spu_splats((int)0x08090a0b); + axis = unitVec->vec128; + sincosf4( spu_splats( radians ), &s, &c ); + xxxx = spu_shuffle( axis, axis, shuffle_xxxx ); + yyyy = spu_shuffle( axis, axis, shuffle_yyyy ); + zzzz = spu_shuffle( axis, axis, shuffle_zzzz ); + oneMinusC = spu_sub( spu_splats(1.0f), c ); + axisS = spu_mul( axis, s ); + negAxisS = negatef4( axisS ); + tmp0 = spu_shuffle( axisS, negAxisS, _VECTORMATH_SHUF_0ZB0 ); + tmp1 = spu_shuffle( axisS, negAxisS, _VECTORMATH_SHUF_C0X0 ); + tmp2 = spu_shuffle( axisS, negAxisS, _VECTORMATH_SHUF_YA00 ); + tmp0 = spu_sel( tmp0, c, (vec_uint4)spu_maskb(0xf000) ); + tmp1 = spu_sel( tmp1, c, (vec_uint4)spu_maskb(0x0f00) ); + tmp2 = spu_sel( tmp2, c, (vec_uint4)spu_maskb(0x00f0) ); + result->col0.vec128 = spu_madd( spu_mul( axis, xxxx ), oneMinusC, tmp0 ); + result->col1.vec128 = spu_madd( spu_mul( axis, yyyy ), oneMinusC, tmp1 ); + result->col2.vec128 = spu_madd( spu_mul( axis, zzzz ), oneMinusC, tmp2 ); +} + +static inline void vmathM3MakeRotationQ( VmathMatrix3 *result, const VmathQuat *unitQuat ) +{ + vmathM3MakeFromQ( result, unitQuat ); +} + +static inline void vmathM3MakeScale( VmathMatrix3 *result, const VmathVector3 *scaleVec ) +{ + vec_float4 zero = spu_splats(0.0f); + result->col0.vec128 = spu_sel( zero, scaleVec->vec128, (vec_uint4)spu_maskb(0xf000) ); + result->col1.vec128 = spu_sel( zero, scaleVec->vec128, (vec_uint4)spu_maskb(0x0f00) ); + result->col2.vec128 = spu_sel( zero, scaleVec->vec128, (vec_uint4)spu_maskb(0x00f0) ); +} + +static inline void vmathM3AppendScale( VmathMatrix3 *result, const VmathMatrix3 *mat, const VmathVector3 *scaleVec ) +{ + vmathV3ScalarMul( &result->col0, &mat->col0, vmathV3GetX( scaleVec ) ); + vmathV3ScalarMul( &result->col1, &mat->col1, vmathV3GetY( scaleVec ) ); + vmathV3ScalarMul( &result->col2, &mat->col2, vmathV3GetZ( scaleVec ) ); +} + +static inline void vmathM3PrependScale( VmathMatrix3 *result, const VmathVector3 *scaleVec, const VmathMatrix3 *mat ) +{ + vmathV3MulPerElem( &result->col0, &mat->col0, scaleVec ); + vmathV3MulPerElem( &result->col1, &mat->col1, scaleVec ); + vmathV3MulPerElem( &result->col2, &mat->col2, scaleVec ); +} + +static inline void vmathM3Select( VmathMatrix3 *result, const VmathMatrix3 *mat0, const VmathMatrix3 *mat1, unsigned int select1 ) +{ + vmathV3Select( &result->col0, &mat0->col0, &mat1->col0, select1 ); + vmathV3Select( &result->col1, &mat0->col1, &mat1->col1, select1 ); + vmathV3Select( &result->col2, &mat0->col2, &mat1->col2, select1 ); +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathM3Print( const VmathMatrix3 *mat ) +{ + VmathVector3 tmpV3_0, tmpV3_1, tmpV3_2; + vmathM3GetRow( &tmpV3_0, mat, 0 ); + vmathV3Print( &tmpV3_0 ); + vmathM3GetRow( &tmpV3_1, mat, 1 ); + vmathV3Print( &tmpV3_1 ); + vmathM3GetRow( &tmpV3_2, mat, 2 ); + vmathV3Print( &tmpV3_2 ); +} + +static inline void vmathM3Prints( const VmathMatrix3 *mat, const char *name ) +{ + printf("%s:\n", name); + vmathM3Print( mat ); +} + +#endif + +static inline void vmathM4Copy( VmathMatrix4 *result, const VmathMatrix4 *mat ) +{ + vmathV4Copy( &result->col0, &mat->col0 ); + vmathV4Copy( &result->col1, &mat->col1 ); + vmathV4Copy( &result->col2, &mat->col2 ); + vmathV4Copy( &result->col3, &mat->col3 ); +} + +static inline void vmathM4MakeFromScalar( VmathMatrix4 *result, float scalar ) +{ + vmathV4MakeFromScalar( &result->col0, scalar ); + vmathV4MakeFromScalar( &result->col1, scalar ); + vmathV4MakeFromScalar( &result->col2, scalar ); + vmathV4MakeFromScalar( &result->col3, scalar ); +} + +static inline void vmathM4MakeFromT3( VmathMatrix4 *result, const VmathTransform3 *mat ) +{ + vmathV4MakeFromV3Scalar( &result->col0, &mat->col0, 0.0f ); + vmathV4MakeFromV3Scalar( &result->col1, &mat->col1, 0.0f ); + vmathV4MakeFromV3Scalar( &result->col2, &mat->col2, 0.0f ); + vmathV4MakeFromV3Scalar( &result->col3, &mat->col3, 1.0f ); +} + +static inline void vmathM4MakeFromCols( VmathMatrix4 *result, const VmathVector4 *_col0, const VmathVector4 *_col1, const VmathVector4 *_col2, const VmathVector4 *_col3 ) +{ + vmathV4Copy( &result->col0, _col0 ); + vmathV4Copy( &result->col1, _col1 ); + vmathV4Copy( &result->col2, _col2 ); + vmathV4Copy( &result->col3, _col3 ); +} + +static inline void vmathM4MakeFromM3V3( VmathMatrix4 *result, const VmathMatrix3 *mat, const VmathVector3 *translateVec ) +{ + vmathV4MakeFromV3Scalar( &result->col0, &mat->col0, 0.0f ); + vmathV4MakeFromV3Scalar( &result->col1, &mat->col1, 0.0f ); + vmathV4MakeFromV3Scalar( &result->col2, &mat->col2, 0.0f ); + vmathV4MakeFromV3Scalar( &result->col3, translateVec, 1.0f ); +} + +static inline void vmathM4MakeFromQV3( VmathMatrix4 *result, const VmathQuat *unitQuat, const VmathVector3 *translateVec ) +{ + VmathMatrix3 mat; + vmathM3MakeFromQ( &mat, unitQuat ); + vmathV4MakeFromV3Scalar( &result->col0, &mat.col0, 0.0f ); + vmathV4MakeFromV3Scalar( &result->col1, &mat.col1, 0.0f ); + vmathV4MakeFromV3Scalar( &result->col2, &mat.col2, 0.0f ); + vmathV4MakeFromV3Scalar( &result->col3, translateVec, 1.0f ); +} + +static inline void vmathM4SetCol0( VmathMatrix4 *result, const VmathVector4 *_col0 ) +{ + vmathV4Copy( &result->col0, _col0 ); +} + +static inline void vmathM4SetCol1( VmathMatrix4 *result, const VmathVector4 *_col1 ) +{ + vmathV4Copy( &result->col1, _col1 ); +} + +static inline void vmathM4SetCol2( VmathMatrix4 *result, const VmathVector4 *_col2 ) +{ + vmathV4Copy( &result->col2, _col2 ); +} + +static inline void vmathM4SetCol3( VmathMatrix4 *result, const VmathVector4 *_col3 ) +{ + vmathV4Copy( &result->col3, _col3 ); +} + +static inline void vmathM4SetCol( VmathMatrix4 *result, int col, const VmathVector4 *vec ) +{ + vmathV4Copy( (&result->col0 + col), vec ); +} + +static inline void vmathM4SetRow( VmathMatrix4 *result, int row, const VmathVector4 *vec ) +{ + vmathV4SetElem( &result->col0, row, vmathV4GetElem( vec, 0 ) ); + vmathV4SetElem( &result->col1, row, vmathV4GetElem( vec, 1 ) ); + vmathV4SetElem( &result->col2, row, vmathV4GetElem( vec, 2 ) ); + vmathV4SetElem( &result->col3, row, vmathV4GetElem( vec, 3 ) ); +} + +static inline void vmathM4SetElem( VmathMatrix4 *result, int col, int row, float val ) +{ + VmathVector4 tmpV3_0; + vmathM4GetCol( &tmpV3_0, result, col ); + vmathV4SetElem( &tmpV3_0, row, val ); + vmathM4SetCol( result, col, &tmpV3_0 ); +} + +static inline float vmathM4GetElem( const VmathMatrix4 *mat, int col, int row ) +{ + VmathVector4 tmpV4_0; + vmathM4GetCol( &tmpV4_0, mat, col ); + return vmathV4GetElem( &tmpV4_0, row ); +} + +static inline void vmathM4GetCol0( VmathVector4 *result, const VmathMatrix4 *mat ) +{ + vmathV4Copy( result, &mat->col0 ); +} + +static inline void vmathM4GetCol1( VmathVector4 *result, const VmathMatrix4 *mat ) +{ + vmathV4Copy( result, &mat->col1 ); +} + +static inline void vmathM4GetCol2( VmathVector4 *result, const VmathMatrix4 *mat ) +{ + vmathV4Copy( result, &mat->col2 ); +} + +static inline void vmathM4GetCol3( VmathVector4 *result, const VmathMatrix4 *mat ) +{ + vmathV4Copy( result, &mat->col3 ); +} + +static inline void vmathM4GetCol( VmathVector4 *result, const VmathMatrix4 *mat, int col ) +{ + vmathV4Copy( result, (&mat->col0 + col) ); +} + +static inline void vmathM4GetRow( VmathVector4 *result, const VmathMatrix4 *mat, int row ) +{ + vmathV4MakeFromElems( result, vmathV4GetElem( &mat->col0, row ), vmathV4GetElem( &mat->col1, row ), vmathV4GetElem( &mat->col2, row ), vmathV4GetElem( &mat->col3, row ) ); +} + +static inline void vmathM4Transpose( VmathMatrix4 *result, const VmathMatrix4 *mat ) +{ + vec_float4 tmp0, tmp1, tmp2, tmp3, res0, res1, res2, res3; + tmp0 = spu_shuffle( mat->col0.vec128, mat->col2.vec128, _VECTORMATH_SHUF_XAYB ); + tmp1 = spu_shuffle( mat->col1.vec128, mat->col3.vec128, _VECTORMATH_SHUF_XAYB ); + tmp2 = spu_shuffle( mat->col0.vec128, mat->col2.vec128, _VECTORMATH_SHUF_ZCWD ); + tmp3 = spu_shuffle( mat->col1.vec128, mat->col3.vec128, _VECTORMATH_SHUF_ZCWD ); + res0 = spu_shuffle( tmp0, tmp1, _VECTORMATH_SHUF_XAYB ); + res1 = spu_shuffle( tmp0, tmp1, _VECTORMATH_SHUF_ZCWD ); + res2 = spu_shuffle( tmp2, tmp3, _VECTORMATH_SHUF_XAYB ); + res3 = spu_shuffle( tmp2, tmp3, _VECTORMATH_SHUF_ZCWD ); + result->col0.vec128 = res0; + result->col1.vec128 = res1; + result->col2.vec128 = res2; + result->col3.vec128 = res3; +} + +static inline void vmathM4Inverse( VmathMatrix4 *result, const VmathMatrix4 *mat ) +{ + /* function implementation based on code from STIDC SDK: */ + /* -------------------------------------------------------------- */ + /* PLEASE DO NOT MODIFY THIS SECTION */ + /* This prolog section is automatically generated. */ + /* */ + /* (C)Copyright */ + /* Sony Computer Entertainment, Inc., */ + /* Toshiba Corporation, */ + /* International Business Machines Corporation, */ + /* 2001,2002. */ + /* S/T/I Confidential Information */ + /* -------------------------------------------------------------- */ + vec_float4 in0, in1, in2, in3; + vec_float4 tmp0, tmp1, tmp2, tmp3; + vec_float4 cof0, cof1, cof2, cof3; + vec_float4 t0, t1, t2, t3; + vec_float4 t01, t02, t03, t12, t23; + vec_float4 t1r, t2r; + vec_float4 t01r, t02r, t03r, t12r, t23r; + vec_float4 t1r3, t1r3r; + vec_float4 det, det1, det2, det3, invdet; + in0 = mat->col0.vec128; + in1 = mat->col1.vec128; + in2 = mat->col2.vec128; + in3 = mat->col3.vec128; + /* Perform transform of the input matrix of the form: + * A B C D + * E F G H + * I J K L + * M N O P + * + * The pseudo transpose of the input matrix is trans: + * A E I M + * J N B F + * C G K O + * L P D H + */ + tmp0 = spu_shuffle(in0, in1, _VECTORMATH_SHUF_XAZC); /* A E C G */ + tmp1 = spu_shuffle(in2, in3, _VECTORMATH_SHUF_XAZC); /* I M K O */ + tmp2 = spu_shuffle(in0, in1, _VECTORMATH_SHUF_YBWD); /* B F D H */ + tmp3 = spu_shuffle(in2, in3, _VECTORMATH_SHUF_YBWD); /* J N L P */ + t0 = spu_shuffle(tmp0, tmp1, _VECTORMATH_SHUF_XYAB); /* A E I M */ + t1 = spu_shuffle(tmp3, tmp2, _VECTORMATH_SHUF_XYAB); /* J N B F */ + t2 = spu_shuffle(tmp0, tmp1, _VECTORMATH_SHUF_ZWCD); /* C G K O */ + t3 = spu_shuffle(tmp3, tmp2, _VECTORMATH_SHUF_ZWCD); /* L P D H */ + /* Generate a cofactor matrix. The computed cofactors reside in + * cof0, cof1, cof2, cof3. + */ + t23 = spu_mul(t2, t3); /* CL GP KD OH */ + t23 = spu_shuffle(t23, t23, _VECTORMATH_SHUF_YXWZ); /* GP CL OH KD */ + cof0 = spu_mul(t1, t23); /* JGP NCL BOH FKD */ + cof1 = spu_mul(t0, t23); /* AGP ECL IOH MKD */ + t23r = spu_rlqwbyte(t23, 8); /* OH KD GP CL */ + cof0 = spu_msub(t1, t23r, cof0); /* JOH NKD BGP FCL - cof0 */ + cof1 = spu_msub(t0, t23r, cof1); /* AOH EKD IGP MCL - cof1 */ + cof1 = spu_rlqwbyte(cof1, 8); /* IGP MCL AOH EKD - IOH MKD AGP ECL */ + + t12 = spu_mul(t1, t2); /* JC NG BK FO */ + t12 = spu_shuffle(t12, t12, _VECTORMATH_SHUF_YXWZ); /* NG JC FO BK */ + cof0 = spu_madd(t3, t12, cof0); /* LNG PJC DFO HBK + cof0 */ + cof3 = spu_mul(t0, t12); /* ANG EJC IFO MBK */ + t12r = spu_rlqwbyte(t12, 8); /* FO BK NG JC */ + cof0 = spu_nmsub(t3, t12r, cof0); /* cof0 - LFO PBK DNG HJC */ + cof3 = spu_msub(t0, t12r, cof3); /* AFO EBK ING MJC - cof3 */ + cof3 = spu_rlqwbyte(cof3, 8); /* ING MJC AFO EBK - IFO MBK ANG EJC */ + t1r = spu_rlqwbyte(t1, 8); /* B F J N */ + t2r = spu_rlqwbyte(t2, 8); /* K O C G */ + t1r3 = spu_mul(t1r, t3); /* BL FP JD NH */ + t1r3 = spu_shuffle(t1r3, t1r3, _VECTORMATH_SHUF_YXWZ); /* FP BL NH JD */ + cof0 = spu_madd(t2r, t1r3, cof0); /* KFP OBL CNH GJD + cof0 */ + cof2 = spu_mul(t0, t1r3); /* AFP EBL INH MJD */ + t1r3r = spu_rlqwbyte(t1r3, 8); /* NH JD FP BL */ + cof0 = spu_nmsub(t2r, t1r3r, cof0); /* cof0 - KNH OJD CFP GBL */ + cof2 = spu_msub(t0, t1r3r, cof2); /* ANH EJD IFP MBL - cof2 */ + cof2 = spu_rlqwbyte(cof2, 8); /* IFP MBL ANH EJD - INH MJD AFP EBL */ + t01 = spu_mul(t0, t1); /* AJ EN IB MF */ + t01 = spu_shuffle(t01, t01, _VECTORMATH_SHUF_YXWZ); /* EN AJ MF IB */ + cof2 = spu_madd(t3, t01, cof2); /* LEN PAJ DMF HIB + cof2 */ + cof3 = spu_msub(t2r, t01, cof3); /* KEN OAJ CMF GIB - cof3 */ + t01r = spu_rlqwbyte(t01, 8); /* MF IB EN AJ */ + cof2 = spu_msub(t3, t01r, cof2); /* LMF PIB DEN HAJ - cof2 */ + cof3 = spu_nmsub(t2r, t01r, cof3); /* cof3 - KMF OIB CEN GAJ */ + t03 = spu_mul(t0, t3); /* AL EP ID MH */ + t03 = spu_shuffle(t03, t03, _VECTORMATH_SHUF_YXWZ); /* EP AL MH ID */ + cof1 = spu_nmsub(t2r, t03, cof1); /* cof1 - KEP OAL CMH GID */ + cof2 = spu_madd(t1, t03, cof2); /* JEP NAL BMH FID + cof2 */ + t03r = spu_rlqwbyte(t03, 8); /* MH ID EP AL */ + cof1 = spu_madd(t2r, t03r, cof1); /* KMH OID CEP GAL + cof1 */ + cof2 = spu_nmsub(t1, t03r, cof2); /* cof2 - JMH NID BEP FAL */ + t02 = spu_mul(t0, t2r); /* AK EO IC MG */ + t02 = spu_shuffle(t02, t02, _VECTORMATH_SHUF_YXWZ); /* E0 AK MG IC */ + cof1 = spu_madd(t3, t02, cof1); /* LEO PAK DMG HIC + cof1 */ + cof3 = spu_nmsub(t1, t02, cof3); /* cof3 - JEO NAK BMG FIC */ + t02r = spu_rlqwbyte(t02, 8); /* MG IC EO AK */ + cof1 = spu_nmsub(t3, t02r, cof1); /* cof1 - LMG PIC DEO HAK */ + cof3 = spu_madd(t1, t02r, cof3); /* JMG NIC BEO FAK + cof3 */ + /* Compute the determinant of the matrix + * + * det = sum_across(t0 * cof0); + * + * We perform a sum across the entire vector so that + * we don't have to splat the result when multiplying the + * cofactors by the inverse of the determinant. + */ + det = spu_mul(t0, cof0); + det1 = spu_rlqwbyte(det, 4); + det2 = spu_rlqwbyte(det, 8); + det3 = spu_rlqwbyte(det, 12); + det = spu_add(det, det1); + det2 = spu_add(det2, det3); + det = spu_add(det, det2); + /* Compute the reciprocal of the determinant. + */ + invdet = recipf4(det); + /* Multiply the cofactors by the reciprocal of the determinant. + */ + result->col0.vec128 = spu_mul(cof0, invdet); + result->col1.vec128 = spu_mul(cof1, invdet); + result->col2.vec128 = spu_mul(cof2, invdet); + result->col3.vec128 = spu_mul(cof3, invdet); +} + +static inline void vmathM4AffineInverse( VmathMatrix4 *result, const VmathMatrix4 *mat ) +{ + VmathTransform3 affineMat, tmpT3_0; + VmathVector3 tmpV3_0, tmpV3_1, tmpV3_2, tmpV3_3; + vmathV4GetXYZ( &tmpV3_0, &mat->col0 ); + vmathT3SetCol0( &affineMat, &tmpV3_0 ); + vmathV4GetXYZ( &tmpV3_1, &mat->col1 ); + vmathT3SetCol1( &affineMat, &tmpV3_1 ); + vmathV4GetXYZ( &tmpV3_2, &mat->col2 ); + vmathT3SetCol2( &affineMat, &tmpV3_2 ); + vmathV4GetXYZ( &tmpV3_3, &mat->col3 ); + vmathT3SetCol3( &affineMat, &tmpV3_3 ); + vmathT3Inverse( &tmpT3_0, &affineMat ); + vmathM4MakeFromT3( result, &tmpT3_0 ); +} + +static inline void vmathM4OrthoInverse( VmathMatrix4 *result, const VmathMatrix4 *mat ) +{ + VmathTransform3 affineMat, tmpT3_0; + VmathVector3 tmpV3_0, tmpV3_1, tmpV3_2, tmpV3_3; + vmathV4GetXYZ( &tmpV3_0, &mat->col0 ); + vmathT3SetCol0( &affineMat, &tmpV3_0 ); + vmathV4GetXYZ( &tmpV3_1, &mat->col1 ); + vmathT3SetCol1( &affineMat, &tmpV3_1 ); + vmathV4GetXYZ( &tmpV3_2, &mat->col2 ); + vmathT3SetCol2( &affineMat, &tmpV3_2 ); + vmathV4GetXYZ( &tmpV3_3, &mat->col3 ); + vmathT3SetCol3( &affineMat, &tmpV3_3 ); + vmathT3OrthoInverse( &tmpT3_0, &affineMat ); + vmathM4MakeFromT3( result, &tmpT3_0 ); +} + +static inline float vmathM4Determinant( const VmathMatrix4 *mat ) +{ + /* function implementation based on code from STIDC SDK: */ + /* -------------------------------------------------------------- */ + /* PLEASE DO NOT MODIFY THIS SECTION */ + /* This prolog section is automatically generated. */ + /* */ + /* (C)Copyright */ + /* Sony Computer Entertainment, Inc., */ + /* Toshiba Corporation, */ + /* International Business Machines Corporation, */ + /* 2001,2002. */ + /* S/T/I Confidential Information */ + /* -------------------------------------------------------------- */ + vec_float4 in0, in1, in2, in3; + vec_float4 tmp0, tmp1, tmp2, tmp3; + vec_float4 cof0; + vec_float4 t0, t1, t2, t3; + vec_float4 t12, t23; + vec_float4 t1r, t2r; + vec_float4 t12r, t23r; + vec_float4 t1r3, t1r3r; + in0 = mat->col0.vec128; + in1 = mat->col1.vec128; + in2 = mat->col2.vec128; + in3 = mat->col3.vec128; + /* Perform transform of the input matrix of the form: + * A B C D + * E F G H + * I J K L + * M N O P + * + * The pseudo transpose of the input matrix is trans: + * A E I M + * J N B F + * C G K O + * L P D H + */ + tmp0 = spu_shuffle(in0, in1, _VECTORMATH_SHUF_XAZC); /* A E C G */ + tmp1 = spu_shuffle(in2, in3, _VECTORMATH_SHUF_XAZC); /* I M K O */ + tmp2 = spu_shuffle(in0, in1, _VECTORMATH_SHUF_YBWD); /* B F D H */ + tmp3 = spu_shuffle(in2, in3, _VECTORMATH_SHUF_YBWD); /* J N L P */ + t0 = spu_shuffle(tmp0, tmp1, _VECTORMATH_SHUF_XYAB); /* A E I M */ + t1 = spu_shuffle(tmp3, tmp2, _VECTORMATH_SHUF_XYAB); /* J N B F */ + t2 = spu_shuffle(tmp0, tmp1, _VECTORMATH_SHUF_ZWCD); /* C G K O */ + t3 = spu_shuffle(tmp3, tmp2, _VECTORMATH_SHUF_ZWCD); /* L P D H */ + /* Generate a cofactor matrix. The computed cofactors reside in + * cof0, cof1, cof2, cof3. + */ + t23 = spu_mul(t2, t3); /* CL GP KD OH */ + t23 = spu_shuffle(t23, t23, _VECTORMATH_SHUF_YXWZ); /* GP CL OH KD */ + cof0 = spu_mul(t1, t23); /* JGP NCL BOH FKD */ + t23r = spu_rlqwbyte(t23, 8); /* OH KD GP CL */ + cof0 = spu_msub(t1, t23r, cof0); /* JOH NKD BGP FCL - cof0 */ + + t12 = spu_mul(t1, t2); /* JC NG BK FO */ + t12 = spu_shuffle(t12, t12, _VECTORMATH_SHUF_YXWZ); /* NG JC FO BK */ + cof0 = spu_madd(t3, t12, cof0); /* LNG PJC DFO HBK + cof0 */ + t12r = spu_rlqwbyte(t12, 8); /* FO BK NG JC */ + cof0 = spu_nmsub(t3, t12r, cof0); /* cof0 - LFO PBK DNG HJC */ + t1r = spu_rlqwbyte(t1, 8); /* B F J N */ + t2r = spu_rlqwbyte(t2, 8); /* K O C G */ + t1r3 = spu_mul(t1r, t3); /* BL FP JD NH */ + t1r3 = spu_shuffle(t1r3, t1r3, _VECTORMATH_SHUF_YXWZ); /* FP BL NH JD */ + cof0 = spu_madd(t2r, t1r3, cof0); /* KFP OBL CNH GJD + cof0 */ + t1r3r = spu_rlqwbyte(t1r3, 8); /* NH JD FP BL */ + cof0 = spu_nmsub(t2r, t1r3r, cof0); /* cof0 - KNH OJD CFP GBL */ + return spu_extract( _vmathVfDot4(t0,cof0), 0 ); +} + +static inline void vmathM4Add( VmathMatrix4 *result, const VmathMatrix4 *mat0, const VmathMatrix4 *mat1 ) +{ + vmathV4Add( &result->col0, &mat0->col0, &mat1->col0 ); + vmathV4Add( &result->col1, &mat0->col1, &mat1->col1 ); + vmathV4Add( &result->col2, &mat0->col2, &mat1->col2 ); + vmathV4Add( &result->col3, &mat0->col3, &mat1->col3 ); +} + +static inline void vmathM4Sub( VmathMatrix4 *result, const VmathMatrix4 *mat0, const VmathMatrix4 *mat1 ) +{ + vmathV4Sub( &result->col0, &mat0->col0, &mat1->col0 ); + vmathV4Sub( &result->col1, &mat0->col1, &mat1->col1 ); + vmathV4Sub( &result->col2, &mat0->col2, &mat1->col2 ); + vmathV4Sub( &result->col3, &mat0->col3, &mat1->col3 ); +} + +static inline void vmathM4Neg( VmathMatrix4 *result, const VmathMatrix4 *mat ) +{ + vmathV4Neg( &result->col0, &mat->col0 ); + vmathV4Neg( &result->col1, &mat->col1 ); + vmathV4Neg( &result->col2, &mat->col2 ); + vmathV4Neg( &result->col3, &mat->col3 ); +} + +static inline void vmathM4AbsPerElem( VmathMatrix4 *result, const VmathMatrix4 *mat ) +{ + vmathV4AbsPerElem( &result->col0, &mat->col0 ); + vmathV4AbsPerElem( &result->col1, &mat->col1 ); + vmathV4AbsPerElem( &result->col2, &mat->col2 ); + vmathV4AbsPerElem( &result->col3, &mat->col3 ); +} + +static inline void vmathM4ScalarMul( VmathMatrix4 *result, const VmathMatrix4 *mat, float scalar ) +{ + vmathV4ScalarMul( &result->col0, &mat->col0, scalar ); + vmathV4ScalarMul( &result->col1, &mat->col1, scalar ); + vmathV4ScalarMul( &result->col2, &mat->col2, scalar ); + vmathV4ScalarMul( &result->col3, &mat->col3, scalar ); +} + +static inline void vmathM4MulV4( VmathVector4 *result, const VmathMatrix4 *mat, const VmathVector4 *vec ) +{ + vec_float4 tmp0, tmp1, res; + vec_float4 xxxx, yyyy, zzzz, wwww; + vec_uchar16 shuffle_xxxx = (vec_uchar16)spu_splats((int)0x00010203); + vec_uchar16 shuffle_yyyy = (vec_uchar16)spu_splats((int)0x04050607); + vec_uchar16 shuffle_zzzz = (vec_uchar16)spu_splats((int)0x08090a0b); + vec_uchar16 shuffle_wwww = (vec_uchar16)spu_splats((int)0x0c0d0e0f); + xxxx = spu_shuffle( vec->vec128, vec->vec128, shuffle_xxxx ); + yyyy = spu_shuffle( vec->vec128, vec->vec128, shuffle_yyyy ); + zzzz = spu_shuffle( vec->vec128, vec->vec128, shuffle_zzzz ); + wwww = spu_shuffle( vec->vec128, vec->vec128, shuffle_wwww ); + tmp0 = spu_mul( mat->col0.vec128, xxxx ); + tmp1 = spu_mul( mat->col1.vec128, yyyy ); + tmp0 = spu_madd( mat->col2.vec128, zzzz, tmp0 ); + tmp1 = spu_madd( mat->col3.vec128, wwww, tmp1 ); + res = spu_add( tmp0, tmp1 ); + result->vec128 = res; +} + +static inline void vmathM4MulV3( VmathVector4 *result, const VmathMatrix4 *mat, const VmathVector3 *vec ) +{ + vec_float4 res; + vec_float4 xxxx, yyyy, zzzz; + vec_uchar16 shuffle_xxxx = (vec_uchar16)spu_splats((int)0x00010203); + vec_uchar16 shuffle_yyyy = (vec_uchar16)spu_splats((int)0x04050607); + vec_uchar16 shuffle_zzzz = (vec_uchar16)spu_splats((int)0x08090a0b); + xxxx = spu_shuffle( vec->vec128, vec->vec128, shuffle_xxxx ); + yyyy = spu_shuffle( vec->vec128, vec->vec128, shuffle_yyyy ); + zzzz = spu_shuffle( vec->vec128, vec->vec128, shuffle_zzzz ); + res = spu_mul( mat->col0.vec128, xxxx ); + res = spu_madd( mat->col1.vec128, yyyy, res ); + res = spu_madd( mat->col2.vec128, zzzz, res ); + result->vec128 = res; +} + +static inline void vmathM4MulP3( VmathVector4 *result, const VmathMatrix4 *mat, const VmathPoint3 *pnt ) +{ + vec_float4 tmp0, tmp1, res; + vec_float4 xxxx, yyyy, zzzz; + vec_uchar16 shuffle_xxxx = (vec_uchar16)spu_splats((int)0x00010203); + vec_uchar16 shuffle_yyyy = (vec_uchar16)spu_splats((int)0x04050607); + vec_uchar16 shuffle_zzzz = (vec_uchar16)spu_splats((int)0x08090a0b); + xxxx = spu_shuffle( pnt->vec128, pnt->vec128, shuffle_xxxx ); + yyyy = spu_shuffle( pnt->vec128, pnt->vec128, shuffle_yyyy ); + zzzz = spu_shuffle( pnt->vec128, pnt->vec128, shuffle_zzzz ); + tmp0 = spu_mul( mat->col0.vec128, xxxx ); + tmp1 = spu_mul( mat->col1.vec128, yyyy ); + tmp0 = spu_madd( mat->col2.vec128, zzzz, tmp0 ); + tmp1 = spu_add( mat->col3.vec128, tmp1 ); + res = spu_add( tmp0, tmp1 ); + result->vec128 = res; +} + +static inline void vmathM4Mul( VmathMatrix4 *result, const VmathMatrix4 *mat0, const VmathMatrix4 *mat1 ) +{ + VmathMatrix4 tmpResult; + vmathM4MulV4( &tmpResult.col0, mat0, &mat1->col0 ); + vmathM4MulV4( &tmpResult.col1, mat0, &mat1->col1 ); + vmathM4MulV4( &tmpResult.col2, mat0, &mat1->col2 ); + vmathM4MulV4( &tmpResult.col3, mat0, &mat1->col3 ); + vmathM4Copy( result, &tmpResult ); +} + +static inline void vmathM4MulT3( VmathMatrix4 *result, const VmathMatrix4 *mat, const VmathTransform3 *tfrm1 ) +{ + VmathMatrix4 tmpResult; + VmathPoint3 tmpP3_0; + vmathM4MulV3( &tmpResult.col0, mat, &tfrm1->col0 ); + vmathM4MulV3( &tmpResult.col1, mat, &tfrm1->col1 ); + vmathM4MulV3( &tmpResult.col2, mat, &tfrm1->col2 ); + vmathP3MakeFromV3( &tmpP3_0, &tfrm1->col3 ); + vmathM4MulP3( &tmpResult.col3, mat, &tmpP3_0 ); + vmathM4Copy( result, &tmpResult ); +} + +static inline void vmathM4MulPerElem( VmathMatrix4 *result, const VmathMatrix4 *mat0, const VmathMatrix4 *mat1 ) +{ + vmathV4MulPerElem( &result->col0, &mat0->col0, &mat1->col0 ); + vmathV4MulPerElem( &result->col1, &mat0->col1, &mat1->col1 ); + vmathV4MulPerElem( &result->col2, &mat0->col2, &mat1->col2 ); + vmathV4MulPerElem( &result->col3, &mat0->col3, &mat1->col3 ); +} + +static inline void vmathM4MakeIdentity( VmathMatrix4 *result ) +{ + vmathV4MakeXAxis( &result->col0 ); + vmathV4MakeYAxis( &result->col1 ); + vmathV4MakeZAxis( &result->col2 ); + vmathV4MakeWAxis( &result->col3 ); +} + +static inline void vmathM4SetUpper3x3( VmathMatrix4 *result, const VmathMatrix3 *mat3 ) +{ + vmathV4SetXYZ( &result->col0, &mat3->col0 ); + vmathV4SetXYZ( &result->col1, &mat3->col1 ); + vmathV4SetXYZ( &result->col2, &mat3->col2 ); +} + +static inline void vmathM4GetUpper3x3( VmathMatrix3 *result, const VmathMatrix4 *mat ) +{ + vmathV4GetXYZ( &result->col0, &mat->col0 ); + vmathV4GetXYZ( &result->col1, &mat->col1 ); + vmathV4GetXYZ( &result->col2, &mat->col2 ); +} + +static inline void vmathM4SetTranslation( VmathMatrix4 *result, const VmathVector3 *translateVec ) +{ + vmathV4SetXYZ( &result->col3, translateVec ); +} + +static inline void vmathM4GetTranslation( VmathVector3 *result, const VmathMatrix4 *mat ) +{ + vmathV4GetXYZ( result, &mat->col3 ); +} + +static inline void vmathM4MakeRotationX( VmathMatrix4 *result, float radians ) +{ + vec_float4 s, c, res1, res2; + vec_uint4 select_y, select_z; + vec_float4 zero; + select_y = (vec_uint4)spu_maskb(0x0f00); + select_z = (vec_uint4)spu_maskb(0x00f0); + zero = spu_splats(0.0f); + sincosf4( spu_splats(radians), &s, &c ); + res1 = spu_sel( zero, c, select_y ); + res1 = spu_sel( res1, s, select_z ); + res2 = spu_sel( zero, negatef4(s), select_y ); + res2 = spu_sel( res2, c, select_z ); + vmathV4MakeXAxis( &result->col0 ); + result->col1.vec128 = res1; + result->col2.vec128 = res2; + vmathV4MakeWAxis( &result->col3 ); +} + +static inline void vmathM4MakeRotationY( VmathMatrix4 *result, float radians ) +{ + vec_float4 s, c, res0, res2; + vec_uint4 select_x, select_z; + vec_float4 zero; + select_x = (vec_uint4)spu_maskb(0xf000); + select_z = (vec_uint4)spu_maskb(0x00f0); + zero = spu_splats(0.0f); + sincosf4( spu_splats(radians), &s, &c ); + res0 = spu_sel( zero, c, select_x ); + res0 = spu_sel( res0, negatef4(s), select_z ); + res2 = spu_sel( zero, s, select_x ); + res2 = spu_sel( res2, c, select_z ); + result->col0.vec128 = res0; + vmathV4MakeYAxis( &result->col1 ); + result->col2.vec128 = res2; + vmathV4MakeWAxis( &result->col3 ); +} + +static inline void vmathM4MakeRotationZ( VmathMatrix4 *result, float radians ) +{ + vec_float4 s, c, res0, res1; + vec_uint4 select_x, select_y; + vec_float4 zero; + select_x = (vec_uint4)spu_maskb(0xf000); + select_y = (vec_uint4)spu_maskb(0x0f00); + zero = spu_splats(0.0f); + sincosf4( spu_splats(radians), &s, &c ); + res0 = spu_sel( zero, c, select_x ); + res0 = spu_sel( res0, s, select_y ); + res1 = spu_sel( zero, negatef4(s), select_x ); + res1 = spu_sel( res1, c, select_y ); + result->col0.vec128 = res0; + result->col1.vec128 = res1; + vmathV4MakeZAxis( &result->col2 ); + vmathV4MakeWAxis( &result->col3 ); +} + +static inline void vmathM4MakeRotationZYX( VmathMatrix4 *result, const VmathVector3 *radiansXYZ ) +{ + vec_float4 angles, s, negS, c, X0, X1, Y0, Y1, Z0, Z1, tmp; + vec_uchar16 shuffle_xxxx = (vec_uchar16)spu_splats((int)0x00010203); + angles = radiansXYZ->vec128; + angles = spu_insert( 0.0f, angles, 3 ); + sincosf4( angles, &s, &c ); + negS = negatef4( s ); + Z0 = spu_shuffle( s, c, _VECTORMATH_SHUF_CZD0 ); + Z1 = spu_shuffle( c, negS, _VECTORMATH_SHUF_CZD0 ); + Y0 = spu_shuffle( negS, c, _VECTORMATH_SHUF_BBY0 ); + Y1 = spu_shuffle( c, s, _VECTORMATH_SHUF_BBY0 ); + X0 = spu_shuffle( s, s, shuffle_xxxx ); + X1 = spu_shuffle( c, c, shuffle_xxxx ); + tmp = spu_mul( Z0, Y1 ); + result->col0.vec128 = spu_mul( Z0, Y0 ); + result->col1.vec128 = spu_madd( Z1, X1, spu_mul( tmp, X0 ) ); + result->col2.vec128 = spu_nmsub( Z1, X0, spu_mul( tmp, X1 ) ); + vmathV4MakeWAxis( &result->col3 ); +} + +static inline void vmathM4MakeRotationAxis( VmathMatrix4 *result, float radians, const VmathVector3 *unitVec ) +{ + vec_float4 axis, s, c, oneMinusC, axisS, negAxisS, xxxx, yyyy, zzzz, tmp0, tmp1, tmp2, zeroW; + vec_uchar16 shuffle_xxxx = (vec_uchar16)spu_splats((int)0x00010203); + vec_uchar16 shuffle_yyyy = (vec_uchar16)spu_splats((int)0x04050607); + vec_uchar16 shuffle_zzzz = (vec_uchar16)spu_splats((int)0x08090a0b); + axis = unitVec->vec128; + sincosf4( spu_splats( radians ), &s, &c ); + xxxx = spu_shuffle( axis, axis, shuffle_xxxx ); + yyyy = spu_shuffle( axis, axis, shuffle_yyyy ); + zzzz = spu_shuffle( axis, axis, shuffle_zzzz ); + oneMinusC = spu_sub( spu_splats(1.0f), c ); + axisS = spu_mul( axis, s ); + negAxisS = negatef4( axisS ); + tmp0 = spu_shuffle( axisS, negAxisS, _VECTORMATH_SHUF_0ZB0 ); + tmp1 = spu_shuffle( axisS, negAxisS, _VECTORMATH_SHUF_C0X0 ); + tmp2 = spu_shuffle( axisS, negAxisS, _VECTORMATH_SHUF_YA00 ); + tmp0 = spu_sel( tmp0, c, (vec_uint4)spu_maskb(0xf000) ); + tmp1 = spu_sel( tmp1, c, (vec_uint4)spu_maskb(0x0f00) ); + tmp2 = spu_sel( tmp2, c, (vec_uint4)spu_maskb(0x00f0) ); + zeroW = (vec_float4)spu_maskb(0x000f); + axis = spu_andc( axis, zeroW ); + result->col0.vec128 = spu_madd( spu_mul( axis, xxxx ), oneMinusC, tmp0 ); + result->col1.vec128 = spu_madd( spu_mul( axis, yyyy ), oneMinusC, tmp1 ); + result->col2.vec128 = spu_madd( spu_mul( axis, zzzz ), oneMinusC, tmp2 ); + vmathV4MakeWAxis( &result->col3 ); +} + +static inline void vmathM4MakeRotationQ( VmathMatrix4 *result, const VmathQuat *unitQuat ) +{ + VmathTransform3 tmpT3_0; + vmathT3MakeRotationQ( &tmpT3_0, unitQuat ); + vmathM4MakeFromT3( result, &tmpT3_0 ); +} + +static inline void vmathM4MakeScale( VmathMatrix4 *result, const VmathVector3 *scaleVec ) +{ + vec_float4 zero = spu_splats(0.0f); + result->col0.vec128 = spu_sel( zero, scaleVec->vec128, (vec_uint4)spu_maskb(0xf000) ); + result->col1.vec128 = spu_sel( zero, scaleVec->vec128, (vec_uint4)spu_maskb(0x0f00) ); + result->col2.vec128 = spu_sel( zero, scaleVec->vec128, (vec_uint4)spu_maskb(0x00f0) ); + vmathV4MakeWAxis( &result->col3 ); +} + +static inline void vmathM4AppendScale( VmathMatrix4 *result, const VmathMatrix4 *mat, const VmathVector3 *scaleVec ) +{ + vmathV4ScalarMul( &result->col0, &mat->col0, vmathV3GetX( scaleVec ) ); + vmathV4ScalarMul( &result->col1, &mat->col1, vmathV3GetY( scaleVec ) ); + vmathV4ScalarMul( &result->col2, &mat->col2, vmathV3GetZ( scaleVec ) ); + vmathV4Copy( &result->col3, &mat->col3 ); +} + +static inline void vmathM4PrependScale( VmathMatrix4 *result, const VmathVector3 *scaleVec, const VmathMatrix4 *mat ) +{ + VmathVector4 scale4; + vmathV4MakeFromV3Scalar( &scale4, scaleVec, 1.0f ); + vmathV4MulPerElem( &result->col0, &mat->col0, &scale4 ); + vmathV4MulPerElem( &result->col1, &mat->col1, &scale4 ); + vmathV4MulPerElem( &result->col2, &mat->col2, &scale4 ); + vmathV4MulPerElem( &result->col3, &mat->col3, &scale4 ); +} + +static inline void vmathM4MakeTranslation( VmathMatrix4 *result, const VmathVector3 *translateVec ) +{ + vmathV4MakeXAxis( &result->col0 ); + vmathV4MakeYAxis( &result->col1 ); + vmathV4MakeZAxis( &result->col2 ); + vmathV4MakeFromV3Scalar( &result->col3, translateVec, 1.0f ); +} + +static inline void vmathM4MakeLookAt( VmathMatrix4 *result, const VmathPoint3 *eyePos, const VmathPoint3 *lookAtPos, const VmathVector3 *upVec ) +{ + VmathMatrix4 m4EyeFrame; + VmathVector3 v3X, v3Y, v3Z, tmpV3_0, tmpV3_1; + VmathVector4 tmpV4_0, tmpV4_1, tmpV4_2, tmpV4_3; + vmathV3Normalize( &v3Y, upVec ); + vmathP3Sub( &tmpV3_0, eyePos, lookAtPos ); + vmathV3Normalize( &v3Z, &tmpV3_0 ); + vmathV3Cross( &tmpV3_1, &v3Y, &v3Z ); + vmathV3Normalize( &v3X, &tmpV3_1 ); + vmathV3Cross( &v3Y, &v3Z, &v3X ); + vmathV4MakeFromV3( &tmpV4_0, &v3X ); + vmathV4MakeFromV3( &tmpV4_1, &v3Y ); + vmathV4MakeFromV3( &tmpV4_2, &v3Z ); + vmathV4MakeFromP3( &tmpV4_3, eyePos ); + vmathM4MakeFromCols( &m4EyeFrame, &tmpV4_0, &tmpV4_1, &tmpV4_2, &tmpV4_3 ); + vmathM4OrthoInverse( result, &m4EyeFrame ); +} + +static inline void vmathM4MakePerspective( VmathMatrix4 *result, float fovyRadians, float aspect, float zNear, float zFar ) +{ + float f, rangeInv; + vec_float4 zero, col0, col1, col2, col3; + f = tanf( _VECTORMATH_PI_OVER_2 - fovyRadians * 0.5f ); + rangeInv = 1.0f / ( zNear - zFar ); + zero = spu_splats(0.0f); + col0 = zero; + col1 = zero; + col2 = zero; + col3 = zero; + col0 = spu_insert( f / aspect, col0, 0 ); + col1 = spu_insert( f, col1, 1 ); + col2 = spu_insert( ( zNear + zFar ) * rangeInv, col2, 2 ); + col2 = spu_insert( -1.0f, col2, 3 ); + col3 = spu_insert( zNear * zFar * rangeInv * 2.0f, col3, 2 ); + result->col0.vec128 = col0; + result->col1.vec128 = col1; + result->col2.vec128 = col2; + result->col3.vec128 = col3; +} + +static inline void vmathM4MakeFrustum( VmathMatrix4 *result, float left, float right, float bottom, float top, float zNear, float zFar ) +{ + /* function implementation based on code from STIDC SDK: */ + /* -------------------------------------------------------------- */ + /* PLEASE DO NOT MODIFY THIS SECTION */ + /* This prolog section is automatically generated. */ + /* */ + /* (C)Copyright */ + /* Sony Computer Entertainment, Inc., */ + /* Toshiba Corporation, */ + /* International Business Machines Corporation, */ + /* 2001,2002. */ + /* S/T/I Confidential Information */ + /* -------------------------------------------------------------- */ + vec_float4 lbf, rtn; + vec_float4 diff, sum, inv_diff; + vec_float4 diagonal, column, near2; + vec_float4 zero = spu_splats(0.0f); + lbf = spu_shuffle( spu_promote(left,0), spu_promote(zFar,0), _VECTORMATH_SHUF_XAYB ); + rtn = spu_shuffle( spu_promote(right,0), spu_promote(zNear,0), _VECTORMATH_SHUF_XAYB ); + lbf = spu_shuffle( lbf, spu_promote(bottom,0), _VECTORMATH_SHUF_XAYB ); + rtn = spu_shuffle( rtn, spu_promote(top,0), _VECTORMATH_SHUF_XAYB ); + diff = spu_sub( rtn, lbf ); + sum = spu_add( rtn, lbf ); + inv_diff = recipf4( diff ); + near2 = spu_splats( zNear ); + near2 = spu_add( near2, near2 ); + diagonal = spu_mul( near2, inv_diff ); + column = spu_mul( sum, inv_diff ); + result->col0.vec128 = spu_sel( zero, diagonal, (vec_uint4)spu_maskb(0xf000) ); + result->col1.vec128 = spu_sel( zero, diagonal, (vec_uint4)spu_maskb(0x0f00) ); + result->col2.vec128 = spu_sel( column, spu_splats(-1.0f), (vec_uint4)spu_maskb(0x000f) ); + result->col3.vec128 = spu_sel( zero, spu_mul( diagonal, spu_splats(zFar) ), (vec_uint4)spu_maskb(0x00f0) ); +} + +static inline void vmathM4MakeOrthographic( VmathMatrix4 *result, float left, float right, float bottom, float top, float zNear, float zFar ) +{ + /* function implementation based on code from STIDC SDK: */ + /* -------------------------------------------------------------- */ + /* PLEASE DO NOT MODIFY THIS SECTION */ + /* This prolog section is automatically generated. */ + /* */ + /* (C)Copyright */ + /* Sony Computer Entertainment, Inc., */ + /* Toshiba Corporation, */ + /* International Business Machines Corporation, */ + /* 2001,2002. */ + /* S/T/I Confidential Information */ + /* -------------------------------------------------------------- */ + vec_float4 lbf, rtn; + vec_float4 diff, sum, inv_diff, neg_inv_diff; + vec_float4 diagonal, column; + vec_float4 zero = spu_splats(0.0f); + lbf = spu_shuffle( spu_promote(left,0), spu_promote(zFar,0), _VECTORMATH_SHUF_XAYB ); + rtn = spu_shuffle( spu_promote(right,0), spu_promote(zNear,0), _VECTORMATH_SHUF_XAYB ); + lbf = spu_shuffle( lbf, spu_promote(bottom,0), _VECTORMATH_SHUF_XAYB ); + rtn = spu_shuffle( rtn, spu_promote(top,0), _VECTORMATH_SHUF_XAYB ); + diff = spu_sub( rtn, lbf ); + sum = spu_add( rtn, lbf ); + inv_diff = recipf4( diff ); + neg_inv_diff = negatef4( inv_diff ); + diagonal = spu_add( inv_diff, inv_diff ); + column = spu_mul( sum, spu_sel( neg_inv_diff, inv_diff, (vec_uint4)spu_maskb(0x00f0) ) ); + result->col0.vec128 = spu_sel( zero, diagonal, (vec_uint4)spu_maskb(0xf000) ); + result->col1.vec128 = spu_sel( zero, diagonal, (vec_uint4)spu_maskb(0x0f00) ); + result->col2.vec128 = spu_sel( zero, diagonal, (vec_uint4)spu_maskb(0x00f0) ); + result->col3.vec128 = spu_sel( column, spu_splats(1.0f), (vec_uint4)spu_maskb(0x000f) ); +} + +static inline void vmathM4Select( VmathMatrix4 *result, const VmathMatrix4 *mat0, const VmathMatrix4 *mat1, unsigned int select1 ) +{ + vmathV4Select( &result->col0, &mat0->col0, &mat1->col0, select1 ); + vmathV4Select( &result->col1, &mat0->col1, &mat1->col1, select1 ); + vmathV4Select( &result->col2, &mat0->col2, &mat1->col2, select1 ); + vmathV4Select( &result->col3, &mat0->col3, &mat1->col3, select1 ); +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathM4Print( const VmathMatrix4 *mat ) +{ + VmathVector4 tmpV4_0, tmpV4_1, tmpV4_2, tmpV4_3; + vmathM4GetRow( &tmpV4_0, mat, 0 ); + vmathV4Print( &tmpV4_0 ); + vmathM4GetRow( &tmpV4_1, mat, 1 ); + vmathV4Print( &tmpV4_1 ); + vmathM4GetRow( &tmpV4_2, mat, 2 ); + vmathV4Print( &tmpV4_2 ); + vmathM4GetRow( &tmpV4_3, mat, 3 ); + vmathV4Print( &tmpV4_3 ); +} + +static inline void vmathM4Prints( const VmathMatrix4 *mat, const char *name ) +{ + printf("%s:\n", name); + vmathM4Print( mat ); +} + +#endif + +static inline void vmathT3Copy( VmathTransform3 *result, const VmathTransform3 *tfrm ) +{ + vmathV3Copy( &result->col0, &tfrm->col0 ); + vmathV3Copy( &result->col1, &tfrm->col1 ); + vmathV3Copy( &result->col2, &tfrm->col2 ); + vmathV3Copy( &result->col3, &tfrm->col3 ); +} + +static inline void vmathT3MakeFromScalar( VmathTransform3 *result, float scalar ) +{ + vmathV3MakeFromScalar( &result->col0, scalar ); + vmathV3MakeFromScalar( &result->col1, scalar ); + vmathV3MakeFromScalar( &result->col2, scalar ); + vmathV3MakeFromScalar( &result->col3, scalar ); +} + +static inline void vmathT3MakeFromCols( VmathTransform3 *result, const VmathVector3 *_col0, const VmathVector3 *_col1, const VmathVector3 *_col2, const VmathVector3 *_col3 ) +{ + vmathV3Copy( &result->col0, _col0 ); + vmathV3Copy( &result->col1, _col1 ); + vmathV3Copy( &result->col2, _col2 ); + vmathV3Copy( &result->col3, _col3 ); +} + +static inline void vmathT3MakeFromM3V3( VmathTransform3 *result, const VmathMatrix3 *tfrm, const VmathVector3 *translateVec ) +{ + vmathT3SetUpper3x3( result, tfrm ); + vmathT3SetTranslation( result, translateVec ); +} + +static inline void vmathT3MakeFromQV3( VmathTransform3 *result, const VmathQuat *unitQuat, const VmathVector3 *translateVec ) +{ + VmathMatrix3 tmpM3_0; + vmathM3MakeFromQ( &tmpM3_0, unitQuat ); + vmathT3SetUpper3x3( result, &tmpM3_0 ); + vmathT3SetTranslation( result, translateVec ); +} + +static inline void vmathT3SetCol0( VmathTransform3 *result, const VmathVector3 *_col0 ) +{ + vmathV3Copy( &result->col0, _col0 ); +} + +static inline void vmathT3SetCol1( VmathTransform3 *result, const VmathVector3 *_col1 ) +{ + vmathV3Copy( &result->col1, _col1 ); +} + +static inline void vmathT3SetCol2( VmathTransform3 *result, const VmathVector3 *_col2 ) +{ + vmathV3Copy( &result->col2, _col2 ); +} + +static inline void vmathT3SetCol3( VmathTransform3 *result, const VmathVector3 *_col3 ) +{ + vmathV3Copy( &result->col3, _col3 ); +} + +static inline void vmathT3SetCol( VmathTransform3 *result, int col, const VmathVector3 *vec ) +{ + vmathV3Copy( (&result->col0 + col), vec ); +} + +static inline void vmathT3SetRow( VmathTransform3 *result, int row, const VmathVector4 *vec ) +{ + vmathV3SetElem( &result->col0, row, vmathV4GetElem( vec, 0 ) ); + vmathV3SetElem( &result->col1, row, vmathV4GetElem( vec, 1 ) ); + vmathV3SetElem( &result->col2, row, vmathV4GetElem( vec, 2 ) ); + vmathV3SetElem( &result->col3, row, vmathV4GetElem( vec, 3 ) ); +} + +static inline void vmathT3SetElem( VmathTransform3 *result, int col, int row, float val ) +{ + VmathVector3 tmpV3_0; + vmathT3GetCol( &tmpV3_0, result, col ); + vmathV3SetElem( &tmpV3_0, row, val ); + vmathT3SetCol( result, col, &tmpV3_0 ); +} + +static inline float vmathT3GetElem( const VmathTransform3 *tfrm, int col, int row ) +{ + VmathVector3 tmpV3_0; + vmathT3GetCol( &tmpV3_0, tfrm, col ); + return vmathV3GetElem( &tmpV3_0, row ); +} + +static inline void vmathT3GetCol0( VmathVector3 *result, const VmathTransform3 *tfrm ) +{ + vmathV3Copy( result, &tfrm->col0 ); +} + +static inline void vmathT3GetCol1( VmathVector3 *result, const VmathTransform3 *tfrm ) +{ + vmathV3Copy( result, &tfrm->col1 ); +} + +static inline void vmathT3GetCol2( VmathVector3 *result, const VmathTransform3 *tfrm ) +{ + vmathV3Copy( result, &tfrm->col2 ); +} + +static inline void vmathT3GetCol3( VmathVector3 *result, const VmathTransform3 *tfrm ) +{ + vmathV3Copy( result, &tfrm->col3 ); +} + +static inline void vmathT3GetCol( VmathVector3 *result, const VmathTransform3 *tfrm, int col ) +{ + vmathV3Copy( result, (&tfrm->col0 + col) ); +} + +static inline void vmathT3GetRow( VmathVector4 *result, const VmathTransform3 *tfrm, int row ) +{ + vmathV4MakeFromElems( result, vmathV3GetElem( &tfrm->col0, row ), vmathV3GetElem( &tfrm->col1, row ), vmathV3GetElem( &tfrm->col2, row ), vmathV3GetElem( &tfrm->col3, row ) ); +} + +static inline void vmathT3Inverse( VmathTransform3 *result, const VmathTransform3 *tfrm ) +{ + vec_float4 inv0, inv1, inv2, inv3; + vec_float4 tmp0, tmp1, tmp2, tmp3, tmp4, dot, invdet; + vec_float4 xxxx, yyyy, zzzz; + vec_uchar16 shuffle_xxxx = (vec_uchar16)spu_splats((int)0x00010203); + vec_uchar16 shuffle_yyyy = (vec_uchar16)spu_splats((int)0x04050607); + vec_uchar16 shuffle_zzzz = (vec_uchar16)spu_splats((int)0x08090a0b); + tmp2 = _vmathVfCross( tfrm->col0.vec128, tfrm->col1.vec128 ); + tmp0 = _vmathVfCross( tfrm->col1.vec128, tfrm->col2.vec128 ); + tmp1 = _vmathVfCross( tfrm->col2.vec128, tfrm->col0.vec128 ); + inv3 = negatef4( tfrm->col3.vec128 ); + dot = _vmathVfDot3( tmp2, tfrm->col2.vec128 ); + dot = spu_shuffle( dot, dot, shuffle_xxxx ); + invdet = recipf4( dot ); + tmp3 = spu_shuffle( tmp0, tmp2, _VECTORMATH_SHUF_XAYB ); + tmp4 = spu_shuffle( tmp0, tmp2, _VECTORMATH_SHUF_ZCWD ); + inv0 = spu_shuffle( tmp3, tmp1, _VECTORMATH_SHUF_XAYB ); + xxxx = spu_shuffle( inv3, inv3, shuffle_xxxx ); + inv1 = spu_shuffle( tmp3, tmp1, _VECTORMATH_SHUF_ZBW0 ); + inv2 = spu_shuffle( tmp4, tmp1, _VECTORMATH_SHUF_XCY0 ); + yyyy = spu_shuffle( inv3, inv3, shuffle_yyyy ); + zzzz = spu_shuffle( inv3, inv3, shuffle_zzzz ); + inv3 = spu_mul( inv0, xxxx ); + inv3 = spu_madd( inv1, yyyy, inv3 ); + inv3 = spu_madd( inv2, zzzz, inv3 ); + inv0 = spu_mul( inv0, invdet ); + inv1 = spu_mul( inv1, invdet ); + inv2 = spu_mul( inv2, invdet ); + inv3 = spu_mul( inv3, invdet ); + result->col0.vec128 = inv0; + result->col1.vec128 = inv1; + result->col2.vec128 = inv2; + result->col3.vec128 = inv3; +} + +static inline void vmathT3OrthoInverse( VmathTransform3 *result, const VmathTransform3 *tfrm ) +{ + vec_float4 inv0, inv1, inv2, inv3; + vec_float4 tmp0, tmp1; + vec_float4 xxxx, yyyy, zzzz; + vec_uchar16 shuffle_xxxx = (vec_uchar16)spu_splats((int)0x00010203); + vec_uchar16 shuffle_yyyy = (vec_uchar16)spu_splats((int)0x04050607); + vec_uchar16 shuffle_zzzz = (vec_uchar16)spu_splats((int)0x08090a0b); + tmp0 = spu_shuffle( tfrm->col0.vec128, tfrm->col2.vec128, _VECTORMATH_SHUF_XAYB ); + tmp1 = spu_shuffle( tfrm->col0.vec128, tfrm->col2.vec128, _VECTORMATH_SHUF_ZCWD ); + inv3 = negatef4( tfrm->col3.vec128 ); + inv0 = spu_shuffle( tmp0, tfrm->col1.vec128, _VECTORMATH_SHUF_XAYB ); + xxxx = spu_shuffle( inv3, inv3, shuffle_xxxx ); + inv1 = spu_shuffle( tmp0, tfrm->col1.vec128, _VECTORMATH_SHUF_ZBW0 ); + inv2 = spu_shuffle( tmp1, tfrm->col1.vec128, _VECTORMATH_SHUF_XCY0 ); + yyyy = spu_shuffle( inv3, inv3, shuffle_yyyy ); + zzzz = spu_shuffle( inv3, inv3, shuffle_zzzz ); + inv3 = spu_mul( inv0, xxxx ); + inv3 = spu_madd( inv1, yyyy, inv3 ); + inv3 = spu_madd( inv2, zzzz, inv3 ); + result->col0.vec128 = inv0; + result->col1.vec128 = inv1; + result->col2.vec128 = inv2; + result->col3.vec128 = inv3; +} + +static inline void vmathT3AbsPerElem( VmathTransform3 *result, const VmathTransform3 *tfrm ) +{ + vmathV3AbsPerElem( &result->col0, &tfrm->col0 ); + vmathV3AbsPerElem( &result->col1, &tfrm->col1 ); + vmathV3AbsPerElem( &result->col2, &tfrm->col2 ); + vmathV3AbsPerElem( &result->col3, &tfrm->col3 ); +} + +static inline void vmathT3MulV3( VmathVector3 *result, const VmathTransform3 *tfrm, const VmathVector3 *vec ) +{ + vec_float4 res; + vec_float4 xxxx, yyyy, zzzz; + vec_uchar16 shuffle_xxxx = (vec_uchar16)spu_splats((int)0x00010203); + vec_uchar16 shuffle_yyyy = (vec_uchar16)spu_splats((int)0x04050607); + vec_uchar16 shuffle_zzzz = (vec_uchar16)spu_splats((int)0x08090a0b); + xxxx = spu_shuffle( vec->vec128, vec->vec128, shuffle_xxxx ); + yyyy = spu_shuffle( vec->vec128, vec->vec128, shuffle_yyyy ); + zzzz = spu_shuffle( vec->vec128, vec->vec128, shuffle_zzzz ); + res = spu_mul( tfrm->col0.vec128, xxxx ); + res = spu_madd( tfrm->col1.vec128, yyyy, res ); + res = spu_madd( tfrm->col2.vec128, zzzz, res ); + result->vec128 = res; +} + +static inline void vmathT3MulP3( VmathPoint3 *result, const VmathTransform3 *tfrm, const VmathPoint3 *pnt ) +{ + vec_float4 tmp0, tmp1, res; + vec_float4 xxxx, yyyy, zzzz; + vec_uchar16 shuffle_xxxx = (vec_uchar16)spu_splats((int)0x00010203); + vec_uchar16 shuffle_yyyy = (vec_uchar16)spu_splats((int)0x04050607); + vec_uchar16 shuffle_zzzz = (vec_uchar16)spu_splats((int)0x08090a0b); + xxxx = spu_shuffle( pnt->vec128, pnt->vec128, shuffle_xxxx ); + yyyy = spu_shuffle( pnt->vec128, pnt->vec128, shuffle_yyyy ); + zzzz = spu_shuffle( pnt->vec128, pnt->vec128, shuffle_zzzz ); + tmp0 = spu_mul( tfrm->col0.vec128, xxxx ); + tmp1 = spu_mul( tfrm->col1.vec128, yyyy ); + tmp0 = spu_madd( tfrm->col2.vec128, zzzz, tmp0 ); + tmp1 = spu_add( tfrm->col3.vec128, tmp1 ); + res = spu_add( tmp0, tmp1 ); + result->vec128 = res; +} + +static inline void vmathT3Mul( VmathTransform3 *result, const VmathTransform3 *tfrm0, const VmathTransform3 *tfrm1 ) +{ + VmathTransform3 tmpResult; + VmathPoint3 tmpP3_0, tmpP3_1; + vmathT3MulV3( &tmpResult.col0, tfrm0, &tfrm1->col0 ); + vmathT3MulV3( &tmpResult.col1, tfrm0, &tfrm1->col1 ); + vmathT3MulV3( &tmpResult.col2, tfrm0, &tfrm1->col2 ); + vmathP3MakeFromV3( &tmpP3_0, &tfrm1->col3 ); + vmathT3MulP3( &tmpP3_1, tfrm0, &tmpP3_0 ); + vmathV3MakeFromP3( &tmpResult.col3, &tmpP3_1 ); + vmathT3Copy( result, &tmpResult ); +} + +static inline void vmathT3MulPerElem( VmathTransform3 *result, const VmathTransform3 *tfrm0, const VmathTransform3 *tfrm1 ) +{ + vmathV3MulPerElem( &result->col0, &tfrm0->col0, &tfrm1->col0 ); + vmathV3MulPerElem( &result->col1, &tfrm0->col1, &tfrm1->col1 ); + vmathV3MulPerElem( &result->col2, &tfrm0->col2, &tfrm1->col2 ); + vmathV3MulPerElem( &result->col3, &tfrm0->col3, &tfrm1->col3 ); +} + +static inline void vmathT3MakeIdentity( VmathTransform3 *result ) +{ + vmathV3MakeXAxis( &result->col0 ); + vmathV3MakeYAxis( &result->col1 ); + vmathV3MakeZAxis( &result->col2 ); + vmathV3MakeFromScalar( &result->col3, 0.0f ); +} + +static inline void vmathT3SetUpper3x3( VmathTransform3 *result, const VmathMatrix3 *tfrm ) +{ + vmathV3Copy( &result->col0, &tfrm->col0 ); + vmathV3Copy( &result->col1, &tfrm->col1 ); + vmathV3Copy( &result->col2, &tfrm->col2 ); +} + +static inline void vmathT3GetUpper3x3( VmathMatrix3 *result, const VmathTransform3 *tfrm ) +{ + vmathM3MakeFromCols( result, &tfrm->col0, &tfrm->col1, &tfrm->col2 ); +} + +static inline void vmathT3SetTranslation( VmathTransform3 *result, const VmathVector3 *translateVec ) +{ + vmathV3Copy( &result->col3, translateVec ); +} + +static inline void vmathT3GetTranslation( VmathVector3 *result, const VmathTransform3 *tfrm ) +{ + vmathV3Copy( result, &tfrm->col3 ); +} + +static inline void vmathT3MakeRotationX( VmathTransform3 *result, float radians ) +{ + vec_float4 s, c, res1, res2; + vec_uint4 select_y, select_z; + vec_float4 zero; + select_y = (vec_uint4)spu_maskb(0x0f00); + select_z = (vec_uint4)spu_maskb(0x00f0); + zero = spu_splats(0.0f); + sincosf4( spu_splats(radians), &s, &c ); + res1 = spu_sel( zero, c, select_y ); + res1 = spu_sel( res1, s, select_z ); + res2 = spu_sel( zero, negatef4(s), select_y ); + res2 = spu_sel( res2, c, select_z ); + vmathV3MakeXAxis( &result->col0 ); + result->col1.vec128 = res1; + result->col2.vec128 = res2; + vmathV3MakeFromScalar( &result->col3, 0.0f ); +} + +static inline void vmathT3MakeRotationY( VmathTransform3 *result, float radians ) +{ + vec_float4 s, c, res0, res2; + vec_uint4 select_x, select_z; + vec_float4 zero; + select_x = (vec_uint4)spu_maskb(0xf000); + select_z = (vec_uint4)spu_maskb(0x00f0); + zero = spu_splats(0.0f); + sincosf4( spu_splats(radians), &s, &c ); + res0 = spu_sel( zero, c, select_x ); + res0 = spu_sel( res0, negatef4(s), select_z ); + res2 = spu_sel( zero, s, select_x ); + res2 = spu_sel( res2, c, select_z ); + result->col0.vec128 = res0; + vmathV3MakeYAxis( &result->col1 ); + result->col2.vec128 = res2; + vmathV3MakeFromScalar( &result->col3, 0.0f ); +} + +static inline void vmathT3MakeRotationZ( VmathTransform3 *result, float radians ) +{ + vec_float4 s, c, res0, res1; + vec_uint4 select_x, select_y; + vec_float4 zero; + select_x = (vec_uint4)spu_maskb(0xf000); + select_y = (vec_uint4)spu_maskb(0x0f00); + zero = spu_splats(0.0f); + sincosf4( spu_splats(radians), &s, &c ); + res0 = spu_sel( zero, c, select_x ); + res0 = spu_sel( res0, s, select_y ); + res1 = spu_sel( zero, negatef4(s), select_x ); + res1 = spu_sel( res1, c, select_y ); + result->col0.vec128 = res0; + result->col1.vec128 = res1; + vmathV3MakeZAxis( &result->col2 ); + vmathV3MakeFromScalar( &result->col3, 0.0f ); +} + +static inline void vmathT3MakeRotationZYX( VmathTransform3 *result, const VmathVector3 *radiansXYZ ) +{ + vec_float4 angles, s, negS, c, X0, X1, Y0, Y1, Z0, Z1, tmp; + vec_uchar16 shuffle_xxxx = (vec_uchar16)spu_splats((int)0x00010203); + angles = radiansXYZ->vec128; + angles = spu_insert( 0.0f, angles, 3 ); + sincosf4( angles, &s, &c ); + negS = negatef4( s ); + Z0 = spu_shuffle( s, c, _VECTORMATH_SHUF_CZD0 ); + Z1 = spu_shuffle( c, negS, _VECTORMATH_SHUF_CZD0 ); + Y0 = spu_shuffle( negS, c, _VECTORMATH_SHUF_BBY0 ); + Y1 = spu_shuffle( c, s, _VECTORMATH_SHUF_BBY0 ); + X0 = spu_shuffle( s, s, shuffle_xxxx ); + X1 = spu_shuffle( c, c, shuffle_xxxx ); + tmp = spu_mul( Z0, Y1 ); + result->col0.vec128 = spu_mul( Z0, Y0 ); + result->col1.vec128 = spu_madd( Z1, X1, spu_mul( tmp, X0 ) ); + result->col2.vec128 = spu_nmsub( Z1, X0, spu_mul( tmp, X1 ) ); + vmathV3MakeFromScalar( &result->col3, 0.0f ); +} + +static inline void vmathT3MakeRotationAxis( VmathTransform3 *result, float radians, const VmathVector3 *unitVec ) +{ + VmathMatrix3 tmpM3_0; + VmathVector3 tmpV3_0; + vmathM3MakeRotationAxis( &tmpM3_0, radians, unitVec ); + vmathV3MakeFromScalar( &tmpV3_0, 0.0f ); + vmathT3MakeFromM3V3( result, &tmpM3_0, &tmpV3_0 ); +} + +static inline void vmathT3MakeRotationQ( VmathTransform3 *result, const VmathQuat *unitQuat ) +{ + VmathMatrix3 tmpM3_0; + VmathVector3 tmpV3_0; + vmathM3MakeFromQ( &tmpM3_0, unitQuat ); + vmathV3MakeFromScalar( &tmpV3_0, 0.0f ); + vmathT3MakeFromM3V3( result, &tmpM3_0, &tmpV3_0 ); +} + +static inline void vmathT3MakeScale( VmathTransform3 *result, const VmathVector3 *scaleVec ) +{ + vec_float4 zero = spu_splats(0.0f); + result->col0.vec128 = spu_sel( zero, scaleVec->vec128, (vec_uint4)spu_maskb(0xf000) ); + result->col1.vec128 = spu_sel( zero, scaleVec->vec128, (vec_uint4)spu_maskb(0x0f00) ); + result->col2.vec128 = spu_sel( zero, scaleVec->vec128, (vec_uint4)spu_maskb(0x00f0) ); + vmathV3MakeFromScalar( &result->col3, 0.0f ); +} + +static inline void vmathT3AppendScale( VmathTransform3 *result, const VmathTransform3 *tfrm, const VmathVector3 *scaleVec ) +{ + vmathV3ScalarMul( &result->col0, &tfrm->col0, vmathV3GetX( scaleVec ) ); + vmathV3ScalarMul( &result->col1, &tfrm->col1, vmathV3GetY( scaleVec ) ); + vmathV3ScalarMul( &result->col2, &tfrm->col2, vmathV3GetZ( scaleVec ) ); + vmathV3Copy( &result->col3, &tfrm->col3 ); +} + +static inline void vmathT3PrependScale( VmathTransform3 *result, const VmathVector3 *scaleVec, const VmathTransform3 *tfrm ) +{ + vmathV3MulPerElem( &result->col0, &tfrm->col0, scaleVec ); + vmathV3MulPerElem( &result->col1, &tfrm->col1, scaleVec ); + vmathV3MulPerElem( &result->col2, &tfrm->col2, scaleVec ); + vmathV3MulPerElem( &result->col3, &tfrm->col3, scaleVec ); +} + +static inline void vmathT3MakeTranslation( VmathTransform3 *result, const VmathVector3 *translateVec ) +{ + vmathV3MakeXAxis( &result->col0 ); + vmathV3MakeYAxis( &result->col1 ); + vmathV3MakeZAxis( &result->col2 ); + vmathV3Copy( &result->col3, translateVec ); +} + +static inline void vmathT3Select( VmathTransform3 *result, const VmathTransform3 *tfrm0, const VmathTransform3 *tfrm1, unsigned int select1 ) +{ + vmathV3Select( &result->col0, &tfrm0->col0, &tfrm1->col0, select1 ); + vmathV3Select( &result->col1, &tfrm0->col1, &tfrm1->col1, select1 ); + vmathV3Select( &result->col2, &tfrm0->col2, &tfrm1->col2, select1 ); + vmathV3Select( &result->col3, &tfrm0->col3, &tfrm1->col3, select1 ); +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathT3Print( const VmathTransform3 *tfrm ) +{ + VmathVector4 tmpV4_0, tmpV4_1, tmpV4_2; + vmathT3GetRow( &tmpV4_0, tfrm, 0 ); + vmathV4Print( &tmpV4_0 ); + vmathT3GetRow( &tmpV4_1, tfrm, 1 ); + vmathV4Print( &tmpV4_1 ); + vmathT3GetRow( &tmpV4_2, tfrm, 2 ); + vmathV4Print( &tmpV4_2 ); +} + +static inline void vmathT3Prints( const VmathTransform3 *tfrm, const char *name ) +{ + printf("%s:\n", name); + vmathT3Print( tfrm ); +} + +#endif + +static inline void vmathQMakeFromM3( VmathQuat *result, const VmathMatrix3 *tfrm ) +{ + vec_float4 res; + vec_float4 col0, col1, col2; + vec_float4 xx_yy, xx_yy_zz_xx, yy_zz_xx_yy, zz_xx_yy_zz, diagSum, diagDiff; + vec_float4 zy_xz_yx, yz_zx_xy, sum, diff; + vec_float4 radicand, invSqrt, scale; + vec_float4 res0, res1, res2, res3; + vec_float4 xx, yy, zz; + vec_uint4 select_x = (vec_uint4)spu_maskb( 0xf000 ); + vec_uint4 select_y = (vec_uint4)spu_maskb( 0x0f00 ); + vec_uint4 select_z = (vec_uint4)spu_maskb( 0x00f0 ); + vec_uint4 select_w = (vec_uint4)spu_maskb( 0x000f ); + vec_uchar16 shuffle_xxxx = (vec_uchar16)spu_splats((unsigned int)0x00010203); + vec_uchar16 shuffle_yyyy = (vec_uchar16)spu_splats((unsigned int)0x04050607); + vec_uchar16 shuffle_zzzz = (vec_uchar16)spu_splats((unsigned int)0x08090a0b); + vec_uchar16 shuffle_wwww = (vec_uchar16)spu_splats((unsigned int)0x0c0d0e0f); + + col0 = tfrm->col0.vec128; + col1 = tfrm->col1.vec128; + col2 = tfrm->col2.vec128; + + /* four cases: */ + /* trace > 0 */ + /* else */ + /* xx largest diagonal element */ + /* yy largest diagonal element */ + /* zz largest diagonal element */ + + /* compute quaternion for each case */ + + xx_yy = spu_sel( col0, col1, select_y ); + xx_yy_zz_xx = spu_shuffle( xx_yy, col2, _VECTORMATH_SHUF_XYCX ); + yy_zz_xx_yy = spu_shuffle( xx_yy, col2, _VECTORMATH_SHUF_YCXY ); + zz_xx_yy_zz = spu_shuffle( xx_yy, col2, _VECTORMATH_SHUF_CXYC ); + + diagSum = spu_add( spu_add( xx_yy_zz_xx, yy_zz_xx_yy ), zz_xx_yy_zz ); + diagDiff = spu_sub( spu_sub( xx_yy_zz_xx, yy_zz_xx_yy ), zz_xx_yy_zz ); + radicand = spu_add( spu_sel( diagDiff, diagSum, select_w ), spu_splats(1.0f) ); + invSqrt = rsqrtf4( radicand ); + + zy_xz_yx = spu_sel( col0, col1, select_z ); + zy_xz_yx = spu_shuffle( zy_xz_yx, col2, _VECTORMATH_SHUF_ZAY0 ); + yz_zx_xy = spu_sel( col0, col1, select_x ); + yz_zx_xy = spu_shuffle( yz_zx_xy, col2, _VECTORMATH_SHUF_BZX0 ); + + sum = spu_add( zy_xz_yx, yz_zx_xy ); + diff = spu_sub( zy_xz_yx, yz_zx_xy ); + + scale = spu_mul( invSqrt, spu_splats(0.5f) ); + res0 = spu_shuffle( sum, diff, _VECTORMATH_SHUF_0ZYA ); + res1 = spu_shuffle( sum, diff, _VECTORMATH_SHUF_Z0XB ); + res2 = spu_shuffle( sum, diff, _VECTORMATH_SHUF_YX0C ); + res3 = diff; + res0 = spu_sel( res0, radicand, select_x ); + res1 = spu_sel( res1, radicand, select_y ); + res2 = spu_sel( res2, radicand, select_z ); + res3 = spu_sel( res3, radicand, select_w ); + res0 = spu_mul( res0, spu_shuffle( scale, scale, shuffle_xxxx ) ); + res1 = spu_mul( res1, spu_shuffle( scale, scale, shuffle_yyyy ) ); + res2 = spu_mul( res2, spu_shuffle( scale, scale, shuffle_zzzz ) ); + res3 = spu_mul( res3, spu_shuffle( scale, scale, shuffle_wwww ) ); + + /* determine case and select answer */ + + xx = spu_shuffle( col0, col0, shuffle_xxxx ); + yy = spu_shuffle( col1, col1, shuffle_yyyy ); + zz = spu_shuffle( col2, col2, shuffle_zzzz ); + res = spu_sel( res0, res1, spu_cmpgt( yy, xx ) ); + res = spu_sel( res, res2, spu_and( spu_cmpgt( zz, xx ), spu_cmpgt( zz, yy ) ) ); + res = spu_sel( res, res3, spu_cmpgt( spu_shuffle( diagSum, diagSum, shuffle_xxxx ), spu_splats(0.0f) ) ); + result->vec128 = res; +} + +static inline void vmathV3Outer( VmathMatrix3 *result, const VmathVector3 *tfrm0, const VmathVector3 *tfrm1 ) +{ + vmathV3ScalarMul( &result->col0, tfrm0, vmathV3GetX( tfrm1 ) ); + vmathV3ScalarMul( &result->col1, tfrm0, vmathV3GetY( tfrm1 ) ); + vmathV3ScalarMul( &result->col2, tfrm0, vmathV3GetZ( tfrm1 ) ); +} + +static inline void vmathV4Outer( VmathMatrix4 *result, const VmathVector4 *tfrm0, const VmathVector4 *tfrm1 ) +{ + vmathV4ScalarMul( &result->col0, tfrm0, vmathV4GetX( tfrm1 ) ); + vmathV4ScalarMul( &result->col1, tfrm0, vmathV4GetY( tfrm1 ) ); + vmathV4ScalarMul( &result->col2, tfrm0, vmathV4GetZ( tfrm1 ) ); + vmathV4ScalarMul( &result->col3, tfrm0, vmathV4GetW( tfrm1 ) ); +} + +static inline void vmathV3RowMul( VmathVector3 *result, const VmathVector3 *vec, const VmathMatrix3 *mat ) +{ + vec_float4 tmp0, tmp1, mcol0, mcol1, mcol2, res; + vec_float4 xxxx, yyyy, zzzz; + vec_uchar16 shuffle_xxxx = (vec_uchar16)spu_splats((int)0x00010203); + vec_uchar16 shuffle_yyyy = (vec_uchar16)spu_splats((int)0x04050607); + vec_uchar16 shuffle_zzzz = (vec_uchar16)spu_splats((int)0x08090a0b); + tmp0 = spu_shuffle( mat->col0.vec128, mat->col2.vec128, _VECTORMATH_SHUF_XAYB ); + tmp1 = spu_shuffle( mat->col0.vec128, mat->col2.vec128, _VECTORMATH_SHUF_ZCWD ); + xxxx = spu_shuffle( vec->vec128, vec->vec128, shuffle_xxxx ); + mcol0 = spu_shuffle( tmp0, mat->col1.vec128, _VECTORMATH_SHUF_XAYB ); + mcol1 = spu_shuffle( tmp0, mat->col1.vec128, _VECTORMATH_SHUF_ZBW0 ); + mcol2 = spu_shuffle( tmp1, mat->col1.vec128, _VECTORMATH_SHUF_XCY0 ); + yyyy = spu_shuffle( vec->vec128, vec->vec128, shuffle_yyyy ); + res = spu_mul( mcol0, xxxx ); + zzzz = spu_shuffle( vec->vec128, vec->vec128, shuffle_zzzz ); + res = spu_madd( mcol1, yyyy, res ); + res = spu_madd( mcol2, zzzz, res ); + result->vec128 = res; +} + +static inline void vmathV3CrossMatrix( VmathMatrix3 *result, const VmathVector3 *vec ) +{ + vec_float4 neg, res0, res1, res2; + neg = negatef4( vec->vec128 ); + res0 = spu_shuffle( vec->vec128, neg, _VECTORMATH_SHUF_0ZB0 ); + res1 = spu_shuffle( vec->vec128, neg, _VECTORMATH_SHUF_C0X0 ); + res2 = spu_shuffle( vec->vec128, neg, _VECTORMATH_SHUF_YA00 ); + result->col0.vec128 = res0; + result->col1.vec128 = res1; + result->col2.vec128 = res2; +} + +static inline void vmathV3CrossMatrixMul( VmathMatrix3 *result, const VmathVector3 *vec, const VmathMatrix3 *mat ) +{ + VmathVector3 tmpV3_0, tmpV3_1, tmpV3_2; + vmathV3Cross( &tmpV3_0, vec, &mat->col0 ); + vmathV3Cross( &tmpV3_1, vec, &mat->col1 ); + vmathV3Cross( &tmpV3_2, vec, &mat->col2 ); + vmathM3MakeFromCols( result, &tmpV3_0, &tmpV3_1, &tmpV3_2 ); +} + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/spu/c/mat_aos_v.h b/Extras/vectormathlibrary/include/vectormath/spu/c/mat_aos_v.h new file mode 100644 index 000000000..986612ebe --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/spu/c/mat_aos_v.h @@ -0,0 +1,1029 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_MAT_AOS_V_C_H +#define _VECTORMATH_MAT_AOS_V_C_H + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/*----------------------------------------------------------------------------- + * Constants + * for shuffles, words are labeled [x,y,z,w] [a,b,c,d] + */ +#define _VECTORMATH_SHUF_XAYB ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_A, _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_B }) +#define _VECTORMATH_SHUF_ZCWD ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_C, _VECTORMATH_SHUF_W, _VECTORMATH_SHUF_D }) +#define _VECTORMATH_SHUF_ZBW0 ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_B, _VECTORMATH_SHUF_W, _VECTORMATH_SHUF_0 }) +#define _VECTORMATH_SHUF_XCY0 ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_C, _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_0 }) +#define _VECTORMATH_SHUF_XYAB ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_A, _VECTORMATH_SHUF_B }) +#define _VECTORMATH_SHUF_ZWCD ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_W, _VECTORMATH_SHUF_C, _VECTORMATH_SHUF_D }) +#define _VECTORMATH_SHUF_0ZB0 ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_0, _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_B, _VECTORMATH_SHUF_0 }) +#define _VECTORMATH_SHUF_C0X0 ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_C, _VECTORMATH_SHUF_0, _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_0 }) +#define _VECTORMATH_SHUF_YA00 ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_A, _VECTORMATH_SHUF_0, _VECTORMATH_SHUF_0 }) +#define _VECTORMATH_SHUF_XAZC ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_A, _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_C }) +#define _VECTORMATH_SHUF_YXWZ ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_W, _VECTORMATH_SHUF_Z }) +#define _VECTORMATH_SHUF_YBWD ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_B, _VECTORMATH_SHUF_W, _VECTORMATH_SHUF_D }) +#define _VECTORMATH_SHUF_XYCX ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_C, _VECTORMATH_SHUF_X }) +#define _VECTORMATH_SHUF_YCXY ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_C, _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_Y }) +#define _VECTORMATH_SHUF_CXYC ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_C, _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_C }) +#define _VECTORMATH_SHUF_ZAY0 ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_A, _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_0 }) +#define _VECTORMATH_SHUF_BZX0 ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_B, _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_0 }) +#define _VECTORMATH_SHUF_0ZYA ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_0, _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_A }) +#define _VECTORMATH_SHUF_Z0XB ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_0, _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_B }) +#define _VECTORMATH_SHUF_YX0C ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_0, _VECTORMATH_SHUF_C }) +#define _VECTORMATH_SHUF_CZD0 ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_C, _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_D, _VECTORMATH_SHUF_0 }) +#define _VECTORMATH_SHUF_BBY0 ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_B, _VECTORMATH_SHUF_B, _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_0 }) +#define _VECTORMATH_PI_OVER_2 1.570796327f + +/*----------------------------------------------------------------------------- + * Definitions + */ +static inline VmathMatrix3 vmathM3MakeFromScalar_V( float scalar ) +{ + VmathMatrix3 result; + vmathM3MakeFromScalar(&result, scalar); + return result; +} + +static inline VmathMatrix3 vmathM3MakeFromQ_V( VmathQuat unitQuat ) +{ + VmathMatrix3 result; + vmathM3MakeFromQ(&result, &unitQuat); + return result; +} + +static inline VmathMatrix3 vmathM3MakeFromCols_V( VmathVector3 _col0, VmathVector3 _col1, VmathVector3 _col2 ) +{ + VmathMatrix3 result; + vmathM3MakeFromCols(&result, &_col0, &_col1, &_col2); + return result; +} + +static inline void vmathM3SetCol0_V( VmathMatrix3 *result, VmathVector3 _col0 ) +{ + vmathM3SetCol0(result, &_col0); +} + +static inline void vmathM3SetCol1_V( VmathMatrix3 *result, VmathVector3 _col1 ) +{ + vmathM3SetCol1(result, &_col1); +} + +static inline void vmathM3SetCol2_V( VmathMatrix3 *result, VmathVector3 _col2 ) +{ + vmathM3SetCol2(result, &_col2); +} + +static inline void vmathM3SetCol_V( VmathMatrix3 *result, int col, VmathVector3 vec ) +{ + vmathM3SetCol(result, col, &vec); +} + +static inline void vmathM3SetRow_V( VmathMatrix3 *result, int row, VmathVector3 vec ) +{ + vmathM3SetRow(result, row, &vec); +} + +static inline void vmathM3SetElem_V( VmathMatrix3 *result, int col, int row, float val ) +{ + vmathM3SetElem(result, col, row, val); +} + +static inline float vmathM3GetElem_V( VmathMatrix3 mat, int col, int row ) +{ + return vmathM3GetElem(&mat, col, row); +} + +static inline VmathVector3 vmathM3GetCol0_V( VmathMatrix3 mat ) +{ + VmathVector3 result; + vmathM3GetCol0(&result, &mat); + return result; +} + +static inline VmathVector3 vmathM3GetCol1_V( VmathMatrix3 mat ) +{ + VmathVector3 result; + vmathM3GetCol1(&result, &mat); + return result; +} + +static inline VmathVector3 vmathM3GetCol2_V( VmathMatrix3 mat ) +{ + VmathVector3 result; + vmathM3GetCol2(&result, &mat); + return result; +} + +static inline VmathVector3 vmathM3GetCol_V( VmathMatrix3 mat, int col ) +{ + VmathVector3 result; + vmathM3GetCol(&result, &mat, col); + return result; +} + +static inline VmathVector3 vmathM3GetRow_V( VmathMatrix3 mat, int row ) +{ + VmathVector3 result; + vmathM3GetRow(&result, &mat, row); + return result; +} + +static inline VmathMatrix3 vmathM3Transpose_V( VmathMatrix3 mat ) +{ + VmathMatrix3 result; + vmathM3Transpose(&result, &mat); + return result; +} + +static inline VmathMatrix3 vmathM3Inverse_V( VmathMatrix3 mat ) +{ + VmathMatrix3 result; + vmathM3Inverse(&result, &mat); + return result; +} + +static inline float vmathM3Determinant_V( VmathMatrix3 mat ) +{ + return vmathM3Determinant(&mat); +} + +static inline VmathMatrix3 vmathM3Add_V( VmathMatrix3 mat0, VmathMatrix3 mat1 ) +{ + VmathMatrix3 result; + vmathM3Add(&result, &mat0, &mat1); + return result; +} + +static inline VmathMatrix3 vmathM3Sub_V( VmathMatrix3 mat0, VmathMatrix3 mat1 ) +{ + VmathMatrix3 result; + vmathM3Sub(&result, &mat0, &mat1); + return result; +} + +static inline VmathMatrix3 vmathM3Neg_V( VmathMatrix3 mat ) +{ + VmathMatrix3 result; + vmathM3Neg(&result, &mat); + return result; +} + +static inline VmathMatrix3 vmathM3AbsPerElem_V( VmathMatrix3 mat ) +{ + VmathMatrix3 result; + vmathM3AbsPerElem(&result, &mat); + return result; +} + +static inline VmathMatrix3 vmathM3ScalarMul_V( VmathMatrix3 mat, float scalar ) +{ + VmathMatrix3 result; + vmathM3ScalarMul(&result, &mat, scalar); + return result; +} + +static inline VmathVector3 vmathM3MulV3_V( VmathMatrix3 mat, VmathVector3 vec ) +{ + VmathVector3 result; + vmathM3MulV3(&result, &mat, &vec); + return result; +} + +static inline VmathMatrix3 vmathM3Mul_V( VmathMatrix3 mat0, VmathMatrix3 mat1 ) +{ + VmathMatrix3 result; + vmathM3Mul(&result, &mat0, &mat1); + return result; +} + +static inline VmathMatrix3 vmathM3MulPerElem_V( VmathMatrix3 mat0, VmathMatrix3 mat1 ) +{ + VmathMatrix3 result; + vmathM3MulPerElem(&result, &mat0, &mat1); + return result; +} + +static inline VmathMatrix3 vmathM3MakeIdentity_V( ) +{ + VmathMatrix3 result; + vmathM3MakeIdentity(&result); + return result; +} + +static inline VmathMatrix3 vmathM3MakeRotationX_V( float radians ) +{ + VmathMatrix3 result; + vmathM3MakeRotationX(&result, radians); + return result; +} + +static inline VmathMatrix3 vmathM3MakeRotationY_V( float radians ) +{ + VmathMatrix3 result; + vmathM3MakeRotationY(&result, radians); + return result; +} + +static inline VmathMatrix3 vmathM3MakeRotationZ_V( float radians ) +{ + VmathMatrix3 result; + vmathM3MakeRotationZ(&result, radians); + return result; +} + +static inline VmathMatrix3 vmathM3MakeRotationZYX_V( VmathVector3 radiansXYZ ) +{ + VmathMatrix3 result; + vmathM3MakeRotationZYX(&result, &radiansXYZ); + return result; +} + +static inline VmathMatrix3 vmathM3MakeRotationAxis_V( float radians, VmathVector3 unitVec ) +{ + VmathMatrix3 result; + vmathM3MakeRotationAxis(&result, radians, &unitVec); + return result; +} + +static inline VmathMatrix3 vmathM3MakeRotationQ_V( VmathQuat unitQuat ) +{ + VmathMatrix3 result; + vmathM3MakeRotationQ(&result, &unitQuat); + return result; +} + +static inline VmathMatrix3 vmathM3MakeScale_V( VmathVector3 scaleVec ) +{ + VmathMatrix3 result; + vmathM3MakeScale(&result, &scaleVec); + return result; +} + +static inline VmathMatrix3 vmathM3AppendScale_V( VmathMatrix3 mat, VmathVector3 scaleVec ) +{ + VmathMatrix3 result; + vmathM3AppendScale(&result, &mat, &scaleVec); + return result; +} + +static inline VmathMatrix3 vmathM3PrependScale_V( VmathVector3 scaleVec, VmathMatrix3 mat ) +{ + VmathMatrix3 result; + vmathM3PrependScale(&result, &scaleVec, &mat); + return result; +} + +static inline VmathMatrix3 vmathM3Select_V( VmathMatrix3 mat0, VmathMatrix3 mat1, unsigned int select1 ) +{ + VmathMatrix3 result; + vmathM3Select(&result, &mat0, &mat1, select1); + return result; +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathM3Print_V( VmathMatrix3 mat ) +{ + vmathM3Print(&mat); +} + +static inline void vmathM3Prints_V( VmathMatrix3 mat, const char *name ) +{ + vmathM3Prints(&mat, name); +} + +#endif + +static inline VmathMatrix4 vmathM4MakeFromScalar_V( float scalar ) +{ + VmathMatrix4 result; + vmathM4MakeFromScalar(&result, scalar); + return result; +} + +static inline VmathMatrix4 vmathM4MakeFromT3_V( VmathTransform3 mat ) +{ + VmathMatrix4 result; + vmathM4MakeFromT3(&result, &mat); + return result; +} + +static inline VmathMatrix4 vmathM4MakeFromCols_V( VmathVector4 _col0, VmathVector4 _col1, VmathVector4 _col2, VmathVector4 _col3 ) +{ + VmathMatrix4 result; + vmathM4MakeFromCols(&result, &_col0, &_col1, &_col2, &_col3); + return result; +} + +static inline VmathMatrix4 vmathM4MakeFromM3V3_V( VmathMatrix3 mat, VmathVector3 translateVec ) +{ + VmathMatrix4 result; + vmathM4MakeFromM3V3(&result, &mat, &translateVec); + return result; +} + +static inline VmathMatrix4 vmathM4MakeFromQV3_V( VmathQuat unitQuat, VmathVector3 translateVec ) +{ + VmathMatrix4 result; + vmathM4MakeFromQV3(&result, &unitQuat, &translateVec); + return result; +} + +static inline void vmathM4SetCol0_V( VmathMatrix4 *result, VmathVector4 _col0 ) +{ + vmathM4SetCol0(result, &_col0); +} + +static inline void vmathM4SetCol1_V( VmathMatrix4 *result, VmathVector4 _col1 ) +{ + vmathM4SetCol1(result, &_col1); +} + +static inline void vmathM4SetCol2_V( VmathMatrix4 *result, VmathVector4 _col2 ) +{ + vmathM4SetCol2(result, &_col2); +} + +static inline void vmathM4SetCol3_V( VmathMatrix4 *result, VmathVector4 _col3 ) +{ + vmathM4SetCol3(result, &_col3); +} + +static inline void vmathM4SetCol_V( VmathMatrix4 *result, int col, VmathVector4 vec ) +{ + vmathM4SetCol(result, col, &vec); +} + +static inline void vmathM4SetRow_V( VmathMatrix4 *result, int row, VmathVector4 vec ) +{ + vmathM4SetRow(result, row, &vec); +} + +static inline void vmathM4SetElem_V( VmathMatrix4 *result, int col, int row, float val ) +{ + vmathM4SetElem(result, col, row, val); +} + +static inline float vmathM4GetElem_V( VmathMatrix4 mat, int col, int row ) +{ + return vmathM4GetElem(&mat, col, row); +} + +static inline VmathVector4 vmathM4GetCol0_V( VmathMatrix4 mat ) +{ + VmathVector4 result; + vmathM4GetCol0(&result, &mat); + return result; +} + +static inline VmathVector4 vmathM4GetCol1_V( VmathMatrix4 mat ) +{ + VmathVector4 result; + vmathM4GetCol1(&result, &mat); + return result; +} + +static inline VmathVector4 vmathM4GetCol2_V( VmathMatrix4 mat ) +{ + VmathVector4 result; + vmathM4GetCol2(&result, &mat); + return result; +} + +static inline VmathVector4 vmathM4GetCol3_V( VmathMatrix4 mat ) +{ + VmathVector4 result; + vmathM4GetCol3(&result, &mat); + return result; +} + +static inline VmathVector4 vmathM4GetCol_V( VmathMatrix4 mat, int col ) +{ + VmathVector4 result; + vmathM4GetCol(&result, &mat, col); + return result; +} + +static inline VmathVector4 vmathM4GetRow_V( VmathMatrix4 mat, int row ) +{ + VmathVector4 result; + vmathM4GetRow(&result, &mat, row); + return result; +} + +static inline VmathMatrix4 vmathM4Transpose_V( VmathMatrix4 mat ) +{ + VmathMatrix4 result; + vmathM4Transpose(&result, &mat); + return result; +} + +static inline VmathMatrix4 vmathM4Inverse_V( VmathMatrix4 mat ) +{ + VmathMatrix4 result; + vmathM4Inverse(&result, &mat); + return result; +} + +static inline VmathMatrix4 vmathM4AffineInverse_V( VmathMatrix4 mat ) +{ + VmathMatrix4 result; + vmathM4AffineInverse(&result, &mat); + return result; +} + +static inline VmathMatrix4 vmathM4OrthoInverse_V( VmathMatrix4 mat ) +{ + VmathMatrix4 result; + vmathM4OrthoInverse(&result, &mat); + return result; +} + +static inline float vmathM4Determinant_V( VmathMatrix4 mat ) +{ + return vmathM4Determinant(&mat); +} + +static inline VmathMatrix4 vmathM4Add_V( VmathMatrix4 mat0, VmathMatrix4 mat1 ) +{ + VmathMatrix4 result; + vmathM4Add(&result, &mat0, &mat1); + return result; +} + +static inline VmathMatrix4 vmathM4Sub_V( VmathMatrix4 mat0, VmathMatrix4 mat1 ) +{ + VmathMatrix4 result; + vmathM4Sub(&result, &mat0, &mat1); + return result; +} + +static inline VmathMatrix4 vmathM4Neg_V( VmathMatrix4 mat ) +{ + VmathMatrix4 result; + vmathM4Neg(&result, &mat); + return result; +} + +static inline VmathMatrix4 vmathM4AbsPerElem_V( VmathMatrix4 mat ) +{ + VmathMatrix4 result; + vmathM4AbsPerElem(&result, &mat); + return result; +} + +static inline VmathMatrix4 vmathM4ScalarMul_V( VmathMatrix4 mat, float scalar ) +{ + VmathMatrix4 result; + vmathM4ScalarMul(&result, &mat, scalar); + return result; +} + +static inline VmathVector4 vmathM4MulV4_V( VmathMatrix4 mat, VmathVector4 vec ) +{ + VmathVector4 result; + vmathM4MulV4(&result, &mat, &vec); + return result; +} + +static inline VmathVector4 vmathM4MulV3_V( VmathMatrix4 mat, VmathVector3 vec ) +{ + VmathVector4 result; + vmathM4MulV3(&result, &mat, &vec); + return result; +} + +static inline VmathVector4 vmathM4MulP3_V( VmathMatrix4 mat, VmathPoint3 pnt ) +{ + VmathVector4 result; + vmathM4MulP3(&result, &mat, &pnt); + return result; +} + +static inline VmathMatrix4 vmathM4Mul_V( VmathMatrix4 mat0, VmathMatrix4 mat1 ) +{ + VmathMatrix4 result; + vmathM4Mul(&result, &mat0, &mat1); + return result; +} + +static inline VmathMatrix4 vmathM4MulT3_V( VmathMatrix4 mat, VmathTransform3 tfrm1 ) +{ + VmathMatrix4 result; + vmathM4MulT3(&result, &mat, &tfrm1); + return result; +} + +static inline VmathMatrix4 vmathM4MulPerElem_V( VmathMatrix4 mat0, VmathMatrix4 mat1 ) +{ + VmathMatrix4 result; + vmathM4MulPerElem(&result, &mat0, &mat1); + return result; +} + +static inline VmathMatrix4 vmathM4MakeIdentity_V( ) +{ + VmathMatrix4 result; + vmathM4MakeIdentity(&result); + return result; +} + +static inline void vmathM4SetUpper3x3_V( VmathMatrix4 *result, VmathMatrix3 mat3 ) +{ + vmathM4SetUpper3x3(result, &mat3); +} + +static inline VmathMatrix3 vmathM4GetUpper3x3_V( VmathMatrix4 mat ) +{ + VmathMatrix3 result; + vmathM4GetUpper3x3(&result, &mat); + return result; +} + +static inline void vmathM4SetTranslation_V( VmathMatrix4 *result, VmathVector3 translateVec ) +{ + vmathM4SetTranslation(result, &translateVec); +} + +static inline VmathVector3 vmathM4GetTranslation_V( VmathMatrix4 mat ) +{ + VmathVector3 result; + vmathM4GetTranslation(&result, &mat); + return result; +} + +static inline VmathMatrix4 vmathM4MakeRotationX_V( float radians ) +{ + VmathMatrix4 result; + vmathM4MakeRotationX(&result, radians); + return result; +} + +static inline VmathMatrix4 vmathM4MakeRotationY_V( float radians ) +{ + VmathMatrix4 result; + vmathM4MakeRotationY(&result, radians); + return result; +} + +static inline VmathMatrix4 vmathM4MakeRotationZ_V( float radians ) +{ + VmathMatrix4 result; + vmathM4MakeRotationZ(&result, radians); + return result; +} + +static inline VmathMatrix4 vmathM4MakeRotationZYX_V( VmathVector3 radiansXYZ ) +{ + VmathMatrix4 result; + vmathM4MakeRotationZYX(&result, &radiansXYZ); + return result; +} + +static inline VmathMatrix4 vmathM4MakeRotationAxis_V( float radians, VmathVector3 unitVec ) +{ + VmathMatrix4 result; + vmathM4MakeRotationAxis(&result, radians, &unitVec); + return result; +} + +static inline VmathMatrix4 vmathM4MakeRotationQ_V( VmathQuat unitQuat ) +{ + VmathMatrix4 result; + vmathM4MakeRotationQ(&result, &unitQuat); + return result; +} + +static inline VmathMatrix4 vmathM4MakeScale_V( VmathVector3 scaleVec ) +{ + VmathMatrix4 result; + vmathM4MakeScale(&result, &scaleVec); + return result; +} + +static inline VmathMatrix4 vmathM4AppendScale_V( VmathMatrix4 mat, VmathVector3 scaleVec ) +{ + VmathMatrix4 result; + vmathM4AppendScale(&result, &mat, &scaleVec); + return result; +} + +static inline VmathMatrix4 vmathM4PrependScale_V( VmathVector3 scaleVec, VmathMatrix4 mat ) +{ + VmathMatrix4 result; + vmathM4PrependScale(&result, &scaleVec, &mat); + return result; +} + +static inline VmathMatrix4 vmathM4MakeTranslation_V( VmathVector3 translateVec ) +{ + VmathMatrix4 result; + vmathM4MakeTranslation(&result, &translateVec); + return result; +} + +static inline VmathMatrix4 vmathM4MakeLookAt_V( VmathPoint3 eyePos, VmathPoint3 lookAtPos, VmathVector3 upVec ) +{ + VmathMatrix4 result; + vmathM4MakeLookAt(&result, &eyePos, &lookAtPos, &upVec); + return result; +} + +static inline VmathMatrix4 vmathM4MakePerspective_V( float fovyRadians, float aspect, float zNear, float zFar ) +{ + VmathMatrix4 result; + vmathM4MakePerspective(&result, fovyRadians, aspect, zNear, zFar); + return result; +} + +static inline VmathMatrix4 vmathM4MakeFrustum_V( float left, float right, float bottom, float top, float zNear, float zFar ) +{ + VmathMatrix4 result; + vmathM4MakeFrustum(&result, left, right, bottom, top, zNear, zFar); + return result; +} + +static inline VmathMatrix4 vmathM4MakeOrthographic_V( float left, float right, float bottom, float top, float zNear, float zFar ) +{ + VmathMatrix4 result; + vmathM4MakeOrthographic(&result, left, right, bottom, top, zNear, zFar); + return result; +} + +static inline VmathMatrix4 vmathM4Select_V( VmathMatrix4 mat0, VmathMatrix4 mat1, unsigned int select1 ) +{ + VmathMatrix4 result; + vmathM4Select(&result, &mat0, &mat1, select1); + return result; +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathM4Print_V( VmathMatrix4 mat ) +{ + vmathM4Print(&mat); +} + +static inline void vmathM4Prints_V( VmathMatrix4 mat, const char *name ) +{ + vmathM4Prints(&mat, name); +} + +#endif + +static inline VmathTransform3 vmathT3MakeFromScalar_V( float scalar ) +{ + VmathTransform3 result; + vmathT3MakeFromScalar(&result, scalar); + return result; +} + +static inline VmathTransform3 vmathT3MakeFromCols_V( VmathVector3 _col0, VmathVector3 _col1, VmathVector3 _col2, VmathVector3 _col3 ) +{ + VmathTransform3 result; + vmathT3MakeFromCols(&result, &_col0, &_col1, &_col2, &_col3); + return result; +} + +static inline VmathTransform3 vmathT3MakeFromM3V3_V( VmathMatrix3 tfrm, VmathVector3 translateVec ) +{ + VmathTransform3 result; + vmathT3MakeFromM3V3(&result, &tfrm, &translateVec); + return result; +} + +static inline VmathTransform3 vmathT3MakeFromQV3_V( VmathQuat unitQuat, VmathVector3 translateVec ) +{ + VmathTransform3 result; + vmathT3MakeFromQV3(&result, &unitQuat, &translateVec); + return result; +} + +static inline void vmathT3SetCol0_V( VmathTransform3 *result, VmathVector3 _col0 ) +{ + vmathT3SetCol0(result, &_col0); +} + +static inline void vmathT3SetCol1_V( VmathTransform3 *result, VmathVector3 _col1 ) +{ + vmathT3SetCol1(result, &_col1); +} + +static inline void vmathT3SetCol2_V( VmathTransform3 *result, VmathVector3 _col2 ) +{ + vmathT3SetCol2(result, &_col2); +} + +static inline void vmathT3SetCol3_V( VmathTransform3 *result, VmathVector3 _col3 ) +{ + vmathT3SetCol3(result, &_col3); +} + +static inline void vmathT3SetCol_V( VmathTransform3 *result, int col, VmathVector3 vec ) +{ + vmathT3SetCol(result, col, &vec); +} + +static inline void vmathT3SetRow_V( VmathTransform3 *result, int row, VmathVector4 vec ) +{ + vmathT3SetRow(result, row, &vec); +} + +static inline void vmathT3SetElem_V( VmathTransform3 *result, int col, int row, float val ) +{ + vmathT3SetElem(result, col, row, val); +} + +static inline float vmathT3GetElem_V( VmathTransform3 tfrm, int col, int row ) +{ + return vmathT3GetElem(&tfrm, col, row); +} + +static inline VmathVector3 vmathT3GetCol0_V( VmathTransform3 tfrm ) +{ + VmathVector3 result; + vmathT3GetCol0(&result, &tfrm); + return result; +} + +static inline VmathVector3 vmathT3GetCol1_V( VmathTransform3 tfrm ) +{ + VmathVector3 result; + vmathT3GetCol1(&result, &tfrm); + return result; +} + +static inline VmathVector3 vmathT3GetCol2_V( VmathTransform3 tfrm ) +{ + VmathVector3 result; + vmathT3GetCol2(&result, &tfrm); + return result; +} + +static inline VmathVector3 vmathT3GetCol3_V( VmathTransform3 tfrm ) +{ + VmathVector3 result; + vmathT3GetCol3(&result, &tfrm); + return result; +} + +static inline VmathVector3 vmathT3GetCol_V( VmathTransform3 tfrm, int col ) +{ + VmathVector3 result; + vmathT3GetCol(&result, &tfrm, col); + return result; +} + +static inline VmathVector4 vmathT3GetRow_V( VmathTransform3 tfrm, int row ) +{ + VmathVector4 result; + vmathT3GetRow(&result, &tfrm, row); + return result; +} + +static inline VmathTransform3 vmathT3Inverse_V( VmathTransform3 tfrm ) +{ + VmathTransform3 result; + vmathT3Inverse(&result, &tfrm); + return result; +} + +static inline VmathTransform3 vmathT3OrthoInverse_V( VmathTransform3 tfrm ) +{ + VmathTransform3 result; + vmathT3OrthoInverse(&result, &tfrm); + return result; +} + +static inline VmathTransform3 vmathT3AbsPerElem_V( VmathTransform3 tfrm ) +{ + VmathTransform3 result; + vmathT3AbsPerElem(&result, &tfrm); + return result; +} + +static inline VmathVector3 vmathT3MulV3_V( VmathTransform3 tfrm, VmathVector3 vec ) +{ + VmathVector3 result; + vmathT3MulV3(&result, &tfrm, &vec); + return result; +} + +static inline VmathPoint3 vmathT3MulP3_V( VmathTransform3 tfrm, VmathPoint3 pnt ) +{ + VmathPoint3 result; + vmathT3MulP3(&result, &tfrm, &pnt); + return result; +} + +static inline VmathTransform3 vmathT3Mul_V( VmathTransform3 tfrm0, VmathTransform3 tfrm1 ) +{ + VmathTransform3 result; + vmathT3Mul(&result, &tfrm0, &tfrm1); + return result; +} + +static inline VmathTransform3 vmathT3MulPerElem_V( VmathTransform3 tfrm0, VmathTransform3 tfrm1 ) +{ + VmathTransform3 result; + vmathT3MulPerElem(&result, &tfrm0, &tfrm1); + return result; +} + +static inline VmathTransform3 vmathT3MakeIdentity_V( ) +{ + VmathTransform3 result; + vmathT3MakeIdentity(&result); + return result; +} + +static inline void vmathT3SetUpper3x3_V( VmathTransform3 *result, VmathMatrix3 tfrm ) +{ + vmathT3SetUpper3x3(result, &tfrm); +} + +static inline VmathMatrix3 vmathT3GetUpper3x3_V( VmathTransform3 tfrm ) +{ + VmathMatrix3 result; + vmathT3GetUpper3x3(&result, &tfrm); + return result; +} + +static inline void vmathT3SetTranslation_V( VmathTransform3 *result, VmathVector3 translateVec ) +{ + vmathT3SetTranslation(result, &translateVec); +} + +static inline VmathVector3 vmathT3GetTranslation_V( VmathTransform3 tfrm ) +{ + VmathVector3 result; + vmathT3GetTranslation(&result, &tfrm); + return result; +} + +static inline VmathTransform3 vmathT3MakeRotationX_V( float radians ) +{ + VmathTransform3 result; + vmathT3MakeRotationX(&result, radians); + return result; +} + +static inline VmathTransform3 vmathT3MakeRotationY_V( float radians ) +{ + VmathTransform3 result; + vmathT3MakeRotationY(&result, radians); + return result; +} + +static inline VmathTransform3 vmathT3MakeRotationZ_V( float radians ) +{ + VmathTransform3 result; + vmathT3MakeRotationZ(&result, radians); + return result; +} + +static inline VmathTransform3 vmathT3MakeRotationZYX_V( VmathVector3 radiansXYZ ) +{ + VmathTransform3 result; + vmathT3MakeRotationZYX(&result, &radiansXYZ); + return result; +} + +static inline VmathTransform3 vmathT3MakeRotationAxis_V( float radians, VmathVector3 unitVec ) +{ + VmathTransform3 result; + vmathT3MakeRotationAxis(&result, radians, &unitVec); + return result; +} + +static inline VmathTransform3 vmathT3MakeRotationQ_V( VmathQuat unitQuat ) +{ + VmathTransform3 result; + vmathT3MakeRotationQ(&result, &unitQuat); + return result; +} + +static inline VmathTransform3 vmathT3MakeScale_V( VmathVector3 scaleVec ) +{ + VmathTransform3 result; + vmathT3MakeScale(&result, &scaleVec); + return result; +} + +static inline VmathTransform3 vmathT3AppendScale_V( VmathTransform3 tfrm, VmathVector3 scaleVec ) +{ + VmathTransform3 result; + vmathT3AppendScale(&result, &tfrm, &scaleVec); + return result; +} + +static inline VmathTransform3 vmathT3PrependScale_V( VmathVector3 scaleVec, VmathTransform3 tfrm ) +{ + VmathTransform3 result; + vmathT3PrependScale(&result, &scaleVec, &tfrm); + return result; +} + +static inline VmathTransform3 vmathT3MakeTranslation_V( VmathVector3 translateVec ) +{ + VmathTransform3 result; + vmathT3MakeTranslation(&result, &translateVec); + return result; +} + +static inline VmathTransform3 vmathT3Select_V( VmathTransform3 tfrm0, VmathTransform3 tfrm1, unsigned int select1 ) +{ + VmathTransform3 result; + vmathT3Select(&result, &tfrm0, &tfrm1, select1); + return result; +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathT3Print_V( VmathTransform3 tfrm ) +{ + vmathT3Print(&tfrm); +} + +static inline void vmathT3Prints_V( VmathTransform3 tfrm, const char *name ) +{ + vmathT3Prints(&tfrm, name); +} + +#endif + +static inline VmathQuat vmathQMakeFromM3_V( VmathMatrix3 tfrm ) +{ + VmathQuat result; + vmathQMakeFromM3(&result, &tfrm); + return result; +} + +static inline VmathMatrix3 vmathV3Outer_V( VmathVector3 tfrm0, VmathVector3 tfrm1 ) +{ + VmathMatrix3 result; + vmathV3Outer(&result, &tfrm0, &tfrm1); + return result; +} + +static inline VmathMatrix4 vmathV4Outer_V( VmathVector4 tfrm0, VmathVector4 tfrm1 ) +{ + VmathMatrix4 result; + vmathV4Outer(&result, &tfrm0, &tfrm1); + return result; +} + +static inline VmathVector3 vmathV3RowMul_V( VmathVector3 vec, VmathMatrix3 mat ) +{ + VmathVector3 result; + vmathV3RowMul(&result, &vec, &mat); + return result; +} + +static inline VmathMatrix3 vmathV3CrossMatrix_V( VmathVector3 vec ) +{ + VmathMatrix3 result; + vmathV3CrossMatrix(&result, &vec); + return result; +} + +static inline VmathMatrix3 vmathV3CrossMatrixMul_V( VmathVector3 vec, VmathMatrix3 mat ) +{ + VmathMatrix3 result; + vmathV3CrossMatrixMul(&result, &vec, &mat); + return result; +} + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/spu/c/mat_soa.h b/Extras/vectormathlibrary/include/vectormath/spu/c/mat_soa.h new file mode 100644 index 000000000..c2c3734e0 --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/spu/c/mat_soa.h @@ -0,0 +1,1493 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_MAT_SOA_C_H +#define _VECTORMATH_MAT_SOA_C_H + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/*----------------------------------------------------------------------------- + * Constants + */ +#define _VECTORMATH_PI_OVER_2 1.570796327f + +/*----------------------------------------------------------------------------- + * Definitions + */ +static inline void vmathSoaM3Copy( VmathSoaMatrix3 *result, const VmathSoaMatrix3 *mat ) +{ + vmathSoaV3Copy( &result->col0, &mat->col0 ); + vmathSoaV3Copy( &result->col1, &mat->col1 ); + vmathSoaV3Copy( &result->col2, &mat->col2 ); +} + +static inline void vmathSoaM3MakeFromScalar( VmathSoaMatrix3 *result, vec_float4 scalar ) +{ + vmathSoaV3MakeFromScalar( &result->col0, scalar ); + vmathSoaV3MakeFromScalar( &result->col1, scalar ); + vmathSoaV3MakeFromScalar( &result->col2, scalar ); +} + +static inline void vmathSoaM3MakeFromQ( VmathSoaMatrix3 *result, const VmathSoaQuat *unitQuat ) +{ + vec_float4 qx, qy, qz, qw, qx2, qy2, qz2, qxqx2, qyqy2, qzqz2, qxqy2, qyqz2, qzqw2, qxqz2, qyqw2, qxqw2; + qx = unitQuat->x; + qy = unitQuat->y; + qz = unitQuat->z; + qw = unitQuat->w; + qx2 = spu_add( qx, qx ); + qy2 = spu_add( qy, qy ); + qz2 = spu_add( qz, qz ); + qxqx2 = spu_mul( qx, qx2 ); + qxqy2 = spu_mul( qx, qy2 ); + qxqz2 = spu_mul( qx, qz2 ); + qxqw2 = spu_mul( qw, qx2 ); + qyqy2 = spu_mul( qy, qy2 ); + qyqz2 = spu_mul( qy, qz2 ); + qyqw2 = spu_mul( qw, qy2 ); + qzqz2 = spu_mul( qz, qz2 ); + qzqw2 = spu_mul( qw, qz2 ); + vmathSoaV3MakeFromElems( &result->col0, spu_sub( spu_sub( spu_splats(1.0f), qyqy2 ), qzqz2 ), spu_add( qxqy2, qzqw2 ), spu_sub( qxqz2, qyqw2 ) ); + vmathSoaV3MakeFromElems( &result->col1, spu_sub( qxqy2, qzqw2 ), spu_sub( spu_sub( spu_splats(1.0f), qxqx2 ), qzqz2 ), spu_add( qyqz2, qxqw2 ) ); + vmathSoaV3MakeFromElems( &result->col2, spu_add( qxqz2, qyqw2 ), spu_sub( qyqz2, qxqw2 ), spu_sub( spu_sub( spu_splats(1.0f), qxqx2 ), qyqy2 ) ); +} + +static inline void vmathSoaM3MakeFromCols( VmathSoaMatrix3 *result, const VmathSoaVector3 *_col0, const VmathSoaVector3 *_col1, const VmathSoaVector3 *_col2 ) +{ + vmathSoaV3Copy( &result->col0, _col0 ); + vmathSoaV3Copy( &result->col1, _col1 ); + vmathSoaV3Copy( &result->col2, _col2 ); +} + +static inline void vmathSoaM3MakeFromAos( VmathSoaMatrix3 *result, const VmathMatrix3 *mat ) +{ + vmathSoaV3MakeFromAos( &result->col0, &mat->col0 ); + vmathSoaV3MakeFromAos( &result->col1, &mat->col1 ); + vmathSoaV3MakeFromAos( &result->col2, &mat->col2 ); +} + +static inline void vmathSoaM3MakeFrom4Aos( VmathSoaMatrix3 *result, const VmathMatrix3 *mat0, const VmathMatrix3 *mat1, const VmathMatrix3 *mat2, const VmathMatrix3 *mat3 ) +{ + vmathSoaV3MakeFrom4Aos( &result->col0, &mat0->col0, &mat1->col0, &mat2->col0, &mat3->col0 ); + vmathSoaV3MakeFrom4Aos( &result->col1, &mat0->col1, &mat1->col1, &mat2->col1, &mat3->col1 ); + vmathSoaV3MakeFrom4Aos( &result->col2, &mat0->col2, &mat1->col2, &mat2->col2, &mat3->col2 ); +} + +static inline void vmathSoaM3Get4Aos( const VmathSoaMatrix3 *mat, VmathMatrix3 *result0, VmathMatrix3 *result1, VmathMatrix3 *result2, VmathMatrix3 *result3 ) +{ + vmathSoaV3Get4Aos( &mat->col0, &result0->col0, &result1->col0, &result2->col0, &result3->col0 ); + vmathSoaV3Get4Aos( &mat->col1, &result0->col1, &result1->col1, &result2->col1, &result3->col1 ); + vmathSoaV3Get4Aos( &mat->col2, &result0->col2, &result1->col2, &result2->col2, &result3->col2 ); +} + +static inline void vmathSoaM3SetCol0( VmathSoaMatrix3 *result, const VmathSoaVector3 *_col0 ) +{ + vmathSoaV3Copy( &result->col0, _col0 ); +} + +static inline void vmathSoaM3SetCol1( VmathSoaMatrix3 *result, const VmathSoaVector3 *_col1 ) +{ + vmathSoaV3Copy( &result->col1, _col1 ); +} + +static inline void vmathSoaM3SetCol2( VmathSoaMatrix3 *result, const VmathSoaVector3 *_col2 ) +{ + vmathSoaV3Copy( &result->col2, _col2 ); +} + +static inline void vmathSoaM3SetCol( VmathSoaMatrix3 *result, int col, const VmathSoaVector3 *vec ) +{ + vmathSoaV3Copy( (&result->col0 + col), vec ); +} + +static inline void vmathSoaM3SetRow( VmathSoaMatrix3 *result, int row, const VmathSoaVector3 *vec ) +{ + vmathSoaV3SetElem( &result->col0, row, vmathSoaV3GetElem( vec, 0 ) ); + vmathSoaV3SetElem( &result->col1, row, vmathSoaV3GetElem( vec, 1 ) ); + vmathSoaV3SetElem( &result->col2, row, vmathSoaV3GetElem( vec, 2 ) ); +} + +static inline void vmathSoaM3SetElem( VmathSoaMatrix3 *result, int col, int row, vec_float4 val ) +{ + VmathSoaVector3 tmpV3_0; + vmathSoaM3GetCol( &tmpV3_0, result, col ); + vmathSoaV3SetElem( &tmpV3_0, row, val ); + vmathSoaM3SetCol( result, col, &tmpV3_0 ); +} + +static inline vec_float4 vmathSoaM3GetElem( const VmathSoaMatrix3 *mat, int col, int row ) +{ + VmathSoaVector3 tmpV3_0; + vmathSoaM3GetCol( &tmpV3_0, mat, col ); + return vmathSoaV3GetElem( &tmpV3_0, row ); +} + +static inline void vmathSoaM3GetCol0( VmathSoaVector3 *result, const VmathSoaMatrix3 *mat ) +{ + vmathSoaV3Copy( result, &mat->col0 ); +} + +static inline void vmathSoaM3GetCol1( VmathSoaVector3 *result, const VmathSoaMatrix3 *mat ) +{ + vmathSoaV3Copy( result, &mat->col1 ); +} + +static inline void vmathSoaM3GetCol2( VmathSoaVector3 *result, const VmathSoaMatrix3 *mat ) +{ + vmathSoaV3Copy( result, &mat->col2 ); +} + +static inline void vmathSoaM3GetCol( VmathSoaVector3 *result, const VmathSoaMatrix3 *mat, int col ) +{ + vmathSoaV3Copy( result, (&mat->col0 + col) ); +} + +static inline void vmathSoaM3GetRow( VmathSoaVector3 *result, const VmathSoaMatrix3 *mat, int row ) +{ + vmathSoaV3MakeFromElems( result, vmathSoaV3GetElem( &mat->col0, row ), vmathSoaV3GetElem( &mat->col1, row ), vmathSoaV3GetElem( &mat->col2, row ) ); +} + +static inline void vmathSoaM3Transpose( VmathSoaMatrix3 *result, const VmathSoaMatrix3 *mat ) +{ + VmathSoaMatrix3 tmpResult; + vmathSoaV3MakeFromElems( &tmpResult.col0, mat->col0.x, mat->col1.x, mat->col2.x ); + vmathSoaV3MakeFromElems( &tmpResult.col1, mat->col0.y, mat->col1.y, mat->col2.y ); + vmathSoaV3MakeFromElems( &tmpResult.col2, mat->col0.z, mat->col1.z, mat->col2.z ); + vmathSoaM3Copy( result, &tmpResult ); +} + +static inline void vmathSoaM3Inverse( VmathSoaMatrix3 *result, const VmathSoaMatrix3 *mat ) +{ + VmathSoaVector3 tmp0, tmp1, tmp2; + vec_float4 detinv; + vmathSoaV3Cross( &tmp0, &mat->col1, &mat->col2 ); + vmathSoaV3Cross( &tmp1, &mat->col2, &mat->col0 ); + vmathSoaV3Cross( &tmp2, &mat->col0, &mat->col1 ); + detinv = recipf4( vmathSoaV3Dot( &mat->col2, &tmp2 ) ); + vmathSoaV3MakeFromElems( &result->col0, spu_mul( tmp0.x, detinv ), spu_mul( tmp1.x, detinv ), spu_mul( tmp2.x, detinv ) ); + vmathSoaV3MakeFromElems( &result->col1, spu_mul( tmp0.y, detinv ), spu_mul( tmp1.y, detinv ), spu_mul( tmp2.y, detinv ) ); + vmathSoaV3MakeFromElems( &result->col2, spu_mul( tmp0.z, detinv ), spu_mul( tmp1.z, detinv ), spu_mul( tmp2.z, detinv ) ); +} + +static inline vec_float4 vmathSoaM3Determinant( const VmathSoaMatrix3 *mat ) +{ + VmathSoaVector3 tmpV3_0; + vmathSoaV3Cross( &tmpV3_0, &mat->col0, &mat->col1 ); + return vmathSoaV3Dot( &mat->col2, &tmpV3_0 ); +} + +static inline void vmathSoaM3Add( VmathSoaMatrix3 *result, const VmathSoaMatrix3 *mat0, const VmathSoaMatrix3 *mat1 ) +{ + vmathSoaV3Add( &result->col0, &mat0->col0, &mat1->col0 ); + vmathSoaV3Add( &result->col1, &mat0->col1, &mat1->col1 ); + vmathSoaV3Add( &result->col2, &mat0->col2, &mat1->col2 ); +} + +static inline void vmathSoaM3Sub( VmathSoaMatrix3 *result, const VmathSoaMatrix3 *mat0, const VmathSoaMatrix3 *mat1 ) +{ + vmathSoaV3Sub( &result->col0, &mat0->col0, &mat1->col0 ); + vmathSoaV3Sub( &result->col1, &mat0->col1, &mat1->col1 ); + vmathSoaV3Sub( &result->col2, &mat0->col2, &mat1->col2 ); +} + +static inline void vmathSoaM3Neg( VmathSoaMatrix3 *result, const VmathSoaMatrix3 *mat ) +{ + vmathSoaV3Neg( &result->col0, &mat->col0 ); + vmathSoaV3Neg( &result->col1, &mat->col1 ); + vmathSoaV3Neg( &result->col2, &mat->col2 ); +} + +static inline void vmathSoaM3AbsPerElem( VmathSoaMatrix3 *result, const VmathSoaMatrix3 *mat ) +{ + vmathSoaV3AbsPerElem( &result->col0, &mat->col0 ); + vmathSoaV3AbsPerElem( &result->col1, &mat->col1 ); + vmathSoaV3AbsPerElem( &result->col2, &mat->col2 ); +} + +static inline void vmathSoaM3ScalarMul( VmathSoaMatrix3 *result, const VmathSoaMatrix3 *mat, vec_float4 scalar ) +{ + vmathSoaV3ScalarMul( &result->col0, &mat->col0, scalar ); + vmathSoaV3ScalarMul( &result->col1, &mat->col1, scalar ); + vmathSoaV3ScalarMul( &result->col2, &mat->col2, scalar ); +} + +static inline void vmathSoaM3MulV3( VmathSoaVector3 *result, const VmathSoaMatrix3 *mat, const VmathSoaVector3 *vec ) +{ + vec_float4 tmpX, tmpY, tmpZ; + tmpX = spu_add( spu_add( spu_mul( mat->col0.x, vec->x ), spu_mul( mat->col1.x, vec->y ) ), spu_mul( mat->col2.x, vec->z ) ); + tmpY = spu_add( spu_add( spu_mul( mat->col0.y, vec->x ), spu_mul( mat->col1.y, vec->y ) ), spu_mul( mat->col2.y, vec->z ) ); + tmpZ = spu_add( spu_add( spu_mul( mat->col0.z, vec->x ), spu_mul( mat->col1.z, vec->y ) ), spu_mul( mat->col2.z, vec->z ) ); + vmathSoaV3MakeFromElems( result, tmpX, tmpY, tmpZ ); +} + +static inline void vmathSoaM3Mul( VmathSoaMatrix3 *result, const VmathSoaMatrix3 *mat0, const VmathSoaMatrix3 *mat1 ) +{ + VmathSoaMatrix3 tmpResult; + vmathSoaM3MulV3( &tmpResult.col0, mat0, &mat1->col0 ); + vmathSoaM3MulV3( &tmpResult.col1, mat0, &mat1->col1 ); + vmathSoaM3MulV3( &tmpResult.col2, mat0, &mat1->col2 ); + vmathSoaM3Copy( result, &tmpResult ); +} + +static inline void vmathSoaM3MulPerElem( VmathSoaMatrix3 *result, const VmathSoaMatrix3 *mat0, const VmathSoaMatrix3 *mat1 ) +{ + vmathSoaV3MulPerElem( &result->col0, &mat0->col0, &mat1->col0 ); + vmathSoaV3MulPerElem( &result->col1, &mat0->col1, &mat1->col1 ); + vmathSoaV3MulPerElem( &result->col2, &mat0->col2, &mat1->col2 ); +} + +static inline void vmathSoaM3MakeIdentity( VmathSoaMatrix3 *result ) +{ + vmathSoaV3MakeXAxis( &result->col0 ); + vmathSoaV3MakeYAxis( &result->col1 ); + vmathSoaV3MakeZAxis( &result->col2 ); +} + +static inline void vmathSoaM3MakeRotationX( VmathSoaMatrix3 *result, vec_float4 radians ) +{ + vec_float4 s, c; + sincosf4( radians, &s, &c ); + vmathSoaV3MakeXAxis( &result->col0 ); + vmathSoaV3MakeFromElems( &result->col1, spu_splats(0.0f), c, s ); + vmathSoaV3MakeFromElems( &result->col2, spu_splats(0.0f), negatef4( s ), c ); +} + +static inline void vmathSoaM3MakeRotationY( VmathSoaMatrix3 *result, vec_float4 radians ) +{ + vec_float4 s, c; + sincosf4( radians, &s, &c ); + vmathSoaV3MakeFromElems( &result->col0, c, spu_splats(0.0f), negatef4( s ) ); + vmathSoaV3MakeYAxis( &result->col1 ); + vmathSoaV3MakeFromElems( &result->col2, s, spu_splats(0.0f), c ); +} + +static inline void vmathSoaM3MakeRotationZ( VmathSoaMatrix3 *result, vec_float4 radians ) +{ + vec_float4 s, c; + sincosf4( radians, &s, &c ); + vmathSoaV3MakeFromElems( &result->col0, c, s, spu_splats(0.0f) ); + vmathSoaV3MakeFromElems( &result->col1, negatef4( s ), c, spu_splats(0.0f) ); + vmathSoaV3MakeZAxis( &result->col2 ); +} + +static inline void vmathSoaM3MakeRotationZYX( VmathSoaMatrix3 *result, const VmathSoaVector3 *radiansXYZ ) +{ + vec_float4 sX, cX, sY, cY, sZ, cZ, tmp0, tmp1; + sincosf4( radiansXYZ->x, &sX, &cX ); + sincosf4( radiansXYZ->y, &sY, &cY ); + sincosf4( radiansXYZ->z, &sZ, &cZ ); + tmp0 = spu_mul( cZ, sY ); + tmp1 = spu_mul( sZ, sY ); + vmathSoaV3MakeFromElems( &result->col0, spu_mul( cZ, cY ), spu_mul( sZ, cY ), negatef4( sY ) ); + vmathSoaV3MakeFromElems( &result->col1, spu_sub( spu_mul( tmp0, sX ), spu_mul( sZ, cX ) ), spu_add( spu_mul( tmp1, sX ), spu_mul( cZ, cX ) ), spu_mul( cY, sX ) ); + vmathSoaV3MakeFromElems( &result->col2, spu_add( spu_mul( tmp0, cX ), spu_mul( sZ, sX ) ), spu_sub( spu_mul( tmp1, cX ), spu_mul( cZ, sX ) ), spu_mul( cY, cX ) ); +} + +static inline void vmathSoaM3MakeRotationAxis( VmathSoaMatrix3 *result, vec_float4 radians, const VmathSoaVector3 *unitVec ) +{ + vec_float4 x, y, z, s, c, oneMinusC, xy, yz, zx; + sincosf4( radians, &s, &c ); + x = unitVec->x; + y = unitVec->y; + z = unitVec->z; + xy = spu_mul( x, y ); + yz = spu_mul( y, z ); + zx = spu_mul( z, x ); + oneMinusC = spu_sub( spu_splats(1.0f), c ); + vmathSoaV3MakeFromElems( &result->col0, spu_add( spu_mul( spu_mul( x, x ), oneMinusC ), c ), spu_add( spu_mul( xy, oneMinusC ), spu_mul( z, s ) ), spu_sub( spu_mul( zx, oneMinusC ), spu_mul( y, s ) ) ); + vmathSoaV3MakeFromElems( &result->col1, spu_sub( spu_mul( xy, oneMinusC ), spu_mul( z, s ) ), spu_add( spu_mul( spu_mul( y, y ), oneMinusC ), c ), spu_add( spu_mul( yz, oneMinusC ), spu_mul( x, s ) ) ); + vmathSoaV3MakeFromElems( &result->col2, spu_add( spu_mul( zx, oneMinusC ), spu_mul( y, s ) ), spu_sub( spu_mul( yz, oneMinusC ), spu_mul( x, s ) ), spu_add( spu_mul( spu_mul( z, z ), oneMinusC ), c ) ); +} + +static inline void vmathSoaM3MakeRotationQ( VmathSoaMatrix3 *result, const VmathSoaQuat *unitQuat ) +{ + vmathSoaM3MakeFromQ( result, unitQuat ); +} + +static inline void vmathSoaM3MakeScale( VmathSoaMatrix3 *result, const VmathSoaVector3 *scaleVec ) +{ + vmathSoaV3MakeFromElems( &result->col0, scaleVec->x, spu_splats(0.0f), spu_splats(0.0f) ); + vmathSoaV3MakeFromElems( &result->col1, spu_splats(0.0f), scaleVec->y, spu_splats(0.0f) ); + vmathSoaV3MakeFromElems( &result->col2, spu_splats(0.0f), spu_splats(0.0f), scaleVec->z ); +} + +static inline void vmathSoaM3AppendScale( VmathSoaMatrix3 *result, const VmathSoaMatrix3 *mat, const VmathSoaVector3 *scaleVec ) +{ + vmathSoaV3ScalarMul( &result->col0, &mat->col0, vmathSoaV3GetX( scaleVec ) ); + vmathSoaV3ScalarMul( &result->col1, &mat->col1, vmathSoaV3GetY( scaleVec ) ); + vmathSoaV3ScalarMul( &result->col2, &mat->col2, vmathSoaV3GetZ( scaleVec ) ); +} + +static inline void vmathSoaM3PrependScale( VmathSoaMatrix3 *result, const VmathSoaVector3 *scaleVec, const VmathSoaMatrix3 *mat ) +{ + vmathSoaV3MulPerElem( &result->col0, &mat->col0, scaleVec ); + vmathSoaV3MulPerElem( &result->col1, &mat->col1, scaleVec ); + vmathSoaV3MulPerElem( &result->col2, &mat->col2, scaleVec ); +} + +static inline void vmathSoaM3Select( VmathSoaMatrix3 *result, const VmathSoaMatrix3 *mat0, const VmathSoaMatrix3 *mat1, vec_uint4 select1 ) +{ + vmathSoaV3Select( &result->col0, &mat0->col0, &mat1->col0, select1 ); + vmathSoaV3Select( &result->col1, &mat0->col1, &mat1->col1, select1 ); + vmathSoaV3Select( &result->col2, &mat0->col2, &mat1->col2, select1 ); +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathSoaM3Print( const VmathSoaMatrix3 *mat ) +{ + VmathMatrix3 mat0, mat1, mat2, mat3; + vmathSoaM3Get4Aos( mat, &mat0, &mat1, &mat2, &mat3 ); + printf("slot 0:\n"); + vmathM3Print( &mat0 ); + printf("slot 1:\n"); + vmathM3Print( &mat1 ); + printf("slot 2:\n"); + vmathM3Print( &mat2 ); + printf("slot 3:\n"); + vmathM3Print( &mat3 ); +} + +static inline void vmathSoaM3Prints( const VmathSoaMatrix3 *mat, const char *name ) +{ + printf("%s:\n", name); + vmathSoaM3Print( mat ); +} + +#endif + +static inline void vmathSoaM4Copy( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat ) +{ + vmathSoaV4Copy( &result->col0, &mat->col0 ); + vmathSoaV4Copy( &result->col1, &mat->col1 ); + vmathSoaV4Copy( &result->col2, &mat->col2 ); + vmathSoaV4Copy( &result->col3, &mat->col3 ); +} + +static inline void vmathSoaM4MakeFromScalar( VmathSoaMatrix4 *result, vec_float4 scalar ) +{ + vmathSoaV4MakeFromScalar( &result->col0, scalar ); + vmathSoaV4MakeFromScalar( &result->col1, scalar ); + vmathSoaV4MakeFromScalar( &result->col2, scalar ); + vmathSoaV4MakeFromScalar( &result->col3, scalar ); +} + +static inline void vmathSoaM4MakeFromT3( VmathSoaMatrix4 *result, const VmathSoaTransform3 *mat ) +{ + vmathSoaV4MakeFromV3Scalar( &result->col0, &mat->col0, spu_splats(0.0f) ); + vmathSoaV4MakeFromV3Scalar( &result->col1, &mat->col1, spu_splats(0.0f) ); + vmathSoaV4MakeFromV3Scalar( &result->col2, &mat->col2, spu_splats(0.0f) ); + vmathSoaV4MakeFromV3Scalar( &result->col3, &mat->col3, spu_splats(1.0f) ); +} + +static inline void vmathSoaM4MakeFromCols( VmathSoaMatrix4 *result, const VmathSoaVector4 *_col0, const VmathSoaVector4 *_col1, const VmathSoaVector4 *_col2, const VmathSoaVector4 *_col3 ) +{ + vmathSoaV4Copy( &result->col0, _col0 ); + vmathSoaV4Copy( &result->col1, _col1 ); + vmathSoaV4Copy( &result->col2, _col2 ); + vmathSoaV4Copy( &result->col3, _col3 ); +} + +static inline void vmathSoaM4MakeFromM3V3( VmathSoaMatrix4 *result, const VmathSoaMatrix3 *mat, const VmathSoaVector3 *translateVec ) +{ + vmathSoaV4MakeFromV3Scalar( &result->col0, &mat->col0, spu_splats(0.0f) ); + vmathSoaV4MakeFromV3Scalar( &result->col1, &mat->col1, spu_splats(0.0f) ); + vmathSoaV4MakeFromV3Scalar( &result->col2, &mat->col2, spu_splats(0.0f) ); + vmathSoaV4MakeFromV3Scalar( &result->col3, translateVec, spu_splats(1.0f) ); +} + +static inline void vmathSoaM4MakeFromQV3( VmathSoaMatrix4 *result, const VmathSoaQuat *unitQuat, const VmathSoaVector3 *translateVec ) +{ + VmathSoaMatrix3 mat; + vmathSoaM3MakeFromQ( &mat, unitQuat ); + vmathSoaV4MakeFromV3Scalar( &result->col0, &mat.col0, spu_splats(0.0f) ); + vmathSoaV4MakeFromV3Scalar( &result->col1, &mat.col1, spu_splats(0.0f) ); + vmathSoaV4MakeFromV3Scalar( &result->col2, &mat.col2, spu_splats(0.0f) ); + vmathSoaV4MakeFromV3Scalar( &result->col3, translateVec, spu_splats(1.0f) ); +} + +static inline void vmathSoaM4MakeFromAos( VmathSoaMatrix4 *result, const VmathMatrix4 *mat ) +{ + vmathSoaV4MakeFromAos( &result->col0, &mat->col0 ); + vmathSoaV4MakeFromAos( &result->col1, &mat->col1 ); + vmathSoaV4MakeFromAos( &result->col2, &mat->col2 ); + vmathSoaV4MakeFromAos( &result->col3, &mat->col3 ); +} + +static inline void vmathSoaM4MakeFrom4Aos( VmathSoaMatrix4 *result, const VmathMatrix4 *mat0, const VmathMatrix4 *mat1, const VmathMatrix4 *mat2, const VmathMatrix4 *mat3 ) +{ + vmathSoaV4MakeFrom4Aos( &result->col0, &mat0->col0, &mat1->col0, &mat2->col0, &mat3->col0 ); + vmathSoaV4MakeFrom4Aos( &result->col1, &mat0->col1, &mat1->col1, &mat2->col1, &mat3->col1 ); + vmathSoaV4MakeFrom4Aos( &result->col2, &mat0->col2, &mat1->col2, &mat2->col2, &mat3->col2 ); + vmathSoaV4MakeFrom4Aos( &result->col3, &mat0->col3, &mat1->col3, &mat2->col3, &mat3->col3 ); +} + +static inline void vmathSoaM4Get4Aos( const VmathSoaMatrix4 *mat, VmathMatrix4 *result0, VmathMatrix4 *result1, VmathMatrix4 *result2, VmathMatrix4 *result3 ) +{ + vmathSoaV4Get4Aos( &mat->col0, &result0->col0, &result1->col0, &result2->col0, &result3->col0 ); + vmathSoaV4Get4Aos( &mat->col1, &result0->col1, &result1->col1, &result2->col1, &result3->col1 ); + vmathSoaV4Get4Aos( &mat->col2, &result0->col2, &result1->col2, &result2->col2, &result3->col2 ); + vmathSoaV4Get4Aos( &mat->col3, &result0->col3, &result1->col3, &result2->col3, &result3->col3 ); +} + +static inline void vmathSoaM4SetCol0( VmathSoaMatrix4 *result, const VmathSoaVector4 *_col0 ) +{ + vmathSoaV4Copy( &result->col0, _col0 ); +} + +static inline void vmathSoaM4SetCol1( VmathSoaMatrix4 *result, const VmathSoaVector4 *_col1 ) +{ + vmathSoaV4Copy( &result->col1, _col1 ); +} + +static inline void vmathSoaM4SetCol2( VmathSoaMatrix4 *result, const VmathSoaVector4 *_col2 ) +{ + vmathSoaV4Copy( &result->col2, _col2 ); +} + +static inline void vmathSoaM4SetCol3( VmathSoaMatrix4 *result, const VmathSoaVector4 *_col3 ) +{ + vmathSoaV4Copy( &result->col3, _col3 ); +} + +static inline void vmathSoaM4SetCol( VmathSoaMatrix4 *result, int col, const VmathSoaVector4 *vec ) +{ + vmathSoaV4Copy( (&result->col0 + col), vec ); +} + +static inline void vmathSoaM4SetRow( VmathSoaMatrix4 *result, int row, const VmathSoaVector4 *vec ) +{ + vmathSoaV4SetElem( &result->col0, row, vmathSoaV4GetElem( vec, 0 ) ); + vmathSoaV4SetElem( &result->col1, row, vmathSoaV4GetElem( vec, 1 ) ); + vmathSoaV4SetElem( &result->col2, row, vmathSoaV4GetElem( vec, 2 ) ); + vmathSoaV4SetElem( &result->col3, row, vmathSoaV4GetElem( vec, 3 ) ); +} + +static inline void vmathSoaM4SetElem( VmathSoaMatrix4 *result, int col, int row, vec_float4 val ) +{ + VmathSoaVector4 tmpV3_0; + vmathSoaM4GetCol( &tmpV3_0, result, col ); + vmathSoaV4SetElem( &tmpV3_0, row, val ); + vmathSoaM4SetCol( result, col, &tmpV3_0 ); +} + +static inline vec_float4 vmathSoaM4GetElem( const VmathSoaMatrix4 *mat, int col, int row ) +{ + VmathSoaVector4 tmpV4_0; + vmathSoaM4GetCol( &tmpV4_0, mat, col ); + return vmathSoaV4GetElem( &tmpV4_0, row ); +} + +static inline void vmathSoaM4GetCol0( VmathSoaVector4 *result, const VmathSoaMatrix4 *mat ) +{ + vmathSoaV4Copy( result, &mat->col0 ); +} + +static inline void vmathSoaM4GetCol1( VmathSoaVector4 *result, const VmathSoaMatrix4 *mat ) +{ + vmathSoaV4Copy( result, &mat->col1 ); +} + +static inline void vmathSoaM4GetCol2( VmathSoaVector4 *result, const VmathSoaMatrix4 *mat ) +{ + vmathSoaV4Copy( result, &mat->col2 ); +} + +static inline void vmathSoaM4GetCol3( VmathSoaVector4 *result, const VmathSoaMatrix4 *mat ) +{ + vmathSoaV4Copy( result, &mat->col3 ); +} + +static inline void vmathSoaM4GetCol( VmathSoaVector4 *result, const VmathSoaMatrix4 *mat, int col ) +{ + vmathSoaV4Copy( result, (&mat->col0 + col) ); +} + +static inline void vmathSoaM4GetRow( VmathSoaVector4 *result, const VmathSoaMatrix4 *mat, int row ) +{ + vmathSoaV4MakeFromElems( result, vmathSoaV4GetElem( &mat->col0, row ), vmathSoaV4GetElem( &mat->col1, row ), vmathSoaV4GetElem( &mat->col2, row ), vmathSoaV4GetElem( &mat->col3, row ) ); +} + +static inline void vmathSoaM4Transpose( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat ) +{ + VmathSoaMatrix4 tmpResult; + vmathSoaV4MakeFromElems( &tmpResult.col0, mat->col0.x, mat->col1.x, mat->col2.x, mat->col3.x ); + vmathSoaV4MakeFromElems( &tmpResult.col1, mat->col0.y, mat->col1.y, mat->col2.y, mat->col3.y ); + vmathSoaV4MakeFromElems( &tmpResult.col2, mat->col0.z, mat->col1.z, mat->col2.z, mat->col3.z ); + vmathSoaV4MakeFromElems( &tmpResult.col3, mat->col0.w, mat->col1.w, mat->col2.w, mat->col3.w ); + vmathSoaM4Copy( result, &tmpResult ); +} + +static inline void vmathSoaM4Inverse( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat ) +{ + VmathSoaVector4 res0, res1, res2, res3; + vec_float4 mA, mB, mC, mD, mE, mF, mG, mH, mI, mJ, mK, mL, mM, mN, mO, mP, tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, detInv; + mA = mat->col0.x; + mB = mat->col0.y; + mC = mat->col0.z; + mD = mat->col0.w; + mE = mat->col1.x; + mF = mat->col1.y; + mG = mat->col1.z; + mH = mat->col1.w; + mI = mat->col2.x; + mJ = mat->col2.y; + mK = mat->col2.z; + mL = mat->col2.w; + mM = mat->col3.x; + mN = mat->col3.y; + mO = mat->col3.z; + mP = mat->col3.w; + tmp0 = spu_sub( spu_mul( mK, mD ), spu_mul( mC, mL ) ); + tmp1 = spu_sub( spu_mul( mO, mH ), spu_mul( mG, mP ) ); + tmp2 = spu_sub( spu_mul( mB, mK ), spu_mul( mJ, mC ) ); + tmp3 = spu_sub( spu_mul( mF, mO ), spu_mul( mN, mG ) ); + tmp4 = spu_sub( spu_mul( mJ, mD ), spu_mul( mB, mL ) ); + tmp5 = spu_sub( spu_mul( mN, mH ), spu_mul( mF, mP ) ); + vmathSoaV4SetX( &res0, spu_sub( spu_sub( spu_mul( mJ, tmp1 ), spu_mul( mL, tmp3 ) ), spu_mul( mK, tmp5 ) ) ); + vmathSoaV4SetY( &res0, spu_sub( spu_sub( spu_mul( mN, tmp0 ), spu_mul( mP, tmp2 ) ), spu_mul( mO, tmp4 ) ) ); + vmathSoaV4SetZ( &res0, spu_sub( spu_add( spu_mul( mD, tmp3 ), spu_mul( mC, tmp5 ) ), spu_mul( mB, tmp1 ) ) ); + vmathSoaV4SetW( &res0, spu_sub( spu_add( spu_mul( mH, tmp2 ), spu_mul( mG, tmp4 ) ), spu_mul( mF, tmp0 ) ) ); + detInv = recipf4( spu_add( spu_add( spu_add( spu_mul( mA, res0.x ), spu_mul( mE, res0.y ) ), spu_mul( mI, res0.z ) ), spu_mul( mM, res0.w ) ) ); + vmathSoaV4SetX( &res1, spu_mul( mI, tmp1 ) ); + vmathSoaV4SetY( &res1, spu_mul( mM, tmp0 ) ); + vmathSoaV4SetZ( &res1, spu_mul( mA, tmp1 ) ); + vmathSoaV4SetW( &res1, spu_mul( mE, tmp0 ) ); + vmathSoaV4SetX( &res3, spu_mul( mI, tmp3 ) ); + vmathSoaV4SetY( &res3, spu_mul( mM, tmp2 ) ); + vmathSoaV4SetZ( &res3, spu_mul( mA, tmp3 ) ); + vmathSoaV4SetW( &res3, spu_mul( mE, tmp2 ) ); + vmathSoaV4SetX( &res2, spu_mul( mI, tmp5 ) ); + vmathSoaV4SetY( &res2, spu_mul( mM, tmp4 ) ); + vmathSoaV4SetZ( &res2, spu_mul( mA, tmp5 ) ); + vmathSoaV4SetW( &res2, spu_mul( mE, tmp4 ) ); + tmp0 = spu_sub( spu_mul( mI, mB ), spu_mul( mA, mJ ) ); + tmp1 = spu_sub( spu_mul( mM, mF ), spu_mul( mE, mN ) ); + tmp2 = spu_sub( spu_mul( mI, mD ), spu_mul( mA, mL ) ); + tmp3 = spu_sub( spu_mul( mM, mH ), spu_mul( mE, mP ) ); + tmp4 = spu_sub( spu_mul( mI, mC ), spu_mul( mA, mK ) ); + tmp5 = spu_sub( spu_mul( mM, mG ), spu_mul( mE, mO ) ); + vmathSoaV4SetX( &res2, spu_add( spu_sub( spu_mul( mL, tmp1 ), spu_mul( mJ, tmp3 ) ), res2.x ) ); + vmathSoaV4SetY( &res2, spu_add( spu_sub( spu_mul( mP, tmp0 ), spu_mul( mN, tmp2 ) ), res2.y ) ); + vmathSoaV4SetZ( &res2, spu_sub( spu_sub( spu_mul( mB, tmp3 ), spu_mul( mD, tmp1 ) ), res2.z ) ); + vmathSoaV4SetW( &res2, spu_sub( spu_sub( spu_mul( mF, tmp2 ), spu_mul( mH, tmp0 ) ), res2.w ) ); + vmathSoaV4SetX( &res3, spu_add( spu_sub( spu_mul( mJ, tmp5 ), spu_mul( mK, tmp1 ) ), res3.x ) ); + vmathSoaV4SetY( &res3, spu_add( spu_sub( spu_mul( mN, tmp4 ), spu_mul( mO, tmp0 ) ), res3.y ) ); + vmathSoaV4SetZ( &res3, spu_sub( spu_sub( spu_mul( mC, tmp1 ), spu_mul( mB, tmp5 ) ), res3.z ) ); + vmathSoaV4SetW( &res3, spu_sub( spu_sub( spu_mul( mG, tmp0 ), spu_mul( mF, tmp4 ) ), res3.w ) ); + vmathSoaV4SetX( &res1, spu_sub( spu_sub( spu_mul( mK, tmp3 ), spu_mul( mL, tmp5 ) ), res1.x ) ); + vmathSoaV4SetY( &res1, spu_sub( spu_sub( spu_mul( mO, tmp2 ), spu_mul( mP, tmp4 ) ), res1.y ) ); + vmathSoaV4SetZ( &res1, spu_add( spu_sub( spu_mul( mD, tmp5 ), spu_mul( mC, tmp3 ) ), res1.z ) ); + vmathSoaV4SetW( &res1, spu_add( spu_sub( spu_mul( mH, tmp4 ), spu_mul( mG, tmp2 ) ), res1.w ) ); + vmathSoaV4ScalarMul( &result->col0, &res0, detInv ); + vmathSoaV4ScalarMul( &result->col1, &res1, detInv ); + vmathSoaV4ScalarMul( &result->col2, &res2, detInv ); + vmathSoaV4ScalarMul( &result->col3, &res3, detInv ); +} + +static inline void vmathSoaM4AffineInverse( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat ) +{ + VmathSoaTransform3 affineMat, tmpT3_0; + VmathSoaVector3 tmpV3_0, tmpV3_1, tmpV3_2, tmpV3_3; + vmathSoaV4GetXYZ( &tmpV3_0, &mat->col0 ); + vmathSoaT3SetCol0( &affineMat, &tmpV3_0 ); + vmathSoaV4GetXYZ( &tmpV3_1, &mat->col1 ); + vmathSoaT3SetCol1( &affineMat, &tmpV3_1 ); + vmathSoaV4GetXYZ( &tmpV3_2, &mat->col2 ); + vmathSoaT3SetCol2( &affineMat, &tmpV3_2 ); + vmathSoaV4GetXYZ( &tmpV3_3, &mat->col3 ); + vmathSoaT3SetCol3( &affineMat, &tmpV3_3 ); + vmathSoaT3Inverse( &tmpT3_0, &affineMat ); + vmathSoaM4MakeFromT3( result, &tmpT3_0 ); +} + +static inline void vmathSoaM4OrthoInverse( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat ) +{ + VmathSoaTransform3 affineMat, tmpT3_0; + VmathSoaVector3 tmpV3_0, tmpV3_1, tmpV3_2, tmpV3_3; + vmathSoaV4GetXYZ( &tmpV3_0, &mat->col0 ); + vmathSoaT3SetCol0( &affineMat, &tmpV3_0 ); + vmathSoaV4GetXYZ( &tmpV3_1, &mat->col1 ); + vmathSoaT3SetCol1( &affineMat, &tmpV3_1 ); + vmathSoaV4GetXYZ( &tmpV3_2, &mat->col2 ); + vmathSoaT3SetCol2( &affineMat, &tmpV3_2 ); + vmathSoaV4GetXYZ( &tmpV3_3, &mat->col3 ); + vmathSoaT3SetCol3( &affineMat, &tmpV3_3 ); + vmathSoaT3OrthoInverse( &tmpT3_0, &affineMat ); + vmathSoaM4MakeFromT3( result, &tmpT3_0 ); +} + +static inline vec_float4 vmathSoaM4Determinant( const VmathSoaMatrix4 *mat ) +{ + vec_float4 dx, dy, dz, dw, mA, mB, mC, mD, mE, mF, mG, mH, mI, mJ, mK, mL, mM, mN, mO, mP, tmp0, tmp1, tmp2, tmp3, tmp4, tmp5; + mA = mat->col0.x; + mB = mat->col0.y; + mC = mat->col0.z; + mD = mat->col0.w; + mE = mat->col1.x; + mF = mat->col1.y; + mG = mat->col1.z; + mH = mat->col1.w; + mI = mat->col2.x; + mJ = mat->col2.y; + mK = mat->col2.z; + mL = mat->col2.w; + mM = mat->col3.x; + mN = mat->col3.y; + mO = mat->col3.z; + mP = mat->col3.w; + tmp0 = spu_sub( spu_mul( mK, mD ), spu_mul( mC, mL ) ); + tmp1 = spu_sub( spu_mul( mO, mH ), spu_mul( mG, mP ) ); + tmp2 = spu_sub( spu_mul( mB, mK ), spu_mul( mJ, mC ) ); + tmp3 = spu_sub( spu_mul( mF, mO ), spu_mul( mN, mG ) ); + tmp4 = spu_sub( spu_mul( mJ, mD ), spu_mul( mB, mL ) ); + tmp5 = spu_sub( spu_mul( mN, mH ), spu_mul( mF, mP ) ); + dx = spu_sub( spu_sub( spu_mul( mJ, tmp1 ), spu_mul( mL, tmp3 ) ), spu_mul( mK, tmp5 ) ); + dy = spu_sub( spu_sub( spu_mul( mN, tmp0 ), spu_mul( mP, tmp2 ) ), spu_mul( mO, tmp4 ) ); + dz = spu_sub( spu_add( spu_mul( mD, tmp3 ), spu_mul( mC, tmp5 ) ), spu_mul( mB, tmp1 ) ); + dw = spu_sub( spu_add( spu_mul( mH, tmp2 ), spu_mul( mG, tmp4 ) ), spu_mul( mF, tmp0 ) ); + return spu_add( spu_add( spu_add( spu_mul( mA, dx ), spu_mul( mE, dy ) ), spu_mul( mI, dz ) ), spu_mul( mM, dw ) ); +} + +static inline void vmathSoaM4Add( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat0, const VmathSoaMatrix4 *mat1 ) +{ + vmathSoaV4Add( &result->col0, &mat0->col0, &mat1->col0 ); + vmathSoaV4Add( &result->col1, &mat0->col1, &mat1->col1 ); + vmathSoaV4Add( &result->col2, &mat0->col2, &mat1->col2 ); + vmathSoaV4Add( &result->col3, &mat0->col3, &mat1->col3 ); +} + +static inline void vmathSoaM4Sub( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat0, const VmathSoaMatrix4 *mat1 ) +{ + vmathSoaV4Sub( &result->col0, &mat0->col0, &mat1->col0 ); + vmathSoaV4Sub( &result->col1, &mat0->col1, &mat1->col1 ); + vmathSoaV4Sub( &result->col2, &mat0->col2, &mat1->col2 ); + vmathSoaV4Sub( &result->col3, &mat0->col3, &mat1->col3 ); +} + +static inline void vmathSoaM4Neg( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat ) +{ + vmathSoaV4Neg( &result->col0, &mat->col0 ); + vmathSoaV4Neg( &result->col1, &mat->col1 ); + vmathSoaV4Neg( &result->col2, &mat->col2 ); + vmathSoaV4Neg( &result->col3, &mat->col3 ); +} + +static inline void vmathSoaM4AbsPerElem( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat ) +{ + vmathSoaV4AbsPerElem( &result->col0, &mat->col0 ); + vmathSoaV4AbsPerElem( &result->col1, &mat->col1 ); + vmathSoaV4AbsPerElem( &result->col2, &mat->col2 ); + vmathSoaV4AbsPerElem( &result->col3, &mat->col3 ); +} + +static inline void vmathSoaM4ScalarMul( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat, vec_float4 scalar ) +{ + vmathSoaV4ScalarMul( &result->col0, &mat->col0, scalar ); + vmathSoaV4ScalarMul( &result->col1, &mat->col1, scalar ); + vmathSoaV4ScalarMul( &result->col2, &mat->col2, scalar ); + vmathSoaV4ScalarMul( &result->col3, &mat->col3, scalar ); +} + +static inline void vmathSoaM4MulV4( VmathSoaVector4 *result, const VmathSoaMatrix4 *mat, const VmathSoaVector4 *vec ) +{ + vec_float4 tmpX, tmpY, tmpZ, tmpW; + tmpX = spu_add( spu_add( spu_add( spu_mul( mat->col0.x, vec->x ), spu_mul( mat->col1.x, vec->y ) ), spu_mul( mat->col2.x, vec->z ) ), spu_mul( mat->col3.x, vec->w ) ); + tmpY = spu_add( spu_add( spu_add( spu_mul( mat->col0.y, vec->x ), spu_mul( mat->col1.y, vec->y ) ), spu_mul( mat->col2.y, vec->z ) ), spu_mul( mat->col3.y, vec->w ) ); + tmpZ = spu_add( spu_add( spu_add( spu_mul( mat->col0.z, vec->x ), spu_mul( mat->col1.z, vec->y ) ), spu_mul( mat->col2.z, vec->z ) ), spu_mul( mat->col3.z, vec->w ) ); + tmpW = spu_add( spu_add( spu_add( spu_mul( mat->col0.w, vec->x ), spu_mul( mat->col1.w, vec->y ) ), spu_mul( mat->col2.w, vec->z ) ), spu_mul( mat->col3.w, vec->w ) ); + vmathSoaV4MakeFromElems( result, tmpX, tmpY, tmpZ, tmpW ); +} + +static inline void vmathSoaM4MulV3( VmathSoaVector4 *result, const VmathSoaMatrix4 *mat, const VmathSoaVector3 *vec ) +{ + result->x = spu_add( spu_add( spu_mul( mat->col0.x, vec->x ), spu_mul( mat->col1.x, vec->y ) ), spu_mul( mat->col2.x, vec->z ) ); + result->y = spu_add( spu_add( spu_mul( mat->col0.y, vec->x ), spu_mul( mat->col1.y, vec->y ) ), spu_mul( mat->col2.y, vec->z ) ); + result->z = spu_add( spu_add( spu_mul( mat->col0.z, vec->x ), spu_mul( mat->col1.z, vec->y ) ), spu_mul( mat->col2.z, vec->z ) ); + result->w = spu_add( spu_add( spu_mul( mat->col0.w, vec->x ), spu_mul( mat->col1.w, vec->y ) ), spu_mul( mat->col2.w, vec->z ) ); +} + +static inline void vmathSoaM4MulP3( VmathSoaVector4 *result, const VmathSoaMatrix4 *mat, const VmathSoaPoint3 *pnt ) +{ + result->x = spu_add( spu_add( spu_add( spu_mul( mat->col0.x, pnt->x ), spu_mul( mat->col1.x, pnt->y ) ), spu_mul( mat->col2.x, pnt->z ) ), mat->col3.x ); + result->y = spu_add( spu_add( spu_add( spu_mul( mat->col0.y, pnt->x ), spu_mul( mat->col1.y, pnt->y ) ), spu_mul( mat->col2.y, pnt->z ) ), mat->col3.y ); + result->z = spu_add( spu_add( spu_add( spu_mul( mat->col0.z, pnt->x ), spu_mul( mat->col1.z, pnt->y ) ), spu_mul( mat->col2.z, pnt->z ) ), mat->col3.z ); + result->w = spu_add( spu_add( spu_add( spu_mul( mat->col0.w, pnt->x ), spu_mul( mat->col1.w, pnt->y ) ), spu_mul( mat->col2.w, pnt->z ) ), mat->col3.w ); +} + +static inline void vmathSoaM4Mul( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat0, const VmathSoaMatrix4 *mat1 ) +{ + VmathSoaMatrix4 tmpResult; + vmathSoaM4MulV4( &tmpResult.col0, mat0, &mat1->col0 ); + vmathSoaM4MulV4( &tmpResult.col1, mat0, &mat1->col1 ); + vmathSoaM4MulV4( &tmpResult.col2, mat0, &mat1->col2 ); + vmathSoaM4MulV4( &tmpResult.col3, mat0, &mat1->col3 ); + vmathSoaM4Copy( result, &tmpResult ); +} + +static inline void vmathSoaM4MulT3( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat, const VmathSoaTransform3 *tfrm1 ) +{ + VmathSoaMatrix4 tmpResult; + VmathSoaPoint3 tmpP3_0; + vmathSoaM4MulV3( &tmpResult.col0, mat, &tfrm1->col0 ); + vmathSoaM4MulV3( &tmpResult.col1, mat, &tfrm1->col1 ); + vmathSoaM4MulV3( &tmpResult.col2, mat, &tfrm1->col2 ); + vmathSoaP3MakeFromV3( &tmpP3_0, &tfrm1->col3 ); + vmathSoaM4MulP3( &tmpResult.col3, mat, &tmpP3_0 ); + vmathSoaM4Copy( result, &tmpResult ); +} + +static inline void vmathSoaM4MulPerElem( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat0, const VmathSoaMatrix4 *mat1 ) +{ + vmathSoaV4MulPerElem( &result->col0, &mat0->col0, &mat1->col0 ); + vmathSoaV4MulPerElem( &result->col1, &mat0->col1, &mat1->col1 ); + vmathSoaV4MulPerElem( &result->col2, &mat0->col2, &mat1->col2 ); + vmathSoaV4MulPerElem( &result->col3, &mat0->col3, &mat1->col3 ); +} + +static inline void vmathSoaM4MakeIdentity( VmathSoaMatrix4 *result ) +{ + vmathSoaV4MakeXAxis( &result->col0 ); + vmathSoaV4MakeYAxis( &result->col1 ); + vmathSoaV4MakeZAxis( &result->col2 ); + vmathSoaV4MakeWAxis( &result->col3 ); +} + +static inline void vmathSoaM4SetUpper3x3( VmathSoaMatrix4 *result, const VmathSoaMatrix3 *mat3 ) +{ + vmathSoaV4SetXYZ( &result->col0, &mat3->col0 ); + vmathSoaV4SetXYZ( &result->col1, &mat3->col1 ); + vmathSoaV4SetXYZ( &result->col2, &mat3->col2 ); +} + +static inline void vmathSoaM4GetUpper3x3( VmathSoaMatrix3 *result, const VmathSoaMatrix4 *mat ) +{ + vmathSoaV4GetXYZ( &result->col0, &mat->col0 ); + vmathSoaV4GetXYZ( &result->col1, &mat->col1 ); + vmathSoaV4GetXYZ( &result->col2, &mat->col2 ); +} + +static inline void vmathSoaM4SetTranslation( VmathSoaMatrix4 *result, const VmathSoaVector3 *translateVec ) +{ + vmathSoaV4SetXYZ( &result->col3, translateVec ); +} + +static inline void vmathSoaM4GetTranslation( VmathSoaVector3 *result, const VmathSoaMatrix4 *mat ) +{ + vmathSoaV4GetXYZ( result, &mat->col3 ); +} + +static inline void vmathSoaM4MakeRotationX( VmathSoaMatrix4 *result, vec_float4 radians ) +{ + vec_float4 s, c; + sincosf4( radians, &s, &c ); + vmathSoaV4MakeXAxis( &result->col0 ); + vmathSoaV4MakeFromElems( &result->col1, spu_splats(0.0f), c, s, spu_splats(0.0f) ); + vmathSoaV4MakeFromElems( &result->col2, spu_splats(0.0f), negatef4( s ), c, spu_splats(0.0f) ); + vmathSoaV4MakeWAxis( &result->col3 ); +} + +static inline void vmathSoaM4MakeRotationY( VmathSoaMatrix4 *result, vec_float4 radians ) +{ + vec_float4 s, c; + sincosf4( radians, &s, &c ); + vmathSoaV4MakeFromElems( &result->col0, c, spu_splats(0.0f), negatef4( s ), spu_splats(0.0f) ); + vmathSoaV4MakeYAxis( &result->col1 ); + vmathSoaV4MakeFromElems( &result->col2, s, spu_splats(0.0f), c, spu_splats(0.0f) ); + vmathSoaV4MakeWAxis( &result->col3 ); +} + +static inline void vmathSoaM4MakeRotationZ( VmathSoaMatrix4 *result, vec_float4 radians ) +{ + vec_float4 s, c; + sincosf4( radians, &s, &c ); + vmathSoaV4MakeFromElems( &result->col0, c, s, spu_splats(0.0f), spu_splats(0.0f) ); + vmathSoaV4MakeFromElems( &result->col1, negatef4( s ), c, spu_splats(0.0f), spu_splats(0.0f) ); + vmathSoaV4MakeZAxis( &result->col2 ); + vmathSoaV4MakeWAxis( &result->col3 ); +} + +static inline void vmathSoaM4MakeRotationZYX( VmathSoaMatrix4 *result, const VmathSoaVector3 *radiansXYZ ) +{ + vec_float4 sX, cX, sY, cY, sZ, cZ, tmp0, tmp1; + sincosf4( radiansXYZ->x, &sX, &cX ); + sincosf4( radiansXYZ->y, &sY, &cY ); + sincosf4( radiansXYZ->z, &sZ, &cZ ); + tmp0 = spu_mul( cZ, sY ); + tmp1 = spu_mul( sZ, sY ); + vmathSoaV4MakeFromElems( &result->col0, spu_mul( cZ, cY ), spu_mul( sZ, cY ), negatef4( sY ), spu_splats(0.0f) ); + vmathSoaV4MakeFromElems( &result->col1, spu_sub( spu_mul( tmp0, sX ), spu_mul( sZ, cX ) ), spu_add( spu_mul( tmp1, sX ), spu_mul( cZ, cX ) ), spu_mul( cY, sX ), spu_splats(0.0f) ); + vmathSoaV4MakeFromElems( &result->col2, spu_add( spu_mul( tmp0, cX ), spu_mul( sZ, sX ) ), spu_sub( spu_mul( tmp1, cX ), spu_mul( cZ, sX ) ), spu_mul( cY, cX ), spu_splats(0.0f) ); + vmathSoaV4MakeWAxis( &result->col3 ); +} + +static inline void vmathSoaM4MakeRotationAxis( VmathSoaMatrix4 *result, vec_float4 radians, const VmathSoaVector3 *unitVec ) +{ + vec_float4 x, y, z, s, c, oneMinusC, xy, yz, zx; + sincosf4( radians, &s, &c ); + x = unitVec->x; + y = unitVec->y; + z = unitVec->z; + xy = spu_mul( x, y ); + yz = spu_mul( y, z ); + zx = spu_mul( z, x ); + oneMinusC = spu_sub( spu_splats(1.0f), c ); + vmathSoaV4MakeFromElems( &result->col0, spu_add( spu_mul( spu_mul( x, x ), oneMinusC ), c ), spu_add( spu_mul( xy, oneMinusC ), spu_mul( z, s ) ), spu_sub( spu_mul( zx, oneMinusC ), spu_mul( y, s ) ), spu_splats(0.0f) ); + vmathSoaV4MakeFromElems( &result->col1, spu_sub( spu_mul( xy, oneMinusC ), spu_mul( z, s ) ), spu_add( spu_mul( spu_mul( y, y ), oneMinusC ), c ), spu_add( spu_mul( yz, oneMinusC ), spu_mul( x, s ) ), spu_splats(0.0f) ); + vmathSoaV4MakeFromElems( &result->col2, spu_add( spu_mul( zx, oneMinusC ), spu_mul( y, s ) ), spu_sub( spu_mul( yz, oneMinusC ), spu_mul( x, s ) ), spu_add( spu_mul( spu_mul( z, z ), oneMinusC ), c ), spu_splats(0.0f) ); + vmathSoaV4MakeWAxis( &result->col3 ); +} + +static inline void vmathSoaM4MakeRotationQ( VmathSoaMatrix4 *result, const VmathSoaQuat *unitQuat ) +{ + VmathSoaTransform3 tmpT3_0; + vmathSoaT3MakeRotationQ( &tmpT3_0, unitQuat ); + vmathSoaM4MakeFromT3( result, &tmpT3_0 ); +} + +static inline void vmathSoaM4MakeScale( VmathSoaMatrix4 *result, const VmathSoaVector3 *scaleVec ) +{ + vmathSoaV4MakeFromElems( &result->col0, scaleVec->x, spu_splats(0.0f), spu_splats(0.0f), spu_splats(0.0f) ); + vmathSoaV4MakeFromElems( &result->col1, spu_splats(0.0f), scaleVec->y, spu_splats(0.0f), spu_splats(0.0f) ); + vmathSoaV4MakeFromElems( &result->col2, spu_splats(0.0f), spu_splats(0.0f), scaleVec->z, spu_splats(0.0f) ); + vmathSoaV4MakeWAxis( &result->col3 ); +} + +static inline void vmathSoaM4AppendScale( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat, const VmathSoaVector3 *scaleVec ) +{ + vmathSoaV4ScalarMul( &result->col0, &mat->col0, vmathSoaV3GetX( scaleVec ) ); + vmathSoaV4ScalarMul( &result->col1, &mat->col1, vmathSoaV3GetY( scaleVec ) ); + vmathSoaV4ScalarMul( &result->col2, &mat->col2, vmathSoaV3GetZ( scaleVec ) ); + vmathSoaV4Copy( &result->col3, &mat->col3 ); +} + +static inline void vmathSoaM4PrependScale( VmathSoaMatrix4 *result, const VmathSoaVector3 *scaleVec, const VmathSoaMatrix4 *mat ) +{ + VmathSoaVector4 scale4; + vmathSoaV4MakeFromV3Scalar( &scale4, scaleVec, spu_splats(1.0f) ); + vmathSoaV4MulPerElem( &result->col0, &mat->col0, &scale4 ); + vmathSoaV4MulPerElem( &result->col1, &mat->col1, &scale4 ); + vmathSoaV4MulPerElem( &result->col2, &mat->col2, &scale4 ); + vmathSoaV4MulPerElem( &result->col3, &mat->col3, &scale4 ); +} + +static inline void vmathSoaM4MakeTranslation( VmathSoaMatrix4 *result, const VmathSoaVector3 *translateVec ) +{ + vmathSoaV4MakeXAxis( &result->col0 ); + vmathSoaV4MakeYAxis( &result->col1 ); + vmathSoaV4MakeZAxis( &result->col2 ); + vmathSoaV4MakeFromV3Scalar( &result->col3, translateVec, spu_splats(1.0f) ); +} + +static inline void vmathSoaM4MakeLookAt( VmathSoaMatrix4 *result, const VmathSoaPoint3 *eyePos, const VmathSoaPoint3 *lookAtPos, const VmathSoaVector3 *upVec ) +{ + VmathSoaMatrix4 m4EyeFrame; + VmathSoaVector3 v3X, v3Y, v3Z, tmpV3_0, tmpV3_1; + VmathSoaVector4 tmpV4_0, tmpV4_1, tmpV4_2, tmpV4_3; + vmathSoaV3Normalize( &v3Y, upVec ); + vmathSoaP3Sub( &tmpV3_0, eyePos, lookAtPos ); + vmathSoaV3Normalize( &v3Z, &tmpV3_0 ); + vmathSoaV3Cross( &tmpV3_1, &v3Y, &v3Z ); + vmathSoaV3Normalize( &v3X, &tmpV3_1 ); + vmathSoaV3Cross( &v3Y, &v3Z, &v3X ); + vmathSoaV4MakeFromV3( &tmpV4_0, &v3X ); + vmathSoaV4MakeFromV3( &tmpV4_1, &v3Y ); + vmathSoaV4MakeFromV3( &tmpV4_2, &v3Z ); + vmathSoaV4MakeFromP3( &tmpV4_3, eyePos ); + vmathSoaM4MakeFromCols( &m4EyeFrame, &tmpV4_0, &tmpV4_1, &tmpV4_2, &tmpV4_3 ); + vmathSoaM4OrthoInverse( result, &m4EyeFrame ); +} + +static inline void vmathSoaM4MakePerspective( VmathSoaMatrix4 *result, vec_float4 fovyRadians, vec_float4 aspect, vec_float4 zNear, vec_float4 zFar ) +{ + vec_float4 f, rangeInv; + f = tanf4( spu_sub( spu_splats( _VECTORMATH_PI_OVER_2 ), spu_mul( spu_splats(0.5f), fovyRadians ) ) ); + rangeInv = recipf4( spu_sub( zNear, zFar ) ); + vmathSoaV4MakeFromElems( &result->col0, divf4( f, aspect ), spu_splats(0.0f), spu_splats(0.0f), spu_splats(0.0f) ); + vmathSoaV4MakeFromElems( &result->col1, spu_splats(0.0f), f, spu_splats(0.0f), spu_splats(0.0f) ); + vmathSoaV4MakeFromElems( &result->col2, spu_splats(0.0f), spu_splats(0.0f), spu_mul( spu_add( zNear, zFar ), rangeInv ), spu_splats(-1.0f) ); + vmathSoaV4MakeFromElems( &result->col3, spu_splats(0.0f), spu_splats(0.0f), spu_mul( spu_mul( spu_mul( zNear, zFar ), rangeInv ), spu_splats(2.0f) ), spu_splats(0.0f) ); +} + +static inline void vmathSoaM4MakeFrustum( VmathSoaMatrix4 *result, vec_float4 left, vec_float4 right, vec_float4 bottom, vec_float4 top, vec_float4 zNear, vec_float4 zFar ) +{ + vec_float4 sum_rl, sum_tb, sum_nf, inv_rl, inv_tb, inv_nf, n2; + sum_rl = spu_add( right, left ); + sum_tb = spu_add( top, bottom ); + sum_nf = spu_add( zNear, zFar ); + inv_rl = recipf4( spu_sub( right, left ) ); + inv_tb = recipf4( spu_sub( top, bottom ) ); + inv_nf = recipf4( spu_sub( zNear, zFar ) ); + n2 = spu_add( zNear, zNear ); + vmathSoaV4MakeFromElems( &result->col0, spu_mul( n2, inv_rl ), spu_splats(0.0f), spu_splats(0.0f), spu_splats(0.0f) ); + vmathSoaV4MakeFromElems( &result->col1, spu_splats(0.0f), spu_mul( n2, inv_tb ), spu_splats(0.0f), spu_splats(0.0f) ); + vmathSoaV4MakeFromElems( &result->col2, spu_mul( sum_rl, inv_rl ), spu_mul( sum_tb, inv_tb ), spu_mul( sum_nf, inv_nf ), spu_splats(-1.0f) ); + vmathSoaV4MakeFromElems( &result->col3, spu_splats(0.0f), spu_splats(0.0f), spu_mul( spu_mul( n2, inv_nf ), zFar ), spu_splats(0.0f) ); +} + +static inline void vmathSoaM4MakeOrthographic( VmathSoaMatrix4 *result, vec_float4 left, vec_float4 right, vec_float4 bottom, vec_float4 top, vec_float4 zNear, vec_float4 zFar ) +{ + vec_float4 sum_rl, sum_tb, sum_nf, inv_rl, inv_tb, inv_nf; + sum_rl = spu_add( right, left ); + sum_tb = spu_add( top, bottom ); + sum_nf = spu_add( zNear, zFar ); + inv_rl = recipf4( spu_sub( right, left ) ); + inv_tb = recipf4( spu_sub( top, bottom ) ); + inv_nf = recipf4( spu_sub( zNear, zFar ) ); + vmathSoaV4MakeFromElems( &result->col0, spu_add( inv_rl, inv_rl ), spu_splats(0.0f), spu_splats(0.0f), spu_splats(0.0f) ); + vmathSoaV4MakeFromElems( &result->col1, spu_splats(0.0f), spu_add( inv_tb, inv_tb ), spu_splats(0.0f), spu_splats(0.0f) ); + vmathSoaV4MakeFromElems( &result->col2, spu_splats(0.0f), spu_splats(0.0f), spu_add( inv_nf, inv_nf ), spu_splats(0.0f) ); + vmathSoaV4MakeFromElems( &result->col3, spu_mul( negatef4( sum_rl ), inv_rl ), spu_mul( negatef4( sum_tb ), inv_tb ), spu_mul( sum_nf, inv_nf ), spu_splats(1.0f) ); +} + +static inline void vmathSoaM4Select( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat0, const VmathSoaMatrix4 *mat1, vec_uint4 select1 ) +{ + vmathSoaV4Select( &result->col0, &mat0->col0, &mat1->col0, select1 ); + vmathSoaV4Select( &result->col1, &mat0->col1, &mat1->col1, select1 ); + vmathSoaV4Select( &result->col2, &mat0->col2, &mat1->col2, select1 ); + vmathSoaV4Select( &result->col3, &mat0->col3, &mat1->col3, select1 ); +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathSoaM4Print( const VmathSoaMatrix4 *mat ) +{ + VmathMatrix4 mat0, mat1, mat2, mat3; + vmathSoaM4Get4Aos( mat, &mat0, &mat1, &mat2, &mat3 ); + printf("slot 0:\n"); + vmathM4Print( &mat0 ); + printf("slot 1:\n"); + vmathM4Print( &mat1 ); + printf("slot 2:\n"); + vmathM4Print( &mat2 ); + printf("slot 3:\n"); + vmathM4Print( &mat3 ); +} + +static inline void vmathSoaM4Prints( const VmathSoaMatrix4 *mat, const char *name ) +{ + printf("%s:\n", name); + vmathSoaM4Print( mat ); +} + +#endif + +static inline void vmathSoaT3Copy( VmathSoaTransform3 *result, const VmathSoaTransform3 *tfrm ) +{ + vmathSoaV3Copy( &result->col0, &tfrm->col0 ); + vmathSoaV3Copy( &result->col1, &tfrm->col1 ); + vmathSoaV3Copy( &result->col2, &tfrm->col2 ); + vmathSoaV3Copy( &result->col3, &tfrm->col3 ); +} + +static inline void vmathSoaT3MakeFromScalar( VmathSoaTransform3 *result, vec_float4 scalar ) +{ + vmathSoaV3MakeFromScalar( &result->col0, scalar ); + vmathSoaV3MakeFromScalar( &result->col1, scalar ); + vmathSoaV3MakeFromScalar( &result->col2, scalar ); + vmathSoaV3MakeFromScalar( &result->col3, scalar ); +} + +static inline void vmathSoaT3MakeFromCols( VmathSoaTransform3 *result, const VmathSoaVector3 *_col0, const VmathSoaVector3 *_col1, const VmathSoaVector3 *_col2, const VmathSoaVector3 *_col3 ) +{ + vmathSoaV3Copy( &result->col0, _col0 ); + vmathSoaV3Copy( &result->col1, _col1 ); + vmathSoaV3Copy( &result->col2, _col2 ); + vmathSoaV3Copy( &result->col3, _col3 ); +} + +static inline void vmathSoaT3MakeFromM3V3( VmathSoaTransform3 *result, const VmathSoaMatrix3 *tfrm, const VmathSoaVector3 *translateVec ) +{ + vmathSoaT3SetUpper3x3( result, tfrm ); + vmathSoaT3SetTranslation( result, translateVec ); +} + +static inline void vmathSoaT3MakeFromQV3( VmathSoaTransform3 *result, const VmathSoaQuat *unitQuat, const VmathSoaVector3 *translateVec ) +{ + VmathSoaMatrix3 tmpM3_0; + vmathSoaM3MakeFromQ( &tmpM3_0, unitQuat ); + vmathSoaT3SetUpper3x3( result, &tmpM3_0 ); + vmathSoaT3SetTranslation( result, translateVec ); +} + +static inline void vmathSoaT3MakeFromAos( VmathSoaTransform3 *result, const VmathTransform3 *tfrm ) +{ + vmathSoaV3MakeFromAos( &result->col0, &tfrm->col0 ); + vmathSoaV3MakeFromAos( &result->col1, &tfrm->col1 ); + vmathSoaV3MakeFromAos( &result->col2, &tfrm->col2 ); + vmathSoaV3MakeFromAos( &result->col3, &tfrm->col3 ); +} + +static inline void vmathSoaT3MakeFrom4Aos( VmathSoaTransform3 *result, const VmathTransform3 *tfrm0, const VmathTransform3 *tfrm1, const VmathTransform3 *tfrm2, const VmathTransform3 *tfrm3 ) +{ + vmathSoaV3MakeFrom4Aos( &result->col0, &tfrm0->col0, &tfrm1->col0, &tfrm2->col0, &tfrm3->col0 ); + vmathSoaV3MakeFrom4Aos( &result->col1, &tfrm0->col1, &tfrm1->col1, &tfrm2->col1, &tfrm3->col1 ); + vmathSoaV3MakeFrom4Aos( &result->col2, &tfrm0->col2, &tfrm1->col2, &tfrm2->col2, &tfrm3->col2 ); + vmathSoaV3MakeFrom4Aos( &result->col3, &tfrm0->col3, &tfrm1->col3, &tfrm2->col3, &tfrm3->col3 ); +} + +static inline void vmathSoaT3Get4Aos( const VmathSoaTransform3 *tfrm, VmathTransform3 *result0, VmathTransform3 *result1, VmathTransform3 *result2, VmathTransform3 *result3 ) +{ + vmathSoaV3Get4Aos( &tfrm->col0, &result0->col0, &result1->col0, &result2->col0, &result3->col0 ); + vmathSoaV3Get4Aos( &tfrm->col1, &result0->col1, &result1->col1, &result2->col1, &result3->col1 ); + vmathSoaV3Get4Aos( &tfrm->col2, &result0->col2, &result1->col2, &result2->col2, &result3->col2 ); + vmathSoaV3Get4Aos( &tfrm->col3, &result0->col3, &result1->col3, &result2->col3, &result3->col3 ); +} + +static inline void vmathSoaT3SetCol0( VmathSoaTransform3 *result, const VmathSoaVector3 *_col0 ) +{ + vmathSoaV3Copy( &result->col0, _col0 ); +} + +static inline void vmathSoaT3SetCol1( VmathSoaTransform3 *result, const VmathSoaVector3 *_col1 ) +{ + vmathSoaV3Copy( &result->col1, _col1 ); +} + +static inline void vmathSoaT3SetCol2( VmathSoaTransform3 *result, const VmathSoaVector3 *_col2 ) +{ + vmathSoaV3Copy( &result->col2, _col2 ); +} + +static inline void vmathSoaT3SetCol3( VmathSoaTransform3 *result, const VmathSoaVector3 *_col3 ) +{ + vmathSoaV3Copy( &result->col3, _col3 ); +} + +static inline void vmathSoaT3SetCol( VmathSoaTransform3 *result, int col, const VmathSoaVector3 *vec ) +{ + vmathSoaV3Copy( (&result->col0 + col), vec ); +} + +static inline void vmathSoaT3SetRow( VmathSoaTransform3 *result, int row, const VmathSoaVector4 *vec ) +{ + vmathSoaV3SetElem( &result->col0, row, vmathSoaV4GetElem( vec, 0 ) ); + vmathSoaV3SetElem( &result->col1, row, vmathSoaV4GetElem( vec, 1 ) ); + vmathSoaV3SetElem( &result->col2, row, vmathSoaV4GetElem( vec, 2 ) ); + vmathSoaV3SetElem( &result->col3, row, vmathSoaV4GetElem( vec, 3 ) ); +} + +static inline void vmathSoaT3SetElem( VmathSoaTransform3 *result, int col, int row, vec_float4 val ) +{ + VmathSoaVector3 tmpV3_0; + vmathSoaT3GetCol( &tmpV3_0, result, col ); + vmathSoaV3SetElem( &tmpV3_0, row, val ); + vmathSoaT3SetCol( result, col, &tmpV3_0 ); +} + +static inline vec_float4 vmathSoaT3GetElem( const VmathSoaTransform3 *tfrm, int col, int row ) +{ + VmathSoaVector3 tmpV3_0; + vmathSoaT3GetCol( &tmpV3_0, tfrm, col ); + return vmathSoaV3GetElem( &tmpV3_0, row ); +} + +static inline void vmathSoaT3GetCol0( VmathSoaVector3 *result, const VmathSoaTransform3 *tfrm ) +{ + vmathSoaV3Copy( result, &tfrm->col0 ); +} + +static inline void vmathSoaT3GetCol1( VmathSoaVector3 *result, const VmathSoaTransform3 *tfrm ) +{ + vmathSoaV3Copy( result, &tfrm->col1 ); +} + +static inline void vmathSoaT3GetCol2( VmathSoaVector3 *result, const VmathSoaTransform3 *tfrm ) +{ + vmathSoaV3Copy( result, &tfrm->col2 ); +} + +static inline void vmathSoaT3GetCol3( VmathSoaVector3 *result, const VmathSoaTransform3 *tfrm ) +{ + vmathSoaV3Copy( result, &tfrm->col3 ); +} + +static inline void vmathSoaT3GetCol( VmathSoaVector3 *result, const VmathSoaTransform3 *tfrm, int col ) +{ + vmathSoaV3Copy( result, (&tfrm->col0 + col) ); +} + +static inline void vmathSoaT3GetRow( VmathSoaVector4 *result, const VmathSoaTransform3 *tfrm, int row ) +{ + vmathSoaV4MakeFromElems( result, vmathSoaV3GetElem( &tfrm->col0, row ), vmathSoaV3GetElem( &tfrm->col1, row ), vmathSoaV3GetElem( &tfrm->col2, row ), vmathSoaV3GetElem( &tfrm->col3, row ) ); +} + +static inline void vmathSoaT3Inverse( VmathSoaTransform3 *result, const VmathSoaTransform3 *tfrm ) +{ + VmathSoaVector3 tmp0, tmp1, tmp2, inv0, inv1, inv2, tmpV3_0, tmpV3_1, tmpV3_2, tmpV3_3, tmpV3_4, tmpV3_5; + vec_float4 detinv; + vmathSoaV3Cross( &tmp0, &tfrm->col1, &tfrm->col2 ); + vmathSoaV3Cross( &tmp1, &tfrm->col2, &tfrm->col0 ); + vmathSoaV3Cross( &tmp2, &tfrm->col0, &tfrm->col1 ); + detinv = recipf4( vmathSoaV3Dot( &tfrm->col2, &tmp2 ) ); + vmathSoaV3MakeFromElems( &inv0, spu_mul( tmp0.x, detinv ), spu_mul( tmp1.x, detinv ), spu_mul( tmp2.x, detinv ) ); + vmathSoaV3MakeFromElems( &inv1, spu_mul( tmp0.y, detinv ), spu_mul( tmp1.y, detinv ), spu_mul( tmp2.y, detinv ) ); + vmathSoaV3MakeFromElems( &inv2, spu_mul( tmp0.z, detinv ), spu_mul( tmp1.z, detinv ), spu_mul( tmp2.z, detinv ) ); + vmathSoaV3Copy( &result->col0, &inv0 ); + vmathSoaV3Copy( &result->col1, &inv1 ); + vmathSoaV3Copy( &result->col2, &inv2 ); + vmathSoaV3ScalarMul( &tmpV3_0, &inv0, tfrm->col3.x ); + vmathSoaV3ScalarMul( &tmpV3_1, &inv1, tfrm->col3.y ); + vmathSoaV3ScalarMul( &tmpV3_2, &inv2, tfrm->col3.z ); + vmathSoaV3Add( &tmpV3_3, &tmpV3_1, &tmpV3_2 ); + vmathSoaV3Add( &tmpV3_4, &tmpV3_0, &tmpV3_3 ); + vmathSoaV3Neg( &tmpV3_5, &tmpV3_4 ); + vmathSoaV3Copy( &result->col3, &tmpV3_5 ); +} + +static inline void vmathSoaT3OrthoInverse( VmathSoaTransform3 *result, const VmathSoaTransform3 *tfrm ) +{ + VmathSoaVector3 inv0, inv1, inv2, tmpV3_0, tmpV3_1, tmpV3_2, tmpV3_3, tmpV3_4, tmpV3_5; + vmathSoaV3MakeFromElems( &inv0, tfrm->col0.x, tfrm->col1.x, tfrm->col2.x ); + vmathSoaV3MakeFromElems( &inv1, tfrm->col0.y, tfrm->col1.y, tfrm->col2.y ); + vmathSoaV3MakeFromElems( &inv2, tfrm->col0.z, tfrm->col1.z, tfrm->col2.z ); + vmathSoaV3Copy( &result->col0, &inv0 ); + vmathSoaV3Copy( &result->col1, &inv1 ); + vmathSoaV3Copy( &result->col2, &inv2 ); + vmathSoaV3ScalarMul( &tmpV3_0, &inv0, tfrm->col3.x ); + vmathSoaV3ScalarMul( &tmpV3_1, &inv1, tfrm->col3.y ); + vmathSoaV3ScalarMul( &tmpV3_2, &inv2, tfrm->col3.z ); + vmathSoaV3Add( &tmpV3_3, &tmpV3_1, &tmpV3_2 ); + vmathSoaV3Add( &tmpV3_4, &tmpV3_0, &tmpV3_3 ); + vmathSoaV3Neg( &tmpV3_5, &tmpV3_4 ); + vmathSoaV3Copy( &result->col3, &tmpV3_5 ); +} + +static inline void vmathSoaT3AbsPerElem( VmathSoaTransform3 *result, const VmathSoaTransform3 *tfrm ) +{ + vmathSoaV3AbsPerElem( &result->col0, &tfrm->col0 ); + vmathSoaV3AbsPerElem( &result->col1, &tfrm->col1 ); + vmathSoaV3AbsPerElem( &result->col2, &tfrm->col2 ); + vmathSoaV3AbsPerElem( &result->col3, &tfrm->col3 ); +} + +static inline void vmathSoaT3MulV3( VmathSoaVector3 *result, const VmathSoaTransform3 *tfrm, const VmathSoaVector3 *vec ) +{ + vec_float4 tmpX, tmpY, tmpZ; + tmpX = spu_add( spu_add( spu_mul( tfrm->col0.x, vec->x ), spu_mul( tfrm->col1.x, vec->y ) ), spu_mul( tfrm->col2.x, vec->z ) ); + tmpY = spu_add( spu_add( spu_mul( tfrm->col0.y, vec->x ), spu_mul( tfrm->col1.y, vec->y ) ), spu_mul( tfrm->col2.y, vec->z ) ); + tmpZ = spu_add( spu_add( spu_mul( tfrm->col0.z, vec->x ), spu_mul( tfrm->col1.z, vec->y ) ), spu_mul( tfrm->col2.z, vec->z ) ); + vmathSoaV3MakeFromElems( result, tmpX, tmpY, tmpZ ); +} + +static inline void vmathSoaT3MulP3( VmathSoaPoint3 *result, const VmathSoaTransform3 *tfrm, const VmathSoaPoint3 *pnt ) +{ + vec_float4 tmpX, tmpY, tmpZ; + tmpX = spu_add( spu_add( spu_add( spu_mul( tfrm->col0.x, pnt->x ), spu_mul( tfrm->col1.x, pnt->y ) ), spu_mul( tfrm->col2.x, pnt->z ) ), tfrm->col3.x ); + tmpY = spu_add( spu_add( spu_add( spu_mul( tfrm->col0.y, pnt->x ), spu_mul( tfrm->col1.y, pnt->y ) ), spu_mul( tfrm->col2.y, pnt->z ) ), tfrm->col3.y ); + tmpZ = spu_add( spu_add( spu_add( spu_mul( tfrm->col0.z, pnt->x ), spu_mul( tfrm->col1.z, pnt->y ) ), spu_mul( tfrm->col2.z, pnt->z ) ), tfrm->col3.z ); + vmathSoaP3MakeFromElems( result, tmpX, tmpY, tmpZ ); +} + +static inline void vmathSoaT3Mul( VmathSoaTransform3 *result, const VmathSoaTransform3 *tfrm0, const VmathSoaTransform3 *tfrm1 ) +{ + VmathSoaTransform3 tmpResult; + VmathSoaPoint3 tmpP3_0, tmpP3_1; + vmathSoaT3MulV3( &tmpResult.col0, tfrm0, &tfrm1->col0 ); + vmathSoaT3MulV3( &tmpResult.col1, tfrm0, &tfrm1->col1 ); + vmathSoaT3MulV3( &tmpResult.col2, tfrm0, &tfrm1->col2 ); + vmathSoaP3MakeFromV3( &tmpP3_0, &tfrm1->col3 ); + vmathSoaT3MulP3( &tmpP3_1, tfrm0, &tmpP3_0 ); + vmathSoaV3MakeFromP3( &tmpResult.col3, &tmpP3_1 ); + vmathSoaT3Copy( result, &tmpResult ); +} + +static inline void vmathSoaT3MulPerElem( VmathSoaTransform3 *result, const VmathSoaTransform3 *tfrm0, const VmathSoaTransform3 *tfrm1 ) +{ + vmathSoaV3MulPerElem( &result->col0, &tfrm0->col0, &tfrm1->col0 ); + vmathSoaV3MulPerElem( &result->col1, &tfrm0->col1, &tfrm1->col1 ); + vmathSoaV3MulPerElem( &result->col2, &tfrm0->col2, &tfrm1->col2 ); + vmathSoaV3MulPerElem( &result->col3, &tfrm0->col3, &tfrm1->col3 ); +} + +static inline void vmathSoaT3MakeIdentity( VmathSoaTransform3 *result ) +{ + vmathSoaV3MakeXAxis( &result->col0 ); + vmathSoaV3MakeYAxis( &result->col1 ); + vmathSoaV3MakeZAxis( &result->col2 ); + vmathSoaV3MakeFromScalar( &result->col3, spu_splats(0.0f) ); +} + +static inline void vmathSoaT3SetUpper3x3( VmathSoaTransform3 *result, const VmathSoaMatrix3 *tfrm ) +{ + vmathSoaV3Copy( &result->col0, &tfrm->col0 ); + vmathSoaV3Copy( &result->col1, &tfrm->col1 ); + vmathSoaV3Copy( &result->col2, &tfrm->col2 ); +} + +static inline void vmathSoaT3GetUpper3x3( VmathSoaMatrix3 *result, const VmathSoaTransform3 *tfrm ) +{ + vmathSoaM3MakeFromCols( result, &tfrm->col0, &tfrm->col1, &tfrm->col2 ); +} + +static inline void vmathSoaT3SetTranslation( VmathSoaTransform3 *result, const VmathSoaVector3 *translateVec ) +{ + vmathSoaV3Copy( &result->col3, translateVec ); +} + +static inline void vmathSoaT3GetTranslation( VmathSoaVector3 *result, const VmathSoaTransform3 *tfrm ) +{ + vmathSoaV3Copy( result, &tfrm->col3 ); +} + +static inline void vmathSoaT3MakeRotationX( VmathSoaTransform3 *result, vec_float4 radians ) +{ + vec_float4 s, c; + sincosf4( radians, &s, &c ); + vmathSoaV3MakeXAxis( &result->col0 ); + vmathSoaV3MakeFromElems( &result->col1, spu_splats(0.0f), c, s ); + vmathSoaV3MakeFromElems( &result->col2, spu_splats(0.0f), negatef4( s ), c ); + vmathSoaV3MakeFromScalar( &result->col3, spu_splats(0.0f) ); +} + +static inline void vmathSoaT3MakeRotationY( VmathSoaTransform3 *result, vec_float4 radians ) +{ + vec_float4 s, c; + sincosf4( radians, &s, &c ); + vmathSoaV3MakeFromElems( &result->col0, c, spu_splats(0.0f), negatef4( s ) ); + vmathSoaV3MakeYAxis( &result->col1 ); + vmathSoaV3MakeFromElems( &result->col2, s, spu_splats(0.0f), c ); + vmathSoaV3MakeFromScalar( &result->col3, spu_splats(0.0f) ); +} + +static inline void vmathSoaT3MakeRotationZ( VmathSoaTransform3 *result, vec_float4 radians ) +{ + vec_float4 s, c; + sincosf4( radians, &s, &c ); + vmathSoaV3MakeFromElems( &result->col0, c, s, spu_splats(0.0f) ); + vmathSoaV3MakeFromElems( &result->col1, negatef4( s ), c, spu_splats(0.0f) ); + vmathSoaV3MakeZAxis( &result->col2 ); + vmathSoaV3MakeFromScalar( &result->col3, spu_splats(0.0f) ); +} + +static inline void vmathSoaT3MakeRotationZYX( VmathSoaTransform3 *result, const VmathSoaVector3 *radiansXYZ ) +{ + vec_float4 sX, cX, sY, cY, sZ, cZ, tmp0, tmp1; + sincosf4( radiansXYZ->x, &sX, &cX ); + sincosf4( radiansXYZ->y, &sY, &cY ); + sincosf4( radiansXYZ->z, &sZ, &cZ ); + tmp0 = spu_mul( cZ, sY ); + tmp1 = spu_mul( sZ, sY ); + vmathSoaV3MakeFromElems( &result->col0, spu_mul( cZ, cY ), spu_mul( sZ, cY ), negatef4( sY ) ); + vmathSoaV3MakeFromElems( &result->col1, spu_sub( spu_mul( tmp0, sX ), spu_mul( sZ, cX ) ), spu_add( spu_mul( tmp1, sX ), spu_mul( cZ, cX ) ), spu_mul( cY, sX ) ); + vmathSoaV3MakeFromElems( &result->col2, spu_add( spu_mul( tmp0, cX ), spu_mul( sZ, sX ) ), spu_sub( spu_mul( tmp1, cX ), spu_mul( cZ, sX ) ), spu_mul( cY, cX ) ); + vmathSoaV3MakeFromScalar( &result->col3, spu_splats(0.0f) ); +} + +static inline void vmathSoaT3MakeRotationAxis( VmathSoaTransform3 *result, vec_float4 radians, const VmathSoaVector3 *unitVec ) +{ + VmathSoaMatrix3 tmpM3_0; + VmathSoaVector3 tmpV3_0; + vmathSoaM3MakeRotationAxis( &tmpM3_0, radians, unitVec ); + vmathSoaV3MakeFromScalar( &tmpV3_0, spu_splats(0.0f) ); + vmathSoaT3MakeFromM3V3( result, &tmpM3_0, &tmpV3_0 ); +} + +static inline void vmathSoaT3MakeRotationQ( VmathSoaTransform3 *result, const VmathSoaQuat *unitQuat ) +{ + VmathSoaMatrix3 tmpM3_0; + VmathSoaVector3 tmpV3_0; + vmathSoaM3MakeFromQ( &tmpM3_0, unitQuat ); + vmathSoaV3MakeFromScalar( &tmpV3_0, spu_splats(0.0f) ); + vmathSoaT3MakeFromM3V3( result, &tmpM3_0, &tmpV3_0 ); +} + +static inline void vmathSoaT3MakeScale( VmathSoaTransform3 *result, const VmathSoaVector3 *scaleVec ) +{ + vmathSoaV3MakeFromElems( &result->col0, scaleVec->x, spu_splats(0.0f), spu_splats(0.0f) ); + vmathSoaV3MakeFromElems( &result->col1, spu_splats(0.0f), scaleVec->y, spu_splats(0.0f) ); + vmathSoaV3MakeFromElems( &result->col2, spu_splats(0.0f), spu_splats(0.0f), scaleVec->z ); + vmathSoaV3MakeFromScalar( &result->col3, spu_splats(0.0f) ); +} + +static inline void vmathSoaT3AppendScale( VmathSoaTransform3 *result, const VmathSoaTransform3 *tfrm, const VmathSoaVector3 *scaleVec ) +{ + vmathSoaV3ScalarMul( &result->col0, &tfrm->col0, vmathSoaV3GetX( scaleVec ) ); + vmathSoaV3ScalarMul( &result->col1, &tfrm->col1, vmathSoaV3GetY( scaleVec ) ); + vmathSoaV3ScalarMul( &result->col2, &tfrm->col2, vmathSoaV3GetZ( scaleVec ) ); + vmathSoaV3Copy( &result->col3, &tfrm->col3 ); +} + +static inline void vmathSoaT3PrependScale( VmathSoaTransform3 *result, const VmathSoaVector3 *scaleVec, const VmathSoaTransform3 *tfrm ) +{ + vmathSoaV3MulPerElem( &result->col0, &tfrm->col0, scaleVec ); + vmathSoaV3MulPerElem( &result->col1, &tfrm->col1, scaleVec ); + vmathSoaV3MulPerElem( &result->col2, &tfrm->col2, scaleVec ); + vmathSoaV3MulPerElem( &result->col3, &tfrm->col3, scaleVec ); +} + +static inline void vmathSoaT3MakeTranslation( VmathSoaTransform3 *result, const VmathSoaVector3 *translateVec ) +{ + vmathSoaV3MakeXAxis( &result->col0 ); + vmathSoaV3MakeYAxis( &result->col1 ); + vmathSoaV3MakeZAxis( &result->col2 ); + vmathSoaV3Copy( &result->col3, translateVec ); +} + +static inline void vmathSoaT3Select( VmathSoaTransform3 *result, const VmathSoaTransform3 *tfrm0, const VmathSoaTransform3 *tfrm1, vec_uint4 select1 ) +{ + vmathSoaV3Select( &result->col0, &tfrm0->col0, &tfrm1->col0, select1 ); + vmathSoaV3Select( &result->col1, &tfrm0->col1, &tfrm1->col1, select1 ); + vmathSoaV3Select( &result->col2, &tfrm0->col2, &tfrm1->col2, select1 ); + vmathSoaV3Select( &result->col3, &tfrm0->col3, &tfrm1->col3, select1 ); +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathSoaT3Print( const VmathSoaTransform3 *tfrm ) +{ + VmathTransform3 mat0, mat1, mat2, mat3; + vmathSoaT3Get4Aos( tfrm, &mat0, &mat1, &mat2, &mat3 ); + printf("slot 0:\n"); + vmathT3Print( &mat0 ); + printf("slot 1:\n"); + vmathT3Print( &mat1 ); + printf("slot 2:\n"); + vmathT3Print( &mat2 ); + printf("slot 3:\n"); + vmathT3Print( &mat3 ); +} + +static inline void vmathSoaT3Prints( const VmathSoaTransform3 *tfrm, const char *name ) +{ + printf("%s:\n", name); + vmathSoaT3Print( tfrm ); +} + +#endif + +static inline void vmathSoaQMakeFromM3( VmathSoaQuat *result, const VmathSoaMatrix3 *tfrm ) +{ + vec_float4 trace, radicand, scale, xx, yx, zx, xy, yy, zy, xz, yz, zz, tmpx, tmpy, tmpz, tmpw, qx, qy, qz, qw; + vec_uint4 negTrace, ZgtX, ZgtY, YgtX; + vec_uint4 largestXorY, largestYorZ, largestZorX; + + xx = tfrm->col0.x; + yx = tfrm->col0.y; + zx = tfrm->col0.z; + xy = tfrm->col1.x; + yy = tfrm->col1.y; + zy = tfrm->col1.z; + xz = tfrm->col2.x; + yz = tfrm->col2.y; + zz = tfrm->col2.z; + + trace = spu_add( spu_add( xx, yy ), zz ); + + negTrace = spu_cmpgt( spu_splats(0.0f), trace ); + ZgtX = spu_cmpgt( zz, xx ); + ZgtY = spu_cmpgt( zz, yy ); + YgtX = spu_cmpgt( yy, xx ); + largestXorY = spu_and( negTrace, spu_nand( ZgtX, ZgtY ) ); + largestYorZ = spu_and( negTrace, spu_or( YgtX, ZgtX ) ); + largestZorX = spu_and( negTrace, spu_orc( ZgtY, YgtX ) ); + + zz = spu_sel( zz, negatef4(zz), largestXorY ); + xy = spu_sel( xy, negatef4(xy), largestXorY ); + xx = spu_sel( xx, negatef4(xx), largestYorZ ); + yz = spu_sel( yz, negatef4(yz), largestYorZ ); + yy = spu_sel( yy, negatef4(yy), largestZorX ); + zx = spu_sel( zx, negatef4(zx), largestZorX ); + + radicand = spu_add( spu_add( spu_add( xx, yy ), zz ), spu_splats(1.0f) ); + scale = spu_mul( spu_splats(0.5f), rsqrtf4( radicand ) ); + + tmpx = spu_mul( spu_sub( zy, yz ), scale ); + tmpy = spu_mul( spu_sub( xz, zx ), scale ); + tmpz = spu_mul( spu_sub( yx, xy ), scale ); + tmpw = spu_mul( radicand, scale ); + qx = tmpx; + qy = tmpy; + qz = tmpz; + qw = tmpw; + + qx = spu_sel( qx, tmpw, largestXorY ); + qy = spu_sel( qy, tmpz, largestXorY ); + qz = spu_sel( qz, tmpy, largestXorY ); + qw = spu_sel( qw, tmpx, largestXorY ); + tmpx = qx; + tmpz = qz; + qx = spu_sel( qx, qy, largestYorZ ); + qy = spu_sel( qy, tmpx, largestYorZ ); + qz = spu_sel( qz, qw, largestYorZ ); + qw = spu_sel( qw, tmpz, largestYorZ ); + + result->x = qx; + result->y = qy; + result->z = qz; + result->w = qw; +} + +static inline void vmathSoaV3Outer( VmathSoaMatrix3 *result, const VmathSoaVector3 *tfrm0, const VmathSoaVector3 *tfrm1 ) +{ + vmathSoaV3ScalarMul( &result->col0, tfrm0, vmathSoaV3GetX( tfrm1 ) ); + vmathSoaV3ScalarMul( &result->col1, tfrm0, vmathSoaV3GetY( tfrm1 ) ); + vmathSoaV3ScalarMul( &result->col2, tfrm0, vmathSoaV3GetZ( tfrm1 ) ); +} + +static inline void vmathSoaV4Outer( VmathSoaMatrix4 *result, const VmathSoaVector4 *tfrm0, const VmathSoaVector4 *tfrm1 ) +{ + vmathSoaV4ScalarMul( &result->col0, tfrm0, vmathSoaV4GetX( tfrm1 ) ); + vmathSoaV4ScalarMul( &result->col1, tfrm0, vmathSoaV4GetY( tfrm1 ) ); + vmathSoaV4ScalarMul( &result->col2, tfrm0, vmathSoaV4GetZ( tfrm1 ) ); + vmathSoaV4ScalarMul( &result->col3, tfrm0, vmathSoaV4GetW( tfrm1 ) ); +} + +static inline void vmathSoaV3RowMul( VmathSoaVector3 *result, const VmathSoaVector3 *vec, const VmathSoaMatrix3 *mat ) +{ + vec_float4 tmpX, tmpY, tmpZ; + tmpX = spu_add( spu_add( spu_mul( vec->x, mat->col0.x ), spu_mul( vec->y, mat->col0.y ) ), spu_mul( vec->z, mat->col0.z ) ); + tmpY = spu_add( spu_add( spu_mul( vec->x, mat->col1.x ), spu_mul( vec->y, mat->col1.y ) ), spu_mul( vec->z, mat->col1.z ) ); + tmpZ = spu_add( spu_add( spu_mul( vec->x, mat->col2.x ), spu_mul( vec->y, mat->col2.y ) ), spu_mul( vec->z, mat->col2.z ) ); + vmathSoaV3MakeFromElems( result, tmpX, tmpY, tmpZ ); +} + +static inline void vmathSoaV3CrossMatrix( VmathSoaMatrix3 *result, const VmathSoaVector3 *vec ) +{ + vmathSoaV3MakeFromElems( &result->col0, spu_splats(0.0f), vec->z, negatef4( vec->y ) ); + vmathSoaV3MakeFromElems( &result->col1, negatef4( vec->z ), spu_splats(0.0f), vec->x ); + vmathSoaV3MakeFromElems( &result->col2, vec->y, negatef4( vec->x ), spu_splats(0.0f) ); +} + +static inline void vmathSoaV3CrossMatrixMul( VmathSoaMatrix3 *result, const VmathSoaVector3 *vec, const VmathSoaMatrix3 *mat ) +{ + VmathSoaVector3 tmpV3_0, tmpV3_1, tmpV3_2; + vmathSoaV3Cross( &tmpV3_0, vec, &mat->col0 ); + vmathSoaV3Cross( &tmpV3_1, vec, &mat->col1 ); + vmathSoaV3Cross( &tmpV3_2, vec, &mat->col2 ); + vmathSoaM3MakeFromCols( result, &tmpV3_0, &tmpV3_1, &tmpV3_2 ); +} + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/spu/c/mat_soa_v.h b/Extras/vectormathlibrary/include/vectormath/spu/c/mat_soa_v.h new file mode 100644 index 000000000..c8401e3d0 --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/spu/c/mat_soa_v.h @@ -0,0 +1,1063 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_MAT_SOA_V_C_H +#define _VECTORMATH_MAT_SOA_V_C_H + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/*----------------------------------------------------------------------------- + * Constants + */ +#define _VECTORMATH_PI_OVER_2 1.570796327f + +/*----------------------------------------------------------------------------- + * Definitions + */ +static inline VmathSoaMatrix3 vmathSoaM3MakeFromScalar_V( vec_float4 scalar ) +{ + VmathSoaMatrix3 result; + vmathSoaM3MakeFromScalar(&result, scalar); + return result; +} + +static inline VmathSoaMatrix3 vmathSoaM3MakeFromQ_V( VmathSoaQuat unitQuat ) +{ + VmathSoaMatrix3 result; + vmathSoaM3MakeFromQ(&result, &unitQuat); + return result; +} + +static inline VmathSoaMatrix3 vmathSoaM3MakeFromCols_V( VmathSoaVector3 _col0, VmathSoaVector3 _col1, VmathSoaVector3 _col2 ) +{ + VmathSoaMatrix3 result; + vmathSoaM3MakeFromCols(&result, &_col0, &_col1, &_col2); + return result; +} + +static inline VmathSoaMatrix3 vmathSoaM3MakeFromAos_V( VmathMatrix3 mat ) +{ + VmathSoaMatrix3 result; + vmathSoaM3MakeFromAos(&result, &mat); + return result; +} + +static inline VmathSoaMatrix3 vmathSoaM3MakeFrom4Aos_V( VmathMatrix3 mat0, VmathMatrix3 mat1, VmathMatrix3 mat2, VmathMatrix3 mat3 ) +{ + VmathSoaMatrix3 result; + vmathSoaM3MakeFrom4Aos(&result, &mat0, &mat1, &mat2, &mat3); + return result; +} + +static inline void vmathSoaM3Get4Aos_V( VmathSoaMatrix3 mat, VmathMatrix3 *result0, VmathMatrix3 *result1, VmathMatrix3 *result2, VmathMatrix3 *result3 ) +{ + vmathSoaM3Get4Aos(&mat, result0, result1, result2, result3); +} + +static inline void vmathSoaM3SetCol0_V( VmathSoaMatrix3 *result, VmathSoaVector3 _col0 ) +{ + vmathSoaM3SetCol0(result, &_col0); +} + +static inline void vmathSoaM3SetCol1_V( VmathSoaMatrix3 *result, VmathSoaVector3 _col1 ) +{ + vmathSoaM3SetCol1(result, &_col1); +} + +static inline void vmathSoaM3SetCol2_V( VmathSoaMatrix3 *result, VmathSoaVector3 _col2 ) +{ + vmathSoaM3SetCol2(result, &_col2); +} + +static inline void vmathSoaM3SetCol_V( VmathSoaMatrix3 *result, int col, VmathSoaVector3 vec ) +{ + vmathSoaM3SetCol(result, col, &vec); +} + +static inline void vmathSoaM3SetRow_V( VmathSoaMatrix3 *result, int row, VmathSoaVector3 vec ) +{ + vmathSoaM3SetRow(result, row, &vec); +} + +static inline void vmathSoaM3SetElem_V( VmathSoaMatrix3 *result, int col, int row, vec_float4 val ) +{ + vmathSoaM3SetElem(result, col, row, val); +} + +static inline vec_float4 vmathSoaM3GetElem_V( VmathSoaMatrix3 mat, int col, int row ) +{ + return vmathSoaM3GetElem(&mat, col, row); +} + +static inline VmathSoaVector3 vmathSoaM3GetCol0_V( VmathSoaMatrix3 mat ) +{ + VmathSoaVector3 result; + vmathSoaM3GetCol0(&result, &mat); + return result; +} + +static inline VmathSoaVector3 vmathSoaM3GetCol1_V( VmathSoaMatrix3 mat ) +{ + VmathSoaVector3 result; + vmathSoaM3GetCol1(&result, &mat); + return result; +} + +static inline VmathSoaVector3 vmathSoaM3GetCol2_V( VmathSoaMatrix3 mat ) +{ + VmathSoaVector3 result; + vmathSoaM3GetCol2(&result, &mat); + return result; +} + +static inline VmathSoaVector3 vmathSoaM3GetCol_V( VmathSoaMatrix3 mat, int col ) +{ + VmathSoaVector3 result; + vmathSoaM3GetCol(&result, &mat, col); + return result; +} + +static inline VmathSoaVector3 vmathSoaM3GetRow_V( VmathSoaMatrix3 mat, int row ) +{ + VmathSoaVector3 result; + vmathSoaM3GetRow(&result, &mat, row); + return result; +} + +static inline VmathSoaMatrix3 vmathSoaM3Transpose_V( VmathSoaMatrix3 mat ) +{ + VmathSoaMatrix3 result; + vmathSoaM3Transpose(&result, &mat); + return result; +} + +static inline VmathSoaMatrix3 vmathSoaM3Inverse_V( VmathSoaMatrix3 mat ) +{ + VmathSoaMatrix3 result; + vmathSoaM3Inverse(&result, &mat); + return result; +} + +static inline vec_float4 vmathSoaM3Determinant_V( VmathSoaMatrix3 mat ) +{ + return vmathSoaM3Determinant(&mat); +} + +static inline VmathSoaMatrix3 vmathSoaM3Add_V( VmathSoaMatrix3 mat0, VmathSoaMatrix3 mat1 ) +{ + VmathSoaMatrix3 result; + vmathSoaM3Add(&result, &mat0, &mat1); + return result; +} + +static inline VmathSoaMatrix3 vmathSoaM3Sub_V( VmathSoaMatrix3 mat0, VmathSoaMatrix3 mat1 ) +{ + VmathSoaMatrix3 result; + vmathSoaM3Sub(&result, &mat0, &mat1); + return result; +} + +static inline VmathSoaMatrix3 vmathSoaM3Neg_V( VmathSoaMatrix3 mat ) +{ + VmathSoaMatrix3 result; + vmathSoaM3Neg(&result, &mat); + return result; +} + +static inline VmathSoaMatrix3 vmathSoaM3AbsPerElem_V( VmathSoaMatrix3 mat ) +{ + VmathSoaMatrix3 result; + vmathSoaM3AbsPerElem(&result, &mat); + return result; +} + +static inline VmathSoaMatrix3 vmathSoaM3ScalarMul_V( VmathSoaMatrix3 mat, vec_float4 scalar ) +{ + VmathSoaMatrix3 result; + vmathSoaM3ScalarMul(&result, &mat, scalar); + return result; +} + +static inline VmathSoaVector3 vmathSoaM3MulV3_V( VmathSoaMatrix3 mat, VmathSoaVector3 vec ) +{ + VmathSoaVector3 result; + vmathSoaM3MulV3(&result, &mat, &vec); + return result; +} + +static inline VmathSoaMatrix3 vmathSoaM3Mul_V( VmathSoaMatrix3 mat0, VmathSoaMatrix3 mat1 ) +{ + VmathSoaMatrix3 result; + vmathSoaM3Mul(&result, &mat0, &mat1); + return result; +} + +static inline VmathSoaMatrix3 vmathSoaM3MulPerElem_V( VmathSoaMatrix3 mat0, VmathSoaMatrix3 mat1 ) +{ + VmathSoaMatrix3 result; + vmathSoaM3MulPerElem(&result, &mat0, &mat1); + return result; +} + +static inline VmathSoaMatrix3 vmathSoaM3MakeIdentity_V( ) +{ + VmathSoaMatrix3 result; + vmathSoaM3MakeIdentity(&result); + return result; +} + +static inline VmathSoaMatrix3 vmathSoaM3MakeRotationX_V( vec_float4 radians ) +{ + VmathSoaMatrix3 result; + vmathSoaM3MakeRotationX(&result, radians); + return result; +} + +static inline VmathSoaMatrix3 vmathSoaM3MakeRotationY_V( vec_float4 radians ) +{ + VmathSoaMatrix3 result; + vmathSoaM3MakeRotationY(&result, radians); + return result; +} + +static inline VmathSoaMatrix3 vmathSoaM3MakeRotationZ_V( vec_float4 radians ) +{ + VmathSoaMatrix3 result; + vmathSoaM3MakeRotationZ(&result, radians); + return result; +} + +static inline VmathSoaMatrix3 vmathSoaM3MakeRotationZYX_V( VmathSoaVector3 radiansXYZ ) +{ + VmathSoaMatrix3 result; + vmathSoaM3MakeRotationZYX(&result, &radiansXYZ); + return result; +} + +static inline VmathSoaMatrix3 vmathSoaM3MakeRotationAxis_V( vec_float4 radians, VmathSoaVector3 unitVec ) +{ + VmathSoaMatrix3 result; + vmathSoaM3MakeRotationAxis(&result, radians, &unitVec); + return result; +} + +static inline VmathSoaMatrix3 vmathSoaM3MakeRotationQ_V( VmathSoaQuat unitQuat ) +{ + VmathSoaMatrix3 result; + vmathSoaM3MakeRotationQ(&result, &unitQuat); + return result; +} + +static inline VmathSoaMatrix3 vmathSoaM3MakeScale_V( VmathSoaVector3 scaleVec ) +{ + VmathSoaMatrix3 result; + vmathSoaM3MakeScale(&result, &scaleVec); + return result; +} + +static inline VmathSoaMatrix3 vmathSoaM3AppendScale_V( VmathSoaMatrix3 mat, VmathSoaVector3 scaleVec ) +{ + VmathSoaMatrix3 result; + vmathSoaM3AppendScale(&result, &mat, &scaleVec); + return result; +} + +static inline VmathSoaMatrix3 vmathSoaM3PrependScale_V( VmathSoaVector3 scaleVec, VmathSoaMatrix3 mat ) +{ + VmathSoaMatrix3 result; + vmathSoaM3PrependScale(&result, &scaleVec, &mat); + return result; +} + +static inline VmathSoaMatrix3 vmathSoaM3Select_V( VmathSoaMatrix3 mat0, VmathSoaMatrix3 mat1, vec_uint4 select1 ) +{ + VmathSoaMatrix3 result; + vmathSoaM3Select(&result, &mat0, &mat1, select1); + return result; +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathSoaM3Print_V( VmathSoaMatrix3 mat ) +{ + vmathSoaM3Print(&mat); +} + +static inline void vmathSoaM3Prints_V( VmathSoaMatrix3 mat, const char *name ) +{ + vmathSoaM3Prints(&mat, name); +} + +#endif + +static inline VmathSoaMatrix4 vmathSoaM4MakeFromScalar_V( vec_float4 scalar ) +{ + VmathSoaMatrix4 result; + vmathSoaM4MakeFromScalar(&result, scalar); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4MakeFromT3_V( VmathSoaTransform3 mat ) +{ + VmathSoaMatrix4 result; + vmathSoaM4MakeFromT3(&result, &mat); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4MakeFromCols_V( VmathSoaVector4 _col0, VmathSoaVector4 _col1, VmathSoaVector4 _col2, VmathSoaVector4 _col3 ) +{ + VmathSoaMatrix4 result; + vmathSoaM4MakeFromCols(&result, &_col0, &_col1, &_col2, &_col3); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4MakeFromM3V3_V( VmathSoaMatrix3 mat, VmathSoaVector3 translateVec ) +{ + VmathSoaMatrix4 result; + vmathSoaM4MakeFromM3V3(&result, &mat, &translateVec); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4MakeFromQV3_V( VmathSoaQuat unitQuat, VmathSoaVector3 translateVec ) +{ + VmathSoaMatrix4 result; + vmathSoaM4MakeFromQV3(&result, &unitQuat, &translateVec); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4MakeFromAos_V( VmathMatrix4 mat ) +{ + VmathSoaMatrix4 result; + vmathSoaM4MakeFromAos(&result, &mat); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4MakeFrom4Aos_V( VmathMatrix4 mat0, VmathMatrix4 mat1, VmathMatrix4 mat2, VmathMatrix4 mat3 ) +{ + VmathSoaMatrix4 result; + vmathSoaM4MakeFrom4Aos(&result, &mat0, &mat1, &mat2, &mat3); + return result; +} + +static inline void vmathSoaM4Get4Aos_V( VmathSoaMatrix4 mat, VmathMatrix4 *result0, VmathMatrix4 *result1, VmathMatrix4 *result2, VmathMatrix4 *result3 ) +{ + vmathSoaM4Get4Aos(&mat, result0, result1, result2, result3); +} + +static inline void vmathSoaM4SetCol0_V( VmathSoaMatrix4 *result, VmathSoaVector4 _col0 ) +{ + vmathSoaM4SetCol0(result, &_col0); +} + +static inline void vmathSoaM4SetCol1_V( VmathSoaMatrix4 *result, VmathSoaVector4 _col1 ) +{ + vmathSoaM4SetCol1(result, &_col1); +} + +static inline void vmathSoaM4SetCol2_V( VmathSoaMatrix4 *result, VmathSoaVector4 _col2 ) +{ + vmathSoaM4SetCol2(result, &_col2); +} + +static inline void vmathSoaM4SetCol3_V( VmathSoaMatrix4 *result, VmathSoaVector4 _col3 ) +{ + vmathSoaM4SetCol3(result, &_col3); +} + +static inline void vmathSoaM4SetCol_V( VmathSoaMatrix4 *result, int col, VmathSoaVector4 vec ) +{ + vmathSoaM4SetCol(result, col, &vec); +} + +static inline void vmathSoaM4SetRow_V( VmathSoaMatrix4 *result, int row, VmathSoaVector4 vec ) +{ + vmathSoaM4SetRow(result, row, &vec); +} + +static inline void vmathSoaM4SetElem_V( VmathSoaMatrix4 *result, int col, int row, vec_float4 val ) +{ + vmathSoaM4SetElem(result, col, row, val); +} + +static inline vec_float4 vmathSoaM4GetElem_V( VmathSoaMatrix4 mat, int col, int row ) +{ + return vmathSoaM4GetElem(&mat, col, row); +} + +static inline VmathSoaVector4 vmathSoaM4GetCol0_V( VmathSoaMatrix4 mat ) +{ + VmathSoaVector4 result; + vmathSoaM4GetCol0(&result, &mat); + return result; +} + +static inline VmathSoaVector4 vmathSoaM4GetCol1_V( VmathSoaMatrix4 mat ) +{ + VmathSoaVector4 result; + vmathSoaM4GetCol1(&result, &mat); + return result; +} + +static inline VmathSoaVector4 vmathSoaM4GetCol2_V( VmathSoaMatrix4 mat ) +{ + VmathSoaVector4 result; + vmathSoaM4GetCol2(&result, &mat); + return result; +} + +static inline VmathSoaVector4 vmathSoaM4GetCol3_V( VmathSoaMatrix4 mat ) +{ + VmathSoaVector4 result; + vmathSoaM4GetCol3(&result, &mat); + return result; +} + +static inline VmathSoaVector4 vmathSoaM4GetCol_V( VmathSoaMatrix4 mat, int col ) +{ + VmathSoaVector4 result; + vmathSoaM4GetCol(&result, &mat, col); + return result; +} + +static inline VmathSoaVector4 vmathSoaM4GetRow_V( VmathSoaMatrix4 mat, int row ) +{ + VmathSoaVector4 result; + vmathSoaM4GetRow(&result, &mat, row); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4Transpose_V( VmathSoaMatrix4 mat ) +{ + VmathSoaMatrix4 result; + vmathSoaM4Transpose(&result, &mat); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4Inverse_V( VmathSoaMatrix4 mat ) +{ + VmathSoaMatrix4 result; + vmathSoaM4Inverse(&result, &mat); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4AffineInverse_V( VmathSoaMatrix4 mat ) +{ + VmathSoaMatrix4 result; + vmathSoaM4AffineInverse(&result, &mat); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4OrthoInverse_V( VmathSoaMatrix4 mat ) +{ + VmathSoaMatrix4 result; + vmathSoaM4OrthoInverse(&result, &mat); + return result; +} + +static inline vec_float4 vmathSoaM4Determinant_V( VmathSoaMatrix4 mat ) +{ + return vmathSoaM4Determinant(&mat); +} + +static inline VmathSoaMatrix4 vmathSoaM4Add_V( VmathSoaMatrix4 mat0, VmathSoaMatrix4 mat1 ) +{ + VmathSoaMatrix4 result; + vmathSoaM4Add(&result, &mat0, &mat1); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4Sub_V( VmathSoaMatrix4 mat0, VmathSoaMatrix4 mat1 ) +{ + VmathSoaMatrix4 result; + vmathSoaM4Sub(&result, &mat0, &mat1); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4Neg_V( VmathSoaMatrix4 mat ) +{ + VmathSoaMatrix4 result; + vmathSoaM4Neg(&result, &mat); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4AbsPerElem_V( VmathSoaMatrix4 mat ) +{ + VmathSoaMatrix4 result; + vmathSoaM4AbsPerElem(&result, &mat); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4ScalarMul_V( VmathSoaMatrix4 mat, vec_float4 scalar ) +{ + VmathSoaMatrix4 result; + vmathSoaM4ScalarMul(&result, &mat, scalar); + return result; +} + +static inline VmathSoaVector4 vmathSoaM4MulV4_V( VmathSoaMatrix4 mat, VmathSoaVector4 vec ) +{ + VmathSoaVector4 result; + vmathSoaM4MulV4(&result, &mat, &vec); + return result; +} + +static inline VmathSoaVector4 vmathSoaM4MulV3_V( VmathSoaMatrix4 mat, VmathSoaVector3 vec ) +{ + VmathSoaVector4 result; + vmathSoaM4MulV3(&result, &mat, &vec); + return result; +} + +static inline VmathSoaVector4 vmathSoaM4MulP3_V( VmathSoaMatrix4 mat, VmathSoaPoint3 pnt ) +{ + VmathSoaVector4 result; + vmathSoaM4MulP3(&result, &mat, &pnt); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4Mul_V( VmathSoaMatrix4 mat0, VmathSoaMatrix4 mat1 ) +{ + VmathSoaMatrix4 result; + vmathSoaM4Mul(&result, &mat0, &mat1); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4MulT3_V( VmathSoaMatrix4 mat, VmathSoaTransform3 tfrm1 ) +{ + VmathSoaMatrix4 result; + vmathSoaM4MulT3(&result, &mat, &tfrm1); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4MulPerElem_V( VmathSoaMatrix4 mat0, VmathSoaMatrix4 mat1 ) +{ + VmathSoaMatrix4 result; + vmathSoaM4MulPerElem(&result, &mat0, &mat1); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4MakeIdentity_V( ) +{ + VmathSoaMatrix4 result; + vmathSoaM4MakeIdentity(&result); + return result; +} + +static inline void vmathSoaM4SetUpper3x3_V( VmathSoaMatrix4 *result, VmathSoaMatrix3 mat3 ) +{ + vmathSoaM4SetUpper3x3(result, &mat3); +} + +static inline VmathSoaMatrix3 vmathSoaM4GetUpper3x3_V( VmathSoaMatrix4 mat ) +{ + VmathSoaMatrix3 result; + vmathSoaM4GetUpper3x3(&result, &mat); + return result; +} + +static inline void vmathSoaM4SetTranslation_V( VmathSoaMatrix4 *result, VmathSoaVector3 translateVec ) +{ + vmathSoaM4SetTranslation(result, &translateVec); +} + +static inline VmathSoaVector3 vmathSoaM4GetTranslation_V( VmathSoaMatrix4 mat ) +{ + VmathSoaVector3 result; + vmathSoaM4GetTranslation(&result, &mat); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4MakeRotationX_V( vec_float4 radians ) +{ + VmathSoaMatrix4 result; + vmathSoaM4MakeRotationX(&result, radians); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4MakeRotationY_V( vec_float4 radians ) +{ + VmathSoaMatrix4 result; + vmathSoaM4MakeRotationY(&result, radians); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4MakeRotationZ_V( vec_float4 radians ) +{ + VmathSoaMatrix4 result; + vmathSoaM4MakeRotationZ(&result, radians); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4MakeRotationZYX_V( VmathSoaVector3 radiansXYZ ) +{ + VmathSoaMatrix4 result; + vmathSoaM4MakeRotationZYX(&result, &radiansXYZ); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4MakeRotationAxis_V( vec_float4 radians, VmathSoaVector3 unitVec ) +{ + VmathSoaMatrix4 result; + vmathSoaM4MakeRotationAxis(&result, radians, &unitVec); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4MakeRotationQ_V( VmathSoaQuat unitQuat ) +{ + VmathSoaMatrix4 result; + vmathSoaM4MakeRotationQ(&result, &unitQuat); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4MakeScale_V( VmathSoaVector3 scaleVec ) +{ + VmathSoaMatrix4 result; + vmathSoaM4MakeScale(&result, &scaleVec); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4AppendScale_V( VmathSoaMatrix4 mat, VmathSoaVector3 scaleVec ) +{ + VmathSoaMatrix4 result; + vmathSoaM4AppendScale(&result, &mat, &scaleVec); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4PrependScale_V( VmathSoaVector3 scaleVec, VmathSoaMatrix4 mat ) +{ + VmathSoaMatrix4 result; + vmathSoaM4PrependScale(&result, &scaleVec, &mat); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4MakeTranslation_V( VmathSoaVector3 translateVec ) +{ + VmathSoaMatrix4 result; + vmathSoaM4MakeTranslation(&result, &translateVec); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4MakeLookAt_V( VmathSoaPoint3 eyePos, VmathSoaPoint3 lookAtPos, VmathSoaVector3 upVec ) +{ + VmathSoaMatrix4 result; + vmathSoaM4MakeLookAt(&result, &eyePos, &lookAtPos, &upVec); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4MakePerspective_V( vec_float4 fovyRadians, vec_float4 aspect, vec_float4 zNear, vec_float4 zFar ) +{ + VmathSoaMatrix4 result; + vmathSoaM4MakePerspective(&result, fovyRadians, aspect, zNear, zFar); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4MakeFrustum_V( vec_float4 left, vec_float4 right, vec_float4 bottom, vec_float4 top, vec_float4 zNear, vec_float4 zFar ) +{ + VmathSoaMatrix4 result; + vmathSoaM4MakeFrustum(&result, left, right, bottom, top, zNear, zFar); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4MakeOrthographic_V( vec_float4 left, vec_float4 right, vec_float4 bottom, vec_float4 top, vec_float4 zNear, vec_float4 zFar ) +{ + VmathSoaMatrix4 result; + vmathSoaM4MakeOrthographic(&result, left, right, bottom, top, zNear, zFar); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaM4Select_V( VmathSoaMatrix4 mat0, VmathSoaMatrix4 mat1, vec_uint4 select1 ) +{ + VmathSoaMatrix4 result; + vmathSoaM4Select(&result, &mat0, &mat1, select1); + return result; +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathSoaM4Print_V( VmathSoaMatrix4 mat ) +{ + vmathSoaM4Print(&mat); +} + +static inline void vmathSoaM4Prints_V( VmathSoaMatrix4 mat, const char *name ) +{ + vmathSoaM4Prints(&mat, name); +} + +#endif + +static inline VmathSoaTransform3 vmathSoaT3MakeFromScalar_V( vec_float4 scalar ) +{ + VmathSoaTransform3 result; + vmathSoaT3MakeFromScalar(&result, scalar); + return result; +} + +static inline VmathSoaTransform3 vmathSoaT3MakeFromCols_V( VmathSoaVector3 _col0, VmathSoaVector3 _col1, VmathSoaVector3 _col2, VmathSoaVector3 _col3 ) +{ + VmathSoaTransform3 result; + vmathSoaT3MakeFromCols(&result, &_col0, &_col1, &_col2, &_col3); + return result; +} + +static inline VmathSoaTransform3 vmathSoaT3MakeFromM3V3_V( VmathSoaMatrix3 tfrm, VmathSoaVector3 translateVec ) +{ + VmathSoaTransform3 result; + vmathSoaT3MakeFromM3V3(&result, &tfrm, &translateVec); + return result; +} + +static inline VmathSoaTransform3 vmathSoaT3MakeFromQV3_V( VmathSoaQuat unitQuat, VmathSoaVector3 translateVec ) +{ + VmathSoaTransform3 result; + vmathSoaT3MakeFromQV3(&result, &unitQuat, &translateVec); + return result; +} + +static inline VmathSoaTransform3 vmathSoaT3MakeFromAos_V( VmathTransform3 tfrm ) +{ + VmathSoaTransform3 result; + vmathSoaT3MakeFromAos(&result, &tfrm); + return result; +} + +static inline VmathSoaTransform3 vmathSoaT3MakeFrom4Aos_V( VmathTransform3 tfrm0, VmathTransform3 tfrm1, VmathTransform3 tfrm2, VmathTransform3 tfrm3 ) +{ + VmathSoaTransform3 result; + vmathSoaT3MakeFrom4Aos(&result, &tfrm0, &tfrm1, &tfrm2, &tfrm3); + return result; +} + +static inline void vmathSoaT3Get4Aos_V( VmathSoaTransform3 tfrm, VmathTransform3 *result0, VmathTransform3 *result1, VmathTransform3 *result2, VmathTransform3 *result3 ) +{ + vmathSoaT3Get4Aos(&tfrm, result0, result1, result2, result3); +} + +static inline void vmathSoaT3SetCol0_V( VmathSoaTransform3 *result, VmathSoaVector3 _col0 ) +{ + vmathSoaT3SetCol0(result, &_col0); +} + +static inline void vmathSoaT3SetCol1_V( VmathSoaTransform3 *result, VmathSoaVector3 _col1 ) +{ + vmathSoaT3SetCol1(result, &_col1); +} + +static inline void vmathSoaT3SetCol2_V( VmathSoaTransform3 *result, VmathSoaVector3 _col2 ) +{ + vmathSoaT3SetCol2(result, &_col2); +} + +static inline void vmathSoaT3SetCol3_V( VmathSoaTransform3 *result, VmathSoaVector3 _col3 ) +{ + vmathSoaT3SetCol3(result, &_col3); +} + +static inline void vmathSoaT3SetCol_V( VmathSoaTransform3 *result, int col, VmathSoaVector3 vec ) +{ + vmathSoaT3SetCol(result, col, &vec); +} + +static inline void vmathSoaT3SetRow_V( VmathSoaTransform3 *result, int row, VmathSoaVector4 vec ) +{ + vmathSoaT3SetRow(result, row, &vec); +} + +static inline void vmathSoaT3SetElem_V( VmathSoaTransform3 *result, int col, int row, vec_float4 val ) +{ + vmathSoaT3SetElem(result, col, row, val); +} + +static inline vec_float4 vmathSoaT3GetElem_V( VmathSoaTransform3 tfrm, int col, int row ) +{ + return vmathSoaT3GetElem(&tfrm, col, row); +} + +static inline VmathSoaVector3 vmathSoaT3GetCol0_V( VmathSoaTransform3 tfrm ) +{ + VmathSoaVector3 result; + vmathSoaT3GetCol0(&result, &tfrm); + return result; +} + +static inline VmathSoaVector3 vmathSoaT3GetCol1_V( VmathSoaTransform3 tfrm ) +{ + VmathSoaVector3 result; + vmathSoaT3GetCol1(&result, &tfrm); + return result; +} + +static inline VmathSoaVector3 vmathSoaT3GetCol2_V( VmathSoaTransform3 tfrm ) +{ + VmathSoaVector3 result; + vmathSoaT3GetCol2(&result, &tfrm); + return result; +} + +static inline VmathSoaVector3 vmathSoaT3GetCol3_V( VmathSoaTransform3 tfrm ) +{ + VmathSoaVector3 result; + vmathSoaT3GetCol3(&result, &tfrm); + return result; +} + +static inline VmathSoaVector3 vmathSoaT3GetCol_V( VmathSoaTransform3 tfrm, int col ) +{ + VmathSoaVector3 result; + vmathSoaT3GetCol(&result, &tfrm, col); + return result; +} + +static inline VmathSoaVector4 vmathSoaT3GetRow_V( VmathSoaTransform3 tfrm, int row ) +{ + VmathSoaVector4 result; + vmathSoaT3GetRow(&result, &tfrm, row); + return result; +} + +static inline VmathSoaTransform3 vmathSoaT3Inverse_V( VmathSoaTransform3 tfrm ) +{ + VmathSoaTransform3 result; + vmathSoaT3Inverse(&result, &tfrm); + return result; +} + +static inline VmathSoaTransform3 vmathSoaT3OrthoInverse_V( VmathSoaTransform3 tfrm ) +{ + VmathSoaTransform3 result; + vmathSoaT3OrthoInverse(&result, &tfrm); + return result; +} + +static inline VmathSoaTransform3 vmathSoaT3AbsPerElem_V( VmathSoaTransform3 tfrm ) +{ + VmathSoaTransform3 result; + vmathSoaT3AbsPerElem(&result, &tfrm); + return result; +} + +static inline VmathSoaVector3 vmathSoaT3MulV3_V( VmathSoaTransform3 tfrm, VmathSoaVector3 vec ) +{ + VmathSoaVector3 result; + vmathSoaT3MulV3(&result, &tfrm, &vec); + return result; +} + +static inline VmathSoaPoint3 vmathSoaT3MulP3_V( VmathSoaTransform3 tfrm, VmathSoaPoint3 pnt ) +{ + VmathSoaPoint3 result; + vmathSoaT3MulP3(&result, &tfrm, &pnt); + return result; +} + +static inline VmathSoaTransform3 vmathSoaT3Mul_V( VmathSoaTransform3 tfrm0, VmathSoaTransform3 tfrm1 ) +{ + VmathSoaTransform3 result; + vmathSoaT3Mul(&result, &tfrm0, &tfrm1); + return result; +} + +static inline VmathSoaTransform3 vmathSoaT3MulPerElem_V( VmathSoaTransform3 tfrm0, VmathSoaTransform3 tfrm1 ) +{ + VmathSoaTransform3 result; + vmathSoaT3MulPerElem(&result, &tfrm0, &tfrm1); + return result; +} + +static inline VmathSoaTransform3 vmathSoaT3MakeIdentity_V( ) +{ + VmathSoaTransform3 result; + vmathSoaT3MakeIdentity(&result); + return result; +} + +static inline void vmathSoaT3SetUpper3x3_V( VmathSoaTransform3 *result, VmathSoaMatrix3 tfrm ) +{ + vmathSoaT3SetUpper3x3(result, &tfrm); +} + +static inline VmathSoaMatrix3 vmathSoaT3GetUpper3x3_V( VmathSoaTransform3 tfrm ) +{ + VmathSoaMatrix3 result; + vmathSoaT3GetUpper3x3(&result, &tfrm); + return result; +} + +static inline void vmathSoaT3SetTranslation_V( VmathSoaTransform3 *result, VmathSoaVector3 translateVec ) +{ + vmathSoaT3SetTranslation(result, &translateVec); +} + +static inline VmathSoaVector3 vmathSoaT3GetTranslation_V( VmathSoaTransform3 tfrm ) +{ + VmathSoaVector3 result; + vmathSoaT3GetTranslation(&result, &tfrm); + return result; +} + +static inline VmathSoaTransform3 vmathSoaT3MakeRotationX_V( vec_float4 radians ) +{ + VmathSoaTransform3 result; + vmathSoaT3MakeRotationX(&result, radians); + return result; +} + +static inline VmathSoaTransform3 vmathSoaT3MakeRotationY_V( vec_float4 radians ) +{ + VmathSoaTransform3 result; + vmathSoaT3MakeRotationY(&result, radians); + return result; +} + +static inline VmathSoaTransform3 vmathSoaT3MakeRotationZ_V( vec_float4 radians ) +{ + VmathSoaTransform3 result; + vmathSoaT3MakeRotationZ(&result, radians); + return result; +} + +static inline VmathSoaTransform3 vmathSoaT3MakeRotationZYX_V( VmathSoaVector3 radiansXYZ ) +{ + VmathSoaTransform3 result; + vmathSoaT3MakeRotationZYX(&result, &radiansXYZ); + return result; +} + +static inline VmathSoaTransform3 vmathSoaT3MakeRotationAxis_V( vec_float4 radians, VmathSoaVector3 unitVec ) +{ + VmathSoaTransform3 result; + vmathSoaT3MakeRotationAxis(&result, radians, &unitVec); + return result; +} + +static inline VmathSoaTransform3 vmathSoaT3MakeRotationQ_V( VmathSoaQuat unitQuat ) +{ + VmathSoaTransform3 result; + vmathSoaT3MakeRotationQ(&result, &unitQuat); + return result; +} + +static inline VmathSoaTransform3 vmathSoaT3MakeScale_V( VmathSoaVector3 scaleVec ) +{ + VmathSoaTransform3 result; + vmathSoaT3MakeScale(&result, &scaleVec); + return result; +} + +static inline VmathSoaTransform3 vmathSoaT3AppendScale_V( VmathSoaTransform3 tfrm, VmathSoaVector3 scaleVec ) +{ + VmathSoaTransform3 result; + vmathSoaT3AppendScale(&result, &tfrm, &scaleVec); + return result; +} + +static inline VmathSoaTransform3 vmathSoaT3PrependScale_V( VmathSoaVector3 scaleVec, VmathSoaTransform3 tfrm ) +{ + VmathSoaTransform3 result; + vmathSoaT3PrependScale(&result, &scaleVec, &tfrm); + return result; +} + +static inline VmathSoaTransform3 vmathSoaT3MakeTranslation_V( VmathSoaVector3 translateVec ) +{ + VmathSoaTransform3 result; + vmathSoaT3MakeTranslation(&result, &translateVec); + return result; +} + +static inline VmathSoaTransform3 vmathSoaT3Select_V( VmathSoaTransform3 tfrm0, VmathSoaTransform3 tfrm1, vec_uint4 select1 ) +{ + VmathSoaTransform3 result; + vmathSoaT3Select(&result, &tfrm0, &tfrm1, select1); + return result; +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathSoaT3Print_V( VmathSoaTransform3 tfrm ) +{ + vmathSoaT3Print(&tfrm); +} + +static inline void vmathSoaT3Prints_V( VmathSoaTransform3 tfrm, const char *name ) +{ + vmathSoaT3Prints(&tfrm, name); +} + +#endif + +static inline VmathSoaQuat vmathSoaQMakeFromM3_V( VmathSoaMatrix3 tfrm ) +{ + VmathSoaQuat result; + vmathSoaQMakeFromM3(&result, &tfrm); + return result; +} + +static inline VmathSoaMatrix3 vmathSoaV3Outer_V( VmathSoaVector3 tfrm0, VmathSoaVector3 tfrm1 ) +{ + VmathSoaMatrix3 result; + vmathSoaV3Outer(&result, &tfrm0, &tfrm1); + return result; +} + +static inline VmathSoaMatrix4 vmathSoaV4Outer_V( VmathSoaVector4 tfrm0, VmathSoaVector4 tfrm1 ) +{ + VmathSoaMatrix4 result; + vmathSoaV4Outer(&result, &tfrm0, &tfrm1); + return result; +} + +static inline VmathSoaVector3 vmathSoaV3RowMul_V( VmathSoaVector3 vec, VmathSoaMatrix3 mat ) +{ + VmathSoaVector3 result; + vmathSoaV3RowMul(&result, &vec, &mat); + return result; +} + +static inline VmathSoaMatrix3 vmathSoaV3CrossMatrix_V( VmathSoaVector3 vec ) +{ + VmathSoaMatrix3 result; + vmathSoaV3CrossMatrix(&result, &vec); + return result; +} + +static inline VmathSoaMatrix3 vmathSoaV3CrossMatrixMul_V( VmathSoaVector3 vec, VmathSoaMatrix3 mat ) +{ + VmathSoaMatrix3 result; + vmathSoaV3CrossMatrixMul(&result, &vec, &mat); + return result; +} + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/spu/c/quat_aos.h b/Extras/vectormathlibrary/include/vectormath/spu/c/quat_aos.h new file mode 100644 index 000000000..0f25d654b --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/spu/c/quat_aos.h @@ -0,0 +1,371 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_QUAT_AOS_C_H +#define _VECTORMATH_QUAT_AOS_C_H +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/*----------------------------------------------------------------------------- + * Definitions + */ +#ifndef _VECTORMATH_INTERNAL_FUNCTIONS +#define _VECTORMATH_INTERNAL_FUNCTIONS + +#endif + +static inline void vmathQCopy( VmathQuat *result, const VmathQuat *quat ) +{ + result->vec128 = quat->vec128; +} + +static inline void vmathQMakeFromElems( VmathQuat *result, float _x, float _y, float _z, float _w ) +{ + result->vec128 = (vec_float4){ _x, _y, _z, _w }; +} + +static inline void vmathQMakeFromV3Scalar( VmathQuat *result, const VmathVector3 *xyz, float _w ) +{ + result->vec128 = spu_shuffle( xyz->vec128, spu_promote( _w, 0 ), _VECTORMATH_SHUF_XYZA ); +} + +static inline void vmathQMakeFromV4( VmathQuat *result, const VmathVector4 *vec ) +{ + result->vec128 = vec->vec128; +} + +static inline void vmathQMakeFromScalar( VmathQuat *result, float scalar ) +{ + result->vec128 = spu_splats( scalar ); +} + +static inline void vmathQMakeFrom128( VmathQuat *result, vec_float4 vf4 ) +{ + result->vec128 = vf4; +} + +static inline void vmathQMakeIdentity( VmathQuat *result ) +{ + result->vec128 = _VECTORMATH_UNIT_0001; +} + +static inline void vmathQLerp( VmathQuat *result, float t, const VmathQuat *quat0, const VmathQuat *quat1 ) +{ + VmathQuat tmpQ_0, tmpQ_1; + vmathQSub( &tmpQ_0, quat1, quat0 ); + vmathQScalarMul( &tmpQ_1, &tmpQ_0, t ); + vmathQAdd( result, quat0, &tmpQ_1 ); +} + +static inline void vmathQSlerp( VmathQuat *result, float t, const VmathQuat *unitQuat0, const VmathQuat *unitQuat1 ) +{ + VmathQuat start; + vec_float4 scales, scale0, scale1, cosAngle, angle, tttt, oneMinusT, angles, sines; + vec_uint4 selectMask; + vec_uchar16 shuffle_xxxx = (vec_uchar16)spu_splats((int)0x00010203); + vec_uchar16 shuffle_yyyy = (vec_uchar16)spu_splats((int)0x04050607); + vec_uchar16 shuffle_zzzz = (vec_uchar16)spu_splats((int)0x08090a0b); + cosAngle = _vmathVfDot4( unitQuat0->vec128, unitQuat1->vec128 ); + cosAngle = spu_shuffle( cosAngle, cosAngle, shuffle_xxxx ); + selectMask = (vec_uint4)spu_cmpgt( spu_splats(0.0f), cosAngle ); + cosAngle = spu_sel( cosAngle, negatef4( cosAngle ), selectMask ); + start.vec128 = spu_sel( unitQuat0->vec128, negatef4( unitQuat0->vec128 ), selectMask ); + selectMask = (vec_uint4)spu_cmpgt( spu_splats(_VECTORMATH_SLERP_TOL), cosAngle ); + angle = acosf4( cosAngle ); + tttt = spu_splats(t); + oneMinusT = spu_sub( spu_splats(1.0f), tttt ); + angles = spu_sel( spu_splats(1.0f), oneMinusT, (vec_uint4)spu_maskb(0x0f00) ); + angles = spu_sel( angles, tttt, (vec_uint4)spu_maskb(0x00f0) ); + angles = spu_mul( angles, angle ); + sines = sinf4( angles ); + scales = divf4( sines, spu_shuffle( sines, sines, shuffle_xxxx ) ); + scale0 = spu_sel( oneMinusT, spu_shuffle( scales, scales, shuffle_yyyy ), selectMask ); + scale1 = spu_sel( tttt, spu_shuffle( scales, scales, shuffle_zzzz ), selectMask ); + result->vec128 = spu_madd( start.vec128, scale0, spu_mul( unitQuat1->vec128, scale1 ) ); +} + +static inline void vmathQSquad( VmathQuat *result, float t, const VmathQuat *unitQuat0, const VmathQuat *unitQuat1, const VmathQuat *unitQuat2, const VmathQuat *unitQuat3 ) +{ + VmathQuat tmp0, tmp1; + vmathQSlerp( &tmp0, t, unitQuat0, unitQuat3 ); + vmathQSlerp( &tmp1, t, unitQuat1, unitQuat2 ); + vmathQSlerp( result, ( ( 2.0f * t ) * ( 1.0f - t ) ), &tmp0, &tmp1 ); +} + +static inline vec_float4 vmathQGet128( const VmathQuat *quat ) +{ + return quat->vec128; +} + +static inline void vmathQSetXYZ( VmathQuat *result, const VmathVector3 *vec ) +{ + result->vec128 = spu_sel( vec->vec128, result->vec128, (vec_uint4)spu_maskb(0x000f) ); +} + +static inline void vmathQGetXYZ( VmathVector3 *result, const VmathQuat *quat ) +{ + result->vec128 = quat->vec128; +} + +static inline void vmathQSetX( VmathQuat *result, float _x ) +{ + result->vec128 = spu_insert( _x, result->vec128, 0 ); +} + +static inline float vmathQGetX( const VmathQuat *quat ) +{ + return spu_extract( quat->vec128, 0 ); +} + +static inline void vmathQSetY( VmathQuat *result, float _y ) +{ + result->vec128 = spu_insert( _y, result->vec128, 1 ); +} + +static inline float vmathQGetY( const VmathQuat *quat ) +{ + return spu_extract( quat->vec128, 1 ); +} + +static inline void vmathQSetZ( VmathQuat *result, float _z ) +{ + result->vec128 = spu_insert( _z, result->vec128, 2 ); +} + +static inline float vmathQGetZ( const VmathQuat *quat ) +{ + return spu_extract( quat->vec128, 2 ); +} + +static inline void vmathQSetW( VmathQuat *result, float _w ) +{ + result->vec128 = spu_insert( _w, result->vec128, 3 ); +} + +static inline float vmathQGetW( const VmathQuat *quat ) +{ + return spu_extract( quat->vec128, 3 ); +} + +static inline void vmathQSetElem( VmathQuat *result, int idx, float value ) +{ + result->vec128 = spu_insert( value, result->vec128, idx ); +} + +static inline float vmathQGetElem( const VmathQuat *quat, int idx ) +{ + return spu_extract( quat->vec128, idx ); +} + +static inline void vmathQAdd( VmathQuat *result, const VmathQuat *quat0, const VmathQuat *quat1 ) +{ + result->vec128 = spu_add( quat0->vec128, quat1->vec128 ); +} + +static inline void vmathQSub( VmathQuat *result, const VmathQuat *quat0, const VmathQuat *quat1 ) +{ + result->vec128 = spu_sub( quat0->vec128, quat1->vec128 ); +} + +static inline void vmathQScalarMul( VmathQuat *result, const VmathQuat *quat, float scalar ) +{ + result->vec128 = spu_mul( quat->vec128, spu_splats(scalar) ); +} + +static inline void vmathQScalarDiv( VmathQuat *result, const VmathQuat *quat, float scalar ) +{ + result->vec128 = divf4( quat->vec128, spu_splats(scalar) ); +} + +static inline void vmathQNeg( VmathQuat *result, const VmathQuat *quat ) +{ + result->vec128 = negatef4( quat->vec128 ); +} + +static inline float vmathQDot( const VmathQuat *quat0, const VmathQuat *quat1 ) +{ + return spu_extract( _vmathVfDot4( quat0->vec128, quat1->vec128 ), 0 ); +} + +static inline float vmathQNorm( const VmathQuat *quat ) +{ + return spu_extract( _vmathVfDot4( quat->vec128, quat->vec128 ), 0 ); +} + +static inline float vmathQLength( const VmathQuat *quat ) +{ + return sqrtf( vmathQNorm( quat ) ); +} + +static inline void vmathQNormalize( VmathQuat *result, const VmathQuat *quat ) +{ + vec_float4 dot = _vmathVfDot4( quat->vec128, quat->vec128 ); + result->vec128 = spu_mul( quat->vec128, rsqrtf4( dot ) ); +} + +static inline void vmathQMakeRotationArc( VmathQuat *result, const VmathVector3 *unitVec0, const VmathVector3 *unitVec1 ) +{ + VmathVector3 crossVec, tmpV3_0; + vec_float4 cosAngle, cosAngleX2Plus2, recipCosHalfAngleX2, cosHalfAngleX2, res; + cosAngle = _vmathVfDot3( unitVec0->vec128, unitVec1->vec128 ); + cosAngle = spu_shuffle( cosAngle, cosAngle, (vec_uchar16)spu_splats(0x00010203) ); + cosAngleX2Plus2 = spu_madd( cosAngle, spu_splats(2.0f), spu_splats(2.0f) ); + recipCosHalfAngleX2 = rsqrtf4( cosAngleX2Plus2 ); + cosHalfAngleX2 = spu_mul( recipCosHalfAngleX2, cosAngleX2Plus2 ); + vmathV3Cross( &tmpV3_0, unitVec0, unitVec1 ); + crossVec = tmpV3_0; + res = spu_mul( crossVec.vec128, recipCosHalfAngleX2 ); + res = spu_sel( res, spu_mul( cosHalfAngleX2, spu_splats(0.5f) ), (vec_uint4)spu_maskb(0x000f) ); + result->vec128 = res; +} + +static inline void vmathQMakeRotationAxis( VmathQuat *result, float radians, const VmathVector3 *unitVec ) +{ + vec_float4 s, c, angle, res; + angle = spu_mul( spu_splats(radians), spu_splats(0.5f) ); + sincosf4( angle, &s, &c ); + res = spu_sel( spu_mul( unitVec->vec128, s ), c, (vec_uint4)spu_maskb(0x000f) ); + result->vec128 = res; +} + +static inline void vmathQMakeRotationX( VmathQuat *result, float radians ) +{ + vec_float4 s, c, angle, res; + angle = spu_mul( spu_splats(radians), spu_splats(0.5f) ); + sincosf4( angle, &s, &c ); + res = spu_sel( spu_splats(0.0f), s, (vec_uint4)spu_maskb(0xf000) ); + res = spu_sel( res, c, (vec_uint4)spu_maskb(0x000f) ); + result->vec128 = res; +} + +static inline void vmathQMakeRotationY( VmathQuat *result, float radians ) +{ + vec_float4 s, c, angle, res; + angle = spu_mul( spu_splats(radians), spu_splats(0.5f) ); + sincosf4( angle, &s, &c ); + res = spu_sel( spu_splats(0.0f), s, (vec_uint4)spu_maskb(0x0f00) ); + res = spu_sel( res, c, (vec_uint4)spu_maskb(0x000f) ); + result->vec128 = res; +} + +static inline void vmathQMakeRotationZ( VmathQuat *result, float radians ) +{ + vec_float4 s, c, angle, res; + angle = spu_mul( spu_splats(radians), spu_splats(0.5f) ); + sincosf4( angle, &s, &c ); + res = spu_sel( spu_splats(0.0f), s, (vec_uint4)spu_maskb(0x00f0) ); + res = spu_sel( res, c, (vec_uint4)spu_maskb(0x000f) ); + result->vec128 = res; +} + +static inline void vmathQMul( VmathQuat *result, const VmathQuat *quat0, const VmathQuat *quat1 ) +{ + vec_float4 ldata, rdata, qv, tmp0, tmp1, tmp2, tmp3; + vec_float4 product, l_wxyz, r_wxyz, xy, qw; + ldata = quat0->vec128; + rdata = quat1->vec128; + vec_uchar16 shuffle_wwww = (vec_uchar16)spu_splats((int)0x0c0d0e0f); + tmp0 = spu_shuffle( ldata, ldata, _VECTORMATH_SHUF_YZXW ); + tmp1 = spu_shuffle( rdata, rdata, _VECTORMATH_SHUF_ZXYW ); + tmp2 = spu_shuffle( ldata, ldata, _VECTORMATH_SHUF_ZXYW ); + tmp3 = spu_shuffle( rdata, rdata, _VECTORMATH_SHUF_YZXW ); + qv = spu_mul( spu_shuffle( ldata, ldata, shuffle_wwww ), rdata ); + qv = spu_madd( spu_shuffle( rdata, rdata, shuffle_wwww ), ldata, qv ); + qv = spu_madd( tmp0, tmp1, qv ); + qv = spu_nmsub( tmp2, tmp3, qv ); + product = spu_mul( ldata, rdata ); + l_wxyz = spu_rlqwbyte( ldata, 12 ); + r_wxyz = spu_rlqwbyte( rdata, 12 ); + qw = spu_nmsub( l_wxyz, r_wxyz, product ); + xy = spu_madd( l_wxyz, r_wxyz, product ); + qw = spu_sub( qw, spu_rlqwbyte( xy, 8 ) ); + result->vec128 = spu_sel( qv, qw, (vec_uint4)spu_maskb( 0x000f ) ); +} + +static inline void vmathQRotate( VmathVector3 *result, const VmathQuat *quat, const VmathVector3 *vec ) +{ + vec_float4 qdata, vdata, product, tmp0, tmp1, tmp2, tmp3, wwww, qv, qw, res; + qdata = quat->vec128; + vdata = vec->vec128; + vec_uchar16 shuffle_xxxx = (vec_uchar16)spu_splats((int)0x00010203); + vec_uchar16 shuffle_wwww = (vec_uchar16)spu_splats((int)0x0c0d0e0f); + tmp0 = spu_shuffle( qdata, qdata, _VECTORMATH_SHUF_YZXW ); + tmp1 = spu_shuffle( vdata, vdata, _VECTORMATH_SHUF_ZXYW ); + tmp2 = spu_shuffle( qdata, qdata, _VECTORMATH_SHUF_ZXYW ); + tmp3 = spu_shuffle( vdata, vdata, _VECTORMATH_SHUF_YZXW ); + wwww = spu_shuffle( qdata, qdata, shuffle_wwww ); + qv = spu_mul( wwww, vdata ); + qv = spu_madd( tmp0, tmp1, qv ); + qv = spu_nmsub( tmp2, tmp3, qv ); + product = spu_mul( qdata, vdata ); + qw = spu_madd( spu_rlqwbyte( qdata, 4 ), spu_rlqwbyte( vdata, 4 ), product ); + qw = spu_add( spu_rlqwbyte( product, 8 ), qw ); + tmp1 = spu_shuffle( qv, qv, _VECTORMATH_SHUF_ZXYW ); + tmp3 = spu_shuffle( qv, qv, _VECTORMATH_SHUF_YZXW ); + res = spu_mul( spu_shuffle( qw, qw, shuffle_xxxx ), qdata ); + res = spu_madd( wwww, qv, res ); + res = spu_madd( tmp0, tmp1, res ); + res = spu_nmsub( tmp2, tmp3, res ); + result->vec128 = res; +} + +static inline void vmathQConj( VmathQuat *result, const VmathQuat *quat ) +{ + result->vec128 = spu_xor( quat->vec128, ((vec_float4)(vec_int4){0x80000000,0x80000000,0x80000000,0}) ); +} + +static inline void vmathQSelect( VmathQuat *result, const VmathQuat *quat0, const VmathQuat *quat1, unsigned int select1 ) +{ + result->vec128 = spu_sel( quat0->vec128, quat1->vec128, spu_splats( (unsigned int)-(select1 > 0) ) ); +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathQPrint( const VmathQuat *quat ) +{ + union { vec_float4 v; float s[4]; } tmp; + tmp.v = quat->vec128; + printf( "( %f %f %f %f )\n", tmp.s[0], tmp.s[1], tmp.s[2], tmp.s[3] ); +} + +static inline void vmathQPrints( const VmathQuat *quat, const char *name ) +{ + union { vec_float4 v; float s[4]; } tmp; + tmp.v = quat->vec128; + printf( "%s: ( %f %f %f %f )\n", name, tmp.s[0], tmp.s[1], tmp.s[2], tmp.s[3] ); +} + +#endif + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/spu/c/quat_aos_v.h b/Extras/vectormathlibrary/include/vectormath/spu/c/quat_aos_v.h new file mode 100644 index 000000000..04cf6ccf9 --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/spu/c/quat_aos_v.h @@ -0,0 +1,312 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_QUAT_AOS_V_C_H +#define _VECTORMATH_QUAT_AOS_V_C_H +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/*----------------------------------------------------------------------------- + * Definitions + */ +#ifndef _VECTORMATH_INTERNAL_FUNCTIONS +#define _VECTORMATH_INTERNAL_FUNCTIONS + +#endif + +static inline VmathQuat vmathQMakeFromElems_V( float _x, float _y, float _z, float _w ) +{ + VmathQuat result; + vmathQMakeFromElems(&result, _x, _y, _z, _w); + return result; +} + +static inline VmathQuat vmathQMakeFromV3Scalar_V( VmathVector3 xyz, float _w ) +{ + VmathQuat result; + vmathQMakeFromV3Scalar(&result, &xyz, _w); + return result; +} + +static inline VmathQuat vmathQMakeFromV4_V( VmathVector4 vec ) +{ + VmathQuat result; + vmathQMakeFromV4(&result, &vec); + return result; +} + +static inline VmathQuat vmathQMakeFromScalar_V( float scalar ) +{ + VmathQuat result; + vmathQMakeFromScalar(&result, scalar); + return result; +} + +static inline VmathQuat vmathQMakeFrom128_V( vec_float4 vf4 ) +{ + VmathQuat result; + vmathQMakeFrom128(&result, vf4); + return result; +} + +static inline VmathQuat vmathQMakeIdentity_V( ) +{ + VmathQuat result; + vmathQMakeIdentity(&result); + return result; +} + +static inline VmathQuat vmathQLerp_V( float t, VmathQuat quat0, VmathQuat quat1 ) +{ + VmathQuat result; + vmathQLerp(&result, t, &quat0, &quat1); + return result; +} + +static inline VmathQuat vmathQSlerp_V( float t, VmathQuat unitQuat0, VmathQuat unitQuat1 ) +{ + VmathQuat result; + vmathQSlerp(&result, t, &unitQuat0, &unitQuat1); + return result; +} + +static inline VmathQuat vmathQSquad_V( float t, VmathQuat unitQuat0, VmathQuat unitQuat1, VmathQuat unitQuat2, VmathQuat unitQuat3 ) +{ + VmathQuat result; + vmathQSquad(&result, t, &unitQuat0, &unitQuat1, &unitQuat2, &unitQuat3); + return result; +} + +static inline vec_float4 vmathQGet128_V( VmathQuat quat ) +{ + return vmathQGet128(&quat); +} + +static inline void vmathQSetXYZ_V( VmathQuat *result, VmathVector3 vec ) +{ + vmathQSetXYZ(result, &vec); +} + +static inline VmathVector3 vmathQGetXYZ_V( VmathQuat quat ) +{ + VmathVector3 result; + vmathQGetXYZ(&result, &quat); + return result; +} + +static inline void vmathQSetX_V( VmathQuat *result, float _x ) +{ + vmathQSetX(result, _x); +} + +static inline float vmathQGetX_V( VmathQuat quat ) +{ + return vmathQGetX(&quat); +} + +static inline void vmathQSetY_V( VmathQuat *result, float _y ) +{ + vmathQSetY(result, _y); +} + +static inline float vmathQGetY_V( VmathQuat quat ) +{ + return vmathQGetY(&quat); +} + +static inline void vmathQSetZ_V( VmathQuat *result, float _z ) +{ + vmathQSetZ(result, _z); +} + +static inline float vmathQGetZ_V( VmathQuat quat ) +{ + return vmathQGetZ(&quat); +} + +static inline void vmathQSetW_V( VmathQuat *result, float _w ) +{ + vmathQSetW(result, _w); +} + +static inline float vmathQGetW_V( VmathQuat quat ) +{ + return vmathQGetW(&quat); +} + +static inline void vmathQSetElem_V( VmathQuat *result, int idx, float value ) +{ + vmathQSetElem(result, idx, value); +} + +static inline float vmathQGetElem_V( VmathQuat quat, int idx ) +{ + return vmathQGetElem(&quat, idx); +} + +static inline VmathQuat vmathQAdd_V( VmathQuat quat0, VmathQuat quat1 ) +{ + VmathQuat result; + vmathQAdd(&result, &quat0, &quat1); + return result; +} + +static inline VmathQuat vmathQSub_V( VmathQuat quat0, VmathQuat quat1 ) +{ + VmathQuat result; + vmathQSub(&result, &quat0, &quat1); + return result; +} + +static inline VmathQuat vmathQScalarMul_V( VmathQuat quat, float scalar ) +{ + VmathQuat result; + vmathQScalarMul(&result, &quat, scalar); + return result; +} + +static inline VmathQuat vmathQScalarDiv_V( VmathQuat quat, float scalar ) +{ + VmathQuat result; + vmathQScalarDiv(&result, &quat, scalar); + return result; +} + +static inline VmathQuat vmathQNeg_V( VmathQuat quat ) +{ + VmathQuat result; + vmathQNeg(&result, &quat); + return result; +} + +static inline float vmathQDot_V( VmathQuat quat0, VmathQuat quat1 ) +{ + return vmathQDot(&quat0, &quat1); +} + +static inline float vmathQNorm_V( VmathQuat quat ) +{ + return vmathQNorm(&quat); +} + +static inline float vmathQLength_V( VmathQuat quat ) +{ + return vmathQLength(&quat); +} + +static inline VmathQuat vmathQNormalize_V( VmathQuat quat ) +{ + VmathQuat result; + vmathQNormalize(&result, &quat); + return result; +} + +static inline VmathQuat vmathQMakeRotationArc_V( VmathVector3 unitVec0, VmathVector3 unitVec1 ) +{ + VmathQuat result; + vmathQMakeRotationArc(&result, &unitVec0, &unitVec1); + return result; +} + +static inline VmathQuat vmathQMakeRotationAxis_V( float radians, VmathVector3 unitVec ) +{ + VmathQuat result; + vmathQMakeRotationAxis(&result, radians, &unitVec); + return result; +} + +static inline VmathQuat vmathQMakeRotationX_V( float radians ) +{ + VmathQuat result; + vmathQMakeRotationX(&result, radians); + return result; +} + +static inline VmathQuat vmathQMakeRotationY_V( float radians ) +{ + VmathQuat result; + vmathQMakeRotationY(&result, radians); + return result; +} + +static inline VmathQuat vmathQMakeRotationZ_V( float radians ) +{ + VmathQuat result; + vmathQMakeRotationZ(&result, radians); + return result; +} + +static inline VmathQuat vmathQMul_V( VmathQuat quat0, VmathQuat quat1 ) +{ + VmathQuat result; + vmathQMul(&result, &quat0, &quat1); + return result; +} + +static inline VmathVector3 vmathQRotate_V( VmathQuat quat, VmathVector3 vec ) +{ + VmathVector3 result; + vmathQRotate(&result, &quat, &vec); + return result; +} + +static inline VmathQuat vmathQConj_V( VmathQuat quat ) +{ + VmathQuat result; + vmathQConj(&result, &quat); + return result; +} + +static inline VmathQuat vmathQSelect_V( VmathQuat quat0, VmathQuat quat1, unsigned int select1 ) +{ + VmathQuat result; + vmathQSelect(&result, &quat0, &quat1, select1); + return result; +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathQPrint_V( VmathQuat quat ) +{ + vmathQPrint(&quat); +} + +static inline void vmathQPrints_V( VmathQuat quat, const char *name ) +{ + vmathQPrints(&quat, name); +} + +#endif + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/spu/c/quat_soa.h b/Extras/vectormathlibrary/include/vectormath/spu/c/quat_soa.h new file mode 100644 index 000000000..cd79e9d8d --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/spu/c/quat_soa.h @@ -0,0 +1,419 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_QUAT_SOA_C_H +#define _VECTORMATH_QUAT_SOA_C_H +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/*----------------------------------------------------------------------------- + * Definitions + */ +#ifndef _VECTORMATH_INTERNAL_FUNCTIONS +#define _VECTORMATH_INTERNAL_FUNCTIONS + +#endif + +static inline void vmathSoaQCopy( VmathSoaQuat *result, const VmathSoaQuat *quat ) +{ + result->x = quat->x; + result->y = quat->y; + result->z = quat->z; + result->w = quat->w; +} + +static inline void vmathSoaQMakeFromElems( VmathSoaQuat *result, vec_float4 _x, vec_float4 _y, vec_float4 _z, vec_float4 _w ) +{ + result->x = _x; + result->y = _y; + result->z = _z; + result->w = _w; +} + +static inline void vmathSoaQMakeFromV3Scalar( VmathSoaQuat *result, const VmathSoaVector3 *xyz, vec_float4 _w ) +{ + vmathSoaQSetXYZ( result, xyz ); + vmathSoaQSetW( result, _w ); +} + +static inline void vmathSoaQMakeFromV4( VmathSoaQuat *result, const VmathSoaVector4 *vec ) +{ + result->x = vec->x; + result->y = vec->y; + result->z = vec->z; + result->w = vec->w; +} + +static inline void vmathSoaQMakeFromScalar( VmathSoaQuat *result, vec_float4 scalar ) +{ + result->x = scalar; + result->y = scalar; + result->z = scalar; + result->w = scalar; +} + +static inline void vmathSoaQMakeFromAos( VmathSoaQuat *result, const VmathQuat *quat ) +{ + vec_uchar16 shuffle_xxxx = (vec_uchar16)spu_splats((int)0x00010203); + vec_uchar16 shuffle_yyyy = (vec_uchar16)spu_splats((int)0x04050607); + vec_uchar16 shuffle_zzzz = (vec_uchar16)spu_splats((int)0x08090a0b); + vec_uchar16 shuffle_wwww = (vec_uchar16)spu_splats((int)0x0c0d0e0f); + vec_float4 vec128 = quat->vec128; + result->x = spu_shuffle( vec128, vec128, shuffle_xxxx ); + result->y = spu_shuffle( vec128, vec128, shuffle_yyyy ); + result->z = spu_shuffle( vec128, vec128, shuffle_zzzz ); + result->w = spu_shuffle( vec128, vec128, shuffle_wwww ); +} + +static inline void vmathSoaQMakeFrom4Aos( VmathSoaQuat *result, const VmathQuat *quat0, const VmathQuat *quat1, const VmathQuat *quat2, const VmathQuat *quat3 ) +{ + vec_float4 tmp0, tmp1, tmp2, tmp3; + tmp0 = spu_shuffle( quat0->vec128, quat2->vec128, _VECTORMATH_SHUF_XAYB ); + tmp1 = spu_shuffle( quat1->vec128, quat3->vec128, _VECTORMATH_SHUF_XAYB ); + tmp2 = spu_shuffle( quat0->vec128, quat2->vec128, _VECTORMATH_SHUF_ZCWD ); + tmp3 = spu_shuffle( quat1->vec128, quat3->vec128, _VECTORMATH_SHUF_ZCWD ); + result->x = spu_shuffle( tmp0, tmp1, _VECTORMATH_SHUF_XAYB ); + result->y = spu_shuffle( tmp0, tmp1, _VECTORMATH_SHUF_ZCWD ); + result->z = spu_shuffle( tmp2, tmp3, _VECTORMATH_SHUF_XAYB ); + result->w = spu_shuffle( tmp2, tmp3, _VECTORMATH_SHUF_ZCWD ); +} + +static inline void vmathSoaQMakeIdentity( VmathSoaQuat *result ) +{ + vmathSoaQMakeFromElems( result, spu_splats(0.0f), spu_splats(0.0f), spu_splats(0.0f), spu_splats(1.0f) ); +} + +static inline void vmathSoaQLerp( VmathSoaQuat *result, vec_float4 t, const VmathSoaQuat *quat0, const VmathSoaQuat *quat1 ) +{ + VmathSoaQuat tmpQ_0, tmpQ_1; + vmathSoaQSub( &tmpQ_0, quat1, quat0 ); + vmathSoaQScalarMul( &tmpQ_1, &tmpQ_0, t ); + vmathSoaQAdd( result, quat0, &tmpQ_1 ); +} + +static inline void vmathSoaQSlerp( VmathSoaQuat *result, vec_float4 t, const VmathSoaQuat *unitQuat0, const VmathSoaQuat *unitQuat1 ) +{ + VmathSoaQuat start, tmpQ_0, tmpQ_1; + vec_float4 recipSinAngle, scale0, scale1, cosAngle, angle; + vec_uint4 selectMask; + cosAngle = vmathSoaQDot( unitQuat0, unitQuat1 ); + selectMask = (vec_uint4)spu_cmpgt( spu_splats(0.0f), cosAngle ); + cosAngle = spu_sel( cosAngle, negatef4( cosAngle ), selectMask ); + vmathSoaQSetX( &start, spu_sel( unitQuat0->x, negatef4( unitQuat0->x ), selectMask ) ); + vmathSoaQSetY( &start, spu_sel( unitQuat0->y, negatef4( unitQuat0->y ), selectMask ) ); + vmathSoaQSetZ( &start, spu_sel( unitQuat0->z, negatef4( unitQuat0->z ), selectMask ) ); + vmathSoaQSetW( &start, spu_sel( unitQuat0->w, negatef4( unitQuat0->w ), selectMask ) ); + selectMask = (vec_uint4)spu_cmpgt( spu_splats(_VECTORMATH_SLERP_TOL), cosAngle ); + angle = acosf4( cosAngle ); + recipSinAngle = recipf4( sinf4( angle ) ); + scale0 = spu_sel( spu_sub( spu_splats(1.0f), t ), spu_mul( sinf4( spu_mul( spu_sub( spu_splats(1.0f), t ), angle ) ), recipSinAngle ), selectMask ); + scale1 = spu_sel( t, spu_mul( sinf4( spu_mul( t, angle ) ), recipSinAngle ), selectMask ); + vmathSoaQScalarMul( &tmpQ_0, &start, scale0 ); + vmathSoaQScalarMul( &tmpQ_1, unitQuat1, scale1 ); + vmathSoaQAdd( result, &tmpQ_0, &tmpQ_1 ); +} + +static inline void vmathSoaQSquad( VmathSoaQuat *result, vec_float4 t, const VmathSoaQuat *unitQuat0, const VmathSoaQuat *unitQuat1, const VmathSoaQuat *unitQuat2, const VmathSoaQuat *unitQuat3 ) +{ + VmathSoaQuat tmp0, tmp1; + vmathSoaQSlerp( &tmp0, t, unitQuat0, unitQuat3 ); + vmathSoaQSlerp( &tmp1, t, unitQuat1, unitQuat2 ); + vmathSoaQSlerp( result, spu_mul( spu_mul( spu_splats(2.0f), t ), spu_sub( spu_splats(1.0f), t ) ), &tmp0, &tmp1 ); +} + +static inline void vmathSoaQGet4Aos( const VmathSoaQuat *quat, VmathQuat *result0, VmathQuat *result1, VmathQuat *result2, VmathQuat *result3 ) +{ + vec_float4 tmp0, tmp1, tmp2, tmp3; + tmp0 = spu_shuffle( quat->x, quat->z, _VECTORMATH_SHUF_XAYB ); + tmp1 = spu_shuffle( quat->y, quat->w, _VECTORMATH_SHUF_XAYB ); + tmp2 = spu_shuffle( quat->x, quat->z, _VECTORMATH_SHUF_ZCWD ); + tmp3 = spu_shuffle( quat->y, quat->w, _VECTORMATH_SHUF_ZCWD ); + vmathQMakeFrom128( result0, spu_shuffle( tmp0, tmp1, _VECTORMATH_SHUF_XAYB ) ); + vmathQMakeFrom128( result1, spu_shuffle( tmp0, tmp1, _VECTORMATH_SHUF_ZCWD ) ); + vmathQMakeFrom128( result2, spu_shuffle( tmp2, tmp3, _VECTORMATH_SHUF_XAYB ) ); + vmathQMakeFrom128( result3, spu_shuffle( tmp2, tmp3, _VECTORMATH_SHUF_ZCWD ) ); +} + +static inline void vmathSoaQSetXYZ( VmathSoaQuat *result, const VmathSoaVector3 *vec ) +{ + result->x = vec->x; + result->y = vec->y; + result->z = vec->z; +} + +static inline void vmathSoaQGetXYZ( VmathSoaVector3 *result, const VmathSoaQuat *quat ) +{ + vmathSoaV3MakeFromElems( result, quat->x, quat->y, quat->z ); +} + +static inline void vmathSoaQSetX( VmathSoaQuat *result, vec_float4 _x ) +{ + result->x = _x; +} + +static inline vec_float4 vmathSoaQGetX( const VmathSoaQuat *quat ) +{ + return quat->x; +} + +static inline void vmathSoaQSetY( VmathSoaQuat *result, vec_float4 _y ) +{ + result->y = _y; +} + +static inline vec_float4 vmathSoaQGetY( const VmathSoaQuat *quat ) +{ + return quat->y; +} + +static inline void vmathSoaQSetZ( VmathSoaQuat *result, vec_float4 _z ) +{ + result->z = _z; +} + +static inline vec_float4 vmathSoaQGetZ( const VmathSoaQuat *quat ) +{ + return quat->z; +} + +static inline void vmathSoaQSetW( VmathSoaQuat *result, vec_float4 _w ) +{ + result->w = _w; +} + +static inline vec_float4 vmathSoaQGetW( const VmathSoaQuat *quat ) +{ + return quat->w; +} + +static inline void vmathSoaQSetElem( VmathSoaQuat *result, int idx, vec_float4 value ) +{ + *(&result->x + idx) = value; +} + +static inline vec_float4 vmathSoaQGetElem( const VmathSoaQuat *quat, int idx ) +{ + return *(&quat->x + idx); +} + +static inline void vmathSoaQAdd( VmathSoaQuat *result, const VmathSoaQuat *quat0, const VmathSoaQuat *quat1 ) +{ + result->x = spu_add( quat0->x, quat1->x ); + result->y = spu_add( quat0->y, quat1->y ); + result->z = spu_add( quat0->z, quat1->z ); + result->w = spu_add( quat0->w, quat1->w ); +} + +static inline void vmathSoaQSub( VmathSoaQuat *result, const VmathSoaQuat *quat0, const VmathSoaQuat *quat1 ) +{ + result->x = spu_sub( quat0->x, quat1->x ); + result->y = spu_sub( quat0->y, quat1->y ); + result->z = spu_sub( quat0->z, quat1->z ); + result->w = spu_sub( quat0->w, quat1->w ); +} + +static inline void vmathSoaQScalarMul( VmathSoaQuat *result, const VmathSoaQuat *quat, vec_float4 scalar ) +{ + result->x = spu_mul( quat->x, scalar ); + result->y = spu_mul( quat->y, scalar ); + result->z = spu_mul( quat->z, scalar ); + result->w = spu_mul( quat->w, scalar ); +} + +static inline void vmathSoaQScalarDiv( VmathSoaQuat *result, const VmathSoaQuat *quat, vec_float4 scalar ) +{ + result->x = divf4( quat->x, scalar ); + result->y = divf4( quat->y, scalar ); + result->z = divf4( quat->z, scalar ); + result->w = divf4( quat->w, scalar ); +} + +static inline void vmathSoaQNeg( VmathSoaQuat *result, const VmathSoaQuat *quat ) +{ + result->x = negatef4( quat->x ); + result->y = negatef4( quat->y ); + result->z = negatef4( quat->z ); + result->w = negatef4( quat->w ); +} + +static inline vec_float4 vmathSoaQDot( const VmathSoaQuat *quat0, const VmathSoaQuat *quat1 ) +{ + vec_float4 result; + result = spu_mul( quat0->x, quat1->x ); + result = spu_add( result, spu_mul( quat0->y, quat1->y ) ); + result = spu_add( result, spu_mul( quat0->z, quat1->z ) ); + result = spu_add( result, spu_mul( quat0->w, quat1->w ) ); + return result; +} + +static inline vec_float4 vmathSoaQNorm( const VmathSoaQuat *quat ) +{ + vec_float4 result; + result = spu_mul( quat->x, quat->x ); + result = spu_add( result, spu_mul( quat->y, quat->y ) ); + result = spu_add( result, spu_mul( quat->z, quat->z ) ); + result = spu_add( result, spu_mul( quat->w, quat->w ) ); + return result; +} + +static inline vec_float4 vmathSoaQLength( const VmathSoaQuat *quat ) +{ + return sqrtf4( vmathSoaQNorm( quat ) ); +} + +static inline void vmathSoaQNormalize( VmathSoaQuat *result, const VmathSoaQuat *quat ) +{ + vec_float4 lenSqr, lenInv; + lenSqr = vmathSoaQNorm( quat ); + lenInv = rsqrtf4( lenSqr ); + result->x = spu_mul( quat->x, lenInv ); + result->y = spu_mul( quat->y, lenInv ); + result->z = spu_mul( quat->z, lenInv ); + result->w = spu_mul( quat->w, lenInv ); +} + +static inline void vmathSoaQMakeRotationArc( VmathSoaQuat *result, const VmathSoaVector3 *unitVec0, const VmathSoaVector3 *unitVec1 ) +{ + VmathSoaVector3 tmpV3_0, tmpV3_1; + vec_float4 cosHalfAngleX2, recipCosHalfAngleX2; + cosHalfAngleX2 = sqrtf4( spu_mul( spu_splats(2.0f), spu_add( spu_splats(1.0f), vmathSoaV3Dot( unitVec0, unitVec1 ) ) ) ); + recipCosHalfAngleX2 = recipf4( cosHalfAngleX2 ); + vmathSoaV3Cross( &tmpV3_0, unitVec0, unitVec1 ); + vmathSoaV3ScalarMul( &tmpV3_1, &tmpV3_0, recipCosHalfAngleX2 ); + vmathSoaQMakeFromV3Scalar( result, &tmpV3_1, spu_mul( cosHalfAngleX2, spu_splats(0.5f) ) ); +} + +static inline void vmathSoaQMakeRotationAxis( VmathSoaQuat *result, vec_float4 radians, const VmathSoaVector3 *unitVec ) +{ + VmathSoaVector3 tmpV3_0; + vec_float4 s, c, angle; + angle = spu_mul( radians, spu_splats(0.5f) ); + sincosf4( angle, &s, &c ); + vmathSoaV3ScalarMul( &tmpV3_0, unitVec, s ); + vmathSoaQMakeFromV3Scalar( result, &tmpV3_0, c ); +} + +static inline void vmathSoaQMakeRotationX( VmathSoaQuat *result, vec_float4 radians ) +{ + vec_float4 s, c, angle; + angle = spu_mul( radians, spu_splats(0.5f) ); + sincosf4( angle, &s, &c ); + vmathSoaQMakeFromElems( result, s, spu_splats(0.0f), spu_splats(0.0f), c ); +} + +static inline void vmathSoaQMakeRotationY( VmathSoaQuat *result, vec_float4 radians ) +{ + vec_float4 s, c, angle; + angle = spu_mul( radians, spu_splats(0.5f) ); + sincosf4( angle, &s, &c ); + vmathSoaQMakeFromElems( result, spu_splats(0.0f), s, spu_splats(0.0f), c ); +} + +static inline void vmathSoaQMakeRotationZ( VmathSoaQuat *result, vec_float4 radians ) +{ + vec_float4 s, c, angle; + angle = spu_mul( radians, spu_splats(0.5f) ); + sincosf4( angle, &s, &c ); + vmathSoaQMakeFromElems( result, spu_splats(0.0f), spu_splats(0.0f), s, c ); +} + +static inline void vmathSoaQMul( VmathSoaQuat *result, const VmathSoaQuat *quat0, const VmathSoaQuat *quat1 ) +{ + vec_float4 tmpX, tmpY, tmpZ, tmpW; + tmpX = spu_sub( spu_add( spu_add( spu_mul( quat0->w, quat1->x ), spu_mul( quat0->x, quat1->w ) ), spu_mul( quat0->y, quat1->z ) ), spu_mul( quat0->z, quat1->y ) ); + tmpY = spu_sub( spu_add( spu_add( spu_mul( quat0->w, quat1->y ), spu_mul( quat0->y, quat1->w ) ), spu_mul( quat0->z, quat1->x ) ), spu_mul( quat0->x, quat1->z ) ); + tmpZ = spu_sub( spu_add( spu_add( spu_mul( quat0->w, quat1->z ), spu_mul( quat0->z, quat1->w ) ), spu_mul( quat0->x, quat1->y ) ), spu_mul( quat0->y, quat1->x ) ); + tmpW = spu_sub( spu_sub( spu_sub( spu_mul( quat0->w, quat1->w ), spu_mul( quat0->x, quat1->x ) ), spu_mul( quat0->y, quat1->y ) ), spu_mul( quat0->z, quat1->z ) ); + vmathSoaQMakeFromElems( result, tmpX, tmpY, tmpZ, tmpW ); +} + +static inline void vmathSoaQRotate( VmathSoaVector3 *result, const VmathSoaQuat *quat, const VmathSoaVector3 *vec ) +{ + vec_float4 tmpX, tmpY, tmpZ, tmpW; + tmpX = spu_sub( spu_add( spu_mul( quat->w, vec->x ), spu_mul( quat->y, vec->z ) ), spu_mul( quat->z, vec->y ) ); + tmpY = spu_sub( spu_add( spu_mul( quat->w, vec->y ), spu_mul( quat->z, vec->x ) ), spu_mul( quat->x, vec->z ) ); + tmpZ = spu_sub( spu_add( spu_mul( quat->w, vec->z ), spu_mul( quat->x, vec->y ) ), spu_mul( quat->y, vec->x ) ); + tmpW = spu_add( spu_add( spu_mul( quat->x, vec->x ), spu_mul( quat->y, vec->y ) ), spu_mul( quat->z, vec->z ) ); + result->x = spu_add( spu_sub( spu_add( spu_mul( tmpW, quat->x ), spu_mul( tmpX, quat->w ) ), spu_mul( tmpY, quat->z ) ), spu_mul( tmpZ, quat->y ) ); + result->y = spu_add( spu_sub( spu_add( spu_mul( tmpW, quat->y ), spu_mul( tmpY, quat->w ) ), spu_mul( tmpZ, quat->x ) ), spu_mul( tmpX, quat->z ) ); + result->z = spu_add( spu_sub( spu_add( spu_mul( tmpW, quat->z ), spu_mul( tmpZ, quat->w ) ), spu_mul( tmpX, quat->y ) ), spu_mul( tmpY, quat->x ) ); +} + +static inline void vmathSoaQConj( VmathSoaQuat *result, const VmathSoaQuat *quat ) +{ + vmathSoaQMakeFromElems( result, negatef4( quat->x ), negatef4( quat->y ), negatef4( quat->z ), quat->w ); +} + +static inline void vmathSoaQSelect( VmathSoaQuat *result, const VmathSoaQuat *quat0, const VmathSoaQuat *quat1, vec_uint4 select1 ) +{ + result->x = spu_sel( quat0->x, quat1->x, select1 ); + result->y = spu_sel( quat0->y, quat1->y, select1 ); + result->z = spu_sel( quat0->z, quat1->z, select1 ); + result->w = spu_sel( quat0->w, quat1->w, select1 ); +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathSoaQPrint( const VmathSoaQuat *quat ) +{ + VmathQuat vec0, vec1, vec2, vec3; + vmathSoaQGet4Aos( quat, &vec0, &vec1, &vec2, &vec3 ); + printf("slot 0:\n"); + vmathQPrint( &vec0 ); + printf("slot 1:\n"); + vmathQPrint( &vec1 ); + printf("slot 2:\n"); + vmathQPrint( &vec2 ); + printf("slot 3:\n"); + vmathQPrint( &vec3 ); +} + +static inline void vmathSoaQPrints( const VmathSoaQuat *quat, const char *name ) +{ + VmathQuat vec0, vec1, vec2, vec3; + printf( "%s:\n", name ); + vmathSoaQGet4Aos( quat, &vec0, &vec1, &vec2, &vec3 ); + printf("slot 0:\n"); + vmathQPrint( &vec0 ); + printf("slot 1:\n"); + vmathQPrint( &vec1 ); + printf("slot 2:\n"); + vmathQPrint( &vec2 ); + printf("slot 3:\n"); + vmathQPrint( &vec3 ); +} + +#endif + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/spu/c/quat_soa_v.h b/Extras/vectormathlibrary/include/vectormath/spu/c/quat_soa_v.h new file mode 100644 index 000000000..601d9da92 --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/spu/c/quat_soa_v.h @@ -0,0 +1,319 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_QUAT_SOA_V_C_H +#define _VECTORMATH_QUAT_SOA_V_C_H +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/*----------------------------------------------------------------------------- + * Definitions + */ +#ifndef _VECTORMATH_INTERNAL_FUNCTIONS +#define _VECTORMATH_INTERNAL_FUNCTIONS + +#endif + +static inline VmathSoaQuat vmathSoaQMakeFromElems_V( vec_float4 _x, vec_float4 _y, vec_float4 _z, vec_float4 _w ) +{ + VmathSoaQuat result; + vmathSoaQMakeFromElems(&result, _x, _y, _z, _w); + return result; +} + +static inline VmathSoaQuat vmathSoaQMakeFromV3Scalar_V( VmathSoaVector3 xyz, vec_float4 _w ) +{ + VmathSoaQuat result; + vmathSoaQMakeFromV3Scalar(&result, &xyz, _w); + return result; +} + +static inline VmathSoaQuat vmathSoaQMakeFromV4_V( VmathSoaVector4 vec ) +{ + VmathSoaQuat result; + vmathSoaQMakeFromV4(&result, &vec); + return result; +} + +static inline VmathSoaQuat vmathSoaQMakeFromScalar_V( vec_float4 scalar ) +{ + VmathSoaQuat result; + vmathSoaQMakeFromScalar(&result, scalar); + return result; +} + +static inline VmathSoaQuat vmathSoaQMakeFromAos_V( VmathQuat quat ) +{ + VmathSoaQuat result; + vmathSoaQMakeFromAos(&result, &quat); + return result; +} + +static inline VmathSoaQuat vmathSoaQMakeFrom4Aos_V( VmathQuat quat0, VmathQuat quat1, VmathQuat quat2, VmathQuat quat3 ) +{ + VmathSoaQuat result; + vmathSoaQMakeFrom4Aos(&result, &quat0, &quat1, &quat2, &quat3); + return result; +} + +static inline VmathSoaQuat vmathSoaQMakeIdentity_V( ) +{ + VmathSoaQuat result; + vmathSoaQMakeIdentity(&result); + return result; +} + +static inline VmathSoaQuat vmathSoaQLerp_V( vec_float4 t, VmathSoaQuat quat0, VmathSoaQuat quat1 ) +{ + VmathSoaQuat result; + vmathSoaQLerp(&result, t, &quat0, &quat1); + return result; +} + +static inline VmathSoaQuat vmathSoaQSlerp_V( vec_float4 t, VmathSoaQuat unitQuat0, VmathSoaQuat unitQuat1 ) +{ + VmathSoaQuat result; + vmathSoaQSlerp(&result, t, &unitQuat0, &unitQuat1); + return result; +} + +static inline VmathSoaQuat vmathSoaQSquad_V( vec_float4 t, VmathSoaQuat unitQuat0, VmathSoaQuat unitQuat1, VmathSoaQuat unitQuat2, VmathSoaQuat unitQuat3 ) +{ + VmathSoaQuat result; + vmathSoaQSquad(&result, t, &unitQuat0, &unitQuat1, &unitQuat2, &unitQuat3); + return result; +} + +static inline void vmathSoaQGet4Aos_V( VmathSoaQuat quat, VmathQuat *result0, VmathQuat *result1, VmathQuat *result2, VmathQuat *result3 ) +{ + vmathSoaQGet4Aos(&quat, result0, result1, result2, result3); +} + +static inline void vmathSoaQSetXYZ_V( VmathSoaQuat *result, VmathSoaVector3 vec ) +{ + vmathSoaQSetXYZ(result, &vec); +} + +static inline VmathSoaVector3 vmathSoaQGetXYZ_V( VmathSoaQuat quat ) +{ + VmathSoaVector3 result; + vmathSoaQGetXYZ(&result, &quat); + return result; +} + +static inline void vmathSoaQSetX_V( VmathSoaQuat *result, vec_float4 _x ) +{ + vmathSoaQSetX(result, _x); +} + +static inline vec_float4 vmathSoaQGetX_V( VmathSoaQuat quat ) +{ + return vmathSoaQGetX(&quat); +} + +static inline void vmathSoaQSetY_V( VmathSoaQuat *result, vec_float4 _y ) +{ + vmathSoaQSetY(result, _y); +} + +static inline vec_float4 vmathSoaQGetY_V( VmathSoaQuat quat ) +{ + return vmathSoaQGetY(&quat); +} + +static inline void vmathSoaQSetZ_V( VmathSoaQuat *result, vec_float4 _z ) +{ + vmathSoaQSetZ(result, _z); +} + +static inline vec_float4 vmathSoaQGetZ_V( VmathSoaQuat quat ) +{ + return vmathSoaQGetZ(&quat); +} + +static inline void vmathSoaQSetW_V( VmathSoaQuat *result, vec_float4 _w ) +{ + vmathSoaQSetW(result, _w); +} + +static inline vec_float4 vmathSoaQGetW_V( VmathSoaQuat quat ) +{ + return vmathSoaQGetW(&quat); +} + +static inline void vmathSoaQSetElem_V( VmathSoaQuat *result, int idx, vec_float4 value ) +{ + vmathSoaQSetElem(result, idx, value); +} + +static inline vec_float4 vmathSoaQGetElem_V( VmathSoaQuat quat, int idx ) +{ + return vmathSoaQGetElem(&quat, idx); +} + +static inline VmathSoaQuat vmathSoaQAdd_V( VmathSoaQuat quat0, VmathSoaQuat quat1 ) +{ + VmathSoaQuat result; + vmathSoaQAdd(&result, &quat0, &quat1); + return result; +} + +static inline VmathSoaQuat vmathSoaQSub_V( VmathSoaQuat quat0, VmathSoaQuat quat1 ) +{ + VmathSoaQuat result; + vmathSoaQSub(&result, &quat0, &quat1); + return result; +} + +static inline VmathSoaQuat vmathSoaQScalarMul_V( VmathSoaQuat quat, vec_float4 scalar ) +{ + VmathSoaQuat result; + vmathSoaQScalarMul(&result, &quat, scalar); + return result; +} + +static inline VmathSoaQuat vmathSoaQScalarDiv_V( VmathSoaQuat quat, vec_float4 scalar ) +{ + VmathSoaQuat result; + vmathSoaQScalarDiv(&result, &quat, scalar); + return result; +} + +static inline VmathSoaQuat vmathSoaQNeg_V( VmathSoaQuat quat ) +{ + VmathSoaQuat result; + vmathSoaQNeg(&result, &quat); + return result; +} + +static inline vec_float4 vmathSoaQDot_V( VmathSoaQuat quat0, VmathSoaQuat quat1 ) +{ + return vmathSoaQDot(&quat0, &quat1); +} + +static inline vec_float4 vmathSoaQNorm_V( VmathSoaQuat quat ) +{ + return vmathSoaQNorm(&quat); +} + +static inline vec_float4 vmathSoaQLength_V( VmathSoaQuat quat ) +{ + return vmathSoaQLength(&quat); +} + +static inline VmathSoaQuat vmathSoaQNormalize_V( VmathSoaQuat quat ) +{ + VmathSoaQuat result; + vmathSoaQNormalize(&result, &quat); + return result; +} + +static inline VmathSoaQuat vmathSoaQMakeRotationArc_V( VmathSoaVector3 unitVec0, VmathSoaVector3 unitVec1 ) +{ + VmathSoaQuat result; + vmathSoaQMakeRotationArc(&result, &unitVec0, &unitVec1); + return result; +} + +static inline VmathSoaQuat vmathSoaQMakeRotationAxis_V( vec_float4 radians, VmathSoaVector3 unitVec ) +{ + VmathSoaQuat result; + vmathSoaQMakeRotationAxis(&result, radians, &unitVec); + return result; +} + +static inline VmathSoaQuat vmathSoaQMakeRotationX_V( vec_float4 radians ) +{ + VmathSoaQuat result; + vmathSoaQMakeRotationX(&result, radians); + return result; +} + +static inline VmathSoaQuat vmathSoaQMakeRotationY_V( vec_float4 radians ) +{ + VmathSoaQuat result; + vmathSoaQMakeRotationY(&result, radians); + return result; +} + +static inline VmathSoaQuat vmathSoaQMakeRotationZ_V( vec_float4 radians ) +{ + VmathSoaQuat result; + vmathSoaQMakeRotationZ(&result, radians); + return result; +} + +static inline VmathSoaQuat vmathSoaQMul_V( VmathSoaQuat quat0, VmathSoaQuat quat1 ) +{ + VmathSoaQuat result; + vmathSoaQMul(&result, &quat0, &quat1); + return result; +} + +static inline VmathSoaVector3 vmathSoaQRotate_V( VmathSoaQuat quat, VmathSoaVector3 vec ) +{ + VmathSoaVector3 result; + vmathSoaQRotate(&result, &quat, &vec); + return result; +} + +static inline VmathSoaQuat vmathSoaQConj_V( VmathSoaQuat quat ) +{ + VmathSoaQuat result; + vmathSoaQConj(&result, &quat); + return result; +} + +static inline VmathSoaQuat vmathSoaQSelect_V( VmathSoaQuat quat0, VmathSoaQuat quat1, vec_uint4 select1 ) +{ + VmathSoaQuat result; + vmathSoaQSelect(&result, &quat0, &quat1, select1); + return result; +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathSoaQPrint_V( VmathSoaQuat quat ) +{ + vmathSoaQPrint(&quat); +} + +static inline void vmathSoaQPrints_V( VmathSoaQuat quat, const char *name ) +{ + vmathSoaQPrints(&quat, name); +} + +#endif + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/spu/c/vec_aos.h b/Extras/vectormathlibrary/include/vectormath/spu/c/vec_aos.h new file mode 100644 index 000000000..715f27df7 --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/spu/c/vec_aos.h @@ -0,0 +1,1029 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_VEC_AOS_C_H +#define _VECTORMATH_VEC_AOS_C_H +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/*----------------------------------------------------------------------------- + * Constants + * for shuffles, words are labeled [x,y,z,w] [a,b,c,d] + */ +#define _VECTORMATH_SHUF_X 0x00010203 +#define _VECTORMATH_SHUF_Y 0x04050607 +#define _VECTORMATH_SHUF_Z 0x08090a0b +#define _VECTORMATH_SHUF_W 0x0c0d0e0f +#define _VECTORMATH_SHUF_A 0x10111213 +#define _VECTORMATH_SHUF_B 0x14151617 +#define _VECTORMATH_SHUF_C 0x18191a1b +#define _VECTORMATH_SHUF_D 0x1c1d1e1f +#define _VECTORMATH_SHUF_0 0x80808080 +#define _VECTORMATH_SHUF_XYZA (vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_A } +#define _VECTORMATH_SHUF_ZXYW (vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_W } +#define _VECTORMATH_SHUF_YZXW (vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_W } +#define _VECTORMATH_SHUF_WABC (vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_W, _VECTORMATH_SHUF_A, _VECTORMATH_SHUF_B, _VECTORMATH_SHUF_C } +#define _VECTORMATH_SHUF_ZWAB (vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_W, _VECTORMATH_SHUF_A, _VECTORMATH_SHUF_B } +#define _VECTORMATH_SHUF_XYZA (vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_A } +#define _VECTORMATH_SHUF_YZAB (vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_A, _VECTORMATH_SHUF_B } +#define _VECTORMATH_SHUF_ZABC (vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_A, _VECTORMATH_SHUF_B, _VECTORMATH_SHUF_C } +#define _VECTORMATH_UNIT_1000 (vec_float4){ 1.0f, 0.0f, 0.0f, 0.0f } +#define _VECTORMATH_UNIT_0100 (vec_float4){ 0.0f, 1.0f, 0.0f, 0.0f } +#define _VECTORMATH_UNIT_0010 (vec_float4){ 0.0f, 0.0f, 1.0f, 0.0f } +#define _VECTORMATH_UNIT_0001 (vec_float4){ 0.0f, 0.0f, 0.0f, 1.0f } +#define _VECTORMATH_SLERP_TOL 0.999f + +/*----------------------------------------------------------------------------- + * Definitions + */ +#ifndef _VECTORMATH_INTERNAL_FUNCTIONS +#define _VECTORMATH_INTERNAL_FUNCTIONS + +static inline vec_float4 _vmathVfDot3( vec_float4 vec0, vec_float4 vec1 ) +{ + vec_float4 result; + result = spu_mul( vec0, vec1 ); + result = spu_madd( spu_rlqwbyte( vec0, 4 ), spu_rlqwbyte( vec1, 4 ), result ); + return spu_madd( spu_rlqwbyte( vec0, 8 ), spu_rlqwbyte( vec1, 8 ), result ); +} + +static inline vec_float4 _vmathVfDot4( vec_float4 vec0, vec_float4 vec1 ) +{ + vec_float4 result; + result = spu_mul( vec0, vec1 ); + result = spu_madd( spu_rlqwbyte( vec0, 4 ), spu_rlqwbyte( vec1, 4 ), result ); + return spu_add( spu_rlqwbyte( result, 8 ), result ); +} + +static inline vec_float4 _vmathVfCross( vec_float4 vec0, vec_float4 vec1 ) +{ + vec_float4 tmp0, tmp1, tmp2, tmp3, result; + tmp0 = spu_shuffle( vec0, vec0, _VECTORMATH_SHUF_YZXW ); + tmp1 = spu_shuffle( vec1, vec1, _VECTORMATH_SHUF_ZXYW ); + tmp2 = spu_shuffle( vec0, vec0, _VECTORMATH_SHUF_ZXYW ); + tmp3 = spu_shuffle( vec1, vec1, _VECTORMATH_SHUF_YZXW ); + result = spu_mul( tmp0, tmp1 ); + result = spu_nmsub( tmp2, tmp3, result ); + return result; +} + +static inline vec_uint4 _vmathVfToHalfFloatsUnpacked(vec_float4 v) +{ + vec_int4 bexp; + vec_uint4 mant, sign, hfloat; + vec_uint4 notZero, isInf; + const vec_uint4 hfloatInf = spu_splats(0x00007c00u); + const vec_uint4 mergeMant = spu_splats(0x000003ffu); + const vec_uint4 mergeSign = spu_splats(0x00008000u); + + sign = spu_rlmask((vec_uint4)v, -16); + mant = spu_rlmask((vec_uint4)v, -13); + bexp = spu_and(spu_rlmask((vec_int4)v, -23), 0xff); + + notZero = spu_cmpgt(bexp, 112); + isInf = spu_cmpgt(bexp, 142); + + bexp = spu_add(bexp, -112); + bexp = spu_sl(bexp, 10); + + hfloat = spu_sel((vec_uint4)bexp, mant, mergeMant); + hfloat = spu_sel(spu_splats(0u), hfloat, notZero); + hfloat = spu_sel(hfloat, hfloatInf, isInf); + hfloat = spu_sel(hfloat, sign, mergeSign); + + return hfloat; +} + +static inline vec_ushort8 _vmath2VfToHalfFloats(vec_float4 u, vec_float4 v) +{ + vec_uint4 hfloat_u, hfloat_v; + const vec_uchar16 pack = (vec_uchar16){2,3,6,7,10,11,14,15,18,19,22,23,26,27,30,31}; + hfloat_u = _vmathVfToHalfFloatsUnpacked(u); + hfloat_v = _vmathVfToHalfFloatsUnpacked(v); + return (vec_ushort8)spu_shuffle(hfloat_u, hfloat_v, pack); +} + +#endif + +static inline void vmathV3Copy( VmathVector3 *result, const VmathVector3 *vec ) +{ + result->vec128 = vec->vec128; +} + +static inline void vmathV3MakeFromElems( VmathVector3 *result, float _x, float _y, float _z ) +{ + result->vec128 = (vec_float4){ _x, _y, _z, 0.0f }; +} + +static inline void vmathV3MakeFromP3( VmathVector3 *result, const VmathPoint3 *pnt ) +{ + result->vec128 = pnt->vec128; +} + +static inline void vmathV3MakeFromScalar( VmathVector3 *result, float scalar ) +{ + result->vec128 = spu_splats( scalar ); +} + +static inline void vmathV3MakeFrom128( VmathVector3 *result, vec_float4 vf4 ) +{ + result->vec128 = vf4; +} + +static inline void vmathV3MakeXAxis( VmathVector3 *result ) +{ + result->vec128 = _VECTORMATH_UNIT_1000; +} + +static inline void vmathV3MakeYAxis( VmathVector3 *result ) +{ + result->vec128 = _VECTORMATH_UNIT_0100; +} + +static inline void vmathV3MakeZAxis( VmathVector3 *result ) +{ + result->vec128 = _VECTORMATH_UNIT_0010; +} + +static inline void vmathV3Lerp( VmathVector3 *result, float t, const VmathVector3 *vec0, const VmathVector3 *vec1 ) +{ + VmathVector3 tmpV3_0, tmpV3_1; + vmathV3Sub( &tmpV3_0, vec1, vec0 ); + vmathV3ScalarMul( &tmpV3_1, &tmpV3_0, t ); + vmathV3Add( result, vec0, &tmpV3_1 ); +} + +static inline void vmathV3Slerp( VmathVector3 *result, float t, const VmathVector3 *unitVec0, const VmathVector3 *unitVec1 ) +{ + vec_float4 scales, scale0, scale1, cosAngle, angle, tttt, oneMinusT, angles, sines; + vec_uint4 selectMask; + vec_uchar16 shuffle_xxxx = (vec_uchar16)spu_splats((int)0x00010203); + vec_uchar16 shuffle_yyyy = (vec_uchar16)spu_splats((int)0x04050607); + vec_uchar16 shuffle_zzzz = (vec_uchar16)spu_splats((int)0x08090a0b); + cosAngle = _vmathVfDot3( unitVec0->vec128, unitVec1->vec128 ); + cosAngle = spu_shuffle( cosAngle, cosAngle, shuffle_xxxx ); + selectMask = (vec_uint4)spu_cmpgt( spu_splats(_VECTORMATH_SLERP_TOL), cosAngle ); + angle = acosf4( cosAngle ); + tttt = spu_splats(t); + oneMinusT = spu_sub( spu_splats(1.0f), tttt ); + angles = spu_sel( spu_splats(1.0f), oneMinusT, (vec_uint4)spu_maskb(0x0f00) ); + angles = spu_sel( angles, tttt, (vec_uint4)spu_maskb(0x00f0) ); + angles = spu_mul( angles, angle ); + sines = sinf4( angles ); + scales = divf4( sines, spu_shuffle( sines, sines, shuffle_xxxx ) ); + scale0 = spu_sel( oneMinusT, spu_shuffle( scales, scales, shuffle_yyyy ), selectMask ); + scale1 = spu_sel( tttt, spu_shuffle( scales, scales, shuffle_zzzz ), selectMask ); + result->vec128 = spu_madd( unitVec0->vec128, scale0, spu_mul( unitVec1->vec128, scale1 ) ); +} + +static inline vec_float4 vmathV3Get128( const VmathVector3 *vec ) +{ + return vec->vec128; +} + +static inline void vmathV3StoreXYZ( const VmathVector3 *vec, vec_float4 *quad ) +{ + vec_float4 dstVec = *quad; + vec_uint4 mask = (vec_uint4)spu_maskb(0x000f); + dstVec = spu_sel(vec->vec128, dstVec, mask); + *quad = dstVec; +} + +static inline void vmathV3LoadXYZArray( VmathVector3 *vec0, VmathVector3 *vec1, VmathVector3 *vec2, VmathVector3 *vec3, const vec_float4 *threeQuads ) +{ + vec_float4 xyzx, yzxy, zxyz, xyz1, xyz2, xyz3; + xyzx = threeQuads[0]; + yzxy = threeQuads[1]; + zxyz = threeQuads[2]; + xyz1 = spu_shuffle( xyzx, yzxy, _VECTORMATH_SHUF_WABC ); + xyz2 = spu_shuffle( yzxy, zxyz, _VECTORMATH_SHUF_ZWAB ); + xyz3 = spu_rlqwbyte( zxyz, 4 ); + vec0->vec128 = xyzx; + vec1->vec128 = xyz1; + vec2->vec128 = xyz2; + vec3->vec128 = xyz3; +} + +static inline void vmathV3StoreXYZArray( const VmathVector3 *vec0, const VmathVector3 *vec1, const VmathVector3 *vec2, const VmathVector3 *vec3, vec_float4 *threeQuads ) +{ + vec_float4 xyzx, yzxy, zxyz; + xyzx = spu_shuffle( vec0->vec128, vec1->vec128, _VECTORMATH_SHUF_XYZA ); + yzxy = spu_shuffle( vec1->vec128, vec2->vec128, _VECTORMATH_SHUF_YZAB ); + zxyz = spu_shuffle( vec2->vec128, vec3->vec128, _VECTORMATH_SHUF_ZABC ); + threeQuads[0] = xyzx; + threeQuads[1] = yzxy; + threeQuads[2] = zxyz; +} + +static inline void vmathV3StoreHalfFloats( const VmathVector3 *vec0, const VmathVector3 *vec1, const VmathVector3 *vec2, const VmathVector3 *vec3, const VmathVector3 *vec4, const VmathVector3 *vec5, const VmathVector3 *vec6, const VmathVector3 *vec7, vec_ushort8 *threeQuads ) +{ + vec_float4 xyz0[3]; + vec_float4 xyz1[3]; + vmathV3StoreXYZArray( vec0, vec1, vec2, vec3, xyz0 ); + vmathV3StoreXYZArray( vec4, vec5, vec6, vec7, xyz1 ); + threeQuads[0] = _vmath2VfToHalfFloats(xyz0[0], xyz0[1]); + threeQuads[1] = _vmath2VfToHalfFloats(xyz0[2], xyz1[0]); + threeQuads[2] = _vmath2VfToHalfFloats(xyz1[1], xyz1[2]); +} + +static inline void vmathV3SetX( VmathVector3 *result, float _x ) +{ + result->vec128 = spu_insert( _x, result->vec128, 0 ); +} + +static inline float vmathV3GetX( const VmathVector3 *vec ) +{ + return spu_extract( vec->vec128, 0 ); +} + +static inline void vmathV3SetY( VmathVector3 *result, float _y ) +{ + result->vec128 = spu_insert( _y, result->vec128, 1 ); +} + +static inline float vmathV3GetY( const VmathVector3 *vec ) +{ + return spu_extract( vec->vec128, 1 ); +} + +static inline void vmathV3SetZ( VmathVector3 *result, float _z ) +{ + result->vec128 = spu_insert( _z, result->vec128, 2 ); +} + +static inline float vmathV3GetZ( const VmathVector3 *vec ) +{ + return spu_extract( vec->vec128, 2 ); +} + +static inline void vmathV3SetElem( VmathVector3 *result, int idx, float value ) +{ + result->vec128 = spu_insert( value, result->vec128, idx ); +} + +static inline float vmathV3GetElem( const VmathVector3 *vec, int idx ) +{ + return spu_extract( vec->vec128, idx ); +} + +static inline void vmathV3Add( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1 ) +{ + result->vec128 = spu_add( vec0->vec128, vec1->vec128 ); +} + +static inline void vmathV3Sub( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1 ) +{ + result->vec128 = spu_sub( vec0->vec128, vec1->vec128 ); +} + +static inline void vmathV3AddP3( VmathPoint3 *result, const VmathVector3 *vec, const VmathPoint3 *pnt1 ) +{ + result->vec128 = spu_add( vec->vec128, pnt1->vec128 ); +} + +static inline void vmathV3ScalarMul( VmathVector3 *result, const VmathVector3 *vec, float scalar ) +{ + result->vec128 = spu_mul( vec->vec128, spu_splats(scalar) ); +} + +static inline void vmathV3ScalarDiv( VmathVector3 *result, const VmathVector3 *vec, float scalar ) +{ + result->vec128 = divf4( vec->vec128, spu_splats(scalar) ); +} + +static inline void vmathV3Neg( VmathVector3 *result, const VmathVector3 *vec ) +{ + result->vec128 = negatef4( vec->vec128 ); +} + +static inline void vmathV3MulPerElem( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1 ) +{ + result->vec128 = spu_mul( vec0->vec128, vec1->vec128 ); +} + +static inline void vmathV3DivPerElem( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1 ) +{ + result->vec128 = divf4( vec0->vec128, vec1->vec128 ); +} + +static inline void vmathV3RecipPerElem( VmathVector3 *result, const VmathVector3 *vec ) +{ + result->vec128 = recipf4( vec->vec128 ); +} + +static inline void vmathV3SqrtPerElem( VmathVector3 *result, const VmathVector3 *vec ) +{ + result->vec128 = sqrtf4( vec->vec128 ); +} + +static inline void vmathV3RsqrtPerElem( VmathVector3 *result, const VmathVector3 *vec ) +{ + result->vec128 = rsqrtf4( vec->vec128 ); +} + +static inline void vmathV3AbsPerElem( VmathVector3 *result, const VmathVector3 *vec ) +{ + result->vec128 = fabsf4( vec->vec128 ); +} + +static inline void vmathV3CopySignPerElem( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1 ) +{ + result->vec128 = copysignf4( vec0->vec128, vec1->vec128 ); +} + +static inline void vmathV3MaxPerElem( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1 ) +{ + result->vec128 = fmaxf4( vec0->vec128, vec1->vec128 ); +} + +static inline float vmathV3MaxElem( const VmathVector3 *vec ) +{ + vec_float4 result; + result = fmaxf4( spu_promote( spu_extract( vec->vec128, 1 ), 0 ), vec->vec128 ); + result = fmaxf4( spu_promote( spu_extract( vec->vec128, 2 ), 0 ), result ); + return spu_extract( result, 0 ); +} + +static inline void vmathV3MinPerElem( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1 ) +{ + result->vec128 = fminf4( vec0->vec128, vec1->vec128 ); +} + +static inline float vmathV3MinElem( const VmathVector3 *vec ) +{ + vec_float4 result; + result = fminf4( spu_promote( spu_extract( vec->vec128, 1 ), 0 ), vec->vec128 ); + result = fminf4( spu_promote( spu_extract( vec->vec128, 2 ), 0 ), result ); + return spu_extract( result, 0 ); +} + +static inline float vmathV3Sum( const VmathVector3 *vec ) +{ + return + spu_extract( vec->vec128, 0 ) + + spu_extract( vec->vec128, 1 ) + + spu_extract( vec->vec128, 2 ); +} + +static inline float vmathV3Dot( const VmathVector3 *vec0, const VmathVector3 *vec1 ) +{ + return spu_extract( _vmathVfDot3( vec0->vec128, vec1->vec128 ), 0 ); +} + +static inline float vmathV3LengthSqr( const VmathVector3 *vec ) +{ + return spu_extract( _vmathVfDot3( vec->vec128, vec->vec128 ), 0 ); +} + +static inline float vmathV3Length( const VmathVector3 *vec ) +{ + return sqrtf( vmathV3LengthSqr( vec ) ); +} + +static inline void vmathV3Normalize( VmathVector3 *result, const VmathVector3 *vec ) +{ + vec_float4 dot = _vmathVfDot3( vec->vec128, vec->vec128 ); + dot = spu_shuffle( dot, dot, (vec_uchar16)spu_splats(0x00010203) ); + result->vec128 = spu_mul( vec->vec128, rsqrtf4( dot ) ); +} + +static inline void vmathV3Cross( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1 ) +{ + result->vec128 = _vmathVfCross( vec0->vec128, vec1->vec128 ); +} + +static inline void vmathV3Select( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1, unsigned int select1 ) +{ + result->vec128 = spu_sel( vec0->vec128, vec1->vec128, spu_splats( (unsigned int)-(select1 > 0) ) ); +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathV3Print( const VmathVector3 *vec ) +{ + union { vec_float4 v; float s[4]; } tmp; + tmp.v = vec->vec128; + printf( "( %f %f %f )\n", tmp.s[0], tmp.s[1], tmp.s[2] ); +} + +static inline void vmathV3Prints( const VmathVector3 *vec, const char *name ) +{ + union { vec_float4 v; float s[4]; } tmp; + tmp.v = vec->vec128; + printf( "%s: ( %f %f %f )\n", name, tmp.s[0], tmp.s[1], tmp.s[2] ); +} + +#endif + +static inline void vmathV4Copy( VmathVector4 *result, const VmathVector4 *vec ) +{ + result->vec128 = vec->vec128; +} + +static inline void vmathV4MakeFromElems( VmathVector4 *result, float _x, float _y, float _z, float _w ) +{ + result->vec128 = (vec_float4){ _x, _y, _z, _w }; +} + +static inline void vmathV4MakeFromV3Scalar( VmathVector4 *result, const VmathVector3 *xyz, float _w ) +{ + result->vec128 = spu_shuffle( xyz->vec128, spu_promote( _w, 0 ), _VECTORMATH_SHUF_XYZA ); +} + +static inline void vmathV4MakeFromV3( VmathVector4 *result, const VmathVector3 *vec ) +{ + result->vec128 = spu_sel( vec->vec128, spu_splats(0.0f), (vec_uint4)spu_maskb(0x000f) ); +} + +static inline void vmathV4MakeFromP3( VmathVector4 *result, const VmathPoint3 *pnt ) +{ + result->vec128 = spu_sel( pnt->vec128, spu_splats(1.0f), (vec_uint4)spu_maskb(0x000f) ); +} + +static inline void vmathV4MakeFromQ( VmathVector4 *result, const VmathQuat *quat ) +{ + result->vec128 = quat->vec128; +} + +static inline void vmathV4MakeFromScalar( VmathVector4 *result, float scalar ) +{ + result->vec128 = spu_splats( scalar ); +} + +static inline void vmathV4MakeFrom128( VmathVector4 *result, vec_float4 vf4 ) +{ + result->vec128 = vf4; +} + +static inline void vmathV4MakeXAxis( VmathVector4 *result ) +{ + result->vec128 = _VECTORMATH_UNIT_1000; +} + +static inline void vmathV4MakeYAxis( VmathVector4 *result ) +{ + result->vec128 = _VECTORMATH_UNIT_0100; +} + +static inline void vmathV4MakeZAxis( VmathVector4 *result ) +{ + result->vec128 = _VECTORMATH_UNIT_0010; +} + +static inline void vmathV4MakeWAxis( VmathVector4 *result ) +{ + result->vec128 = _VECTORMATH_UNIT_0001; +} + +static inline void vmathV4Lerp( VmathVector4 *result, float t, const VmathVector4 *vec0, const VmathVector4 *vec1 ) +{ + VmathVector4 tmpV4_0, tmpV4_1; + vmathV4Sub( &tmpV4_0, vec1, vec0 ); + vmathV4ScalarMul( &tmpV4_1, &tmpV4_0, t ); + vmathV4Add( result, vec0, &tmpV4_1 ); +} + +static inline void vmathV4Slerp( VmathVector4 *result, float t, const VmathVector4 *unitVec0, const VmathVector4 *unitVec1 ) +{ + vec_float4 scales, scale0, scale1, cosAngle, angle, tttt, oneMinusT, angles, sines; + vec_uint4 selectMask; + vec_uchar16 shuffle_xxxx = (vec_uchar16)spu_splats((int)0x00010203); + vec_uchar16 shuffle_yyyy = (vec_uchar16)spu_splats((int)0x04050607); + vec_uchar16 shuffle_zzzz = (vec_uchar16)spu_splats((int)0x08090a0b); + cosAngle = _vmathVfDot4( unitVec0->vec128, unitVec1->vec128 ); + cosAngle = spu_shuffle( cosAngle, cosAngle, shuffle_xxxx ); + selectMask = (vec_uint4)spu_cmpgt( spu_splats(_VECTORMATH_SLERP_TOL), cosAngle ); + angle = acosf4( cosAngle ); + tttt = spu_splats(t); + oneMinusT = spu_sub( spu_splats(1.0f), tttt ); + angles = spu_sel( spu_splats(1.0f), oneMinusT, (vec_uint4)spu_maskb(0x0f00) ); + angles = spu_sel( angles, tttt, (vec_uint4)spu_maskb(0x00f0) ); + angles = spu_mul( angles, angle ); + sines = sinf4( angles ); + scales = divf4( sines, spu_shuffle( sines, sines, shuffle_xxxx ) ); + scale0 = spu_sel( oneMinusT, spu_shuffle( scales, scales, shuffle_yyyy ), selectMask ); + scale1 = spu_sel( tttt, spu_shuffle( scales, scales, shuffle_zzzz ), selectMask ); + result->vec128 = spu_madd( unitVec0->vec128, scale0, spu_mul( unitVec1->vec128, scale1 ) ); +} + +static inline vec_float4 vmathV4Get128( const VmathVector4 *vec ) +{ + return vec->vec128; +} + +static inline void vmathV4StoreHalfFloats( const VmathVector4 *vec0, const VmathVector4 *vec1, const VmathVector4 *vec2, const VmathVector4 *vec3, vec_ushort8 *twoQuads ) +{ + twoQuads[0] = _vmath2VfToHalfFloats(vec0->vec128, vec1->vec128); + twoQuads[1] = _vmath2VfToHalfFloats(vec2->vec128, vec3->vec128); +} + +static inline void vmathV4SetXYZ( VmathVector4 *result, const VmathVector3 *vec ) +{ + result->vec128 = spu_sel( vec->vec128, result->vec128, (vec_uint4)spu_maskb(0x000f) ); +} + +static inline void vmathV4GetXYZ( VmathVector3 *result, const VmathVector4 *vec ) +{ + result->vec128 = vec->vec128; +} + +static inline void vmathV4SetX( VmathVector4 *result, float _x ) +{ + result->vec128 = spu_insert( _x, result->vec128, 0 ); +} + +static inline float vmathV4GetX( const VmathVector4 *vec ) +{ + return spu_extract( vec->vec128, 0 ); +} + +static inline void vmathV4SetY( VmathVector4 *result, float _y ) +{ + result->vec128 = spu_insert( _y, result->vec128, 1 ); +} + +static inline float vmathV4GetY( const VmathVector4 *vec ) +{ + return spu_extract( vec->vec128, 1 ); +} + +static inline void vmathV4SetZ( VmathVector4 *result, float _z ) +{ + result->vec128 = spu_insert( _z, result->vec128, 2 ); +} + +static inline float vmathV4GetZ( const VmathVector4 *vec ) +{ + return spu_extract( vec->vec128, 2 ); +} + +static inline void vmathV4SetW( VmathVector4 *result, float _w ) +{ + result->vec128 = spu_insert( _w, result->vec128, 3 ); +} + +static inline float vmathV4GetW( const VmathVector4 *vec ) +{ + return spu_extract( vec->vec128, 3 ); +} + +static inline void vmathV4SetElem( VmathVector4 *result, int idx, float value ) +{ + result->vec128 = spu_insert( value, result->vec128, idx ); +} + +static inline float vmathV4GetElem( const VmathVector4 *vec, int idx ) +{ + return spu_extract( vec->vec128, idx ); +} + +static inline void vmathV4Add( VmathVector4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1 ) +{ + result->vec128 = spu_add( vec0->vec128, vec1->vec128 ); +} + +static inline void vmathV4Sub( VmathVector4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1 ) +{ + result->vec128 = spu_sub( vec0->vec128, vec1->vec128 ); +} + +static inline void vmathV4ScalarMul( VmathVector4 *result, const VmathVector4 *vec, float scalar ) +{ + result->vec128 = spu_mul( vec->vec128, spu_splats(scalar) ); +} + +static inline void vmathV4ScalarDiv( VmathVector4 *result, const VmathVector4 *vec, float scalar ) +{ + result->vec128 = divf4( vec->vec128, spu_splats(scalar) ); +} + +static inline void vmathV4Neg( VmathVector4 *result, const VmathVector4 *vec ) +{ + result->vec128 = negatef4( vec->vec128 ); +} + +static inline void vmathV4MulPerElem( VmathVector4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1 ) +{ + result->vec128 = spu_mul( vec0->vec128, vec1->vec128 ); +} + +static inline void vmathV4DivPerElem( VmathVector4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1 ) +{ + result->vec128 = divf4( vec0->vec128, vec1->vec128 ); +} + +static inline void vmathV4RecipPerElem( VmathVector4 *result, const VmathVector4 *vec ) +{ + result->vec128 = recipf4( vec->vec128 ); +} + +static inline void vmathV4SqrtPerElem( VmathVector4 *result, const VmathVector4 *vec ) +{ + result->vec128 = sqrtf4( vec->vec128 ); +} + +static inline void vmathV4RsqrtPerElem( VmathVector4 *result, const VmathVector4 *vec ) +{ + result->vec128 = rsqrtf4( vec->vec128 ); +} + +static inline void vmathV4AbsPerElem( VmathVector4 *result, const VmathVector4 *vec ) +{ + result->vec128 = fabsf4( vec->vec128 ); +} + +static inline void vmathV4CopySignPerElem( VmathVector4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1 ) +{ + result->vec128 = copysignf4( vec0->vec128, vec1->vec128 ); +} + +static inline void vmathV4MaxPerElem( VmathVector4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1 ) +{ + result->vec128 = fmaxf4( vec0->vec128, vec1->vec128 ); +} + +static inline float vmathV4MaxElem( const VmathVector4 *vec ) +{ + vec_float4 result; + result = fmaxf4( spu_promote( spu_extract( vec->vec128, 1 ), 0 ), vec->vec128 ); + result = fmaxf4( spu_promote( spu_extract( vec->vec128, 2 ), 0 ), result ); + result = fmaxf4( spu_promote( spu_extract( vec->vec128, 3 ), 0 ), result ); + return spu_extract( result, 0 ); +} + +static inline void vmathV4MinPerElem( VmathVector4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1 ) +{ + result->vec128 = fminf4( vec0->vec128, vec1->vec128 ); +} + +static inline float vmathV4MinElem( const VmathVector4 *vec ) +{ + vec_float4 result; + result = fminf4( spu_promote( spu_extract( vec->vec128, 1 ), 0 ), vec->vec128 ); + result = fminf4( spu_promote( spu_extract( vec->vec128, 2 ), 0 ), result ); + result = fminf4( spu_promote( spu_extract( vec->vec128, 3 ), 0 ), result ); + return spu_extract( result, 0 ); +} + +static inline float vmathV4Sum( const VmathVector4 *vec ) +{ + return + spu_extract( vec->vec128, 0 ) + + spu_extract( vec->vec128, 1 ) + + spu_extract( vec->vec128, 2 ) + + spu_extract( vec->vec128, 3 ); +} + +static inline float vmathV4Dot( const VmathVector4 *vec0, const VmathVector4 *vec1 ) +{ + return spu_extract( _vmathVfDot4( vec0->vec128, vec1->vec128 ), 0 ); +} + +static inline float vmathV4LengthSqr( const VmathVector4 *vec ) +{ + return spu_extract( _vmathVfDot4( vec->vec128, vec->vec128 ), 0 ); +} + +static inline float vmathV4Length( const VmathVector4 *vec ) +{ + return sqrtf( vmathV4LengthSqr( vec ) ); +} + +static inline void vmathV4Normalize( VmathVector4 *result, const VmathVector4 *vec ) +{ + vec_float4 dot = _vmathVfDot4( vec->vec128, vec->vec128 ); + result->vec128 = spu_mul( vec->vec128, rsqrtf4( dot ) ); +} + +static inline void vmathV4Select( VmathVector4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1, unsigned int select1 ) +{ + result->vec128 = spu_sel( vec0->vec128, vec1->vec128, spu_splats( (unsigned int)-(select1 > 0) ) ); +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathV4Print( const VmathVector4 *vec ) +{ + union { vec_float4 v; float s[4]; } tmp; + tmp.v = vec->vec128; + printf( "( %f %f %f %f )\n", tmp.s[0], tmp.s[1], tmp.s[2], tmp.s[3] ); +} + +static inline void vmathV4Prints( const VmathVector4 *vec, const char *name ) +{ + union { vec_float4 v; float s[4]; } tmp; + tmp.v = vec->vec128; + printf( "%s: ( %f %f %f %f )\n", name, tmp.s[0], tmp.s[1], tmp.s[2], tmp.s[3] ); +} + +#endif + +static inline void vmathP3Copy( VmathPoint3 *result, const VmathPoint3 *pnt ) +{ + result->vec128 = pnt->vec128; +} + +static inline void vmathP3MakeFromElems( VmathPoint3 *result, float _x, float _y, float _z ) +{ + result->vec128 = (vec_float4){ _x, _y, _z, 0.0f }; +} + +static inline void vmathP3MakeFromV3( VmathPoint3 *result, const VmathVector3 *vec ) +{ + result->vec128 = vec->vec128; +} + +static inline void vmathP3MakeFromScalar( VmathPoint3 *result, float scalar ) +{ + result->vec128 = spu_splats( scalar ); +} + +static inline void vmathP3MakeFrom128( VmathPoint3 *result, vec_float4 vf4 ) +{ + result->vec128 = vf4; +} + +static inline void vmathP3Lerp( VmathPoint3 *result, float t, const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ) +{ + VmathVector3 tmpV3_0, tmpV3_1; + vmathP3Sub( &tmpV3_0, pnt1, pnt0 ); + vmathV3ScalarMul( &tmpV3_1, &tmpV3_0, t ); + vmathP3AddV3( result, pnt0, &tmpV3_1 ); +} + +static inline vec_float4 vmathP3Get128( const VmathPoint3 *pnt ) +{ + return pnt->vec128; +} + +static inline void vmathP3StoreXYZ( const VmathPoint3 *pnt, vec_float4 *quad ) +{ + vec_float4 dstVec = *quad; + vec_uint4 mask = (vec_uint4)spu_maskb(0x000f); + dstVec = spu_sel(pnt->vec128, dstVec, mask); + *quad = dstVec; +} + +static inline void vmathP3LoadXYZArray( VmathPoint3 *pnt0, VmathPoint3 *pnt1, VmathPoint3 *pnt2, VmathPoint3 *pnt3, const vec_float4 *threeQuads ) +{ + vec_float4 xyzx, yzxy, zxyz, xyz1, xyz2, xyz3; + xyzx = threeQuads[0]; + yzxy = threeQuads[1]; + zxyz = threeQuads[2]; + xyz1 = spu_shuffle( xyzx, yzxy, _VECTORMATH_SHUF_WABC ); + xyz2 = spu_shuffle( yzxy, zxyz, _VECTORMATH_SHUF_ZWAB ); + xyz3 = spu_rlqwbyte( zxyz, 4 ); + pnt0->vec128 = xyzx; + pnt1->vec128 = xyz1; + pnt2->vec128 = xyz2; + pnt3->vec128 = xyz3; +} + +static inline void vmathP3StoreXYZArray( const VmathPoint3 *pnt0, const VmathPoint3 *pnt1, const VmathPoint3 *pnt2, const VmathPoint3 *pnt3, vec_float4 *threeQuads ) +{ + vec_float4 xyzx, yzxy, zxyz; + xyzx = spu_shuffle( pnt0->vec128, pnt1->vec128, _VECTORMATH_SHUF_XYZA ); + yzxy = spu_shuffle( pnt1->vec128, pnt2->vec128, _VECTORMATH_SHUF_YZAB ); + zxyz = spu_shuffle( pnt2->vec128, pnt3->vec128, _VECTORMATH_SHUF_ZABC ); + threeQuads[0] = xyzx; + threeQuads[1] = yzxy; + threeQuads[2] = zxyz; +} + +static inline void vmathP3StoreHalfFloats( const VmathPoint3 *pnt0, const VmathPoint3 *pnt1, const VmathPoint3 *pnt2, const VmathPoint3 *pnt3, const VmathPoint3 *pnt4, const VmathPoint3 *pnt5, const VmathPoint3 *pnt6, const VmathPoint3 *pnt7, vec_ushort8 *threeQuads ) +{ + vec_float4 xyz0[3]; + vec_float4 xyz1[3]; + vmathP3StoreXYZArray( pnt0, pnt1, pnt2, pnt3, xyz0 ); + vmathP3StoreXYZArray( pnt4, pnt5, pnt6, pnt7, xyz1 ); + threeQuads[0] = _vmath2VfToHalfFloats(xyz0[0], xyz0[1]); + threeQuads[1] = _vmath2VfToHalfFloats(xyz0[2], xyz1[0]); + threeQuads[2] = _vmath2VfToHalfFloats(xyz1[1], xyz1[2]); +} + +static inline void vmathP3SetX( VmathPoint3 *result, float _x ) +{ + result->vec128 = spu_insert( _x, result->vec128, 0 ); +} + +static inline float vmathP3GetX( const VmathPoint3 *pnt ) +{ + return spu_extract( pnt->vec128, 0 ); +} + +static inline void vmathP3SetY( VmathPoint3 *result, float _y ) +{ + result->vec128 = spu_insert( _y, result->vec128, 1 ); +} + +static inline float vmathP3GetY( const VmathPoint3 *pnt ) +{ + return spu_extract( pnt->vec128, 1 ); +} + +static inline void vmathP3SetZ( VmathPoint3 *result, float _z ) +{ + result->vec128 = spu_insert( _z, result->vec128, 2 ); +} + +static inline float vmathP3GetZ( const VmathPoint3 *pnt ) +{ + return spu_extract( pnt->vec128, 2 ); +} + +static inline void vmathP3SetElem( VmathPoint3 *result, int idx, float value ) +{ + result->vec128 = spu_insert( value, result->vec128, idx ); +} + +static inline float vmathP3GetElem( const VmathPoint3 *pnt, int idx ) +{ + return spu_extract( pnt->vec128, idx ); +} + +static inline void vmathP3Sub( VmathVector3 *result, const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ) +{ + result->vec128 = spu_sub( pnt0->vec128, pnt1->vec128 ); +} + +static inline void vmathP3AddV3( VmathPoint3 *result, const VmathPoint3 *pnt, const VmathVector3 *vec1 ) +{ + result->vec128 = spu_add( pnt->vec128, vec1->vec128 ); +} + +static inline void vmathP3SubV3( VmathPoint3 *result, const VmathPoint3 *pnt, const VmathVector3 *vec1 ) +{ + result->vec128 = spu_sub( pnt->vec128, vec1->vec128 ); +} + +static inline void vmathP3MulPerElem( VmathPoint3 *result, const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ) +{ + result->vec128 = spu_mul( pnt0->vec128, pnt1->vec128 ); +} + +static inline void vmathP3DivPerElem( VmathPoint3 *result, const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ) +{ + result->vec128 = divf4( pnt0->vec128, pnt1->vec128 ); +} + +static inline void vmathP3RecipPerElem( VmathPoint3 *result, const VmathPoint3 *pnt ) +{ + result->vec128 = recipf4( pnt->vec128 ); +} + +static inline void vmathP3SqrtPerElem( VmathPoint3 *result, const VmathPoint3 *pnt ) +{ + result->vec128 = sqrtf4( pnt->vec128 ); +} + +static inline void vmathP3RsqrtPerElem( VmathPoint3 *result, const VmathPoint3 *pnt ) +{ + result->vec128 = rsqrtf4( pnt->vec128 ); +} + +static inline void vmathP3AbsPerElem( VmathPoint3 *result, const VmathPoint3 *pnt ) +{ + result->vec128 = fabsf4( pnt->vec128 ); +} + +static inline void vmathP3CopySignPerElem( VmathPoint3 *result, const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ) +{ + result->vec128 = copysignf4( pnt0->vec128, pnt1->vec128 ); +} + +static inline void vmathP3MaxPerElem( VmathPoint3 *result, const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ) +{ + result->vec128 = fmaxf4( pnt0->vec128, pnt1->vec128 ); +} + +static inline float vmathP3MaxElem( const VmathPoint3 *pnt ) +{ + vec_float4 result; + result = fmaxf4( spu_promote( spu_extract( pnt->vec128, 1 ), 0 ), pnt->vec128 ); + result = fmaxf4( spu_promote( spu_extract( pnt->vec128, 2 ), 0 ), result ); + return spu_extract( result, 0 ); +} + +static inline void vmathP3MinPerElem( VmathPoint3 *result, const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ) +{ + result->vec128 = fminf4( pnt0->vec128, pnt1->vec128 ); +} + +static inline float vmathP3MinElem( const VmathPoint3 *pnt ) +{ + vec_float4 result; + result = fminf4( spu_promote( spu_extract( pnt->vec128, 1 ), 0 ), pnt->vec128 ); + result = fminf4( spu_promote( spu_extract( pnt->vec128, 2 ), 0 ), result ); + return spu_extract( result, 0 ); +} + +static inline float vmathP3Sum( const VmathPoint3 *pnt ) +{ + return + spu_extract( pnt->vec128, 0 ) + + spu_extract( pnt->vec128, 1 ) + + spu_extract( pnt->vec128, 2 ); +} + +static inline void vmathP3Scale( VmathPoint3 *result, const VmathPoint3 *pnt, float scaleVal ) +{ + VmathPoint3 tmpP3_0; + vmathP3MakeFromScalar( &tmpP3_0, scaleVal ); + vmathP3MulPerElem( result, pnt, &tmpP3_0 ); +} + +static inline void vmathP3NonUniformScale( VmathPoint3 *result, const VmathPoint3 *pnt, const VmathVector3 *scaleVec ) +{ + VmathPoint3 tmpP3_0; + vmathP3MakeFromV3( &tmpP3_0, scaleVec ); + vmathP3MulPerElem( result, pnt, &tmpP3_0 ); +} + +static inline float vmathP3Projection( const VmathPoint3 *pnt, const VmathVector3 *unitVec ) +{ + return spu_extract( _vmathVfDot3( pnt->vec128, unitVec->vec128 ), 0 ); +} + +static inline float vmathP3DistSqrFromOrigin( const VmathPoint3 *pnt ) +{ + VmathVector3 tmpV3_0; + vmathV3MakeFromP3( &tmpV3_0, pnt ); + return vmathV3LengthSqr( &tmpV3_0 ); +} + +static inline float vmathP3DistFromOrigin( const VmathPoint3 *pnt ) +{ + VmathVector3 tmpV3_0; + vmathV3MakeFromP3( &tmpV3_0, pnt ); + return vmathV3Length( &tmpV3_0 ); +} + +static inline float vmathP3DistSqr( const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ) +{ + VmathVector3 tmpV3_0; + vmathP3Sub( &tmpV3_0, pnt1, pnt0 ); + return vmathV3LengthSqr( &tmpV3_0 ); +} + +static inline float vmathP3Dist( const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ) +{ + VmathVector3 tmpV3_0; + vmathP3Sub( &tmpV3_0, pnt1, pnt0 ); + return vmathV3Length( &tmpV3_0 ); +} + +static inline void vmathP3Select( VmathPoint3 *result, const VmathPoint3 *pnt0, const VmathPoint3 *pnt1, unsigned int select1 ) +{ + result->vec128 = spu_sel( pnt0->vec128, pnt1->vec128, spu_splats( (unsigned int)-(select1 > 0) ) ); +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathP3Print( const VmathPoint3 *pnt ) +{ + union { vec_float4 v; float s[4]; } tmp; + tmp.v = pnt->vec128; + printf( "( %f %f %f )\n", tmp.s[0], tmp.s[1], tmp.s[2] ); +} + +static inline void vmathP3Prints( const VmathPoint3 *pnt, const char *name ) +{ + union { vec_float4 v; float s[4]; } tmp; + tmp.v = pnt->vec128; + printf( "%s: ( %f %f %f )\n", name, tmp.s[0], tmp.s[1], tmp.s[2] ); +} + +#endif + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/spu/c/vec_aos_v.h b/Extras/vectormathlibrary/include/vectormath/spu/c/vec_aos_v.h new file mode 100644 index 000000000..7cf0fa9cc --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/spu/c/vec_aos_v.h @@ -0,0 +1,951 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_VEC_AOS_V_C_H +#define _VECTORMATH_VEC_AOS_V_C_H +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/*----------------------------------------------------------------------------- + * Constants + * for shuffles, words are labeled [x,y,z,w] [a,b,c,d] + */ +#define _VECTORMATH_SHUF_X 0x00010203 +#define _VECTORMATH_SHUF_Y 0x04050607 +#define _VECTORMATH_SHUF_Z 0x08090a0b +#define _VECTORMATH_SHUF_W 0x0c0d0e0f +#define _VECTORMATH_SHUF_A 0x10111213 +#define _VECTORMATH_SHUF_B 0x14151617 +#define _VECTORMATH_SHUF_C 0x18191a1b +#define _VECTORMATH_SHUF_D 0x1c1d1e1f +#define _VECTORMATH_SHUF_0 0x80808080 +#define _VECTORMATH_SHUF_XYZA (vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_A } +#define _VECTORMATH_SHUF_ZXYW (vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_W } +#define _VECTORMATH_SHUF_YZXW (vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_W } +#define _VECTORMATH_SHUF_WABC (vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_W, _VECTORMATH_SHUF_A, _VECTORMATH_SHUF_B, _VECTORMATH_SHUF_C } +#define _VECTORMATH_SHUF_ZWAB (vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_W, _VECTORMATH_SHUF_A, _VECTORMATH_SHUF_B } +#define _VECTORMATH_SHUF_XYZA (vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_A } +#define _VECTORMATH_SHUF_YZAB (vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_A, _VECTORMATH_SHUF_B } +#define _VECTORMATH_SHUF_ZABC (vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_A, _VECTORMATH_SHUF_B, _VECTORMATH_SHUF_C } +#define _VECTORMATH_UNIT_1000 (vec_float4){ 1.0f, 0.0f, 0.0f, 0.0f } +#define _VECTORMATH_UNIT_0100 (vec_float4){ 0.0f, 1.0f, 0.0f, 0.0f } +#define _VECTORMATH_UNIT_0010 (vec_float4){ 0.0f, 0.0f, 1.0f, 0.0f } +#define _VECTORMATH_UNIT_0001 (vec_float4){ 0.0f, 0.0f, 0.0f, 1.0f } +#define _VECTORMATH_SLERP_TOL 0.999f + +/*----------------------------------------------------------------------------- + * Definitions + */ +#ifndef _VECTORMATH_INTERNAL_FUNCTIONS +#define _VECTORMATH_INTERNAL_FUNCTIONS + +#endif + +static inline VmathVector3 vmathV3MakeFromElems_V( float _x, float _y, float _z ) +{ + VmathVector3 result; + vmathV3MakeFromElems(&result, _x, _y, _z); + return result; +} + +static inline VmathVector3 vmathV3MakeFromP3_V( VmathPoint3 pnt ) +{ + VmathVector3 result; + vmathV3MakeFromP3(&result, &pnt); + return result; +} + +static inline VmathVector3 vmathV3MakeFromScalar_V( float scalar ) +{ + VmathVector3 result; + vmathV3MakeFromScalar(&result, scalar); + return result; +} + +static inline VmathVector3 vmathV3MakeFrom128_V( vec_float4 vf4 ) +{ + VmathVector3 result; + vmathV3MakeFrom128(&result, vf4); + return result; +} + +static inline VmathVector3 vmathV3MakeXAxis_V( ) +{ + VmathVector3 result; + vmathV3MakeXAxis(&result); + return result; +} + +static inline VmathVector3 vmathV3MakeYAxis_V( ) +{ + VmathVector3 result; + vmathV3MakeYAxis(&result); + return result; +} + +static inline VmathVector3 vmathV3MakeZAxis_V( ) +{ + VmathVector3 result; + vmathV3MakeZAxis(&result); + return result; +} + +static inline VmathVector3 vmathV3Lerp_V( float t, VmathVector3 vec0, VmathVector3 vec1 ) +{ + VmathVector3 result; + vmathV3Lerp(&result, t, &vec0, &vec1); + return result; +} + +static inline VmathVector3 vmathV3Slerp_V( float t, VmathVector3 unitVec0, VmathVector3 unitVec1 ) +{ + VmathVector3 result; + vmathV3Slerp(&result, t, &unitVec0, &unitVec1); + return result; +} + +static inline vec_float4 vmathV3Get128_V( VmathVector3 vec ) +{ + return vmathV3Get128(&vec); +} + +static inline void vmathV3StoreXYZ_V( VmathVector3 vec, vec_float4 *quad ) +{ + vmathV3StoreXYZ(&vec, quad); +} + +static inline void vmathV3LoadXYZArray_V( VmathVector3 *vec0, VmathVector3 *vec1, VmathVector3 *vec2, VmathVector3 *vec3, const vec_float4 *threeQuads ) +{ + vmathV3LoadXYZArray(vec0, vec1, vec2, vec3, threeQuads); +} + +static inline void vmathV3StoreXYZArray_V( VmathVector3 vec0, VmathVector3 vec1, VmathVector3 vec2, VmathVector3 vec3, vec_float4 *threeQuads ) +{ + vmathV3StoreXYZArray(&vec0, &vec1, &vec2, &vec3, threeQuads); +} + +static inline void vmathV3StoreHalfFloats_V( VmathVector3 vec0, VmathVector3 vec1, VmathVector3 vec2, VmathVector3 vec3, VmathVector3 vec4, VmathVector3 vec5, VmathVector3 vec6, VmathVector3 vec7, vec_ushort8 *threeQuads ) +{ + vmathV3StoreHalfFloats(&vec0, &vec1, &vec2, &vec3, &vec4, &vec5, &vec6, &vec7, threeQuads); +} + +static inline void vmathV3SetX_V( VmathVector3 *result, float _x ) +{ + vmathV3SetX(result, _x); +} + +static inline float vmathV3GetX_V( VmathVector3 vec ) +{ + return vmathV3GetX(&vec); +} + +static inline void vmathV3SetY_V( VmathVector3 *result, float _y ) +{ + vmathV3SetY(result, _y); +} + +static inline float vmathV3GetY_V( VmathVector3 vec ) +{ + return vmathV3GetY(&vec); +} + +static inline void vmathV3SetZ_V( VmathVector3 *result, float _z ) +{ + vmathV3SetZ(result, _z); +} + +static inline float vmathV3GetZ_V( VmathVector3 vec ) +{ + return vmathV3GetZ(&vec); +} + +static inline void vmathV3SetElem_V( VmathVector3 *result, int idx, float value ) +{ + vmathV3SetElem(result, idx, value); +} + +static inline float vmathV3GetElem_V( VmathVector3 vec, int idx ) +{ + return vmathV3GetElem(&vec, idx); +} + +static inline VmathVector3 vmathV3Add_V( VmathVector3 vec0, VmathVector3 vec1 ) +{ + VmathVector3 result; + vmathV3Add(&result, &vec0, &vec1); + return result; +} + +static inline VmathVector3 vmathV3Sub_V( VmathVector3 vec0, VmathVector3 vec1 ) +{ + VmathVector3 result; + vmathV3Sub(&result, &vec0, &vec1); + return result; +} + +static inline VmathPoint3 vmathV3AddP3_V( VmathVector3 vec, VmathPoint3 pnt1 ) +{ + VmathPoint3 result; + vmathV3AddP3(&result, &vec, &pnt1); + return result; +} + +static inline VmathVector3 vmathV3ScalarMul_V( VmathVector3 vec, float scalar ) +{ + VmathVector3 result; + vmathV3ScalarMul(&result, &vec, scalar); + return result; +} + +static inline VmathVector3 vmathV3ScalarDiv_V( VmathVector3 vec, float scalar ) +{ + VmathVector3 result; + vmathV3ScalarDiv(&result, &vec, scalar); + return result; +} + +static inline VmathVector3 vmathV3Neg_V( VmathVector3 vec ) +{ + VmathVector3 result; + vmathV3Neg(&result, &vec); + return result; +} + +static inline VmathVector3 vmathV3MulPerElem_V( VmathVector3 vec0, VmathVector3 vec1 ) +{ + VmathVector3 result; + vmathV3MulPerElem(&result, &vec0, &vec1); + return result; +} + +static inline VmathVector3 vmathV3DivPerElem_V( VmathVector3 vec0, VmathVector3 vec1 ) +{ + VmathVector3 result; + vmathV3DivPerElem(&result, &vec0, &vec1); + return result; +} + +static inline VmathVector3 vmathV3RecipPerElem_V( VmathVector3 vec ) +{ + VmathVector3 result; + vmathV3RecipPerElem(&result, &vec); + return result; +} + +static inline VmathVector3 vmathV3SqrtPerElem_V( VmathVector3 vec ) +{ + VmathVector3 result; + vmathV3SqrtPerElem(&result, &vec); + return result; +} + +static inline VmathVector3 vmathV3RsqrtPerElem_V( VmathVector3 vec ) +{ + VmathVector3 result; + vmathV3RsqrtPerElem(&result, &vec); + return result; +} + +static inline VmathVector3 vmathV3AbsPerElem_V( VmathVector3 vec ) +{ + VmathVector3 result; + vmathV3AbsPerElem(&result, &vec); + return result; +} + +static inline VmathVector3 vmathV3CopySignPerElem_V( VmathVector3 vec0, VmathVector3 vec1 ) +{ + VmathVector3 result; + vmathV3CopySignPerElem(&result, &vec0, &vec1); + return result; +} + +static inline VmathVector3 vmathV3MaxPerElem_V( VmathVector3 vec0, VmathVector3 vec1 ) +{ + VmathVector3 result; + vmathV3MaxPerElem(&result, &vec0, &vec1); + return result; +} + +static inline float vmathV3MaxElem_V( VmathVector3 vec ) +{ + return vmathV3MaxElem(&vec); +} + +static inline VmathVector3 vmathV3MinPerElem_V( VmathVector3 vec0, VmathVector3 vec1 ) +{ + VmathVector3 result; + vmathV3MinPerElem(&result, &vec0, &vec1); + return result; +} + +static inline float vmathV3MinElem_V( VmathVector3 vec ) +{ + return vmathV3MinElem(&vec); +} + +static inline float vmathV3Sum_V( VmathVector3 vec ) +{ + return vmathV3Sum(&vec); +} + +static inline float vmathV3Dot_V( VmathVector3 vec0, VmathVector3 vec1 ) +{ + return vmathV3Dot(&vec0, &vec1); +} + +static inline float vmathV3LengthSqr_V( VmathVector3 vec ) +{ + return vmathV3LengthSqr(&vec); +} + +static inline float vmathV3Length_V( VmathVector3 vec ) +{ + return vmathV3Length(&vec); +} + +static inline VmathVector3 vmathV3Normalize_V( VmathVector3 vec ) +{ + VmathVector3 result; + vmathV3Normalize(&result, &vec); + return result; +} + +static inline VmathVector3 vmathV3Cross_V( VmathVector3 vec0, VmathVector3 vec1 ) +{ + VmathVector3 result; + vmathV3Cross(&result, &vec0, &vec1); + return result; +} + +static inline VmathVector3 vmathV3Select_V( VmathVector3 vec0, VmathVector3 vec1, unsigned int select1 ) +{ + VmathVector3 result; + vmathV3Select(&result, &vec0, &vec1, select1); + return result; +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathV3Print_V( VmathVector3 vec ) +{ + vmathV3Print(&vec); +} + +static inline void vmathV3Prints_V( VmathVector3 vec, const char *name ) +{ + vmathV3Prints(&vec, name); +} + +#endif + +static inline VmathVector4 vmathV4MakeFromElems_V( float _x, float _y, float _z, float _w ) +{ + VmathVector4 result; + vmathV4MakeFromElems(&result, _x, _y, _z, _w); + return result; +} + +static inline VmathVector4 vmathV4MakeFromV3Scalar_V( VmathVector3 xyz, float _w ) +{ + VmathVector4 result; + vmathV4MakeFromV3Scalar(&result, &xyz, _w); + return result; +} + +static inline VmathVector4 vmathV4MakeFromV3_V( VmathVector3 vec ) +{ + VmathVector4 result; + vmathV4MakeFromV3(&result, &vec); + return result; +} + +static inline VmathVector4 vmathV4MakeFromP3_V( VmathPoint3 pnt ) +{ + VmathVector4 result; + vmathV4MakeFromP3(&result, &pnt); + return result; +} + +static inline VmathVector4 vmathV4MakeFromQ_V( VmathQuat quat ) +{ + VmathVector4 result; + vmathV4MakeFromQ(&result, &quat); + return result; +} + +static inline VmathVector4 vmathV4MakeFromScalar_V( float scalar ) +{ + VmathVector4 result; + vmathV4MakeFromScalar(&result, scalar); + return result; +} + +static inline VmathVector4 vmathV4MakeFrom128_V( vec_float4 vf4 ) +{ + VmathVector4 result; + vmathV4MakeFrom128(&result, vf4); + return result; +} + +static inline VmathVector4 vmathV4MakeXAxis_V( ) +{ + VmathVector4 result; + vmathV4MakeXAxis(&result); + return result; +} + +static inline VmathVector4 vmathV4MakeYAxis_V( ) +{ + VmathVector4 result; + vmathV4MakeYAxis(&result); + return result; +} + +static inline VmathVector4 vmathV4MakeZAxis_V( ) +{ + VmathVector4 result; + vmathV4MakeZAxis(&result); + return result; +} + +static inline VmathVector4 vmathV4MakeWAxis_V( ) +{ + VmathVector4 result; + vmathV4MakeWAxis(&result); + return result; +} + +static inline VmathVector4 vmathV4Lerp_V( float t, VmathVector4 vec0, VmathVector4 vec1 ) +{ + VmathVector4 result; + vmathV4Lerp(&result, t, &vec0, &vec1); + return result; +} + +static inline VmathVector4 vmathV4Slerp_V( float t, VmathVector4 unitVec0, VmathVector4 unitVec1 ) +{ + VmathVector4 result; + vmathV4Slerp(&result, t, &unitVec0, &unitVec1); + return result; +} + +static inline vec_float4 vmathV4Get128_V( VmathVector4 vec ) +{ + return vmathV4Get128(&vec); +} + +static inline void vmathV4StoreHalfFloats_V( VmathVector4 vec0, VmathVector4 vec1, VmathVector4 vec2, VmathVector4 vec3, vec_ushort8 *twoQuads ) +{ + vmathV4StoreHalfFloats(&vec0, &vec1, &vec2, &vec3, twoQuads); +} + +static inline void vmathV4SetXYZ_V( VmathVector4 *result, VmathVector3 vec ) +{ + vmathV4SetXYZ(result, &vec); +} + +static inline VmathVector3 vmathV4GetXYZ_V( VmathVector4 vec ) +{ + VmathVector3 result; + vmathV4GetXYZ(&result, &vec); + return result; +} + +static inline void vmathV4SetX_V( VmathVector4 *result, float _x ) +{ + vmathV4SetX(result, _x); +} + +static inline float vmathV4GetX_V( VmathVector4 vec ) +{ + return vmathV4GetX(&vec); +} + +static inline void vmathV4SetY_V( VmathVector4 *result, float _y ) +{ + vmathV4SetY(result, _y); +} + +static inline float vmathV4GetY_V( VmathVector4 vec ) +{ + return vmathV4GetY(&vec); +} + +static inline void vmathV4SetZ_V( VmathVector4 *result, float _z ) +{ + vmathV4SetZ(result, _z); +} + +static inline float vmathV4GetZ_V( VmathVector4 vec ) +{ + return vmathV4GetZ(&vec); +} + +static inline void vmathV4SetW_V( VmathVector4 *result, float _w ) +{ + vmathV4SetW(result, _w); +} + +static inline float vmathV4GetW_V( VmathVector4 vec ) +{ + return vmathV4GetW(&vec); +} + +static inline void vmathV4SetElem_V( VmathVector4 *result, int idx, float value ) +{ + vmathV4SetElem(result, idx, value); +} + +static inline float vmathV4GetElem_V( VmathVector4 vec, int idx ) +{ + return vmathV4GetElem(&vec, idx); +} + +static inline VmathVector4 vmathV4Add_V( VmathVector4 vec0, VmathVector4 vec1 ) +{ + VmathVector4 result; + vmathV4Add(&result, &vec0, &vec1); + return result; +} + +static inline VmathVector4 vmathV4Sub_V( VmathVector4 vec0, VmathVector4 vec1 ) +{ + VmathVector4 result; + vmathV4Sub(&result, &vec0, &vec1); + return result; +} + +static inline VmathVector4 vmathV4ScalarMul_V( VmathVector4 vec, float scalar ) +{ + VmathVector4 result; + vmathV4ScalarMul(&result, &vec, scalar); + return result; +} + +static inline VmathVector4 vmathV4ScalarDiv_V( VmathVector4 vec, float scalar ) +{ + VmathVector4 result; + vmathV4ScalarDiv(&result, &vec, scalar); + return result; +} + +static inline VmathVector4 vmathV4Neg_V( VmathVector4 vec ) +{ + VmathVector4 result; + vmathV4Neg(&result, &vec); + return result; +} + +static inline VmathVector4 vmathV4MulPerElem_V( VmathVector4 vec0, VmathVector4 vec1 ) +{ + VmathVector4 result; + vmathV4MulPerElem(&result, &vec0, &vec1); + return result; +} + +static inline VmathVector4 vmathV4DivPerElem_V( VmathVector4 vec0, VmathVector4 vec1 ) +{ + VmathVector4 result; + vmathV4DivPerElem(&result, &vec0, &vec1); + return result; +} + +static inline VmathVector4 vmathV4RecipPerElem_V( VmathVector4 vec ) +{ + VmathVector4 result; + vmathV4RecipPerElem(&result, &vec); + return result; +} + +static inline VmathVector4 vmathV4SqrtPerElem_V( VmathVector4 vec ) +{ + VmathVector4 result; + vmathV4SqrtPerElem(&result, &vec); + return result; +} + +static inline VmathVector4 vmathV4RsqrtPerElem_V( VmathVector4 vec ) +{ + VmathVector4 result; + vmathV4RsqrtPerElem(&result, &vec); + return result; +} + +static inline VmathVector4 vmathV4AbsPerElem_V( VmathVector4 vec ) +{ + VmathVector4 result; + vmathV4AbsPerElem(&result, &vec); + return result; +} + +static inline VmathVector4 vmathV4CopySignPerElem_V( VmathVector4 vec0, VmathVector4 vec1 ) +{ + VmathVector4 result; + vmathV4CopySignPerElem(&result, &vec0, &vec1); + return result; +} + +static inline VmathVector4 vmathV4MaxPerElem_V( VmathVector4 vec0, VmathVector4 vec1 ) +{ + VmathVector4 result; + vmathV4MaxPerElem(&result, &vec0, &vec1); + return result; +} + +static inline float vmathV4MaxElem_V( VmathVector4 vec ) +{ + return vmathV4MaxElem(&vec); +} + +static inline VmathVector4 vmathV4MinPerElem_V( VmathVector4 vec0, VmathVector4 vec1 ) +{ + VmathVector4 result; + vmathV4MinPerElem(&result, &vec0, &vec1); + return result; +} + +static inline float vmathV4MinElem_V( VmathVector4 vec ) +{ + return vmathV4MinElem(&vec); +} + +static inline float vmathV4Sum_V( VmathVector4 vec ) +{ + return vmathV4Sum(&vec); +} + +static inline float vmathV4Dot_V( VmathVector4 vec0, VmathVector4 vec1 ) +{ + return vmathV4Dot(&vec0, &vec1); +} + +static inline float vmathV4LengthSqr_V( VmathVector4 vec ) +{ + return vmathV4LengthSqr(&vec); +} + +static inline float vmathV4Length_V( VmathVector4 vec ) +{ + return vmathV4Length(&vec); +} + +static inline VmathVector4 vmathV4Normalize_V( VmathVector4 vec ) +{ + VmathVector4 result; + vmathV4Normalize(&result, &vec); + return result; +} + +static inline VmathVector4 vmathV4Select_V( VmathVector4 vec0, VmathVector4 vec1, unsigned int select1 ) +{ + VmathVector4 result; + vmathV4Select(&result, &vec0, &vec1, select1); + return result; +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathV4Print_V( VmathVector4 vec ) +{ + vmathV4Print(&vec); +} + +static inline void vmathV4Prints_V( VmathVector4 vec, const char *name ) +{ + vmathV4Prints(&vec, name); +} + +#endif + +static inline VmathPoint3 vmathP3MakeFromElems_V( float _x, float _y, float _z ) +{ + VmathPoint3 result; + vmathP3MakeFromElems(&result, _x, _y, _z); + return result; +} + +static inline VmathPoint3 vmathP3MakeFromV3_V( VmathVector3 vec ) +{ + VmathPoint3 result; + vmathP3MakeFromV3(&result, &vec); + return result; +} + +static inline VmathPoint3 vmathP3MakeFromScalar_V( float scalar ) +{ + VmathPoint3 result; + vmathP3MakeFromScalar(&result, scalar); + return result; +} + +static inline VmathPoint3 vmathP3MakeFrom128_V( vec_float4 vf4 ) +{ + VmathPoint3 result; + vmathP3MakeFrom128(&result, vf4); + return result; +} + +static inline VmathPoint3 vmathP3Lerp_V( float t, VmathPoint3 pnt0, VmathPoint3 pnt1 ) +{ + VmathPoint3 result; + vmathP3Lerp(&result, t, &pnt0, &pnt1); + return result; +} + +static inline vec_float4 vmathP3Get128_V( VmathPoint3 pnt ) +{ + return vmathP3Get128(&pnt); +} + +static inline void vmathP3StoreXYZ_V( VmathPoint3 pnt, vec_float4 *quad ) +{ + vmathP3StoreXYZ(&pnt, quad); +} + +static inline void vmathP3LoadXYZArray_V( VmathPoint3 *pnt0, VmathPoint3 *pnt1, VmathPoint3 *pnt2, VmathPoint3 *pnt3, const vec_float4 *threeQuads ) +{ + vmathP3LoadXYZArray(pnt0, pnt1, pnt2, pnt3, threeQuads); +} + +static inline void vmathP3StoreXYZArray_V( VmathPoint3 pnt0, VmathPoint3 pnt1, VmathPoint3 pnt2, VmathPoint3 pnt3, vec_float4 *threeQuads ) +{ + vmathP3StoreXYZArray(&pnt0, &pnt1, &pnt2, &pnt3, threeQuads); +} + +static inline void vmathP3StoreHalfFloats_V( VmathPoint3 pnt0, VmathPoint3 pnt1, VmathPoint3 pnt2, VmathPoint3 pnt3, VmathPoint3 pnt4, VmathPoint3 pnt5, VmathPoint3 pnt6, VmathPoint3 pnt7, vec_ushort8 *threeQuads ) +{ + vmathP3StoreHalfFloats(&pnt0, &pnt1, &pnt2, &pnt3, &pnt4, &pnt5, &pnt6, &pnt7, threeQuads); +} + +static inline void vmathP3SetX_V( VmathPoint3 *result, float _x ) +{ + vmathP3SetX(result, _x); +} + +static inline float vmathP3GetX_V( VmathPoint3 pnt ) +{ + return vmathP3GetX(&pnt); +} + +static inline void vmathP3SetY_V( VmathPoint3 *result, float _y ) +{ + vmathP3SetY(result, _y); +} + +static inline float vmathP3GetY_V( VmathPoint3 pnt ) +{ + return vmathP3GetY(&pnt); +} + +static inline void vmathP3SetZ_V( VmathPoint3 *result, float _z ) +{ + vmathP3SetZ(result, _z); +} + +static inline float vmathP3GetZ_V( VmathPoint3 pnt ) +{ + return vmathP3GetZ(&pnt); +} + +static inline void vmathP3SetElem_V( VmathPoint3 *result, int idx, float value ) +{ + vmathP3SetElem(result, idx, value); +} + +static inline float vmathP3GetElem_V( VmathPoint3 pnt, int idx ) +{ + return vmathP3GetElem(&pnt, idx); +} + +static inline VmathVector3 vmathP3Sub_V( VmathPoint3 pnt0, VmathPoint3 pnt1 ) +{ + VmathVector3 result; + vmathP3Sub(&result, &pnt0, &pnt1); + return result; +} + +static inline VmathPoint3 vmathP3AddV3_V( VmathPoint3 pnt, VmathVector3 vec1 ) +{ + VmathPoint3 result; + vmathP3AddV3(&result, &pnt, &vec1); + return result; +} + +static inline VmathPoint3 vmathP3SubV3_V( VmathPoint3 pnt, VmathVector3 vec1 ) +{ + VmathPoint3 result; + vmathP3SubV3(&result, &pnt, &vec1); + return result; +} + +static inline VmathPoint3 vmathP3MulPerElem_V( VmathPoint3 pnt0, VmathPoint3 pnt1 ) +{ + VmathPoint3 result; + vmathP3MulPerElem(&result, &pnt0, &pnt1); + return result; +} + +static inline VmathPoint3 vmathP3DivPerElem_V( VmathPoint3 pnt0, VmathPoint3 pnt1 ) +{ + VmathPoint3 result; + vmathP3DivPerElem(&result, &pnt0, &pnt1); + return result; +} + +static inline VmathPoint3 vmathP3RecipPerElem_V( VmathPoint3 pnt ) +{ + VmathPoint3 result; + vmathP3RecipPerElem(&result, &pnt); + return result; +} + +static inline VmathPoint3 vmathP3SqrtPerElem_V( VmathPoint3 pnt ) +{ + VmathPoint3 result; + vmathP3SqrtPerElem(&result, &pnt); + return result; +} + +static inline VmathPoint3 vmathP3RsqrtPerElem_V( VmathPoint3 pnt ) +{ + VmathPoint3 result; + vmathP3RsqrtPerElem(&result, &pnt); + return result; +} + +static inline VmathPoint3 vmathP3AbsPerElem_V( VmathPoint3 pnt ) +{ + VmathPoint3 result; + vmathP3AbsPerElem(&result, &pnt); + return result; +} + +static inline VmathPoint3 vmathP3CopySignPerElem_V( VmathPoint3 pnt0, VmathPoint3 pnt1 ) +{ + VmathPoint3 result; + vmathP3CopySignPerElem(&result, &pnt0, &pnt1); + return result; +} + +static inline VmathPoint3 vmathP3MaxPerElem_V( VmathPoint3 pnt0, VmathPoint3 pnt1 ) +{ + VmathPoint3 result; + vmathP3MaxPerElem(&result, &pnt0, &pnt1); + return result; +} + +static inline float vmathP3MaxElem_V( VmathPoint3 pnt ) +{ + return vmathP3MaxElem(&pnt); +} + +static inline VmathPoint3 vmathP3MinPerElem_V( VmathPoint3 pnt0, VmathPoint3 pnt1 ) +{ + VmathPoint3 result; + vmathP3MinPerElem(&result, &pnt0, &pnt1); + return result; +} + +static inline float vmathP3MinElem_V( VmathPoint3 pnt ) +{ + return vmathP3MinElem(&pnt); +} + +static inline float vmathP3Sum_V( VmathPoint3 pnt ) +{ + return vmathP3Sum(&pnt); +} + +static inline VmathPoint3 vmathP3Scale_V( VmathPoint3 pnt, float scaleVal ) +{ + VmathPoint3 result; + vmathP3Scale(&result, &pnt, scaleVal); + return result; +} + +static inline VmathPoint3 vmathP3NonUniformScale_V( VmathPoint3 pnt, VmathVector3 scaleVec ) +{ + VmathPoint3 result; + vmathP3NonUniformScale(&result, &pnt, &scaleVec); + return result; +} + +static inline float vmathP3Projection_V( VmathPoint3 pnt, VmathVector3 unitVec ) +{ + return vmathP3Projection(&pnt, &unitVec); +} + +static inline float vmathP3DistSqrFromOrigin_V( VmathPoint3 pnt ) +{ + return vmathP3DistSqrFromOrigin(&pnt); +} + +static inline float vmathP3DistFromOrigin_V( VmathPoint3 pnt ) +{ + return vmathP3DistFromOrigin(&pnt); +} + +static inline float vmathP3DistSqr_V( VmathPoint3 pnt0, VmathPoint3 pnt1 ) +{ + return vmathP3DistSqr(&pnt0, &pnt1); +} + +static inline float vmathP3Dist_V( VmathPoint3 pnt0, VmathPoint3 pnt1 ) +{ + return vmathP3Dist(&pnt0, &pnt1); +} + +static inline VmathPoint3 vmathP3Select_V( VmathPoint3 pnt0, VmathPoint3 pnt1, unsigned int select1 ) +{ + VmathPoint3 result; + vmathP3Select(&result, &pnt0, &pnt1, select1); + return result; +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathP3Print_V( VmathPoint3 pnt ) +{ + vmathP3Print(&pnt); +} + +static inline void vmathP3Prints_V( VmathPoint3 pnt, const char *name ) +{ + vmathP3Prints(&pnt, name); +} + +#endif + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/spu/c/vec_soa.h b/Extras/vectormathlibrary/include/vectormath/spu/c/vec_soa.h new file mode 100644 index 000000000..608b38562 --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/spu/c/vec_soa.h @@ -0,0 +1,1237 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_VEC_SOA_C_H +#define _VECTORMATH_VEC_SOA_C_H +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/*----------------------------------------------------------------------------- + * Constants + * for shuffles, words are labeled [x,y,z,w] [a,b,c,d] + */ +#define _VECTORMATH_SHUF_X 0x00010203 +#define _VECTORMATH_SHUF_Y 0x04050607 +#define _VECTORMATH_SHUF_Z 0x08090a0b +#define _VECTORMATH_SHUF_W 0x0c0d0e0f +#define _VECTORMATH_SHUF_A 0x10111213 +#define _VECTORMATH_SHUF_B 0x14151617 +#define _VECTORMATH_SHUF_C 0x18191a1b +#define _VECTORMATH_SHUF_D 0x1c1d1e1f +#define _VECTORMATH_SHUF_0 0x80808080 +#define _VECTORMATH_SHUF_XAYB ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_A, _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_B }) +#define _VECTORMATH_SHUF_ZCWD ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_C, _VECTORMATH_SHUF_W, _VECTORMATH_SHUF_D }) +#define _VECTORMATH_SHUF_ZBW0 ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_B, _VECTORMATH_SHUF_W, _VECTORMATH_SHUF_0 }) +#define _VECTORMATH_SHUF_XCY0 ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_C, _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_0 }) +#define _VECTORMATH_SHUF_ZDW0 ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_D, _VECTORMATH_SHUF_W, _VECTORMATH_SHUF_0 }) +#define _VECTORMATH_SHUF_XAZC ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_A, _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_C }) +#define _VECTORMATH_SHUF_ZDXB ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_D, _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_B }) +#define _VECTORMATH_SHUF_YBWD ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_B, _VECTORMATH_SHUF_W, _VECTORMATH_SHUF_D }) +#define _VECTORMATH_SHUF_XDZB ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_D, _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_B }) +#define _VECTORMATH_SHUF_YAWC ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_A, _VECTORMATH_SHUF_W, _VECTORMATH_SHUF_C }) +#define _VECTORMATH_SHUF_ZBXD ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_B, _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_D }) +#define _VECTORMATH_SHUF_XYCD ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_C, _VECTORMATH_SHUF_D }) +#define _VECTORMATH_SLERP_TOL 0.999f + +/*----------------------------------------------------------------------------- + * Definitions + */ +#ifndef _VECTORMATH_INTERNAL_FUNCTIONS +#define _VECTORMATH_INTERNAL_FUNCTIONS + +#endif + +static inline void vmathSoaV3Copy( VmathSoaVector3 *result, const VmathSoaVector3 *vec ) +{ + result->x = vec->x; + result->y = vec->y; + result->z = vec->z; +} + +static inline void vmathSoaV3MakeFromElems( VmathSoaVector3 *result, vec_float4 _x, vec_float4 _y, vec_float4 _z ) +{ + result->x = _x; + result->y = _y; + result->z = _z; +} + +static inline void vmathSoaV3MakeFromP3( VmathSoaVector3 *result, const VmathSoaPoint3 *pnt ) +{ + result->x = pnt->x; + result->y = pnt->y; + result->z = pnt->z; +} + +static inline void vmathSoaV3MakeFromScalar( VmathSoaVector3 *result, vec_float4 scalar ) +{ + result->x = scalar; + result->y = scalar; + result->z = scalar; +} + +static inline void vmathSoaV3MakeFromAos( VmathSoaVector3 *result, const VmathVector3 *vec ) +{ + vec_uchar16 shuffle_xxxx = (vec_uchar16)spu_splats((int)0x00010203); + vec_uchar16 shuffle_yyyy = (vec_uchar16)spu_splats((int)0x04050607); + vec_uchar16 shuffle_zzzz = (vec_uchar16)spu_splats((int)0x08090a0b); + vec_float4 vec128 = vec->vec128; + result->x = spu_shuffle( vec128, vec128, shuffle_xxxx ); + result->y = spu_shuffle( vec128, vec128, shuffle_yyyy ); + result->z = spu_shuffle( vec128, vec128, shuffle_zzzz ); +} + +static inline void vmathSoaV3MakeFrom4Aos( VmathSoaVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1, const VmathVector3 *vec2, const VmathVector3 *vec3 ) +{ + vec_float4 tmp0, tmp1, tmp2, tmp3; + tmp0 = spu_shuffle( vec0->vec128, vec2->vec128, _VECTORMATH_SHUF_XAYB ); + tmp1 = spu_shuffle( vec1->vec128, vec3->vec128, _VECTORMATH_SHUF_XAYB ); + tmp2 = spu_shuffle( vec0->vec128, vec2->vec128, _VECTORMATH_SHUF_ZCWD ); + tmp3 = spu_shuffle( vec1->vec128, vec3->vec128, _VECTORMATH_SHUF_ZCWD ); + result->x = spu_shuffle( tmp0, tmp1, _VECTORMATH_SHUF_XAYB ); + result->y = spu_shuffle( tmp0, tmp1, _VECTORMATH_SHUF_ZCWD ); + result->z = spu_shuffle( tmp2, tmp3, _VECTORMATH_SHUF_XAYB ); +} + +static inline void vmathSoaV3MakeXAxis( VmathSoaVector3 *result ) +{ + vmathSoaV3MakeFromElems( result, spu_splats(1.0f), spu_splats(0.0f), spu_splats(0.0f) ); +} + +static inline void vmathSoaV3MakeYAxis( VmathSoaVector3 *result ) +{ + vmathSoaV3MakeFromElems( result, spu_splats(0.0f), spu_splats(1.0f), spu_splats(0.0f) ); +} + +static inline void vmathSoaV3MakeZAxis( VmathSoaVector3 *result ) +{ + vmathSoaV3MakeFromElems( result, spu_splats(0.0f), spu_splats(0.0f), spu_splats(1.0f) ); +} + +static inline void vmathSoaV3Lerp( VmathSoaVector3 *result, vec_float4 t, const VmathSoaVector3 *vec0, const VmathSoaVector3 *vec1 ) +{ + VmathSoaVector3 tmpV3_0, tmpV3_1; + vmathSoaV3Sub( &tmpV3_0, vec1, vec0 ); + vmathSoaV3ScalarMul( &tmpV3_1, &tmpV3_0, t ); + vmathSoaV3Add( result, vec0, &tmpV3_1 ); +} + +static inline void vmathSoaV3Slerp( VmathSoaVector3 *result, vec_float4 t, const VmathSoaVector3 *unitVec0, const VmathSoaVector3 *unitVec1 ) +{ + VmathSoaVector3 tmpV3_0, tmpV3_1; + vec_float4 recipSinAngle, scale0, scale1, cosAngle, angle; + vec_uint4 selectMask; + cosAngle = vmathSoaV3Dot( unitVec0, unitVec1 ); + selectMask = (vec_uint4)spu_cmpgt( spu_splats(_VECTORMATH_SLERP_TOL), cosAngle ); + angle = acosf4( cosAngle ); + recipSinAngle = recipf4( sinf4( angle ) ); + scale0 = spu_sel( spu_sub( spu_splats(1.0f), t ), spu_mul( sinf4( spu_mul( spu_sub( spu_splats(1.0f), t ), angle ) ), recipSinAngle ), selectMask ); + scale1 = spu_sel( t, spu_mul( sinf4( spu_mul( t, angle ) ), recipSinAngle ), selectMask ); + vmathSoaV3ScalarMul( &tmpV3_0, unitVec0, scale0 ); + vmathSoaV3ScalarMul( &tmpV3_1, unitVec1, scale1 ); + vmathSoaV3Add( result, &tmpV3_0, &tmpV3_1 ); +} + +static inline void vmathSoaV3Get4Aos( const VmathSoaVector3 *vec, VmathVector3 *result0, VmathVector3 *result1, VmathVector3 *result2, VmathVector3 *result3 ) +{ + vec_float4 tmp0, tmp1; + tmp0 = spu_shuffle( vec->x, vec->z, _VECTORMATH_SHUF_XAYB ); + tmp1 = spu_shuffle( vec->x, vec->z, _VECTORMATH_SHUF_ZCWD ); + vmathV3MakeFrom128( result0, spu_shuffle( tmp0, vec->y, _VECTORMATH_SHUF_XAYB ) ); + vmathV3MakeFrom128( result1, spu_shuffle( tmp0, vec->y, _VECTORMATH_SHUF_ZBW0 ) ); + vmathV3MakeFrom128( result2, spu_shuffle( tmp1, vec->y, _VECTORMATH_SHUF_XCY0 ) ); + vmathV3MakeFrom128( result3, spu_shuffle( tmp1, vec->y, _VECTORMATH_SHUF_ZDW0 ) ); +} + +static inline void vmathSoaV3LoadXYZArray( VmathSoaVector3 *vec, const vec_float4 *threeQuads ) +{ + vec_float4 xyxy, yzyz, zxzx, xyzx, yzxy, zxyz; + xyzx = threeQuads[0]; + yzxy = threeQuads[1]; + zxyz = threeQuads[2]; + xyxy = spu_shuffle( xyzx, yzxy, _VECTORMATH_SHUF_XYCD ); + zxzx = spu_shuffle( zxyz, xyzx, _VECTORMATH_SHUF_XYCD ); + yzyz = spu_shuffle( yzxy, zxyz, _VECTORMATH_SHUF_XYCD ); + vmathSoaV3SetX( vec, spu_shuffle( xyxy, zxzx, _VECTORMATH_SHUF_XDZB ) ); + vmathSoaV3SetY( vec, spu_shuffle( xyxy, yzyz, _VECTORMATH_SHUF_YAWC ) ); + vmathSoaV3SetZ( vec, spu_shuffle( zxzx, yzyz, _VECTORMATH_SHUF_ZBXD ) ); +} + +static inline void vmathSoaV3StoreXYZArray( const VmathSoaVector3 *vec, vec_float4 *threeQuads ) +{ + vec_float4 xyzx, yzxy, zxyz, xyxy, zxzx, yzyz; + xyxy = spu_shuffle( vec->x, vec->y, _VECTORMATH_SHUF_XAZC ); + zxzx = spu_shuffle( vec->z, vec->x, _VECTORMATH_SHUF_ZDXB ); + yzyz = spu_shuffle( vec->y, vec->z, _VECTORMATH_SHUF_YBWD ); + xyzx = spu_shuffle( xyxy, zxzx, _VECTORMATH_SHUF_XYCD ); + yzxy = spu_shuffle( yzyz, xyxy, _VECTORMATH_SHUF_XYCD ); + zxyz = spu_shuffle( zxzx, yzyz, _VECTORMATH_SHUF_XYCD ); + threeQuads[0] = xyzx; + threeQuads[1] = yzxy; + threeQuads[2] = zxyz; +} + +static inline void vmathSoaV3StoreHalfFloats( const VmathSoaVector3 *vec0, const VmathSoaVector3 *vec1, vec_ushort8 *threeQuads ) +{ + vec_float4 xyz0[3]; + vec_float4 xyz1[3]; + vmathSoaV3StoreXYZArray( vec0, xyz0 ); + vmathSoaV3StoreXYZArray( vec1, xyz1 ); + threeQuads[0] = _vmath2VfToHalfFloats(xyz0[0], xyz0[1]); + threeQuads[1] = _vmath2VfToHalfFloats(xyz0[2], xyz1[0]); + threeQuads[2] = _vmath2VfToHalfFloats(xyz1[1], xyz1[2]); +} + +static inline void vmathSoaV3SetX( VmathSoaVector3 *result, vec_float4 _x ) +{ + result->x = _x; +} + +static inline vec_float4 vmathSoaV3GetX( const VmathSoaVector3 *vec ) +{ + return vec->x; +} + +static inline void vmathSoaV3SetY( VmathSoaVector3 *result, vec_float4 _y ) +{ + result->y = _y; +} + +static inline vec_float4 vmathSoaV3GetY( const VmathSoaVector3 *vec ) +{ + return vec->y; +} + +static inline void vmathSoaV3SetZ( VmathSoaVector3 *result, vec_float4 _z ) +{ + result->z = _z; +} + +static inline vec_float4 vmathSoaV3GetZ( const VmathSoaVector3 *vec ) +{ + return vec->z; +} + +static inline void vmathSoaV3SetElem( VmathSoaVector3 *result, int idx, vec_float4 value ) +{ + *(&result->x + idx) = value; +} + +static inline vec_float4 vmathSoaV3GetElem( const VmathSoaVector3 *vec, int idx ) +{ + return *(&vec->x + idx); +} + +static inline void vmathSoaV3Add( VmathSoaVector3 *result, const VmathSoaVector3 *vec0, const VmathSoaVector3 *vec1 ) +{ + result->x = spu_add( vec0->x, vec1->x ); + result->y = spu_add( vec0->y, vec1->y ); + result->z = spu_add( vec0->z, vec1->z ); +} + +static inline void vmathSoaV3Sub( VmathSoaVector3 *result, const VmathSoaVector3 *vec0, const VmathSoaVector3 *vec1 ) +{ + result->x = spu_sub( vec0->x, vec1->x ); + result->y = spu_sub( vec0->y, vec1->y ); + result->z = spu_sub( vec0->z, vec1->z ); +} + +static inline void vmathSoaV3AddP3( VmathSoaPoint3 *result, const VmathSoaVector3 *vec, const VmathSoaPoint3 *pnt1 ) +{ + result->x = spu_add( vec->x, pnt1->x ); + result->y = spu_add( vec->y, pnt1->y ); + result->z = spu_add( vec->z, pnt1->z ); +} + +static inline void vmathSoaV3ScalarMul( VmathSoaVector3 *result, const VmathSoaVector3 *vec, vec_float4 scalar ) +{ + result->x = spu_mul( vec->x, scalar ); + result->y = spu_mul( vec->y, scalar ); + result->z = spu_mul( vec->z, scalar ); +} + +static inline void vmathSoaV3ScalarDiv( VmathSoaVector3 *result, const VmathSoaVector3 *vec, vec_float4 scalar ) +{ + result->x = divf4( vec->x, scalar ); + result->y = divf4( vec->y, scalar ); + result->z = divf4( vec->z, scalar ); +} + +static inline void vmathSoaV3Neg( VmathSoaVector3 *result, const VmathSoaVector3 *vec ) +{ + result->x = negatef4( vec->x ); + result->y = negatef4( vec->y ); + result->z = negatef4( vec->z ); +} + +static inline void vmathSoaV3MulPerElem( VmathSoaVector3 *result, const VmathSoaVector3 *vec0, const VmathSoaVector3 *vec1 ) +{ + result->x = spu_mul( vec0->x, vec1->x ); + result->y = spu_mul( vec0->y, vec1->y ); + result->z = spu_mul( vec0->z, vec1->z ); +} + +static inline void vmathSoaV3DivPerElem( VmathSoaVector3 *result, const VmathSoaVector3 *vec0, const VmathSoaVector3 *vec1 ) +{ + result->x = divf4( vec0->x, vec1->x ); + result->y = divf4( vec0->y, vec1->y ); + result->z = divf4( vec0->z, vec1->z ); +} + +static inline void vmathSoaV3RecipPerElem( VmathSoaVector3 *result, const VmathSoaVector3 *vec ) +{ + result->x = recipf4( vec->x ); + result->y = recipf4( vec->y ); + result->z = recipf4( vec->z ); +} + +static inline void vmathSoaV3SqrtPerElem( VmathSoaVector3 *result, const VmathSoaVector3 *vec ) +{ + result->x = sqrtf4( vec->x ); + result->y = sqrtf4( vec->y ); + result->z = sqrtf4( vec->z ); +} + +static inline void vmathSoaV3RsqrtPerElem( VmathSoaVector3 *result, const VmathSoaVector3 *vec ) +{ + result->x = rsqrtf4( vec->x ); + result->y = rsqrtf4( vec->y ); + result->z = rsqrtf4( vec->z ); +} + +static inline void vmathSoaV3AbsPerElem( VmathSoaVector3 *result, const VmathSoaVector3 *vec ) +{ + result->x = fabsf4( vec->x ); + result->y = fabsf4( vec->y ); + result->z = fabsf4( vec->z ); +} + +static inline void vmathSoaV3CopySignPerElem( VmathSoaVector3 *result, const VmathSoaVector3 *vec0, const VmathSoaVector3 *vec1 ) +{ + result->x = copysignf4( vec0->x, vec1->x ); + result->y = copysignf4( vec0->y, vec1->y ); + result->z = copysignf4( vec0->z, vec1->z ); +} + +static inline void vmathSoaV3MaxPerElem( VmathSoaVector3 *result, const VmathSoaVector3 *vec0, const VmathSoaVector3 *vec1 ) +{ + result->x = fmaxf4( vec0->x, vec1->x ); + result->y = fmaxf4( vec0->y, vec1->y ); + result->z = fmaxf4( vec0->z, vec1->z ); +} + +static inline vec_float4 vmathSoaV3MaxElem( const VmathSoaVector3 *vec ) +{ + vec_float4 result; + result = fmaxf4( vec->x, vec->y ); + result = fmaxf4( vec->z, result ); + return result; +} + +static inline void vmathSoaV3MinPerElem( VmathSoaVector3 *result, const VmathSoaVector3 *vec0, const VmathSoaVector3 *vec1 ) +{ + result->x = fminf4( vec0->x, vec1->x ); + result->y = fminf4( vec0->y, vec1->y ); + result->z = fminf4( vec0->z, vec1->z ); +} + +static inline vec_float4 vmathSoaV3MinElem( const VmathSoaVector3 *vec ) +{ + vec_float4 result; + result = fminf4( vec->x, vec->y ); + result = fminf4( vec->z, result ); + return result; +} + +static inline vec_float4 vmathSoaV3Sum( const VmathSoaVector3 *vec ) +{ + vec_float4 result; + result = spu_add( vec->x, vec->y ); + result = spu_add( result, vec->z ); + return result; +} + +static inline vec_float4 vmathSoaV3Dot( const VmathSoaVector3 *vec0, const VmathSoaVector3 *vec1 ) +{ + vec_float4 result; + result = spu_mul( vec0->x, vec1->x ); + result = spu_add( result, spu_mul( vec0->y, vec1->y ) ); + result = spu_add( result, spu_mul( vec0->z, vec1->z ) ); + return result; +} + +static inline vec_float4 vmathSoaV3LengthSqr( const VmathSoaVector3 *vec ) +{ + vec_float4 result; + result = spu_mul( vec->x, vec->x ); + result = spu_add( result, spu_mul( vec->y, vec->y ) ); + result = spu_add( result, spu_mul( vec->z, vec->z ) ); + return result; +} + +static inline vec_float4 vmathSoaV3Length( const VmathSoaVector3 *vec ) +{ + return sqrtf4( vmathSoaV3LengthSqr( vec ) ); +} + +static inline void vmathSoaV3Normalize( VmathSoaVector3 *result, const VmathSoaVector3 *vec ) +{ + vec_float4 lenSqr, lenInv; + lenSqr = vmathSoaV3LengthSqr( vec ); + lenInv = rsqrtf4( lenSqr ); + result->x = spu_mul( vec->x, lenInv ); + result->y = spu_mul( vec->y, lenInv ); + result->z = spu_mul( vec->z, lenInv ); +} + +static inline void vmathSoaV3Cross( VmathSoaVector3 *result, const VmathSoaVector3 *vec0, const VmathSoaVector3 *vec1 ) +{ + vec_float4 tmpX, tmpY, tmpZ; + tmpX = spu_sub( spu_mul( vec0->y, vec1->z ), spu_mul( vec0->z, vec1->y ) ); + tmpY = spu_sub( spu_mul( vec0->z, vec1->x ), spu_mul( vec0->x, vec1->z ) ); + tmpZ = spu_sub( spu_mul( vec0->x, vec1->y ), spu_mul( vec0->y, vec1->x ) ); + vmathSoaV3MakeFromElems( result, tmpX, tmpY, tmpZ ); +} + +static inline void vmathSoaV3Select( VmathSoaVector3 *result, const VmathSoaVector3 *vec0, const VmathSoaVector3 *vec1, vec_uint4 select1 ) +{ + result->x = spu_sel( vec0->x, vec1->x, select1 ); + result->y = spu_sel( vec0->y, vec1->y, select1 ); + result->z = spu_sel( vec0->z, vec1->z, select1 ); +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathSoaV3Print( const VmathSoaVector3 *vec ) +{ + VmathVector3 vec0, vec1, vec2, vec3; + vmathSoaV3Get4Aos( vec, &vec0, &vec1, &vec2, &vec3 ); + printf("slot 0:\n"); + vmathV3Print( &vec0 ); + printf("slot 1:\n"); + vmathV3Print( &vec1 ); + printf("slot 2:\n"); + vmathV3Print( &vec2 ); + printf("slot 3:\n"); + vmathV3Print( &vec3 ); +} + +static inline void vmathSoaV3Prints( const VmathSoaVector3 *vec, const char *name ) +{ + VmathVector3 vec0, vec1, vec2, vec3; + printf( "%s:\n", name ); + vmathSoaV3Get4Aos( vec, &vec0, &vec1, &vec2, &vec3 ); + printf("slot 0:\n"); + vmathV3Print( &vec0 ); + printf("slot 1:\n"); + vmathV3Print( &vec1 ); + printf("slot 2:\n"); + vmathV3Print( &vec2 ); + printf("slot 3:\n"); + vmathV3Print( &vec3 ); +} + +#endif + +static inline void vmathSoaV4Copy( VmathSoaVector4 *result, const VmathSoaVector4 *vec ) +{ + result->x = vec->x; + result->y = vec->y; + result->z = vec->z; + result->w = vec->w; +} + +static inline void vmathSoaV4MakeFromElems( VmathSoaVector4 *result, vec_float4 _x, vec_float4 _y, vec_float4 _z, vec_float4 _w ) +{ + result->x = _x; + result->y = _y; + result->z = _z; + result->w = _w; +} + +static inline void vmathSoaV4MakeFromV3Scalar( VmathSoaVector4 *result, const VmathSoaVector3 *xyz, vec_float4 _w ) +{ + vmathSoaV4SetXYZ( result, xyz ); + vmathSoaV4SetW( result, _w ); +} + +static inline void vmathSoaV4MakeFromV3( VmathSoaVector4 *result, const VmathSoaVector3 *vec ) +{ + result->x = vec->x; + result->y = vec->y; + result->z = vec->z; + result->w = spu_splats(0.0f); +} + +static inline void vmathSoaV4MakeFromP3( VmathSoaVector4 *result, const VmathSoaPoint3 *pnt ) +{ + result->x = pnt->x; + result->y = pnt->y; + result->z = pnt->z; + result->w = spu_splats(1.0f); +} + +static inline void vmathSoaV4MakeFromQ( VmathSoaVector4 *result, const VmathSoaQuat *quat ) +{ + result->x = quat->x; + result->y = quat->y; + result->z = quat->z; + result->w = quat->w; +} + +static inline void vmathSoaV4MakeFromScalar( VmathSoaVector4 *result, vec_float4 scalar ) +{ + result->x = scalar; + result->y = scalar; + result->z = scalar; + result->w = scalar; +} + +static inline void vmathSoaV4MakeFromAos( VmathSoaVector4 *result, const VmathVector4 *vec ) +{ + vec_uchar16 shuffle_xxxx = (vec_uchar16)spu_splats((int)0x00010203); + vec_uchar16 shuffle_yyyy = (vec_uchar16)spu_splats((int)0x04050607); + vec_uchar16 shuffle_zzzz = (vec_uchar16)spu_splats((int)0x08090a0b); + vec_uchar16 shuffle_wwww = (vec_uchar16)spu_splats((int)0x0c0d0e0f); + vec_float4 vec128 = vec->vec128; + result->x = spu_shuffle( vec128, vec128, shuffle_xxxx ); + result->y = spu_shuffle( vec128, vec128, shuffle_yyyy ); + result->z = spu_shuffle( vec128, vec128, shuffle_zzzz ); + result->w = spu_shuffle( vec128, vec128, shuffle_wwww ); +} + +static inline void vmathSoaV4MakeFrom4Aos( VmathSoaVector4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1, const VmathVector4 *vec2, const VmathVector4 *vec3 ) +{ + vec_float4 tmp0, tmp1, tmp2, tmp3; + tmp0 = spu_shuffle( vec0->vec128, vec2->vec128, _VECTORMATH_SHUF_XAYB ); + tmp1 = spu_shuffle( vec1->vec128, vec3->vec128, _VECTORMATH_SHUF_XAYB ); + tmp2 = spu_shuffle( vec0->vec128, vec2->vec128, _VECTORMATH_SHUF_ZCWD ); + tmp3 = spu_shuffle( vec1->vec128, vec3->vec128, _VECTORMATH_SHUF_ZCWD ); + result->x = spu_shuffle( tmp0, tmp1, _VECTORMATH_SHUF_XAYB ); + result->y = spu_shuffle( tmp0, tmp1, _VECTORMATH_SHUF_ZCWD ); + result->z = spu_shuffle( tmp2, tmp3, _VECTORMATH_SHUF_XAYB ); + result->w = spu_shuffle( tmp2, tmp3, _VECTORMATH_SHUF_ZCWD ); +} + +static inline void vmathSoaV4MakeXAxis( VmathSoaVector4 *result ) +{ + vmathSoaV4MakeFromElems( result, spu_splats(1.0f), spu_splats(0.0f), spu_splats(0.0f), spu_splats(0.0f) ); +} + +static inline void vmathSoaV4MakeYAxis( VmathSoaVector4 *result ) +{ + vmathSoaV4MakeFromElems( result, spu_splats(0.0f), spu_splats(1.0f), spu_splats(0.0f), spu_splats(0.0f) ); +} + +static inline void vmathSoaV4MakeZAxis( VmathSoaVector4 *result ) +{ + vmathSoaV4MakeFromElems( result, spu_splats(0.0f), spu_splats(0.0f), spu_splats(1.0f), spu_splats(0.0f) ); +} + +static inline void vmathSoaV4MakeWAxis( VmathSoaVector4 *result ) +{ + vmathSoaV4MakeFromElems( result, spu_splats(0.0f), spu_splats(0.0f), spu_splats(0.0f), spu_splats(1.0f) ); +} + +static inline void vmathSoaV4Lerp( VmathSoaVector4 *result, vec_float4 t, const VmathSoaVector4 *vec0, const VmathSoaVector4 *vec1 ) +{ + VmathSoaVector4 tmpV4_0, tmpV4_1; + vmathSoaV4Sub( &tmpV4_0, vec1, vec0 ); + vmathSoaV4ScalarMul( &tmpV4_1, &tmpV4_0, t ); + vmathSoaV4Add( result, vec0, &tmpV4_1 ); +} + +static inline void vmathSoaV4Slerp( VmathSoaVector4 *result, vec_float4 t, const VmathSoaVector4 *unitVec0, const VmathSoaVector4 *unitVec1 ) +{ + VmathSoaVector4 tmpV4_0, tmpV4_1; + vec_float4 recipSinAngle, scale0, scale1, cosAngle, angle; + vec_uint4 selectMask; + cosAngle = vmathSoaV4Dot( unitVec0, unitVec1 ); + selectMask = (vec_uint4)spu_cmpgt( spu_splats(_VECTORMATH_SLERP_TOL), cosAngle ); + angle = acosf4( cosAngle ); + recipSinAngle = recipf4( sinf4( angle ) ); + scale0 = spu_sel( spu_sub( spu_splats(1.0f), t ), spu_mul( sinf4( spu_mul( spu_sub( spu_splats(1.0f), t ), angle ) ), recipSinAngle ), selectMask ); + scale1 = spu_sel( t, spu_mul( sinf4( spu_mul( t, angle ) ), recipSinAngle ), selectMask ); + vmathSoaV4ScalarMul( &tmpV4_0, unitVec0, scale0 ); + vmathSoaV4ScalarMul( &tmpV4_1, unitVec1, scale1 ); + vmathSoaV4Add( result, &tmpV4_0, &tmpV4_1 ); +} + +static inline void vmathSoaV4Get4Aos( const VmathSoaVector4 *vec, VmathVector4 *result0, VmathVector4 *result1, VmathVector4 *result2, VmathVector4 *result3 ) +{ + vec_float4 tmp0, tmp1, tmp2, tmp3; + tmp0 = spu_shuffle( vec->x, vec->z, _VECTORMATH_SHUF_XAYB ); + tmp1 = spu_shuffle( vec->y, vec->w, _VECTORMATH_SHUF_XAYB ); + tmp2 = spu_shuffle( vec->x, vec->z, _VECTORMATH_SHUF_ZCWD ); + tmp3 = spu_shuffle( vec->y, vec->w, _VECTORMATH_SHUF_ZCWD ); + vmathV4MakeFrom128( result0, spu_shuffle( tmp0, tmp1, _VECTORMATH_SHUF_XAYB ) ); + vmathV4MakeFrom128( result1, spu_shuffle( tmp0, tmp1, _VECTORMATH_SHUF_ZCWD ) ); + vmathV4MakeFrom128( result2, spu_shuffle( tmp2, tmp3, _VECTORMATH_SHUF_XAYB ) ); + vmathV4MakeFrom128( result3, spu_shuffle( tmp2, tmp3, _VECTORMATH_SHUF_ZCWD ) ); +} + +static inline void vmathSoaV4StoreHalfFloats( const VmathSoaVector4 *vec, vec_ushort8 *twoQuads ) +{ + VmathVector4 v0, v1, v2, v3; + vmathSoaV4Get4Aos( vec, &v0, &v1, &v2, &v3 ); + twoQuads[0] = _vmath2VfToHalfFloats(v0.vec128, v1.vec128); + twoQuads[1] = _vmath2VfToHalfFloats(v2.vec128, v3.vec128); +} + +static inline void vmathSoaV4SetXYZ( VmathSoaVector4 *result, const VmathSoaVector3 *vec ) +{ + result->x = vec->x; + result->y = vec->y; + result->z = vec->z; +} + +static inline void vmathSoaV4GetXYZ( VmathSoaVector3 *result, const VmathSoaVector4 *vec ) +{ + vmathSoaV3MakeFromElems( result, vec->x, vec->y, vec->z ); +} + +static inline void vmathSoaV4SetX( VmathSoaVector4 *result, vec_float4 _x ) +{ + result->x = _x; +} + +static inline vec_float4 vmathSoaV4GetX( const VmathSoaVector4 *vec ) +{ + return vec->x; +} + +static inline void vmathSoaV4SetY( VmathSoaVector4 *result, vec_float4 _y ) +{ + result->y = _y; +} + +static inline vec_float4 vmathSoaV4GetY( const VmathSoaVector4 *vec ) +{ + return vec->y; +} + +static inline void vmathSoaV4SetZ( VmathSoaVector4 *result, vec_float4 _z ) +{ + result->z = _z; +} + +static inline vec_float4 vmathSoaV4GetZ( const VmathSoaVector4 *vec ) +{ + return vec->z; +} + +static inline void vmathSoaV4SetW( VmathSoaVector4 *result, vec_float4 _w ) +{ + result->w = _w; +} + +static inline vec_float4 vmathSoaV4GetW( const VmathSoaVector4 *vec ) +{ + return vec->w; +} + +static inline void vmathSoaV4SetElem( VmathSoaVector4 *result, int idx, vec_float4 value ) +{ + *(&result->x + idx) = value; +} + +static inline vec_float4 vmathSoaV4GetElem( const VmathSoaVector4 *vec, int idx ) +{ + return *(&vec->x + idx); +} + +static inline void vmathSoaV4Add( VmathSoaVector4 *result, const VmathSoaVector4 *vec0, const VmathSoaVector4 *vec1 ) +{ + result->x = spu_add( vec0->x, vec1->x ); + result->y = spu_add( vec0->y, vec1->y ); + result->z = spu_add( vec0->z, vec1->z ); + result->w = spu_add( vec0->w, vec1->w ); +} + +static inline void vmathSoaV4Sub( VmathSoaVector4 *result, const VmathSoaVector4 *vec0, const VmathSoaVector4 *vec1 ) +{ + result->x = spu_sub( vec0->x, vec1->x ); + result->y = spu_sub( vec0->y, vec1->y ); + result->z = spu_sub( vec0->z, vec1->z ); + result->w = spu_sub( vec0->w, vec1->w ); +} + +static inline void vmathSoaV4ScalarMul( VmathSoaVector4 *result, const VmathSoaVector4 *vec, vec_float4 scalar ) +{ + result->x = spu_mul( vec->x, scalar ); + result->y = spu_mul( vec->y, scalar ); + result->z = spu_mul( vec->z, scalar ); + result->w = spu_mul( vec->w, scalar ); +} + +static inline void vmathSoaV4ScalarDiv( VmathSoaVector4 *result, const VmathSoaVector4 *vec, vec_float4 scalar ) +{ + result->x = divf4( vec->x, scalar ); + result->y = divf4( vec->y, scalar ); + result->z = divf4( vec->z, scalar ); + result->w = divf4( vec->w, scalar ); +} + +static inline void vmathSoaV4Neg( VmathSoaVector4 *result, const VmathSoaVector4 *vec ) +{ + result->x = negatef4( vec->x ); + result->y = negatef4( vec->y ); + result->z = negatef4( vec->z ); + result->w = negatef4( vec->w ); +} + +static inline void vmathSoaV4MulPerElem( VmathSoaVector4 *result, const VmathSoaVector4 *vec0, const VmathSoaVector4 *vec1 ) +{ + result->x = spu_mul( vec0->x, vec1->x ); + result->y = spu_mul( vec0->y, vec1->y ); + result->z = spu_mul( vec0->z, vec1->z ); + result->w = spu_mul( vec0->w, vec1->w ); +} + +static inline void vmathSoaV4DivPerElem( VmathSoaVector4 *result, const VmathSoaVector4 *vec0, const VmathSoaVector4 *vec1 ) +{ + result->x = divf4( vec0->x, vec1->x ); + result->y = divf4( vec0->y, vec1->y ); + result->z = divf4( vec0->z, vec1->z ); + result->w = divf4( vec0->w, vec1->w ); +} + +static inline void vmathSoaV4RecipPerElem( VmathSoaVector4 *result, const VmathSoaVector4 *vec ) +{ + result->x = recipf4( vec->x ); + result->y = recipf4( vec->y ); + result->z = recipf4( vec->z ); + result->w = recipf4( vec->w ); +} + +static inline void vmathSoaV4SqrtPerElem( VmathSoaVector4 *result, const VmathSoaVector4 *vec ) +{ + result->x = sqrtf4( vec->x ); + result->y = sqrtf4( vec->y ); + result->z = sqrtf4( vec->z ); + result->w = sqrtf4( vec->w ); +} + +static inline void vmathSoaV4RsqrtPerElem( VmathSoaVector4 *result, const VmathSoaVector4 *vec ) +{ + result->x = rsqrtf4( vec->x ); + result->y = rsqrtf4( vec->y ); + result->z = rsqrtf4( vec->z ); + result->w = rsqrtf4( vec->w ); +} + +static inline void vmathSoaV4AbsPerElem( VmathSoaVector4 *result, const VmathSoaVector4 *vec ) +{ + result->x = fabsf4( vec->x ); + result->y = fabsf4( vec->y ); + result->z = fabsf4( vec->z ); + result->w = fabsf4( vec->w ); +} + +static inline void vmathSoaV4CopySignPerElem( VmathSoaVector4 *result, const VmathSoaVector4 *vec0, const VmathSoaVector4 *vec1 ) +{ + result->x = copysignf4( vec0->x, vec1->x ); + result->y = copysignf4( vec0->y, vec1->y ); + result->z = copysignf4( vec0->z, vec1->z ); + result->w = copysignf4( vec0->w, vec1->w ); +} + +static inline void vmathSoaV4MaxPerElem( VmathSoaVector4 *result, const VmathSoaVector4 *vec0, const VmathSoaVector4 *vec1 ) +{ + result->x = fmaxf4( vec0->x, vec1->x ); + result->y = fmaxf4( vec0->y, vec1->y ); + result->z = fmaxf4( vec0->z, vec1->z ); + result->w = fmaxf4( vec0->w, vec1->w ); +} + +static inline vec_float4 vmathSoaV4MaxElem( const VmathSoaVector4 *vec ) +{ + vec_float4 result; + result = fmaxf4( vec->x, vec->y ); + result = fmaxf4( vec->z, result ); + result = fmaxf4( vec->w, result ); + return result; +} + +static inline void vmathSoaV4MinPerElem( VmathSoaVector4 *result, const VmathSoaVector4 *vec0, const VmathSoaVector4 *vec1 ) +{ + result->x = fminf4( vec0->x, vec1->x ); + result->y = fminf4( vec0->y, vec1->y ); + result->z = fminf4( vec0->z, vec1->z ); + result->w = fminf4( vec0->w, vec1->w ); +} + +static inline vec_float4 vmathSoaV4MinElem( const VmathSoaVector4 *vec ) +{ + vec_float4 result; + result = fminf4( vec->x, vec->y ); + result = fminf4( vec->z, result ); + result = fminf4( vec->w, result ); + return result; +} + +static inline vec_float4 vmathSoaV4Sum( const VmathSoaVector4 *vec ) +{ + vec_float4 result; + result = spu_add( vec->x, vec->y ); + result = spu_add( result, vec->z ); + result = spu_add( result, vec->w ); + return result; +} + +static inline vec_float4 vmathSoaV4Dot( const VmathSoaVector4 *vec0, const VmathSoaVector4 *vec1 ) +{ + vec_float4 result; + result = spu_mul( vec0->x, vec1->x ); + result = spu_add( result, spu_mul( vec0->y, vec1->y ) ); + result = spu_add( result, spu_mul( vec0->z, vec1->z ) ); + result = spu_add( result, spu_mul( vec0->w, vec1->w ) ); + return result; +} + +static inline vec_float4 vmathSoaV4LengthSqr( const VmathSoaVector4 *vec ) +{ + vec_float4 result; + result = spu_mul( vec->x, vec->x ); + result = spu_add( result, spu_mul( vec->y, vec->y ) ); + result = spu_add( result, spu_mul( vec->z, vec->z ) ); + result = spu_add( result, spu_mul( vec->w, vec->w ) ); + return result; +} + +static inline vec_float4 vmathSoaV4Length( const VmathSoaVector4 *vec ) +{ + return sqrtf4( vmathSoaV4LengthSqr( vec ) ); +} + +static inline void vmathSoaV4Normalize( VmathSoaVector4 *result, const VmathSoaVector4 *vec ) +{ + vec_float4 lenSqr, lenInv; + lenSqr = vmathSoaV4LengthSqr( vec ); + lenInv = rsqrtf4( lenSqr ); + result->x = spu_mul( vec->x, lenInv ); + result->y = spu_mul( vec->y, lenInv ); + result->z = spu_mul( vec->z, lenInv ); + result->w = spu_mul( vec->w, lenInv ); +} + +static inline void vmathSoaV4Select( VmathSoaVector4 *result, const VmathSoaVector4 *vec0, const VmathSoaVector4 *vec1, vec_uint4 select1 ) +{ + result->x = spu_sel( vec0->x, vec1->x, select1 ); + result->y = spu_sel( vec0->y, vec1->y, select1 ); + result->z = spu_sel( vec0->z, vec1->z, select1 ); + result->w = spu_sel( vec0->w, vec1->w, select1 ); +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathSoaV4Print( const VmathSoaVector4 *vec ) +{ + VmathVector4 vec0, vec1, vec2, vec3; + vmathSoaV4Get4Aos( vec, &vec0, &vec1, &vec2, &vec3 ); + printf("slot 0:\n"); + vmathV4Print( &vec0 ); + printf("slot 1:\n"); + vmathV4Print( &vec1 ); + printf("slot 2:\n"); + vmathV4Print( &vec2 ); + printf("slot 3:\n"); + vmathV4Print( &vec3 ); +} + +static inline void vmathSoaV4Prints( const VmathSoaVector4 *vec, const char *name ) +{ + VmathVector4 vec0, vec1, vec2, vec3; + printf( "%s:\n", name ); + vmathSoaV4Get4Aos( vec, &vec0, &vec1, &vec2, &vec3 ); + printf("slot 0:\n"); + vmathV4Print( &vec0 ); + printf("slot 1:\n"); + vmathV4Print( &vec1 ); + printf("slot 2:\n"); + vmathV4Print( &vec2 ); + printf("slot 3:\n"); + vmathV4Print( &vec3 ); +} + +#endif + +static inline void vmathSoaP3Copy( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt ) +{ + result->x = pnt->x; + result->y = pnt->y; + result->z = pnt->z; +} + +static inline void vmathSoaP3MakeFromElems( VmathSoaPoint3 *result, vec_float4 _x, vec_float4 _y, vec_float4 _z ) +{ + result->x = _x; + result->y = _y; + result->z = _z; +} + +static inline void vmathSoaP3MakeFromV3( VmathSoaPoint3 *result, const VmathSoaVector3 *vec ) +{ + result->x = vec->x; + result->y = vec->y; + result->z = vec->z; +} + +static inline void vmathSoaP3MakeFromScalar( VmathSoaPoint3 *result, vec_float4 scalar ) +{ + result->x = scalar; + result->y = scalar; + result->z = scalar; +} + +static inline void vmathSoaP3MakeFromAos( VmathSoaPoint3 *result, const VmathPoint3 *pnt ) +{ + vec_uchar16 shuffle_xxxx = (vec_uchar16)spu_splats((int)0x00010203); + vec_uchar16 shuffle_yyyy = (vec_uchar16)spu_splats((int)0x04050607); + vec_uchar16 shuffle_zzzz = (vec_uchar16)spu_splats((int)0x08090a0b); + vec_float4 vec128 = pnt->vec128; + result->x = spu_shuffle( vec128, vec128, shuffle_xxxx ); + result->y = spu_shuffle( vec128, vec128, shuffle_yyyy ); + result->z = spu_shuffle( vec128, vec128, shuffle_zzzz ); +} + +static inline void vmathSoaP3MakeFrom4Aos( VmathSoaPoint3 *result, const VmathPoint3 *pnt0, const VmathPoint3 *pnt1, const VmathPoint3 *pnt2, const VmathPoint3 *pnt3 ) +{ + vec_float4 tmp0, tmp1, tmp2, tmp3; + tmp0 = spu_shuffle( pnt0->vec128, pnt2->vec128, _VECTORMATH_SHUF_XAYB ); + tmp1 = spu_shuffle( pnt1->vec128, pnt3->vec128, _VECTORMATH_SHUF_XAYB ); + tmp2 = spu_shuffle( pnt0->vec128, pnt2->vec128, _VECTORMATH_SHUF_ZCWD ); + tmp3 = spu_shuffle( pnt1->vec128, pnt3->vec128, _VECTORMATH_SHUF_ZCWD ); + result->x = spu_shuffle( tmp0, tmp1, _VECTORMATH_SHUF_XAYB ); + result->y = spu_shuffle( tmp0, tmp1, _VECTORMATH_SHUF_ZCWD ); + result->z = spu_shuffle( tmp2, tmp3, _VECTORMATH_SHUF_XAYB ); +} + +static inline void vmathSoaP3Lerp( VmathSoaPoint3 *result, vec_float4 t, const VmathSoaPoint3 *pnt0, const VmathSoaPoint3 *pnt1 ) +{ + VmathSoaVector3 tmpV3_0, tmpV3_1; + vmathSoaP3Sub( &tmpV3_0, pnt1, pnt0 ); + vmathSoaV3ScalarMul( &tmpV3_1, &tmpV3_0, t ); + vmathSoaP3AddV3( result, pnt0, &tmpV3_1 ); +} + +static inline void vmathSoaP3Get4Aos( const VmathSoaPoint3 *pnt, VmathPoint3 *result0, VmathPoint3 *result1, VmathPoint3 *result2, VmathPoint3 *result3 ) +{ + vec_float4 tmp0, tmp1; + tmp0 = spu_shuffle( pnt->x, pnt->z, _VECTORMATH_SHUF_XAYB ); + tmp1 = spu_shuffle( pnt->x, pnt->z, _VECTORMATH_SHUF_ZCWD ); + vmathP3MakeFrom128( result0, spu_shuffle( tmp0, pnt->y, _VECTORMATH_SHUF_XAYB ) ); + vmathP3MakeFrom128( result1, spu_shuffle( tmp0, pnt->y, _VECTORMATH_SHUF_ZBW0 ) ); + vmathP3MakeFrom128( result2, spu_shuffle( tmp1, pnt->y, _VECTORMATH_SHUF_XCY0 ) ); + vmathP3MakeFrom128( result3, spu_shuffle( tmp1, pnt->y, _VECTORMATH_SHUF_ZDW0 ) ); +} + +static inline void vmathSoaP3LoadXYZArray( VmathSoaPoint3 *vec, const vec_float4 *threeQuads ) +{ + vec_float4 xyxy, yzyz, zxzx, xyzx, yzxy, zxyz; + xyzx = threeQuads[0]; + yzxy = threeQuads[1]; + zxyz = threeQuads[2]; + xyxy = spu_shuffle( xyzx, yzxy, _VECTORMATH_SHUF_XYCD ); + zxzx = spu_shuffle( zxyz, xyzx, _VECTORMATH_SHUF_XYCD ); + yzyz = spu_shuffle( yzxy, zxyz, _VECTORMATH_SHUF_XYCD ); + vmathSoaP3SetX( vec, spu_shuffle( xyxy, zxzx, _VECTORMATH_SHUF_XDZB ) ); + vmathSoaP3SetY( vec, spu_shuffle( xyxy, yzyz, _VECTORMATH_SHUF_YAWC ) ); + vmathSoaP3SetZ( vec, spu_shuffle( zxzx, yzyz, _VECTORMATH_SHUF_ZBXD ) ); +} + +static inline void vmathSoaP3StoreXYZArray( const VmathSoaPoint3 *vec, vec_float4 *threeQuads ) +{ + vec_float4 xyzx, yzxy, zxyz, xyxy, zxzx, yzyz; + xyxy = spu_shuffle( vec->x, vec->y, _VECTORMATH_SHUF_XAZC ); + zxzx = spu_shuffle( vec->z, vec->x, _VECTORMATH_SHUF_ZDXB ); + yzyz = spu_shuffle( vec->y, vec->z, _VECTORMATH_SHUF_YBWD ); + xyzx = spu_shuffle( xyxy, zxzx, _VECTORMATH_SHUF_XYCD ); + yzxy = spu_shuffle( yzyz, xyxy, _VECTORMATH_SHUF_XYCD ); + zxyz = spu_shuffle( zxzx, yzyz, _VECTORMATH_SHUF_XYCD ); + threeQuads[0] = xyzx; + threeQuads[1] = yzxy; + threeQuads[2] = zxyz; +} + +static inline void vmathSoaP3StoreHalfFloats( const VmathSoaPoint3 *pnt0, const VmathSoaPoint3 *pnt1, vec_ushort8 *threeQuads ) +{ + vec_float4 xyz0[3]; + vec_float4 xyz1[3]; + vmathSoaP3StoreXYZArray( pnt0, xyz0 ); + vmathSoaP3StoreXYZArray( pnt1, xyz1 ); + threeQuads[0] = _vmath2VfToHalfFloats(xyz0[0], xyz0[1]); + threeQuads[1] = _vmath2VfToHalfFloats(xyz0[2], xyz1[0]); + threeQuads[2] = _vmath2VfToHalfFloats(xyz1[1], xyz1[2]); +} + +static inline void vmathSoaP3SetX( VmathSoaPoint3 *result, vec_float4 _x ) +{ + result->x = _x; +} + +static inline vec_float4 vmathSoaP3GetX( const VmathSoaPoint3 *pnt ) +{ + return pnt->x; +} + +static inline void vmathSoaP3SetY( VmathSoaPoint3 *result, vec_float4 _y ) +{ + result->y = _y; +} + +static inline vec_float4 vmathSoaP3GetY( const VmathSoaPoint3 *pnt ) +{ + return pnt->y; +} + +static inline void vmathSoaP3SetZ( VmathSoaPoint3 *result, vec_float4 _z ) +{ + result->z = _z; +} + +static inline vec_float4 vmathSoaP3GetZ( const VmathSoaPoint3 *pnt ) +{ + return pnt->z; +} + +static inline void vmathSoaP3SetElem( VmathSoaPoint3 *result, int idx, vec_float4 value ) +{ + *(&result->x + idx) = value; +} + +static inline vec_float4 vmathSoaP3GetElem( const VmathSoaPoint3 *pnt, int idx ) +{ + return *(&pnt->x + idx); +} + +static inline void vmathSoaP3Sub( VmathSoaVector3 *result, const VmathSoaPoint3 *pnt0, const VmathSoaPoint3 *pnt1 ) +{ + result->x = spu_sub( pnt0->x, pnt1->x ); + result->y = spu_sub( pnt0->y, pnt1->y ); + result->z = spu_sub( pnt0->z, pnt1->z ); +} + +static inline void vmathSoaP3AddV3( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt, const VmathSoaVector3 *vec1 ) +{ + result->x = spu_add( pnt->x, vec1->x ); + result->y = spu_add( pnt->y, vec1->y ); + result->z = spu_add( pnt->z, vec1->z ); +} + +static inline void vmathSoaP3SubV3( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt, const VmathSoaVector3 *vec1 ) +{ + result->x = spu_sub( pnt->x, vec1->x ); + result->y = spu_sub( pnt->y, vec1->y ); + result->z = spu_sub( pnt->z, vec1->z ); +} + +static inline void vmathSoaP3MulPerElem( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt0, const VmathSoaPoint3 *pnt1 ) +{ + result->x = spu_mul( pnt0->x, pnt1->x ); + result->y = spu_mul( pnt0->y, pnt1->y ); + result->z = spu_mul( pnt0->z, pnt1->z ); +} + +static inline void vmathSoaP3DivPerElem( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt0, const VmathSoaPoint3 *pnt1 ) +{ + result->x = divf4( pnt0->x, pnt1->x ); + result->y = divf4( pnt0->y, pnt1->y ); + result->z = divf4( pnt0->z, pnt1->z ); +} + +static inline void vmathSoaP3RecipPerElem( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt ) +{ + result->x = recipf4( pnt->x ); + result->y = recipf4( pnt->y ); + result->z = recipf4( pnt->z ); +} + +static inline void vmathSoaP3SqrtPerElem( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt ) +{ + result->x = sqrtf4( pnt->x ); + result->y = sqrtf4( pnt->y ); + result->z = sqrtf4( pnt->z ); +} + +static inline void vmathSoaP3RsqrtPerElem( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt ) +{ + result->x = rsqrtf4( pnt->x ); + result->y = rsqrtf4( pnt->y ); + result->z = rsqrtf4( pnt->z ); +} + +static inline void vmathSoaP3AbsPerElem( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt ) +{ + result->x = fabsf4( pnt->x ); + result->y = fabsf4( pnt->y ); + result->z = fabsf4( pnt->z ); +} + +static inline void vmathSoaP3CopySignPerElem( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt0, const VmathSoaPoint3 *pnt1 ) +{ + result->x = copysignf4( pnt0->x, pnt1->x ); + result->y = copysignf4( pnt0->y, pnt1->y ); + result->z = copysignf4( pnt0->z, pnt1->z ); +} + +static inline void vmathSoaP3MaxPerElem( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt0, const VmathSoaPoint3 *pnt1 ) +{ + result->x = fmaxf4( pnt0->x, pnt1->x ); + result->y = fmaxf4( pnt0->y, pnt1->y ); + result->z = fmaxf4( pnt0->z, pnt1->z ); +} + +static inline vec_float4 vmathSoaP3MaxElem( const VmathSoaPoint3 *pnt ) +{ + vec_float4 result; + result = fmaxf4( pnt->x, pnt->y ); + result = fmaxf4( pnt->z, result ); + return result; +} + +static inline void vmathSoaP3MinPerElem( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt0, const VmathSoaPoint3 *pnt1 ) +{ + result->x = fminf4( pnt0->x, pnt1->x ); + result->y = fminf4( pnt0->y, pnt1->y ); + result->z = fminf4( pnt0->z, pnt1->z ); +} + +static inline vec_float4 vmathSoaP3MinElem( const VmathSoaPoint3 *pnt ) +{ + vec_float4 result; + result = fminf4( pnt->x, pnt->y ); + result = fminf4( pnt->z, result ); + return result; +} + +static inline vec_float4 vmathSoaP3Sum( const VmathSoaPoint3 *pnt ) +{ + vec_float4 result; + result = spu_add( pnt->x, pnt->y ); + result = spu_add( result, pnt->z ); + return result; +} + +static inline void vmathSoaP3Scale( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt, vec_float4 scaleVal ) +{ + VmathSoaPoint3 tmpP3_0; + vmathSoaP3MakeFromScalar( &tmpP3_0, scaleVal ); + vmathSoaP3MulPerElem( result, pnt, &tmpP3_0 ); +} + +static inline void vmathSoaP3NonUniformScale( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt, const VmathSoaVector3 *scaleVec ) +{ + VmathSoaPoint3 tmpP3_0; + vmathSoaP3MakeFromV3( &tmpP3_0, scaleVec ); + vmathSoaP3MulPerElem( result, pnt, &tmpP3_0 ); +} + +static inline vec_float4 vmathSoaP3Projection( const VmathSoaPoint3 *pnt, const VmathSoaVector3 *unitVec ) +{ + vec_float4 result; + result = spu_mul( pnt->x, unitVec->x ); + result = spu_add( result, spu_mul( pnt->y, unitVec->y ) ); + result = spu_add( result, spu_mul( pnt->z, unitVec->z ) ); + return result; +} + +static inline vec_float4 vmathSoaP3DistSqrFromOrigin( const VmathSoaPoint3 *pnt ) +{ + VmathSoaVector3 tmpV3_0; + vmathSoaV3MakeFromP3( &tmpV3_0, pnt ); + return vmathSoaV3LengthSqr( &tmpV3_0 ); +} + +static inline vec_float4 vmathSoaP3DistFromOrigin( const VmathSoaPoint3 *pnt ) +{ + VmathSoaVector3 tmpV3_0; + vmathSoaV3MakeFromP3( &tmpV3_0, pnt ); + return vmathSoaV3Length( &tmpV3_0 ); +} + +static inline vec_float4 vmathSoaP3DistSqr( const VmathSoaPoint3 *pnt0, const VmathSoaPoint3 *pnt1 ) +{ + VmathSoaVector3 tmpV3_0; + vmathSoaP3Sub( &tmpV3_0, pnt1, pnt0 ); + return vmathSoaV3LengthSqr( &tmpV3_0 ); +} + +static inline vec_float4 vmathSoaP3Dist( const VmathSoaPoint3 *pnt0, const VmathSoaPoint3 *pnt1 ) +{ + VmathSoaVector3 tmpV3_0; + vmathSoaP3Sub( &tmpV3_0, pnt1, pnt0 ); + return vmathSoaV3Length( &tmpV3_0 ); +} + +static inline void vmathSoaP3Select( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt0, const VmathSoaPoint3 *pnt1, vec_uint4 select1 ) +{ + result->x = spu_sel( pnt0->x, pnt1->x, select1 ); + result->y = spu_sel( pnt0->y, pnt1->y, select1 ); + result->z = spu_sel( pnt0->z, pnt1->z, select1 ); +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathSoaP3Print( const VmathSoaPoint3 *pnt ) +{ + VmathPoint3 vec0, vec1, vec2, vec3; + vmathSoaP3Get4Aos( pnt, &vec0, &vec1, &vec2, &vec3 ); + printf("slot 0:\n"); + vmathP3Print( &vec0 ); + printf("slot 1:\n"); + vmathP3Print( &vec1 ); + printf("slot 2:\n"); + vmathP3Print( &vec2 ); + printf("slot 3:\n"); + vmathP3Print( &vec3 ); +} + +static inline void vmathSoaP3Prints( const VmathSoaPoint3 *pnt, const char *name ) +{ + VmathPoint3 vec0, vec1, vec2, vec3; + printf( "%s:\n", name ); + vmathSoaP3Get4Aos( pnt, &vec0, &vec1, &vec2, &vec3 ); + printf("slot 0:\n"); + vmathP3Print( &vec0 ); + printf("slot 1:\n"); + vmathP3Print( &vec1 ); + printf("slot 2:\n"); + vmathP3Print( &vec2 ); + printf("slot 3:\n"); + vmathP3Print( &vec3 ); +} + +#endif + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/spu/c/vec_soa_v.h b/Extras/vectormathlibrary/include/vectormath/spu/c/vec_soa_v.h new file mode 100644 index 000000000..560356a77 --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/spu/c/vec_soa_v.h @@ -0,0 +1,962 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_VEC_SOA_V_C_H +#define _VECTORMATH_VEC_SOA_V_C_H +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/*----------------------------------------------------------------------------- + * Constants + * for shuffles, words are labeled [x,y,z,w] [a,b,c,d] + */ +#define _VECTORMATH_SHUF_X 0x00010203 +#define _VECTORMATH_SHUF_Y 0x04050607 +#define _VECTORMATH_SHUF_Z 0x08090a0b +#define _VECTORMATH_SHUF_W 0x0c0d0e0f +#define _VECTORMATH_SHUF_A 0x10111213 +#define _VECTORMATH_SHUF_B 0x14151617 +#define _VECTORMATH_SHUF_C 0x18191a1b +#define _VECTORMATH_SHUF_D 0x1c1d1e1f +#define _VECTORMATH_SHUF_0 0x80808080 +#define _VECTORMATH_SHUF_XAYB ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_A, _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_B }) +#define _VECTORMATH_SHUF_ZCWD ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_C, _VECTORMATH_SHUF_W, _VECTORMATH_SHUF_D }) +#define _VECTORMATH_SHUF_ZBW0 ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_B, _VECTORMATH_SHUF_W, _VECTORMATH_SHUF_0 }) +#define _VECTORMATH_SHUF_XCY0 ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_C, _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_0 }) +#define _VECTORMATH_SHUF_ZDW0 ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_D, _VECTORMATH_SHUF_W, _VECTORMATH_SHUF_0 }) +#define _VECTORMATH_SHUF_XAZC ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_A, _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_C }) +#define _VECTORMATH_SHUF_ZDXB ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_D, _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_B }) +#define _VECTORMATH_SHUF_YBWD ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_B, _VECTORMATH_SHUF_W, _VECTORMATH_SHUF_D }) +#define _VECTORMATH_SHUF_XDZB ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_D, _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_B }) +#define _VECTORMATH_SHUF_YAWC ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_A, _VECTORMATH_SHUF_W, _VECTORMATH_SHUF_C }) +#define _VECTORMATH_SHUF_ZBXD ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_B, _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_D }) +#define _VECTORMATH_SHUF_XYCD ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_C, _VECTORMATH_SHUF_D }) +#define _VECTORMATH_SLERP_TOL 0.999f + +/*----------------------------------------------------------------------------- + * Definitions + */ +#ifndef _VECTORMATH_INTERNAL_FUNCTIONS +#define _VECTORMATH_INTERNAL_FUNCTIONS + +#endif + +static inline VmathSoaVector3 vmathSoaV3MakeFromElems_V( vec_float4 _x, vec_float4 _y, vec_float4 _z ) +{ + VmathSoaVector3 result; + vmathSoaV3MakeFromElems(&result, _x, _y, _z); + return result; +} + +static inline VmathSoaVector3 vmathSoaV3MakeFromP3_V( VmathSoaPoint3 pnt ) +{ + VmathSoaVector3 result; + vmathSoaV3MakeFromP3(&result, &pnt); + return result; +} + +static inline VmathSoaVector3 vmathSoaV3MakeFromScalar_V( vec_float4 scalar ) +{ + VmathSoaVector3 result; + vmathSoaV3MakeFromScalar(&result, scalar); + return result; +} + +static inline VmathSoaVector3 vmathSoaV3MakeFromAos_V( VmathVector3 vec ) +{ + VmathSoaVector3 result; + vmathSoaV3MakeFromAos(&result, &vec); + return result; +} + +static inline VmathSoaVector3 vmathSoaV3MakeFrom4Aos_V( VmathVector3 vec0, VmathVector3 vec1, VmathVector3 vec2, VmathVector3 vec3 ) +{ + VmathSoaVector3 result; + vmathSoaV3MakeFrom4Aos(&result, &vec0, &vec1, &vec2, &vec3); + return result; +} + +static inline VmathSoaVector3 vmathSoaV3MakeXAxis_V( ) +{ + VmathSoaVector3 result; + vmathSoaV3MakeXAxis(&result); + return result; +} + +static inline VmathSoaVector3 vmathSoaV3MakeYAxis_V( ) +{ + VmathSoaVector3 result; + vmathSoaV3MakeYAxis(&result); + return result; +} + +static inline VmathSoaVector3 vmathSoaV3MakeZAxis_V( ) +{ + VmathSoaVector3 result; + vmathSoaV3MakeZAxis(&result); + return result; +} + +static inline VmathSoaVector3 vmathSoaV3Lerp_V( vec_float4 t, VmathSoaVector3 vec0, VmathSoaVector3 vec1 ) +{ + VmathSoaVector3 result; + vmathSoaV3Lerp(&result, t, &vec0, &vec1); + return result; +} + +static inline VmathSoaVector3 vmathSoaV3Slerp_V( vec_float4 t, VmathSoaVector3 unitVec0, VmathSoaVector3 unitVec1 ) +{ + VmathSoaVector3 result; + vmathSoaV3Slerp(&result, t, &unitVec0, &unitVec1); + return result; +} + +static inline void vmathSoaV3Get4Aos_V( VmathSoaVector3 vec, VmathVector3 *result0, VmathVector3 *result1, VmathVector3 *result2, VmathVector3 *result3 ) +{ + vmathSoaV3Get4Aos(&vec, result0, result1, result2, result3); +} + +static inline void vmathSoaV3LoadXYZArray_V( VmathSoaVector3 *vec, const vec_float4 *threeQuads ) +{ + vmathSoaV3LoadXYZArray(vec, threeQuads); +} + +static inline void vmathSoaV3StoreXYZArray_V( VmathSoaVector3 vec, vec_float4 *threeQuads ) +{ + vmathSoaV3StoreXYZArray(&vec, threeQuads); +} + +static inline void vmathSoaV3StoreHalfFloats_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1, vec_ushort8 *threeQuads ) +{ + vmathSoaV3StoreHalfFloats(&vec0, &vec1, threeQuads); +} + +static inline void vmathSoaV3SetX_V( VmathSoaVector3 *result, vec_float4 _x ) +{ + vmathSoaV3SetX(result, _x); +} + +static inline vec_float4 vmathSoaV3GetX_V( VmathSoaVector3 vec ) +{ + return vmathSoaV3GetX(&vec); +} + +static inline void vmathSoaV3SetY_V( VmathSoaVector3 *result, vec_float4 _y ) +{ + vmathSoaV3SetY(result, _y); +} + +static inline vec_float4 vmathSoaV3GetY_V( VmathSoaVector3 vec ) +{ + return vmathSoaV3GetY(&vec); +} + +static inline void vmathSoaV3SetZ_V( VmathSoaVector3 *result, vec_float4 _z ) +{ + vmathSoaV3SetZ(result, _z); +} + +static inline vec_float4 vmathSoaV3GetZ_V( VmathSoaVector3 vec ) +{ + return vmathSoaV3GetZ(&vec); +} + +static inline void vmathSoaV3SetElem_V( VmathSoaVector3 *result, int idx, vec_float4 value ) +{ + vmathSoaV3SetElem(result, idx, value); +} + +static inline vec_float4 vmathSoaV3GetElem_V( VmathSoaVector3 vec, int idx ) +{ + return vmathSoaV3GetElem(&vec, idx); +} + +static inline VmathSoaVector3 vmathSoaV3Add_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1 ) +{ + VmathSoaVector3 result; + vmathSoaV3Add(&result, &vec0, &vec1); + return result; +} + +static inline VmathSoaVector3 vmathSoaV3Sub_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1 ) +{ + VmathSoaVector3 result; + vmathSoaV3Sub(&result, &vec0, &vec1); + return result; +} + +static inline VmathSoaPoint3 vmathSoaV3AddP3_V( VmathSoaVector3 vec, VmathSoaPoint3 pnt1 ) +{ + VmathSoaPoint3 result; + vmathSoaV3AddP3(&result, &vec, &pnt1); + return result; +} + +static inline VmathSoaVector3 vmathSoaV3ScalarMul_V( VmathSoaVector3 vec, vec_float4 scalar ) +{ + VmathSoaVector3 result; + vmathSoaV3ScalarMul(&result, &vec, scalar); + return result; +} + +static inline VmathSoaVector3 vmathSoaV3ScalarDiv_V( VmathSoaVector3 vec, vec_float4 scalar ) +{ + VmathSoaVector3 result; + vmathSoaV3ScalarDiv(&result, &vec, scalar); + return result; +} + +static inline VmathSoaVector3 vmathSoaV3Neg_V( VmathSoaVector3 vec ) +{ + VmathSoaVector3 result; + vmathSoaV3Neg(&result, &vec); + return result; +} + +static inline VmathSoaVector3 vmathSoaV3MulPerElem_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1 ) +{ + VmathSoaVector3 result; + vmathSoaV3MulPerElem(&result, &vec0, &vec1); + return result; +} + +static inline VmathSoaVector3 vmathSoaV3DivPerElem_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1 ) +{ + VmathSoaVector3 result; + vmathSoaV3DivPerElem(&result, &vec0, &vec1); + return result; +} + +static inline VmathSoaVector3 vmathSoaV3RecipPerElem_V( VmathSoaVector3 vec ) +{ + VmathSoaVector3 result; + vmathSoaV3RecipPerElem(&result, &vec); + return result; +} + +static inline VmathSoaVector3 vmathSoaV3SqrtPerElem_V( VmathSoaVector3 vec ) +{ + VmathSoaVector3 result; + vmathSoaV3SqrtPerElem(&result, &vec); + return result; +} + +static inline VmathSoaVector3 vmathSoaV3RsqrtPerElem_V( VmathSoaVector3 vec ) +{ + VmathSoaVector3 result; + vmathSoaV3RsqrtPerElem(&result, &vec); + return result; +} + +static inline VmathSoaVector3 vmathSoaV3AbsPerElem_V( VmathSoaVector3 vec ) +{ + VmathSoaVector3 result; + vmathSoaV3AbsPerElem(&result, &vec); + return result; +} + +static inline VmathSoaVector3 vmathSoaV3CopySignPerElem_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1 ) +{ + VmathSoaVector3 result; + vmathSoaV3CopySignPerElem(&result, &vec0, &vec1); + return result; +} + +static inline VmathSoaVector3 vmathSoaV3MaxPerElem_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1 ) +{ + VmathSoaVector3 result; + vmathSoaV3MaxPerElem(&result, &vec0, &vec1); + return result; +} + +static inline vec_float4 vmathSoaV3MaxElem_V( VmathSoaVector3 vec ) +{ + return vmathSoaV3MaxElem(&vec); +} + +static inline VmathSoaVector3 vmathSoaV3MinPerElem_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1 ) +{ + VmathSoaVector3 result; + vmathSoaV3MinPerElem(&result, &vec0, &vec1); + return result; +} + +static inline vec_float4 vmathSoaV3MinElem_V( VmathSoaVector3 vec ) +{ + return vmathSoaV3MinElem(&vec); +} + +static inline vec_float4 vmathSoaV3Sum_V( VmathSoaVector3 vec ) +{ + return vmathSoaV3Sum(&vec); +} + +static inline vec_float4 vmathSoaV3Dot_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1 ) +{ + return vmathSoaV3Dot(&vec0, &vec1); +} + +static inline vec_float4 vmathSoaV3LengthSqr_V( VmathSoaVector3 vec ) +{ + return vmathSoaV3LengthSqr(&vec); +} + +static inline vec_float4 vmathSoaV3Length_V( VmathSoaVector3 vec ) +{ + return vmathSoaV3Length(&vec); +} + +static inline VmathSoaVector3 vmathSoaV3Normalize_V( VmathSoaVector3 vec ) +{ + VmathSoaVector3 result; + vmathSoaV3Normalize(&result, &vec); + return result; +} + +static inline VmathSoaVector3 vmathSoaV3Cross_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1 ) +{ + VmathSoaVector3 result; + vmathSoaV3Cross(&result, &vec0, &vec1); + return result; +} + +static inline VmathSoaVector3 vmathSoaV3Select_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1, vec_uint4 select1 ) +{ + VmathSoaVector3 result; + vmathSoaV3Select(&result, &vec0, &vec1, select1); + return result; +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathSoaV3Print_V( VmathSoaVector3 vec ) +{ + vmathSoaV3Print(&vec); +} + +static inline void vmathSoaV3Prints_V( VmathSoaVector3 vec, const char *name ) +{ + vmathSoaV3Prints(&vec, name); +} + +#endif + +static inline VmathSoaVector4 vmathSoaV4MakeFromElems_V( vec_float4 _x, vec_float4 _y, vec_float4 _z, vec_float4 _w ) +{ + VmathSoaVector4 result; + vmathSoaV4MakeFromElems(&result, _x, _y, _z, _w); + return result; +} + +static inline VmathSoaVector4 vmathSoaV4MakeFromV3Scalar_V( VmathSoaVector3 xyz, vec_float4 _w ) +{ + VmathSoaVector4 result; + vmathSoaV4MakeFromV3Scalar(&result, &xyz, _w); + return result; +} + +static inline VmathSoaVector4 vmathSoaV4MakeFromV3_V( VmathSoaVector3 vec ) +{ + VmathSoaVector4 result; + vmathSoaV4MakeFromV3(&result, &vec); + return result; +} + +static inline VmathSoaVector4 vmathSoaV4MakeFromP3_V( VmathSoaPoint3 pnt ) +{ + VmathSoaVector4 result; + vmathSoaV4MakeFromP3(&result, &pnt); + return result; +} + +static inline VmathSoaVector4 vmathSoaV4MakeFromQ_V( VmathSoaQuat quat ) +{ + VmathSoaVector4 result; + vmathSoaV4MakeFromQ(&result, &quat); + return result; +} + +static inline VmathSoaVector4 vmathSoaV4MakeFromScalar_V( vec_float4 scalar ) +{ + VmathSoaVector4 result; + vmathSoaV4MakeFromScalar(&result, scalar); + return result; +} + +static inline VmathSoaVector4 vmathSoaV4MakeFromAos_V( VmathVector4 vec ) +{ + VmathSoaVector4 result; + vmathSoaV4MakeFromAos(&result, &vec); + return result; +} + +static inline VmathSoaVector4 vmathSoaV4MakeFrom4Aos_V( VmathVector4 vec0, VmathVector4 vec1, VmathVector4 vec2, VmathVector4 vec3 ) +{ + VmathSoaVector4 result; + vmathSoaV4MakeFrom4Aos(&result, &vec0, &vec1, &vec2, &vec3); + return result; +} + +static inline VmathSoaVector4 vmathSoaV4MakeXAxis_V( ) +{ + VmathSoaVector4 result; + vmathSoaV4MakeXAxis(&result); + return result; +} + +static inline VmathSoaVector4 vmathSoaV4MakeYAxis_V( ) +{ + VmathSoaVector4 result; + vmathSoaV4MakeYAxis(&result); + return result; +} + +static inline VmathSoaVector4 vmathSoaV4MakeZAxis_V( ) +{ + VmathSoaVector4 result; + vmathSoaV4MakeZAxis(&result); + return result; +} + +static inline VmathSoaVector4 vmathSoaV4MakeWAxis_V( ) +{ + VmathSoaVector4 result; + vmathSoaV4MakeWAxis(&result); + return result; +} + +static inline VmathSoaVector4 vmathSoaV4Lerp_V( vec_float4 t, VmathSoaVector4 vec0, VmathSoaVector4 vec1 ) +{ + VmathSoaVector4 result; + vmathSoaV4Lerp(&result, t, &vec0, &vec1); + return result; +} + +static inline VmathSoaVector4 vmathSoaV4Slerp_V( vec_float4 t, VmathSoaVector4 unitVec0, VmathSoaVector4 unitVec1 ) +{ + VmathSoaVector4 result; + vmathSoaV4Slerp(&result, t, &unitVec0, &unitVec1); + return result; +} + +static inline void vmathSoaV4Get4Aos_V( VmathSoaVector4 vec, VmathVector4 *result0, VmathVector4 *result1, VmathVector4 *result2, VmathVector4 *result3 ) +{ + vmathSoaV4Get4Aos(&vec, result0, result1, result2, result3); +} + +static inline void vmathSoaV4StoreHalfFloats_V( VmathSoaVector4 vec, vec_ushort8 *twoQuads ) +{ + vmathSoaV4StoreHalfFloats(&vec, twoQuads); +} + +static inline void vmathSoaV4SetXYZ_V( VmathSoaVector4 *result, VmathSoaVector3 vec ) +{ + vmathSoaV4SetXYZ(result, &vec); +} + +static inline VmathSoaVector3 vmathSoaV4GetXYZ_V( VmathSoaVector4 vec ) +{ + VmathSoaVector3 result; + vmathSoaV4GetXYZ(&result, &vec); + return result; +} + +static inline void vmathSoaV4SetX_V( VmathSoaVector4 *result, vec_float4 _x ) +{ + vmathSoaV4SetX(result, _x); +} + +static inline vec_float4 vmathSoaV4GetX_V( VmathSoaVector4 vec ) +{ + return vmathSoaV4GetX(&vec); +} + +static inline void vmathSoaV4SetY_V( VmathSoaVector4 *result, vec_float4 _y ) +{ + vmathSoaV4SetY(result, _y); +} + +static inline vec_float4 vmathSoaV4GetY_V( VmathSoaVector4 vec ) +{ + return vmathSoaV4GetY(&vec); +} + +static inline void vmathSoaV4SetZ_V( VmathSoaVector4 *result, vec_float4 _z ) +{ + vmathSoaV4SetZ(result, _z); +} + +static inline vec_float4 vmathSoaV4GetZ_V( VmathSoaVector4 vec ) +{ + return vmathSoaV4GetZ(&vec); +} + +static inline void vmathSoaV4SetW_V( VmathSoaVector4 *result, vec_float4 _w ) +{ + vmathSoaV4SetW(result, _w); +} + +static inline vec_float4 vmathSoaV4GetW_V( VmathSoaVector4 vec ) +{ + return vmathSoaV4GetW(&vec); +} + +static inline void vmathSoaV4SetElem_V( VmathSoaVector4 *result, int idx, vec_float4 value ) +{ + vmathSoaV4SetElem(result, idx, value); +} + +static inline vec_float4 vmathSoaV4GetElem_V( VmathSoaVector4 vec, int idx ) +{ + return vmathSoaV4GetElem(&vec, idx); +} + +static inline VmathSoaVector4 vmathSoaV4Add_V( VmathSoaVector4 vec0, VmathSoaVector4 vec1 ) +{ + VmathSoaVector4 result; + vmathSoaV4Add(&result, &vec0, &vec1); + return result; +} + +static inline VmathSoaVector4 vmathSoaV4Sub_V( VmathSoaVector4 vec0, VmathSoaVector4 vec1 ) +{ + VmathSoaVector4 result; + vmathSoaV4Sub(&result, &vec0, &vec1); + return result; +} + +static inline VmathSoaVector4 vmathSoaV4ScalarMul_V( VmathSoaVector4 vec, vec_float4 scalar ) +{ + VmathSoaVector4 result; + vmathSoaV4ScalarMul(&result, &vec, scalar); + return result; +} + +static inline VmathSoaVector4 vmathSoaV4ScalarDiv_V( VmathSoaVector4 vec, vec_float4 scalar ) +{ + VmathSoaVector4 result; + vmathSoaV4ScalarDiv(&result, &vec, scalar); + return result; +} + +static inline VmathSoaVector4 vmathSoaV4Neg_V( VmathSoaVector4 vec ) +{ + VmathSoaVector4 result; + vmathSoaV4Neg(&result, &vec); + return result; +} + +static inline VmathSoaVector4 vmathSoaV4MulPerElem_V( VmathSoaVector4 vec0, VmathSoaVector4 vec1 ) +{ + VmathSoaVector4 result; + vmathSoaV4MulPerElem(&result, &vec0, &vec1); + return result; +} + +static inline VmathSoaVector4 vmathSoaV4DivPerElem_V( VmathSoaVector4 vec0, VmathSoaVector4 vec1 ) +{ + VmathSoaVector4 result; + vmathSoaV4DivPerElem(&result, &vec0, &vec1); + return result; +} + +static inline VmathSoaVector4 vmathSoaV4RecipPerElem_V( VmathSoaVector4 vec ) +{ + VmathSoaVector4 result; + vmathSoaV4RecipPerElem(&result, &vec); + return result; +} + +static inline VmathSoaVector4 vmathSoaV4SqrtPerElem_V( VmathSoaVector4 vec ) +{ + VmathSoaVector4 result; + vmathSoaV4SqrtPerElem(&result, &vec); + return result; +} + +static inline VmathSoaVector4 vmathSoaV4RsqrtPerElem_V( VmathSoaVector4 vec ) +{ + VmathSoaVector4 result; + vmathSoaV4RsqrtPerElem(&result, &vec); + return result; +} + +static inline VmathSoaVector4 vmathSoaV4AbsPerElem_V( VmathSoaVector4 vec ) +{ + VmathSoaVector4 result; + vmathSoaV4AbsPerElem(&result, &vec); + return result; +} + +static inline VmathSoaVector4 vmathSoaV4CopySignPerElem_V( VmathSoaVector4 vec0, VmathSoaVector4 vec1 ) +{ + VmathSoaVector4 result; + vmathSoaV4CopySignPerElem(&result, &vec0, &vec1); + return result; +} + +static inline VmathSoaVector4 vmathSoaV4MaxPerElem_V( VmathSoaVector4 vec0, VmathSoaVector4 vec1 ) +{ + VmathSoaVector4 result; + vmathSoaV4MaxPerElem(&result, &vec0, &vec1); + return result; +} + +static inline vec_float4 vmathSoaV4MaxElem_V( VmathSoaVector4 vec ) +{ + return vmathSoaV4MaxElem(&vec); +} + +static inline VmathSoaVector4 vmathSoaV4MinPerElem_V( VmathSoaVector4 vec0, VmathSoaVector4 vec1 ) +{ + VmathSoaVector4 result; + vmathSoaV4MinPerElem(&result, &vec0, &vec1); + return result; +} + +static inline vec_float4 vmathSoaV4MinElem_V( VmathSoaVector4 vec ) +{ + return vmathSoaV4MinElem(&vec); +} + +static inline vec_float4 vmathSoaV4Sum_V( VmathSoaVector4 vec ) +{ + return vmathSoaV4Sum(&vec); +} + +static inline vec_float4 vmathSoaV4Dot_V( VmathSoaVector4 vec0, VmathSoaVector4 vec1 ) +{ + return vmathSoaV4Dot(&vec0, &vec1); +} + +static inline vec_float4 vmathSoaV4LengthSqr_V( VmathSoaVector4 vec ) +{ + return vmathSoaV4LengthSqr(&vec); +} + +static inline vec_float4 vmathSoaV4Length_V( VmathSoaVector4 vec ) +{ + return vmathSoaV4Length(&vec); +} + +static inline VmathSoaVector4 vmathSoaV4Normalize_V( VmathSoaVector4 vec ) +{ + VmathSoaVector4 result; + vmathSoaV4Normalize(&result, &vec); + return result; +} + +static inline VmathSoaVector4 vmathSoaV4Select_V( VmathSoaVector4 vec0, VmathSoaVector4 vec1, vec_uint4 select1 ) +{ + VmathSoaVector4 result; + vmathSoaV4Select(&result, &vec0, &vec1, select1); + return result; +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathSoaV4Print_V( VmathSoaVector4 vec ) +{ + vmathSoaV4Print(&vec); +} + +static inline void vmathSoaV4Prints_V( VmathSoaVector4 vec, const char *name ) +{ + vmathSoaV4Prints(&vec, name); +} + +#endif + +static inline VmathSoaPoint3 vmathSoaP3MakeFromElems_V( vec_float4 _x, vec_float4 _y, vec_float4 _z ) +{ + VmathSoaPoint3 result; + vmathSoaP3MakeFromElems(&result, _x, _y, _z); + return result; +} + +static inline VmathSoaPoint3 vmathSoaP3MakeFromV3_V( VmathSoaVector3 vec ) +{ + VmathSoaPoint3 result; + vmathSoaP3MakeFromV3(&result, &vec); + return result; +} + +static inline VmathSoaPoint3 vmathSoaP3MakeFromScalar_V( vec_float4 scalar ) +{ + VmathSoaPoint3 result; + vmathSoaP3MakeFromScalar(&result, scalar); + return result; +} + +static inline VmathSoaPoint3 vmathSoaP3MakeFromAos_V( VmathPoint3 pnt ) +{ + VmathSoaPoint3 result; + vmathSoaP3MakeFromAos(&result, &pnt); + return result; +} + +static inline VmathSoaPoint3 vmathSoaP3MakeFrom4Aos_V( VmathPoint3 pnt0, VmathPoint3 pnt1, VmathPoint3 pnt2, VmathPoint3 pnt3 ) +{ + VmathSoaPoint3 result; + vmathSoaP3MakeFrom4Aos(&result, &pnt0, &pnt1, &pnt2, &pnt3); + return result; +} + +static inline VmathSoaPoint3 vmathSoaP3Lerp_V( vec_float4 t, VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1 ) +{ + VmathSoaPoint3 result; + vmathSoaP3Lerp(&result, t, &pnt0, &pnt1); + return result; +} + +static inline void vmathSoaP3Get4Aos_V( VmathSoaPoint3 pnt, VmathPoint3 *result0, VmathPoint3 *result1, VmathPoint3 *result2, VmathPoint3 *result3 ) +{ + vmathSoaP3Get4Aos(&pnt, result0, result1, result2, result3); +} + +static inline void vmathSoaP3LoadXYZArray_V( VmathSoaPoint3 *vec, const vec_float4 *threeQuads ) +{ + vmathSoaP3LoadXYZArray(vec, threeQuads); +} + +static inline void vmathSoaP3StoreXYZArray_V( VmathSoaPoint3 vec, vec_float4 *threeQuads ) +{ + vmathSoaP3StoreXYZArray(&vec, threeQuads); +} + +static inline void vmathSoaP3StoreHalfFloats_V( VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1, vec_ushort8 *threeQuads ) +{ + vmathSoaP3StoreHalfFloats(&pnt0, &pnt1, threeQuads); +} + +static inline void vmathSoaP3SetX_V( VmathSoaPoint3 *result, vec_float4 _x ) +{ + vmathSoaP3SetX(result, _x); +} + +static inline vec_float4 vmathSoaP3GetX_V( VmathSoaPoint3 pnt ) +{ + return vmathSoaP3GetX(&pnt); +} + +static inline void vmathSoaP3SetY_V( VmathSoaPoint3 *result, vec_float4 _y ) +{ + vmathSoaP3SetY(result, _y); +} + +static inline vec_float4 vmathSoaP3GetY_V( VmathSoaPoint3 pnt ) +{ + return vmathSoaP3GetY(&pnt); +} + +static inline void vmathSoaP3SetZ_V( VmathSoaPoint3 *result, vec_float4 _z ) +{ + vmathSoaP3SetZ(result, _z); +} + +static inline vec_float4 vmathSoaP3GetZ_V( VmathSoaPoint3 pnt ) +{ + return vmathSoaP3GetZ(&pnt); +} + +static inline void vmathSoaP3SetElem_V( VmathSoaPoint3 *result, int idx, vec_float4 value ) +{ + vmathSoaP3SetElem(result, idx, value); +} + +static inline vec_float4 vmathSoaP3GetElem_V( VmathSoaPoint3 pnt, int idx ) +{ + return vmathSoaP3GetElem(&pnt, idx); +} + +static inline VmathSoaVector3 vmathSoaP3Sub_V( VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1 ) +{ + VmathSoaVector3 result; + vmathSoaP3Sub(&result, &pnt0, &pnt1); + return result; +} + +static inline VmathSoaPoint3 vmathSoaP3AddV3_V( VmathSoaPoint3 pnt, VmathSoaVector3 vec1 ) +{ + VmathSoaPoint3 result; + vmathSoaP3AddV3(&result, &pnt, &vec1); + return result; +} + +static inline VmathSoaPoint3 vmathSoaP3SubV3_V( VmathSoaPoint3 pnt, VmathSoaVector3 vec1 ) +{ + VmathSoaPoint3 result; + vmathSoaP3SubV3(&result, &pnt, &vec1); + return result; +} + +static inline VmathSoaPoint3 vmathSoaP3MulPerElem_V( VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1 ) +{ + VmathSoaPoint3 result; + vmathSoaP3MulPerElem(&result, &pnt0, &pnt1); + return result; +} + +static inline VmathSoaPoint3 vmathSoaP3DivPerElem_V( VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1 ) +{ + VmathSoaPoint3 result; + vmathSoaP3DivPerElem(&result, &pnt0, &pnt1); + return result; +} + +static inline VmathSoaPoint3 vmathSoaP3RecipPerElem_V( VmathSoaPoint3 pnt ) +{ + VmathSoaPoint3 result; + vmathSoaP3RecipPerElem(&result, &pnt); + return result; +} + +static inline VmathSoaPoint3 vmathSoaP3SqrtPerElem_V( VmathSoaPoint3 pnt ) +{ + VmathSoaPoint3 result; + vmathSoaP3SqrtPerElem(&result, &pnt); + return result; +} + +static inline VmathSoaPoint3 vmathSoaP3RsqrtPerElem_V( VmathSoaPoint3 pnt ) +{ + VmathSoaPoint3 result; + vmathSoaP3RsqrtPerElem(&result, &pnt); + return result; +} + +static inline VmathSoaPoint3 vmathSoaP3AbsPerElem_V( VmathSoaPoint3 pnt ) +{ + VmathSoaPoint3 result; + vmathSoaP3AbsPerElem(&result, &pnt); + return result; +} + +static inline VmathSoaPoint3 vmathSoaP3CopySignPerElem_V( VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1 ) +{ + VmathSoaPoint3 result; + vmathSoaP3CopySignPerElem(&result, &pnt0, &pnt1); + return result; +} + +static inline VmathSoaPoint3 vmathSoaP3MaxPerElem_V( VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1 ) +{ + VmathSoaPoint3 result; + vmathSoaP3MaxPerElem(&result, &pnt0, &pnt1); + return result; +} + +static inline vec_float4 vmathSoaP3MaxElem_V( VmathSoaPoint3 pnt ) +{ + return vmathSoaP3MaxElem(&pnt); +} + +static inline VmathSoaPoint3 vmathSoaP3MinPerElem_V( VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1 ) +{ + VmathSoaPoint3 result; + vmathSoaP3MinPerElem(&result, &pnt0, &pnt1); + return result; +} + +static inline vec_float4 vmathSoaP3MinElem_V( VmathSoaPoint3 pnt ) +{ + return vmathSoaP3MinElem(&pnt); +} + +static inline vec_float4 vmathSoaP3Sum_V( VmathSoaPoint3 pnt ) +{ + return vmathSoaP3Sum(&pnt); +} + +static inline VmathSoaPoint3 vmathSoaP3Scale_V( VmathSoaPoint3 pnt, vec_float4 scaleVal ) +{ + VmathSoaPoint3 result; + vmathSoaP3Scale(&result, &pnt, scaleVal); + return result; +} + +static inline VmathSoaPoint3 vmathSoaP3NonUniformScale_V( VmathSoaPoint3 pnt, VmathSoaVector3 scaleVec ) +{ + VmathSoaPoint3 result; + vmathSoaP3NonUniformScale(&result, &pnt, &scaleVec); + return result; +} + +static inline vec_float4 vmathSoaP3Projection_V( VmathSoaPoint3 pnt, VmathSoaVector3 unitVec ) +{ + return vmathSoaP3Projection(&pnt, &unitVec); +} + +static inline vec_float4 vmathSoaP3DistSqrFromOrigin_V( VmathSoaPoint3 pnt ) +{ + return vmathSoaP3DistSqrFromOrigin(&pnt); +} + +static inline vec_float4 vmathSoaP3DistFromOrigin_V( VmathSoaPoint3 pnt ) +{ + return vmathSoaP3DistFromOrigin(&pnt); +} + +static inline vec_float4 vmathSoaP3DistSqr_V( VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1 ) +{ + return vmathSoaP3DistSqr(&pnt0, &pnt1); +} + +static inline vec_float4 vmathSoaP3Dist_V( VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1 ) +{ + return vmathSoaP3Dist(&pnt0, &pnt1); +} + +static inline VmathSoaPoint3 vmathSoaP3Select_V( VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1, vec_uint4 select1 ) +{ + VmathSoaPoint3 result; + vmathSoaP3Select(&result, &pnt0, &pnt1, select1); + return result; +} + +#ifdef _VECTORMATH_DEBUG + +static inline void vmathSoaP3Print_V( VmathSoaPoint3 pnt ) +{ + vmathSoaP3Print(&pnt); +} + +static inline void vmathSoaP3Prints_V( VmathSoaPoint3 pnt, const char *name ) +{ + vmathSoaP3Prints(&pnt, name); +} + +#endif + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/spu/c/vectormath_aos.h b/Extras/vectormathlibrary/include/vectormath/spu/c/vectormath_aos.h new file mode 100644 index 000000000..12ee919da --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/spu/c/vectormath_aos.h @@ -0,0 +1,1952 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_AOS_C_H +#define _VECTORMATH_AOS_C_H + +#include +#include "spu2vmx.h" +#include "simdmath.h" +#include "stdio.h" + +#ifdef _VECTORMATH_DEBUG +#endif + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#ifndef _VECTORMATH_AOS_C_TYPES_H +#define _VECTORMATH_AOS_C_TYPES_H + +/* A 3-D vector in array-of-structures format + */ +typedef struct _VmathVector3 +{ + vec_float4 vec128; +} VmathVector3; + +/* A 4-D vector in array-of-structures format + */ +typedef struct _VmathVector4 +{ + vec_float4 vec128; +} VmathVector4; + +/* A 3-D point in array-of-structures format + */ +typedef struct _VmathPoint3 +{ + vec_float4 vec128; +} VmathPoint3; + +/* A quaternion in array-of-structures format + */ +typedef struct _VmathQuat +{ + vec_float4 vec128; +} VmathQuat; + +/* A 3x3 matrix in array-of-structures format + */ +typedef struct _VmathMatrix3 +{ + VmathVector3 col0; + VmathVector3 col1; + VmathVector3 col2; +} VmathMatrix3; + +/* A 4x4 matrix in array-of-structures format + */ +typedef struct _VmathMatrix4 +{ + VmathVector4 col0; + VmathVector4 col1; + VmathVector4 col2; + VmathVector4 col3; +} VmathMatrix4; + +/* A 3x4 transformation matrix in array-of-structures format + */ +typedef struct _VmathTransform3 +{ + VmathVector3 col0; + VmathVector3 col1; + VmathVector3 col2; + VmathVector3 col3; +} VmathTransform3; + +#endif + +/* + * Copy a 3-D vector + */ +static inline void vmathV3Copy( VmathVector3 *result, const VmathVector3 *vec ); + +/* + * Construct a 3-D vector from x, y, and z elements + */ +static inline void vmathV3MakeFromElems( VmathVector3 *result, float x, float y, float z ); + +/* + * Copy elements from a 3-D point into a 3-D vector + */ +static inline void vmathV3MakeFromP3( VmathVector3 *result, const VmathPoint3 *pnt ); + +/* + * Set all elements of a 3-D vector to the same scalar value + */ +static inline void vmathV3MakeFromScalar( VmathVector3 *result, float scalar ); + +/* + * Set vector float data in a 3-D vector + */ +static inline void vmathV3MakeFrom128( VmathVector3 *result, vec_float4 vf4 ); + +/* + * Get vector float data from a 3-D vector + */ +static inline vec_float4 vmathV3Get128( const VmathVector3 *vec ); + +/* + * Set the x element of a 3-D vector + */ +static inline void vmathV3SetX( VmathVector3 *result, float x ); + +/* + * Set the y element of a 3-D vector + */ +static inline void vmathV3SetY( VmathVector3 *result, float y ); + +/* + * Set the z element of a 3-D vector + */ +static inline void vmathV3SetZ( VmathVector3 *result, float z ); + +/* + * Get the x element of a 3-D vector + */ +static inline float vmathV3GetX( const VmathVector3 *vec ); + +/* + * Get the y element of a 3-D vector + */ +static inline float vmathV3GetY( const VmathVector3 *vec ); + +/* + * Get the z element of a 3-D vector + */ +static inline float vmathV3GetZ( const VmathVector3 *vec ); + +/* + * Set an x, y, or z element of a 3-D vector by index + */ +static inline void vmathV3SetElem( VmathVector3 *result, int idx, float value ); + +/* + * Get an x, y, or z element of a 3-D vector by index + */ +static inline float vmathV3GetElem( const VmathVector3 *vec, int idx ); + +/* + * Add two 3-D vectors + */ +static inline void vmathV3Add( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1 ); + +/* + * Subtract a 3-D vector from another 3-D vector + */ +static inline void vmathV3Sub( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1 ); + +/* + * Add a 3-D vector to a 3-D point + */ +static inline void vmathV3AddP3( VmathPoint3 *result, const VmathVector3 *vec, const VmathPoint3 *pnt ); + +/* + * Multiply a 3-D vector by a scalar + */ +static inline void vmathV3ScalarMul( VmathVector3 *result, const VmathVector3 *vec, float scalar ); + +/* + * Divide a 3-D vector by a scalar + */ +static inline void vmathV3ScalarDiv( VmathVector3 *result, const VmathVector3 *vec, float scalar ); + +/* + * Negate all elements of a 3-D vector + */ +static inline void vmathV3Neg( VmathVector3 *result, const VmathVector3 *vec ); + +/* + * Construct x axis + */ +static inline void vmathV3MakeXAxis( VmathVector3 *result ); + +/* + * Construct y axis + */ +static inline void vmathV3MakeYAxis( VmathVector3 *result ); + +/* + * Construct z axis + */ +static inline void vmathV3MakeZAxis( VmathVector3 *result ); + +/* + * Multiply two 3-D vectors per element + */ +static inline void vmathV3MulPerElem( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1 ); + +/* + * Divide two 3-D vectors per element + * NOTE: + * Floating-point behavior matches standard library function divf4. + */ +static inline void vmathV3DivPerElem( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1 ); + +/* + * Compute the reciprocal of a 3-D vector per element + * NOTE: + * Floating-point behavior matches standard library function recipf4. + */ +static inline void vmathV3RecipPerElem( VmathVector3 *result, const VmathVector3 *vec ); + +/* + * Compute the square root of a 3-D vector per element + * NOTE: + * Floating-point behavior matches standard library function sqrtf4. + */ +static inline void vmathV3SqrtPerElem( VmathVector3 *result, const VmathVector3 *vec ); + +/* + * Compute the reciprocal square root of a 3-D vector per element + * NOTE: + * Floating-point behavior matches standard library function rsqrtf4. + */ +static inline void vmathV3RsqrtPerElem( VmathVector3 *result, const VmathVector3 *vec ); + +/* + * Compute the absolute value of a 3-D vector per element + */ +static inline void vmathV3AbsPerElem( VmathVector3 *result, const VmathVector3 *vec ); + +/* + * Copy sign from one 3-D vector to another, per element + */ +static inline void vmathV3CopySignPerElem( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1 ); + +/* + * Maximum of two 3-D vectors per element + */ +static inline void vmathV3MaxPerElem( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1 ); + +/* + * Minimum of two 3-D vectors per element + */ +static inline void vmathV3MinPerElem( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1 ); + +/* + * Maximum element of a 3-D vector + */ +static inline float vmathV3MaxElem( const VmathVector3 *vec ); + +/* + * Minimum element of a 3-D vector + */ +static inline float vmathV3MinElem( const VmathVector3 *vec ); + +/* + * Compute the sum of all elements of a 3-D vector + */ +static inline float vmathV3Sum( const VmathVector3 *vec ); + +/* + * Compute the dot product of two 3-D vectors + */ +static inline float vmathV3Dot( const VmathVector3 *vec0, const VmathVector3 *vec1 ); + +/* + * Compute the square of the length of a 3-D vector + */ +static inline float vmathV3LengthSqr( const VmathVector3 *vec ); + +/* + * Compute the length of a 3-D vector + */ +static inline float vmathV3Length( const VmathVector3 *vec ); + +/* + * Normalize a 3-D vector + * NOTE: + * The result is unpredictable when all elements of vec are at or near zero. + */ +static inline void vmathV3Normalize( VmathVector3 *result, const VmathVector3 *vec ); + +/* + * Compute cross product of two 3-D vectors + */ +static inline void vmathV3Cross( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1 ); + +/* + * Outer product of two 3-D vectors + */ +static inline void vmathV3Outer( VmathMatrix3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1 ); + +/* + * Pre-multiply a row vector by a 3x3 matrix + * NOTE: + * Slower than column post-multiply. + */ +static inline void vmathV3RowMul( VmathVector3 *result, const VmathVector3 *vec, const VmathMatrix3 *mat ); + +/* + * Cross-product matrix of a 3-D vector + */ +static inline void vmathV3CrossMatrix( VmathMatrix3 *result, const VmathVector3 *vec ); + +/* + * Create cross-product matrix and multiply + * NOTE: + * Faster than separately creating a cross-product matrix and multiplying. + */ +static inline void vmathV3CrossMatrixMul( VmathMatrix3 *result, const VmathVector3 *vec, const VmathMatrix3 *mat ); + +/* + * Linear interpolation between two 3-D vectors + * NOTE: + * Does not clamp t between 0 and 1. + */ +static inline void vmathV3Lerp( VmathVector3 *result, float t, const VmathVector3 *vec0, const VmathVector3 *vec1 ); + +/* + * Spherical linear interpolation between two 3-D vectors + * NOTE: + * The result is unpredictable if the vectors point in opposite directions. + * Does not clamp t between 0 and 1. + */ +static inline void vmathV3Slerp( VmathVector3 *result, float t, const VmathVector3 *unitVec0, const VmathVector3 *unitVec1 ); + +/* + * Conditionally select between two 3-D vectors + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + */ +static inline void vmathV3Select( VmathVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1, unsigned int select1 ); + +/* + * Store x, y, and z elements of a 3-D vector in the first three words of a quadword. + * The value of the fourth word (the word with the highest address) remains unchanged + */ +static inline void vmathV3StoreXYZ( const VmathVector3 *vec, vec_float4 *quad ); + +/* + * Load four three-float 3-D vectors, stored in three quadwords + */ +static inline void vmathV3LoadXYZArray( VmathVector3 *vec0, VmathVector3 *vec1, VmathVector3 *vec2, VmathVector3 *vec3, const vec_float4 *threeQuads ); + +/* + * Store four 3-D vectors in three quadwords + */ +static inline void vmathV3StoreXYZArray( const VmathVector3 *vec0, const VmathVector3 *vec1, const VmathVector3 *vec2, const VmathVector3 *vec3, vec_float4 *threeQuads ); + +/* + * Store eight 3-D vectors as half-floats + */ +static inline void vmathV3StoreHalfFloats( const VmathVector3 *vec0, const VmathVector3 *vec1, const VmathVector3 *vec2, const VmathVector3 *vec3, const VmathVector3 *vec4, const VmathVector3 *vec5, const VmathVector3 *vec6, const VmathVector3 *vec7, vec_ushort8 *threeQuads ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 3-D vector + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathV3Print( const VmathVector3 *vec ); + +/* + * Print a 3-D vector and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathV3Prints( const VmathVector3 *vec, const char *name ); + +#endif + +/* + * Copy a 4-D vector + */ +static inline void vmathV4Copy( VmathVector4 *result, const VmathVector4 *vec ); + +/* + * Construct a 4-D vector from x, y, z, and w elements + */ +static inline void vmathV4MakeFromElems( VmathVector4 *result, float x, float y, float z, float w ); + +/* + * Construct a 4-D vector from a 3-D vector and a scalar + */ +static inline void vmathV4MakeFromV3Scalar( VmathVector4 *result, const VmathVector3 *xyz, float w ); + +/* + * Copy x, y, and z from a 3-D vector into a 4-D vector, and set w to 0 + */ +static inline void vmathV4MakeFromV3( VmathVector4 *result, const VmathVector3 *vec ); + +/* + * Copy x, y, and z from a 3-D point into a 4-D vector, and set w to 1 + */ +static inline void vmathV4MakeFromP3( VmathVector4 *result, const VmathPoint3 *pnt ); + +/* + * Copy elements from a quaternion into a 4-D vector + */ +static inline void vmathV4MakeFromQ( VmathVector4 *result, const VmathQuat *quat ); + +/* + * Set all elements of a 4-D vector to the same scalar value + */ +static inline void vmathV4MakeFromScalar( VmathVector4 *result, float scalar ); + +/* + * Set vector float data in a 4-D vector + */ +static inline void vmathV4MakeFrom128( VmathVector4 *result, vec_float4 vf4 ); + +/* + * Get vector float data from a 4-D vector + */ +static inline vec_float4 vmathV4Get128( const VmathVector4 *vec ); + +/* + * Set the x, y, and z elements of a 4-D vector + * NOTE: + * This function does not change the w element. + */ +static inline void vmathV4SetXYZ( VmathVector4 *result, const VmathVector3 *vec ); + +/* + * Get the x, y, and z elements of a 4-D vector + */ +static inline void vmathV4GetXYZ( VmathVector3 *result, const VmathVector4 *vec ); + +/* + * Set the x element of a 4-D vector + */ +static inline void vmathV4SetX( VmathVector4 *result, float x ); + +/* + * Set the y element of a 4-D vector + */ +static inline void vmathV4SetY( VmathVector4 *result, float y ); + +/* + * Set the z element of a 4-D vector + */ +static inline void vmathV4SetZ( VmathVector4 *result, float z ); + +/* + * Set the w element of a 4-D vector + */ +static inline void vmathV4SetW( VmathVector4 *result, float w ); + +/* + * Get the x element of a 4-D vector + */ +static inline float vmathV4GetX( const VmathVector4 *vec ); + +/* + * Get the y element of a 4-D vector + */ +static inline float vmathV4GetY( const VmathVector4 *vec ); + +/* + * Get the z element of a 4-D vector + */ +static inline float vmathV4GetZ( const VmathVector4 *vec ); + +/* + * Get the w element of a 4-D vector + */ +static inline float vmathV4GetW( const VmathVector4 *vec ); + +/* + * Set an x, y, z, or w element of a 4-D vector by index + */ +static inline void vmathV4SetElem( VmathVector4 *result, int idx, float value ); + +/* + * Get an x, y, z, or w element of a 4-D vector by index + */ +static inline float vmathV4GetElem( const VmathVector4 *vec, int idx ); + +/* + * Add two 4-D vectors + */ +static inline void vmathV4Add( VmathVector4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1 ); + +/* + * Subtract a 4-D vector from another 4-D vector + */ +static inline void vmathV4Sub( VmathVector4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1 ); + +/* + * Multiply a 4-D vector by a scalar + */ +static inline void vmathV4ScalarMul( VmathVector4 *result, const VmathVector4 *vec, float scalar ); + +/* + * Divide a 4-D vector by a scalar + */ +static inline void vmathV4ScalarDiv( VmathVector4 *result, const VmathVector4 *vec, float scalar ); + +/* + * Negate all elements of a 4-D vector + */ +static inline void vmathV4Neg( VmathVector4 *result, const VmathVector4 *vec ); + +/* + * Construct x axis + */ +static inline void vmathV4MakeXAxis( VmathVector4 *result ); + +/* + * Construct y axis + */ +static inline void vmathV4MakeYAxis( VmathVector4 *result ); + +/* + * Construct z axis + */ +static inline void vmathV4MakeZAxis( VmathVector4 *result ); + +/* + * Construct w axis + */ +static inline void vmathV4MakeWAxis( VmathVector4 *result ); + +/* + * Multiply two 4-D vectors per element + */ +static inline void vmathV4MulPerElem( VmathVector4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1 ); + +/* + * Divide two 4-D vectors per element + * NOTE: + * Floating-point behavior matches standard library function divf4. + */ +static inline void vmathV4DivPerElem( VmathVector4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1 ); + +/* + * Compute the reciprocal of a 4-D vector per element + * NOTE: + * Floating-point behavior matches standard library function recipf4. + */ +static inline void vmathV4RecipPerElem( VmathVector4 *result, const VmathVector4 *vec ); + +/* + * Compute the square root of a 4-D vector per element + * NOTE: + * Floating-point behavior matches standard library function sqrtf4. + */ +static inline void vmathV4SqrtPerElem( VmathVector4 *result, const VmathVector4 *vec ); + +/* + * Compute the reciprocal square root of a 4-D vector per element + * NOTE: + * Floating-point behavior matches standard library function rsqrtf4. + */ +static inline void vmathV4RsqrtPerElem( VmathVector4 *result, const VmathVector4 *vec ); + +/* + * Compute the absolute value of a 4-D vector per element + */ +static inline void vmathV4AbsPerElem( VmathVector4 *result, const VmathVector4 *vec ); + +/* + * Copy sign from one 4-D vector to another, per element + */ +static inline void vmathV4CopySignPerElem( VmathVector4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1 ); + +/* + * Maximum of two 4-D vectors per element + */ +static inline void vmathV4MaxPerElem( VmathVector4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1 ); + +/* + * Minimum of two 4-D vectors per element + */ +static inline void vmathV4MinPerElem( VmathVector4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1 ); + +/* + * Maximum element of a 4-D vector + */ +static inline float vmathV4MaxElem( const VmathVector4 *vec ); + +/* + * Minimum element of a 4-D vector + */ +static inline float vmathV4MinElem( const VmathVector4 *vec ); + +/* + * Compute the sum of all elements of a 4-D vector + */ +static inline float vmathV4Sum( const VmathVector4 *vec ); + +/* + * Compute the dot product of two 4-D vectors + */ +static inline float vmathV4Dot( const VmathVector4 *vec0, const VmathVector4 *vec1 ); + +/* + * Compute the square of the length of a 4-D vector + */ +static inline float vmathV4LengthSqr( const VmathVector4 *vec ); + +/* + * Compute the length of a 4-D vector + */ +static inline float vmathV4Length( const VmathVector4 *vec ); + +/* + * Normalize a 4-D vector + * NOTE: + * The result is unpredictable when all elements of vec are at or near zero. + */ +static inline void vmathV4Normalize( VmathVector4 *result, const VmathVector4 *vec ); + +/* + * Outer product of two 4-D vectors + */ +static inline void vmathV4Outer( VmathMatrix4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1 ); + +/* + * Linear interpolation between two 4-D vectors + * NOTE: + * Does not clamp t between 0 and 1. + */ +static inline void vmathV4Lerp( VmathVector4 *result, float t, const VmathVector4 *vec0, const VmathVector4 *vec1 ); + +/* + * Spherical linear interpolation between two 4-D vectors + * NOTE: + * The result is unpredictable if the vectors point in opposite directions. + * Does not clamp t between 0 and 1. + */ +static inline void vmathV4Slerp( VmathVector4 *result, float t, const VmathVector4 *unitVec0, const VmathVector4 *unitVec1 ); + +/* + * Conditionally select between two 4-D vectors + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + */ +static inline void vmathV4Select( VmathVector4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1, unsigned int select1 ); + +/* + * Store four 4-D vectors as half-floats + */ +static inline void vmathV4StoreHalfFloats( const VmathVector4 *vec0, const VmathVector4 *vec1, const VmathVector4 *vec2, const VmathVector4 *vec3, vec_ushort8 *twoQuads ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 4-D vector + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathV4Print( const VmathVector4 *vec ); + +/* + * Print a 4-D vector and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathV4Prints( const VmathVector4 *vec, const char *name ); + +#endif + +/* + * Copy a 3-D point + */ +static inline void vmathP3Copy( VmathPoint3 *result, const VmathPoint3 *pnt ); + +/* + * Construct a 3-D point from x, y, and z elements + */ +static inline void vmathP3MakeFromElems( VmathPoint3 *result, float x, float y, float z ); + +/* + * Copy elements from a 3-D vector into a 3-D point + */ +static inline void vmathP3MakeFromV3( VmathPoint3 *result, const VmathVector3 *vec ); + +/* + * Set all elements of a 3-D point to the same scalar value + */ +static inline void vmathP3MakeFromScalar( VmathPoint3 *result, float scalar ); + +/* + * Set vector float data in a 3-D point + */ +static inline void vmathP3MakeFrom128( VmathPoint3 *result, vec_float4 vf4 ); + +/* + * Get vector float data from a 3-D point + */ +static inline vec_float4 vmathP3Get128( const VmathPoint3 *pnt ); + +/* + * Set the x element of a 3-D point + */ +static inline void vmathP3SetX( VmathPoint3 *result, float x ); + +/* + * Set the y element of a 3-D point + */ +static inline void vmathP3SetY( VmathPoint3 *result, float y ); + +/* + * Set the z element of a 3-D point + */ +static inline void vmathP3SetZ( VmathPoint3 *result, float z ); + +/* + * Get the x element of a 3-D point + */ +static inline float vmathP3GetX( const VmathPoint3 *pnt ); + +/* + * Get the y element of a 3-D point + */ +static inline float vmathP3GetY( const VmathPoint3 *pnt ); + +/* + * Get the z element of a 3-D point + */ +static inline float vmathP3GetZ( const VmathPoint3 *pnt ); + +/* + * Set an x, y, or z element of a 3-D point by index + */ +static inline void vmathP3SetElem( VmathPoint3 *result, int idx, float value ); + +/* + * Get an x, y, or z element of a 3-D point by index + */ +static inline float vmathP3GetElem( const VmathPoint3 *pnt, int idx ); + +/* + * Subtract a 3-D point from another 3-D point + */ +static inline void vmathP3Sub( VmathVector3 *result, const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ); + +/* + * Add a 3-D point to a 3-D vector + */ +static inline void vmathP3AddV3( VmathPoint3 *result, const VmathPoint3 *pnt, const VmathVector3 *vec ); + +/* + * Subtract a 3-D vector from a 3-D point + */ +static inline void vmathP3SubV3( VmathPoint3 *result, const VmathPoint3 *pnt, const VmathVector3 *vec ); + +/* + * Multiply two 3-D points per element + */ +static inline void vmathP3MulPerElem( VmathPoint3 *result, const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ); + +/* + * Divide two 3-D points per element + * NOTE: + * Floating-point behavior matches standard library function divf4. + */ +static inline void vmathP3DivPerElem( VmathPoint3 *result, const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ); + +/* + * Compute the reciprocal of a 3-D point per element + * NOTE: + * Floating-point behavior matches standard library function recipf4. + */ +static inline void vmathP3RecipPerElem( VmathPoint3 *result, const VmathPoint3 *pnt ); + +/* + * Compute the square root of a 3-D point per element + * NOTE: + * Floating-point behavior matches standard library function sqrtf4. + */ +static inline void vmathP3SqrtPerElem( VmathPoint3 *result, const VmathPoint3 *pnt ); + +/* + * Compute the reciprocal square root of a 3-D point per element + * NOTE: + * Floating-point behavior matches standard library function rsqrtf4. + */ +static inline void vmathP3RsqrtPerElem( VmathPoint3 *result, const VmathPoint3 *pnt ); + +/* + * Compute the absolute value of a 3-D point per element + */ +static inline void vmathP3AbsPerElem( VmathPoint3 *result, const VmathPoint3 *pnt ); + +/* + * Copy sign from one 3-D point to another, per element + */ +static inline void vmathP3CopySignPerElem( VmathPoint3 *result, const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ); + +/* + * Maximum of two 3-D points per element + */ +static inline void vmathP3MaxPerElem( VmathPoint3 *result, const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ); + +/* + * Minimum of two 3-D points per element + */ +static inline void vmathP3MinPerElem( VmathPoint3 *result, const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ); + +/* + * Maximum element of a 3-D point + */ +static inline float vmathP3MaxElem( const VmathPoint3 *pnt ); + +/* + * Minimum element of a 3-D point + */ +static inline float vmathP3MinElem( const VmathPoint3 *pnt ); + +/* + * Compute the sum of all elements of a 3-D point + */ +static inline float vmathP3Sum( const VmathPoint3 *pnt ); + +/* + * Apply uniform scale to a 3-D point + */ +static inline void vmathP3Scale( VmathPoint3 *result, const VmathPoint3 *pnt, float scaleVal ); + +/* + * Apply non-uniform scale to a 3-D point + */ +static inline void vmathP3NonUniformScale( VmathPoint3 *result, const VmathPoint3 *pnt, const VmathVector3 *scaleVec ); + +/* + * Scalar projection of a 3-D point on a unit-length 3-D vector + */ +static inline float vmathP3Projection( const VmathPoint3 *pnt, const VmathVector3 *unitVec ); + +/* + * Compute the square of the distance of a 3-D point from the coordinate-system origin + */ +static inline float vmathP3DistSqrFromOrigin( const VmathPoint3 *pnt ); + +/* + * Compute the distance of a 3-D point from the coordinate-system origin + */ +static inline float vmathP3DistFromOrigin( const VmathPoint3 *pnt ); + +/* + * Compute the square of the distance between two 3-D points + */ +static inline float vmathP3DistSqr( const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ); + +/* + * Compute the distance between two 3-D points + */ +static inline float vmathP3Dist( const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ); + +/* + * Linear interpolation between two 3-D points + * NOTE: + * Does not clamp t between 0 and 1. + */ +static inline void vmathP3Lerp( VmathPoint3 *result, float t, const VmathPoint3 *pnt0, const VmathPoint3 *pnt1 ); + +/* + * Conditionally select between two 3-D points + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + */ +static inline void vmathP3Select( VmathPoint3 *result, const VmathPoint3 *pnt0, const VmathPoint3 *pnt1, unsigned int select1 ); + +/* + * Store x, y, and z elements of a 3-D point in the first three words of a quadword. + * The value of the fourth word (the word with the highest address) remains unchanged + */ +static inline void vmathP3StoreXYZ( const VmathPoint3 *pnt, vec_float4 *quad ); + +/* + * Load four three-float 3-D points, stored in three quadwords + */ +static inline void vmathP3LoadXYZArray( VmathPoint3 *pnt0, VmathPoint3 *pnt1, VmathPoint3 *pnt2, VmathPoint3 *pnt3, const vec_float4 *threeQuads ); + +/* + * Store four 3-D points in three quadwords + */ +static inline void vmathP3StoreXYZArray( const VmathPoint3 *pnt0, const VmathPoint3 *pnt1, const VmathPoint3 *pnt2, const VmathPoint3 *pnt3, vec_float4 *threeQuads ); + +/* + * Store eight 3-D points as half-floats + */ +static inline void vmathP3StoreHalfFloats( const VmathPoint3 *pnt0, const VmathPoint3 *pnt1, const VmathPoint3 *pnt2, const VmathPoint3 *pnt3, const VmathPoint3 *pnt4, const VmathPoint3 *pnt5, const VmathPoint3 *pnt6, const VmathPoint3 *pnt7, vec_ushort8 *threeQuads ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 3-D point + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathP3Print( const VmathPoint3 *pnt ); + +/* + * Print a 3-D point and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathP3Prints( const VmathPoint3 *pnt, const char *name ); + +#endif + +/* + * Copy a quaternion + */ +static inline void vmathQCopy( VmathQuat *result, const VmathQuat *quat ); + +/* + * Construct a quaternion from x, y, z, and w elements + */ +static inline void vmathQMakeFromElems( VmathQuat *result, float x, float y, float z, float w ); + +/* + * Construct a quaternion from a 3-D vector and a scalar + */ +static inline void vmathQMakeFromV3Scalar( VmathQuat *result, const VmathVector3 *xyz, float w ); + +/* + * Copy elements from a 4-D vector into a quaternion + */ +static inline void vmathQMakeFromV4( VmathQuat *result, const VmathVector4 *vec ); + +/* + * Convert a rotation matrix to a unit-length quaternion + */ +static inline void vmathQMakeFromM3( VmathQuat *result, const VmathMatrix3 *rotMat ); + +/* + * Set all elements of a quaternion to the same scalar value + */ +static inline void vmathQMakeFromScalar( VmathQuat *result, float scalar ); + +/* + * Set vector float data in a quaternion + */ +static inline void vmathQMakeFrom128( VmathQuat *result, vec_float4 vf4 ); + +/* + * Get vector float data from a quaternion + */ +static inline vec_float4 vmathQGet128( const VmathQuat *quat ); + +/* + * Set the x, y, and z elements of a quaternion + * NOTE: + * This function does not change the w element. + */ +static inline void vmathQSetXYZ( VmathQuat *result, const VmathVector3 *vec ); + +/* + * Get the x, y, and z elements of a quaternion + */ +static inline void vmathQGetXYZ( VmathVector3 *result, const VmathQuat *quat ); + +/* + * Set the x element of a quaternion + */ +static inline void vmathQSetX( VmathQuat *result, float x ); + +/* + * Set the y element of a quaternion + */ +static inline void vmathQSetY( VmathQuat *result, float y ); + +/* + * Set the z element of a quaternion + */ +static inline void vmathQSetZ( VmathQuat *result, float z ); + +/* + * Set the w element of a quaternion + */ +static inline void vmathQSetW( VmathQuat *result, float w ); + +/* + * Get the x element of a quaternion + */ +static inline float vmathQGetX( const VmathQuat *quat ); + +/* + * Get the y element of a quaternion + */ +static inline float vmathQGetY( const VmathQuat *quat ); + +/* + * Get the z element of a quaternion + */ +static inline float vmathQGetZ( const VmathQuat *quat ); + +/* + * Get the w element of a quaternion + */ +static inline float vmathQGetW( const VmathQuat *quat ); + +/* + * Set an x, y, z, or w element of a quaternion by index + */ +static inline void vmathQSetElem( VmathQuat *result, int idx, float value ); + +/* + * Get an x, y, z, or w element of a quaternion by index + */ +static inline float vmathQGetElem( const VmathQuat *quat, int idx ); + +/* + * Add two quaternions + */ +static inline void vmathQAdd( VmathQuat *result, const VmathQuat *quat0, const VmathQuat *quat1 ); + +/* + * Subtract a quaternion from another quaternion + */ +static inline void vmathQSub( VmathQuat *result, const VmathQuat *quat0, const VmathQuat *quat1 ); + +/* + * Multiply two quaternions + */ +static inline void vmathQMul( VmathQuat *result, const VmathQuat *quat0, const VmathQuat *quat1 ); + +/* + * Multiply a quaternion by a scalar + */ +static inline void vmathQScalarMul( VmathQuat *result, const VmathQuat *quat, float scalar ); + +/* + * Divide a quaternion by a scalar + */ +static inline void vmathQScalarDiv( VmathQuat *result, const VmathQuat *quat, float scalar ); + +/* + * Negate all elements of a quaternion + */ +static inline void vmathQNeg( VmathQuat *result, const VmathQuat *quat ); + +/* + * Construct an identity quaternion + */ +static inline void vmathQMakeIdentity( VmathQuat *result ); + +/* + * Construct a quaternion to rotate between two unit-length 3-D vectors + * NOTE: + * The result is unpredictable if unitVec0 and unitVec1 point in opposite directions. + */ +static inline void vmathQMakeRotationArc( VmathQuat *result, const VmathVector3 *unitVec0, const VmathVector3 *unitVec1 ); + +/* + * Construct a quaternion to rotate around a unit-length 3-D vector + */ +static inline void vmathQMakeRotationAxis( VmathQuat *result, float radians, const VmathVector3 *unitVec ); + +/* + * Construct a quaternion to rotate around the x axis + */ +static inline void vmathQMakeRotationX( VmathQuat *result, float radians ); + +/* + * Construct a quaternion to rotate around the y axis + */ +static inline void vmathQMakeRotationY( VmathQuat *result, float radians ); + +/* + * Construct a quaternion to rotate around the z axis + */ +static inline void vmathQMakeRotationZ( VmathQuat *result, float radians ); + +/* + * Compute the conjugate of a quaternion + */ +static inline void vmathQConj( VmathQuat *result, const VmathQuat *quat ); + +/* + * Use a unit-length quaternion to rotate a 3-D vector + */ +static inline void vmathQRotate( VmathVector3 *result, const VmathQuat *unitQuat, const VmathVector3 *vec ); + +/* + * Compute the dot product of two quaternions + */ +static inline float vmathQDot( const VmathQuat *quat0, const VmathQuat *quat1 ); + +/* + * Compute the norm of a quaternion + */ +static inline float vmathQNorm( const VmathQuat *quat ); + +/* + * Compute the length of a quaternion + */ +static inline float vmathQLength( const VmathQuat *quat ); + +/* + * Normalize a quaternion + * NOTE: + * The result is unpredictable when all elements of quat are at or near zero. + */ +static inline void vmathQNormalize( VmathQuat *result, const VmathQuat *quat ); + +/* + * Linear interpolation between two quaternions + * NOTE: + * Does not clamp t between 0 and 1. + */ +static inline void vmathQLerp( VmathQuat *result, float t, const VmathQuat *quat0, const VmathQuat *quat1 ); + +/* + * Spherical linear interpolation between two quaternions + * NOTE: + * Interpolates along the shortest path between orientations. + * Does not clamp t between 0 and 1. + */ +static inline void vmathQSlerp( VmathQuat *result, float t, const VmathQuat *unitQuat0, const VmathQuat *unitQuat1 ); + +/* + * Spherical quadrangle interpolation + */ +static inline void vmathQSquad( VmathQuat *result, float t, const VmathQuat *unitQuat0, const VmathQuat *unitQuat1, const VmathQuat *unitQuat2, const VmathQuat *unitQuat3 ); + +/* + * Conditionally select between two quaternions + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + */ +static inline void vmathQSelect( VmathQuat *result, const VmathQuat *quat0, const VmathQuat *quat1, unsigned int select1 ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a quaternion + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathQPrint( const VmathQuat *quat ); + +/* + * Print a quaternion and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathQPrints( const VmathQuat *quat, const char *name ); + +#endif + +/* + * Copy a 3x3 matrix + */ +static inline void vmathM3Copy( VmathMatrix3 *result, const VmathMatrix3 *mat ); + +/* + * Construct a 3x3 matrix containing the specified columns + */ +static inline void vmathM3MakeFromCols( VmathMatrix3 *result, const VmathVector3 *col0, const VmathVector3 *col1, const VmathVector3 *col2 ); + +/* + * Construct a 3x3 rotation matrix from a unit-length quaternion + */ +static inline void vmathM3MakeFromQ( VmathMatrix3 *result, const VmathQuat *unitQuat ); + +/* + * Set all elements of a 3x3 matrix to the same scalar value + */ +static inline void vmathM3MakeFromScalar( VmathMatrix3 *result, float scalar ); + +/* + * Set column 0 of a 3x3 matrix + */ +static inline void vmathM3SetCol0( VmathMatrix3 *result, const VmathVector3 *col0 ); + +/* + * Set column 1 of a 3x3 matrix + */ +static inline void vmathM3SetCol1( VmathMatrix3 *result, const VmathVector3 *col1 ); + +/* + * Set column 2 of a 3x3 matrix + */ +static inline void vmathM3SetCol2( VmathMatrix3 *result, const VmathVector3 *col2 ); + +/* + * Get column 0 of a 3x3 matrix + */ +static inline void vmathM3GetCol0( VmathVector3 *result, const VmathMatrix3 *mat ); + +/* + * Get column 1 of a 3x3 matrix + */ +static inline void vmathM3GetCol1( VmathVector3 *result, const VmathMatrix3 *mat ); + +/* + * Get column 2 of a 3x3 matrix + */ +static inline void vmathM3GetCol2( VmathVector3 *result, const VmathMatrix3 *mat ); + +/* + * Set the column of a 3x3 matrix referred to by the specified index + */ +static inline void vmathM3SetCol( VmathMatrix3 *result, int col, const VmathVector3 *vec ); + +/* + * Set the row of a 3x3 matrix referred to by the specified index + */ +static inline void vmathM3SetRow( VmathMatrix3 *result, int row, const VmathVector3 *vec ); + +/* + * Get the column of a 3x3 matrix referred to by the specified index + */ +static inline void vmathM3GetCol( VmathVector3 *result, const VmathMatrix3 *mat, int col ); + +/* + * Get the row of a 3x3 matrix referred to by the specified index + */ +static inline void vmathM3GetRow( VmathVector3 *result, const VmathMatrix3 *mat, int row ); + +/* + * Set the element of a 3x3 matrix referred to by column and row indices + */ +static inline void vmathM3SetElem( VmathMatrix3 *result, int col, int row, float val ); + +/* + * Get the element of a 3x3 matrix referred to by column and row indices + */ +static inline float vmathM3GetElem( const VmathMatrix3 *mat, int col, int row ); + +/* + * Add two 3x3 matrices + */ +static inline void vmathM3Add( VmathMatrix3 *result, const VmathMatrix3 *mat0, const VmathMatrix3 *mat1 ); + +/* + * Subtract a 3x3 matrix from another 3x3 matrix + */ +static inline void vmathM3Sub( VmathMatrix3 *result, const VmathMatrix3 *mat0, const VmathMatrix3 *mat1 ); + +/* + * Negate all elements of a 3x3 matrix + */ +static inline void vmathM3Neg( VmathMatrix3 *result, const VmathMatrix3 *mat ); + +/* + * Multiply a 3x3 matrix by a scalar + */ +static inline void vmathM3ScalarMul( VmathMatrix3 *result, const VmathMatrix3 *mat, float scalar ); + +/* + * Multiply a 3x3 matrix by a 3-D vector + */ +static inline void vmathM3MulV3( VmathVector3 *result, const VmathMatrix3 *mat, const VmathVector3 *vec ); + +/* + * Multiply two 3x3 matrices + */ +static inline void vmathM3Mul( VmathMatrix3 *result, const VmathMatrix3 *mat0, const VmathMatrix3 *mat1 ); + +/* + * Construct an identity 3x3 matrix + */ +static inline void vmathM3MakeIdentity( VmathMatrix3 *result ); + +/* + * Construct a 3x3 matrix to rotate around the x axis + */ +static inline void vmathM3MakeRotationX( VmathMatrix3 *result, float radians ); + +/* + * Construct a 3x3 matrix to rotate around the y axis + */ +static inline void vmathM3MakeRotationY( VmathMatrix3 *result, float radians ); + +/* + * Construct a 3x3 matrix to rotate around the z axis + */ +static inline void vmathM3MakeRotationZ( VmathMatrix3 *result, float radians ); + +/* + * Construct a 3x3 matrix to rotate around the x, y, and z axes + */ +static inline void vmathM3MakeRotationZYX( VmathMatrix3 *result, const VmathVector3 *radiansXYZ ); + +/* + * Construct a 3x3 matrix to rotate around a unit-length 3-D vector + */ +static inline void vmathM3MakeRotationAxis( VmathMatrix3 *result, float radians, const VmathVector3 *unitVec ); + +/* + * Construct a rotation matrix from a unit-length quaternion + */ +static inline void vmathM3MakeRotationQ( VmathMatrix3 *result, const VmathQuat *unitQuat ); + +/* + * Construct a 3x3 matrix to perform scaling + */ +static inline void vmathM3MakeScale( VmathMatrix3 *result, const VmathVector3 *scaleVec ); + +/* + * Append (post-multiply) a scale transformation to a 3x3 matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline void vmathM3AppendScale( VmathMatrix3 *result, const VmathMatrix3 *mat, const VmathVector3 *scaleVec ); + +/* + * Prepend (pre-multiply) a scale transformation to a 3x3 matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline void vmathM3PrependScale( VmathMatrix3 *result, const VmathVector3 *scaleVec, const VmathMatrix3 *mat ); + +/* + * Multiply two 3x3 matrices per element + */ +static inline void vmathM3MulPerElem( VmathMatrix3 *result, const VmathMatrix3 *mat0, const VmathMatrix3 *mat1 ); + +/* + * Compute the absolute value of a 3x3 matrix per element + */ +static inline void vmathM3AbsPerElem( VmathMatrix3 *result, const VmathMatrix3 *mat ); + +/* + * Transpose of a 3x3 matrix + */ +static inline void vmathM3Transpose( VmathMatrix3 *result, const VmathMatrix3 *mat ); + +/* + * Compute the inverse of a 3x3 matrix + * NOTE: + * Result is unpredictable when the determinant of mat is equal to or near 0. + */ +static inline void vmathM3Inverse( VmathMatrix3 *result, const VmathMatrix3 *mat ); + +/* + * Determinant of a 3x3 matrix + */ +static inline float vmathM3Determinant( const VmathMatrix3 *mat ); + +/* + * Conditionally select between two 3x3 matrices + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + */ +static inline void vmathM3Select( VmathMatrix3 *result, const VmathMatrix3 *mat0, const VmathMatrix3 *mat1, unsigned int select1 ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 3x3 matrix + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathM3Print( const VmathMatrix3 *mat ); + +/* + * Print a 3x3 matrix and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathM3Prints( const VmathMatrix3 *mat, const char *name ); + +#endif + +/* + * Copy a 4x4 matrix + */ +static inline void vmathM4Copy( VmathMatrix4 *result, const VmathMatrix4 *mat ); + +/* + * Construct a 4x4 matrix containing the specified columns + */ +static inline void vmathM4MakeFromCols( VmathMatrix4 *result, const VmathVector4 *col0, const VmathVector4 *col1, const VmathVector4 *col2, const VmathVector4 *col3 ); + +/* + * Construct a 4x4 matrix from a 3x4 transformation matrix + */ +static inline void vmathM4MakeFromT3( VmathMatrix4 *result, const VmathTransform3 *mat ); + +/* + * Construct a 4x4 matrix from a 3x3 matrix and a 3-D vector + */ +static inline void vmathM4MakeFromM3V3( VmathMatrix4 *result, const VmathMatrix3 *mat, const VmathVector3 *translateVec ); + +/* + * Construct a 4x4 matrix from a unit-length quaternion and a 3-D vector + */ +static inline void vmathM4MakeFromQV3( VmathMatrix4 *result, const VmathQuat *unitQuat, const VmathVector3 *translateVec ); + +/* + * Set all elements of a 4x4 matrix to the same scalar value + */ +static inline void vmathM4MakeFromScalar( VmathMatrix4 *result, float scalar ); + +/* + * Set the upper-left 3x3 submatrix + * NOTE: + * This function does not change the bottom row elements. + */ +static inline void vmathM4SetUpper3x3( VmathMatrix4 *result, const VmathMatrix3 *mat3 ); + +/* + * Get the upper-left 3x3 submatrix of a 4x4 matrix + */ +static inline void vmathM4GetUpper3x3( VmathMatrix3 *result, const VmathMatrix4 *mat ); + +/* + * Set translation component + * NOTE: + * This function does not change the bottom row elements. + */ +static inline void vmathM4SetTranslation( VmathMatrix4 *result, const VmathVector3 *translateVec ); + +/* + * Get the translation component of a 4x4 matrix + */ +static inline void vmathM4GetTranslation( VmathVector3 *result, const VmathMatrix4 *mat ); + +/* + * Set column 0 of a 4x4 matrix + */ +static inline void vmathM4SetCol0( VmathMatrix4 *result, const VmathVector4 *col0 ); + +/* + * Set column 1 of a 4x4 matrix + */ +static inline void vmathM4SetCol1( VmathMatrix4 *result, const VmathVector4 *col1 ); + +/* + * Set column 2 of a 4x4 matrix + */ +static inline void vmathM4SetCol2( VmathMatrix4 *result, const VmathVector4 *col2 ); + +/* + * Set column 3 of a 4x4 matrix + */ +static inline void vmathM4SetCol3( VmathMatrix4 *result, const VmathVector4 *col3 ); + +/* + * Get column 0 of a 4x4 matrix + */ +static inline void vmathM4GetCol0( VmathVector4 *result, const VmathMatrix4 *mat ); + +/* + * Get column 1 of a 4x4 matrix + */ +static inline void vmathM4GetCol1( VmathVector4 *result, const VmathMatrix4 *mat ); + +/* + * Get column 2 of a 4x4 matrix + */ +static inline void vmathM4GetCol2( VmathVector4 *result, const VmathMatrix4 *mat ); + +/* + * Get column 3 of a 4x4 matrix + */ +static inline void vmathM4GetCol3( VmathVector4 *result, const VmathMatrix4 *mat ); + +/* + * Set the column of a 4x4 matrix referred to by the specified index + */ +static inline void vmathM4SetCol( VmathMatrix4 *result, int col, const VmathVector4 *vec ); + +/* + * Set the row of a 4x4 matrix referred to by the specified index + */ +static inline void vmathM4SetRow( VmathMatrix4 *result, int row, const VmathVector4 *vec ); + +/* + * Get the column of a 4x4 matrix referred to by the specified index + */ +static inline void vmathM4GetCol( VmathVector4 *result, const VmathMatrix4 *mat, int col ); + +/* + * Get the row of a 4x4 matrix referred to by the specified index + */ +static inline void vmathM4GetRow( VmathVector4 *result, const VmathMatrix4 *mat, int row ); + +/* + * Set the element of a 4x4 matrix referred to by column and row indices + */ +static inline void vmathM4SetElem( VmathMatrix4 *result, int col, int row, float val ); + +/* + * Get the element of a 4x4 matrix referred to by column and row indices + */ +static inline float vmathM4GetElem( const VmathMatrix4 *mat, int col, int row ); + +/* + * Add two 4x4 matrices + */ +static inline void vmathM4Add( VmathMatrix4 *result, const VmathMatrix4 *mat0, const VmathMatrix4 *mat1 ); + +/* + * Subtract a 4x4 matrix from another 4x4 matrix + */ +static inline void vmathM4Sub( VmathMatrix4 *result, const VmathMatrix4 *mat0, const VmathMatrix4 *mat1 ); + +/* + * Negate all elements of a 4x4 matrix + */ +static inline void vmathM4Neg( VmathMatrix4 *result, const VmathMatrix4 *mat ); + +/* + * Multiply a 4x4 matrix by a scalar + */ +static inline void vmathM4ScalarMul( VmathMatrix4 *result, const VmathMatrix4 *mat, float scalar ); + +/* + * Multiply a 4x4 matrix by a 4-D vector + */ +static inline void vmathM4MulV4( VmathVector4 *result, const VmathMatrix4 *mat, const VmathVector4 *vec ); + +/* + * Multiply a 4x4 matrix by a 3-D vector + */ +static inline void vmathM4MulV3( VmathVector4 *result, const VmathMatrix4 *mat, const VmathVector3 *vec ); + +/* + * Multiply a 4x4 matrix by a 3-D point + */ +static inline void vmathM4MulP3( VmathVector4 *result, const VmathMatrix4 *mat, const VmathPoint3 *pnt ); + +/* + * Multiply two 4x4 matrices + */ +static inline void vmathM4Mul( VmathMatrix4 *result, const VmathMatrix4 *mat0, const VmathMatrix4 *mat1 ); + +/* + * Multiply a 4x4 matrix by a 3x4 transformation matrix + */ +static inline void vmathM4MulT3( VmathMatrix4 *result, const VmathMatrix4 *mat, const VmathTransform3 *tfrm ); + +/* + * Construct an identity 4x4 matrix + */ +static inline void vmathM4MakeIdentity( VmathMatrix4 *result ); + +/* + * Construct a 4x4 matrix to rotate around the x axis + */ +static inline void vmathM4MakeRotationX( VmathMatrix4 *result, float radians ); + +/* + * Construct a 4x4 matrix to rotate around the y axis + */ +static inline void vmathM4MakeRotationY( VmathMatrix4 *result, float radians ); + +/* + * Construct a 4x4 matrix to rotate around the z axis + */ +static inline void vmathM4MakeRotationZ( VmathMatrix4 *result, float radians ); + +/* + * Construct a 4x4 matrix to rotate around the x, y, and z axes + */ +static inline void vmathM4MakeRotationZYX( VmathMatrix4 *result, const VmathVector3 *radiansXYZ ); + +/* + * Construct a 4x4 matrix to rotate around a unit-length 3-D vector + */ +static inline void vmathM4MakeRotationAxis( VmathMatrix4 *result, float radians, const VmathVector3 *unitVec ); + +/* + * Construct a rotation matrix from a unit-length quaternion + */ +static inline void vmathM4MakeRotationQ( VmathMatrix4 *result, const VmathQuat *unitQuat ); + +/* + * Construct a 4x4 matrix to perform scaling + */ +static inline void vmathM4MakeScale( VmathMatrix4 *result, const VmathVector3 *scaleVec ); + +/* + * Construct a 4x4 matrix to perform translation + */ +static inline void vmathM4MakeTranslation( VmathMatrix4 *result, const VmathVector3 *translateVec ); + +/* + * Construct viewing matrix based on eye position, position looked at, and up direction + */ +static inline void vmathM4MakeLookAt( VmathMatrix4 *result, const VmathPoint3 *eyePos, const VmathPoint3 *lookAtPos, const VmathVector3 *upVec ); + +/* + * Construct a perspective projection matrix + */ +static inline void vmathM4MakePerspective( VmathMatrix4 *result, float fovyRadians, float aspect, float zNear, float zFar ); + +/* + * Construct a perspective projection matrix based on frustum + */ +static inline void vmathM4MakeFrustum( VmathMatrix4 *result, float left, float right, float bottom, float top, float zNear, float zFar ); + +/* + * Construct an orthographic projection matrix + */ +static inline void vmathM4MakeOrthographic( VmathMatrix4 *result, float left, float right, float bottom, float top, float zNear, float zFar ); + +/* + * Append (post-multiply) a scale transformation to a 4x4 matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline void vmathM4AppendScale( VmathMatrix4 *result, const VmathMatrix4 *mat, const VmathVector3 *scaleVec ); + +/* + * Prepend (pre-multiply) a scale transformation to a 4x4 matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline void vmathM4PrependScale( VmathMatrix4 *result, const VmathVector3 *scaleVec, const VmathMatrix4 *mat ); + +/* + * Multiply two 4x4 matrices per element + */ +static inline void vmathM4MulPerElem( VmathMatrix4 *result, const VmathMatrix4 *mat0, const VmathMatrix4 *mat1 ); + +/* + * Compute the absolute value of a 4x4 matrix per element + */ +static inline void vmathM4AbsPerElem( VmathMatrix4 *result, const VmathMatrix4 *mat ); + +/* + * Transpose of a 4x4 matrix + */ +static inline void vmathM4Transpose( VmathMatrix4 *result, const VmathMatrix4 *mat ); + +/* + * Compute the inverse of a 4x4 matrix + * NOTE: + * Result is unpredictable when the determinant of mat is equal to or near 0. + */ +static inline void vmathM4Inverse( VmathMatrix4 *result, const VmathMatrix4 *mat ); + +/* + * Compute the inverse of a 4x4 matrix, which is expected to be an affine matrix + * NOTE: + * This can be used to achieve better performance than a general inverse when the specified 4x4 matrix meets the given restrictions. The result is unpredictable when the determinant of mat is equal to or near 0. + */ +static inline void vmathM4AffineInverse( VmathMatrix4 *result, const VmathMatrix4 *mat ); + +/* + * Compute the inverse of a 4x4 matrix, which is expected to be an affine matrix with an orthogonal upper-left 3x3 submatrix + * NOTE: + * This can be used to achieve better performance than a general inverse when the specified 4x4 matrix meets the given restrictions. + */ +static inline void vmathM4OrthoInverse( VmathMatrix4 *result, const VmathMatrix4 *mat ); + +/* + * Determinant of a 4x4 matrix + */ +static inline float vmathM4Determinant( const VmathMatrix4 *mat ); + +/* + * Conditionally select between two 4x4 matrices + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + */ +static inline void vmathM4Select( VmathMatrix4 *result, const VmathMatrix4 *mat0, const VmathMatrix4 *mat1, unsigned int select1 ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 4x4 matrix + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathM4Print( const VmathMatrix4 *mat ); + +/* + * Print a 4x4 matrix and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathM4Prints( const VmathMatrix4 *mat, const char *name ); + +#endif + +/* + * Copy a 3x4 transformation matrix + */ +static inline void vmathT3Copy( VmathTransform3 *result, const VmathTransform3 *tfrm ); + +/* + * Construct a 3x4 transformation matrix containing the specified columns + */ +static inline void vmathT3MakeFromCols( VmathTransform3 *result, const VmathVector3 *col0, const VmathVector3 *col1, const VmathVector3 *col2, const VmathVector3 *col3 ); + +/* + * Construct a 3x4 transformation matrix from a 3x3 matrix and a 3-D vector + */ +static inline void vmathT3MakeFromM3V3( VmathTransform3 *result, const VmathMatrix3 *tfrm, const VmathVector3 *translateVec ); + +/* + * Construct a 3x4 transformation matrix from a unit-length quaternion and a 3-D vector + */ +static inline void vmathT3MakeFromQV3( VmathTransform3 *result, const VmathQuat *unitQuat, const VmathVector3 *translateVec ); + +/* + * Set all elements of a 3x4 transformation matrix to the same scalar value + */ +static inline void vmathT3MakeFromScalar( VmathTransform3 *result, float scalar ); + +/* + * Set the upper-left 3x3 submatrix + */ +static inline void vmathT3SetUpper3x3( VmathTransform3 *result, const VmathMatrix3 *mat3 ); + +/* + * Get the upper-left 3x3 submatrix of a 3x4 transformation matrix + */ +static inline void vmathT3GetUpper3x3( VmathMatrix3 *result, const VmathTransform3 *tfrm ); + +/* + * Set translation component + */ +static inline void vmathT3SetTranslation( VmathTransform3 *result, const VmathVector3 *translateVec ); + +/* + * Get the translation component of a 3x4 transformation matrix + */ +static inline void vmathT3GetTranslation( VmathVector3 *result, const VmathTransform3 *tfrm ); + +/* + * Set column 0 of a 3x4 transformation matrix + */ +static inline void vmathT3SetCol0( VmathTransform3 *result, const VmathVector3 *col0 ); + +/* + * Set column 1 of a 3x4 transformation matrix + */ +static inline void vmathT3SetCol1( VmathTransform3 *result, const VmathVector3 *col1 ); + +/* + * Set column 2 of a 3x4 transformation matrix + */ +static inline void vmathT3SetCol2( VmathTransform3 *result, const VmathVector3 *col2 ); + +/* + * Set column 3 of a 3x4 transformation matrix + */ +static inline void vmathT3SetCol3( VmathTransform3 *result, const VmathVector3 *col3 ); + +/* + * Get column 0 of a 3x4 transformation matrix + */ +static inline void vmathT3GetCol0( VmathVector3 *result, const VmathTransform3 *tfrm ); + +/* + * Get column 1 of a 3x4 transformation matrix + */ +static inline void vmathT3GetCol1( VmathVector3 *result, const VmathTransform3 *tfrm ); + +/* + * Get column 2 of a 3x4 transformation matrix + */ +static inline void vmathT3GetCol2( VmathVector3 *result, const VmathTransform3 *tfrm ); + +/* + * Get column 3 of a 3x4 transformation matrix + */ +static inline void vmathT3GetCol3( VmathVector3 *result, const VmathTransform3 *tfrm ); + +/* + * Set the column of a 3x4 transformation matrix referred to by the specified index + */ +static inline void vmathT3SetCol( VmathTransform3 *result, int col, const VmathVector3 *vec ); + +/* + * Set the row of a 3x4 transformation matrix referred to by the specified index + */ +static inline void vmathT3SetRow( VmathTransform3 *result, int row, const VmathVector4 *vec ); + +/* + * Get the column of a 3x4 transformation matrix referred to by the specified index + */ +static inline void vmathT3GetCol( VmathVector3 *result, const VmathTransform3 *tfrm, int col ); + +/* + * Get the row of a 3x4 transformation matrix referred to by the specified index + */ +static inline void vmathT3GetRow( VmathVector4 *result, const VmathTransform3 *tfrm, int row ); + +/* + * Set the element of a 3x4 transformation matrix referred to by column and row indices + */ +static inline void vmathT3SetElem( VmathTransform3 *result, int col, int row, float val ); + +/* + * Get the element of a 3x4 transformation matrix referred to by column and row indices + */ +static inline float vmathT3GetElem( const VmathTransform3 *tfrm, int col, int row ); + +/* + * Multiply a 3x4 transformation matrix by a 3-D vector + */ +static inline void vmathT3MulV3( VmathVector3 *result, const VmathTransform3 *tfrm, const VmathVector3 *vec ); + +/* + * Multiply a 3x4 transformation matrix by a 3-D point + */ +static inline void vmathT3MulP3( VmathPoint3 *result, const VmathTransform3 *tfrm, const VmathPoint3 *pnt ); + +/* + * Multiply two 3x4 transformation matrices + */ +static inline void vmathT3Mul( VmathTransform3 *result, const VmathTransform3 *tfrm0, const VmathTransform3 *tfrm1 ); + +/* + * Construct an identity 3x4 transformation matrix + */ +static inline void vmathT3MakeIdentity( VmathTransform3 *result ); + +/* + * Construct a 3x4 transformation matrix to rotate around the x axis + */ +static inline void vmathT3MakeRotationX( VmathTransform3 *result, float radians ); + +/* + * Construct a 3x4 transformation matrix to rotate around the y axis + */ +static inline void vmathT3MakeRotationY( VmathTransform3 *result, float radians ); + +/* + * Construct a 3x4 transformation matrix to rotate around the z axis + */ +static inline void vmathT3MakeRotationZ( VmathTransform3 *result, float radians ); + +/* + * Construct a 3x4 transformation matrix to rotate around the x, y, and z axes + */ +static inline void vmathT3MakeRotationZYX( VmathTransform3 *result, const VmathVector3 *radiansXYZ ); + +/* + * Construct a 3x4 transformation matrix to rotate around a unit-length 3-D vector + */ +static inline void vmathT3MakeRotationAxis( VmathTransform3 *result, float radians, const VmathVector3 *unitVec ); + +/* + * Construct a rotation matrix from a unit-length quaternion + */ +static inline void vmathT3MakeRotationQ( VmathTransform3 *result, const VmathQuat *unitQuat ); + +/* + * Construct a 3x4 transformation matrix to perform scaling + */ +static inline void vmathT3MakeScale( VmathTransform3 *result, const VmathVector3 *scaleVec ); + +/* + * Construct a 3x4 transformation matrix to perform translation + */ +static inline void vmathT3MakeTranslation( VmathTransform3 *result, const VmathVector3 *translateVec ); + +/* + * Append (post-multiply) a scale transformation to a 3x4 transformation matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline void vmathT3AppendScale( VmathTransform3 *result, const VmathTransform3 *tfrm, const VmathVector3 *scaleVec ); + +/* + * Prepend (pre-multiply) a scale transformation to a 3x4 transformation matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline void vmathT3PrependScale( VmathTransform3 *result, const VmathVector3 *scaleVec, const VmathTransform3 *tfrm ); + +/* + * Multiply two 3x4 transformation matrices per element + */ +static inline void vmathT3MulPerElem( VmathTransform3 *result, const VmathTransform3 *tfrm0, const VmathTransform3 *tfrm1 ); + +/* + * Compute the absolute value of a 3x4 transformation matrix per element + */ +static inline void vmathT3AbsPerElem( VmathTransform3 *result, const VmathTransform3 *tfrm ); + +/* + * Inverse of a 3x4 transformation matrix + * NOTE: + * Result is unpredictable when the determinant of the left 3x3 submatrix is equal to or near 0. + */ +static inline void vmathT3Inverse( VmathTransform3 *result, const VmathTransform3 *tfrm ); + +/* + * Compute the inverse of a 3x4 transformation matrix, expected to have an orthogonal upper-left 3x3 submatrix + * NOTE: + * This can be used to achieve better performance than a general inverse when the specified 3x4 transformation matrix meets the given restrictions. + */ +static inline void vmathT3OrthoInverse( VmathTransform3 *result, const VmathTransform3 *tfrm ); + +/* + * Conditionally select between two 3x4 transformation matrices + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + */ +static inline void vmathT3Select( VmathTransform3 *result, const VmathTransform3 *tfrm0, const VmathTransform3 *tfrm1, unsigned int select1 ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 3x4 transformation matrix + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathT3Print( const VmathTransform3 *tfrm ); + +/* + * Print a 3x4 transformation matrix and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathT3Prints( const VmathTransform3 *tfrm, const char *name ); + +#endif + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#include "vec_aos.h" +#include "quat_aos.h" +#include "mat_aos.h" + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/spu/c/vectormath_aos_v.h b/Extras/vectormathlibrary/include/vectormath/spu/c/vectormath_aos_v.h new file mode 100644 index 000000000..eb6912557 --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/spu/c/vectormath_aos_v.h @@ -0,0 +1,1916 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_AOS_C_V_H +#define _VECTORMATH_AOS_C_V_H + +#include +#include + +#ifdef _VECTORMATH_DEBUG +#endif + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#ifndef _VECTORMATH_AOS_C_TYPES_H +#define _VECTORMATH_AOS_C_TYPES_H + +/* A 3-D vector in array-of-structures format + */ +typedef struct _VmathVector3 +{ + vec_float4 vec128; +} VmathVector3; + +/* A 4-D vector in array-of-structures format + */ +typedef struct _VmathVector4 +{ + vec_float4 vec128; +} VmathVector4; + +/* A 3-D point in array-of-structures format + */ +typedef struct _VmathPoint3 +{ + vec_float4 vec128; +} VmathPoint3; + +/* A quaternion in array-of-structures format + */ +typedef struct _VmathQuat +{ + vec_float4 vec128; +} VmathQuat; + +/* A 3x3 matrix in array-of-structures format + */ +typedef struct _VmathMatrix3 +{ + VmathVector3 col0; + VmathVector3 col1; + VmathVector3 col2; +} VmathMatrix3; + +/* A 4x4 matrix in array-of-structures format + */ +typedef struct _VmathMatrix4 +{ + VmathVector4 col0; + VmathVector4 col1; + VmathVector4 col2; + VmathVector4 col3; +} VmathMatrix4; + +/* A 3x4 transformation matrix in array-of-structures format + */ +typedef struct _VmathTransform3 +{ + VmathVector3 col0; + VmathVector3 col1; + VmathVector3 col2; + VmathVector3 col3; +} VmathTransform3; + +#endif + +/* + * Construct a 3-D vector from x, y, and z elements + */ +static inline VmathVector3 vmathV3MakeFromElems_V( float x, float y, float z ); + +/* + * Copy elements from a 3-D point into a 3-D vector + */ +static inline VmathVector3 vmathV3MakeFromP3_V( VmathPoint3 pnt ); + +/* + * Set all elements of a 3-D vector to the same scalar value + */ +static inline VmathVector3 vmathV3MakeFromScalar_V( float scalar ); + +/* + * Set vector float data in a 3-D vector + */ +static inline VmathVector3 vmathV3MakeFrom128_V( vec_float4 vf4 ); + +/* + * Get vector float data from a 3-D vector + */ +static inline vec_float4 vmathV3Get128_V( VmathVector3 vec ); + +/* + * Set the x element of a 3-D vector + */ +static inline void vmathV3SetX_V( VmathVector3 *result, float x ); + +/* + * Set the y element of a 3-D vector + */ +static inline void vmathV3SetY_V( VmathVector3 *result, float y ); + +/* + * Set the z element of a 3-D vector + */ +static inline void vmathV3SetZ_V( VmathVector3 *result, float z ); + +/* + * Get the x element of a 3-D vector + */ +static inline float vmathV3GetX_V( VmathVector3 vec ); + +/* + * Get the y element of a 3-D vector + */ +static inline float vmathV3GetY_V( VmathVector3 vec ); + +/* + * Get the z element of a 3-D vector + */ +static inline float vmathV3GetZ_V( VmathVector3 vec ); + +/* + * Set an x, y, or z element of a 3-D vector by index + */ +static inline void vmathV3SetElem_V( VmathVector3 *result, int idx, float value ); + +/* + * Get an x, y, or z element of a 3-D vector by index + */ +static inline float vmathV3GetElem_V( VmathVector3 vec, int idx ); + +/* + * Add two 3-D vectors + */ +static inline VmathVector3 vmathV3Add_V( VmathVector3 vec0, VmathVector3 vec1 ); + +/* + * Subtract a 3-D vector from another 3-D vector + */ +static inline VmathVector3 vmathV3Sub_V( VmathVector3 vec0, VmathVector3 vec1 ); + +/* + * Add a 3-D vector to a 3-D point + */ +static inline VmathPoint3 vmathV3AddP3_V( VmathVector3 vec, VmathPoint3 pnt ); + +/* + * Multiply a 3-D vector by a scalar + */ +static inline VmathVector3 vmathV3ScalarMul_V( VmathVector3 vec, float scalar ); + +/* + * Divide a 3-D vector by a scalar + */ +static inline VmathVector3 vmathV3ScalarDiv_V( VmathVector3 vec, float scalar ); + +/* + * Negate all elements of a 3-D vector + */ +static inline VmathVector3 vmathV3Neg_V( VmathVector3 vec ); + +/* + * Construct x axis + */ +static inline VmathVector3 vmathV3MakeXAxis_V( ); + +/* + * Construct y axis + */ +static inline VmathVector3 vmathV3MakeYAxis_V( ); + +/* + * Construct z axis + */ +static inline VmathVector3 vmathV3MakeZAxis_V( ); + +/* + * Multiply two 3-D vectors per element + */ +static inline VmathVector3 vmathV3MulPerElem_V( VmathVector3 vec0, VmathVector3 vec1 ); + +/* + * Divide two 3-D vectors per element + * NOTE: + * Floating-point behavior matches standard library function divf4. + */ +static inline VmathVector3 vmathV3DivPerElem_V( VmathVector3 vec0, VmathVector3 vec1 ); + +/* + * Compute the reciprocal of a 3-D vector per element + * NOTE: + * Floating-point behavior matches standard library function recipf4. + */ +static inline VmathVector3 vmathV3RecipPerElem_V( VmathVector3 vec ); + +/* + * Compute the square root of a 3-D vector per element + * NOTE: + * Floating-point behavior matches standard library function sqrtf4. + */ +static inline VmathVector3 vmathV3SqrtPerElem_V( VmathVector3 vec ); + +/* + * Compute the reciprocal square root of a 3-D vector per element + * NOTE: + * Floating-point behavior matches standard library function rsqrtf4. + */ +static inline VmathVector3 vmathV3RsqrtPerElem_V( VmathVector3 vec ); + +/* + * Compute the absolute value of a 3-D vector per element + */ +static inline VmathVector3 vmathV3AbsPerElem_V( VmathVector3 vec ); + +/* + * Copy sign from one 3-D vector to another, per element + */ +static inline VmathVector3 vmathV3CopySignPerElem_V( VmathVector3 vec0, VmathVector3 vec1 ); + +/* + * Maximum of two 3-D vectors per element + */ +static inline VmathVector3 vmathV3MaxPerElem_V( VmathVector3 vec0, VmathVector3 vec1 ); + +/* + * Minimum of two 3-D vectors per element + */ +static inline VmathVector3 vmathV3MinPerElem_V( VmathVector3 vec0, VmathVector3 vec1 ); + +/* + * Maximum element of a 3-D vector + */ +static inline float vmathV3MaxElem_V( VmathVector3 vec ); + +/* + * Minimum element of a 3-D vector + */ +static inline float vmathV3MinElem_V( VmathVector3 vec ); + +/* + * Compute the sum of all elements of a 3-D vector + */ +static inline float vmathV3Sum_V( VmathVector3 vec ); + +/* + * Compute the dot product of two 3-D vectors + */ +static inline float vmathV3Dot_V( VmathVector3 vec0, VmathVector3 vec1 ); + +/* + * Compute the square of the length of a 3-D vector + */ +static inline float vmathV3LengthSqr_V( VmathVector3 vec ); + +/* + * Compute the length of a 3-D vector + */ +static inline float vmathV3Length_V( VmathVector3 vec ); + +/* + * Normalize a 3-D vector + * NOTE: + * The result is unpredictable when all elements of vec are at or near zero. + */ +static inline VmathVector3 vmathV3Normalize_V( VmathVector3 vec ); + +/* + * Compute cross product of two 3-D vectors + */ +static inline VmathVector3 vmathV3Cross_V( VmathVector3 vec0, VmathVector3 vec1 ); + +/* + * Outer product of two 3-D vectors + */ +static inline VmathMatrix3 vmathV3Outer_V( VmathVector3 vec0, VmathVector3 vec1 ); + +/* + * Pre-multiply a row vector by a 3x3 matrix + * NOTE: + * Slower than column post-multiply. + */ +static inline VmathVector3 vmathV3RowMul_V( VmathVector3 vec, VmathMatrix3 mat ); + +/* + * Cross-product matrix of a 3-D vector + */ +static inline VmathMatrix3 vmathV3CrossMatrix_V( VmathVector3 vec ); + +/* + * Create cross-product matrix and multiply + * NOTE: + * Faster than separately creating a cross-product matrix and multiplying. + */ +static inline VmathMatrix3 vmathV3CrossMatrixMul_V( VmathVector3 vec, VmathMatrix3 mat ); + +/* + * Linear interpolation between two 3-D vectors + * NOTE: + * Does not clamp t between 0 and 1. + */ +static inline VmathVector3 vmathV3Lerp_V( float t, VmathVector3 vec0, VmathVector3 vec1 ); + +/* + * Spherical linear interpolation between two 3-D vectors + * NOTE: + * The result is unpredictable if the vectors point in opposite directions. + * Does not clamp t between 0 and 1. + */ +static inline VmathVector3 vmathV3Slerp_V( float t, VmathVector3 unitVec0, VmathVector3 unitVec1 ); + +/* + * Conditionally select between two 3-D vectors + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + */ +static inline VmathVector3 vmathV3Select_V( VmathVector3 vec0, VmathVector3 vec1, unsigned int select1 ); + +/* + * Store x, y, and z elements of a 3-D vector in the first three words of a quadword. + * The value of the fourth word (the word with the highest address) remains unchanged + */ +static inline void vmathV3StoreXYZ_V( VmathVector3 vec, vec_float4 *quad ); + +/* + * Load four three-float 3-D vectors, stored in three quadwords + */ +static inline void vmathV3LoadXYZArray_V( VmathVector3 *vec0, VmathVector3 *vec1, VmathVector3 *vec2, VmathVector3 *vec3, const vec_float4 *threeQuads ); + +/* + * Store four 3-D vectors in three quadwords + */ +static inline void vmathV3StoreXYZArray_V( VmathVector3 vec0, VmathVector3 vec1, VmathVector3 vec2, VmathVector3 vec3, vec_float4 *threeQuads ); + +/* + * Store eight 3-D vectors as half-floats + */ +static inline void vmathV3StoreHalfFloats_V( VmathVector3 vec0, VmathVector3 vec1, VmathVector3 vec2, VmathVector3 vec3, VmathVector3 vec4, VmathVector3 vec5, VmathVector3 vec6, VmathVector3 vec7, vec_ushort8 *threeQuads ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 3-D vector + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathV3Print_V( VmathVector3 vec ); + +/* + * Print a 3-D vector and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathV3Prints_V( VmathVector3 vec, const char *name ); + +#endif + +/* + * Construct a 4-D vector from x, y, z, and w elements + */ +static inline VmathVector4 vmathV4MakeFromElems_V( float x, float y, float z, float w ); + +/* + * Construct a 4-D vector from a 3-D vector and a scalar + */ +static inline VmathVector4 vmathV4MakeFromV3Scalar_V( VmathVector3 xyz, float w ); + +/* + * Copy x, y, and z from a 3-D vector into a 4-D vector, and set w to 0 + */ +static inline VmathVector4 vmathV4MakeFromV3_V( VmathVector3 vec ); + +/* + * Copy x, y, and z from a 3-D point into a 4-D vector, and set w to 1 + */ +static inline VmathVector4 vmathV4MakeFromP3_V( VmathPoint3 pnt ); + +/* + * Copy elements from a quaternion into a 4-D vector + */ +static inline VmathVector4 vmathV4MakeFromQ_V( VmathQuat quat ); + +/* + * Set all elements of a 4-D vector to the same scalar value + */ +static inline VmathVector4 vmathV4MakeFromScalar_V( float scalar ); + +/* + * Set vector float data in a 4-D vector + */ +static inline VmathVector4 vmathV4MakeFrom128_V( vec_float4 vf4 ); + +/* + * Get vector float data from a 4-D vector + */ +static inline vec_float4 vmathV4Get128_V( VmathVector4 vec ); + +/* + * Set the x, y, and z elements of a 4-D vector + * NOTE: + * This function does not change the w element. + */ +static inline void vmathV4SetXYZ_V( VmathVector4 *result, VmathVector3 vec ); + +/* + * Get the x, y, and z elements of a 4-D vector + */ +static inline VmathVector3 vmathV4GetXYZ_V( VmathVector4 vec ); + +/* + * Set the x element of a 4-D vector + */ +static inline void vmathV4SetX_V( VmathVector4 *result, float x ); + +/* + * Set the y element of a 4-D vector + */ +static inline void vmathV4SetY_V( VmathVector4 *result, float y ); + +/* + * Set the z element of a 4-D vector + */ +static inline void vmathV4SetZ_V( VmathVector4 *result, float z ); + +/* + * Set the w element of a 4-D vector + */ +static inline void vmathV4SetW_V( VmathVector4 *result, float w ); + +/* + * Get the x element of a 4-D vector + */ +static inline float vmathV4GetX_V( VmathVector4 vec ); + +/* + * Get the y element of a 4-D vector + */ +static inline float vmathV4GetY_V( VmathVector4 vec ); + +/* + * Get the z element of a 4-D vector + */ +static inline float vmathV4GetZ_V( VmathVector4 vec ); + +/* + * Get the w element of a 4-D vector + */ +static inline float vmathV4GetW_V( VmathVector4 vec ); + +/* + * Set an x, y, z, or w element of a 4-D vector by index + */ +static inline void vmathV4SetElem_V( VmathVector4 *result, int idx, float value ); + +/* + * Get an x, y, z, or w element of a 4-D vector by index + */ +static inline float vmathV4GetElem_V( VmathVector4 vec, int idx ); + +/* + * Add two 4-D vectors + */ +static inline VmathVector4 vmathV4Add_V( VmathVector4 vec0, VmathVector4 vec1 ); + +/* + * Subtract a 4-D vector from another 4-D vector + */ +static inline VmathVector4 vmathV4Sub_V( VmathVector4 vec0, VmathVector4 vec1 ); + +/* + * Multiply a 4-D vector by a scalar + */ +static inline VmathVector4 vmathV4ScalarMul_V( VmathVector4 vec, float scalar ); + +/* + * Divide a 4-D vector by a scalar + */ +static inline VmathVector4 vmathV4ScalarDiv_V( VmathVector4 vec, float scalar ); + +/* + * Negate all elements of a 4-D vector + */ +static inline VmathVector4 vmathV4Neg_V( VmathVector4 vec ); + +/* + * Construct x axis + */ +static inline VmathVector4 vmathV4MakeXAxis_V( ); + +/* + * Construct y axis + */ +static inline VmathVector4 vmathV4MakeYAxis_V( ); + +/* + * Construct z axis + */ +static inline VmathVector4 vmathV4MakeZAxis_V( ); + +/* + * Construct w axis + */ +static inline VmathVector4 vmathV4MakeWAxis_V( ); + +/* + * Multiply two 4-D vectors per element + */ +static inline VmathVector4 vmathV4MulPerElem_V( VmathVector4 vec0, VmathVector4 vec1 ); + +/* + * Divide two 4-D vectors per element + * NOTE: + * Floating-point behavior matches standard library function divf4. + */ +static inline VmathVector4 vmathV4DivPerElem_V( VmathVector4 vec0, VmathVector4 vec1 ); + +/* + * Compute the reciprocal of a 4-D vector per element + * NOTE: + * Floating-point behavior matches standard library function recipf4. + */ +static inline VmathVector4 vmathV4RecipPerElem_V( VmathVector4 vec ); + +/* + * Compute the square root of a 4-D vector per element + * NOTE: + * Floating-point behavior matches standard library function sqrtf4. + */ +static inline VmathVector4 vmathV4SqrtPerElem_V( VmathVector4 vec ); + +/* + * Compute the reciprocal square root of a 4-D vector per element + * NOTE: + * Floating-point behavior matches standard library function rsqrtf4. + */ +static inline VmathVector4 vmathV4RsqrtPerElem_V( VmathVector4 vec ); + +/* + * Compute the absolute value of a 4-D vector per element + */ +static inline VmathVector4 vmathV4AbsPerElem_V( VmathVector4 vec ); + +/* + * Copy sign from one 4-D vector to another, per element + */ +static inline VmathVector4 vmathV4CopySignPerElem_V( VmathVector4 vec0, VmathVector4 vec1 ); + +/* + * Maximum of two 4-D vectors per element + */ +static inline VmathVector4 vmathV4MaxPerElem_V( VmathVector4 vec0, VmathVector4 vec1 ); + +/* + * Minimum of two 4-D vectors per element + */ +static inline VmathVector4 vmathV4MinPerElem_V( VmathVector4 vec0, VmathVector4 vec1 ); + +/* + * Maximum element of a 4-D vector + */ +static inline float vmathV4MaxElem_V( VmathVector4 vec ); + +/* + * Minimum element of a 4-D vector + */ +static inline float vmathV4MinElem_V( VmathVector4 vec ); + +/* + * Compute the sum of all elements of a 4-D vector + */ +static inline float vmathV4Sum_V( VmathVector4 vec ); + +/* + * Compute the dot product of two 4-D vectors + */ +static inline float vmathV4Dot_V( VmathVector4 vec0, VmathVector4 vec1 ); + +/* + * Compute the square of the length of a 4-D vector + */ +static inline float vmathV4LengthSqr_V( VmathVector4 vec ); + +/* + * Compute the length of a 4-D vector + */ +static inline float vmathV4Length_V( VmathVector4 vec ); + +/* + * Normalize a 4-D vector + * NOTE: + * The result is unpredictable when all elements of vec are at or near zero. + */ +static inline VmathVector4 vmathV4Normalize_V( VmathVector4 vec ); + +/* + * Outer product of two 4-D vectors + */ +static inline VmathMatrix4 vmathV4Outer_V( VmathVector4 vec0, VmathVector4 vec1 ); + +/* + * Linear interpolation between two 4-D vectors + * NOTE: + * Does not clamp t between 0 and 1. + */ +static inline VmathVector4 vmathV4Lerp_V( float t, VmathVector4 vec0, VmathVector4 vec1 ); + +/* + * Spherical linear interpolation between two 4-D vectors + * NOTE: + * The result is unpredictable if the vectors point in opposite directions. + * Does not clamp t between 0 and 1. + */ +static inline VmathVector4 vmathV4Slerp_V( float t, VmathVector4 unitVec0, VmathVector4 unitVec1 ); + +/* + * Conditionally select between two 4-D vectors + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + */ +static inline VmathVector4 vmathV4Select_V( VmathVector4 vec0, VmathVector4 vec1, unsigned int select1 ); + +/* + * Store four 4-D vectors as half-floats + */ +static inline void vmathV4StoreHalfFloats_V( VmathVector4 vec0, VmathVector4 vec1, VmathVector4 vec2, VmathVector4 vec3, vec_ushort8 *twoQuads ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 4-D vector + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathV4Print_V( VmathVector4 vec ); + +/* + * Print a 4-D vector and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathV4Prints_V( VmathVector4 vec, const char *name ); + +#endif + +/* + * Construct a 3-D point from x, y, and z elements + */ +static inline VmathPoint3 vmathP3MakeFromElems_V( float x, float y, float z ); + +/* + * Copy elements from a 3-D vector into a 3-D point + */ +static inline VmathPoint3 vmathP3MakeFromV3_V( VmathVector3 vec ); + +/* + * Set all elements of a 3-D point to the same scalar value + */ +static inline VmathPoint3 vmathP3MakeFromScalar_V( float scalar ); + +/* + * Set vector float data in a 3-D point + */ +static inline VmathPoint3 vmathP3MakeFrom128_V( vec_float4 vf4 ); + +/* + * Get vector float data from a 3-D point + */ +static inline vec_float4 vmathP3Get128_V( VmathPoint3 pnt ); + +/* + * Set the x element of a 3-D point + */ +static inline void vmathP3SetX_V( VmathPoint3 *result, float x ); + +/* + * Set the y element of a 3-D point + */ +static inline void vmathP3SetY_V( VmathPoint3 *result, float y ); + +/* + * Set the z element of a 3-D point + */ +static inline void vmathP3SetZ_V( VmathPoint3 *result, float z ); + +/* + * Get the x element of a 3-D point + */ +static inline float vmathP3GetX_V( VmathPoint3 pnt ); + +/* + * Get the y element of a 3-D point + */ +static inline float vmathP3GetY_V( VmathPoint3 pnt ); + +/* + * Get the z element of a 3-D point + */ +static inline float vmathP3GetZ_V( VmathPoint3 pnt ); + +/* + * Set an x, y, or z element of a 3-D point by index + */ +static inline void vmathP3SetElem_V( VmathPoint3 *result, int idx, float value ); + +/* + * Get an x, y, or z element of a 3-D point by index + */ +static inline float vmathP3GetElem_V( VmathPoint3 pnt, int idx ); + +/* + * Subtract a 3-D point from another 3-D point + */ +static inline VmathVector3 vmathP3Sub_V( VmathPoint3 pnt0, VmathPoint3 pnt1 ); + +/* + * Add a 3-D point to a 3-D vector + */ +static inline VmathPoint3 vmathP3AddV3_V( VmathPoint3 pnt, VmathVector3 vec ); + +/* + * Subtract a 3-D vector from a 3-D point + */ +static inline VmathPoint3 vmathP3SubV3_V( VmathPoint3 pnt, VmathVector3 vec ); + +/* + * Multiply two 3-D points per element + */ +static inline VmathPoint3 vmathP3MulPerElem_V( VmathPoint3 pnt0, VmathPoint3 pnt1 ); + +/* + * Divide two 3-D points per element + * NOTE: + * Floating-point behavior matches standard library function divf4. + */ +static inline VmathPoint3 vmathP3DivPerElem_V( VmathPoint3 pnt0, VmathPoint3 pnt1 ); + +/* + * Compute the reciprocal of a 3-D point per element + * NOTE: + * Floating-point behavior matches standard library function recipf4. + */ +static inline VmathPoint3 vmathP3RecipPerElem_V( VmathPoint3 pnt ); + +/* + * Compute the square root of a 3-D point per element + * NOTE: + * Floating-point behavior matches standard library function sqrtf4. + */ +static inline VmathPoint3 vmathP3SqrtPerElem_V( VmathPoint3 pnt ); + +/* + * Compute the reciprocal square root of a 3-D point per element + * NOTE: + * Floating-point behavior matches standard library function rsqrtf4. + */ +static inline VmathPoint3 vmathP3RsqrtPerElem_V( VmathPoint3 pnt ); + +/* + * Compute the absolute value of a 3-D point per element + */ +static inline VmathPoint3 vmathP3AbsPerElem_V( VmathPoint3 pnt ); + +/* + * Copy sign from one 3-D point to another, per element + */ +static inline VmathPoint3 vmathP3CopySignPerElem_V( VmathPoint3 pnt0, VmathPoint3 pnt1 ); + +/* + * Maximum of two 3-D points per element + */ +static inline VmathPoint3 vmathP3MaxPerElem_V( VmathPoint3 pnt0, VmathPoint3 pnt1 ); + +/* + * Minimum of two 3-D points per element + */ +static inline VmathPoint3 vmathP3MinPerElem_V( VmathPoint3 pnt0, VmathPoint3 pnt1 ); + +/* + * Maximum element of a 3-D point + */ +static inline float vmathP3MaxElem_V( VmathPoint3 pnt ); + +/* + * Minimum element of a 3-D point + */ +static inline float vmathP3MinElem_V( VmathPoint3 pnt ); + +/* + * Compute the sum of all elements of a 3-D point + */ +static inline float vmathP3Sum_V( VmathPoint3 pnt ); + +/* + * Apply uniform scale to a 3-D point + */ +static inline VmathPoint3 vmathP3Scale_V( VmathPoint3 pnt, float scaleVal ); + +/* + * Apply non-uniform scale to a 3-D point + */ +static inline VmathPoint3 vmathP3NonUniformScale_V( VmathPoint3 pnt, VmathVector3 scaleVec ); + +/* + * Scalar projection of a 3-D point on a unit-length 3-D vector + */ +static inline float vmathP3Projection_V( VmathPoint3 pnt, VmathVector3 unitVec ); + +/* + * Compute the square of the distance of a 3-D point from the coordinate-system origin + */ +static inline float vmathP3DistSqrFromOrigin_V( VmathPoint3 pnt ); + +/* + * Compute the distance of a 3-D point from the coordinate-system origin + */ +static inline float vmathP3DistFromOrigin_V( VmathPoint3 pnt ); + +/* + * Compute the square of the distance between two 3-D points + */ +static inline float vmathP3DistSqr_V( VmathPoint3 pnt0, VmathPoint3 pnt1 ); + +/* + * Compute the distance between two 3-D points + */ +static inline float vmathP3Dist_V( VmathPoint3 pnt0, VmathPoint3 pnt1 ); + +/* + * Linear interpolation between two 3-D points + * NOTE: + * Does not clamp t between 0 and 1. + */ +static inline VmathPoint3 vmathP3Lerp_V( float t, VmathPoint3 pnt0, VmathPoint3 pnt1 ); + +/* + * Conditionally select between two 3-D points + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + */ +static inline VmathPoint3 vmathP3Select_V( VmathPoint3 pnt0, VmathPoint3 pnt1, unsigned int select1 ); + +/* + * Store x, y, and z elements of a 3-D point in the first three words of a quadword. + * The value of the fourth word (the word with the highest address) remains unchanged + */ +static inline void vmathP3StoreXYZ_V( VmathPoint3 pnt, vec_float4 *quad ); + +/* + * Load four three-float 3-D points, stored in three quadwords + */ +static inline void vmathP3LoadXYZArray_V( VmathPoint3 *pnt0, VmathPoint3 *pnt1, VmathPoint3 *pnt2, VmathPoint3 *pnt3, const vec_float4 *threeQuads ); + +/* + * Store four 3-D points in three quadwords + */ +static inline void vmathP3StoreXYZArray_V( VmathPoint3 pnt0, VmathPoint3 pnt1, VmathPoint3 pnt2, VmathPoint3 pnt3, vec_float4 *threeQuads ); + +/* + * Store eight 3-D points as half-floats + */ +static inline void vmathP3StoreHalfFloats_V( VmathPoint3 pnt0, VmathPoint3 pnt1, VmathPoint3 pnt2, VmathPoint3 pnt3, VmathPoint3 pnt4, VmathPoint3 pnt5, VmathPoint3 pnt6, VmathPoint3 pnt7, vec_ushort8 *threeQuads ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 3-D point + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathP3Print_V( VmathPoint3 pnt ); + +/* + * Print a 3-D point and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathP3Prints_V( VmathPoint3 pnt, const char *name ); + +#endif + +/* + * Construct a quaternion from x, y, z, and w elements + */ +static inline VmathQuat vmathQMakeFromElems_V( float x, float y, float z, float w ); + +/* + * Construct a quaternion from a 3-D vector and a scalar + */ +static inline VmathQuat vmathQMakeFromV3Scalar_V( VmathVector3 xyz, float w ); + +/* + * Copy elements from a 4-D vector into a quaternion + */ +static inline VmathQuat vmathQMakeFromV4_V( VmathVector4 vec ); + +/* + * Convert a rotation matrix to a unit-length quaternion + */ +static inline VmathQuat vmathQMakeFromM3_V( VmathMatrix3 rotMat ); + +/* + * Set all elements of a quaternion to the same scalar value + */ +static inline VmathQuat vmathQMakeFromScalar_V( float scalar ); + +/* + * Set vector float data in a quaternion + */ +static inline VmathQuat vmathQMakeFrom128_V( vec_float4 vf4 ); + +/* + * Get vector float data from a quaternion + */ +static inline vec_float4 vmathQGet128_V( VmathQuat quat ); + +/* + * Set the x, y, and z elements of a quaternion + * NOTE: + * This function does not change the w element. + */ +static inline void vmathQSetXYZ_V( VmathQuat *result, VmathVector3 vec ); + +/* + * Get the x, y, and z elements of a quaternion + */ +static inline VmathVector3 vmathQGetXYZ_V( VmathQuat quat ); + +/* + * Set the x element of a quaternion + */ +static inline void vmathQSetX_V( VmathQuat *result, float x ); + +/* + * Set the y element of a quaternion + */ +static inline void vmathQSetY_V( VmathQuat *result, float y ); + +/* + * Set the z element of a quaternion + */ +static inline void vmathQSetZ_V( VmathQuat *result, float z ); + +/* + * Set the w element of a quaternion + */ +static inline void vmathQSetW_V( VmathQuat *result, float w ); + +/* + * Get the x element of a quaternion + */ +static inline float vmathQGetX_V( VmathQuat quat ); + +/* + * Get the y element of a quaternion + */ +static inline float vmathQGetY_V( VmathQuat quat ); + +/* + * Get the z element of a quaternion + */ +static inline float vmathQGetZ_V( VmathQuat quat ); + +/* + * Get the w element of a quaternion + */ +static inline float vmathQGetW_V( VmathQuat quat ); + +/* + * Set an x, y, z, or w element of a quaternion by index + */ +static inline void vmathQSetElem_V( VmathQuat *result, int idx, float value ); + +/* + * Get an x, y, z, or w element of a quaternion by index + */ +static inline float vmathQGetElem_V( VmathQuat quat, int idx ); + +/* + * Add two quaternions + */ +static inline VmathQuat vmathQAdd_V( VmathQuat quat0, VmathQuat quat1 ); + +/* + * Subtract a quaternion from another quaternion + */ +static inline VmathQuat vmathQSub_V( VmathQuat quat0, VmathQuat quat1 ); + +/* + * Multiply two quaternions + */ +static inline VmathQuat vmathQMul_V( VmathQuat quat0, VmathQuat quat1 ); + +/* + * Multiply a quaternion by a scalar + */ +static inline VmathQuat vmathQScalarMul_V( VmathQuat quat, float scalar ); + +/* + * Divide a quaternion by a scalar + */ +static inline VmathQuat vmathQScalarDiv_V( VmathQuat quat, float scalar ); + +/* + * Negate all elements of a quaternion + */ +static inline VmathQuat vmathQNeg_V( VmathQuat quat ); + +/* + * Construct an identity quaternion + */ +static inline VmathQuat vmathQMakeIdentity_V( ); + +/* + * Construct a quaternion to rotate between two unit-length 3-D vectors + * NOTE: + * The result is unpredictable if unitVec0 and unitVec1 point in opposite directions. + */ +static inline VmathQuat vmathQMakeRotationArc_V( VmathVector3 unitVec0, VmathVector3 unitVec1 ); + +/* + * Construct a quaternion to rotate around a unit-length 3-D vector + */ +static inline VmathQuat vmathQMakeRotationAxis_V( float radians, VmathVector3 unitVec ); + +/* + * Construct a quaternion to rotate around the x axis + */ +static inline VmathQuat vmathQMakeRotationX_V( float radians ); + +/* + * Construct a quaternion to rotate around the y axis + */ +static inline VmathQuat vmathQMakeRotationY_V( float radians ); + +/* + * Construct a quaternion to rotate around the z axis + */ +static inline VmathQuat vmathQMakeRotationZ_V( float radians ); + +/* + * Compute the conjugate of a quaternion + */ +static inline VmathQuat vmathQConj_V( VmathQuat quat ); + +/* + * Use a unit-length quaternion to rotate a 3-D vector + */ +static inline VmathVector3 vmathQRotate_V( VmathQuat unitQuat, VmathVector3 vec ); + +/* + * Compute the dot product of two quaternions + */ +static inline float vmathQDot_V( VmathQuat quat0, VmathQuat quat1 ); + +/* + * Compute the norm of a quaternion + */ +static inline float vmathQNorm_V( VmathQuat quat ); + +/* + * Compute the length of a quaternion + */ +static inline float vmathQLength_V( VmathQuat quat ); + +/* + * Normalize a quaternion + * NOTE: + * The result is unpredictable when all elements of quat are at or near zero. + */ +static inline VmathQuat vmathQNormalize_V( VmathQuat quat ); + +/* + * Linear interpolation between two quaternions + * NOTE: + * Does not clamp t between 0 and 1. + */ +static inline VmathQuat vmathQLerp_V( float t, VmathQuat quat0, VmathQuat quat1 ); + +/* + * Spherical linear interpolation between two quaternions + * NOTE: + * Interpolates along the shortest path between orientations. + * Does not clamp t between 0 and 1. + */ +static inline VmathQuat vmathQSlerp_V( float t, VmathQuat unitQuat0, VmathQuat unitQuat1 ); + +/* + * Spherical quadrangle interpolation + */ +static inline VmathQuat vmathQSquad_V( float t, VmathQuat unitQuat0, VmathQuat unitQuat1, VmathQuat unitQuat2, VmathQuat unitQuat3 ); + +/* + * Conditionally select between two quaternions + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + */ +static inline VmathQuat vmathQSelect_V( VmathQuat quat0, VmathQuat quat1, unsigned int select1 ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a quaternion + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathQPrint_V( VmathQuat quat ); + +/* + * Print a quaternion and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathQPrints_V( VmathQuat quat, const char *name ); + +#endif + +/* + * Construct a 3x3 matrix containing the specified columns + */ +static inline VmathMatrix3 vmathM3MakeFromCols_V( VmathVector3 col0, VmathVector3 col1, VmathVector3 col2 ); + +/* + * Construct a 3x3 rotation matrix from a unit-length quaternion + */ +static inline VmathMatrix3 vmathM3MakeFromQ_V( VmathQuat unitQuat ); + +/* + * Set all elements of a 3x3 matrix to the same scalar value + */ +static inline VmathMatrix3 vmathM3MakeFromScalar_V( float scalar ); + +/* + * Set column 0 of a 3x3 matrix + */ +static inline void vmathM3SetCol0_V( VmathMatrix3 *result, VmathVector3 col0 ); + +/* + * Set column 1 of a 3x3 matrix + */ +static inline void vmathM3SetCol1_V( VmathMatrix3 *result, VmathVector3 col1 ); + +/* + * Set column 2 of a 3x3 matrix + */ +static inline void vmathM3SetCol2_V( VmathMatrix3 *result, VmathVector3 col2 ); + +/* + * Get column 0 of a 3x3 matrix + */ +static inline VmathVector3 vmathM3GetCol0_V( VmathMatrix3 mat ); + +/* + * Get column 1 of a 3x3 matrix + */ +static inline VmathVector3 vmathM3GetCol1_V( VmathMatrix3 mat ); + +/* + * Get column 2 of a 3x3 matrix + */ +static inline VmathVector3 vmathM3GetCol2_V( VmathMatrix3 mat ); + +/* + * Set the column of a 3x3 matrix referred to by the specified index + */ +static inline void vmathM3SetCol_V( VmathMatrix3 *result, int col, VmathVector3 vec ); + +/* + * Set the row of a 3x3 matrix referred to by the specified index + */ +static inline void vmathM3SetRow_V( VmathMatrix3 *result, int row, VmathVector3 vec ); + +/* + * Get the column of a 3x3 matrix referred to by the specified index + */ +static inline VmathVector3 vmathM3GetCol_V( VmathMatrix3 mat, int col ); + +/* + * Get the row of a 3x3 matrix referred to by the specified index + */ +static inline VmathVector3 vmathM3GetRow_V( VmathMatrix3 mat, int row ); + +/* + * Set the element of a 3x3 matrix referred to by column and row indices + */ +static inline void vmathM3SetElem_V( VmathMatrix3 *result, int col, int row, float val ); + +/* + * Get the element of a 3x3 matrix referred to by column and row indices + */ +static inline float vmathM3GetElem_V( VmathMatrix3 mat, int col, int row ); + +/* + * Add two 3x3 matrices + */ +static inline VmathMatrix3 vmathM3Add_V( VmathMatrix3 mat0, VmathMatrix3 mat1 ); + +/* + * Subtract a 3x3 matrix from another 3x3 matrix + */ +static inline VmathMatrix3 vmathM3Sub_V( VmathMatrix3 mat0, VmathMatrix3 mat1 ); + +/* + * Negate all elements of a 3x3 matrix + */ +static inline VmathMatrix3 vmathM3Neg_V( VmathMatrix3 mat ); + +/* + * Multiply a 3x3 matrix by a scalar + */ +static inline VmathMatrix3 vmathM3ScalarMul_V( VmathMatrix3 mat, float scalar ); + +/* + * Multiply a 3x3 matrix by a 3-D vector + */ +static inline VmathVector3 vmathM3MulV3_V( VmathMatrix3 mat, VmathVector3 vec ); + +/* + * Multiply two 3x3 matrices + */ +static inline VmathMatrix3 vmathM3Mul_V( VmathMatrix3 mat0, VmathMatrix3 mat1 ); + +/* + * Construct an identity 3x3 matrix + */ +static inline VmathMatrix3 vmathM3MakeIdentity_V( ); + +/* + * Construct a 3x3 matrix to rotate around the x axis + */ +static inline VmathMatrix3 vmathM3MakeRotationX_V( float radians ); + +/* + * Construct a 3x3 matrix to rotate around the y axis + */ +static inline VmathMatrix3 vmathM3MakeRotationY_V( float radians ); + +/* + * Construct a 3x3 matrix to rotate around the z axis + */ +static inline VmathMatrix3 vmathM3MakeRotationZ_V( float radians ); + +/* + * Construct a 3x3 matrix to rotate around the x, y, and z axes + */ +static inline VmathMatrix3 vmathM3MakeRotationZYX_V( VmathVector3 radiansXYZ ); + +/* + * Construct a 3x3 matrix to rotate around a unit-length 3-D vector + */ +static inline VmathMatrix3 vmathM3MakeRotationAxis_V( float radians, VmathVector3 unitVec ); + +/* + * Construct a rotation matrix from a unit-length quaternion + */ +static inline VmathMatrix3 vmathM3MakeRotationQ_V( VmathQuat unitQuat ); + +/* + * Construct a 3x3 matrix to perform scaling + */ +static inline VmathMatrix3 vmathM3MakeScale_V( VmathVector3 scaleVec ); + +/* + * Append (post-multiply) a scale transformation to a 3x3 matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline VmathMatrix3 vmathM3AppendScale_V( VmathMatrix3 mat, VmathVector3 scaleVec ); + +/* + * Prepend (pre-multiply) a scale transformation to a 3x3 matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline VmathMatrix3 vmathM3PrependScale_V( VmathVector3 scaleVec, VmathMatrix3 mat ); + +/* + * Multiply two 3x3 matrices per element + */ +static inline VmathMatrix3 vmathM3MulPerElem_V( VmathMatrix3 mat0, VmathMatrix3 mat1 ); + +/* + * Compute the absolute value of a 3x3 matrix per element + */ +static inline VmathMatrix3 vmathM3AbsPerElem_V( VmathMatrix3 mat ); + +/* + * Transpose of a 3x3 matrix + */ +static inline VmathMatrix3 vmathM3Transpose_V( VmathMatrix3 mat ); + +/* + * Compute the inverse of a 3x3 matrix + * NOTE: + * Result is unpredictable when the determinant of mat is equal to or near 0. + */ +static inline VmathMatrix3 vmathM3Inverse_V( VmathMatrix3 mat ); + +/* + * Determinant of a 3x3 matrix + */ +static inline float vmathM3Determinant_V( VmathMatrix3 mat ); + +/* + * Conditionally select between two 3x3 matrices + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + */ +static inline VmathMatrix3 vmathM3Select_V( VmathMatrix3 mat0, VmathMatrix3 mat1, unsigned int select1 ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 3x3 matrix + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathM3Print_V( VmathMatrix3 mat ); + +/* + * Print a 3x3 matrix and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathM3Prints_V( VmathMatrix3 mat, const char *name ); + +#endif + +/* + * Construct a 4x4 matrix containing the specified columns + */ +static inline VmathMatrix4 vmathM4MakeFromCols_V( VmathVector4 col0, VmathVector4 col1, VmathVector4 col2, VmathVector4 col3 ); + +/* + * Construct a 4x4 matrix from a 3x4 transformation matrix + */ +static inline VmathMatrix4 vmathM4MakeFromT3_V( VmathTransform3 mat ); + +/* + * Construct a 4x4 matrix from a 3x3 matrix and a 3-D vector + */ +static inline VmathMatrix4 vmathM4MakeFromM3V3_V( VmathMatrix3 mat, VmathVector3 translateVec ); + +/* + * Construct a 4x4 matrix from a unit-length quaternion and a 3-D vector + */ +static inline VmathMatrix4 vmathM4MakeFromQV3_V( VmathQuat unitQuat, VmathVector3 translateVec ); + +/* + * Set all elements of a 4x4 matrix to the same scalar value + */ +static inline VmathMatrix4 vmathM4MakeFromScalar_V( float scalar ); + +/* + * Set the upper-left 3x3 submatrix + * NOTE: + * This function does not change the bottom row elements. + */ +static inline void vmathM4SetUpper3x3_V( VmathMatrix4 *result, VmathMatrix3 mat3 ); + +/* + * Get the upper-left 3x3 submatrix of a 4x4 matrix + */ +static inline VmathMatrix3 vmathM4GetUpper3x3_V( VmathMatrix4 mat ); + +/* + * Set translation component + * NOTE: + * This function does not change the bottom row elements. + */ +static inline void vmathM4SetTranslation_V( VmathMatrix4 *result, VmathVector3 translateVec ); + +/* + * Get the translation component of a 4x4 matrix + */ +static inline VmathVector3 vmathM4GetTranslation_V( VmathMatrix4 mat ); + +/* + * Set column 0 of a 4x4 matrix + */ +static inline void vmathM4SetCol0_V( VmathMatrix4 *result, VmathVector4 col0 ); + +/* + * Set column 1 of a 4x4 matrix + */ +static inline void vmathM4SetCol1_V( VmathMatrix4 *result, VmathVector4 col1 ); + +/* + * Set column 2 of a 4x4 matrix + */ +static inline void vmathM4SetCol2_V( VmathMatrix4 *result, VmathVector4 col2 ); + +/* + * Set column 3 of a 4x4 matrix + */ +static inline void vmathM4SetCol3_V( VmathMatrix4 *result, VmathVector4 col3 ); + +/* + * Get column 0 of a 4x4 matrix + */ +static inline VmathVector4 vmathM4GetCol0_V( VmathMatrix4 mat ); + +/* + * Get column 1 of a 4x4 matrix + */ +static inline VmathVector4 vmathM4GetCol1_V( VmathMatrix4 mat ); + +/* + * Get column 2 of a 4x4 matrix + */ +static inline VmathVector4 vmathM4GetCol2_V( VmathMatrix4 mat ); + +/* + * Get column 3 of a 4x4 matrix + */ +static inline VmathVector4 vmathM4GetCol3_V( VmathMatrix4 mat ); + +/* + * Set the column of a 4x4 matrix referred to by the specified index + */ +static inline void vmathM4SetCol_V( VmathMatrix4 *result, int col, VmathVector4 vec ); + +/* + * Set the row of a 4x4 matrix referred to by the specified index + */ +static inline void vmathM4SetRow_V( VmathMatrix4 *result, int row, VmathVector4 vec ); + +/* + * Get the column of a 4x4 matrix referred to by the specified index + */ +static inline VmathVector4 vmathM4GetCol_V( VmathMatrix4 mat, int col ); + +/* + * Get the row of a 4x4 matrix referred to by the specified index + */ +static inline VmathVector4 vmathM4GetRow_V( VmathMatrix4 mat, int row ); + +/* + * Set the element of a 4x4 matrix referred to by column and row indices + */ +static inline void vmathM4SetElem_V( VmathMatrix4 *result, int col, int row, float val ); + +/* + * Get the element of a 4x4 matrix referred to by column and row indices + */ +static inline float vmathM4GetElem_V( VmathMatrix4 mat, int col, int row ); + +/* + * Add two 4x4 matrices + */ +static inline VmathMatrix4 vmathM4Add_V( VmathMatrix4 mat0, VmathMatrix4 mat1 ); + +/* + * Subtract a 4x4 matrix from another 4x4 matrix + */ +static inline VmathMatrix4 vmathM4Sub_V( VmathMatrix4 mat0, VmathMatrix4 mat1 ); + +/* + * Negate all elements of a 4x4 matrix + */ +static inline VmathMatrix4 vmathM4Neg_V( VmathMatrix4 mat ); + +/* + * Multiply a 4x4 matrix by a scalar + */ +static inline VmathMatrix4 vmathM4ScalarMul_V( VmathMatrix4 mat, float scalar ); + +/* + * Multiply a 4x4 matrix by a 4-D vector + */ +static inline VmathVector4 vmathM4MulV4_V( VmathMatrix4 mat, VmathVector4 vec ); + +/* + * Multiply a 4x4 matrix by a 3-D vector + */ +static inline VmathVector4 vmathM4MulV3_V( VmathMatrix4 mat, VmathVector3 vec ); + +/* + * Multiply a 4x4 matrix by a 3-D point + */ +static inline VmathVector4 vmathM4MulP3_V( VmathMatrix4 mat, VmathPoint3 pnt ); + +/* + * Multiply two 4x4 matrices + */ +static inline VmathMatrix4 vmathM4Mul_V( VmathMatrix4 mat0, VmathMatrix4 mat1 ); + +/* + * Multiply a 4x4 matrix by a 3x4 transformation matrix + */ +static inline VmathMatrix4 vmathM4MulT3_V( VmathMatrix4 mat, VmathTransform3 tfrm ); + +/* + * Construct an identity 4x4 matrix + */ +static inline VmathMatrix4 vmathM4MakeIdentity_V( ); + +/* + * Construct a 4x4 matrix to rotate around the x axis + */ +static inline VmathMatrix4 vmathM4MakeRotationX_V( float radians ); + +/* + * Construct a 4x4 matrix to rotate around the y axis + */ +static inline VmathMatrix4 vmathM4MakeRotationY_V( float radians ); + +/* + * Construct a 4x4 matrix to rotate around the z axis + */ +static inline VmathMatrix4 vmathM4MakeRotationZ_V( float radians ); + +/* + * Construct a 4x4 matrix to rotate around the x, y, and z axes + */ +static inline VmathMatrix4 vmathM4MakeRotationZYX_V( VmathVector3 radiansXYZ ); + +/* + * Construct a 4x4 matrix to rotate around a unit-length 3-D vector + */ +static inline VmathMatrix4 vmathM4MakeRotationAxis_V( float radians, VmathVector3 unitVec ); + +/* + * Construct a rotation matrix from a unit-length quaternion + */ +static inline VmathMatrix4 vmathM4MakeRotationQ_V( VmathQuat unitQuat ); + +/* + * Construct a 4x4 matrix to perform scaling + */ +static inline VmathMatrix4 vmathM4MakeScale_V( VmathVector3 scaleVec ); + +/* + * Construct a 4x4 matrix to perform translation + */ +static inline VmathMatrix4 vmathM4MakeTranslation_V( VmathVector3 translateVec ); + +/* + * Construct viewing matrix based on eye position, position looked at, and up direction + */ +static inline VmathMatrix4 vmathM4MakeLookAt_V( VmathPoint3 eyePos, VmathPoint3 lookAtPos, VmathVector3 upVec ); + +/* + * Construct a perspective projection matrix + */ +static inline VmathMatrix4 vmathM4MakePerspective_V( float fovyRadians, float aspect, float zNear, float zFar ); + +/* + * Construct a perspective projection matrix based on frustum + */ +static inline VmathMatrix4 vmathM4MakeFrustum_V( float left, float right, float bottom, float top, float zNear, float zFar ); + +/* + * Construct an orthographic projection matrix + */ +static inline VmathMatrix4 vmathM4MakeOrthographic_V( float left, float right, float bottom, float top, float zNear, float zFar ); + +/* + * Append (post-multiply) a scale transformation to a 4x4 matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline VmathMatrix4 vmathM4AppendScale_V( VmathMatrix4 mat, VmathVector3 scaleVec ); + +/* + * Prepend (pre-multiply) a scale transformation to a 4x4 matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline VmathMatrix4 vmathM4PrependScale_V( VmathVector3 scaleVec, VmathMatrix4 mat ); + +/* + * Multiply two 4x4 matrices per element + */ +static inline VmathMatrix4 vmathM4MulPerElem_V( VmathMatrix4 mat0, VmathMatrix4 mat1 ); + +/* + * Compute the absolute value of a 4x4 matrix per element + */ +static inline VmathMatrix4 vmathM4AbsPerElem_V( VmathMatrix4 mat ); + +/* + * Transpose of a 4x4 matrix + */ +static inline VmathMatrix4 vmathM4Transpose_V( VmathMatrix4 mat ); + +/* + * Compute the inverse of a 4x4 matrix + * NOTE: + * Result is unpredictable when the determinant of mat is equal to or near 0. + */ +static inline VmathMatrix4 vmathM4Inverse_V( VmathMatrix4 mat ); + +/* + * Compute the inverse of a 4x4 matrix, which is expected to be an affine matrix + * NOTE: + * This can be used to achieve better performance than a general inverse when the specified 4x4 matrix meets the given restrictions. The result is unpredictable when the determinant of mat is equal to or near 0. + */ +static inline VmathMatrix4 vmathM4AffineInverse_V( VmathMatrix4 mat ); + +/* + * Compute the inverse of a 4x4 matrix, which is expected to be an affine matrix with an orthogonal upper-left 3x3 submatrix + * NOTE: + * This can be used to achieve better performance than a general inverse when the specified 4x4 matrix meets the given restrictions. + */ +static inline VmathMatrix4 vmathM4OrthoInverse_V( VmathMatrix4 mat ); + +/* + * Determinant of a 4x4 matrix + */ +static inline float vmathM4Determinant_V( VmathMatrix4 mat ); + +/* + * Conditionally select between two 4x4 matrices + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + */ +static inline VmathMatrix4 vmathM4Select_V( VmathMatrix4 mat0, VmathMatrix4 mat1, unsigned int select1 ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 4x4 matrix + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathM4Print_V( VmathMatrix4 mat ); + +/* + * Print a 4x4 matrix and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathM4Prints_V( VmathMatrix4 mat, const char *name ); + +#endif + +/* + * Construct a 3x4 transformation matrix containing the specified columns + */ +static inline VmathTransform3 vmathT3MakeFromCols_V( VmathVector3 col0, VmathVector3 col1, VmathVector3 col2, VmathVector3 col3 ); + +/* + * Construct a 3x4 transformation matrix from a 3x3 matrix and a 3-D vector + */ +static inline VmathTransform3 vmathT3MakeFromM3V3_V( VmathMatrix3 tfrm, VmathVector3 translateVec ); + +/* + * Construct a 3x4 transformation matrix from a unit-length quaternion and a 3-D vector + */ +static inline VmathTransform3 vmathT3MakeFromQV3_V( VmathQuat unitQuat, VmathVector3 translateVec ); + +/* + * Set all elements of a 3x4 transformation matrix to the same scalar value + */ +static inline VmathTransform3 vmathT3MakeFromScalar_V( float scalar ); + +/* + * Set the upper-left 3x3 submatrix + */ +static inline void vmathT3SetUpper3x3_V( VmathTransform3 *result, VmathMatrix3 mat3 ); + +/* + * Get the upper-left 3x3 submatrix of a 3x4 transformation matrix + */ +static inline VmathMatrix3 vmathT3GetUpper3x3_V( VmathTransform3 tfrm ); + +/* + * Set translation component + */ +static inline void vmathT3SetTranslation_V( VmathTransform3 *result, VmathVector3 translateVec ); + +/* + * Get the translation component of a 3x4 transformation matrix + */ +static inline VmathVector3 vmathT3GetTranslation_V( VmathTransform3 tfrm ); + +/* + * Set column 0 of a 3x4 transformation matrix + */ +static inline void vmathT3SetCol0_V( VmathTransform3 *result, VmathVector3 col0 ); + +/* + * Set column 1 of a 3x4 transformation matrix + */ +static inline void vmathT3SetCol1_V( VmathTransform3 *result, VmathVector3 col1 ); + +/* + * Set column 2 of a 3x4 transformation matrix + */ +static inline void vmathT3SetCol2_V( VmathTransform3 *result, VmathVector3 col2 ); + +/* + * Set column 3 of a 3x4 transformation matrix + */ +static inline void vmathT3SetCol3_V( VmathTransform3 *result, VmathVector3 col3 ); + +/* + * Get column 0 of a 3x4 transformation matrix + */ +static inline VmathVector3 vmathT3GetCol0_V( VmathTransform3 tfrm ); + +/* + * Get column 1 of a 3x4 transformation matrix + */ +static inline VmathVector3 vmathT3GetCol1_V( VmathTransform3 tfrm ); + +/* + * Get column 2 of a 3x4 transformation matrix + */ +static inline VmathVector3 vmathT3GetCol2_V( VmathTransform3 tfrm ); + +/* + * Get column 3 of a 3x4 transformation matrix + */ +static inline VmathVector3 vmathT3GetCol3_V( VmathTransform3 tfrm ); + +/* + * Set the column of a 3x4 transformation matrix referred to by the specified index + */ +static inline void vmathT3SetCol_V( VmathTransform3 *result, int col, VmathVector3 vec ); + +/* + * Set the row of a 3x4 transformation matrix referred to by the specified index + */ +static inline void vmathT3SetRow_V( VmathTransform3 *result, int row, VmathVector4 vec ); + +/* + * Get the column of a 3x4 transformation matrix referred to by the specified index + */ +static inline VmathVector3 vmathT3GetCol_V( VmathTransform3 tfrm, int col ); + +/* + * Get the row of a 3x4 transformation matrix referred to by the specified index + */ +static inline VmathVector4 vmathT3GetRow_V( VmathTransform3 tfrm, int row ); + +/* + * Set the element of a 3x4 transformation matrix referred to by column and row indices + */ +static inline void vmathT3SetElem_V( VmathTransform3 *result, int col, int row, float val ); + +/* + * Get the element of a 3x4 transformation matrix referred to by column and row indices + */ +static inline float vmathT3GetElem_V( VmathTransform3 tfrm, int col, int row ); + +/* + * Multiply a 3x4 transformation matrix by a 3-D vector + */ +static inline VmathVector3 vmathT3MulV3_V( VmathTransform3 tfrm, VmathVector3 vec ); + +/* + * Multiply a 3x4 transformation matrix by a 3-D point + */ +static inline VmathPoint3 vmathT3MulP3_V( VmathTransform3 tfrm, VmathPoint3 pnt ); + +/* + * Multiply two 3x4 transformation matrices + */ +static inline VmathTransform3 vmathT3Mul_V( VmathTransform3 tfrm0, VmathTransform3 tfrm1 ); + +/* + * Construct an identity 3x4 transformation matrix + */ +static inline VmathTransform3 vmathT3MakeIdentity_V( ); + +/* + * Construct a 3x4 transformation matrix to rotate around the x axis + */ +static inline VmathTransform3 vmathT3MakeRotationX_V( float radians ); + +/* + * Construct a 3x4 transformation matrix to rotate around the y axis + */ +static inline VmathTransform3 vmathT3MakeRotationY_V( float radians ); + +/* + * Construct a 3x4 transformation matrix to rotate around the z axis + */ +static inline VmathTransform3 vmathT3MakeRotationZ_V( float radians ); + +/* + * Construct a 3x4 transformation matrix to rotate around the x, y, and z axes + */ +static inline VmathTransform3 vmathT3MakeRotationZYX_V( VmathVector3 radiansXYZ ); + +/* + * Construct a 3x4 transformation matrix to rotate around a unit-length 3-D vector + */ +static inline VmathTransform3 vmathT3MakeRotationAxis_V( float radians, VmathVector3 unitVec ); + +/* + * Construct a rotation matrix from a unit-length quaternion + */ +static inline VmathTransform3 vmathT3MakeRotationQ_V( VmathQuat unitQuat ); + +/* + * Construct a 3x4 transformation matrix to perform scaling + */ +static inline VmathTransform3 vmathT3MakeScale_V( VmathVector3 scaleVec ); + +/* + * Construct a 3x4 transformation matrix to perform translation + */ +static inline VmathTransform3 vmathT3MakeTranslation_V( VmathVector3 translateVec ); + +/* + * Append (post-multiply) a scale transformation to a 3x4 transformation matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline VmathTransform3 vmathT3AppendScale_V( VmathTransform3 tfrm, VmathVector3 scaleVec ); + +/* + * Prepend (pre-multiply) a scale transformation to a 3x4 transformation matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline VmathTransform3 vmathT3PrependScale_V( VmathVector3 scaleVec, VmathTransform3 tfrm ); + +/* + * Multiply two 3x4 transformation matrices per element + */ +static inline VmathTransform3 vmathT3MulPerElem_V( VmathTransform3 tfrm0, VmathTransform3 tfrm1 ); + +/* + * Compute the absolute value of a 3x4 transformation matrix per element + */ +static inline VmathTransform3 vmathT3AbsPerElem_V( VmathTransform3 tfrm ); + +/* + * Inverse of a 3x4 transformation matrix + * NOTE: + * Result is unpredictable when the determinant of the left 3x3 submatrix is equal to or near 0. + */ +static inline VmathTransform3 vmathT3Inverse_V( VmathTransform3 tfrm ); + +/* + * Compute the inverse of a 3x4 transformation matrix, expected to have an orthogonal upper-left 3x3 submatrix + * NOTE: + * This can be used to achieve better performance than a general inverse when the specified 3x4 transformation matrix meets the given restrictions. + */ +static inline VmathTransform3 vmathT3OrthoInverse_V( VmathTransform3 tfrm ); + +/* + * Conditionally select between two 3x4 transformation matrices + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + */ +static inline VmathTransform3 vmathT3Select_V( VmathTransform3 tfrm0, VmathTransform3 tfrm1, unsigned int select1 ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 3x4 transformation matrix + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathT3Print_V( VmathTransform3 tfrm ); + +/* + * Print a 3x4 transformation matrix and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathT3Prints_V( VmathTransform3 tfrm, const char *name ); + +#endif + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#include "vectormath_aos.h" +#include "vec_aos_v.h" +#include "quat_aos_v.h" +#include "mat_aos_v.h" + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/spu/c/vectormath_soa.h b/Extras/vectormathlibrary/include/vectormath/spu/c/vectormath_soa.h new file mode 100644 index 000000000..c82afa234 --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/spu/c/vectormath_soa.h @@ -0,0 +1,2012 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_SOA_C_H +#define _VECTORMATH_SOA_C_H + +#include +#include +#include "vectormath_aos.h" + +#ifdef _VECTORMATH_DEBUG +#endif + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#ifndef _VECTORMATH_SOA_C_TYPES_H +#define _VECTORMATH_SOA_C_TYPES_H + +/* A set of four 3-D vectors in structure-of-arrays format + */ +typedef struct _VmathSoaVector3 +{ + vec_float4 x; + vec_float4 y; + vec_float4 z; +} VmathSoaVector3; + +/* A set of four 4-D vectors in structure-of-arrays format + */ +typedef struct _VmathSoaVector4 +{ + vec_float4 x; + vec_float4 y; + vec_float4 z; + vec_float4 w; +} VmathSoaVector4; + +/* A set of four 3-D points in structure-of-arrays format + */ +typedef struct _VmathSoaPoint3 +{ + vec_float4 x; + vec_float4 y; + vec_float4 z; +} VmathSoaPoint3; + +/* A set of four quaternions in structure-of-arrays format + */ +typedef struct _VmathSoaQuat +{ + vec_float4 x; + vec_float4 y; + vec_float4 z; + vec_float4 w; +} VmathSoaQuat; + +/* A set of four 3x3 matrices in structure-of-arrays format + */ +typedef struct _VmathSoaMatrix3 +{ + VmathSoaVector3 col0; + VmathSoaVector3 col1; + VmathSoaVector3 col2; +} VmathSoaMatrix3; + +/* A set of four 4x4 matrices in structure-of-arrays format + */ +typedef struct _VmathSoaMatrix4 +{ + VmathSoaVector4 col0; + VmathSoaVector4 col1; + VmathSoaVector4 col2; + VmathSoaVector4 col3; +} VmathSoaMatrix4; + +/* A set of four 3x4 transformation matrices in structure-of-arrays format + */ +typedef struct _VmathSoaTransform3 +{ + VmathSoaVector3 col0; + VmathSoaVector3 col1; + VmathSoaVector3 col2; + VmathSoaVector3 col3; +} VmathSoaTransform3; + +#endif + +/* + * Copy a 3-D vector + */ +static inline void vmathSoaV3Copy( VmathSoaVector3 *result, const VmathSoaVector3 *vec ); + +/* + * Construct a 3-D vector from x, y, and z elements + */ +static inline void vmathSoaV3MakeFromElems( VmathSoaVector3 *result, vec_float4 x, vec_float4 y, vec_float4 z ); + +/* + * Copy elements from a 3-D point into a 3-D vector + */ +static inline void vmathSoaV3MakeFromP3( VmathSoaVector3 *result, const VmathSoaPoint3 *pnt ); + +/* + * Set all elements of a 3-D vector to the same scalar value + */ +static inline void vmathSoaV3MakeFromScalar( VmathSoaVector3 *result, vec_float4 scalar ); + +/* + * Replicate an AoS 3-D vector + */ +static inline void vmathSoaV3MakeFromAos( VmathSoaVector3 *result, const VmathVector3 *vec ); + +/* + * Insert four AoS 3-D vectors + */ +static inline void vmathSoaV3MakeFrom4Aos( VmathSoaVector3 *result, const VmathVector3 *vec0, const VmathVector3 *vec1, const VmathVector3 *vec2, const VmathVector3 *vec3 ); + +/* + * Extract four AoS 3-D vectors + */ +static inline void vmathSoaV3Get4Aos( const VmathSoaVector3 *vec, VmathVector3 *result0, VmathVector3 *result1, VmathVector3 *result2, VmathVector3 *result3 ); + +/* + * Set the x element of a 3-D vector + */ +static inline void vmathSoaV3SetX( VmathSoaVector3 *result, vec_float4 x ); + +/* + * Set the y element of a 3-D vector + */ +static inline void vmathSoaV3SetY( VmathSoaVector3 *result, vec_float4 y ); + +/* + * Set the z element of a 3-D vector + */ +static inline void vmathSoaV3SetZ( VmathSoaVector3 *result, vec_float4 z ); + +/* + * Get the x element of a 3-D vector + */ +static inline vec_float4 vmathSoaV3GetX( const VmathSoaVector3 *vec ); + +/* + * Get the y element of a 3-D vector + */ +static inline vec_float4 vmathSoaV3GetY( const VmathSoaVector3 *vec ); + +/* + * Get the z element of a 3-D vector + */ +static inline vec_float4 vmathSoaV3GetZ( const VmathSoaVector3 *vec ); + +/* + * Set an x, y, or z element of a 3-D vector by index + */ +static inline void vmathSoaV3SetElem( VmathSoaVector3 *result, int idx, vec_float4 value ); + +/* + * Get an x, y, or z element of a 3-D vector by index + */ +static inline vec_float4 vmathSoaV3GetElem( const VmathSoaVector3 *vec, int idx ); + +/* + * Add two 3-D vectors + */ +static inline void vmathSoaV3Add( VmathSoaVector3 *result, const VmathSoaVector3 *vec0, const VmathSoaVector3 *vec1 ); + +/* + * Subtract a 3-D vector from another 3-D vector + */ +static inline void vmathSoaV3Sub( VmathSoaVector3 *result, const VmathSoaVector3 *vec0, const VmathSoaVector3 *vec1 ); + +/* + * Add a 3-D vector to a 3-D point + */ +static inline void vmathSoaV3AddP3( VmathSoaPoint3 *result, const VmathSoaVector3 *vec, const VmathSoaPoint3 *pnt ); + +/* + * Multiply a 3-D vector by a scalar + */ +static inline void vmathSoaV3ScalarMul( VmathSoaVector3 *result, const VmathSoaVector3 *vec, vec_float4 scalar ); + +/* + * Divide a 3-D vector by a scalar + */ +static inline void vmathSoaV3ScalarDiv( VmathSoaVector3 *result, const VmathSoaVector3 *vec, vec_float4 scalar ); + +/* + * Negate all elements of a 3-D vector + */ +static inline void vmathSoaV3Neg( VmathSoaVector3 *result, const VmathSoaVector3 *vec ); + +/* + * Construct x axis + */ +static inline void vmathSoaV3MakeXAxis( VmathSoaVector3 *result ); + +/* + * Construct y axis + */ +static inline void vmathSoaV3MakeYAxis( VmathSoaVector3 *result ); + +/* + * Construct z axis + */ +static inline void vmathSoaV3MakeZAxis( VmathSoaVector3 *result ); + +/* + * Multiply two 3-D vectors per element + */ +static inline void vmathSoaV3MulPerElem( VmathSoaVector3 *result, const VmathSoaVector3 *vec0, const VmathSoaVector3 *vec1 ); + +/* + * Divide two 3-D vectors per element + * NOTE: + * Floating-point behavior matches standard library function divf4. + */ +static inline void vmathSoaV3DivPerElem( VmathSoaVector3 *result, const VmathSoaVector3 *vec0, const VmathSoaVector3 *vec1 ); + +/* + * Compute the reciprocal of a 3-D vector per element + * NOTE: + * Floating-point behavior matches standard library function recipf4. + */ +static inline void vmathSoaV3RecipPerElem( VmathSoaVector3 *result, const VmathSoaVector3 *vec ); + +/* + * Compute the square root of a 3-D vector per element + * NOTE: + * Floating-point behavior matches standard library function sqrtf4. + */ +static inline void vmathSoaV3SqrtPerElem( VmathSoaVector3 *result, const VmathSoaVector3 *vec ); + +/* + * Compute the reciprocal square root of a 3-D vector per element + * NOTE: + * Floating-point behavior matches standard library function rsqrtf4. + */ +static inline void vmathSoaV3RsqrtPerElem( VmathSoaVector3 *result, const VmathSoaVector3 *vec ); + +/* + * Compute the absolute value of a 3-D vector per element + */ +static inline void vmathSoaV3AbsPerElem( VmathSoaVector3 *result, const VmathSoaVector3 *vec ); + +/* + * Copy sign from one 3-D vector to another, per element + */ +static inline void vmathSoaV3CopySignPerElem( VmathSoaVector3 *result, const VmathSoaVector3 *vec0, const VmathSoaVector3 *vec1 ); + +/* + * Maximum of two 3-D vectors per element + */ +static inline void vmathSoaV3MaxPerElem( VmathSoaVector3 *result, const VmathSoaVector3 *vec0, const VmathSoaVector3 *vec1 ); + +/* + * Minimum of two 3-D vectors per element + */ +static inline void vmathSoaV3MinPerElem( VmathSoaVector3 *result, const VmathSoaVector3 *vec0, const VmathSoaVector3 *vec1 ); + +/* + * Maximum element of a 3-D vector + */ +static inline vec_float4 vmathSoaV3MaxElem( const VmathSoaVector3 *vec ); + +/* + * Minimum element of a 3-D vector + */ +static inline vec_float4 vmathSoaV3MinElem( const VmathSoaVector3 *vec ); + +/* + * Compute the sum of all elements of a 3-D vector + */ +static inline vec_float4 vmathSoaV3Sum( const VmathSoaVector3 *vec ); + +/* + * Compute the dot product of two 3-D vectors + */ +static inline vec_float4 vmathSoaV3Dot( const VmathSoaVector3 *vec0, const VmathSoaVector3 *vec1 ); + +/* + * Compute the square of the length of a 3-D vector + */ +static inline vec_float4 vmathSoaV3LengthSqr( const VmathSoaVector3 *vec ); + +/* + * Compute the length of a 3-D vector + */ +static inline vec_float4 vmathSoaV3Length( const VmathSoaVector3 *vec ); + +/* + * Normalize a 3-D vector + * NOTE: + * The result is unpredictable when all elements of vec are at or near zero. + */ +static inline void vmathSoaV3Normalize( VmathSoaVector3 *result, const VmathSoaVector3 *vec ); + +/* + * Compute cross product of two 3-D vectors + */ +static inline void vmathSoaV3Cross( VmathSoaVector3 *result, const VmathSoaVector3 *vec0, const VmathSoaVector3 *vec1 ); + +/* + * Outer product of two 3-D vectors + */ +static inline void vmathSoaV3Outer( VmathSoaMatrix3 *result, const VmathSoaVector3 *vec0, const VmathSoaVector3 *vec1 ); + +/* + * Pre-multiply a row vector by a 3x3 matrix + */ +static inline void vmathSoaV3RowMul( VmathSoaVector3 *result, const VmathSoaVector3 *vec, const VmathSoaMatrix3 *mat ); + +/* + * Cross-product matrix of a 3-D vector + */ +static inline void vmathSoaV3CrossMatrix( VmathSoaMatrix3 *result, const VmathSoaVector3 *vec ); + +/* + * Create cross-product matrix and multiply + * NOTE: + * Faster than separately creating a cross-product matrix and multiplying. + */ +static inline void vmathSoaV3CrossMatrixMul( VmathSoaMatrix3 *result, const VmathSoaVector3 *vec, const VmathSoaMatrix3 *mat ); + +/* + * Linear interpolation between two 3-D vectors + * NOTE: + * Does not clamp t between 0 and 1. + */ +static inline void vmathSoaV3Lerp( VmathSoaVector3 *result, vec_float4 t, const VmathSoaVector3 *vec0, const VmathSoaVector3 *vec1 ); + +/* + * Spherical linear interpolation between two 3-D vectors + * NOTE: + * The result is unpredictable if the vectors point in opposite directions. + * Does not clamp t between 0 and 1. + */ +static inline void vmathSoaV3Slerp( VmathSoaVector3 *result, vec_float4 t, const VmathSoaVector3 *unitVec0, const VmathSoaVector3 *unitVec1 ); + +/* + * Conditionally select between two 3-D vectors + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + */ +static inline void vmathSoaV3Select( VmathSoaVector3 *result, const VmathSoaVector3 *vec0, const VmathSoaVector3 *vec1, vec_uint4 select1 ); + +/* + * Load four three-float 3-D vectors, stored in three quadwords + */ +static inline void vmathSoaV3LoadXYZArray( VmathSoaVector3 *vec, const vec_float4 *threeQuads ); + +/* + * Store four slots of an SoA 3-D vector in three quadwords + */ +static inline void vmathSoaV3StoreXYZArray( const VmathSoaVector3 *vec, vec_float4 *threeQuads ); + +/* + * Store eight slots of two SoA 3-D vectors as half-floats + */ +static inline void vmathSoaV3StoreHalfFloats( const VmathSoaVector3 *vec0, const VmathSoaVector3 *vec1, vec_ushort8 *threeQuads ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 3-D vector + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaV3Print( const VmathSoaVector3 *vec ); + +/* + * Print a 3-D vector and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaV3Prints( const VmathSoaVector3 *vec, const char *name ); + +#endif + +/* + * Copy a 4-D vector + */ +static inline void vmathSoaV4Copy( VmathSoaVector4 *result, const VmathSoaVector4 *vec ); + +/* + * Construct a 4-D vector from x, y, z, and w elements + */ +static inline void vmathSoaV4MakeFromElems( VmathSoaVector4 *result, vec_float4 x, vec_float4 y, vec_float4 z, vec_float4 w ); + +/* + * Construct a 4-D vector from a 3-D vector and a scalar + */ +static inline void vmathSoaV4MakeFromV3Scalar( VmathSoaVector4 *result, const VmathSoaVector3 *xyz, vec_float4 w ); + +/* + * Copy x, y, and z from a 3-D vector into a 4-D vector, and set w to 0 + */ +static inline void vmathSoaV4MakeFromV3( VmathSoaVector4 *result, const VmathSoaVector3 *vec ); + +/* + * Copy x, y, and z from a 3-D point into a 4-D vector, and set w to 1 + */ +static inline void vmathSoaV4MakeFromP3( VmathSoaVector4 *result, const VmathSoaPoint3 *pnt ); + +/* + * Copy elements from a quaternion into a 4-D vector + */ +static inline void vmathSoaV4MakeFromQ( VmathSoaVector4 *result, const VmathSoaQuat *quat ); + +/* + * Set all elements of a 4-D vector to the same scalar value + */ +static inline void vmathSoaV4MakeFromScalar( VmathSoaVector4 *result, vec_float4 scalar ); + +/* + * Replicate an AoS 4-D vector + */ +static inline void vmathSoaV4MakeFromAos( VmathSoaVector4 *result, const VmathVector4 *vec ); + +/* + * Insert four AoS 4-D vectors + */ +static inline void vmathSoaV4MakeFrom4Aos( VmathSoaVector4 *result, const VmathVector4 *vec0, const VmathVector4 *vec1, const VmathVector4 *vec2, const VmathVector4 *vec3 ); + +/* + * Extract four AoS 4-D vectors + */ +static inline void vmathSoaV4Get4Aos( const VmathSoaVector4 *vec, VmathVector4 *result0, VmathVector4 *result1, VmathVector4 *result2, VmathVector4 *result3 ); + +/* + * Set the x, y, and z elements of a 4-D vector + * NOTE: + * This function does not change the w element. + */ +static inline void vmathSoaV4SetXYZ( VmathSoaVector4 *result, const VmathSoaVector3 *vec ); + +/* + * Get the x, y, and z elements of a 4-D vector + */ +static inline void vmathSoaV4GetXYZ( VmathSoaVector3 *result, const VmathSoaVector4 *vec ); + +/* + * Set the x element of a 4-D vector + */ +static inline void vmathSoaV4SetX( VmathSoaVector4 *result, vec_float4 x ); + +/* + * Set the y element of a 4-D vector + */ +static inline void vmathSoaV4SetY( VmathSoaVector4 *result, vec_float4 y ); + +/* + * Set the z element of a 4-D vector + */ +static inline void vmathSoaV4SetZ( VmathSoaVector4 *result, vec_float4 z ); + +/* + * Set the w element of a 4-D vector + */ +static inline void vmathSoaV4SetW( VmathSoaVector4 *result, vec_float4 w ); + +/* + * Get the x element of a 4-D vector + */ +static inline vec_float4 vmathSoaV4GetX( const VmathSoaVector4 *vec ); + +/* + * Get the y element of a 4-D vector + */ +static inline vec_float4 vmathSoaV4GetY( const VmathSoaVector4 *vec ); + +/* + * Get the z element of a 4-D vector + */ +static inline vec_float4 vmathSoaV4GetZ( const VmathSoaVector4 *vec ); + +/* + * Get the w element of a 4-D vector + */ +static inline vec_float4 vmathSoaV4GetW( const VmathSoaVector4 *vec ); + +/* + * Set an x, y, z, or w element of a 4-D vector by index + */ +static inline void vmathSoaV4SetElem( VmathSoaVector4 *result, int idx, vec_float4 value ); + +/* + * Get an x, y, z, or w element of a 4-D vector by index + */ +static inline vec_float4 vmathSoaV4GetElem( const VmathSoaVector4 *vec, int idx ); + +/* + * Add two 4-D vectors + */ +static inline void vmathSoaV4Add( VmathSoaVector4 *result, const VmathSoaVector4 *vec0, const VmathSoaVector4 *vec1 ); + +/* + * Subtract a 4-D vector from another 4-D vector + */ +static inline void vmathSoaV4Sub( VmathSoaVector4 *result, const VmathSoaVector4 *vec0, const VmathSoaVector4 *vec1 ); + +/* + * Multiply a 4-D vector by a scalar + */ +static inline void vmathSoaV4ScalarMul( VmathSoaVector4 *result, const VmathSoaVector4 *vec, vec_float4 scalar ); + +/* + * Divide a 4-D vector by a scalar + */ +static inline void vmathSoaV4ScalarDiv( VmathSoaVector4 *result, const VmathSoaVector4 *vec, vec_float4 scalar ); + +/* + * Negate all elements of a 4-D vector + */ +static inline void vmathSoaV4Neg( VmathSoaVector4 *result, const VmathSoaVector4 *vec ); + +/* + * Construct x axis + */ +static inline void vmathSoaV4MakeXAxis( VmathSoaVector4 *result ); + +/* + * Construct y axis + */ +static inline void vmathSoaV4MakeYAxis( VmathSoaVector4 *result ); + +/* + * Construct z axis + */ +static inline void vmathSoaV4MakeZAxis( VmathSoaVector4 *result ); + +/* + * Construct w axis + */ +static inline void vmathSoaV4MakeWAxis( VmathSoaVector4 *result ); + +/* + * Multiply two 4-D vectors per element + */ +static inline void vmathSoaV4MulPerElem( VmathSoaVector4 *result, const VmathSoaVector4 *vec0, const VmathSoaVector4 *vec1 ); + +/* + * Divide two 4-D vectors per element + * NOTE: + * Floating-point behavior matches standard library function divf4. + */ +static inline void vmathSoaV4DivPerElem( VmathSoaVector4 *result, const VmathSoaVector4 *vec0, const VmathSoaVector4 *vec1 ); + +/* + * Compute the reciprocal of a 4-D vector per element + * NOTE: + * Floating-point behavior matches standard library function recipf4. + */ +static inline void vmathSoaV4RecipPerElem( VmathSoaVector4 *result, const VmathSoaVector4 *vec ); + +/* + * Compute the square root of a 4-D vector per element + * NOTE: + * Floating-point behavior matches standard library function sqrtf4. + */ +static inline void vmathSoaV4SqrtPerElem( VmathSoaVector4 *result, const VmathSoaVector4 *vec ); + +/* + * Compute the reciprocal square root of a 4-D vector per element + * NOTE: + * Floating-point behavior matches standard library function rsqrtf4. + */ +static inline void vmathSoaV4RsqrtPerElem( VmathSoaVector4 *result, const VmathSoaVector4 *vec ); + +/* + * Compute the absolute value of a 4-D vector per element + */ +static inline void vmathSoaV4AbsPerElem( VmathSoaVector4 *result, const VmathSoaVector4 *vec ); + +/* + * Copy sign from one 4-D vector to another, per element + */ +static inline void vmathSoaV4CopySignPerElem( VmathSoaVector4 *result, const VmathSoaVector4 *vec0, const VmathSoaVector4 *vec1 ); + +/* + * Maximum of two 4-D vectors per element + */ +static inline void vmathSoaV4MaxPerElem( VmathSoaVector4 *result, const VmathSoaVector4 *vec0, const VmathSoaVector4 *vec1 ); + +/* + * Minimum of two 4-D vectors per element + */ +static inline void vmathSoaV4MinPerElem( VmathSoaVector4 *result, const VmathSoaVector4 *vec0, const VmathSoaVector4 *vec1 ); + +/* + * Maximum element of a 4-D vector + */ +static inline vec_float4 vmathSoaV4MaxElem( const VmathSoaVector4 *vec ); + +/* + * Minimum element of a 4-D vector + */ +static inline vec_float4 vmathSoaV4MinElem( const VmathSoaVector4 *vec ); + +/* + * Compute the sum of all elements of a 4-D vector + */ +static inline vec_float4 vmathSoaV4Sum( const VmathSoaVector4 *vec ); + +/* + * Compute the dot product of two 4-D vectors + */ +static inline vec_float4 vmathSoaV4Dot( const VmathSoaVector4 *vec0, const VmathSoaVector4 *vec1 ); + +/* + * Compute the square of the length of a 4-D vector + */ +static inline vec_float4 vmathSoaV4LengthSqr( const VmathSoaVector4 *vec ); + +/* + * Compute the length of a 4-D vector + */ +static inline vec_float4 vmathSoaV4Length( const VmathSoaVector4 *vec ); + +/* + * Normalize a 4-D vector + * NOTE: + * The result is unpredictable when all elements of vec are at or near zero. + */ +static inline void vmathSoaV4Normalize( VmathSoaVector4 *result, const VmathSoaVector4 *vec ); + +/* + * Outer product of two 4-D vectors + */ +static inline void vmathSoaV4Outer( VmathSoaMatrix4 *result, const VmathSoaVector4 *vec0, const VmathSoaVector4 *vec1 ); + +/* + * Linear interpolation between two 4-D vectors + * NOTE: + * Does not clamp t between 0 and 1. + */ +static inline void vmathSoaV4Lerp( VmathSoaVector4 *result, vec_float4 t, const VmathSoaVector4 *vec0, const VmathSoaVector4 *vec1 ); + +/* + * Spherical linear interpolation between two 4-D vectors + * NOTE: + * The result is unpredictable if the vectors point in opposite directions. + * Does not clamp t between 0 and 1. + */ +static inline void vmathSoaV4Slerp( VmathSoaVector4 *result, vec_float4 t, const VmathSoaVector4 *unitVec0, const VmathSoaVector4 *unitVec1 ); + +/* + * Conditionally select between two 4-D vectors + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + */ +static inline void vmathSoaV4Select( VmathSoaVector4 *result, const VmathSoaVector4 *vec0, const VmathSoaVector4 *vec1, vec_uint4 select1 ); + +/* + * Store four slots of an SoA 4-D vector as half-floats + */ +static inline void vmathSoaV4StoreHalfFloats( const VmathSoaVector4 *vec, vec_ushort8 *twoQuads ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 4-D vector + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaV4Print( const VmathSoaVector4 *vec ); + +/* + * Print a 4-D vector and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaV4Prints( const VmathSoaVector4 *vec, const char *name ); + +#endif + +/* + * Copy a 3-D point + */ +static inline void vmathSoaP3Copy( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt ); + +/* + * Construct a 3-D point from x, y, and z elements + */ +static inline void vmathSoaP3MakeFromElems( VmathSoaPoint3 *result, vec_float4 x, vec_float4 y, vec_float4 z ); + +/* + * Copy elements from a 3-D vector into a 3-D point + */ +static inline void vmathSoaP3MakeFromV3( VmathSoaPoint3 *result, const VmathSoaVector3 *vec ); + +/* + * Set all elements of a 3-D point to the same scalar value + */ +static inline void vmathSoaP3MakeFromScalar( VmathSoaPoint3 *result, vec_float4 scalar ); + +/* + * Replicate an AoS 3-D point + */ +static inline void vmathSoaP3MakeFromAos( VmathSoaPoint3 *result, const VmathPoint3 *pnt ); + +/* + * Insert four AoS 3-D points + */ +static inline void vmathSoaP3MakeFrom4Aos( VmathSoaPoint3 *result, const VmathPoint3 *pnt0, const VmathPoint3 *pnt1, const VmathPoint3 *pnt2, const VmathPoint3 *pnt3 ); + +/* + * Extract four AoS 3-D points + */ +static inline void vmathSoaP3Get4Aos( const VmathSoaPoint3 *pnt, VmathPoint3 *result0, VmathPoint3 *result1, VmathPoint3 *result2, VmathPoint3 *result3 ); + +/* + * Set the x element of a 3-D point + */ +static inline void vmathSoaP3SetX( VmathSoaPoint3 *result, vec_float4 x ); + +/* + * Set the y element of a 3-D point + */ +static inline void vmathSoaP3SetY( VmathSoaPoint3 *result, vec_float4 y ); + +/* + * Set the z element of a 3-D point + */ +static inline void vmathSoaP3SetZ( VmathSoaPoint3 *result, vec_float4 z ); + +/* + * Get the x element of a 3-D point + */ +static inline vec_float4 vmathSoaP3GetX( const VmathSoaPoint3 *pnt ); + +/* + * Get the y element of a 3-D point + */ +static inline vec_float4 vmathSoaP3GetY( const VmathSoaPoint3 *pnt ); + +/* + * Get the z element of a 3-D point + */ +static inline vec_float4 vmathSoaP3GetZ( const VmathSoaPoint3 *pnt ); + +/* + * Set an x, y, or z element of a 3-D point by index + */ +static inline void vmathSoaP3SetElem( VmathSoaPoint3 *result, int idx, vec_float4 value ); + +/* + * Get an x, y, or z element of a 3-D point by index + */ +static inline vec_float4 vmathSoaP3GetElem( const VmathSoaPoint3 *pnt, int idx ); + +/* + * Subtract a 3-D point from another 3-D point + */ +static inline void vmathSoaP3Sub( VmathSoaVector3 *result, const VmathSoaPoint3 *pnt0, const VmathSoaPoint3 *pnt1 ); + +/* + * Add a 3-D point to a 3-D vector + */ +static inline void vmathSoaP3AddV3( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt, const VmathSoaVector3 *vec ); + +/* + * Subtract a 3-D vector from a 3-D point + */ +static inline void vmathSoaP3SubV3( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt, const VmathSoaVector3 *vec ); + +/* + * Multiply two 3-D points per element + */ +static inline void vmathSoaP3MulPerElem( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt0, const VmathSoaPoint3 *pnt1 ); + +/* + * Divide two 3-D points per element + * NOTE: + * Floating-point behavior matches standard library function divf4. + */ +static inline void vmathSoaP3DivPerElem( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt0, const VmathSoaPoint3 *pnt1 ); + +/* + * Compute the reciprocal of a 3-D point per element + * NOTE: + * Floating-point behavior matches standard library function recipf4. + */ +static inline void vmathSoaP3RecipPerElem( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt ); + +/* + * Compute the square root of a 3-D point per element + * NOTE: + * Floating-point behavior matches standard library function sqrtf4. + */ +static inline void vmathSoaP3SqrtPerElem( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt ); + +/* + * Compute the reciprocal square root of a 3-D point per element + * NOTE: + * Floating-point behavior matches standard library function rsqrtf4. + */ +static inline void vmathSoaP3RsqrtPerElem( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt ); + +/* + * Compute the absolute value of a 3-D point per element + */ +static inline void vmathSoaP3AbsPerElem( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt ); + +/* + * Copy sign from one 3-D point to another, per element + */ +static inline void vmathSoaP3CopySignPerElem( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt0, const VmathSoaPoint3 *pnt1 ); + +/* + * Maximum of two 3-D points per element + */ +static inline void vmathSoaP3MaxPerElem( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt0, const VmathSoaPoint3 *pnt1 ); + +/* + * Minimum of two 3-D points per element + */ +static inline void vmathSoaP3MinPerElem( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt0, const VmathSoaPoint3 *pnt1 ); + +/* + * Maximum element of a 3-D point + */ +static inline vec_float4 vmathSoaP3MaxElem( const VmathSoaPoint3 *pnt ); + +/* + * Minimum element of a 3-D point + */ +static inline vec_float4 vmathSoaP3MinElem( const VmathSoaPoint3 *pnt ); + +/* + * Compute the sum of all elements of a 3-D point + */ +static inline vec_float4 vmathSoaP3Sum( const VmathSoaPoint3 *pnt ); + +/* + * Apply uniform scale to a 3-D point + */ +static inline void vmathSoaP3Scale( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt, vec_float4 scaleVal ); + +/* + * Apply non-uniform scale to a 3-D point + */ +static inline void vmathSoaP3NonUniformScale( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt, const VmathSoaVector3 *scaleVec ); + +/* + * Scalar projection of a 3-D point on a unit-length 3-D vector + */ +static inline vec_float4 vmathSoaP3Projection( const VmathSoaPoint3 *pnt, const VmathSoaVector3 *unitVec ); + +/* + * Compute the square of the distance of a 3-D point from the coordinate-system origin + */ +static inline vec_float4 vmathSoaP3DistSqrFromOrigin( const VmathSoaPoint3 *pnt ); + +/* + * Compute the distance of a 3-D point from the coordinate-system origin + */ +static inline vec_float4 vmathSoaP3DistFromOrigin( const VmathSoaPoint3 *pnt ); + +/* + * Compute the square of the distance between two 3-D points + */ +static inline vec_float4 vmathSoaP3DistSqr( const VmathSoaPoint3 *pnt0, const VmathSoaPoint3 *pnt1 ); + +/* + * Compute the distance between two 3-D points + */ +static inline vec_float4 vmathSoaP3Dist( const VmathSoaPoint3 *pnt0, const VmathSoaPoint3 *pnt1 ); + +/* + * Linear interpolation between two 3-D points + * NOTE: + * Does not clamp t between 0 and 1. + */ +static inline void vmathSoaP3Lerp( VmathSoaPoint3 *result, vec_float4 t, const VmathSoaPoint3 *pnt0, const VmathSoaPoint3 *pnt1 ); + +/* + * Conditionally select between two 3-D points + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + */ +static inline void vmathSoaP3Select( VmathSoaPoint3 *result, const VmathSoaPoint3 *pnt0, const VmathSoaPoint3 *pnt1, vec_uint4 select1 ); + +/* + * Load four three-float 3-D points, stored in three quadwords + */ +static inline void vmathSoaP3LoadXYZArray( VmathSoaPoint3 *pnt, const vec_float4 *threeQuads ); + +/* + * Store four slots of an SoA 3-D point in three quadwords + */ +static inline void vmathSoaP3StoreXYZArray( const VmathSoaPoint3 *pnt, vec_float4 *threeQuads ); + +/* + * Store eight slots of two SoA 3-D points as half-floats + */ +static inline void vmathSoaP3StoreHalfFloats( const VmathSoaPoint3 *pnt0, const VmathSoaPoint3 *pnt1, vec_ushort8 *threeQuads ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 3-D point + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaP3Print( const VmathSoaPoint3 *pnt ); + +/* + * Print a 3-D point and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaP3Prints( const VmathSoaPoint3 *pnt, const char *name ); + +#endif + +/* + * Copy a quaternion + */ +static inline void vmathSoaQCopy( VmathSoaQuat *result, const VmathSoaQuat *quat ); + +/* + * Construct a quaternion from x, y, z, and w elements + */ +static inline void vmathSoaQMakeFromElems( VmathSoaQuat *result, vec_float4 x, vec_float4 y, vec_float4 z, vec_float4 w ); + +/* + * Construct a quaternion from a 3-D vector and a scalar + */ +static inline void vmathSoaQMakeFromV3Scalar( VmathSoaQuat *result, const VmathSoaVector3 *xyz, vec_float4 w ); + +/* + * Copy elements from a 4-D vector into a quaternion + */ +static inline void vmathSoaQMakeFromV4( VmathSoaQuat *result, const VmathSoaVector4 *vec ); + +/* + * Convert a rotation matrix to a unit-length quaternion + */ +static inline void vmathSoaQMakeFromM3( VmathSoaQuat *result, const VmathSoaMatrix3 *rotMat ); + +/* + * Set all elements of a quaternion to the same scalar value + */ +static inline void vmathSoaQMakeFromScalar( VmathSoaQuat *result, vec_float4 scalar ); + +/* + * Replicate an AoS quaternion + */ +static inline void vmathSoaQMakeFromAos( VmathSoaQuat *result, const VmathQuat *quat ); + +/* + * Insert four AoS quaternions + */ +static inline void vmathSoaQMakeFrom4Aos( VmathSoaQuat *result, const VmathQuat *quat0, const VmathQuat *quat1, const VmathQuat *quat2, const VmathQuat *quat3 ); + +/* + * Extract four AoS quaternions + */ +static inline void vmathSoaQGet4Aos( const VmathSoaQuat *quat, VmathQuat *result0, VmathQuat *result1, VmathQuat *result2, VmathQuat *result3 ); + +/* + * Set the x, y, and z elements of a quaternion + * NOTE: + * This function does not change the w element. + */ +static inline void vmathSoaQSetXYZ( VmathSoaQuat *result, const VmathSoaVector3 *vec ); + +/* + * Get the x, y, and z elements of a quaternion + */ +static inline void vmathSoaQGetXYZ( VmathSoaVector3 *result, const VmathSoaQuat *quat ); + +/* + * Set the x element of a quaternion + */ +static inline void vmathSoaQSetX( VmathSoaQuat *result, vec_float4 x ); + +/* + * Set the y element of a quaternion + */ +static inline void vmathSoaQSetY( VmathSoaQuat *result, vec_float4 y ); + +/* + * Set the z element of a quaternion + */ +static inline void vmathSoaQSetZ( VmathSoaQuat *result, vec_float4 z ); + +/* + * Set the w element of a quaternion + */ +static inline void vmathSoaQSetW( VmathSoaQuat *result, vec_float4 w ); + +/* + * Get the x element of a quaternion + */ +static inline vec_float4 vmathSoaQGetX( const VmathSoaQuat *quat ); + +/* + * Get the y element of a quaternion + */ +static inline vec_float4 vmathSoaQGetY( const VmathSoaQuat *quat ); + +/* + * Get the z element of a quaternion + */ +static inline vec_float4 vmathSoaQGetZ( const VmathSoaQuat *quat ); + +/* + * Get the w element of a quaternion + */ +static inline vec_float4 vmathSoaQGetW( const VmathSoaQuat *quat ); + +/* + * Set an x, y, z, or w element of a quaternion by index + */ +static inline void vmathSoaQSetElem( VmathSoaQuat *result, int idx, vec_float4 value ); + +/* + * Get an x, y, z, or w element of a quaternion by index + */ +static inline vec_float4 vmathSoaQGetElem( const VmathSoaQuat *quat, int idx ); + +/* + * Add two quaternions + */ +static inline void vmathSoaQAdd( VmathSoaQuat *result, const VmathSoaQuat *quat0, const VmathSoaQuat *quat1 ); + +/* + * Subtract a quaternion from another quaternion + */ +static inline void vmathSoaQSub( VmathSoaQuat *result, const VmathSoaQuat *quat0, const VmathSoaQuat *quat1 ); + +/* + * Multiply two quaternions + */ +static inline void vmathSoaQMul( VmathSoaQuat *result, const VmathSoaQuat *quat0, const VmathSoaQuat *quat1 ); + +/* + * Multiply a quaternion by a scalar + */ +static inline void vmathSoaQScalarMul( VmathSoaQuat *result, const VmathSoaQuat *quat, vec_float4 scalar ); + +/* + * Divide a quaternion by a scalar + */ +static inline void vmathSoaQScalarDiv( VmathSoaQuat *result, const VmathSoaQuat *quat, vec_float4 scalar ); + +/* + * Negate all elements of a quaternion + */ +static inline void vmathSoaQNeg( VmathSoaQuat *result, const VmathSoaQuat *quat ); + +/* + * Construct an identity quaternion + */ +static inline void vmathSoaQMakeIdentity( VmathSoaQuat *result ); + +/* + * Construct a quaternion to rotate between two unit-length 3-D vectors + * NOTE: + * The result is unpredictable if unitVec0 and unitVec1 point in opposite directions. + */ +static inline void vmathSoaQMakeRotationArc( VmathSoaQuat *result, const VmathSoaVector3 *unitVec0, const VmathSoaVector3 *unitVec1 ); + +/* + * Construct a quaternion to rotate around a unit-length 3-D vector + */ +static inline void vmathSoaQMakeRotationAxis( VmathSoaQuat *result, vec_float4 radians, const VmathSoaVector3 *unitVec ); + +/* + * Construct a quaternion to rotate around the x axis + */ +static inline void vmathSoaQMakeRotationX( VmathSoaQuat *result, vec_float4 radians ); + +/* + * Construct a quaternion to rotate around the y axis + */ +static inline void vmathSoaQMakeRotationY( VmathSoaQuat *result, vec_float4 radians ); + +/* + * Construct a quaternion to rotate around the z axis + */ +static inline void vmathSoaQMakeRotationZ( VmathSoaQuat *result, vec_float4 radians ); + +/* + * Compute the conjugate of a quaternion + */ +static inline void vmathSoaQConj( VmathSoaQuat *result, const VmathSoaQuat *quat ); + +/* + * Use a unit-length quaternion to rotate a 3-D vector + */ +static inline void vmathSoaQRotate( VmathSoaVector3 *result, const VmathSoaQuat *unitQuat, const VmathSoaVector3 *vec ); + +/* + * Compute the dot product of two quaternions + */ +static inline vec_float4 vmathSoaQDot( const VmathSoaQuat *quat0, const VmathSoaQuat *quat1 ); + +/* + * Compute the norm of a quaternion + */ +static inline vec_float4 vmathSoaQNorm( const VmathSoaQuat *quat ); + +/* + * Compute the length of a quaternion + */ +static inline vec_float4 vmathSoaQLength( const VmathSoaQuat *quat ); + +/* + * Normalize a quaternion + * NOTE: + * The result is unpredictable when all elements of quat are at or near zero. + */ +static inline void vmathSoaQNormalize( VmathSoaQuat *result, const VmathSoaQuat *quat ); + +/* + * Linear interpolation between two quaternions + * NOTE: + * Does not clamp t between 0 and 1. + */ +static inline void vmathSoaQLerp( VmathSoaQuat *result, vec_float4 t, const VmathSoaQuat *quat0, const VmathSoaQuat *quat1 ); + +/* + * Spherical linear interpolation between two quaternions + * NOTE: + * Interpolates along the shortest path between orientations. + * Does not clamp t between 0 and 1. + */ +static inline void vmathSoaQSlerp( VmathSoaQuat *result, vec_float4 t, const VmathSoaQuat *unitQuat0, const VmathSoaQuat *unitQuat1 ); + +/* + * Spherical quadrangle interpolation + */ +static inline void vmathSoaQSquad( VmathSoaQuat *result, vec_float4 t, const VmathSoaQuat *unitQuat0, const VmathSoaQuat *unitQuat1, const VmathSoaQuat *unitQuat2, const VmathSoaQuat *unitQuat3 ); + +/* + * Conditionally select between two quaternions + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + */ +static inline void vmathSoaQSelect( VmathSoaQuat *result, const VmathSoaQuat *quat0, const VmathSoaQuat *quat1, vec_uint4 select1 ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a quaternion + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaQPrint( const VmathSoaQuat *quat ); + +/* + * Print a quaternion and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaQPrints( const VmathSoaQuat *quat, const char *name ); + +#endif + +/* + * Copy a 3x3 matrix + */ +static inline void vmathSoaM3Copy( VmathSoaMatrix3 *result, const VmathSoaMatrix3 *mat ); + +/* + * Construct a 3x3 matrix containing the specified columns + */ +static inline void vmathSoaM3MakeFromCols( VmathSoaMatrix3 *result, const VmathSoaVector3 *col0, const VmathSoaVector3 *col1, const VmathSoaVector3 *col2 ); + +/* + * Construct a 3x3 rotation matrix from a unit-length quaternion + */ +static inline void vmathSoaM3MakeFromQ( VmathSoaMatrix3 *result, const VmathSoaQuat *unitQuat ); + +/* + * Set all elements of a 3x3 matrix to the same scalar value + */ +static inline void vmathSoaM3MakeFromScalar( VmathSoaMatrix3 *result, vec_float4 scalar ); + +/* + * Replicate an AoS 3x3 matrix + */ +static inline void vmathSoaM3MakeFromAos( VmathSoaMatrix3 *result, const VmathMatrix3 *mat ); + +/* + * Insert four AoS 3x3 matrices + */ +static inline void vmathSoaM3MakeFrom4Aos( VmathSoaMatrix3 *result, const VmathMatrix3 *mat0, const VmathMatrix3 *mat1, const VmathMatrix3 *mat2, const VmathMatrix3 *mat3 ); + +/* + * Extract four AoS 3x3 matrices + */ +static inline void vmathSoaM3Get4Aos( const VmathSoaMatrix3 *mat, VmathMatrix3 *result0, VmathMatrix3 *result1, VmathMatrix3 *result2, VmathMatrix3 *result3 ); + +/* + * Set column 0 of a 3x3 matrix + */ +static inline void vmathSoaM3SetCol0( VmathSoaMatrix3 *result, const VmathSoaVector3 *col0 ); + +/* + * Set column 1 of a 3x3 matrix + */ +static inline void vmathSoaM3SetCol1( VmathSoaMatrix3 *result, const VmathSoaVector3 *col1 ); + +/* + * Set column 2 of a 3x3 matrix + */ +static inline void vmathSoaM3SetCol2( VmathSoaMatrix3 *result, const VmathSoaVector3 *col2 ); + +/* + * Get column 0 of a 3x3 matrix + */ +static inline void vmathSoaM3GetCol0( VmathSoaVector3 *result, const VmathSoaMatrix3 *mat ); + +/* + * Get column 1 of a 3x3 matrix + */ +static inline void vmathSoaM3GetCol1( VmathSoaVector3 *result, const VmathSoaMatrix3 *mat ); + +/* + * Get column 2 of a 3x3 matrix + */ +static inline void vmathSoaM3GetCol2( VmathSoaVector3 *result, const VmathSoaMatrix3 *mat ); + +/* + * Set the column of a 3x3 matrix referred to by the specified index + */ +static inline void vmathSoaM3SetCol( VmathSoaMatrix3 *result, int col, const VmathSoaVector3 *vec ); + +/* + * Set the row of a 3x3 matrix referred to by the specified index + */ +static inline void vmathSoaM3SetRow( VmathSoaMatrix3 *result, int row, const VmathSoaVector3 *vec ); + +/* + * Get the column of a 3x3 matrix referred to by the specified index + */ +static inline void vmathSoaM3GetCol( VmathSoaVector3 *result, const VmathSoaMatrix3 *mat, int col ); + +/* + * Get the row of a 3x3 matrix referred to by the specified index + */ +static inline void vmathSoaM3GetRow( VmathSoaVector3 *result, const VmathSoaMatrix3 *mat, int row ); + +/* + * Set the element of a 3x3 matrix referred to by column and row indices + */ +static inline void vmathSoaM3SetElem( VmathSoaMatrix3 *result, int col, int row, vec_float4 val ); + +/* + * Get the element of a 3x3 matrix referred to by column and row indices + */ +static inline vec_float4 vmathSoaM3GetElem( const VmathSoaMatrix3 *mat, int col, int row ); + +/* + * Add two 3x3 matrices + */ +static inline void vmathSoaM3Add( VmathSoaMatrix3 *result, const VmathSoaMatrix3 *mat0, const VmathSoaMatrix3 *mat1 ); + +/* + * Subtract a 3x3 matrix from another 3x3 matrix + */ +static inline void vmathSoaM3Sub( VmathSoaMatrix3 *result, const VmathSoaMatrix3 *mat0, const VmathSoaMatrix3 *mat1 ); + +/* + * Negate all elements of a 3x3 matrix + */ +static inline void vmathSoaM3Neg( VmathSoaMatrix3 *result, const VmathSoaMatrix3 *mat ); + +/* + * Multiply a 3x3 matrix by a scalar + */ +static inline void vmathSoaM3ScalarMul( VmathSoaMatrix3 *result, const VmathSoaMatrix3 *mat, vec_float4 scalar ); + +/* + * Multiply a 3x3 matrix by a 3-D vector + */ +static inline void vmathSoaM3MulV3( VmathSoaVector3 *result, const VmathSoaMatrix3 *mat, const VmathSoaVector3 *vec ); + +/* + * Multiply two 3x3 matrices + */ +static inline void vmathSoaM3Mul( VmathSoaMatrix3 *result, const VmathSoaMatrix3 *mat0, const VmathSoaMatrix3 *mat1 ); + +/* + * Construct an identity 3x3 matrix + */ +static inline void vmathSoaM3MakeIdentity( VmathSoaMatrix3 *result ); + +/* + * Construct a 3x3 matrix to rotate around the x axis + */ +static inline void vmathSoaM3MakeRotationX( VmathSoaMatrix3 *result, vec_float4 radians ); + +/* + * Construct a 3x3 matrix to rotate around the y axis + */ +static inline void vmathSoaM3MakeRotationY( VmathSoaMatrix3 *result, vec_float4 radians ); + +/* + * Construct a 3x3 matrix to rotate around the z axis + */ +static inline void vmathSoaM3MakeRotationZ( VmathSoaMatrix3 *result, vec_float4 radians ); + +/* + * Construct a 3x3 matrix to rotate around the x, y, and z axes + */ +static inline void vmathSoaM3MakeRotationZYX( VmathSoaMatrix3 *result, const VmathSoaVector3 *radiansXYZ ); + +/* + * Construct a 3x3 matrix to rotate around a unit-length 3-D vector + */ +static inline void vmathSoaM3MakeRotationAxis( VmathSoaMatrix3 *result, vec_float4 radians, const VmathSoaVector3 *unitVec ); + +/* + * Construct a rotation matrix from a unit-length quaternion + */ +static inline void vmathSoaM3MakeRotationQ( VmathSoaMatrix3 *result, const VmathSoaQuat *unitQuat ); + +/* + * Construct a 3x3 matrix to perform scaling + */ +static inline void vmathSoaM3MakeScale( VmathSoaMatrix3 *result, const VmathSoaVector3 *scaleVec ); + +/* + * Append (post-multiply) a scale transformation to a 3x3 matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline void vmathSoaM3AppendScale( VmathSoaMatrix3 *result, const VmathSoaMatrix3 *mat, const VmathSoaVector3 *scaleVec ); + +/* + * Prepend (pre-multiply) a scale transformation to a 3x3 matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline void vmathSoaM3PrependScale( VmathSoaMatrix3 *result, const VmathSoaVector3 *scaleVec, const VmathSoaMatrix3 *mat ); + +/* + * Multiply two 3x3 matrices per element + */ +static inline void vmathSoaM3MulPerElem( VmathSoaMatrix3 *result, const VmathSoaMatrix3 *mat0, const VmathSoaMatrix3 *mat1 ); + +/* + * Compute the absolute value of a 3x3 matrix per element + */ +static inline void vmathSoaM3AbsPerElem( VmathSoaMatrix3 *result, const VmathSoaMatrix3 *mat ); + +/* + * Transpose of a 3x3 matrix + */ +static inline void vmathSoaM3Transpose( VmathSoaMatrix3 *result, const VmathSoaMatrix3 *mat ); + +/* + * Compute the inverse of a 3x3 matrix + * NOTE: + * Result is unpredictable when the determinant of mat is equal to or near 0. + */ +static inline void vmathSoaM3Inverse( VmathSoaMatrix3 *result, const VmathSoaMatrix3 *mat ); + +/* + * Determinant of a 3x3 matrix + */ +static inline vec_float4 vmathSoaM3Determinant( const VmathSoaMatrix3 *mat ); + +/* + * Conditionally select between two 3x3 matrices + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + */ +static inline void vmathSoaM3Select( VmathSoaMatrix3 *result, const VmathSoaMatrix3 *mat0, const VmathSoaMatrix3 *mat1, vec_uint4 select1 ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 3x3 matrix + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaM3Print( const VmathSoaMatrix3 *mat ); + +/* + * Print a 3x3 matrix and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaM3Prints( const VmathSoaMatrix3 *mat, const char *name ); + +#endif + +/* + * Copy a 4x4 matrix + */ +static inline void vmathSoaM4Copy( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat ); + +/* + * Construct a 4x4 matrix containing the specified columns + */ +static inline void vmathSoaM4MakeFromCols( VmathSoaMatrix4 *result, const VmathSoaVector4 *col0, const VmathSoaVector4 *col1, const VmathSoaVector4 *col2, const VmathSoaVector4 *col3 ); + +/* + * Construct a 4x4 matrix from a 3x4 transformation matrix + */ +static inline void vmathSoaM4MakeFromT3( VmathSoaMatrix4 *result, const VmathSoaTransform3 *mat ); + +/* + * Construct a 4x4 matrix from a 3x3 matrix and a 3-D vector + */ +static inline void vmathSoaM4MakeFromM3V3( VmathSoaMatrix4 *result, const VmathSoaMatrix3 *mat, const VmathSoaVector3 *translateVec ); + +/* + * Construct a 4x4 matrix from a unit-length quaternion and a 3-D vector + */ +static inline void vmathSoaM4MakeFromQV3( VmathSoaMatrix4 *result, const VmathSoaQuat *unitQuat, const VmathSoaVector3 *translateVec ); + +/* + * Set all elements of a 4x4 matrix to the same scalar value + */ +static inline void vmathSoaM4MakeFromScalar( VmathSoaMatrix4 *result, vec_float4 scalar ); + +/* + * Replicate an AoS 4x4 matrix + */ +static inline void vmathSoaM4MakeFromAos( VmathSoaMatrix4 *result, const VmathMatrix4 *mat ); + +/* + * Insert four AoS 4x4 matrices + */ +static inline void vmathSoaM4MakeFrom4Aos( VmathSoaMatrix4 *result, const VmathMatrix4 *mat0, const VmathMatrix4 *mat1, const VmathMatrix4 *mat2, const VmathMatrix4 *mat3 ); + +/* + * Extract four AoS 4x4 matrices + */ +static inline void vmathSoaM4Get4Aos( const VmathSoaMatrix4 *mat, VmathMatrix4 *result0, VmathMatrix4 *result1, VmathMatrix4 *result2, VmathMatrix4 *result3 ); + +/* + * Set the upper-left 3x3 submatrix + * NOTE: + * This function does not change the bottom row elements. + */ +static inline void vmathSoaM4SetUpper3x3( VmathSoaMatrix4 *result, const VmathSoaMatrix3 *mat3 ); + +/* + * Get the upper-left 3x3 submatrix of a 4x4 matrix + */ +static inline void vmathSoaM4GetUpper3x3( VmathSoaMatrix3 *result, const VmathSoaMatrix4 *mat ); + +/* + * Set translation component + * NOTE: + * This function does not change the bottom row elements. + */ +static inline void vmathSoaM4SetTranslation( VmathSoaMatrix4 *result, const VmathSoaVector3 *translateVec ); + +/* + * Get the translation component of a 4x4 matrix + */ +static inline void vmathSoaM4GetTranslation( VmathSoaVector3 *result, const VmathSoaMatrix4 *mat ); + +/* + * Set column 0 of a 4x4 matrix + */ +static inline void vmathSoaM4SetCol0( VmathSoaMatrix4 *result, const VmathSoaVector4 *col0 ); + +/* + * Set column 1 of a 4x4 matrix + */ +static inline void vmathSoaM4SetCol1( VmathSoaMatrix4 *result, const VmathSoaVector4 *col1 ); + +/* + * Set column 2 of a 4x4 matrix + */ +static inline void vmathSoaM4SetCol2( VmathSoaMatrix4 *result, const VmathSoaVector4 *col2 ); + +/* + * Set column 3 of a 4x4 matrix + */ +static inline void vmathSoaM4SetCol3( VmathSoaMatrix4 *result, const VmathSoaVector4 *col3 ); + +/* + * Get column 0 of a 4x4 matrix + */ +static inline void vmathSoaM4GetCol0( VmathSoaVector4 *result, const VmathSoaMatrix4 *mat ); + +/* + * Get column 1 of a 4x4 matrix + */ +static inline void vmathSoaM4GetCol1( VmathSoaVector4 *result, const VmathSoaMatrix4 *mat ); + +/* + * Get column 2 of a 4x4 matrix + */ +static inline void vmathSoaM4GetCol2( VmathSoaVector4 *result, const VmathSoaMatrix4 *mat ); + +/* + * Get column 3 of a 4x4 matrix + */ +static inline void vmathSoaM4GetCol3( VmathSoaVector4 *result, const VmathSoaMatrix4 *mat ); + +/* + * Set the column of a 4x4 matrix referred to by the specified index + */ +static inline void vmathSoaM4SetCol( VmathSoaMatrix4 *result, int col, const VmathSoaVector4 *vec ); + +/* + * Set the row of a 4x4 matrix referred to by the specified index + */ +static inline void vmathSoaM4SetRow( VmathSoaMatrix4 *result, int row, const VmathSoaVector4 *vec ); + +/* + * Get the column of a 4x4 matrix referred to by the specified index + */ +static inline void vmathSoaM4GetCol( VmathSoaVector4 *result, const VmathSoaMatrix4 *mat, int col ); + +/* + * Get the row of a 4x4 matrix referred to by the specified index + */ +static inline void vmathSoaM4GetRow( VmathSoaVector4 *result, const VmathSoaMatrix4 *mat, int row ); + +/* + * Set the element of a 4x4 matrix referred to by column and row indices + */ +static inline void vmathSoaM4SetElem( VmathSoaMatrix4 *result, int col, int row, vec_float4 val ); + +/* + * Get the element of a 4x4 matrix referred to by column and row indices + */ +static inline vec_float4 vmathSoaM4GetElem( const VmathSoaMatrix4 *mat, int col, int row ); + +/* + * Add two 4x4 matrices + */ +static inline void vmathSoaM4Add( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat0, const VmathSoaMatrix4 *mat1 ); + +/* + * Subtract a 4x4 matrix from another 4x4 matrix + */ +static inline void vmathSoaM4Sub( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat0, const VmathSoaMatrix4 *mat1 ); + +/* + * Negate all elements of a 4x4 matrix + */ +static inline void vmathSoaM4Neg( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat ); + +/* + * Multiply a 4x4 matrix by a scalar + */ +static inline void vmathSoaM4ScalarMul( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat, vec_float4 scalar ); + +/* + * Multiply a 4x4 matrix by a 4-D vector + */ +static inline void vmathSoaM4MulV4( VmathSoaVector4 *result, const VmathSoaMatrix4 *mat, const VmathSoaVector4 *vec ); + +/* + * Multiply a 4x4 matrix by a 3-D vector + */ +static inline void vmathSoaM4MulV3( VmathSoaVector4 *result, const VmathSoaMatrix4 *mat, const VmathSoaVector3 *vec ); + +/* + * Multiply a 4x4 matrix by a 3-D point + */ +static inline void vmathSoaM4MulP3( VmathSoaVector4 *result, const VmathSoaMatrix4 *mat, const VmathSoaPoint3 *pnt ); + +/* + * Multiply two 4x4 matrices + */ +static inline void vmathSoaM4Mul( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat0, const VmathSoaMatrix4 *mat1 ); + +/* + * Multiply a 4x4 matrix by a 3x4 transformation matrix + */ +static inline void vmathSoaM4MulT3( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat, const VmathSoaTransform3 *tfrm ); + +/* + * Construct an identity 4x4 matrix + */ +static inline void vmathSoaM4MakeIdentity( VmathSoaMatrix4 *result ); + +/* + * Construct a 4x4 matrix to rotate around the x axis + */ +static inline void vmathSoaM4MakeRotationX( VmathSoaMatrix4 *result, vec_float4 radians ); + +/* + * Construct a 4x4 matrix to rotate around the y axis + */ +static inline void vmathSoaM4MakeRotationY( VmathSoaMatrix4 *result, vec_float4 radians ); + +/* + * Construct a 4x4 matrix to rotate around the z axis + */ +static inline void vmathSoaM4MakeRotationZ( VmathSoaMatrix4 *result, vec_float4 radians ); + +/* + * Construct a 4x4 matrix to rotate around the x, y, and z axes + */ +static inline void vmathSoaM4MakeRotationZYX( VmathSoaMatrix4 *result, const VmathSoaVector3 *radiansXYZ ); + +/* + * Construct a 4x4 matrix to rotate around a unit-length 3-D vector + */ +static inline void vmathSoaM4MakeRotationAxis( VmathSoaMatrix4 *result, vec_float4 radians, const VmathSoaVector3 *unitVec ); + +/* + * Construct a rotation matrix from a unit-length quaternion + */ +static inline void vmathSoaM4MakeRotationQ( VmathSoaMatrix4 *result, const VmathSoaQuat *unitQuat ); + +/* + * Construct a 4x4 matrix to perform scaling + */ +static inline void vmathSoaM4MakeScale( VmathSoaMatrix4 *result, const VmathSoaVector3 *scaleVec ); + +/* + * Construct a 4x4 matrix to perform translation + */ +static inline void vmathSoaM4MakeTranslation( VmathSoaMatrix4 *result, const VmathSoaVector3 *translateVec ); + +/* + * Construct viewing matrix based on eye position, position looked at, and up direction + */ +static inline void vmathSoaM4MakeLookAt( VmathSoaMatrix4 *result, const VmathSoaPoint3 *eyePos, const VmathSoaPoint3 *lookAtPos, const VmathSoaVector3 *upVec ); + +/* + * Construct a perspective projection matrix + */ +static inline void vmathSoaM4MakePerspective( VmathSoaMatrix4 *result, vec_float4 fovyRadians, vec_float4 aspect, vec_float4 zNear, vec_float4 zFar ); + +/* + * Construct a perspective projection matrix based on frustum + */ +static inline void vmathSoaM4MakeFrustum( VmathSoaMatrix4 *result, vec_float4 left, vec_float4 right, vec_float4 bottom, vec_float4 top, vec_float4 zNear, vec_float4 zFar ); + +/* + * Construct an orthographic projection matrix + */ +static inline void vmathSoaM4MakeOrthographic( VmathSoaMatrix4 *result, vec_float4 left, vec_float4 right, vec_float4 bottom, vec_float4 top, vec_float4 zNear, vec_float4 zFar ); + +/* + * Append (post-multiply) a scale transformation to a 4x4 matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline void vmathSoaM4AppendScale( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat, const VmathSoaVector3 *scaleVec ); + +/* + * Prepend (pre-multiply) a scale transformation to a 4x4 matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline void vmathSoaM4PrependScale( VmathSoaMatrix4 *result, const VmathSoaVector3 *scaleVec, const VmathSoaMatrix4 *mat ); + +/* + * Multiply two 4x4 matrices per element + */ +static inline void vmathSoaM4MulPerElem( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat0, const VmathSoaMatrix4 *mat1 ); + +/* + * Compute the absolute value of a 4x4 matrix per element + */ +static inline void vmathSoaM4AbsPerElem( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat ); + +/* + * Transpose of a 4x4 matrix + */ +static inline void vmathSoaM4Transpose( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat ); + +/* + * Compute the inverse of a 4x4 matrix + * NOTE: + * Result is unpredictable when the determinant of mat is equal to or near 0. + */ +static inline void vmathSoaM4Inverse( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat ); + +/* + * Compute the inverse of a 4x4 matrix, which is expected to be an affine matrix + * NOTE: + * This can be used to achieve better performance than a general inverse when the specified 4x4 matrix meets the given restrictions. The result is unpredictable when the determinant of mat is equal to or near 0. + */ +static inline void vmathSoaM4AffineInverse( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat ); + +/* + * Compute the inverse of a 4x4 matrix, which is expected to be an affine matrix with an orthogonal upper-left 3x3 submatrix + * NOTE: + * This can be used to achieve better performance than a general inverse when the specified 4x4 matrix meets the given restrictions. + */ +static inline void vmathSoaM4OrthoInverse( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat ); + +/* + * Determinant of a 4x4 matrix + */ +static inline vec_float4 vmathSoaM4Determinant( const VmathSoaMatrix4 *mat ); + +/* + * Conditionally select between two 4x4 matrices + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + */ +static inline void vmathSoaM4Select( VmathSoaMatrix4 *result, const VmathSoaMatrix4 *mat0, const VmathSoaMatrix4 *mat1, vec_uint4 select1 ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 4x4 matrix + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaM4Print( const VmathSoaMatrix4 *mat ); + +/* + * Print a 4x4 matrix and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaM4Prints( const VmathSoaMatrix4 *mat, const char *name ); + +#endif + +/* + * Copy a 3x4 transformation matrix + */ +static inline void vmathSoaT3Copy( VmathSoaTransform3 *result, const VmathSoaTransform3 *tfrm ); + +/* + * Construct a 3x4 transformation matrix containing the specified columns + */ +static inline void vmathSoaT3MakeFromCols( VmathSoaTransform3 *result, const VmathSoaVector3 *col0, const VmathSoaVector3 *col1, const VmathSoaVector3 *col2, const VmathSoaVector3 *col3 ); + +/* + * Construct a 3x4 transformation matrix from a 3x3 matrix and a 3-D vector + */ +static inline void vmathSoaT3MakeFromM3V3( VmathSoaTransform3 *result, const VmathSoaMatrix3 *tfrm, const VmathSoaVector3 *translateVec ); + +/* + * Construct a 3x4 transformation matrix from a unit-length quaternion and a 3-D vector + */ +static inline void vmathSoaT3MakeFromQV3( VmathSoaTransform3 *result, const VmathSoaQuat *unitQuat, const VmathSoaVector3 *translateVec ); + +/* + * Set all elements of a 3x4 transformation matrix to the same scalar value + */ +static inline void vmathSoaT3MakeFromScalar( VmathSoaTransform3 *result, vec_float4 scalar ); + +/* + * Replicate an AoS 3x4 transformation matrix + */ +static inline void vmathSoaT3MakeFromAos( VmathSoaTransform3 *result, const VmathTransform3 *tfrm ); + +/* + * Insert four AoS 3x4 transformation matrices + */ +static inline void vmathSoaT3MakeFrom4Aos( VmathSoaTransform3 *result, const VmathTransform3 *tfrm0, const VmathTransform3 *tfrm1, const VmathTransform3 *tfrm2, const VmathTransform3 *tfrm3 ); + +/* + * Extract four AoS 3x4 transformation matrices + */ +static inline void vmathSoaT3Get4Aos( const VmathSoaTransform3 *tfrm, VmathTransform3 *result0, VmathTransform3 *result1, VmathTransform3 *result2, VmathTransform3 *result3 ); + +/* + * Set the upper-left 3x3 submatrix + */ +static inline void vmathSoaT3SetUpper3x3( VmathSoaTransform3 *result, const VmathSoaMatrix3 *mat3 ); + +/* + * Get the upper-left 3x3 submatrix of a 3x4 transformation matrix + */ +static inline void vmathSoaT3GetUpper3x3( VmathSoaMatrix3 *result, const VmathSoaTransform3 *tfrm ); + +/* + * Set translation component + */ +static inline void vmathSoaT3SetTranslation( VmathSoaTransform3 *result, const VmathSoaVector3 *translateVec ); + +/* + * Get the translation component of a 3x4 transformation matrix + */ +static inline void vmathSoaT3GetTranslation( VmathSoaVector3 *result, const VmathSoaTransform3 *tfrm ); + +/* + * Set column 0 of a 3x4 transformation matrix + */ +static inline void vmathSoaT3SetCol0( VmathSoaTransform3 *result, const VmathSoaVector3 *col0 ); + +/* + * Set column 1 of a 3x4 transformation matrix + */ +static inline void vmathSoaT3SetCol1( VmathSoaTransform3 *result, const VmathSoaVector3 *col1 ); + +/* + * Set column 2 of a 3x4 transformation matrix + */ +static inline void vmathSoaT3SetCol2( VmathSoaTransform3 *result, const VmathSoaVector3 *col2 ); + +/* + * Set column 3 of a 3x4 transformation matrix + */ +static inline void vmathSoaT3SetCol3( VmathSoaTransform3 *result, const VmathSoaVector3 *col3 ); + +/* + * Get column 0 of a 3x4 transformation matrix + */ +static inline void vmathSoaT3GetCol0( VmathSoaVector3 *result, const VmathSoaTransform3 *tfrm ); + +/* + * Get column 1 of a 3x4 transformation matrix + */ +static inline void vmathSoaT3GetCol1( VmathSoaVector3 *result, const VmathSoaTransform3 *tfrm ); + +/* + * Get column 2 of a 3x4 transformation matrix + */ +static inline void vmathSoaT3GetCol2( VmathSoaVector3 *result, const VmathSoaTransform3 *tfrm ); + +/* + * Get column 3 of a 3x4 transformation matrix + */ +static inline void vmathSoaT3GetCol3( VmathSoaVector3 *result, const VmathSoaTransform3 *tfrm ); + +/* + * Set the column of a 3x4 transformation matrix referred to by the specified index + */ +static inline void vmathSoaT3SetCol( VmathSoaTransform3 *result, int col, const VmathSoaVector3 *vec ); + +/* + * Set the row of a 3x4 transformation matrix referred to by the specified index + */ +static inline void vmathSoaT3SetRow( VmathSoaTransform3 *result, int row, const VmathSoaVector4 *vec ); + +/* + * Get the column of a 3x4 transformation matrix referred to by the specified index + */ +static inline void vmathSoaT3GetCol( VmathSoaVector3 *result, const VmathSoaTransform3 *tfrm, int col ); + +/* + * Get the row of a 3x4 transformation matrix referred to by the specified index + */ +static inline void vmathSoaT3GetRow( VmathSoaVector4 *result, const VmathSoaTransform3 *tfrm, int row ); + +/* + * Set the element of a 3x4 transformation matrix referred to by column and row indices + */ +static inline void vmathSoaT3SetElem( VmathSoaTransform3 *result, int col, int row, vec_float4 val ); + +/* + * Get the element of a 3x4 transformation matrix referred to by column and row indices + */ +static inline vec_float4 vmathSoaT3GetElem( const VmathSoaTransform3 *tfrm, int col, int row ); + +/* + * Multiply a 3x4 transformation matrix by a 3-D vector + */ +static inline void vmathSoaT3MulV3( VmathSoaVector3 *result, const VmathSoaTransform3 *tfrm, const VmathSoaVector3 *vec ); + +/* + * Multiply a 3x4 transformation matrix by a 3-D point + */ +static inline void vmathSoaT3MulP3( VmathSoaPoint3 *result, const VmathSoaTransform3 *tfrm, const VmathSoaPoint3 *pnt ); + +/* + * Multiply two 3x4 transformation matrices + */ +static inline void vmathSoaT3Mul( VmathSoaTransform3 *result, const VmathSoaTransform3 *tfrm0, const VmathSoaTransform3 *tfrm1 ); + +/* + * Construct an identity 3x4 transformation matrix + */ +static inline void vmathSoaT3MakeIdentity( VmathSoaTransform3 *result ); + +/* + * Construct a 3x4 transformation matrix to rotate around the x axis + */ +static inline void vmathSoaT3MakeRotationX( VmathSoaTransform3 *result, vec_float4 radians ); + +/* + * Construct a 3x4 transformation matrix to rotate around the y axis + */ +static inline void vmathSoaT3MakeRotationY( VmathSoaTransform3 *result, vec_float4 radians ); + +/* + * Construct a 3x4 transformation matrix to rotate around the z axis + */ +static inline void vmathSoaT3MakeRotationZ( VmathSoaTransform3 *result, vec_float4 radians ); + +/* + * Construct a 3x4 transformation matrix to rotate around the x, y, and z axes + */ +static inline void vmathSoaT3MakeRotationZYX( VmathSoaTransform3 *result, const VmathSoaVector3 *radiansXYZ ); + +/* + * Construct a 3x4 transformation matrix to rotate around a unit-length 3-D vector + */ +static inline void vmathSoaT3MakeRotationAxis( VmathSoaTransform3 *result, vec_float4 radians, const VmathSoaVector3 *unitVec ); + +/* + * Construct a rotation matrix from a unit-length quaternion + */ +static inline void vmathSoaT3MakeRotationQ( VmathSoaTransform3 *result, const VmathSoaQuat *unitQuat ); + +/* + * Construct a 3x4 transformation matrix to perform scaling + */ +static inline void vmathSoaT3MakeScale( VmathSoaTransform3 *result, const VmathSoaVector3 *scaleVec ); + +/* + * Construct a 3x4 transformation matrix to perform translation + */ +static inline void vmathSoaT3MakeTranslation( VmathSoaTransform3 *result, const VmathSoaVector3 *translateVec ); + +/* + * Append (post-multiply) a scale transformation to a 3x4 transformation matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline void vmathSoaT3AppendScale( VmathSoaTransform3 *result, const VmathSoaTransform3 *tfrm, const VmathSoaVector3 *scaleVec ); + +/* + * Prepend (pre-multiply) a scale transformation to a 3x4 transformation matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline void vmathSoaT3PrependScale( VmathSoaTransform3 *result, const VmathSoaVector3 *scaleVec, const VmathSoaTransform3 *tfrm ); + +/* + * Multiply two 3x4 transformation matrices per element + */ +static inline void vmathSoaT3MulPerElem( VmathSoaTransform3 *result, const VmathSoaTransform3 *tfrm0, const VmathSoaTransform3 *tfrm1 ); + +/* + * Compute the absolute value of a 3x4 transformation matrix per element + */ +static inline void vmathSoaT3AbsPerElem( VmathSoaTransform3 *result, const VmathSoaTransform3 *tfrm ); + +/* + * Inverse of a 3x4 transformation matrix + * NOTE: + * Result is unpredictable when the determinant of the left 3x3 submatrix is equal to or near 0. + */ +static inline void vmathSoaT3Inverse( VmathSoaTransform3 *result, const VmathSoaTransform3 *tfrm ); + +/* + * Compute the inverse of a 3x4 transformation matrix, expected to have an orthogonal upper-left 3x3 submatrix + * NOTE: + * This can be used to achieve better performance than a general inverse when the specified 3x4 transformation matrix meets the given restrictions. + */ +static inline void vmathSoaT3OrthoInverse( VmathSoaTransform3 *result, const VmathSoaTransform3 *tfrm ); + +/* + * Conditionally select between two 3x4 transformation matrices + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + */ +static inline void vmathSoaT3Select( VmathSoaTransform3 *result, const VmathSoaTransform3 *tfrm0, const VmathSoaTransform3 *tfrm1, vec_uint4 select1 ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 3x4 transformation matrix + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaT3Print( const VmathSoaTransform3 *tfrm ); + +/* + * Print a 3x4 transformation matrix and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaT3Prints( const VmathSoaTransform3 *tfrm, const char *name ); + +#endif + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#include "vec_soa.h" +#include "quat_soa.h" +#include "mat_soa.h" + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/spu/c/vectormath_soa_v.h b/Extras/vectormathlibrary/include/vectormath/spu/c/vectormath_soa_v.h new file mode 100644 index 000000000..3cb69e040 --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/spu/c/vectormath_soa_v.h @@ -0,0 +1,1978 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_SOA_C_V_H +#define _VECTORMATH_SOA_C_V_H + +#include +#include +#include "vectormath_aos_v.h" + +#ifdef _VECTORMATH_DEBUG +#endif + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#ifndef _VECTORMATH_SOA_C_TYPES_H +#define _VECTORMATH_SOA_C_TYPES_H + +/* A set of four 3-D vectors in structure-of-arrays format + */ +typedef struct _VmathSoaVector3 +{ + vec_float4 x; + vec_float4 y; + vec_float4 z; +} VmathSoaVector3; + +/* A set of four 4-D vectors in structure-of-arrays format + */ +typedef struct _VmathSoaVector4 +{ + vec_float4 x; + vec_float4 y; + vec_float4 z; + vec_float4 w; +} VmathSoaVector4; + +/* A set of four 3-D points in structure-of-arrays format + */ +typedef struct _VmathSoaPoint3 +{ + vec_float4 x; + vec_float4 y; + vec_float4 z; +} VmathSoaPoint3; + +/* A set of four quaternions in structure-of-arrays format + */ +typedef struct _VmathSoaQuat +{ + vec_float4 x; + vec_float4 y; + vec_float4 z; + vec_float4 w; +} VmathSoaQuat; + +/* A set of four 3x3 matrices in structure-of-arrays format + */ +typedef struct _VmathSoaMatrix3 +{ + VmathSoaVector3 col0; + VmathSoaVector3 col1; + VmathSoaVector3 col2; +} VmathSoaMatrix3; + +/* A set of four 4x4 matrices in structure-of-arrays format + */ +typedef struct _VmathSoaMatrix4 +{ + VmathSoaVector4 col0; + VmathSoaVector4 col1; + VmathSoaVector4 col2; + VmathSoaVector4 col3; +} VmathSoaMatrix4; + +/* A set of four 3x4 transformation matrices in structure-of-arrays format + */ +typedef struct _VmathSoaTransform3 +{ + VmathSoaVector3 col0; + VmathSoaVector3 col1; + VmathSoaVector3 col2; + VmathSoaVector3 col3; +} VmathSoaTransform3; + +#endif + +/* + * Construct a 3-D vector from x, y, and z elements + */ +static inline VmathSoaVector3 vmathSoaV3MakeFromElems_V( vec_float4 x, vec_float4 y, vec_float4 z ); + +/* + * Copy elements from a 3-D point into a 3-D vector + */ +static inline VmathSoaVector3 vmathSoaV3MakeFromP3_V( VmathSoaPoint3 pnt ); + +/* + * Set all elements of a 3-D vector to the same scalar value + */ +static inline VmathSoaVector3 vmathSoaV3MakeFromScalar_V( vec_float4 scalar ); + +/* + * Replicate an AoS 3-D vector + */ +static inline VmathSoaVector3 vmathSoaV3MakeFromAos_V( VmathVector3 vec ); + +/* + * Insert four AoS 3-D vectors + */ +static inline VmathSoaVector3 vmathSoaV3MakeFrom4Aos_V( VmathVector3 vec0, VmathVector3 vec1, VmathVector3 vec2, VmathVector3 vec3 ); + +/* + * Extract four AoS 3-D vectors + */ +static inline void vmathSoaV3Get4Aos_V( VmathSoaVector3 vec, VmathVector3 *result0, VmathVector3 *result1, VmathVector3 *result2, VmathVector3 *result3 ); + +/* + * Set the x element of a 3-D vector + */ +static inline void vmathSoaV3SetX_V( VmathSoaVector3 *result, vec_float4 x ); + +/* + * Set the y element of a 3-D vector + */ +static inline void vmathSoaV3SetY_V( VmathSoaVector3 *result, vec_float4 y ); + +/* + * Set the z element of a 3-D vector + */ +static inline void vmathSoaV3SetZ_V( VmathSoaVector3 *result, vec_float4 z ); + +/* + * Get the x element of a 3-D vector + */ +static inline vec_float4 vmathSoaV3GetX_V( VmathSoaVector3 vec ); + +/* + * Get the y element of a 3-D vector + */ +static inline vec_float4 vmathSoaV3GetY_V( VmathSoaVector3 vec ); + +/* + * Get the z element of a 3-D vector + */ +static inline vec_float4 vmathSoaV3GetZ_V( VmathSoaVector3 vec ); + +/* + * Set an x, y, or z element of a 3-D vector by index + */ +static inline void vmathSoaV3SetElem_V( VmathSoaVector3 *result, int idx, vec_float4 value ); + +/* + * Get an x, y, or z element of a 3-D vector by index + */ +static inline vec_float4 vmathSoaV3GetElem_V( VmathSoaVector3 vec, int idx ); + +/* + * Add two 3-D vectors + */ +static inline VmathSoaVector3 vmathSoaV3Add_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1 ); + +/* + * Subtract a 3-D vector from another 3-D vector + */ +static inline VmathSoaVector3 vmathSoaV3Sub_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1 ); + +/* + * Add a 3-D vector to a 3-D point + */ +static inline VmathSoaPoint3 vmathSoaV3AddP3_V( VmathSoaVector3 vec, VmathSoaPoint3 pnt ); + +/* + * Multiply a 3-D vector by a scalar + */ +static inline VmathSoaVector3 vmathSoaV3ScalarMul_V( VmathSoaVector3 vec, vec_float4 scalar ); + +/* + * Divide a 3-D vector by a scalar + */ +static inline VmathSoaVector3 vmathSoaV3ScalarDiv_V( VmathSoaVector3 vec, vec_float4 scalar ); + +/* + * Negate all elements of a 3-D vector + */ +static inline VmathSoaVector3 vmathSoaV3Neg_V( VmathSoaVector3 vec ); + +/* + * Construct x axis + */ +static inline VmathSoaVector3 vmathSoaV3MakeXAxis_V( ); + +/* + * Construct y axis + */ +static inline VmathSoaVector3 vmathSoaV3MakeYAxis_V( ); + +/* + * Construct z axis + */ +static inline VmathSoaVector3 vmathSoaV3MakeZAxis_V( ); + +/* + * Multiply two 3-D vectors per element + */ +static inline VmathSoaVector3 vmathSoaV3MulPerElem_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1 ); + +/* + * Divide two 3-D vectors per element + * NOTE: + * Floating-point behavior matches standard library function divf4. + */ +static inline VmathSoaVector3 vmathSoaV3DivPerElem_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1 ); + +/* + * Compute the reciprocal of a 3-D vector per element + * NOTE: + * Floating-point behavior matches standard library function recipf4. + */ +static inline VmathSoaVector3 vmathSoaV3RecipPerElem_V( VmathSoaVector3 vec ); + +/* + * Compute the square root of a 3-D vector per element + * NOTE: + * Floating-point behavior matches standard library function sqrtf4. + */ +static inline VmathSoaVector3 vmathSoaV3SqrtPerElem_V( VmathSoaVector3 vec ); + +/* + * Compute the reciprocal square root of a 3-D vector per element + * NOTE: + * Floating-point behavior matches standard library function rsqrtf4. + */ +static inline VmathSoaVector3 vmathSoaV3RsqrtPerElem_V( VmathSoaVector3 vec ); + +/* + * Compute the absolute value of a 3-D vector per element + */ +static inline VmathSoaVector3 vmathSoaV3AbsPerElem_V( VmathSoaVector3 vec ); + +/* + * Copy sign from one 3-D vector to another, per element + */ +static inline VmathSoaVector3 vmathSoaV3CopySignPerElem_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1 ); + +/* + * Maximum of two 3-D vectors per element + */ +static inline VmathSoaVector3 vmathSoaV3MaxPerElem_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1 ); + +/* + * Minimum of two 3-D vectors per element + */ +static inline VmathSoaVector3 vmathSoaV3MinPerElem_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1 ); + +/* + * Maximum element of a 3-D vector + */ +static inline vec_float4 vmathSoaV3MaxElem_V( VmathSoaVector3 vec ); + +/* + * Minimum element of a 3-D vector + */ +static inline vec_float4 vmathSoaV3MinElem_V( VmathSoaVector3 vec ); + +/* + * Compute the sum of all elements of a 3-D vector + */ +static inline vec_float4 vmathSoaV3Sum_V( VmathSoaVector3 vec ); + +/* + * Compute the dot product of two 3-D vectors + */ +static inline vec_float4 vmathSoaV3Dot_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1 ); + +/* + * Compute the square of the length of a 3-D vector + */ +static inline vec_float4 vmathSoaV3LengthSqr_V( VmathSoaVector3 vec ); + +/* + * Compute the length of a 3-D vector + */ +static inline vec_float4 vmathSoaV3Length_V( VmathSoaVector3 vec ); + +/* + * Normalize a 3-D vector + * NOTE: + * The result is unpredictable when all elements of vec are at or near zero. + */ +static inline VmathSoaVector3 vmathSoaV3Normalize_V( VmathSoaVector3 vec ); + +/* + * Compute cross product of two 3-D vectors + */ +static inline VmathSoaVector3 vmathSoaV3Cross_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1 ); + +/* + * Outer product of two 3-D vectors + */ +static inline VmathSoaMatrix3 vmathSoaV3Outer_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1 ); + +/* + * Pre-multiply a row vector by a 3x3 matrix + */ +static inline VmathSoaVector3 vmathSoaV3RowMul_V( VmathSoaVector3 vec, VmathSoaMatrix3 mat ); + +/* + * Cross-product matrix of a 3-D vector + */ +static inline VmathSoaMatrix3 vmathSoaV3CrossMatrix_V( VmathSoaVector3 vec ); + +/* + * Create cross-product matrix and multiply + * NOTE: + * Faster than separately creating a cross-product matrix and multiplying. + */ +static inline VmathSoaMatrix3 vmathSoaV3CrossMatrixMul_V( VmathSoaVector3 vec, VmathSoaMatrix3 mat ); + +/* + * Linear interpolation between two 3-D vectors + * NOTE: + * Does not clamp t between 0 and 1. + */ +static inline VmathSoaVector3 vmathSoaV3Lerp_V( vec_float4 t, VmathSoaVector3 vec0, VmathSoaVector3 vec1 ); + +/* + * Spherical linear interpolation between two 3-D vectors + * NOTE: + * The result is unpredictable if the vectors point in opposite directions. + * Does not clamp t between 0 and 1. + */ +static inline VmathSoaVector3 vmathSoaV3Slerp_V( vec_float4 t, VmathSoaVector3 unitVec0, VmathSoaVector3 unitVec1 ); + +/* + * Conditionally select between two 3-D vectors + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + */ +static inline VmathSoaVector3 vmathSoaV3Select_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1, vec_uint4 select1 ); + +/* + * Load four three-float 3-D vectors, stored in three quadwords + */ +static inline void vmathSoaV3LoadXYZArray_V( VmathSoaVector3 *vec, const vec_float4 *threeQuads ); + +/* + * Store four slots of an SoA 3-D vector in three quadwords + */ +static inline void vmathSoaV3StoreXYZArray_V( VmathSoaVector3 vec, vec_float4 *threeQuads ); + +/* + * Store eight slots of two SoA 3-D vectors as half-floats + */ +static inline void vmathSoaV3StoreHalfFloats_V( VmathSoaVector3 vec0, VmathSoaVector3 vec1, vec_ushort8 *threeQuads ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 3-D vector + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaV3Print_V( VmathSoaVector3 vec ); + +/* + * Print a 3-D vector and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaV3Prints_V( VmathSoaVector3 vec, const char *name ); + +#endif + +/* + * Construct a 4-D vector from x, y, z, and w elements + */ +static inline VmathSoaVector4 vmathSoaV4MakeFromElems_V( vec_float4 x, vec_float4 y, vec_float4 z, vec_float4 w ); + +/* + * Construct a 4-D vector from a 3-D vector and a scalar + */ +static inline VmathSoaVector4 vmathSoaV4MakeFromV3Scalar_V( VmathSoaVector3 xyz, vec_float4 w ); + +/* + * Copy x, y, and z from a 3-D vector into a 4-D vector, and set w to 0 + */ +static inline VmathSoaVector4 vmathSoaV4MakeFromV3_V( VmathSoaVector3 vec ); + +/* + * Copy x, y, and z from a 3-D point into a 4-D vector, and set w to 1 + */ +static inline VmathSoaVector4 vmathSoaV4MakeFromP3_V( VmathSoaPoint3 pnt ); + +/* + * Copy elements from a quaternion into a 4-D vector + */ +static inline VmathSoaVector4 vmathSoaV4MakeFromQ_V( VmathSoaQuat quat ); + +/* + * Set all elements of a 4-D vector to the same scalar value + */ +static inline VmathSoaVector4 vmathSoaV4MakeFromScalar_V( vec_float4 scalar ); + +/* + * Replicate an AoS 4-D vector + */ +static inline VmathSoaVector4 vmathSoaV4MakeFromAos_V( VmathVector4 vec ); + +/* + * Insert four AoS 4-D vectors + */ +static inline VmathSoaVector4 vmathSoaV4MakeFrom4Aos_V( VmathVector4 vec0, VmathVector4 vec1, VmathVector4 vec2, VmathVector4 vec3 ); + +/* + * Extract four AoS 4-D vectors + */ +static inline void vmathSoaV4Get4Aos_V( VmathSoaVector4 vec, VmathVector4 *result0, VmathVector4 *result1, VmathVector4 *result2, VmathVector4 *result3 ); + +/* + * Set the x, y, and z elements of a 4-D vector + * NOTE: + * This function does not change the w element. + */ +static inline void vmathSoaV4SetXYZ_V( VmathSoaVector4 *result, VmathSoaVector3 vec ); + +/* + * Get the x, y, and z elements of a 4-D vector + */ +static inline VmathSoaVector3 vmathSoaV4GetXYZ_V( VmathSoaVector4 vec ); + +/* + * Set the x element of a 4-D vector + */ +static inline void vmathSoaV4SetX_V( VmathSoaVector4 *result, vec_float4 x ); + +/* + * Set the y element of a 4-D vector + */ +static inline void vmathSoaV4SetY_V( VmathSoaVector4 *result, vec_float4 y ); + +/* + * Set the z element of a 4-D vector + */ +static inline void vmathSoaV4SetZ_V( VmathSoaVector4 *result, vec_float4 z ); + +/* + * Set the w element of a 4-D vector + */ +static inline void vmathSoaV4SetW_V( VmathSoaVector4 *result, vec_float4 w ); + +/* + * Get the x element of a 4-D vector + */ +static inline vec_float4 vmathSoaV4GetX_V( VmathSoaVector4 vec ); + +/* + * Get the y element of a 4-D vector + */ +static inline vec_float4 vmathSoaV4GetY_V( VmathSoaVector4 vec ); + +/* + * Get the z element of a 4-D vector + */ +static inline vec_float4 vmathSoaV4GetZ_V( VmathSoaVector4 vec ); + +/* + * Get the w element of a 4-D vector + */ +static inline vec_float4 vmathSoaV4GetW_V( VmathSoaVector4 vec ); + +/* + * Set an x, y, z, or w element of a 4-D vector by index + */ +static inline void vmathSoaV4SetElem_V( VmathSoaVector4 *result, int idx, vec_float4 value ); + +/* + * Get an x, y, z, or w element of a 4-D vector by index + */ +static inline vec_float4 vmathSoaV4GetElem_V( VmathSoaVector4 vec, int idx ); + +/* + * Add two 4-D vectors + */ +static inline VmathSoaVector4 vmathSoaV4Add_V( VmathSoaVector4 vec0, VmathSoaVector4 vec1 ); + +/* + * Subtract a 4-D vector from another 4-D vector + */ +static inline VmathSoaVector4 vmathSoaV4Sub_V( VmathSoaVector4 vec0, VmathSoaVector4 vec1 ); + +/* + * Multiply a 4-D vector by a scalar + */ +static inline VmathSoaVector4 vmathSoaV4ScalarMul_V( VmathSoaVector4 vec, vec_float4 scalar ); + +/* + * Divide a 4-D vector by a scalar + */ +static inline VmathSoaVector4 vmathSoaV4ScalarDiv_V( VmathSoaVector4 vec, vec_float4 scalar ); + +/* + * Negate all elements of a 4-D vector + */ +static inline VmathSoaVector4 vmathSoaV4Neg_V( VmathSoaVector4 vec ); + +/* + * Construct x axis + */ +static inline VmathSoaVector4 vmathSoaV4MakeXAxis_V( ); + +/* + * Construct y axis + */ +static inline VmathSoaVector4 vmathSoaV4MakeYAxis_V( ); + +/* + * Construct z axis + */ +static inline VmathSoaVector4 vmathSoaV4MakeZAxis_V( ); + +/* + * Construct w axis + */ +static inline VmathSoaVector4 vmathSoaV4MakeWAxis_V( ); + +/* + * Multiply two 4-D vectors per element + */ +static inline VmathSoaVector4 vmathSoaV4MulPerElem_V( VmathSoaVector4 vec0, VmathSoaVector4 vec1 ); + +/* + * Divide two 4-D vectors per element + * NOTE: + * Floating-point behavior matches standard library function divf4. + */ +static inline VmathSoaVector4 vmathSoaV4DivPerElem_V( VmathSoaVector4 vec0, VmathSoaVector4 vec1 ); + +/* + * Compute the reciprocal of a 4-D vector per element + * NOTE: + * Floating-point behavior matches standard library function recipf4. + */ +static inline VmathSoaVector4 vmathSoaV4RecipPerElem_V( VmathSoaVector4 vec ); + +/* + * Compute the square root of a 4-D vector per element + * NOTE: + * Floating-point behavior matches standard library function sqrtf4. + */ +static inline VmathSoaVector4 vmathSoaV4SqrtPerElem_V( VmathSoaVector4 vec ); + +/* + * Compute the reciprocal square root of a 4-D vector per element + * NOTE: + * Floating-point behavior matches standard library function rsqrtf4. + */ +static inline VmathSoaVector4 vmathSoaV4RsqrtPerElem_V( VmathSoaVector4 vec ); + +/* + * Compute the absolute value of a 4-D vector per element + */ +static inline VmathSoaVector4 vmathSoaV4AbsPerElem_V( VmathSoaVector4 vec ); + +/* + * Copy sign from one 4-D vector to another, per element + */ +static inline VmathSoaVector4 vmathSoaV4CopySignPerElem_V( VmathSoaVector4 vec0, VmathSoaVector4 vec1 ); + +/* + * Maximum of two 4-D vectors per element + */ +static inline VmathSoaVector4 vmathSoaV4MaxPerElem_V( VmathSoaVector4 vec0, VmathSoaVector4 vec1 ); + +/* + * Minimum of two 4-D vectors per element + */ +static inline VmathSoaVector4 vmathSoaV4MinPerElem_V( VmathSoaVector4 vec0, VmathSoaVector4 vec1 ); + +/* + * Maximum element of a 4-D vector + */ +static inline vec_float4 vmathSoaV4MaxElem_V( VmathSoaVector4 vec ); + +/* + * Minimum element of a 4-D vector + */ +static inline vec_float4 vmathSoaV4MinElem_V( VmathSoaVector4 vec ); + +/* + * Compute the sum of all elements of a 4-D vector + */ +static inline vec_float4 vmathSoaV4Sum_V( VmathSoaVector4 vec ); + +/* + * Compute the dot product of two 4-D vectors + */ +static inline vec_float4 vmathSoaV4Dot_V( VmathSoaVector4 vec0, VmathSoaVector4 vec1 ); + +/* + * Compute the square of the length of a 4-D vector + */ +static inline vec_float4 vmathSoaV4LengthSqr_V( VmathSoaVector4 vec ); + +/* + * Compute the length of a 4-D vector + */ +static inline vec_float4 vmathSoaV4Length_V( VmathSoaVector4 vec ); + +/* + * Normalize a 4-D vector + * NOTE: + * The result is unpredictable when all elements of vec are at or near zero. + */ +static inline VmathSoaVector4 vmathSoaV4Normalize_V( VmathSoaVector4 vec ); + +/* + * Outer product of two 4-D vectors + */ +static inline VmathSoaMatrix4 vmathSoaV4Outer_V( VmathSoaVector4 vec0, VmathSoaVector4 vec1 ); + +/* + * Linear interpolation between two 4-D vectors + * NOTE: + * Does not clamp t between 0 and 1. + */ +static inline VmathSoaVector4 vmathSoaV4Lerp_V( vec_float4 t, VmathSoaVector4 vec0, VmathSoaVector4 vec1 ); + +/* + * Spherical linear interpolation between two 4-D vectors + * NOTE: + * The result is unpredictable if the vectors point in opposite directions. + * Does not clamp t between 0 and 1. + */ +static inline VmathSoaVector4 vmathSoaV4Slerp_V( vec_float4 t, VmathSoaVector4 unitVec0, VmathSoaVector4 unitVec1 ); + +/* + * Conditionally select between two 4-D vectors + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + */ +static inline VmathSoaVector4 vmathSoaV4Select_V( VmathSoaVector4 vec0, VmathSoaVector4 vec1, vec_uint4 select1 ); + +/* + * Store four slots of an SoA 4-D vector as half-floats + */ +static inline void vmathSoaV4StoreHalfFloats_V( VmathSoaVector4 vec, vec_ushort8 *twoQuads ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 4-D vector + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaV4Print_V( VmathSoaVector4 vec ); + +/* + * Print a 4-D vector and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaV4Prints_V( VmathSoaVector4 vec, const char *name ); + +#endif + +/* + * Construct a 3-D point from x, y, and z elements + */ +static inline VmathSoaPoint3 vmathSoaP3MakeFromElems_V( vec_float4 x, vec_float4 y, vec_float4 z ); + +/* + * Copy elements from a 3-D vector into a 3-D point + */ +static inline VmathSoaPoint3 vmathSoaP3MakeFromV3_V( VmathSoaVector3 vec ); + +/* + * Set all elements of a 3-D point to the same scalar value + */ +static inline VmathSoaPoint3 vmathSoaP3MakeFromScalar_V( vec_float4 scalar ); + +/* + * Replicate an AoS 3-D point + */ +static inline VmathSoaPoint3 vmathSoaP3MakeFromAos_V( VmathPoint3 pnt ); + +/* + * Insert four AoS 3-D points + */ +static inline VmathSoaPoint3 vmathSoaP3MakeFrom4Aos_V( VmathPoint3 pnt0, VmathPoint3 pnt1, VmathPoint3 pnt2, VmathPoint3 pnt3 ); + +/* + * Extract four AoS 3-D points + */ +static inline void vmathSoaP3Get4Aos_V( VmathSoaPoint3 pnt, VmathPoint3 *result0, VmathPoint3 *result1, VmathPoint3 *result2, VmathPoint3 *result3 ); + +/* + * Set the x element of a 3-D point + */ +static inline void vmathSoaP3SetX_V( VmathSoaPoint3 *result, vec_float4 x ); + +/* + * Set the y element of a 3-D point + */ +static inline void vmathSoaP3SetY_V( VmathSoaPoint3 *result, vec_float4 y ); + +/* + * Set the z element of a 3-D point + */ +static inline void vmathSoaP3SetZ_V( VmathSoaPoint3 *result, vec_float4 z ); + +/* + * Get the x element of a 3-D point + */ +static inline vec_float4 vmathSoaP3GetX_V( VmathSoaPoint3 pnt ); + +/* + * Get the y element of a 3-D point + */ +static inline vec_float4 vmathSoaP3GetY_V( VmathSoaPoint3 pnt ); + +/* + * Get the z element of a 3-D point + */ +static inline vec_float4 vmathSoaP3GetZ_V( VmathSoaPoint3 pnt ); + +/* + * Set an x, y, or z element of a 3-D point by index + */ +static inline void vmathSoaP3SetElem_V( VmathSoaPoint3 *result, int idx, vec_float4 value ); + +/* + * Get an x, y, or z element of a 3-D point by index + */ +static inline vec_float4 vmathSoaP3GetElem_V( VmathSoaPoint3 pnt, int idx ); + +/* + * Subtract a 3-D point from another 3-D point + */ +static inline VmathSoaVector3 vmathSoaP3Sub_V( VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1 ); + +/* + * Add a 3-D point to a 3-D vector + */ +static inline VmathSoaPoint3 vmathSoaP3AddV3_V( VmathSoaPoint3 pnt, VmathSoaVector3 vec ); + +/* + * Subtract a 3-D vector from a 3-D point + */ +static inline VmathSoaPoint3 vmathSoaP3SubV3_V( VmathSoaPoint3 pnt, VmathSoaVector3 vec ); + +/* + * Multiply two 3-D points per element + */ +static inline VmathSoaPoint3 vmathSoaP3MulPerElem_V( VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1 ); + +/* + * Divide two 3-D points per element + * NOTE: + * Floating-point behavior matches standard library function divf4. + */ +static inline VmathSoaPoint3 vmathSoaP3DivPerElem_V( VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1 ); + +/* + * Compute the reciprocal of a 3-D point per element + * NOTE: + * Floating-point behavior matches standard library function recipf4. + */ +static inline VmathSoaPoint3 vmathSoaP3RecipPerElem_V( VmathSoaPoint3 pnt ); + +/* + * Compute the square root of a 3-D point per element + * NOTE: + * Floating-point behavior matches standard library function sqrtf4. + */ +static inline VmathSoaPoint3 vmathSoaP3SqrtPerElem_V( VmathSoaPoint3 pnt ); + +/* + * Compute the reciprocal square root of a 3-D point per element + * NOTE: + * Floating-point behavior matches standard library function rsqrtf4. + */ +static inline VmathSoaPoint3 vmathSoaP3RsqrtPerElem_V( VmathSoaPoint3 pnt ); + +/* + * Compute the absolute value of a 3-D point per element + */ +static inline VmathSoaPoint3 vmathSoaP3AbsPerElem_V( VmathSoaPoint3 pnt ); + +/* + * Copy sign from one 3-D point to another, per element + */ +static inline VmathSoaPoint3 vmathSoaP3CopySignPerElem_V( VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1 ); + +/* + * Maximum of two 3-D points per element + */ +static inline VmathSoaPoint3 vmathSoaP3MaxPerElem_V( VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1 ); + +/* + * Minimum of two 3-D points per element + */ +static inline VmathSoaPoint3 vmathSoaP3MinPerElem_V( VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1 ); + +/* + * Maximum element of a 3-D point + */ +static inline vec_float4 vmathSoaP3MaxElem_V( VmathSoaPoint3 pnt ); + +/* + * Minimum element of a 3-D point + */ +static inline vec_float4 vmathSoaP3MinElem_V( VmathSoaPoint3 pnt ); + +/* + * Compute the sum of all elements of a 3-D point + */ +static inline vec_float4 vmathSoaP3Sum_V( VmathSoaPoint3 pnt ); + +/* + * Apply uniform scale to a 3-D point + */ +static inline VmathSoaPoint3 vmathSoaP3Scale_V( VmathSoaPoint3 pnt, vec_float4 scaleVal ); + +/* + * Apply non-uniform scale to a 3-D point + */ +static inline VmathSoaPoint3 vmathSoaP3NonUniformScale_V( VmathSoaPoint3 pnt, VmathSoaVector3 scaleVec ); + +/* + * Scalar projection of a 3-D point on a unit-length 3-D vector + */ +static inline vec_float4 vmathSoaP3Projection_V( VmathSoaPoint3 pnt, VmathSoaVector3 unitVec ); + +/* + * Compute the square of the distance of a 3-D point from the coordinate-system origin + */ +static inline vec_float4 vmathSoaP3DistSqrFromOrigin_V( VmathSoaPoint3 pnt ); + +/* + * Compute the distance of a 3-D point from the coordinate-system origin + */ +static inline vec_float4 vmathSoaP3DistFromOrigin_V( VmathSoaPoint3 pnt ); + +/* + * Compute the square of the distance between two 3-D points + */ +static inline vec_float4 vmathSoaP3DistSqr_V( VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1 ); + +/* + * Compute the distance between two 3-D points + */ +static inline vec_float4 vmathSoaP3Dist_V( VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1 ); + +/* + * Linear interpolation between two 3-D points + * NOTE: + * Does not clamp t between 0 and 1. + */ +static inline VmathSoaPoint3 vmathSoaP3Lerp_V( vec_float4 t, VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1 ); + +/* + * Conditionally select between two 3-D points + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + */ +static inline VmathSoaPoint3 vmathSoaP3Select_V( VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1, vec_uint4 select1 ); + +/* + * Load four three-float 3-D points, stored in three quadwords + */ +static inline void vmathSoaP3LoadXYZArray_V( VmathSoaPoint3 *pnt, const vec_float4 *threeQuads ); + +/* + * Store four slots of an SoA 3-D point in three quadwords + */ +static inline void vmathSoaP3StoreXYZArray_V( VmathSoaPoint3 pnt, vec_float4 *threeQuads ); + +/* + * Store eight slots of two SoA 3-D points as half-floats + */ +static inline void vmathSoaP3StoreHalfFloats_V( VmathSoaPoint3 pnt0, VmathSoaPoint3 pnt1, vec_ushort8 *threeQuads ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 3-D point + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaP3Print_V( VmathSoaPoint3 pnt ); + +/* + * Print a 3-D point and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaP3Prints_V( VmathSoaPoint3 pnt, const char *name ); + +#endif + +/* + * Construct a quaternion from x, y, z, and w elements + */ +static inline VmathSoaQuat vmathSoaQMakeFromElems_V( vec_float4 x, vec_float4 y, vec_float4 z, vec_float4 w ); + +/* + * Construct a quaternion from a 3-D vector and a scalar + */ +static inline VmathSoaQuat vmathSoaQMakeFromV3Scalar_V( VmathSoaVector3 xyz, vec_float4 w ); + +/* + * Copy elements from a 4-D vector into a quaternion + */ +static inline VmathSoaQuat vmathSoaQMakeFromV4_V( VmathSoaVector4 vec ); + +/* + * Convert a rotation matrix to a unit-length quaternion + */ +static inline VmathSoaQuat vmathSoaQMakeFromM3_V( VmathSoaMatrix3 rotMat ); + +/* + * Set all elements of a quaternion to the same scalar value + */ +static inline VmathSoaQuat vmathSoaQMakeFromScalar_V( vec_float4 scalar ); + +/* + * Replicate an AoS quaternion + */ +static inline VmathSoaQuat vmathSoaQMakeFromAos_V( VmathQuat quat ); + +/* + * Insert four AoS quaternions + */ +static inline VmathSoaQuat vmathSoaQMakeFrom4Aos_V( VmathQuat quat0, VmathQuat quat1, VmathQuat quat2, VmathQuat quat3 ); + +/* + * Extract four AoS quaternions + */ +static inline void vmathSoaQGet4Aos_V( VmathSoaQuat quat, VmathQuat *result0, VmathQuat *result1, VmathQuat *result2, VmathQuat *result3 ); + +/* + * Set the x, y, and z elements of a quaternion + * NOTE: + * This function does not change the w element. + */ +static inline void vmathSoaQSetXYZ_V( VmathSoaQuat *result, VmathSoaVector3 vec ); + +/* + * Get the x, y, and z elements of a quaternion + */ +static inline VmathSoaVector3 vmathSoaQGetXYZ_V( VmathSoaQuat quat ); + +/* + * Set the x element of a quaternion + */ +static inline void vmathSoaQSetX_V( VmathSoaQuat *result, vec_float4 x ); + +/* + * Set the y element of a quaternion + */ +static inline void vmathSoaQSetY_V( VmathSoaQuat *result, vec_float4 y ); + +/* + * Set the z element of a quaternion + */ +static inline void vmathSoaQSetZ_V( VmathSoaQuat *result, vec_float4 z ); + +/* + * Set the w element of a quaternion + */ +static inline void vmathSoaQSetW_V( VmathSoaQuat *result, vec_float4 w ); + +/* + * Get the x element of a quaternion + */ +static inline vec_float4 vmathSoaQGetX_V( VmathSoaQuat quat ); + +/* + * Get the y element of a quaternion + */ +static inline vec_float4 vmathSoaQGetY_V( VmathSoaQuat quat ); + +/* + * Get the z element of a quaternion + */ +static inline vec_float4 vmathSoaQGetZ_V( VmathSoaQuat quat ); + +/* + * Get the w element of a quaternion + */ +static inline vec_float4 vmathSoaQGetW_V( VmathSoaQuat quat ); + +/* + * Set an x, y, z, or w element of a quaternion by index + */ +static inline void vmathSoaQSetElem_V( VmathSoaQuat *result, int idx, vec_float4 value ); + +/* + * Get an x, y, z, or w element of a quaternion by index + */ +static inline vec_float4 vmathSoaQGetElem_V( VmathSoaQuat quat, int idx ); + +/* + * Add two quaternions + */ +static inline VmathSoaQuat vmathSoaQAdd_V( VmathSoaQuat quat0, VmathSoaQuat quat1 ); + +/* + * Subtract a quaternion from another quaternion + */ +static inline VmathSoaQuat vmathSoaQSub_V( VmathSoaQuat quat0, VmathSoaQuat quat1 ); + +/* + * Multiply two quaternions + */ +static inline VmathSoaQuat vmathSoaQMul_V( VmathSoaQuat quat0, VmathSoaQuat quat1 ); + +/* + * Multiply a quaternion by a scalar + */ +static inline VmathSoaQuat vmathSoaQScalarMul_V( VmathSoaQuat quat, vec_float4 scalar ); + +/* + * Divide a quaternion by a scalar + */ +static inline VmathSoaQuat vmathSoaQScalarDiv_V( VmathSoaQuat quat, vec_float4 scalar ); + +/* + * Negate all elements of a quaternion + */ +static inline VmathSoaQuat vmathSoaQNeg_V( VmathSoaQuat quat ); + +/* + * Construct an identity quaternion + */ +static inline VmathSoaQuat vmathSoaQMakeIdentity_V( ); + +/* + * Construct a quaternion to rotate between two unit-length 3-D vectors + * NOTE: + * The result is unpredictable if unitVec0 and unitVec1 point in opposite directions. + */ +static inline VmathSoaQuat vmathSoaQMakeRotationArc_V( VmathSoaVector3 unitVec0, VmathSoaVector3 unitVec1 ); + +/* + * Construct a quaternion to rotate around a unit-length 3-D vector + */ +static inline VmathSoaQuat vmathSoaQMakeRotationAxis_V( vec_float4 radians, VmathSoaVector3 unitVec ); + +/* + * Construct a quaternion to rotate around the x axis + */ +static inline VmathSoaQuat vmathSoaQMakeRotationX_V( vec_float4 radians ); + +/* + * Construct a quaternion to rotate around the y axis + */ +static inline VmathSoaQuat vmathSoaQMakeRotationY_V( vec_float4 radians ); + +/* + * Construct a quaternion to rotate around the z axis + */ +static inline VmathSoaQuat vmathSoaQMakeRotationZ_V( vec_float4 radians ); + +/* + * Compute the conjugate of a quaternion + */ +static inline VmathSoaQuat vmathSoaQConj_V( VmathSoaQuat quat ); + +/* + * Use a unit-length quaternion to rotate a 3-D vector + */ +static inline VmathSoaVector3 vmathSoaQRotate_V( VmathSoaQuat unitQuat, VmathSoaVector3 vec ); + +/* + * Compute the dot product of two quaternions + */ +static inline vec_float4 vmathSoaQDot_V( VmathSoaQuat quat0, VmathSoaQuat quat1 ); + +/* + * Compute the norm of a quaternion + */ +static inline vec_float4 vmathSoaQNorm_V( VmathSoaQuat quat ); + +/* + * Compute the length of a quaternion + */ +static inline vec_float4 vmathSoaQLength_V( VmathSoaQuat quat ); + +/* + * Normalize a quaternion + * NOTE: + * The result is unpredictable when all elements of quat are at or near zero. + */ +static inline VmathSoaQuat vmathSoaQNormalize_V( VmathSoaQuat quat ); + +/* + * Linear interpolation between two quaternions + * NOTE: + * Does not clamp t between 0 and 1. + */ +static inline VmathSoaQuat vmathSoaQLerp_V( vec_float4 t, VmathSoaQuat quat0, VmathSoaQuat quat1 ); + +/* + * Spherical linear interpolation between two quaternions + * NOTE: + * Interpolates along the shortest path between orientations. + * Does not clamp t between 0 and 1. + */ +static inline VmathSoaQuat vmathSoaQSlerp_V( vec_float4 t, VmathSoaQuat unitQuat0, VmathSoaQuat unitQuat1 ); + +/* + * Spherical quadrangle interpolation + */ +static inline VmathSoaQuat vmathSoaQSquad_V( vec_float4 t, VmathSoaQuat unitQuat0, VmathSoaQuat unitQuat1, VmathSoaQuat unitQuat2, VmathSoaQuat unitQuat3 ); + +/* + * Conditionally select between two quaternions + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + */ +static inline VmathSoaQuat vmathSoaQSelect_V( VmathSoaQuat quat0, VmathSoaQuat quat1, vec_uint4 select1 ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a quaternion + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaQPrint_V( VmathSoaQuat quat ); + +/* + * Print a quaternion and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaQPrints_V( VmathSoaQuat quat, const char *name ); + +#endif + +/* + * Construct a 3x3 matrix containing the specified columns + */ +static inline VmathSoaMatrix3 vmathSoaM3MakeFromCols_V( VmathSoaVector3 col0, VmathSoaVector3 col1, VmathSoaVector3 col2 ); + +/* + * Construct a 3x3 rotation matrix from a unit-length quaternion + */ +static inline VmathSoaMatrix3 vmathSoaM3MakeFromQ_V( VmathSoaQuat unitQuat ); + +/* + * Set all elements of a 3x3 matrix to the same scalar value + */ +static inline VmathSoaMatrix3 vmathSoaM3MakeFromScalar_V( vec_float4 scalar ); + +/* + * Replicate an AoS 3x3 matrix + */ +static inline VmathSoaMatrix3 vmathSoaM3MakeFromAos_V( VmathMatrix3 mat ); + +/* + * Insert four AoS 3x3 matrices + */ +static inline VmathSoaMatrix3 vmathSoaM3MakeFrom4Aos_V( VmathMatrix3 mat0, VmathMatrix3 mat1, VmathMatrix3 mat2, VmathMatrix3 mat3 ); + +/* + * Extract four AoS 3x3 matrices + */ +static inline void vmathSoaM3Get4Aos_V( VmathSoaMatrix3 mat, VmathMatrix3 *result0, VmathMatrix3 *result1, VmathMatrix3 *result2, VmathMatrix3 *result3 ); + +/* + * Set column 0 of a 3x3 matrix + */ +static inline void vmathSoaM3SetCol0_V( VmathSoaMatrix3 *result, VmathSoaVector3 col0 ); + +/* + * Set column 1 of a 3x3 matrix + */ +static inline void vmathSoaM3SetCol1_V( VmathSoaMatrix3 *result, VmathSoaVector3 col1 ); + +/* + * Set column 2 of a 3x3 matrix + */ +static inline void vmathSoaM3SetCol2_V( VmathSoaMatrix3 *result, VmathSoaVector3 col2 ); + +/* + * Get column 0 of a 3x3 matrix + */ +static inline VmathSoaVector3 vmathSoaM3GetCol0_V( VmathSoaMatrix3 mat ); + +/* + * Get column 1 of a 3x3 matrix + */ +static inline VmathSoaVector3 vmathSoaM3GetCol1_V( VmathSoaMatrix3 mat ); + +/* + * Get column 2 of a 3x3 matrix + */ +static inline VmathSoaVector3 vmathSoaM3GetCol2_V( VmathSoaMatrix3 mat ); + +/* + * Set the column of a 3x3 matrix referred to by the specified index + */ +static inline void vmathSoaM3SetCol_V( VmathSoaMatrix3 *result, int col, VmathSoaVector3 vec ); + +/* + * Set the row of a 3x3 matrix referred to by the specified index + */ +static inline void vmathSoaM3SetRow_V( VmathSoaMatrix3 *result, int row, VmathSoaVector3 vec ); + +/* + * Get the column of a 3x3 matrix referred to by the specified index + */ +static inline VmathSoaVector3 vmathSoaM3GetCol_V( VmathSoaMatrix3 mat, int col ); + +/* + * Get the row of a 3x3 matrix referred to by the specified index + */ +static inline VmathSoaVector3 vmathSoaM3GetRow_V( VmathSoaMatrix3 mat, int row ); + +/* + * Set the element of a 3x3 matrix referred to by column and row indices + */ +static inline void vmathSoaM3SetElem_V( VmathSoaMatrix3 *result, int col, int row, vec_float4 val ); + +/* + * Get the element of a 3x3 matrix referred to by column and row indices + */ +static inline vec_float4 vmathSoaM3GetElem_V( VmathSoaMatrix3 mat, int col, int row ); + +/* + * Add two 3x3 matrices + */ +static inline VmathSoaMatrix3 vmathSoaM3Add_V( VmathSoaMatrix3 mat0, VmathSoaMatrix3 mat1 ); + +/* + * Subtract a 3x3 matrix from another 3x3 matrix + */ +static inline VmathSoaMatrix3 vmathSoaM3Sub_V( VmathSoaMatrix3 mat0, VmathSoaMatrix3 mat1 ); + +/* + * Negate all elements of a 3x3 matrix + */ +static inline VmathSoaMatrix3 vmathSoaM3Neg_V( VmathSoaMatrix3 mat ); + +/* + * Multiply a 3x3 matrix by a scalar + */ +static inline VmathSoaMatrix3 vmathSoaM3ScalarMul_V( VmathSoaMatrix3 mat, vec_float4 scalar ); + +/* + * Multiply a 3x3 matrix by a 3-D vector + */ +static inline VmathSoaVector3 vmathSoaM3MulV3_V( VmathSoaMatrix3 mat, VmathSoaVector3 vec ); + +/* + * Multiply two 3x3 matrices + */ +static inline VmathSoaMatrix3 vmathSoaM3Mul_V( VmathSoaMatrix3 mat0, VmathSoaMatrix3 mat1 ); + +/* + * Construct an identity 3x3 matrix + */ +static inline VmathSoaMatrix3 vmathSoaM3MakeIdentity_V( ); + +/* + * Construct a 3x3 matrix to rotate around the x axis + */ +static inline VmathSoaMatrix3 vmathSoaM3MakeRotationX_V( vec_float4 radians ); + +/* + * Construct a 3x3 matrix to rotate around the y axis + */ +static inline VmathSoaMatrix3 vmathSoaM3MakeRotationY_V( vec_float4 radians ); + +/* + * Construct a 3x3 matrix to rotate around the z axis + */ +static inline VmathSoaMatrix3 vmathSoaM3MakeRotationZ_V( vec_float4 radians ); + +/* + * Construct a 3x3 matrix to rotate around the x, y, and z axes + */ +static inline VmathSoaMatrix3 vmathSoaM3MakeRotationZYX_V( VmathSoaVector3 radiansXYZ ); + +/* + * Construct a 3x3 matrix to rotate around a unit-length 3-D vector + */ +static inline VmathSoaMatrix3 vmathSoaM3MakeRotationAxis_V( vec_float4 radians, VmathSoaVector3 unitVec ); + +/* + * Construct a rotation matrix from a unit-length quaternion + */ +static inline VmathSoaMatrix3 vmathSoaM3MakeRotationQ_V( VmathSoaQuat unitQuat ); + +/* + * Construct a 3x3 matrix to perform scaling + */ +static inline VmathSoaMatrix3 vmathSoaM3MakeScale_V( VmathSoaVector3 scaleVec ); + +/* + * Append (post-multiply) a scale transformation to a 3x3 matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline VmathSoaMatrix3 vmathSoaM3AppendScale_V( VmathSoaMatrix3 mat, VmathSoaVector3 scaleVec ); + +/* + * Prepend (pre-multiply) a scale transformation to a 3x3 matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline VmathSoaMatrix3 vmathSoaM3PrependScale_V( VmathSoaVector3 scaleVec, VmathSoaMatrix3 mat ); + +/* + * Multiply two 3x3 matrices per element + */ +static inline VmathSoaMatrix3 vmathSoaM3MulPerElem_V( VmathSoaMatrix3 mat0, VmathSoaMatrix3 mat1 ); + +/* + * Compute the absolute value of a 3x3 matrix per element + */ +static inline VmathSoaMatrix3 vmathSoaM3AbsPerElem_V( VmathSoaMatrix3 mat ); + +/* + * Transpose of a 3x3 matrix + */ +static inline VmathSoaMatrix3 vmathSoaM3Transpose_V( VmathSoaMatrix3 mat ); + +/* + * Compute the inverse of a 3x3 matrix + * NOTE: + * Result is unpredictable when the determinant of mat is equal to or near 0. + */ +static inline VmathSoaMatrix3 vmathSoaM3Inverse_V( VmathSoaMatrix3 mat ); + +/* + * Determinant of a 3x3 matrix + */ +static inline vec_float4 vmathSoaM3Determinant_V( VmathSoaMatrix3 mat ); + +/* + * Conditionally select between two 3x3 matrices + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + */ +static inline VmathSoaMatrix3 vmathSoaM3Select_V( VmathSoaMatrix3 mat0, VmathSoaMatrix3 mat1, vec_uint4 select1 ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 3x3 matrix + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaM3Print_V( VmathSoaMatrix3 mat ); + +/* + * Print a 3x3 matrix and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaM3Prints_V( VmathSoaMatrix3 mat, const char *name ); + +#endif + +/* + * Construct a 4x4 matrix containing the specified columns + */ +static inline VmathSoaMatrix4 vmathSoaM4MakeFromCols_V( VmathSoaVector4 col0, VmathSoaVector4 col1, VmathSoaVector4 col2, VmathSoaVector4 col3 ); + +/* + * Construct a 4x4 matrix from a 3x4 transformation matrix + */ +static inline VmathSoaMatrix4 vmathSoaM4MakeFromT3_V( VmathSoaTransform3 mat ); + +/* + * Construct a 4x4 matrix from a 3x3 matrix and a 3-D vector + */ +static inline VmathSoaMatrix4 vmathSoaM4MakeFromM3V3_V( VmathSoaMatrix3 mat, VmathSoaVector3 translateVec ); + +/* + * Construct a 4x4 matrix from a unit-length quaternion and a 3-D vector + */ +static inline VmathSoaMatrix4 vmathSoaM4MakeFromQV3_V( VmathSoaQuat unitQuat, VmathSoaVector3 translateVec ); + +/* + * Set all elements of a 4x4 matrix to the same scalar value + */ +static inline VmathSoaMatrix4 vmathSoaM4MakeFromScalar_V( vec_float4 scalar ); + +/* + * Replicate an AoS 4x4 matrix + */ +static inline VmathSoaMatrix4 vmathSoaM4MakeFromAos_V( VmathMatrix4 mat ); + +/* + * Insert four AoS 4x4 matrices + */ +static inline VmathSoaMatrix4 vmathSoaM4MakeFrom4Aos_V( VmathMatrix4 mat0, VmathMatrix4 mat1, VmathMatrix4 mat2, VmathMatrix4 mat3 ); + +/* + * Extract four AoS 4x4 matrices + */ +static inline void vmathSoaM4Get4Aos_V( VmathSoaMatrix4 mat, VmathMatrix4 *result0, VmathMatrix4 *result1, VmathMatrix4 *result2, VmathMatrix4 *result3 ); + +/* + * Set the upper-left 3x3 submatrix + * NOTE: + * This function does not change the bottom row elements. + */ +static inline void vmathSoaM4SetUpper3x3_V( VmathSoaMatrix4 *result, VmathSoaMatrix3 mat3 ); + +/* + * Get the upper-left 3x3 submatrix of a 4x4 matrix + */ +static inline VmathSoaMatrix3 vmathSoaM4GetUpper3x3_V( VmathSoaMatrix4 mat ); + +/* + * Set translation component + * NOTE: + * This function does not change the bottom row elements. + */ +static inline void vmathSoaM4SetTranslation_V( VmathSoaMatrix4 *result, VmathSoaVector3 translateVec ); + +/* + * Get the translation component of a 4x4 matrix + */ +static inline VmathSoaVector3 vmathSoaM4GetTranslation_V( VmathSoaMatrix4 mat ); + +/* + * Set column 0 of a 4x4 matrix + */ +static inline void vmathSoaM4SetCol0_V( VmathSoaMatrix4 *result, VmathSoaVector4 col0 ); + +/* + * Set column 1 of a 4x4 matrix + */ +static inline void vmathSoaM4SetCol1_V( VmathSoaMatrix4 *result, VmathSoaVector4 col1 ); + +/* + * Set column 2 of a 4x4 matrix + */ +static inline void vmathSoaM4SetCol2_V( VmathSoaMatrix4 *result, VmathSoaVector4 col2 ); + +/* + * Set column 3 of a 4x4 matrix + */ +static inline void vmathSoaM4SetCol3_V( VmathSoaMatrix4 *result, VmathSoaVector4 col3 ); + +/* + * Get column 0 of a 4x4 matrix + */ +static inline VmathSoaVector4 vmathSoaM4GetCol0_V( VmathSoaMatrix4 mat ); + +/* + * Get column 1 of a 4x4 matrix + */ +static inline VmathSoaVector4 vmathSoaM4GetCol1_V( VmathSoaMatrix4 mat ); + +/* + * Get column 2 of a 4x4 matrix + */ +static inline VmathSoaVector4 vmathSoaM4GetCol2_V( VmathSoaMatrix4 mat ); + +/* + * Get column 3 of a 4x4 matrix + */ +static inline VmathSoaVector4 vmathSoaM4GetCol3_V( VmathSoaMatrix4 mat ); + +/* + * Set the column of a 4x4 matrix referred to by the specified index + */ +static inline void vmathSoaM4SetCol_V( VmathSoaMatrix4 *result, int col, VmathSoaVector4 vec ); + +/* + * Set the row of a 4x4 matrix referred to by the specified index + */ +static inline void vmathSoaM4SetRow_V( VmathSoaMatrix4 *result, int row, VmathSoaVector4 vec ); + +/* + * Get the column of a 4x4 matrix referred to by the specified index + */ +static inline VmathSoaVector4 vmathSoaM4GetCol_V( VmathSoaMatrix4 mat, int col ); + +/* + * Get the row of a 4x4 matrix referred to by the specified index + */ +static inline VmathSoaVector4 vmathSoaM4GetRow_V( VmathSoaMatrix4 mat, int row ); + +/* + * Set the element of a 4x4 matrix referred to by column and row indices + */ +static inline void vmathSoaM4SetElem_V( VmathSoaMatrix4 *result, int col, int row, vec_float4 val ); + +/* + * Get the element of a 4x4 matrix referred to by column and row indices + */ +static inline vec_float4 vmathSoaM4GetElem_V( VmathSoaMatrix4 mat, int col, int row ); + +/* + * Add two 4x4 matrices + */ +static inline VmathSoaMatrix4 vmathSoaM4Add_V( VmathSoaMatrix4 mat0, VmathSoaMatrix4 mat1 ); + +/* + * Subtract a 4x4 matrix from another 4x4 matrix + */ +static inline VmathSoaMatrix4 vmathSoaM4Sub_V( VmathSoaMatrix4 mat0, VmathSoaMatrix4 mat1 ); + +/* + * Negate all elements of a 4x4 matrix + */ +static inline VmathSoaMatrix4 vmathSoaM4Neg_V( VmathSoaMatrix4 mat ); + +/* + * Multiply a 4x4 matrix by a scalar + */ +static inline VmathSoaMatrix4 vmathSoaM4ScalarMul_V( VmathSoaMatrix4 mat, vec_float4 scalar ); + +/* + * Multiply a 4x4 matrix by a 4-D vector + */ +static inline VmathSoaVector4 vmathSoaM4MulV4_V( VmathSoaMatrix4 mat, VmathSoaVector4 vec ); + +/* + * Multiply a 4x4 matrix by a 3-D vector + */ +static inline VmathSoaVector4 vmathSoaM4MulV3_V( VmathSoaMatrix4 mat, VmathSoaVector3 vec ); + +/* + * Multiply a 4x4 matrix by a 3-D point + */ +static inline VmathSoaVector4 vmathSoaM4MulP3_V( VmathSoaMatrix4 mat, VmathSoaPoint3 pnt ); + +/* + * Multiply two 4x4 matrices + */ +static inline VmathSoaMatrix4 vmathSoaM4Mul_V( VmathSoaMatrix4 mat0, VmathSoaMatrix4 mat1 ); + +/* + * Multiply a 4x4 matrix by a 3x4 transformation matrix + */ +static inline VmathSoaMatrix4 vmathSoaM4MulT3_V( VmathSoaMatrix4 mat, VmathSoaTransform3 tfrm ); + +/* + * Construct an identity 4x4 matrix + */ +static inline VmathSoaMatrix4 vmathSoaM4MakeIdentity_V( ); + +/* + * Construct a 4x4 matrix to rotate around the x axis + */ +static inline VmathSoaMatrix4 vmathSoaM4MakeRotationX_V( vec_float4 radians ); + +/* + * Construct a 4x4 matrix to rotate around the y axis + */ +static inline VmathSoaMatrix4 vmathSoaM4MakeRotationY_V( vec_float4 radians ); + +/* + * Construct a 4x4 matrix to rotate around the z axis + */ +static inline VmathSoaMatrix4 vmathSoaM4MakeRotationZ_V( vec_float4 radians ); + +/* + * Construct a 4x4 matrix to rotate around the x, y, and z axes + */ +static inline VmathSoaMatrix4 vmathSoaM4MakeRotationZYX_V( VmathSoaVector3 radiansXYZ ); + +/* + * Construct a 4x4 matrix to rotate around a unit-length 3-D vector + */ +static inline VmathSoaMatrix4 vmathSoaM4MakeRotationAxis_V( vec_float4 radians, VmathSoaVector3 unitVec ); + +/* + * Construct a rotation matrix from a unit-length quaternion + */ +static inline VmathSoaMatrix4 vmathSoaM4MakeRotationQ_V( VmathSoaQuat unitQuat ); + +/* + * Construct a 4x4 matrix to perform scaling + */ +static inline VmathSoaMatrix4 vmathSoaM4MakeScale_V( VmathSoaVector3 scaleVec ); + +/* + * Construct a 4x4 matrix to perform translation + */ +static inline VmathSoaMatrix4 vmathSoaM4MakeTranslation_V( VmathSoaVector3 translateVec ); + +/* + * Construct viewing matrix based on eye position, position looked at, and up direction + */ +static inline VmathSoaMatrix4 vmathSoaM4MakeLookAt_V( VmathSoaPoint3 eyePos, VmathSoaPoint3 lookAtPos, VmathSoaVector3 upVec ); + +/* + * Construct a perspective projection matrix + */ +static inline VmathSoaMatrix4 vmathSoaM4MakePerspective_V( vec_float4 fovyRadians, vec_float4 aspect, vec_float4 zNear, vec_float4 zFar ); + +/* + * Construct a perspective projection matrix based on frustum + */ +static inline VmathSoaMatrix4 vmathSoaM4MakeFrustum_V( vec_float4 left, vec_float4 right, vec_float4 bottom, vec_float4 top, vec_float4 zNear, vec_float4 zFar ); + +/* + * Construct an orthographic projection matrix + */ +static inline VmathSoaMatrix4 vmathSoaM4MakeOrthographic_V( vec_float4 left, vec_float4 right, vec_float4 bottom, vec_float4 top, vec_float4 zNear, vec_float4 zFar ); + +/* + * Append (post-multiply) a scale transformation to a 4x4 matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline VmathSoaMatrix4 vmathSoaM4AppendScale_V( VmathSoaMatrix4 mat, VmathSoaVector3 scaleVec ); + +/* + * Prepend (pre-multiply) a scale transformation to a 4x4 matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline VmathSoaMatrix4 vmathSoaM4PrependScale_V( VmathSoaVector3 scaleVec, VmathSoaMatrix4 mat ); + +/* + * Multiply two 4x4 matrices per element + */ +static inline VmathSoaMatrix4 vmathSoaM4MulPerElem_V( VmathSoaMatrix4 mat0, VmathSoaMatrix4 mat1 ); + +/* + * Compute the absolute value of a 4x4 matrix per element + */ +static inline VmathSoaMatrix4 vmathSoaM4AbsPerElem_V( VmathSoaMatrix4 mat ); + +/* + * Transpose of a 4x4 matrix + */ +static inline VmathSoaMatrix4 vmathSoaM4Transpose_V( VmathSoaMatrix4 mat ); + +/* + * Compute the inverse of a 4x4 matrix + * NOTE: + * Result is unpredictable when the determinant of mat is equal to or near 0. + */ +static inline VmathSoaMatrix4 vmathSoaM4Inverse_V( VmathSoaMatrix4 mat ); + +/* + * Compute the inverse of a 4x4 matrix, which is expected to be an affine matrix + * NOTE: + * This can be used to achieve better performance than a general inverse when the specified 4x4 matrix meets the given restrictions. The result is unpredictable when the determinant of mat is equal to or near 0. + */ +static inline VmathSoaMatrix4 vmathSoaM4AffineInverse_V( VmathSoaMatrix4 mat ); + +/* + * Compute the inverse of a 4x4 matrix, which is expected to be an affine matrix with an orthogonal upper-left 3x3 submatrix + * NOTE: + * This can be used to achieve better performance than a general inverse when the specified 4x4 matrix meets the given restrictions. + */ +static inline VmathSoaMatrix4 vmathSoaM4OrthoInverse_V( VmathSoaMatrix4 mat ); + +/* + * Determinant of a 4x4 matrix + */ +static inline vec_float4 vmathSoaM4Determinant_V( VmathSoaMatrix4 mat ); + +/* + * Conditionally select between two 4x4 matrices + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + */ +static inline VmathSoaMatrix4 vmathSoaM4Select_V( VmathSoaMatrix4 mat0, VmathSoaMatrix4 mat1, vec_uint4 select1 ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 4x4 matrix + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaM4Print_V( VmathSoaMatrix4 mat ); + +/* + * Print a 4x4 matrix and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaM4Prints_V( VmathSoaMatrix4 mat, const char *name ); + +#endif + +/* + * Construct a 3x4 transformation matrix containing the specified columns + */ +static inline VmathSoaTransform3 vmathSoaT3MakeFromCols_V( VmathSoaVector3 col0, VmathSoaVector3 col1, VmathSoaVector3 col2, VmathSoaVector3 col3 ); + +/* + * Construct a 3x4 transformation matrix from a 3x3 matrix and a 3-D vector + */ +static inline VmathSoaTransform3 vmathSoaT3MakeFromM3V3_V( VmathSoaMatrix3 tfrm, VmathSoaVector3 translateVec ); + +/* + * Construct a 3x4 transformation matrix from a unit-length quaternion and a 3-D vector + */ +static inline VmathSoaTransform3 vmathSoaT3MakeFromQV3_V( VmathSoaQuat unitQuat, VmathSoaVector3 translateVec ); + +/* + * Set all elements of a 3x4 transformation matrix to the same scalar value + */ +static inline VmathSoaTransform3 vmathSoaT3MakeFromScalar_V( vec_float4 scalar ); + +/* + * Replicate an AoS 3x4 transformation matrix + */ +static inline VmathSoaTransform3 vmathSoaT3MakeFromAos_V( VmathTransform3 tfrm ); + +/* + * Insert four AoS 3x4 transformation matrices + */ +static inline VmathSoaTransform3 vmathSoaT3MakeFrom4Aos_V( VmathTransform3 tfrm0, VmathTransform3 tfrm1, VmathTransform3 tfrm2, VmathTransform3 tfrm3 ); + +/* + * Extract four AoS 3x4 transformation matrices + */ +static inline void vmathSoaT3Get4Aos_V( VmathSoaTransform3 tfrm, VmathTransform3 *result0, VmathTransform3 *result1, VmathTransform3 *result2, VmathTransform3 *result3 ); + +/* + * Set the upper-left 3x3 submatrix + */ +static inline void vmathSoaT3SetUpper3x3_V( VmathSoaTransform3 *result, VmathSoaMatrix3 mat3 ); + +/* + * Get the upper-left 3x3 submatrix of a 3x4 transformation matrix + */ +static inline VmathSoaMatrix3 vmathSoaT3GetUpper3x3_V( VmathSoaTransform3 tfrm ); + +/* + * Set translation component + */ +static inline void vmathSoaT3SetTranslation_V( VmathSoaTransform3 *result, VmathSoaVector3 translateVec ); + +/* + * Get the translation component of a 3x4 transformation matrix + */ +static inline VmathSoaVector3 vmathSoaT3GetTranslation_V( VmathSoaTransform3 tfrm ); + +/* + * Set column 0 of a 3x4 transformation matrix + */ +static inline void vmathSoaT3SetCol0_V( VmathSoaTransform3 *result, VmathSoaVector3 col0 ); + +/* + * Set column 1 of a 3x4 transformation matrix + */ +static inline void vmathSoaT3SetCol1_V( VmathSoaTransform3 *result, VmathSoaVector3 col1 ); + +/* + * Set column 2 of a 3x4 transformation matrix + */ +static inline void vmathSoaT3SetCol2_V( VmathSoaTransform3 *result, VmathSoaVector3 col2 ); + +/* + * Set column 3 of a 3x4 transformation matrix + */ +static inline void vmathSoaT3SetCol3_V( VmathSoaTransform3 *result, VmathSoaVector3 col3 ); + +/* + * Get column 0 of a 3x4 transformation matrix + */ +static inline VmathSoaVector3 vmathSoaT3GetCol0_V( VmathSoaTransform3 tfrm ); + +/* + * Get column 1 of a 3x4 transformation matrix + */ +static inline VmathSoaVector3 vmathSoaT3GetCol1_V( VmathSoaTransform3 tfrm ); + +/* + * Get column 2 of a 3x4 transformation matrix + */ +static inline VmathSoaVector3 vmathSoaT3GetCol2_V( VmathSoaTransform3 tfrm ); + +/* + * Get column 3 of a 3x4 transformation matrix + */ +static inline VmathSoaVector3 vmathSoaT3GetCol3_V( VmathSoaTransform3 tfrm ); + +/* + * Set the column of a 3x4 transformation matrix referred to by the specified index + */ +static inline void vmathSoaT3SetCol_V( VmathSoaTransform3 *result, int col, VmathSoaVector3 vec ); + +/* + * Set the row of a 3x4 transformation matrix referred to by the specified index + */ +static inline void vmathSoaT3SetRow_V( VmathSoaTransform3 *result, int row, VmathSoaVector4 vec ); + +/* + * Get the column of a 3x4 transformation matrix referred to by the specified index + */ +static inline VmathSoaVector3 vmathSoaT3GetCol_V( VmathSoaTransform3 tfrm, int col ); + +/* + * Get the row of a 3x4 transformation matrix referred to by the specified index + */ +static inline VmathSoaVector4 vmathSoaT3GetRow_V( VmathSoaTransform3 tfrm, int row ); + +/* + * Set the element of a 3x4 transformation matrix referred to by column and row indices + */ +static inline void vmathSoaT3SetElem_V( VmathSoaTransform3 *result, int col, int row, vec_float4 val ); + +/* + * Get the element of a 3x4 transformation matrix referred to by column and row indices + */ +static inline vec_float4 vmathSoaT3GetElem_V( VmathSoaTransform3 tfrm, int col, int row ); + +/* + * Multiply a 3x4 transformation matrix by a 3-D vector + */ +static inline VmathSoaVector3 vmathSoaT3MulV3_V( VmathSoaTransform3 tfrm, VmathSoaVector3 vec ); + +/* + * Multiply a 3x4 transformation matrix by a 3-D point + */ +static inline VmathSoaPoint3 vmathSoaT3MulP3_V( VmathSoaTransform3 tfrm, VmathSoaPoint3 pnt ); + +/* + * Multiply two 3x4 transformation matrices + */ +static inline VmathSoaTransform3 vmathSoaT3Mul_V( VmathSoaTransform3 tfrm0, VmathSoaTransform3 tfrm1 ); + +/* + * Construct an identity 3x4 transformation matrix + */ +static inline VmathSoaTransform3 vmathSoaT3MakeIdentity_V( ); + +/* + * Construct a 3x4 transformation matrix to rotate around the x axis + */ +static inline VmathSoaTransform3 vmathSoaT3MakeRotationX_V( vec_float4 radians ); + +/* + * Construct a 3x4 transformation matrix to rotate around the y axis + */ +static inline VmathSoaTransform3 vmathSoaT3MakeRotationY_V( vec_float4 radians ); + +/* + * Construct a 3x4 transformation matrix to rotate around the z axis + */ +static inline VmathSoaTransform3 vmathSoaT3MakeRotationZ_V( vec_float4 radians ); + +/* + * Construct a 3x4 transformation matrix to rotate around the x, y, and z axes + */ +static inline VmathSoaTransform3 vmathSoaT3MakeRotationZYX_V( VmathSoaVector3 radiansXYZ ); + +/* + * Construct a 3x4 transformation matrix to rotate around a unit-length 3-D vector + */ +static inline VmathSoaTransform3 vmathSoaT3MakeRotationAxis_V( vec_float4 radians, VmathSoaVector3 unitVec ); + +/* + * Construct a rotation matrix from a unit-length quaternion + */ +static inline VmathSoaTransform3 vmathSoaT3MakeRotationQ_V( VmathSoaQuat unitQuat ); + +/* + * Construct a 3x4 transformation matrix to perform scaling + */ +static inline VmathSoaTransform3 vmathSoaT3MakeScale_V( VmathSoaVector3 scaleVec ); + +/* + * Construct a 3x4 transformation matrix to perform translation + */ +static inline VmathSoaTransform3 vmathSoaT3MakeTranslation_V( VmathSoaVector3 translateVec ); + +/* + * Append (post-multiply) a scale transformation to a 3x4 transformation matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline VmathSoaTransform3 vmathSoaT3AppendScale_V( VmathSoaTransform3 tfrm, VmathSoaVector3 scaleVec ); + +/* + * Prepend (pre-multiply) a scale transformation to a 3x4 transformation matrix + * NOTE: + * Faster than creating and multiplying a scale transformation matrix. + */ +static inline VmathSoaTransform3 vmathSoaT3PrependScale_V( VmathSoaVector3 scaleVec, VmathSoaTransform3 tfrm ); + +/* + * Multiply two 3x4 transformation matrices per element + */ +static inline VmathSoaTransform3 vmathSoaT3MulPerElem_V( VmathSoaTransform3 tfrm0, VmathSoaTransform3 tfrm1 ); + +/* + * Compute the absolute value of a 3x4 transformation matrix per element + */ +static inline VmathSoaTransform3 vmathSoaT3AbsPerElem_V( VmathSoaTransform3 tfrm ); + +/* + * Inverse of a 3x4 transformation matrix + * NOTE: + * Result is unpredictable when the determinant of the left 3x3 submatrix is equal to or near 0. + */ +static inline VmathSoaTransform3 vmathSoaT3Inverse_V( VmathSoaTransform3 tfrm ); + +/* + * Compute the inverse of a 3x4 transformation matrix, expected to have an orthogonal upper-left 3x3 submatrix + * NOTE: + * This can be used to achieve better performance than a general inverse when the specified 3x4 transformation matrix meets the given restrictions. + */ +static inline VmathSoaTransform3 vmathSoaT3OrthoInverse_V( VmathSoaTransform3 tfrm ); + +/* + * Conditionally select between two 3x4 transformation matrices + * NOTE: + * This function uses a conditional select instruction to avoid a branch. + */ +static inline VmathSoaTransform3 vmathSoaT3Select_V( VmathSoaTransform3 tfrm0, VmathSoaTransform3 tfrm1, vec_uint4 select1 ); + +#ifdef _VECTORMATH_DEBUG + +/* + * Print a 3x4 transformation matrix + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaT3Print_V( VmathSoaTransform3 tfrm ); + +/* + * Print a 3x4 transformation matrix and an associated string identifier + * NOTE: + * Function is only defined when _VECTORMATH_DEBUG is defined. + */ +static inline void vmathSoaT3Prints_V( VmathSoaTransform3 tfrm, const char *name ); + +#endif + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#include "vectormath_soa.h" +#include "vec_soa_v.h" +#include "quat_soa_v.h" +#include "mat_soa_v.h" + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/spu/cpp/boolInVec.h b/Extras/vectormathlibrary/include/vectormath/spu/cpp/boolInVec.h new file mode 100644 index 000000000..93a3ad29d --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/spu/cpp/boolInVec.h @@ -0,0 +1,246 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _BOOLINVEC_H +#define _BOOLINVEC_H + +#include + +namespace Vectormath { + +class floatInVec; + +//-------------------------------------------------------------------------------------------------- +// boolInVec class +// + +class boolInVec +{ + private: + vec_uint4 mData; + + inline boolInVec(vec_uint4 vec); + public: + inline boolInVec() {} + + // matches standard type conversions + // + inline boolInVec(floatInVec vec); + + // explicit cast from bool + // + explicit inline boolInVec(bool scalar); + +#ifdef _VECTORMATH_NO_SCALAR_CAST + // explicit cast to bool + // + inline bool getAsBool() const; +#else + // implicit cast to bool + // + inline operator bool() const; +#endif + + // get vector data + // bool value is in the 0 word slot of vector as 0 (false) or -1 (true) + // + inline vec_uint4 get128() const; + + // operators + // + inline const boolInVec operator ! () const; + inline boolInVec& operator = (boolInVec vec); + inline boolInVec& operator &= (boolInVec vec); + inline boolInVec& operator ^= (boolInVec vec); + inline boolInVec& operator |= (boolInVec vec); + + // friend functions + // + friend inline const boolInVec operator == (boolInVec vec0, boolInVec vec1); + friend inline const boolInVec operator != (boolInVec vec0, boolInVec vec1); + friend inline const boolInVec operator < (floatInVec vec0, floatInVec vec1); + friend inline const boolInVec operator <= (floatInVec vec0, floatInVec vec1); + friend inline const boolInVec operator > (floatInVec vec0, floatInVec vec1); + friend inline const boolInVec operator >= (floatInVec vec0, floatInVec vec1); + friend inline const boolInVec operator == (floatInVec vec0, floatInVec vec1); + friend inline const boolInVec operator != (floatInVec vec0, floatInVec vec1); + friend inline const boolInVec operator & (boolInVec vec0, boolInVec vec1); + friend inline const boolInVec operator ^ (boolInVec vec0, boolInVec vec1); + friend inline const boolInVec operator | (boolInVec vec0, boolInVec vec1); + friend inline const boolInVec select(boolInVec vec0, boolInVec vec1, boolInVec select_vec1); +}; + +//-------------------------------------------------------------------------------------------------- +// boolInVec functions +// + +// operators +// +inline const boolInVec operator == (boolInVec vec0, boolInVec vec1); +inline const boolInVec operator != (boolInVec vec0, boolInVec vec1); +inline const boolInVec operator & (boolInVec vec0, boolInVec vec1); +inline const boolInVec operator ^ (boolInVec vec0, boolInVec vec1); +inline const boolInVec operator | (boolInVec vec0, boolInVec vec1); + +// select between vec0 and vec1 using boolInVec. +// false selects vec0, true selects vec1 +// +inline const boolInVec select(boolInVec vec0, boolInVec vec1, boolInVec select_vec1); + +} // namespace Vectormath + +//-------------------------------------------------------------------------------------------------- +// boolInVec implementation +// + +#include "floatInVec.h" + +namespace Vectormath { + +inline +boolInVec::boolInVec(vec_uint4 vec) +{ + mData = vec; +} + +inline +boolInVec::boolInVec(floatInVec vec) +{ + *this = (vec != floatInVec(0.0f)); +} + +inline +boolInVec::boolInVec(bool scalar) +{ + mData = spu_promote((unsigned int)-scalar, 0); +} + +#ifdef _VECTORMATH_NO_SCALAR_CAST +inline +bool +boolInVec::getAsBool() const +#else +inline +boolInVec::operator bool() const +#endif +{ + return (bool)spu_extract(mData, 0); +} + +inline +vec_uint4 +boolInVec::get128() const +{ + return mData; +} + +inline +const boolInVec +boolInVec::operator ! () const +{ + return boolInVec(spu_nor(mData, mData)); +} + +inline +boolInVec& +boolInVec::operator = (boolInVec vec) +{ + mData = vec.mData; + return *this; +} + +inline +boolInVec& +boolInVec::operator &= (boolInVec vec) +{ + *this = *this & vec; + return *this; +} + +inline +boolInVec& +boolInVec::operator ^= (boolInVec vec) +{ + *this = *this ^ vec; + return *this; +} + +inline +boolInVec& +boolInVec::operator |= (boolInVec vec) +{ + *this = *this | vec; + return *this; +} + +inline +const boolInVec +operator == (boolInVec vec0, boolInVec vec1) +{ + return boolInVec(spu_cmpeq(vec0.get128(), vec1.get128())); +} + +inline +const boolInVec +operator != (boolInVec vec0, boolInVec vec1) +{ + return !(vec0 == vec1); +} + +inline +const boolInVec +operator & (boolInVec vec0, boolInVec vec1) +{ + return boolInVec(spu_and(vec0.get128(), vec1.get128())); +} + +inline +const boolInVec +operator | (boolInVec vec0, boolInVec vec1) +{ + return boolInVec(spu_or(vec0.get128(), vec1.get128())); +} + +inline +const boolInVec +operator ^ (boolInVec vec0, boolInVec vec1) +{ + return boolInVec(spu_xor(vec0.get128(), vec1.get128())); +} + +inline +const boolInVec +select(boolInVec vec0, boolInVec vec1, boolInVec select_vec1) +{ + return boolInVec(spu_sel(vec0.get128(), vec1.get128(), select_vec1.get128())); +} + +} // namespace Vectormath + +#endif // boolInVec_h diff --git a/Extras/vectormathlibrary/include/vectormath/spu/cpp/floatInVec.h b/Extras/vectormathlibrary/include/vectormath/spu/cpp/floatInVec.h new file mode 100644 index 000000000..06d7892ef --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/spu/cpp/floatInVec.h @@ -0,0 +1,340 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _FLOATINVEC_H +#define _FLOATINVEC_H + +#include +#include +#include "spu2vmx.h" +#include "simdmath.h" +#undef bool + +namespace Vectormath { + +class boolInVec; + +//-------------------------------------------------------------------------------------------------- +// floatInVec class +// + +class floatInVec +{ + private: + vec_float4 mData; + + inline floatInVec(vec_float4 vec); + public: + inline floatInVec() {} + + // matches standard type conversions + // + inline floatInVec(boolInVec vec); + + // construct from a slot of vec_float4 + // + inline floatInVec(vec_float4 vec, int slot); + + // explicit cast from float + // + explicit inline floatInVec(float scalar); + +#ifdef _VECTORMATH_NO_SCALAR_CAST + // explicit cast to float + // + inline float getAsFloat() const; +#else + // implicit cast to float + // + inline operator float() const; +#endif + + // get vector data + // float value is in 0 word slot of vector + // + inline vec_float4 get128() const; + + // operators + // + inline const floatInVec operator ++ (int); + inline const floatInVec operator -- (int); + inline floatInVec& operator ++ (); + inline floatInVec& operator -- (); + inline const floatInVec operator - () const; + inline floatInVec& operator = (floatInVec vec); + inline floatInVec& operator *= (floatInVec vec); + inline floatInVec& operator /= (floatInVec vec); + inline floatInVec& operator += (floatInVec vec); + inline floatInVec& operator -= (floatInVec vec); + + // friend functions + // + friend inline const floatInVec operator * (floatInVec vec0, floatInVec vec1); + friend inline const floatInVec operator / (floatInVec vec0, floatInVec vec1); + friend inline const floatInVec operator + (floatInVec vec0, floatInVec vec1); + friend inline const floatInVec operator - (floatInVec vec0, floatInVec vec1); + friend inline const floatInVec select(floatInVec vec0, floatInVec vec1, boolInVec select_vec1); +}; + +//-------------------------------------------------------------------------------------------------- +// floatInVec functions +// + +// operators +// +inline const floatInVec operator * (floatInVec vec0, floatInVec vec1); +inline const floatInVec operator / (floatInVec vec0, floatInVec vec1); +inline const floatInVec operator + (floatInVec vec0, floatInVec vec1); +inline const floatInVec operator - (floatInVec vec0, floatInVec vec1); +inline const boolInVec operator < (floatInVec vec0, floatInVec vec1); +inline const boolInVec operator <= (floatInVec vec0, floatInVec vec1); +inline const boolInVec operator > (floatInVec vec0, floatInVec vec1); +inline const boolInVec operator >= (floatInVec vec0, floatInVec vec1); +inline const boolInVec operator == (floatInVec vec0, floatInVec vec1); +inline const boolInVec operator != (floatInVec vec0, floatInVec vec1); + +// select between vec0 and vec1 using boolInVec. +// false selects vec0, true selects vec1 +// +inline const floatInVec select(floatInVec vec0, floatInVec vec1, boolInVec select_vec1); + +} // namespace Vectormath + +//-------------------------------------------------------------------------------------------------- +// floatInVec implementation +// + +#include "boolInVec.h" + +namespace Vectormath { + +inline +floatInVec::floatInVec(vec_float4 vec) +{ + mData = vec; +} + +inline +floatInVec::floatInVec(boolInVec vec) +{ + mData = spu_sel(spu_splats(0.0f), spu_splats(1.0f), vec.get128()); +} + +inline +floatInVec::floatInVec(vec_float4 vec, int slot) +{ + mData = spu_promote(spu_extract(vec, slot), 0); +} + +inline +floatInVec::floatInVec(float scalar) +{ + mData = spu_promote(scalar, 0); +} + +#ifdef _VECTORMATH_NO_SCALAR_CAST +inline +float +floatInVec::getAsFloat() const +#else +inline +floatInVec::operator float() const +#endif +{ + return spu_extract(mData,0); +} + +inline +vec_float4 +floatInVec::get128() const +{ + return mData; +} + +inline +const floatInVec +floatInVec::operator ++ (int) +{ + vec_float4 olddata = mData; + operator ++(); + return floatInVec(olddata); +} + +inline +const floatInVec +floatInVec::operator -- (int) +{ + vec_float4 olddata = mData; + operator --(); + return floatInVec(olddata); +} + +inline +floatInVec& +floatInVec::operator ++ () +{ + *this += floatInVec(1.0f); + return *this; +} + +inline +floatInVec& +floatInVec::operator -- () +{ + *this -= floatInVec(1.0f); + return *this; +} + +inline +const floatInVec +floatInVec::operator - () const +{ + return floatInVec((vec_float4)spu_xor((vec_uint4)mData, spu_splats(0x80000000))); +} + +inline +floatInVec& +floatInVec::operator = (floatInVec vec) +{ + mData = vec.mData; + return *this; +} + +inline +floatInVec& +floatInVec::operator *= (floatInVec vec) +{ + *this = *this * vec; + return *this; +} + +inline +floatInVec& +floatInVec::operator /= (floatInVec vec) +{ + *this = *this / vec; + return *this; +} + +inline +floatInVec& +floatInVec::operator += (floatInVec vec) +{ + *this = *this + vec; + return *this; +} + +inline +floatInVec& +floatInVec::operator -= (floatInVec vec) +{ + *this = *this - vec; + return *this; +} + +inline +const floatInVec +operator * (floatInVec vec0, floatInVec vec1) +{ + return floatInVec(spu_mul(vec0.get128(), vec1.get128())); +} + +inline +const floatInVec +operator / (floatInVec num, floatInVec den) +{ + return floatInVec(divf4(num.get128(), den.get128())); +} + +inline +const floatInVec +operator + (floatInVec vec0, floatInVec vec1) +{ + return floatInVec(spu_add(vec0.get128(), vec1.get128())); +} + +inline +const floatInVec +operator - (floatInVec vec0, floatInVec vec1) +{ + return floatInVec(spu_sub(vec0.get128(), vec1.get128())); +} + +inline +const boolInVec +operator < (floatInVec vec0, floatInVec vec1) +{ + return boolInVec(spu_cmpgt(vec1.get128(), vec0.get128())); +} + +inline +const boolInVec +operator <= (floatInVec vec0, floatInVec vec1) +{ + return !(vec0 > vec1); +} + +inline +const boolInVec +operator > (floatInVec vec0, floatInVec vec1) +{ + return boolInVec(spu_cmpgt(vec0.get128(), vec1.get128())); +} + +inline +const boolInVec +operator >= (floatInVec vec0, floatInVec vec1) +{ + return !(vec0 < vec1); +} + +inline +const boolInVec +operator == (floatInVec vec0, floatInVec vec1) +{ + return boolInVec(spu_cmpeq(vec0.get128(), vec1.get128())); +} + +inline +const boolInVec +operator != (floatInVec vec0, floatInVec vec1) +{ + return !(vec0 == vec1); +} + +inline +const floatInVec +select(floatInVec vec0, floatInVec vec1, boolInVec select_vec1) +{ + return floatInVec(spu_sel(vec0.get128(), vec1.get128(), select_vec1.get128())); +} + +} // namespace Vectormath + +#endif // floatInVec_h diff --git a/Extras/vectormathlibrary/include/vectormath/spu/cpp/mat_aos.h b/Extras/vectormathlibrary/include/vectormath/spu/cpp/mat_aos.h new file mode 100644 index 000000000..a2fd611ec --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/spu/cpp/mat_aos.h @@ -0,0 +1,2027 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_MAT_AOS_CPP_H +#define _VECTORMATH_MAT_AOS_CPP_H + +namespace Vectormath { +namespace Aos { + +//----------------------------------------------------------------------------- +// Constants +// for shuffles, words are labeled [x,y,z,w] [a,b,c,d] + +#define _VECTORMATH_SHUF_XAYB ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_A, _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_B }) +#define _VECTORMATH_SHUF_ZCWD ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_C, _VECTORMATH_SHUF_W, _VECTORMATH_SHUF_D }) +#define _VECTORMATH_SHUF_ZBW0 ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_B, _VECTORMATH_SHUF_W, _VECTORMATH_SHUF_0 }) +#define _VECTORMATH_SHUF_XCY0 ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_C, _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_0 }) +#define _VECTORMATH_SHUF_XYAB ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_A, _VECTORMATH_SHUF_B }) +#define _VECTORMATH_SHUF_ZWCD ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_W, _VECTORMATH_SHUF_C, _VECTORMATH_SHUF_D }) +#define _VECTORMATH_SHUF_0ZB0 ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_0, _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_B, _VECTORMATH_SHUF_0 }) +#define _VECTORMATH_SHUF_C0X0 ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_C, _VECTORMATH_SHUF_0, _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_0 }) +#define _VECTORMATH_SHUF_YA00 ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_A, _VECTORMATH_SHUF_0, _VECTORMATH_SHUF_0 }) +#define _VECTORMATH_SHUF_XAZC ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_A, _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_C }) +#define _VECTORMATH_SHUF_YXWZ ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_W, _VECTORMATH_SHUF_Z }) +#define _VECTORMATH_SHUF_YBWD ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_B, _VECTORMATH_SHUF_W, _VECTORMATH_SHUF_D }) +#define _VECTORMATH_SHUF_XYCX ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_C, _VECTORMATH_SHUF_X }) +#define _VECTORMATH_SHUF_YCXY ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_C, _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_Y }) +#define _VECTORMATH_SHUF_CXYC ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_C, _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_C }) +#define _VECTORMATH_SHUF_ZAY0 ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_A, _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_0 }) +#define _VECTORMATH_SHUF_BZX0 ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_B, _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_0 }) +#define _VECTORMATH_SHUF_0ZYA ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_0, _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_A }) +#define _VECTORMATH_SHUF_Z0XB ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_0, _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_B }) +#define _VECTORMATH_SHUF_YX0C ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_0, _VECTORMATH_SHUF_C }) +#define _VECTORMATH_SHUF_CZD0 ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_C, _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_D, _VECTORMATH_SHUF_0 }) +#define _VECTORMATH_SHUF_BBY0 ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_B, _VECTORMATH_SHUF_B, _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_0 }) +#define _VECTORMATH_PI_OVER_2 1.570796327f + +//----------------------------------------------------------------------------- +// Definitions + +inline Matrix3::Matrix3( const Matrix3 & mat ) +{ + mCol0 = mat.mCol0; + mCol1 = mat.mCol1; + mCol2 = mat.mCol2; +} + +inline Matrix3::Matrix3( float scalar ) +{ + mCol0 = Vector3( scalar ); + mCol1 = Vector3( scalar ); + mCol2 = Vector3( scalar ); +} + +inline Matrix3::Matrix3( Quat unitQuat ) +{ + vec_float4 xyzw_2, wwww, yzxw, zxyw, yzxw_2, zxyw_2; + vec_float4 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5; + vec_uchar16 shuffle_wwww = (vec_uchar16)spu_splats((int)0x0c0d0e0f); + vec_uint4 select_x = (vec_uint4)spu_maskb(0xf000); + vec_uint4 select_z = (vec_uint4)spu_maskb(0x00f0); + xyzw_2 = spu_add( unitQuat.get128(), unitQuat.get128() ); + wwww = spu_shuffle( unitQuat.get128(), unitQuat.get128(), shuffle_wwww ); + yzxw = spu_shuffle( unitQuat.get128(), unitQuat.get128(), _VECTORMATH_SHUF_YZXW ); + zxyw = spu_shuffle( unitQuat.get128(), unitQuat.get128(), _VECTORMATH_SHUF_ZXYW ); + yzxw_2 = spu_shuffle( xyzw_2, xyzw_2, _VECTORMATH_SHUF_YZXW ); + zxyw_2 = spu_shuffle( xyzw_2, xyzw_2, _VECTORMATH_SHUF_ZXYW ); + tmp0 = spu_mul( yzxw_2, wwww ); + tmp1 = spu_nmsub( yzxw, yzxw_2, spu_splats(1.0f) ); + tmp2 = spu_mul( yzxw, xyzw_2 ); + tmp0 = spu_madd( zxyw, xyzw_2, tmp0 ); + tmp1 = spu_nmsub( zxyw, zxyw_2, tmp1 ); + tmp2 = spu_nmsub( zxyw_2, wwww, tmp2 ); + tmp3 = spu_sel( tmp0, tmp1, select_x ); + tmp4 = spu_sel( tmp1, tmp2, select_x ); + tmp5 = spu_sel( tmp2, tmp0, select_x ); + mCol0 = Vector3( spu_sel( tmp3, tmp2, select_z ) ); + mCol1 = Vector3( spu_sel( tmp4, tmp0, select_z ) ); + mCol2 = Vector3( spu_sel( tmp5, tmp1, select_z ) ); +} + +inline Matrix3::Matrix3( Vector3 _col0, Vector3 _col1, Vector3 _col2 ) +{ + mCol0 = _col0; + mCol1 = _col1; + mCol2 = _col2; +} + +inline Matrix3 & Matrix3::setCol0( Vector3 _col0 ) +{ + mCol0 = _col0; + return *this; +} + +inline Matrix3 & Matrix3::setCol1( Vector3 _col1 ) +{ + mCol1 = _col1; + return *this; +} + +inline Matrix3 & Matrix3::setCol2( Vector3 _col2 ) +{ + mCol2 = _col2; + return *this; +} + +inline Matrix3 & Matrix3::setCol( int col, Vector3 vec ) +{ + *(&mCol0 + col) = vec; + return *this; +} + +inline Matrix3 & Matrix3::setRow( int row, Vector3 vec ) +{ + mCol0.setElem( row, vec.getElem( 0 ) ); + mCol1.setElem( row, vec.getElem( 1 ) ); + mCol2.setElem( row, vec.getElem( 2 ) ); + return *this; +} + +inline Matrix3 & Matrix3::setElem( int col, int row, float val ) +{ + (*this)[col].setElem(row, val); + return *this; +} + +inline float Matrix3::getElem( int col, int row ) const +{ + return this->getCol( col ).getElem( row ); +} + +inline const Vector3 Matrix3::getCol0( ) const +{ + return mCol0; +} + +inline const Vector3 Matrix3::getCol1( ) const +{ + return mCol1; +} + +inline const Vector3 Matrix3::getCol2( ) const +{ + return mCol2; +} + +inline const Vector3 Matrix3::getCol( int col ) const +{ + return *(&mCol0 + col); +} + +inline const Vector3 Matrix3::getRow( int row ) const +{ + return Vector3( mCol0.getElem( row ), mCol1.getElem( row ), mCol2.getElem( row ) ); +} + +inline Vector3 & Matrix3::operator []( int col ) +{ + return *(&mCol0 + col); +} + +inline const Vector3 Matrix3::operator []( int col ) const +{ + return *(&mCol0 + col); +} + +inline Matrix3 & Matrix3::operator =( const Matrix3 & mat ) +{ + mCol0 = mat.mCol0; + mCol1 = mat.mCol1; + mCol2 = mat.mCol2; + return *this; +} + +inline const Matrix3 transpose( const Matrix3 & mat ) +{ + vec_float4 tmp0, tmp1, res0, res1, res2; + tmp0 = spu_shuffle( mat.getCol0().get128(), mat.getCol2().get128(), _VECTORMATH_SHUF_XAYB ); + tmp1 = spu_shuffle( mat.getCol0().get128(), mat.getCol2().get128(), _VECTORMATH_SHUF_ZCWD ); + res0 = spu_shuffle( tmp0, mat.getCol1().get128(), _VECTORMATH_SHUF_XAYB ); + res1 = spu_shuffle( tmp0, mat.getCol1().get128(), _VECTORMATH_SHUF_ZBW0 ); + res2 = spu_shuffle( tmp1, mat.getCol1().get128(), _VECTORMATH_SHUF_XCY0 ); + return Matrix3( + Vector3( res0 ), + Vector3( res1 ), + Vector3( res2 ) + ); +} + +inline const Matrix3 inverse( const Matrix3 & mat ) +{ + vec_float4 tmp0, tmp1, tmp2, tmp3, tmp4, dot, invdet, inv0, inv1, inv2; + tmp2 = _vmathVfCross( mat.getCol0().get128(), mat.getCol1().get128() ); + tmp0 = _vmathVfCross( mat.getCol1().get128(), mat.getCol2().get128() ); + tmp1 = _vmathVfCross( mat.getCol2().get128(), mat.getCol0().get128() ); + dot = _vmathVfDot3( tmp2, mat.getCol2().get128() ); + dot = spu_shuffle( dot, dot, (vec_uchar16)spu_splats(0x00010203) ); + invdet = recipf4( dot ); + tmp3 = spu_shuffle( tmp0, tmp2, _VECTORMATH_SHUF_XAYB ); + tmp4 = spu_shuffle( tmp0, tmp2, _VECTORMATH_SHUF_ZCWD ); + inv0 = spu_shuffle( tmp3, tmp1, _VECTORMATH_SHUF_XAYB ); + inv1 = spu_shuffle( tmp3, tmp1, _VECTORMATH_SHUF_ZBW0 ); + inv2 = spu_shuffle( tmp4, tmp1, _VECTORMATH_SHUF_XCY0 ); + inv0 = spu_mul( inv0, invdet ); + inv1 = spu_mul( inv1, invdet ); + inv2 = spu_mul( inv2, invdet ); + return Matrix3( + Vector3( inv0 ), + Vector3( inv1 ), + Vector3( inv2 ) + ); +} + +inline float determinant( const Matrix3 & mat ) +{ + return dot( mat.getCol2(), cross( mat.getCol0(), mat.getCol1() ) ); +} + +inline const Matrix3 Matrix3::operator +( const Matrix3 & mat ) const +{ + return Matrix3( + ( mCol0 + mat.mCol0 ), + ( mCol1 + mat.mCol1 ), + ( mCol2 + mat.mCol2 ) + ); +} + +inline const Matrix3 Matrix3::operator -( const Matrix3 & mat ) const +{ + return Matrix3( + ( mCol0 - mat.mCol0 ), + ( mCol1 - mat.mCol1 ), + ( mCol2 - mat.mCol2 ) + ); +} + +inline Matrix3 & Matrix3::operator +=( const Matrix3 & mat ) +{ + *this = *this + mat; + return *this; +} + +inline Matrix3 & Matrix3::operator -=( const Matrix3 & mat ) +{ + *this = *this - mat; + return *this; +} + +inline const Matrix3 Matrix3::operator -( ) const +{ + return Matrix3( + ( -mCol0 ), + ( -mCol1 ), + ( -mCol2 ) + ); +} + +inline const Matrix3 absPerElem( const Matrix3 & mat ) +{ + return Matrix3( + absPerElem( mat.getCol0() ), + absPerElem( mat.getCol1() ), + absPerElem( mat.getCol2() ) + ); +} + +inline const Matrix3 Matrix3::operator *( float scalar ) const +{ + return Matrix3( + ( mCol0 * scalar ), + ( mCol1 * scalar ), + ( mCol2 * scalar ) + ); +} + +inline Matrix3 & Matrix3::operator *=( float scalar ) +{ + *this = *this * scalar; + return *this; +} + +inline const Matrix3 operator *( float scalar, const Matrix3 & mat ) +{ + return mat * scalar; +} + +inline const Vector3 Matrix3::operator *( Vector3 vec ) const +{ + vec_float4 res; + vec_float4 xxxx, yyyy, zzzz; + vec_uchar16 shuffle_xxxx = (vec_uchar16)spu_splats((int)0x00010203); + vec_uchar16 shuffle_yyyy = (vec_uchar16)spu_splats((int)0x04050607); + vec_uchar16 shuffle_zzzz = (vec_uchar16)spu_splats((int)0x08090a0b); + xxxx = spu_shuffle( vec.get128(), vec.get128(), shuffle_xxxx ); + yyyy = spu_shuffle( vec.get128(), vec.get128(), shuffle_yyyy ); + zzzz = spu_shuffle( vec.get128(), vec.get128(), shuffle_zzzz ); + res = spu_mul( mCol0.get128(), xxxx ); + res = spu_madd( mCol1.get128(), yyyy, res ); + res = spu_madd( mCol2.get128(), zzzz, res ); + return Vector3( res ); +} + +inline const Matrix3 Matrix3::operator *( const Matrix3 & mat ) const +{ + return Matrix3( + ( *this * mat.mCol0 ), + ( *this * mat.mCol1 ), + ( *this * mat.mCol2 ) + ); +} + +inline Matrix3 & Matrix3::operator *=( const Matrix3 & mat ) +{ + *this = *this * mat; + return *this; +} + +inline const Matrix3 mulPerElem( const Matrix3 & mat0, const Matrix3 & mat1 ) +{ + return Matrix3( + mulPerElem( mat0.getCol0(), mat1.getCol0() ), + mulPerElem( mat0.getCol1(), mat1.getCol1() ), + mulPerElem( mat0.getCol2(), mat1.getCol2() ) + ); +} + +inline const Matrix3 Matrix3::identity( ) +{ + return Matrix3( + Vector3::xAxis( ), + Vector3::yAxis( ), + Vector3::zAxis( ) + ); +} + +inline const Matrix3 Matrix3::rotationX( float radians ) +{ + vec_float4 s, c, res1, res2; + vec_uint4 select_y, select_z; + vec_float4 zero; + select_y = (vec_uint4)spu_maskb(0x0f00); + select_z = (vec_uint4)spu_maskb(0x00f0); + zero = spu_splats(0.0f); + sincosf4( spu_splats(radians), &s, &c ); + res1 = spu_sel( zero, c, select_y ); + res1 = spu_sel( res1, s, select_z ); + res2 = spu_sel( zero, negatef4(s), select_y ); + res2 = spu_sel( res2, c, select_z ); + return Matrix3( + Vector3::xAxis( ), + Vector3( res1 ), + Vector3( res2 ) + ); +} + +inline const Matrix3 Matrix3::rotationY( float radians ) +{ + vec_float4 s, c, res0, res2; + vec_uint4 select_x, select_z; + vec_float4 zero; + select_x = (vec_uint4)spu_maskb(0xf000); + select_z = (vec_uint4)spu_maskb(0x00f0); + zero = spu_splats(0.0f); + sincosf4( spu_splats(radians), &s, &c ); + res0 = spu_sel( zero, c, select_x ); + res0 = spu_sel( res0, negatef4(s), select_z ); + res2 = spu_sel( zero, s, select_x ); + res2 = spu_sel( res2, c, select_z ); + return Matrix3( + Vector3( res0 ), + Vector3::yAxis( ), + Vector3( res2 ) + ); +} + +inline const Matrix3 Matrix3::rotationZ( float radians ) +{ + vec_float4 s, c, res0, res1; + vec_uint4 select_x, select_y; + vec_float4 zero; + select_x = (vec_uint4)spu_maskb(0xf000); + select_y = (vec_uint4)spu_maskb(0x0f00); + zero = spu_splats(0.0f); + sincosf4( spu_splats(radians), &s, &c ); + res0 = spu_sel( zero, c, select_x ); + res0 = spu_sel( res0, s, select_y ); + res1 = spu_sel( zero, negatef4(s), select_x ); + res1 = spu_sel( res1, c, select_y ); + return Matrix3( + Vector3( res0 ), + Vector3( res1 ), + Vector3::zAxis( ) + ); +} + +inline const Matrix3 Matrix3::rotationZYX( Vector3 radiansXYZ ) +{ + vec_float4 angles, s, negS, c, X0, X1, Y0, Y1, Z0, Z1, tmp; + vec_uchar16 shuffle_xxxx = (vec_uchar16)spu_splats((int)0x00010203); + angles = radiansXYZ.get128(); + angles = spu_insert( 0.0f, angles, 3 ); + sincosf4( angles, &s, &c ); + negS = negatef4( s ); + Z0 = spu_shuffle( s, c, _VECTORMATH_SHUF_CZD0 ); + Z1 = spu_shuffle( c, negS, _VECTORMATH_SHUF_CZD0 ); + Y0 = spu_shuffle( negS, c, _VECTORMATH_SHUF_BBY0 ); + Y1 = spu_shuffle( c, s, _VECTORMATH_SHUF_BBY0 ); + X0 = spu_shuffle( s, s, shuffle_xxxx ); + X1 = spu_shuffle( c, c, shuffle_xxxx ); + tmp = spu_mul( Z0, Y1 ); + return Matrix3( + Vector3( spu_mul( Z0, Y0 ) ), + Vector3( spu_madd( Z1, X1, spu_mul( tmp, X0 ) ) ), + Vector3( spu_nmsub( Z1, X0, spu_mul( tmp, X1 ) ) ) + ); +} + +inline const Matrix3 Matrix3::rotation( float radians, Vector3 unitVec ) +{ + vec_float4 axis, s, c, oneMinusC, axisS, negAxisS, xxxx, yyyy, zzzz, tmp0, tmp1, tmp2; + vec_uchar16 shuffle_xxxx = (vec_uchar16)spu_splats((int)0x00010203); + vec_uchar16 shuffle_yyyy = (vec_uchar16)spu_splats((int)0x04050607); + vec_uchar16 shuffle_zzzz = (vec_uchar16)spu_splats((int)0x08090a0b); + axis = unitVec.get128(); + sincosf4( spu_splats( radians ), &s, &c ); + xxxx = spu_shuffle( axis, axis, shuffle_xxxx ); + yyyy = spu_shuffle( axis, axis, shuffle_yyyy ); + zzzz = spu_shuffle( axis, axis, shuffle_zzzz ); + oneMinusC = spu_sub( spu_splats(1.0f), c ); + axisS = spu_mul( axis, s ); + negAxisS = negatef4( axisS ); + tmp0 = spu_shuffle( axisS, negAxisS, _VECTORMATH_SHUF_0ZB0 ); + tmp1 = spu_shuffle( axisS, negAxisS, _VECTORMATH_SHUF_C0X0 ); + tmp2 = spu_shuffle( axisS, negAxisS, _VECTORMATH_SHUF_YA00 ); + tmp0 = spu_sel( tmp0, c, (vec_uint4)spu_maskb(0xf000) ); + tmp1 = spu_sel( tmp1, c, (vec_uint4)spu_maskb(0x0f00) ); + tmp2 = spu_sel( tmp2, c, (vec_uint4)spu_maskb(0x00f0) ); + return Matrix3( + Vector3( spu_madd( spu_mul( axis, xxxx ), oneMinusC, tmp0 ) ), + Vector3( spu_madd( spu_mul( axis, yyyy ), oneMinusC, tmp1 ) ), + Vector3( spu_madd( spu_mul( axis, zzzz ), oneMinusC, tmp2 ) ) + ); +} + +inline const Matrix3 Matrix3::rotation( Quat unitQuat ) +{ + return Matrix3( unitQuat ); +} + +inline const Matrix3 Matrix3::scale( Vector3 scaleVec ) +{ + vec_float4 zero = spu_splats(0.0f); + return Matrix3( + Vector3( spu_sel( zero, scaleVec.get128(), (vec_uint4)spu_maskb(0xf000) ) ), + Vector3( spu_sel( zero, scaleVec.get128(), (vec_uint4)spu_maskb(0x0f00) ) ), + Vector3( spu_sel( zero, scaleVec.get128(), (vec_uint4)spu_maskb(0x00f0) ) ) + ); +} + +inline const Matrix3 appendScale( const Matrix3 & mat, Vector3 scaleVec ) +{ + return Matrix3( + ( mat.getCol0() * scaleVec.getX( ) ), + ( mat.getCol1() * scaleVec.getY( ) ), + ( mat.getCol2() * scaleVec.getZ( ) ) + ); +} + +inline const Matrix3 prependScale( Vector3 scaleVec, const Matrix3 & mat ) +{ + return Matrix3( + mulPerElem( mat.getCol0(), scaleVec ), + mulPerElem( mat.getCol1(), scaleVec ), + mulPerElem( mat.getCol2(), scaleVec ) + ); +} + +inline const Matrix3 select( const Matrix3 & mat0, const Matrix3 & mat1, bool select1 ) +{ + return Matrix3( + select( mat0.getCol0(), mat1.getCol0(), select1 ), + select( mat0.getCol1(), mat1.getCol1(), select1 ), + select( mat0.getCol2(), mat1.getCol2(), select1 ) + ); +} + +#ifdef _VECTORMATH_DEBUG + +inline void print( const Matrix3 & mat ) +{ + print( mat.getRow( 0 ) ); + print( mat.getRow( 1 ) ); + print( mat.getRow( 2 ) ); +} + +inline void print( const Matrix3 & mat, const char * name ) +{ + printf("%s:\n", name); + print( mat ); +} + +#endif + +inline Matrix4::Matrix4( const Matrix4 & mat ) +{ + mCol0 = mat.mCol0; + mCol1 = mat.mCol1; + mCol2 = mat.mCol2; + mCol3 = mat.mCol3; +} + +inline Matrix4::Matrix4( float scalar ) +{ + mCol0 = Vector4( scalar ); + mCol1 = Vector4( scalar ); + mCol2 = Vector4( scalar ); + mCol3 = Vector4( scalar ); +} + +inline Matrix4::Matrix4( const Transform3 & mat ) +{ + mCol0 = Vector4( mat.getCol0(), 0.0f ); + mCol1 = Vector4( mat.getCol1(), 0.0f ); + mCol2 = Vector4( mat.getCol2(), 0.0f ); + mCol3 = Vector4( mat.getCol3(), 1.0f ); +} + +inline Matrix4::Matrix4( Vector4 _col0, Vector4 _col1, Vector4 _col2, Vector4 _col3 ) +{ + mCol0 = _col0; + mCol1 = _col1; + mCol2 = _col2; + mCol3 = _col3; +} + +inline Matrix4::Matrix4( const Matrix3 & mat, Vector3 translateVec ) +{ + mCol0 = Vector4( mat.getCol0(), 0.0f ); + mCol1 = Vector4( mat.getCol1(), 0.0f ); + mCol2 = Vector4( mat.getCol2(), 0.0f ); + mCol3 = Vector4( translateVec, 1.0f ); +} + +inline Matrix4::Matrix4( Quat unitQuat, Vector3 translateVec ) +{ + Matrix3 mat; + mat = Matrix3( unitQuat ); + mCol0 = Vector4( mat.getCol0(), 0.0f ); + mCol1 = Vector4( mat.getCol1(), 0.0f ); + mCol2 = Vector4( mat.getCol2(), 0.0f ); + mCol3 = Vector4( translateVec, 1.0f ); +} + +inline Matrix4 & Matrix4::setCol0( Vector4 _col0 ) +{ + mCol0 = _col0; + return *this; +} + +inline Matrix4 & Matrix4::setCol1( Vector4 _col1 ) +{ + mCol1 = _col1; + return *this; +} + +inline Matrix4 & Matrix4::setCol2( Vector4 _col2 ) +{ + mCol2 = _col2; + return *this; +} + +inline Matrix4 & Matrix4::setCol3( Vector4 _col3 ) +{ + mCol3 = _col3; + return *this; +} + +inline Matrix4 & Matrix4::setCol( int col, Vector4 vec ) +{ + *(&mCol0 + col) = vec; + return *this; +} + +inline Matrix4 & Matrix4::setRow( int row, Vector4 vec ) +{ + mCol0.setElem( row, vec.getElem( 0 ) ); + mCol1.setElem( row, vec.getElem( 1 ) ); + mCol2.setElem( row, vec.getElem( 2 ) ); + mCol3.setElem( row, vec.getElem( 3 ) ); + return *this; +} + +inline Matrix4 & Matrix4::setElem( int col, int row, float val ) +{ + (*this)[col].setElem(row, val); + return *this; +} + +inline float Matrix4::getElem( int col, int row ) const +{ + return this->getCol( col ).getElem( row ); +} + +inline const Vector4 Matrix4::getCol0( ) const +{ + return mCol0; +} + +inline const Vector4 Matrix4::getCol1( ) const +{ + return mCol1; +} + +inline const Vector4 Matrix4::getCol2( ) const +{ + return mCol2; +} + +inline const Vector4 Matrix4::getCol3( ) const +{ + return mCol3; +} + +inline const Vector4 Matrix4::getCol( int col ) const +{ + return *(&mCol0 + col); +} + +inline const Vector4 Matrix4::getRow( int row ) const +{ + return Vector4( mCol0.getElem( row ), mCol1.getElem( row ), mCol2.getElem( row ), mCol3.getElem( row ) ); +} + +inline Vector4 & Matrix4::operator []( int col ) +{ + return *(&mCol0 + col); +} + +inline const Vector4 Matrix4::operator []( int col ) const +{ + return *(&mCol0 + col); +} + +inline Matrix4 & Matrix4::operator =( const Matrix4 & mat ) +{ + mCol0 = mat.mCol0; + mCol1 = mat.mCol1; + mCol2 = mat.mCol2; + mCol3 = mat.mCol3; + return *this; +} + +inline const Matrix4 transpose( const Matrix4 & mat ) +{ + vec_float4 tmp0, tmp1, tmp2, tmp3, res0, res1, res2, res3; + tmp0 = spu_shuffle( mat.getCol0().get128(), mat.getCol2().get128(), _VECTORMATH_SHUF_XAYB ); + tmp1 = spu_shuffle( mat.getCol1().get128(), mat.getCol3().get128(), _VECTORMATH_SHUF_XAYB ); + tmp2 = spu_shuffle( mat.getCol0().get128(), mat.getCol2().get128(), _VECTORMATH_SHUF_ZCWD ); + tmp3 = spu_shuffle( mat.getCol1().get128(), mat.getCol3().get128(), _VECTORMATH_SHUF_ZCWD ); + res0 = spu_shuffle( tmp0, tmp1, _VECTORMATH_SHUF_XAYB ); + res1 = spu_shuffle( tmp0, tmp1, _VECTORMATH_SHUF_ZCWD ); + res2 = spu_shuffle( tmp2, tmp3, _VECTORMATH_SHUF_XAYB ); + res3 = spu_shuffle( tmp2, tmp3, _VECTORMATH_SHUF_ZCWD ); + return Matrix4( + Vector4( res0 ), + Vector4( res1 ), + Vector4( res2 ), + Vector4( res3 ) + ); +} + +inline const Matrix4 inverse( const Matrix4 & mat ) +{ + /* function implementation based on code from STIDC SDK: */ + /* -------------------------------------------------------------- */ + /* PLEASE DO NOT MODIFY THIS SECTION */ + /* This prolog section is automatically generated. */ + /* */ + /* (C)Copyright */ + /* Sony Computer Entertainment, Inc., */ + /* Toshiba Corporation, */ + /* International Business Machines Corporation, */ + /* 2001,2002. */ + /* S/T/I Confidential Information */ + /* -------------------------------------------------------------- */ + vec_float4 in0, in1, in2, in3; + vec_float4 tmp0, tmp1, tmp2, tmp3; + vec_float4 cof0, cof1, cof2, cof3; + vec_float4 t0, t1, t2, t3; + vec_float4 t01, t02, t03, t12, t23; + vec_float4 t1r, t2r; + vec_float4 t01r, t02r, t03r, t12r, t23r; + vec_float4 t1r3, t1r3r; + vec_float4 det, det1, det2, det3, invdet; + in0 = mat.getCol0().get128(); + in1 = mat.getCol1().get128(); + in2 = mat.getCol2().get128(); + in3 = mat.getCol3().get128(); + /* Perform transform of the input matrix of the form: + * A B C D + * E F G H + * I J K L + * M N O P + * + * The pseudo transpose of the input matrix is trans: + * A E I M + * J N B F + * C G K O + * L P D H + */ + tmp0 = spu_shuffle(in0, in1, _VECTORMATH_SHUF_XAZC); /* A E C G */ + tmp1 = spu_shuffle(in2, in3, _VECTORMATH_SHUF_XAZC); /* I M K O */ + tmp2 = spu_shuffle(in0, in1, _VECTORMATH_SHUF_YBWD); /* B F D H */ + tmp3 = spu_shuffle(in2, in3, _VECTORMATH_SHUF_YBWD); /* J N L P */ + t0 = spu_shuffle(tmp0, tmp1, _VECTORMATH_SHUF_XYAB); /* A E I M */ + t1 = spu_shuffle(tmp3, tmp2, _VECTORMATH_SHUF_XYAB); /* J N B F */ + t2 = spu_shuffle(tmp0, tmp1, _VECTORMATH_SHUF_ZWCD); /* C G K O */ + t3 = spu_shuffle(tmp3, tmp2, _VECTORMATH_SHUF_ZWCD); /* L P D H */ + /* Generate a cofactor matrix. The computed cofactors reside in + * cof0, cof1, cof2, cof3. + */ + t23 = spu_mul(t2, t3); /* CL GP KD OH */ + t23 = spu_shuffle(t23, t23, _VECTORMATH_SHUF_YXWZ); /* GP CL OH KD */ + cof0 = spu_mul(t1, t23); /* JGP NCL BOH FKD */ + cof1 = spu_mul(t0, t23); /* AGP ECL IOH MKD */ + t23r = spu_rlqwbyte(t23, 8); /* OH KD GP CL */ + cof0 = spu_msub(t1, t23r, cof0); /* JOH NKD BGP FCL - cof0 */ + cof1 = spu_msub(t0, t23r, cof1); /* AOH EKD IGP MCL - cof1 */ + cof1 = spu_rlqwbyte(cof1, 8); /* IGP MCL AOH EKD - IOH MKD AGP ECL */ + + t12 = spu_mul(t1, t2); /* JC NG BK FO */ + t12 = spu_shuffle(t12, t12, _VECTORMATH_SHUF_YXWZ); /* NG JC FO BK */ + cof0 = spu_madd(t3, t12, cof0); /* LNG PJC DFO HBK + cof0 */ + cof3 = spu_mul(t0, t12); /* ANG EJC IFO MBK */ + t12r = spu_rlqwbyte(t12, 8); /* FO BK NG JC */ + cof0 = spu_nmsub(t3, t12r, cof0); /* cof0 - LFO PBK DNG HJC */ + cof3 = spu_msub(t0, t12r, cof3); /* AFO EBK ING MJC - cof3 */ + cof3 = spu_rlqwbyte(cof3, 8); /* ING MJC AFO EBK - IFO MBK ANG EJC */ + t1r = spu_rlqwbyte(t1, 8); /* B F J N */ + t2r = spu_rlqwbyte(t2, 8); /* K O C G */ + t1r3 = spu_mul(t1r, t3); /* BL FP JD NH */ + t1r3 = spu_shuffle(t1r3, t1r3, _VECTORMATH_SHUF_YXWZ); /* FP BL NH JD */ + cof0 = spu_madd(t2r, t1r3, cof0); /* KFP OBL CNH GJD + cof0 */ + cof2 = spu_mul(t0, t1r3); /* AFP EBL INH MJD */ + t1r3r = spu_rlqwbyte(t1r3, 8); /* NH JD FP BL */ + cof0 = spu_nmsub(t2r, t1r3r, cof0); /* cof0 - KNH OJD CFP GBL */ + cof2 = spu_msub(t0, t1r3r, cof2); /* ANH EJD IFP MBL - cof2 */ + cof2 = spu_rlqwbyte(cof2, 8); /* IFP MBL ANH EJD - INH MJD AFP EBL */ + t01 = spu_mul(t0, t1); /* AJ EN IB MF */ + t01 = spu_shuffle(t01, t01, _VECTORMATH_SHUF_YXWZ); /* EN AJ MF IB */ + cof2 = spu_madd(t3, t01, cof2); /* LEN PAJ DMF HIB + cof2 */ + cof3 = spu_msub(t2r, t01, cof3); /* KEN OAJ CMF GIB - cof3 */ + t01r = spu_rlqwbyte(t01, 8); /* MF IB EN AJ */ + cof2 = spu_msub(t3, t01r, cof2); /* LMF PIB DEN HAJ - cof2 */ + cof3 = spu_nmsub(t2r, t01r, cof3); /* cof3 - KMF OIB CEN GAJ */ + t03 = spu_mul(t0, t3); /* AL EP ID MH */ + t03 = spu_shuffle(t03, t03, _VECTORMATH_SHUF_YXWZ); /* EP AL MH ID */ + cof1 = spu_nmsub(t2r, t03, cof1); /* cof1 - KEP OAL CMH GID */ + cof2 = spu_madd(t1, t03, cof2); /* JEP NAL BMH FID + cof2 */ + t03r = spu_rlqwbyte(t03, 8); /* MH ID EP AL */ + cof1 = spu_madd(t2r, t03r, cof1); /* KMH OID CEP GAL + cof1 */ + cof2 = spu_nmsub(t1, t03r, cof2); /* cof2 - JMH NID BEP FAL */ + t02 = spu_mul(t0, t2r); /* AK EO IC MG */ + t02 = spu_shuffle(t02, t02, _VECTORMATH_SHUF_YXWZ); /* E0 AK MG IC */ + cof1 = spu_madd(t3, t02, cof1); /* LEO PAK DMG HIC + cof1 */ + cof3 = spu_nmsub(t1, t02, cof3); /* cof3 - JEO NAK BMG FIC */ + t02r = spu_rlqwbyte(t02, 8); /* MG IC EO AK */ + cof1 = spu_nmsub(t3, t02r, cof1); /* cof1 - LMG PIC DEO HAK */ + cof3 = spu_madd(t1, t02r, cof3); /* JMG NIC BEO FAK + cof3 */ + /* Compute the determinant of the matrix + * + * det = sum_across(t0 * cof0); + * + * We perform a sum across the entire vector so that + * we don't have to splat the result when multiplying the + * cofactors by the inverse of the determinant. + */ + det = spu_mul(t0, cof0); + det1 = spu_rlqwbyte(det, 4); + det2 = spu_rlqwbyte(det, 8); + det3 = spu_rlqwbyte(det, 12); + det = spu_add(det, det1); + det2 = spu_add(det2, det3); + det = spu_add(det, det2); + /* Compute the reciprocal of the determinant. + */ + invdet = recipf4(det); + /* Multiply the cofactors by the reciprocal of the determinant. + */ + return Matrix4( + Vector4( spu_mul(cof0, invdet) ), + Vector4( spu_mul(cof1, invdet) ), + Vector4( spu_mul(cof2, invdet) ), + Vector4( spu_mul(cof3, invdet) ) + ); +} + +inline const Matrix4 affineInverse( const Matrix4 & mat ) +{ + Transform3 affineMat; + affineMat.setCol0( mat.getCol0().getXYZ( ) ); + affineMat.setCol1( mat.getCol1().getXYZ( ) ); + affineMat.setCol2( mat.getCol2().getXYZ( ) ); + affineMat.setCol3( mat.getCol3().getXYZ( ) ); + return Matrix4( inverse( affineMat ) ); +} + +inline const Matrix4 orthoInverse( const Matrix4 & mat ) +{ + Transform3 affineMat; + affineMat.setCol0( mat.getCol0().getXYZ( ) ); + affineMat.setCol1( mat.getCol1().getXYZ( ) ); + affineMat.setCol2( mat.getCol2().getXYZ( ) ); + affineMat.setCol3( mat.getCol3().getXYZ( ) ); + return Matrix4( orthoInverse( affineMat ) ); +} + +inline float determinant( const Matrix4 & mat ) +{ + /* function implementation based on code from STIDC SDK: */ + /* -------------------------------------------------------------- */ + /* PLEASE DO NOT MODIFY THIS SECTION */ + /* This prolog section is automatically generated. */ + /* */ + /* (C)Copyright */ + /* Sony Computer Entertainment, Inc., */ + /* Toshiba Corporation, */ + /* International Business Machines Corporation, */ + /* 2001,2002. */ + /* S/T/I Confidential Information */ + /* -------------------------------------------------------------- */ + vec_float4 in0, in1, in2, in3; + vec_float4 tmp0, tmp1, tmp2, tmp3; + vec_float4 cof0; + vec_float4 t0, t1, t2, t3; + vec_float4 t12, t23; + vec_float4 t1r, t2r; + vec_float4 t12r, t23r; + vec_float4 t1r3, t1r3r; + in0 = mat.getCol0().get128(); + in1 = mat.getCol1().get128(); + in2 = mat.getCol2().get128(); + in3 = mat.getCol3().get128(); + /* Perform transform of the input matrix of the form: + * A B C D + * E F G H + * I J K L + * M N O P + * + * The pseudo transpose of the input matrix is trans: + * A E I M + * J N B F + * C G K O + * L P D H + */ + tmp0 = spu_shuffle(in0, in1, _VECTORMATH_SHUF_XAZC); /* A E C G */ + tmp1 = spu_shuffle(in2, in3, _VECTORMATH_SHUF_XAZC); /* I M K O */ + tmp2 = spu_shuffle(in0, in1, _VECTORMATH_SHUF_YBWD); /* B F D H */ + tmp3 = spu_shuffle(in2, in3, _VECTORMATH_SHUF_YBWD); /* J N L P */ + t0 = spu_shuffle(tmp0, tmp1, _VECTORMATH_SHUF_XYAB); /* A E I M */ + t1 = spu_shuffle(tmp3, tmp2, _VECTORMATH_SHUF_XYAB); /* J N B F */ + t2 = spu_shuffle(tmp0, tmp1, _VECTORMATH_SHUF_ZWCD); /* C G K O */ + t3 = spu_shuffle(tmp3, tmp2, _VECTORMATH_SHUF_ZWCD); /* L P D H */ + /* Generate a cofactor matrix. The computed cofactors reside in + * cof0, cof1, cof2, cof3. + */ + t23 = spu_mul(t2, t3); /* CL GP KD OH */ + t23 = spu_shuffle(t23, t23, _VECTORMATH_SHUF_YXWZ); /* GP CL OH KD */ + cof0 = spu_mul(t1, t23); /* JGP NCL BOH FKD */ + t23r = spu_rlqwbyte(t23, 8); /* OH KD GP CL */ + cof0 = spu_msub(t1, t23r, cof0); /* JOH NKD BGP FCL - cof0 */ + + t12 = spu_mul(t1, t2); /* JC NG BK FO */ + t12 = spu_shuffle(t12, t12, _VECTORMATH_SHUF_YXWZ); /* NG JC FO BK */ + cof0 = spu_madd(t3, t12, cof0); /* LNG PJC DFO HBK + cof0 */ + t12r = spu_rlqwbyte(t12, 8); /* FO BK NG JC */ + cof0 = spu_nmsub(t3, t12r, cof0); /* cof0 - LFO PBK DNG HJC */ + t1r = spu_rlqwbyte(t1, 8); /* B F J N */ + t2r = spu_rlqwbyte(t2, 8); /* K O C G */ + t1r3 = spu_mul(t1r, t3); /* BL FP JD NH */ + t1r3 = spu_shuffle(t1r3, t1r3, _VECTORMATH_SHUF_YXWZ); /* FP BL NH JD */ + cof0 = spu_madd(t2r, t1r3, cof0); /* KFP OBL CNH GJD + cof0 */ + t1r3r = spu_rlqwbyte(t1r3, 8); /* NH JD FP BL */ + cof0 = spu_nmsub(t2r, t1r3r, cof0); /* cof0 - KNH OJD CFP GBL */ + return spu_extract( _vmathVfDot4(t0,cof0), 0 ); +} + +inline const Matrix4 Matrix4::operator +( const Matrix4 & mat ) const +{ + return Matrix4( + ( mCol0 + mat.mCol0 ), + ( mCol1 + mat.mCol1 ), + ( mCol2 + mat.mCol2 ), + ( mCol3 + mat.mCol3 ) + ); +} + +inline const Matrix4 Matrix4::operator -( const Matrix4 & mat ) const +{ + return Matrix4( + ( mCol0 - mat.mCol0 ), + ( mCol1 - mat.mCol1 ), + ( mCol2 - mat.mCol2 ), + ( mCol3 - mat.mCol3 ) + ); +} + +inline Matrix4 & Matrix4::operator +=( const Matrix4 & mat ) +{ + *this = *this + mat; + return *this; +} + +inline Matrix4 & Matrix4::operator -=( const Matrix4 & mat ) +{ + *this = *this - mat; + return *this; +} + +inline const Matrix4 Matrix4::operator -( ) const +{ + return Matrix4( + ( -mCol0 ), + ( -mCol1 ), + ( -mCol2 ), + ( -mCol3 ) + ); +} + +inline const Matrix4 absPerElem( const Matrix4 & mat ) +{ + return Matrix4( + absPerElem( mat.getCol0() ), + absPerElem( mat.getCol1() ), + absPerElem( mat.getCol2() ), + absPerElem( mat.getCol3() ) + ); +} + +inline const Matrix4 Matrix4::operator *( float scalar ) const +{ + return Matrix4( + ( mCol0 * scalar ), + ( mCol1 * scalar ), + ( mCol2 * scalar ), + ( mCol3 * scalar ) + ); +} + +inline Matrix4 & Matrix4::operator *=( float scalar ) +{ + *this = *this * scalar; + return *this; +} + +inline const Matrix4 operator *( float scalar, const Matrix4 & mat ) +{ + return mat * scalar; +} + +inline const Vector4 Matrix4::operator *( Vector4 vec ) const +{ + vec_float4 tmp0, tmp1, res; + vec_float4 xxxx, yyyy, zzzz, wwww; + vec_uchar16 shuffle_xxxx = (vec_uchar16)spu_splats((int)0x00010203); + vec_uchar16 shuffle_yyyy = (vec_uchar16)spu_splats((int)0x04050607); + vec_uchar16 shuffle_zzzz = (vec_uchar16)spu_splats((int)0x08090a0b); + vec_uchar16 shuffle_wwww = (vec_uchar16)spu_splats((int)0x0c0d0e0f); + xxxx = spu_shuffle( vec.get128(), vec.get128(), shuffle_xxxx ); + yyyy = spu_shuffle( vec.get128(), vec.get128(), shuffle_yyyy ); + zzzz = spu_shuffle( vec.get128(), vec.get128(), shuffle_zzzz ); + wwww = spu_shuffle( vec.get128(), vec.get128(), shuffle_wwww ); + tmp0 = spu_mul( mCol0.get128(), xxxx ); + tmp1 = spu_mul( mCol1.get128(), yyyy ); + tmp0 = spu_madd( mCol2.get128(), zzzz, tmp0 ); + tmp1 = spu_madd( mCol3.get128(), wwww, tmp1 ); + res = spu_add( tmp0, tmp1 ); + return Vector4( res ); +} + +inline const Vector4 Matrix4::operator *( Vector3 vec ) const +{ + vec_float4 res; + vec_float4 xxxx, yyyy, zzzz; + vec_uchar16 shuffle_xxxx = (vec_uchar16)spu_splats((int)0x00010203); + vec_uchar16 shuffle_yyyy = (vec_uchar16)spu_splats((int)0x04050607); + vec_uchar16 shuffle_zzzz = (vec_uchar16)spu_splats((int)0x08090a0b); + xxxx = spu_shuffle( vec.get128(), vec.get128(), shuffle_xxxx ); + yyyy = spu_shuffle( vec.get128(), vec.get128(), shuffle_yyyy ); + zzzz = spu_shuffle( vec.get128(), vec.get128(), shuffle_zzzz ); + res = spu_mul( mCol0.get128(), xxxx ); + res = spu_madd( mCol1.get128(), yyyy, res ); + res = spu_madd( mCol2.get128(), zzzz, res ); + return Vector4( res ); +} + +inline const Vector4 Matrix4::operator *( Point3 pnt ) const +{ + vec_float4 tmp0, tmp1, res; + vec_float4 xxxx, yyyy, zzzz; + vec_uchar16 shuffle_xxxx = (vec_uchar16)spu_splats((int)0x00010203); + vec_uchar16 shuffle_yyyy = (vec_uchar16)spu_splats((int)0x04050607); + vec_uchar16 shuffle_zzzz = (vec_uchar16)spu_splats((int)0x08090a0b); + xxxx = spu_shuffle( pnt.get128(), pnt.get128(), shuffle_xxxx ); + yyyy = spu_shuffle( pnt.get128(), pnt.get128(), shuffle_yyyy ); + zzzz = spu_shuffle( pnt.get128(), pnt.get128(), shuffle_zzzz ); + tmp0 = spu_mul( mCol0.get128(), xxxx ); + tmp1 = spu_mul( mCol1.get128(), yyyy ); + tmp0 = spu_madd( mCol2.get128(), zzzz, tmp0 ); + tmp1 = spu_add( mCol3.get128(), tmp1 ); + res = spu_add( tmp0, tmp1 ); + return Vector4( res ); +} + +inline const Matrix4 Matrix4::operator *( const Matrix4 & mat ) const +{ + return Matrix4( + ( *this * mat.mCol0 ), + ( *this * mat.mCol1 ), + ( *this * mat.mCol2 ), + ( *this * mat.mCol3 ) + ); +} + +inline Matrix4 & Matrix4::operator *=( const Matrix4 & mat ) +{ + *this = *this * mat; + return *this; +} + +inline const Matrix4 Matrix4::operator *( const Transform3 & tfrm ) const +{ + return Matrix4( + ( *this * tfrm.getCol0() ), + ( *this * tfrm.getCol1() ), + ( *this * tfrm.getCol2() ), + ( *this * Point3( tfrm.getCol3() ) ) + ); +} + +inline Matrix4 & Matrix4::operator *=( const Transform3 & tfrm ) +{ + *this = *this * tfrm; + return *this; +} + +inline const Matrix4 mulPerElem( const Matrix4 & mat0, const Matrix4 & mat1 ) +{ + return Matrix4( + mulPerElem( mat0.getCol0(), mat1.getCol0() ), + mulPerElem( mat0.getCol1(), mat1.getCol1() ), + mulPerElem( mat0.getCol2(), mat1.getCol2() ), + mulPerElem( mat0.getCol3(), mat1.getCol3() ) + ); +} + +inline const Matrix4 Matrix4::identity( ) +{ + return Matrix4( + Vector4::xAxis( ), + Vector4::yAxis( ), + Vector4::zAxis( ), + Vector4::wAxis( ) + ); +} + +inline Matrix4 & Matrix4::setUpper3x3( const Matrix3 & mat3 ) +{ + mCol0.setXYZ( mat3.getCol0() ); + mCol1.setXYZ( mat3.getCol1() ); + mCol2.setXYZ( mat3.getCol2() ); + return *this; +} + +inline const Matrix3 Matrix4::getUpper3x3( ) const +{ + return Matrix3( + mCol0.getXYZ( ), + mCol1.getXYZ( ), + mCol2.getXYZ( ) + ); +} + +inline Matrix4 & Matrix4::setTranslation( Vector3 translateVec ) +{ + mCol3.setXYZ( translateVec ); + return *this; +} + +inline const Vector3 Matrix4::getTranslation( ) const +{ + return mCol3.getXYZ( ); +} + +inline const Matrix4 Matrix4::rotationX( float radians ) +{ + vec_float4 s, c, res1, res2; + vec_uint4 select_y, select_z; + vec_float4 zero; + select_y = (vec_uint4)spu_maskb(0x0f00); + select_z = (vec_uint4)spu_maskb(0x00f0); + zero = spu_splats(0.0f); + sincosf4( spu_splats(radians), &s, &c ); + res1 = spu_sel( zero, c, select_y ); + res1 = spu_sel( res1, s, select_z ); + res2 = spu_sel( zero, negatef4(s), select_y ); + res2 = spu_sel( res2, c, select_z ); + return Matrix4( + Vector4::xAxis( ), + Vector4( res1 ), + Vector4( res2 ), + Vector4::wAxis( ) + ); +} + +inline const Matrix4 Matrix4::rotationY( float radians ) +{ + vec_float4 s, c, res0, res2; + vec_uint4 select_x, select_z; + vec_float4 zero; + select_x = (vec_uint4)spu_maskb(0xf000); + select_z = (vec_uint4)spu_maskb(0x00f0); + zero = spu_splats(0.0f); + sincosf4( spu_splats(radians), &s, &c ); + res0 = spu_sel( zero, c, select_x ); + res0 = spu_sel( res0, negatef4(s), select_z ); + res2 = spu_sel( zero, s, select_x ); + res2 = spu_sel( res2, c, select_z ); + return Matrix4( + Vector4( res0 ), + Vector4::yAxis( ), + Vector4( res2 ), + Vector4::wAxis( ) + ); +} + +inline const Matrix4 Matrix4::rotationZ( float radians ) +{ + vec_float4 s, c, res0, res1; + vec_uint4 select_x, select_y; + vec_float4 zero; + select_x = (vec_uint4)spu_maskb(0xf000); + select_y = (vec_uint4)spu_maskb(0x0f00); + zero = spu_splats(0.0f); + sincosf4( spu_splats(radians), &s, &c ); + res0 = spu_sel( zero, c, select_x ); + res0 = spu_sel( res0, s, select_y ); + res1 = spu_sel( zero, negatef4(s), select_x ); + res1 = spu_sel( res1, c, select_y ); + return Matrix4( + Vector4( res0 ), + Vector4( res1 ), + Vector4::zAxis( ), + Vector4::wAxis( ) + ); +} + +inline const Matrix4 Matrix4::rotationZYX( Vector3 radiansXYZ ) +{ + vec_float4 angles, s, negS, c, X0, X1, Y0, Y1, Z0, Z1, tmp; + vec_uchar16 shuffle_xxxx = (vec_uchar16)spu_splats((int)0x00010203); + angles = radiansXYZ.get128(); + angles = spu_insert( 0.0f, angles, 3 ); + sincosf4( angles, &s, &c ); + negS = negatef4( s ); + Z0 = spu_shuffle( s, c, _VECTORMATH_SHUF_CZD0 ); + Z1 = spu_shuffle( c, negS, _VECTORMATH_SHUF_CZD0 ); + Y0 = spu_shuffle( negS, c, _VECTORMATH_SHUF_BBY0 ); + Y1 = spu_shuffle( c, s, _VECTORMATH_SHUF_BBY0 ); + X0 = spu_shuffle( s, s, shuffle_xxxx ); + X1 = spu_shuffle( c, c, shuffle_xxxx ); + tmp = spu_mul( Z0, Y1 ); + return Matrix4( + Vector4( spu_mul( Z0, Y0 ) ), + Vector4( spu_madd( Z1, X1, spu_mul( tmp, X0 ) ) ), + Vector4( spu_nmsub( Z1, X0, spu_mul( tmp, X1 ) ) ), + Vector4::wAxis( ) + ); +} + +inline const Matrix4 Matrix4::rotation( float radians, Vector3 unitVec ) +{ + vec_float4 axis, s, c, oneMinusC, axisS, negAxisS, xxxx, yyyy, zzzz, tmp0, tmp1, tmp2, zeroW; + vec_uchar16 shuffle_xxxx = (vec_uchar16)spu_splats((int)0x00010203); + vec_uchar16 shuffle_yyyy = (vec_uchar16)spu_splats((int)0x04050607); + vec_uchar16 shuffle_zzzz = (vec_uchar16)spu_splats((int)0x08090a0b); + axis = unitVec.get128(); + sincosf4( spu_splats( radians ), &s, &c ); + xxxx = spu_shuffle( axis, axis, shuffle_xxxx ); + yyyy = spu_shuffle( axis, axis, shuffle_yyyy ); + zzzz = spu_shuffle( axis, axis, shuffle_zzzz ); + oneMinusC = spu_sub( spu_splats(1.0f), c ); + axisS = spu_mul( axis, s ); + negAxisS = negatef4( axisS ); + tmp0 = spu_shuffle( axisS, negAxisS, _VECTORMATH_SHUF_0ZB0 ); + tmp1 = spu_shuffle( axisS, negAxisS, _VECTORMATH_SHUF_C0X0 ); + tmp2 = spu_shuffle( axisS, negAxisS, _VECTORMATH_SHUF_YA00 ); + tmp0 = spu_sel( tmp0, c, (vec_uint4)spu_maskb(0xf000) ); + tmp1 = spu_sel( tmp1, c, (vec_uint4)spu_maskb(0x0f00) ); + tmp2 = spu_sel( tmp2, c, (vec_uint4)spu_maskb(0x00f0) ); + zeroW = (vec_float4)spu_maskb(0x000f); + axis = spu_andc( axis, zeroW ); + return Matrix4( + Vector4( spu_madd( spu_mul( axis, xxxx ), oneMinusC, tmp0 ) ), + Vector4( spu_madd( spu_mul( axis, yyyy ), oneMinusC, tmp1 ) ), + Vector4( spu_madd( spu_mul( axis, zzzz ), oneMinusC, tmp2 ) ), + Vector4::wAxis( ) + ); +} + +inline const Matrix4 Matrix4::rotation( Quat unitQuat ) +{ + return Matrix4( Transform3::rotation( unitQuat ) ); +} + +inline const Matrix4 Matrix4::scale( Vector3 scaleVec ) +{ + vec_float4 zero = spu_splats(0.0f); + return Matrix4( + Vector4( spu_sel( zero, scaleVec.get128(), (vec_uint4)spu_maskb(0xf000) ) ), + Vector4( spu_sel( zero, scaleVec.get128(), (vec_uint4)spu_maskb(0x0f00) ) ), + Vector4( spu_sel( zero, scaleVec.get128(), (vec_uint4)spu_maskb(0x00f0) ) ), + Vector4::wAxis( ) + ); +} + +inline const Matrix4 appendScale( const Matrix4 & mat, Vector3 scaleVec ) +{ + return Matrix4( + ( mat.getCol0() * scaleVec.getX( ) ), + ( mat.getCol1() * scaleVec.getY( ) ), + ( mat.getCol2() * scaleVec.getZ( ) ), + mat.getCol3() + ); +} + +inline const Matrix4 prependScale( Vector3 scaleVec, const Matrix4 & mat ) +{ + Vector4 scale4; + scale4 = Vector4( scaleVec, 1.0f ); + return Matrix4( + mulPerElem( mat.getCol0(), scale4 ), + mulPerElem( mat.getCol1(), scale4 ), + mulPerElem( mat.getCol2(), scale4 ), + mulPerElem( mat.getCol3(), scale4 ) + ); +} + +inline const Matrix4 Matrix4::translation( Vector3 translateVec ) +{ + return Matrix4( + Vector4::xAxis( ), + Vector4::yAxis( ), + Vector4::zAxis( ), + Vector4( translateVec, 1.0f ) + ); +} + +inline const Matrix4 Matrix4::lookAt( Point3 eyePos, Point3 lookAtPos, Vector3 upVec ) +{ + Matrix4 m4EyeFrame; + Vector3 v3X, v3Y, v3Z; + v3Y = normalize( upVec ); + v3Z = normalize( ( eyePos - lookAtPos ) ); + v3X = normalize( cross( v3Y, v3Z ) ); + v3Y = cross( v3Z, v3X ); + m4EyeFrame = Matrix4( Vector4( v3X ), Vector4( v3Y ), Vector4( v3Z ), Vector4( eyePos ) ); + return orthoInverse( m4EyeFrame ); +} + +inline const Matrix4 Matrix4::perspective( float fovyRadians, float aspect, float zNear, float zFar ) +{ + float f, rangeInv; + vec_float4 zero, col0, col1, col2, col3; + f = tanf( _VECTORMATH_PI_OVER_2 - fovyRadians * 0.5f ); + rangeInv = 1.0f / ( zNear - zFar ); + zero = spu_splats(0.0f); + col0 = zero; + col1 = zero; + col2 = zero; + col3 = zero; + col0 = spu_insert( f / aspect, col0, 0 ); + col1 = spu_insert( f, col1, 1 ); + col2 = spu_insert( ( zNear + zFar ) * rangeInv, col2, 2 ); + col2 = spu_insert( -1.0f, col2, 3 ); + col3 = spu_insert( zNear * zFar * rangeInv * 2.0f, col3, 2 ); + return Matrix4( + Vector4( col0 ), + Vector4( col1 ), + Vector4( col2 ), + Vector4( col3 ) + ); +} + +inline const Matrix4 Matrix4::frustum( float left, float right, float bottom, float top, float zNear, float zFar ) +{ + /* function implementation based on code from STIDC SDK: */ + /* -------------------------------------------------------------- */ + /* PLEASE DO NOT MODIFY THIS SECTION */ + /* This prolog section is automatically generated. */ + /* */ + /* (C)Copyright */ + /* Sony Computer Entertainment, Inc., */ + /* Toshiba Corporation, */ + /* International Business Machines Corporation, */ + /* 2001,2002. */ + /* S/T/I Confidential Information */ + /* -------------------------------------------------------------- */ + vec_float4 lbf, rtn; + vec_float4 diff, sum, inv_diff; + vec_float4 diagonal, column, near2; + vec_float4 zero = spu_splats(0.0f); + lbf = spu_shuffle( spu_promote(left,0), spu_promote(zFar,0), _VECTORMATH_SHUF_XAYB ); + rtn = spu_shuffle( spu_promote(right,0), spu_promote(zNear,0), _VECTORMATH_SHUF_XAYB ); + lbf = spu_shuffle( lbf, spu_promote(bottom,0), _VECTORMATH_SHUF_XAYB ); + rtn = spu_shuffle( rtn, spu_promote(top,0), _VECTORMATH_SHUF_XAYB ); + diff = spu_sub( rtn, lbf ); + sum = spu_add( rtn, lbf ); + inv_diff = recipf4( diff ); + near2 = spu_splats( zNear ); + near2 = spu_add( near2, near2 ); + diagonal = spu_mul( near2, inv_diff ); + column = spu_mul( sum, inv_diff ); + return Matrix4( + Vector4( spu_sel( zero, diagonal, (vec_uint4)spu_maskb(0xf000) ) ), + Vector4( spu_sel( zero, diagonal, (vec_uint4)spu_maskb(0x0f00) ) ), + Vector4( spu_sel( column, spu_splats(-1.0f), (vec_uint4)spu_maskb(0x000f) ) ), + Vector4( spu_sel( zero, spu_mul( diagonal, spu_splats(zFar) ), (vec_uint4)spu_maskb(0x00f0) ) ) + ); +} + +inline const Matrix4 Matrix4::orthographic( float left, float right, float bottom, float top, float zNear, float zFar ) +{ + /* function implementation based on code from STIDC SDK: */ + /* -------------------------------------------------------------- */ + /* PLEASE DO NOT MODIFY THIS SECTION */ + /* This prolog section is automatically generated. */ + /* */ + /* (C)Copyright */ + /* Sony Computer Entertainment, Inc., */ + /* Toshiba Corporation, */ + /* International Business Machines Corporation, */ + /* 2001,2002. */ + /* S/T/I Confidential Information */ + /* -------------------------------------------------------------- */ + vec_float4 lbf, rtn; + vec_float4 diff, sum, inv_diff, neg_inv_diff; + vec_float4 diagonal, column; + vec_float4 zero = spu_splats(0.0f); + lbf = spu_shuffle( spu_promote(left,0), spu_promote(zFar,0), _VECTORMATH_SHUF_XAYB ); + rtn = spu_shuffle( spu_promote(right,0), spu_promote(zNear,0), _VECTORMATH_SHUF_XAYB ); + lbf = spu_shuffle( lbf, spu_promote(bottom,0), _VECTORMATH_SHUF_XAYB ); + rtn = spu_shuffle( rtn, spu_promote(top,0), _VECTORMATH_SHUF_XAYB ); + diff = spu_sub( rtn, lbf ); + sum = spu_add( rtn, lbf ); + inv_diff = recipf4( diff ); + neg_inv_diff = negatef4( inv_diff ); + diagonal = spu_add( inv_diff, inv_diff ); + column = spu_mul( sum, spu_sel( neg_inv_diff, inv_diff, (vec_uint4)spu_maskb(0x00f0) ) ); + return Matrix4( + Vector4( spu_sel( zero, diagonal, (vec_uint4)spu_maskb(0xf000) ) ), + Vector4( spu_sel( zero, diagonal, (vec_uint4)spu_maskb(0x0f00) ) ), + Vector4( spu_sel( zero, diagonal, (vec_uint4)spu_maskb(0x00f0) ) ), + Vector4( spu_sel( column, spu_splats(1.0f), (vec_uint4)spu_maskb(0x000f) ) ) + ); +} + +inline const Matrix4 select( const Matrix4 & mat0, const Matrix4 & mat1, bool select1 ) +{ + return Matrix4( + select( mat0.getCol0(), mat1.getCol0(), select1 ), + select( mat0.getCol1(), mat1.getCol1(), select1 ), + select( mat0.getCol2(), mat1.getCol2(), select1 ), + select( mat0.getCol3(), mat1.getCol3(), select1 ) + ); +} + +#ifdef _VECTORMATH_DEBUG + +inline void print( const Matrix4 & mat ) +{ + print( mat.getRow( 0 ) ); + print( mat.getRow( 1 ) ); + print( mat.getRow( 2 ) ); + print( mat.getRow( 3 ) ); +} + +inline void print( const Matrix4 & mat, const char * name ) +{ + printf("%s:\n", name); + print( mat ); +} + +#endif + +inline Transform3::Transform3( const Transform3 & tfrm ) +{ + mCol0 = tfrm.mCol0; + mCol1 = tfrm.mCol1; + mCol2 = tfrm.mCol2; + mCol3 = tfrm.mCol3; +} + +inline Transform3::Transform3( float scalar ) +{ + mCol0 = Vector3( scalar ); + mCol1 = Vector3( scalar ); + mCol2 = Vector3( scalar ); + mCol3 = Vector3( scalar ); +} + +inline Transform3::Transform3( Vector3 _col0, Vector3 _col1, Vector3 _col2, Vector3 _col3 ) +{ + mCol0 = _col0; + mCol1 = _col1; + mCol2 = _col2; + mCol3 = _col3; +} + +inline Transform3::Transform3( const Matrix3 & tfrm, Vector3 translateVec ) +{ + this->setUpper3x3( tfrm ); + this->setTranslation( translateVec ); +} + +inline Transform3::Transform3( Quat unitQuat, Vector3 translateVec ) +{ + this->setUpper3x3( Matrix3( unitQuat ) ); + this->setTranslation( translateVec ); +} + +inline Transform3 & Transform3::setCol0( Vector3 _col0 ) +{ + mCol0 = _col0; + return *this; +} + +inline Transform3 & Transform3::setCol1( Vector3 _col1 ) +{ + mCol1 = _col1; + return *this; +} + +inline Transform3 & Transform3::setCol2( Vector3 _col2 ) +{ + mCol2 = _col2; + return *this; +} + +inline Transform3 & Transform3::setCol3( Vector3 _col3 ) +{ + mCol3 = _col3; + return *this; +} + +inline Transform3 & Transform3::setCol( int col, Vector3 vec ) +{ + *(&mCol0 + col) = vec; + return *this; +} + +inline Transform3 & Transform3::setRow( int row, Vector4 vec ) +{ + mCol0.setElem( row, vec.getElem( 0 ) ); + mCol1.setElem( row, vec.getElem( 1 ) ); + mCol2.setElem( row, vec.getElem( 2 ) ); + mCol3.setElem( row, vec.getElem( 3 ) ); + return *this; +} + +inline Transform3 & Transform3::setElem( int col, int row, float val ) +{ + (*this)[col].setElem(row, val); + return *this; +} + +inline float Transform3::getElem( int col, int row ) const +{ + return this->getCol( col ).getElem( row ); +} + +inline const Vector3 Transform3::getCol0( ) const +{ + return mCol0; +} + +inline const Vector3 Transform3::getCol1( ) const +{ + return mCol1; +} + +inline const Vector3 Transform3::getCol2( ) const +{ + return mCol2; +} + +inline const Vector3 Transform3::getCol3( ) const +{ + return mCol3; +} + +inline const Vector3 Transform3::getCol( int col ) const +{ + return *(&mCol0 + col); +} + +inline const Vector4 Transform3::getRow( int row ) const +{ + return Vector4( mCol0.getElem( row ), mCol1.getElem( row ), mCol2.getElem( row ), mCol3.getElem( row ) ); +} + +inline Vector3 & Transform3::operator []( int col ) +{ + return *(&mCol0 + col); +} + +inline const Vector3 Transform3::operator []( int col ) const +{ + return *(&mCol0 + col); +} + +inline Transform3 & Transform3::operator =( const Transform3 & tfrm ) +{ + mCol0 = tfrm.mCol0; + mCol1 = tfrm.mCol1; + mCol2 = tfrm.mCol2; + mCol3 = tfrm.mCol3; + return *this; +} + +inline const Transform3 inverse( const Transform3 & tfrm ) +{ + vec_float4 inv0, inv1, inv2, inv3; + vec_float4 tmp0, tmp1, tmp2, tmp3, tmp4, dot, invdet; + vec_float4 xxxx, yyyy, zzzz; + vec_uchar16 shuffle_xxxx = (vec_uchar16)spu_splats((int)0x00010203); + vec_uchar16 shuffle_yyyy = (vec_uchar16)spu_splats((int)0x04050607); + vec_uchar16 shuffle_zzzz = (vec_uchar16)spu_splats((int)0x08090a0b); + tmp2 = _vmathVfCross( tfrm.getCol0().get128(), tfrm.getCol1().get128() ); + tmp0 = _vmathVfCross( tfrm.getCol1().get128(), tfrm.getCol2().get128() ); + tmp1 = _vmathVfCross( tfrm.getCol2().get128(), tfrm.getCol0().get128() ); + inv3 = negatef4( tfrm.getCol3().get128() ); + dot = _vmathVfDot3( tmp2, tfrm.getCol2().get128() ); + dot = spu_shuffle( dot, dot, shuffle_xxxx ); + invdet = recipf4( dot ); + tmp3 = spu_shuffle( tmp0, tmp2, _VECTORMATH_SHUF_XAYB ); + tmp4 = spu_shuffle( tmp0, tmp2, _VECTORMATH_SHUF_ZCWD ); + inv0 = spu_shuffle( tmp3, tmp1, _VECTORMATH_SHUF_XAYB ); + xxxx = spu_shuffle( inv3, inv3, shuffle_xxxx ); + inv1 = spu_shuffle( tmp3, tmp1, _VECTORMATH_SHUF_ZBW0 ); + inv2 = spu_shuffle( tmp4, tmp1, _VECTORMATH_SHUF_XCY0 ); + yyyy = spu_shuffle( inv3, inv3, shuffle_yyyy ); + zzzz = spu_shuffle( inv3, inv3, shuffle_zzzz ); + inv3 = spu_mul( inv0, xxxx ); + inv3 = spu_madd( inv1, yyyy, inv3 ); + inv3 = spu_madd( inv2, zzzz, inv3 ); + inv0 = spu_mul( inv0, invdet ); + inv1 = spu_mul( inv1, invdet ); + inv2 = spu_mul( inv2, invdet ); + inv3 = spu_mul( inv3, invdet ); + return Transform3( + Vector3( inv0 ), + Vector3( inv1 ), + Vector3( inv2 ), + Vector3( inv3 ) + ); +} + +inline const Transform3 orthoInverse( const Transform3 & tfrm ) +{ + vec_float4 inv0, inv1, inv2, inv3; + vec_float4 tmp0, tmp1; + vec_float4 xxxx, yyyy, zzzz; + vec_uchar16 shuffle_xxxx = (vec_uchar16)spu_splats((int)0x00010203); + vec_uchar16 shuffle_yyyy = (vec_uchar16)spu_splats((int)0x04050607); + vec_uchar16 shuffle_zzzz = (vec_uchar16)spu_splats((int)0x08090a0b); + tmp0 = spu_shuffle( tfrm.getCol0().get128(), tfrm.getCol2().get128(), _VECTORMATH_SHUF_XAYB ); + tmp1 = spu_shuffle( tfrm.getCol0().get128(), tfrm.getCol2().get128(), _VECTORMATH_SHUF_ZCWD ); + inv3 = negatef4( tfrm.getCol3().get128() ); + inv0 = spu_shuffle( tmp0, tfrm.getCol1().get128(), _VECTORMATH_SHUF_XAYB ); + xxxx = spu_shuffle( inv3, inv3, shuffle_xxxx ); + inv1 = spu_shuffle( tmp0, tfrm.getCol1().get128(), _VECTORMATH_SHUF_ZBW0 ); + inv2 = spu_shuffle( tmp1, tfrm.getCol1().get128(), _VECTORMATH_SHUF_XCY0 ); + yyyy = spu_shuffle( inv3, inv3, shuffle_yyyy ); + zzzz = spu_shuffle( inv3, inv3, shuffle_zzzz ); + inv3 = spu_mul( inv0, xxxx ); + inv3 = spu_madd( inv1, yyyy, inv3 ); + inv3 = spu_madd( inv2, zzzz, inv3 ); + return Transform3( + Vector3( inv0 ), + Vector3( inv1 ), + Vector3( inv2 ), + Vector3( inv3 ) + ); +} + +inline const Transform3 absPerElem( const Transform3 & tfrm ) +{ + return Transform3( + absPerElem( tfrm.getCol0() ), + absPerElem( tfrm.getCol1() ), + absPerElem( tfrm.getCol2() ), + absPerElem( tfrm.getCol3() ) + ); +} + +inline const Vector3 Transform3::operator *( Vector3 vec ) const +{ + vec_float4 res; + vec_float4 xxxx, yyyy, zzzz; + vec_uchar16 shuffle_xxxx = (vec_uchar16)spu_splats((int)0x00010203); + vec_uchar16 shuffle_yyyy = (vec_uchar16)spu_splats((int)0x04050607); + vec_uchar16 shuffle_zzzz = (vec_uchar16)spu_splats((int)0x08090a0b); + xxxx = spu_shuffle( vec.get128(), vec.get128(), shuffle_xxxx ); + yyyy = spu_shuffle( vec.get128(), vec.get128(), shuffle_yyyy ); + zzzz = spu_shuffle( vec.get128(), vec.get128(), shuffle_zzzz ); + res = spu_mul( mCol0.get128(), xxxx ); + res = spu_madd( mCol1.get128(), yyyy, res ); + res = spu_madd( mCol2.get128(), zzzz, res ); + return Vector3( res ); +} + +inline const Point3 Transform3::operator *( Point3 pnt ) const +{ + vec_float4 tmp0, tmp1, res; + vec_float4 xxxx, yyyy, zzzz; + vec_uchar16 shuffle_xxxx = (vec_uchar16)spu_splats((int)0x00010203); + vec_uchar16 shuffle_yyyy = (vec_uchar16)spu_splats((int)0x04050607); + vec_uchar16 shuffle_zzzz = (vec_uchar16)spu_splats((int)0x08090a0b); + xxxx = spu_shuffle( pnt.get128(), pnt.get128(), shuffle_xxxx ); + yyyy = spu_shuffle( pnt.get128(), pnt.get128(), shuffle_yyyy ); + zzzz = spu_shuffle( pnt.get128(), pnt.get128(), shuffle_zzzz ); + tmp0 = spu_mul( mCol0.get128(), xxxx ); + tmp1 = spu_mul( mCol1.get128(), yyyy ); + tmp0 = spu_madd( mCol2.get128(), zzzz, tmp0 ); + tmp1 = spu_add( mCol3.get128(), tmp1 ); + res = spu_add( tmp0, tmp1 ); + return Point3( res ); +} + +inline const Transform3 Transform3::operator *( const Transform3 & tfrm ) const +{ + return Transform3( + ( *this * tfrm.mCol0 ), + ( *this * tfrm.mCol1 ), + ( *this * tfrm.mCol2 ), + Vector3( ( *this * Point3( tfrm.mCol3 ) ) ) + ); +} + +inline Transform3 & Transform3::operator *=( const Transform3 & tfrm ) +{ + *this = *this * tfrm; + return *this; +} + +inline const Transform3 mulPerElem( const Transform3 & tfrm0, const Transform3 & tfrm1 ) +{ + return Transform3( + mulPerElem( tfrm0.getCol0(), tfrm1.getCol0() ), + mulPerElem( tfrm0.getCol1(), tfrm1.getCol1() ), + mulPerElem( tfrm0.getCol2(), tfrm1.getCol2() ), + mulPerElem( tfrm0.getCol3(), tfrm1.getCol3() ) + ); +} + +inline const Transform3 Transform3::identity( ) +{ + return Transform3( + Vector3::xAxis( ), + Vector3::yAxis( ), + Vector3::zAxis( ), + Vector3( 0.0f ) + ); +} + +inline Transform3 & Transform3::setUpper3x3( const Matrix3 & tfrm ) +{ + mCol0 = tfrm.getCol0(); + mCol1 = tfrm.getCol1(); + mCol2 = tfrm.getCol2(); + return *this; +} + +inline const Matrix3 Transform3::getUpper3x3( ) const +{ + return Matrix3( mCol0, mCol1, mCol2 ); +} + +inline Transform3 & Transform3::setTranslation( Vector3 translateVec ) +{ + mCol3 = translateVec; + return *this; +} + +inline const Vector3 Transform3::getTranslation( ) const +{ + return mCol3; +} + +inline const Transform3 Transform3::rotationX( float radians ) +{ + vec_float4 s, c, res1, res2; + vec_uint4 select_y, select_z; + vec_float4 zero; + select_y = (vec_uint4)spu_maskb(0x0f00); + select_z = (vec_uint4)spu_maskb(0x00f0); + zero = spu_splats(0.0f); + sincosf4( spu_splats(radians), &s, &c ); + res1 = spu_sel( zero, c, select_y ); + res1 = spu_sel( res1, s, select_z ); + res2 = spu_sel( zero, negatef4(s), select_y ); + res2 = spu_sel( res2, c, select_z ); + return Transform3( + Vector3::xAxis( ), + Vector3( res1 ), + Vector3( res2 ), + Vector3( 0.0f ) + ); +} + +inline const Transform3 Transform3::rotationY( float radians ) +{ + vec_float4 s, c, res0, res2; + vec_uint4 select_x, select_z; + vec_float4 zero; + select_x = (vec_uint4)spu_maskb(0xf000); + select_z = (vec_uint4)spu_maskb(0x00f0); + zero = spu_splats(0.0f); + sincosf4( spu_splats(radians), &s, &c ); + res0 = spu_sel( zero, c, select_x ); + res0 = spu_sel( res0, negatef4(s), select_z ); + res2 = spu_sel( zero, s, select_x ); + res2 = spu_sel( res2, c, select_z ); + return Transform3( + Vector3( res0 ), + Vector3::yAxis( ), + Vector3( res2 ), + Vector3( 0.0f ) + ); +} + +inline const Transform3 Transform3::rotationZ( float radians ) +{ + vec_float4 s, c, res0, res1; + vec_uint4 select_x, select_y; + vec_float4 zero; + select_x = (vec_uint4)spu_maskb(0xf000); + select_y = (vec_uint4)spu_maskb(0x0f00); + zero = spu_splats(0.0f); + sincosf4( spu_splats(radians), &s, &c ); + res0 = spu_sel( zero, c, select_x ); + res0 = spu_sel( res0, s, select_y ); + res1 = spu_sel( zero, negatef4(s), select_x ); + res1 = spu_sel( res1, c, select_y ); + return Transform3( + Vector3( res0 ), + Vector3( res1 ), + Vector3::zAxis( ), + Vector3( 0.0f ) + ); +} + +inline const Transform3 Transform3::rotationZYX( Vector3 radiansXYZ ) +{ + vec_float4 angles, s, negS, c, X0, X1, Y0, Y1, Z0, Z1, tmp; + vec_uchar16 shuffle_xxxx = (vec_uchar16)spu_splats((int)0x00010203); + angles = radiansXYZ.get128(); + angles = spu_insert( 0.0f, angles, 3 ); + sincosf4( angles, &s, &c ); + negS = negatef4( s ); + Z0 = spu_shuffle( s, c, _VECTORMATH_SHUF_CZD0 ); + Z1 = spu_shuffle( c, negS, _VECTORMATH_SHUF_CZD0 ); + Y0 = spu_shuffle( negS, c, _VECTORMATH_SHUF_BBY0 ); + Y1 = spu_shuffle( c, s, _VECTORMATH_SHUF_BBY0 ); + X0 = spu_shuffle( s, s, shuffle_xxxx ); + X1 = spu_shuffle( c, c, shuffle_xxxx ); + tmp = spu_mul( Z0, Y1 ); + return Transform3( + Vector3( spu_mul( Z0, Y0 ) ), + Vector3( spu_madd( Z1, X1, spu_mul( tmp, X0 ) ) ), + Vector3( spu_nmsub( Z1, X0, spu_mul( tmp, X1 ) ) ), + Vector3( 0.0f ) + ); +} + +inline const Transform3 Transform3::rotation( float radians, Vector3 unitVec ) +{ + return Transform3( Matrix3::rotation( radians, unitVec ), Vector3( 0.0f ) ); +} + +inline const Transform3 Transform3::rotation( Quat unitQuat ) +{ + return Transform3( Matrix3( unitQuat ), Vector3( 0.0f ) ); +} + +inline const Transform3 Transform3::scale( Vector3 scaleVec ) +{ + vec_float4 zero = spu_splats(0.0f); + return Transform3( + Vector3( spu_sel( zero, scaleVec.get128(), (vec_uint4)spu_maskb(0xf000) ) ), + Vector3( spu_sel( zero, scaleVec.get128(), (vec_uint4)spu_maskb(0x0f00) ) ), + Vector3( spu_sel( zero, scaleVec.get128(), (vec_uint4)spu_maskb(0x00f0) ) ), + Vector3( 0.0f ) + ); +} + +inline const Transform3 appendScale( const Transform3 & tfrm, Vector3 scaleVec ) +{ + return Transform3( + ( tfrm.getCol0() * scaleVec.getX( ) ), + ( tfrm.getCol1() * scaleVec.getY( ) ), + ( tfrm.getCol2() * scaleVec.getZ( ) ), + tfrm.getCol3() + ); +} + +inline const Transform3 prependScale( Vector3 scaleVec, const Transform3 & tfrm ) +{ + return Transform3( + mulPerElem( tfrm.getCol0(), scaleVec ), + mulPerElem( tfrm.getCol1(), scaleVec ), + mulPerElem( tfrm.getCol2(), scaleVec ), + mulPerElem( tfrm.getCol3(), scaleVec ) + ); +} + +inline const Transform3 Transform3::translation( Vector3 translateVec ) +{ + return Transform3( + Vector3::xAxis( ), + Vector3::yAxis( ), + Vector3::zAxis( ), + translateVec + ); +} + +inline const Transform3 select( const Transform3 & tfrm0, const Transform3 & tfrm1, bool select1 ) +{ + return Transform3( + select( tfrm0.getCol0(), tfrm1.getCol0(), select1 ), + select( tfrm0.getCol1(), tfrm1.getCol1(), select1 ), + select( tfrm0.getCol2(), tfrm1.getCol2(), select1 ), + select( tfrm0.getCol3(), tfrm1.getCol3(), select1 ) + ); +} + +#ifdef _VECTORMATH_DEBUG + +inline void print( const Transform3 & tfrm ) +{ + print( tfrm.getRow( 0 ) ); + print( tfrm.getRow( 1 ) ); + print( tfrm.getRow( 2 ) ); +} + +inline void print( const Transform3 & tfrm, const char * name ) +{ + printf("%s:\n", name); + print( tfrm ); +} + +#endif + +inline Quat::Quat( const Matrix3 & tfrm ) +{ + vec_float4 res; + vec_float4 col0, col1, col2; + vec_float4 xx_yy, xx_yy_zz_xx, yy_zz_xx_yy, zz_xx_yy_zz, diagSum, diagDiff; + vec_float4 zy_xz_yx, yz_zx_xy, sum, diff; + vec_float4 radicand, invSqrt, scale; + vec_float4 res0, res1, res2, res3; + vec_float4 xx, yy, zz; + vec_uint4 select_x = (vec_uint4)spu_maskb( 0xf000 ); + vec_uint4 select_y = (vec_uint4)spu_maskb( 0x0f00 ); + vec_uint4 select_z = (vec_uint4)spu_maskb( 0x00f0 ); + vec_uint4 select_w = (vec_uint4)spu_maskb( 0x000f ); + vec_uchar16 shuffle_xxxx = (vec_uchar16)spu_splats((unsigned int)0x00010203); + vec_uchar16 shuffle_yyyy = (vec_uchar16)spu_splats((unsigned int)0x04050607); + vec_uchar16 shuffle_zzzz = (vec_uchar16)spu_splats((unsigned int)0x08090a0b); + vec_uchar16 shuffle_wwww = (vec_uchar16)spu_splats((unsigned int)0x0c0d0e0f); + + col0 = tfrm.getCol0().get128(); + col1 = tfrm.getCol1().get128(); + col2 = tfrm.getCol2().get128(); + + /* four cases: */ + /* trace > 0 */ + /* else */ + /* xx largest diagonal element */ + /* yy largest diagonal element */ + /* zz largest diagonal element */ + + /* compute quaternion for each case */ + + xx_yy = spu_sel( col0, col1, select_y ); + xx_yy_zz_xx = spu_shuffle( xx_yy, col2, _VECTORMATH_SHUF_XYCX ); + yy_zz_xx_yy = spu_shuffle( xx_yy, col2, _VECTORMATH_SHUF_YCXY ); + zz_xx_yy_zz = spu_shuffle( xx_yy, col2, _VECTORMATH_SHUF_CXYC ); + + diagSum = spu_add( spu_add( xx_yy_zz_xx, yy_zz_xx_yy ), zz_xx_yy_zz ); + diagDiff = spu_sub( spu_sub( xx_yy_zz_xx, yy_zz_xx_yy ), zz_xx_yy_zz ); + radicand = spu_add( spu_sel( diagDiff, diagSum, select_w ), spu_splats(1.0f) ); + invSqrt = rsqrtf4( radicand ); + + zy_xz_yx = spu_sel( col0, col1, select_z ); + zy_xz_yx = spu_shuffle( zy_xz_yx, col2, _VECTORMATH_SHUF_ZAY0 ); + yz_zx_xy = spu_sel( col0, col1, select_x ); + yz_zx_xy = spu_shuffle( yz_zx_xy, col2, _VECTORMATH_SHUF_BZX0 ); + + sum = spu_add( zy_xz_yx, yz_zx_xy ); + diff = spu_sub( zy_xz_yx, yz_zx_xy ); + + scale = spu_mul( invSqrt, spu_splats(0.5f) ); + res0 = spu_shuffle( sum, diff, _VECTORMATH_SHUF_0ZYA ); + res1 = spu_shuffle( sum, diff, _VECTORMATH_SHUF_Z0XB ); + res2 = spu_shuffle( sum, diff, _VECTORMATH_SHUF_YX0C ); + res3 = diff; + res0 = spu_sel( res0, radicand, select_x ); + res1 = spu_sel( res1, radicand, select_y ); + res2 = spu_sel( res2, radicand, select_z ); + res3 = spu_sel( res3, radicand, select_w ); + res0 = spu_mul( res0, spu_shuffle( scale, scale, shuffle_xxxx ) ); + res1 = spu_mul( res1, spu_shuffle( scale, scale, shuffle_yyyy ) ); + res2 = spu_mul( res2, spu_shuffle( scale, scale, shuffle_zzzz ) ); + res3 = spu_mul( res3, spu_shuffle( scale, scale, shuffle_wwww ) ); + + /* determine case and select answer */ + + xx = spu_shuffle( col0, col0, shuffle_xxxx ); + yy = spu_shuffle( col1, col1, shuffle_yyyy ); + zz = spu_shuffle( col2, col2, shuffle_zzzz ); + res = spu_sel( res0, res1, spu_cmpgt( yy, xx ) ); + res = spu_sel( res, res2, spu_and( spu_cmpgt( zz, xx ), spu_cmpgt( zz, yy ) ) ); + res = spu_sel( res, res3, spu_cmpgt( spu_shuffle( diagSum, diagSum, shuffle_xxxx ), spu_splats(0.0f) ) ); + mVec128 = res; +} + +inline const Matrix3 outer( Vector3 tfrm0, Vector3 tfrm1 ) +{ + return Matrix3( + ( tfrm0 * tfrm1.getX( ) ), + ( tfrm0 * tfrm1.getY( ) ), + ( tfrm0 * tfrm1.getZ( ) ) + ); +} + +inline const Matrix4 outer( Vector4 tfrm0, Vector4 tfrm1 ) +{ + return Matrix4( + ( tfrm0 * tfrm1.getX( ) ), + ( tfrm0 * tfrm1.getY( ) ), + ( tfrm0 * tfrm1.getZ( ) ), + ( tfrm0 * tfrm1.getW( ) ) + ); +} + +inline const Vector3 rowMul( Vector3 vec, const Matrix3 & mat ) +{ + vec_float4 tmp0, tmp1, mcol0, mcol1, mcol2, res; + vec_float4 xxxx, yyyy, zzzz; + vec_uchar16 shuffle_xxxx = (vec_uchar16)spu_splats((int)0x00010203); + vec_uchar16 shuffle_yyyy = (vec_uchar16)spu_splats((int)0x04050607); + vec_uchar16 shuffle_zzzz = (vec_uchar16)spu_splats((int)0x08090a0b); + tmp0 = spu_shuffle( mat.getCol0().get128(), mat.getCol2().get128(), _VECTORMATH_SHUF_XAYB ); + tmp1 = spu_shuffle( mat.getCol0().get128(), mat.getCol2().get128(), _VECTORMATH_SHUF_ZCWD ); + xxxx = spu_shuffle( vec.get128(), vec.get128(), shuffle_xxxx ); + mcol0 = spu_shuffle( tmp0, mat.getCol1().get128(), _VECTORMATH_SHUF_XAYB ); + mcol1 = spu_shuffle( tmp0, mat.getCol1().get128(), _VECTORMATH_SHUF_ZBW0 ); + mcol2 = spu_shuffle( tmp1, mat.getCol1().get128(), _VECTORMATH_SHUF_XCY0 ); + yyyy = spu_shuffle( vec.get128(), vec.get128(), shuffle_yyyy ); + res = spu_mul( mcol0, xxxx ); + zzzz = spu_shuffle( vec.get128(), vec.get128(), shuffle_zzzz ); + res = spu_madd( mcol1, yyyy, res ); + res = spu_madd( mcol2, zzzz, res ); + return Vector3( res ); +} + +inline const Matrix3 crossMatrix( Vector3 vec ) +{ + vec_float4 neg, res0, res1, res2; + neg = negatef4( vec.get128() ); + res0 = spu_shuffle( vec.get128(), neg, _VECTORMATH_SHUF_0ZB0 ); + res1 = spu_shuffle( vec.get128(), neg, _VECTORMATH_SHUF_C0X0 ); + res2 = spu_shuffle( vec.get128(), neg, _VECTORMATH_SHUF_YA00 ); + return Matrix3( + Vector3( res0 ), + Vector3( res1 ), + Vector3( res2 ) + ); +} + +inline const Matrix3 crossMatrixMul( Vector3 vec, const Matrix3 & mat ) +{ + return Matrix3( cross( vec, mat.getCol0() ), cross( vec, mat.getCol1() ), cross( vec, mat.getCol2() ) ); +} + +} // namespace Aos +} // namespace Vectormath + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/spu/cpp/mat_soa.h b/Extras/vectormathlibrary/include/vectormath/spu/cpp/mat_soa.h new file mode 100644 index 000000000..8c884d593 --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/spu/cpp/mat_soa.h @@ -0,0 +1,1744 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_MAT_SOA_CPP_H +#define _VECTORMATH_MAT_SOA_CPP_H + +namespace Vectormath { +namespace Soa { + +//----------------------------------------------------------------------------- +// Constants + +#define _VECTORMATH_PI_OVER_2 1.570796327f + +//----------------------------------------------------------------------------- +// Definitions + +inline Matrix3::Matrix3( const Matrix3 & mat ) +{ + mCol0 = mat.mCol0; + mCol1 = mat.mCol1; + mCol2 = mat.mCol2; +} + +inline Matrix3::Matrix3( vec_float4 scalar ) +{ + mCol0 = Vector3( scalar ); + mCol1 = Vector3( scalar ); + mCol2 = Vector3( scalar ); +} + +inline Matrix3::Matrix3( const Quat & unitQuat ) +{ + vec_float4 qx, qy, qz, qw, qx2, qy2, qz2, qxqx2, qyqy2, qzqz2, qxqy2, qyqz2, qzqw2, qxqz2, qyqw2, qxqw2; + qx = unitQuat.getX(); + qy = unitQuat.getY(); + qz = unitQuat.getZ(); + qw = unitQuat.getW(); + qx2 = spu_add( qx, qx ); + qy2 = spu_add( qy, qy ); + qz2 = spu_add( qz, qz ); + qxqx2 = spu_mul( qx, qx2 ); + qxqy2 = spu_mul( qx, qy2 ); + qxqz2 = spu_mul( qx, qz2 ); + qxqw2 = spu_mul( qw, qx2 ); + qyqy2 = spu_mul( qy, qy2 ); + qyqz2 = spu_mul( qy, qz2 ); + qyqw2 = spu_mul( qw, qy2 ); + qzqz2 = spu_mul( qz, qz2 ); + qzqw2 = spu_mul( qw, qz2 ); + mCol0 = Vector3( spu_sub( spu_sub( spu_splats(1.0f), qyqy2 ), qzqz2 ), spu_add( qxqy2, qzqw2 ), spu_sub( qxqz2, qyqw2 ) ); + mCol1 = Vector3( spu_sub( qxqy2, qzqw2 ), spu_sub( spu_sub( spu_splats(1.0f), qxqx2 ), qzqz2 ), spu_add( qyqz2, qxqw2 ) ); + mCol2 = Vector3( spu_add( qxqz2, qyqw2 ), spu_sub( qyqz2, qxqw2 ), spu_sub( spu_sub( spu_splats(1.0f), qxqx2 ), qyqy2 ) ); +} + +inline Matrix3::Matrix3( const Vector3 & _col0, const Vector3 & _col1, const Vector3 & _col2 ) +{ + mCol0 = _col0; + mCol1 = _col1; + mCol2 = _col2; +} + +inline Matrix3::Matrix3( const Aos::Matrix3 & mat ) +{ + mCol0 = Vector3( mat.getCol0() ); + mCol1 = Vector3( mat.getCol1() ); + mCol2 = Vector3( mat.getCol2() ); +} + +inline Matrix3::Matrix3( const Aos::Matrix3 & mat0, const Aos::Matrix3 & mat1, const Aos::Matrix3 & mat2, const Aos::Matrix3 & mat3 ) +{ + mCol0 = Vector3( mat0.getCol0(), mat1.getCol0(), mat2.getCol0(), mat3.getCol0() ); + mCol1 = Vector3( mat0.getCol1(), mat1.getCol1(), mat2.getCol1(), mat3.getCol1() ); + mCol2 = Vector3( mat0.getCol2(), mat1.getCol2(), mat2.getCol2(), mat3.getCol2() ); +} + +inline void Matrix3::get4Aos( Aos::Matrix3 & result0, Aos::Matrix3 & result1, Aos::Matrix3 & result2, Aos::Matrix3 & result3 ) const +{ + Aos::Vector3 tmpV3_0, tmpV3_1, tmpV3_2, tmpV3_3; + mCol0.get4Aos( tmpV3_0, tmpV3_1, tmpV3_2, tmpV3_3 ); + result0.setCol0( tmpV3_0 ); + result1.setCol0( tmpV3_1 ); + result2.setCol0( tmpV3_2 ); + result3.setCol0( tmpV3_3 ); + mCol1.get4Aos( tmpV3_0, tmpV3_1, tmpV3_2, tmpV3_3 ); + result0.setCol1( tmpV3_0 ); + result1.setCol1( tmpV3_1 ); + result2.setCol1( tmpV3_2 ); + result3.setCol1( tmpV3_3 ); + mCol2.get4Aos( tmpV3_0, tmpV3_1, tmpV3_2, tmpV3_3 ); + result0.setCol2( tmpV3_0 ); + result1.setCol2( tmpV3_1 ); + result2.setCol2( tmpV3_2 ); + result3.setCol2( tmpV3_3 ); +} + +inline Matrix3 & Matrix3::setCol0( const Vector3 & _col0 ) +{ + mCol0 = _col0; + return *this; +} + +inline Matrix3 & Matrix3::setCol1( const Vector3 & _col1 ) +{ + mCol1 = _col1; + return *this; +} + +inline Matrix3 & Matrix3::setCol2( const Vector3 & _col2 ) +{ + mCol2 = _col2; + return *this; +} + +inline Matrix3 & Matrix3::setCol( int col, const Vector3 & vec ) +{ + *(&mCol0 + col) = vec; + return *this; +} + +inline Matrix3 & Matrix3::setRow( int row, const Vector3 & vec ) +{ + mCol0.setElem( row, vec.getElem( 0 ) ); + mCol1.setElem( row, vec.getElem( 1 ) ); + mCol2.setElem( row, vec.getElem( 2 ) ); + return *this; +} + +inline Matrix3 & Matrix3::setElem( int col, int row, vec_float4 val ) +{ + Vector3 tmpV3_0; + tmpV3_0 = this->getCol( col ); + tmpV3_0.setElem( row, val ); + this->setCol( col, tmpV3_0 ); + return *this; +} + +inline vec_float4 Matrix3::getElem( int col, int row ) const +{ + return this->getCol( col ).getElem( row ); +} + +inline const Vector3 Matrix3::getCol0( ) const +{ + return mCol0; +} + +inline const Vector3 Matrix3::getCol1( ) const +{ + return mCol1; +} + +inline const Vector3 Matrix3::getCol2( ) const +{ + return mCol2; +} + +inline const Vector3 Matrix3::getCol( int col ) const +{ + return *(&mCol0 + col); +} + +inline const Vector3 Matrix3::getRow( int row ) const +{ + return Vector3( mCol0.getElem( row ), mCol1.getElem( row ), mCol2.getElem( row ) ); +} + +inline Vector3 & Matrix3::operator []( int col ) +{ + return *(&mCol0 + col); +} + +inline const Vector3 Matrix3::operator []( int col ) const +{ + return *(&mCol0 + col); +} + +inline Matrix3 & Matrix3::operator =( const Matrix3 & mat ) +{ + mCol0 = mat.mCol0; + mCol1 = mat.mCol1; + mCol2 = mat.mCol2; + return *this; +} + +inline const Matrix3 transpose( const Matrix3 & mat ) +{ + return Matrix3( + Vector3( mat.getCol0().getX(), mat.getCol1().getX(), mat.getCol2().getX() ), + Vector3( mat.getCol0().getY(), mat.getCol1().getY(), mat.getCol2().getY() ), + Vector3( mat.getCol0().getZ(), mat.getCol1().getZ(), mat.getCol2().getZ() ) + ); +} + +inline const Matrix3 inverse( const Matrix3 & mat ) +{ + Vector3 tmp0, tmp1, tmp2; + vec_float4 detinv; + tmp0 = cross( mat.getCol1(), mat.getCol2() ); + tmp1 = cross( mat.getCol2(), mat.getCol0() ); + tmp2 = cross( mat.getCol0(), mat.getCol1() ); + detinv = recipf4( dot( mat.getCol2(), tmp2 ) ); + return Matrix3( + Vector3( spu_mul( tmp0.getX(), detinv ), spu_mul( tmp1.getX(), detinv ), spu_mul( tmp2.getX(), detinv ) ), + Vector3( spu_mul( tmp0.getY(), detinv ), spu_mul( tmp1.getY(), detinv ), spu_mul( tmp2.getY(), detinv ) ), + Vector3( spu_mul( tmp0.getZ(), detinv ), spu_mul( tmp1.getZ(), detinv ), spu_mul( tmp2.getZ(), detinv ) ) + ); +} + +inline vec_float4 determinant( const Matrix3 & mat ) +{ + return dot( mat.getCol2(), cross( mat.getCol0(), mat.getCol1() ) ); +} + +inline const Matrix3 Matrix3::operator +( const Matrix3 & mat ) const +{ + return Matrix3( + ( mCol0 + mat.mCol0 ), + ( mCol1 + mat.mCol1 ), + ( mCol2 + mat.mCol2 ) + ); +} + +inline const Matrix3 Matrix3::operator -( const Matrix3 & mat ) const +{ + return Matrix3( + ( mCol0 - mat.mCol0 ), + ( mCol1 - mat.mCol1 ), + ( mCol2 - mat.mCol2 ) + ); +} + +inline Matrix3 & Matrix3::operator +=( const Matrix3 & mat ) +{ + *this = *this + mat; + return *this; +} + +inline Matrix3 & Matrix3::operator -=( const Matrix3 & mat ) +{ + *this = *this - mat; + return *this; +} + +inline const Matrix3 Matrix3::operator -( ) const +{ + return Matrix3( + ( -mCol0 ), + ( -mCol1 ), + ( -mCol2 ) + ); +} + +inline const Matrix3 absPerElem( const Matrix3 & mat ) +{ + return Matrix3( + absPerElem( mat.getCol0() ), + absPerElem( mat.getCol1() ), + absPerElem( mat.getCol2() ) + ); +} + +inline const Matrix3 Matrix3::operator *( vec_float4 scalar ) const +{ + return Matrix3( + ( mCol0 * scalar ), + ( mCol1 * scalar ), + ( mCol2 * scalar ) + ); +} + +inline Matrix3 & Matrix3::operator *=( vec_float4 scalar ) +{ + *this = *this * scalar; + return *this; +} + +inline const Matrix3 operator *( vec_float4 scalar, const Matrix3 & mat ) +{ + return mat * scalar; +} + +inline const Vector3 Matrix3::operator *( const Vector3 & vec ) const +{ + return Vector3( + spu_add( spu_add( spu_mul( mCol0.getX(), vec.getX() ), spu_mul( mCol1.getX(), vec.getY() ) ), spu_mul( mCol2.getX(), vec.getZ() ) ), + spu_add( spu_add( spu_mul( mCol0.getY(), vec.getX() ), spu_mul( mCol1.getY(), vec.getY() ) ), spu_mul( mCol2.getY(), vec.getZ() ) ), + spu_add( spu_add( spu_mul( mCol0.getZ(), vec.getX() ), spu_mul( mCol1.getZ(), vec.getY() ) ), spu_mul( mCol2.getZ(), vec.getZ() ) ) + ); +} + +inline const Matrix3 Matrix3::operator *( const Matrix3 & mat ) const +{ + return Matrix3( + ( *this * mat.mCol0 ), + ( *this * mat.mCol1 ), + ( *this * mat.mCol2 ) + ); +} + +inline Matrix3 & Matrix3::operator *=( const Matrix3 & mat ) +{ + *this = *this * mat; + return *this; +} + +inline const Matrix3 mulPerElem( const Matrix3 & mat0, const Matrix3 & mat1 ) +{ + return Matrix3( + mulPerElem( mat0.getCol0(), mat1.getCol0() ), + mulPerElem( mat0.getCol1(), mat1.getCol1() ), + mulPerElem( mat0.getCol2(), mat1.getCol2() ) + ); +} + +inline const Matrix3 Matrix3::identity( ) +{ + return Matrix3( + Vector3::xAxis( ), + Vector3::yAxis( ), + Vector3::zAxis( ) + ); +} + +inline const Matrix3 Matrix3::rotationX( vec_float4 radians ) +{ + vec_float4 s, c; + sincosf4( radians, &s, &c ); + return Matrix3( + Vector3::xAxis( ), + Vector3( spu_splats(0.0f), c, s ), + Vector3( spu_splats(0.0f), negatef4( s ), c ) + ); +} + +inline const Matrix3 Matrix3::rotationY( vec_float4 radians ) +{ + vec_float4 s, c; + sincosf4( radians, &s, &c ); + return Matrix3( + Vector3( c, spu_splats(0.0f), negatef4( s ) ), + Vector3::yAxis( ), + Vector3( s, spu_splats(0.0f), c ) + ); +} + +inline const Matrix3 Matrix3::rotationZ( vec_float4 radians ) +{ + vec_float4 s, c; + sincosf4( radians, &s, &c ); + return Matrix3( + Vector3( c, s, spu_splats(0.0f) ), + Vector3( negatef4( s ), c, spu_splats(0.0f) ), + Vector3::zAxis( ) + ); +} + +inline const Matrix3 Matrix3::rotationZYX( const Vector3 & radiansXYZ ) +{ + vec_float4 sX, cX, sY, cY, sZ, cZ, tmp0, tmp1; + sincosf4( radiansXYZ.getX(), &sX, &cX ); + sincosf4( radiansXYZ.getY(), &sY, &cY ); + sincosf4( radiansXYZ.getZ(), &sZ, &cZ ); + tmp0 = spu_mul( cZ, sY ); + tmp1 = spu_mul( sZ, sY ); + return Matrix3( + Vector3( spu_mul( cZ, cY ), spu_mul( sZ, cY ), negatef4( sY ) ), + Vector3( spu_sub( spu_mul( tmp0, sX ), spu_mul( sZ, cX ) ), spu_add( spu_mul( tmp1, sX ), spu_mul( cZ, cX ) ), spu_mul( cY, sX ) ), + Vector3( spu_add( spu_mul( tmp0, cX ), spu_mul( sZ, sX ) ), spu_sub( spu_mul( tmp1, cX ), spu_mul( cZ, sX ) ), spu_mul( cY, cX ) ) + ); +} + +inline const Matrix3 Matrix3::rotation( vec_float4 radians, const Vector3 & unitVec ) +{ + vec_float4 x, y, z, s, c, oneMinusC, xy, yz, zx; + sincosf4( radians, &s, &c ); + x = unitVec.getX(); + y = unitVec.getY(); + z = unitVec.getZ(); + xy = spu_mul( x, y ); + yz = spu_mul( y, z ); + zx = spu_mul( z, x ); + oneMinusC = spu_sub( spu_splats(1.0f), c ); + return Matrix3( + Vector3( spu_add( spu_mul( spu_mul( x, x ), oneMinusC ), c ), spu_add( spu_mul( xy, oneMinusC ), spu_mul( z, s ) ), spu_sub( spu_mul( zx, oneMinusC ), spu_mul( y, s ) ) ), + Vector3( spu_sub( spu_mul( xy, oneMinusC ), spu_mul( z, s ) ), spu_add( spu_mul( spu_mul( y, y ), oneMinusC ), c ), spu_add( spu_mul( yz, oneMinusC ), spu_mul( x, s ) ) ), + Vector3( spu_add( spu_mul( zx, oneMinusC ), spu_mul( y, s ) ), spu_sub( spu_mul( yz, oneMinusC ), spu_mul( x, s ) ), spu_add( spu_mul( spu_mul( z, z ), oneMinusC ), c ) ) + ); +} + +inline const Matrix3 Matrix3::rotation( const Quat & unitQuat ) +{ + return Matrix3( unitQuat ); +} + +inline const Matrix3 Matrix3::scale( const Vector3 & scaleVec ) +{ + return Matrix3( + Vector3( scaleVec.getX(), spu_splats(0.0f), spu_splats(0.0f) ), + Vector3( spu_splats(0.0f), scaleVec.getY(), spu_splats(0.0f) ), + Vector3( spu_splats(0.0f), spu_splats(0.0f), scaleVec.getZ() ) + ); +} + +inline const Matrix3 appendScale( const Matrix3 & mat, const Vector3 & scaleVec ) +{ + return Matrix3( + ( mat.getCol0() * scaleVec.getX( ) ), + ( mat.getCol1() * scaleVec.getY( ) ), + ( mat.getCol2() * scaleVec.getZ( ) ) + ); +} + +inline const Matrix3 prependScale( const Vector3 & scaleVec, const Matrix3 & mat ) +{ + return Matrix3( + mulPerElem( mat.getCol0(), scaleVec ), + mulPerElem( mat.getCol1(), scaleVec ), + mulPerElem( mat.getCol2(), scaleVec ) + ); +} + +inline const Matrix3 select( const Matrix3 & mat0, const Matrix3 & mat1, vec_uint4 select1 ) +{ + return Matrix3( + select( mat0.getCol0(), mat1.getCol0(), select1 ), + select( mat0.getCol1(), mat1.getCol1(), select1 ), + select( mat0.getCol2(), mat1.getCol2(), select1 ) + ); +} + +#ifdef _VECTORMATH_DEBUG + +inline void print( const Matrix3 & mat ) +{ + Aos::Matrix3 mat0, mat1, mat2, mat3; + mat.get4Aos( mat0, mat1, mat2, mat3 ); + printf("slot 0:\n"); + print( mat0 ); + printf("slot 1:\n"); + print( mat1 ); + printf("slot 2:\n"); + print( mat2 ); + printf("slot 3:\n"); + print( mat3 ); +} + +inline void print( const Matrix3 & mat, const char * name ) +{ + printf("%s:\n", name); + print( mat ); +} + +#endif + +inline Matrix4::Matrix4( const Matrix4 & mat ) +{ + mCol0 = mat.mCol0; + mCol1 = mat.mCol1; + mCol2 = mat.mCol2; + mCol3 = mat.mCol3; +} + +inline Matrix4::Matrix4( vec_float4 scalar ) +{ + mCol0 = Vector4( scalar ); + mCol1 = Vector4( scalar ); + mCol2 = Vector4( scalar ); + mCol3 = Vector4( scalar ); +} + +inline Matrix4::Matrix4( const Transform3 & mat ) +{ + mCol0 = Vector4( mat.getCol0(), spu_splats(0.0f) ); + mCol1 = Vector4( mat.getCol1(), spu_splats(0.0f) ); + mCol2 = Vector4( mat.getCol2(), spu_splats(0.0f) ); + mCol3 = Vector4( mat.getCol3(), spu_splats(1.0f) ); +} + +inline Matrix4::Matrix4( const Vector4 & _col0, const Vector4 & _col1, const Vector4 & _col2, const Vector4 & _col3 ) +{ + mCol0 = _col0; + mCol1 = _col1; + mCol2 = _col2; + mCol3 = _col3; +} + +inline Matrix4::Matrix4( const Matrix3 & mat, const Vector3 & translateVec ) +{ + mCol0 = Vector4( mat.getCol0(), spu_splats(0.0f) ); + mCol1 = Vector4( mat.getCol1(), spu_splats(0.0f) ); + mCol2 = Vector4( mat.getCol2(), spu_splats(0.0f) ); + mCol3 = Vector4( translateVec, spu_splats(1.0f) ); +} + +inline Matrix4::Matrix4( const Quat & unitQuat, const Vector3 & translateVec ) +{ + Matrix3 mat; + mat = Matrix3( unitQuat ); + mCol0 = Vector4( mat.getCol0(), spu_splats(0.0f) ); + mCol1 = Vector4( mat.getCol1(), spu_splats(0.0f) ); + mCol2 = Vector4( mat.getCol2(), spu_splats(0.0f) ); + mCol3 = Vector4( translateVec, spu_splats(1.0f) ); +} + +inline Matrix4::Matrix4( const Aos::Matrix4 & mat ) +{ + mCol0 = Vector4( mat.getCol0() ); + mCol1 = Vector4( mat.getCol1() ); + mCol2 = Vector4( mat.getCol2() ); + mCol3 = Vector4( mat.getCol3() ); +} + +inline Matrix4::Matrix4( const Aos::Matrix4 & mat0, const Aos::Matrix4 & mat1, const Aos::Matrix4 & mat2, const Aos::Matrix4 & mat3 ) +{ + mCol0 = Vector4( mat0.getCol0(), mat1.getCol0(), mat2.getCol0(), mat3.getCol0() ); + mCol1 = Vector4( mat0.getCol1(), mat1.getCol1(), mat2.getCol1(), mat3.getCol1() ); + mCol2 = Vector4( mat0.getCol2(), mat1.getCol2(), mat2.getCol2(), mat3.getCol2() ); + mCol3 = Vector4( mat0.getCol3(), mat1.getCol3(), mat2.getCol3(), mat3.getCol3() ); +} + +inline void Matrix4::get4Aos( Aos::Matrix4 & result0, Aos::Matrix4 & result1, Aos::Matrix4 & result2, Aos::Matrix4 & result3 ) const +{ + Aos::Vector4 tmpV4_0, tmpV4_1, tmpV4_2, tmpV4_3; + mCol0.get4Aos( tmpV4_0, tmpV4_1, tmpV4_2, tmpV4_3 ); + result0.setCol0( tmpV4_0 ); + result1.setCol0( tmpV4_1 ); + result2.setCol0( tmpV4_2 ); + result3.setCol0( tmpV4_3 ); + mCol1.get4Aos( tmpV4_0, tmpV4_1, tmpV4_2, tmpV4_3 ); + result0.setCol1( tmpV4_0 ); + result1.setCol1( tmpV4_1 ); + result2.setCol1( tmpV4_2 ); + result3.setCol1( tmpV4_3 ); + mCol2.get4Aos( tmpV4_0, tmpV4_1, tmpV4_2, tmpV4_3 ); + result0.setCol2( tmpV4_0 ); + result1.setCol2( tmpV4_1 ); + result2.setCol2( tmpV4_2 ); + result3.setCol2( tmpV4_3 ); + mCol3.get4Aos( tmpV4_0, tmpV4_1, tmpV4_2, tmpV4_3 ); + result0.setCol3( tmpV4_0 ); + result1.setCol3( tmpV4_1 ); + result2.setCol3( tmpV4_2 ); + result3.setCol3( tmpV4_3 ); +} + +inline Matrix4 & Matrix4::setCol0( const Vector4 & _col0 ) +{ + mCol0 = _col0; + return *this; +} + +inline Matrix4 & Matrix4::setCol1( const Vector4 & _col1 ) +{ + mCol1 = _col1; + return *this; +} + +inline Matrix4 & Matrix4::setCol2( const Vector4 & _col2 ) +{ + mCol2 = _col2; + return *this; +} + +inline Matrix4 & Matrix4::setCol3( const Vector4 & _col3 ) +{ + mCol3 = _col3; + return *this; +} + +inline Matrix4 & Matrix4::setCol( int col, const Vector4 & vec ) +{ + *(&mCol0 + col) = vec; + return *this; +} + +inline Matrix4 & Matrix4::setRow( int row, const Vector4 & vec ) +{ + mCol0.setElem( row, vec.getElem( 0 ) ); + mCol1.setElem( row, vec.getElem( 1 ) ); + mCol2.setElem( row, vec.getElem( 2 ) ); + mCol3.setElem( row, vec.getElem( 3 ) ); + return *this; +} + +inline Matrix4 & Matrix4::setElem( int col, int row, vec_float4 val ) +{ + Vector4 tmpV3_0; + tmpV3_0 = this->getCol( col ); + tmpV3_0.setElem( row, val ); + this->setCol( col, tmpV3_0 ); + return *this; +} + +inline vec_float4 Matrix4::getElem( int col, int row ) const +{ + return this->getCol( col ).getElem( row ); +} + +inline const Vector4 Matrix4::getCol0( ) const +{ + return mCol0; +} + +inline const Vector4 Matrix4::getCol1( ) const +{ + return mCol1; +} + +inline const Vector4 Matrix4::getCol2( ) const +{ + return mCol2; +} + +inline const Vector4 Matrix4::getCol3( ) const +{ + return mCol3; +} + +inline const Vector4 Matrix4::getCol( int col ) const +{ + return *(&mCol0 + col); +} + +inline const Vector4 Matrix4::getRow( int row ) const +{ + return Vector4( mCol0.getElem( row ), mCol1.getElem( row ), mCol2.getElem( row ), mCol3.getElem( row ) ); +} + +inline Vector4 & Matrix4::operator []( int col ) +{ + return *(&mCol0 + col); +} + +inline const Vector4 Matrix4::operator []( int col ) const +{ + return *(&mCol0 + col); +} + +inline Matrix4 & Matrix4::operator =( const Matrix4 & mat ) +{ + mCol0 = mat.mCol0; + mCol1 = mat.mCol1; + mCol2 = mat.mCol2; + mCol3 = mat.mCol3; + return *this; +} + +inline const Matrix4 transpose( const Matrix4 & mat ) +{ + return Matrix4( + Vector4( mat.getCol0().getX(), mat.getCol1().getX(), mat.getCol2().getX(), mat.getCol3().getX() ), + Vector4( mat.getCol0().getY(), mat.getCol1().getY(), mat.getCol2().getY(), mat.getCol3().getY() ), + Vector4( mat.getCol0().getZ(), mat.getCol1().getZ(), mat.getCol2().getZ(), mat.getCol3().getZ() ), + Vector4( mat.getCol0().getW(), mat.getCol1().getW(), mat.getCol2().getW(), mat.getCol3().getW() ) + ); +} + +inline const Matrix4 inverse( const Matrix4 & mat ) +{ + Vector4 res0, res1, res2, res3; + vec_float4 mA, mB, mC, mD, mE, mF, mG, mH, mI, mJ, mK, mL, mM, mN, mO, mP, tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, detInv; + mA = mat.getCol0().getX(); + mB = mat.getCol0().getY(); + mC = mat.getCol0().getZ(); + mD = mat.getCol0().getW(); + mE = mat.getCol1().getX(); + mF = mat.getCol1().getY(); + mG = mat.getCol1().getZ(); + mH = mat.getCol1().getW(); + mI = mat.getCol2().getX(); + mJ = mat.getCol2().getY(); + mK = mat.getCol2().getZ(); + mL = mat.getCol2().getW(); + mM = mat.getCol3().getX(); + mN = mat.getCol3().getY(); + mO = mat.getCol3().getZ(); + mP = mat.getCol3().getW(); + tmp0 = spu_sub( spu_mul( mK, mD ), spu_mul( mC, mL ) ); + tmp1 = spu_sub( spu_mul( mO, mH ), spu_mul( mG, mP ) ); + tmp2 = spu_sub( spu_mul( mB, mK ), spu_mul( mJ, mC ) ); + tmp3 = spu_sub( spu_mul( mF, mO ), spu_mul( mN, mG ) ); + tmp4 = spu_sub( spu_mul( mJ, mD ), spu_mul( mB, mL ) ); + tmp5 = spu_sub( spu_mul( mN, mH ), spu_mul( mF, mP ) ); + res0.setX( spu_sub( spu_sub( spu_mul( mJ, tmp1 ), spu_mul( mL, tmp3 ) ), spu_mul( mK, tmp5 ) ) ); + res0.setY( spu_sub( spu_sub( spu_mul( mN, tmp0 ), spu_mul( mP, tmp2 ) ), spu_mul( mO, tmp4 ) ) ); + res0.setZ( spu_sub( spu_add( spu_mul( mD, tmp3 ), spu_mul( mC, tmp5 ) ), spu_mul( mB, tmp1 ) ) ); + res0.setW( spu_sub( spu_add( spu_mul( mH, tmp2 ), spu_mul( mG, tmp4 ) ), spu_mul( mF, tmp0 ) ) ); + detInv = recipf4( spu_add( spu_add( spu_add( spu_mul( mA, res0.getX() ), spu_mul( mE, res0.getY() ) ), spu_mul( mI, res0.getZ() ) ), spu_mul( mM, res0.getW() ) ) ); + res1.setX( spu_mul( mI, tmp1 ) ); + res1.setY( spu_mul( mM, tmp0 ) ); + res1.setZ( spu_mul( mA, tmp1 ) ); + res1.setW( spu_mul( mE, tmp0 ) ); + res3.setX( spu_mul( mI, tmp3 ) ); + res3.setY( spu_mul( mM, tmp2 ) ); + res3.setZ( spu_mul( mA, tmp3 ) ); + res3.setW( spu_mul( mE, tmp2 ) ); + res2.setX( spu_mul( mI, tmp5 ) ); + res2.setY( spu_mul( mM, tmp4 ) ); + res2.setZ( spu_mul( mA, tmp5 ) ); + res2.setW( spu_mul( mE, tmp4 ) ); + tmp0 = spu_sub( spu_mul( mI, mB ), spu_mul( mA, mJ ) ); + tmp1 = spu_sub( spu_mul( mM, mF ), spu_mul( mE, mN ) ); + tmp2 = spu_sub( spu_mul( mI, mD ), spu_mul( mA, mL ) ); + tmp3 = spu_sub( spu_mul( mM, mH ), spu_mul( mE, mP ) ); + tmp4 = spu_sub( spu_mul( mI, mC ), spu_mul( mA, mK ) ); + tmp5 = spu_sub( spu_mul( mM, mG ), spu_mul( mE, mO ) ); + res2.setX( spu_add( spu_sub( spu_mul( mL, tmp1 ), spu_mul( mJ, tmp3 ) ), res2.getX() ) ); + res2.setY( spu_add( spu_sub( spu_mul( mP, tmp0 ), spu_mul( mN, tmp2 ) ), res2.getY() ) ); + res2.setZ( spu_sub( spu_sub( spu_mul( mB, tmp3 ), spu_mul( mD, tmp1 ) ), res2.getZ() ) ); + res2.setW( spu_sub( spu_sub( spu_mul( mF, tmp2 ), spu_mul( mH, tmp0 ) ), res2.getW() ) ); + res3.setX( spu_add( spu_sub( spu_mul( mJ, tmp5 ), spu_mul( mK, tmp1 ) ), res3.getX() ) ); + res3.setY( spu_add( spu_sub( spu_mul( mN, tmp4 ), spu_mul( mO, tmp0 ) ), res3.getY() ) ); + res3.setZ( spu_sub( spu_sub( spu_mul( mC, tmp1 ), spu_mul( mB, tmp5 ) ), res3.getZ() ) ); + res3.setW( spu_sub( spu_sub( spu_mul( mG, tmp0 ), spu_mul( mF, tmp4 ) ), res3.getW() ) ); + res1.setX( spu_sub( spu_sub( spu_mul( mK, tmp3 ), spu_mul( mL, tmp5 ) ), res1.getX() ) ); + res1.setY( spu_sub( spu_sub( spu_mul( mO, tmp2 ), spu_mul( mP, tmp4 ) ), res1.getY() ) ); + res1.setZ( spu_add( spu_sub( spu_mul( mD, tmp5 ), spu_mul( mC, tmp3 ) ), res1.getZ() ) ); + res1.setW( spu_add( spu_sub( spu_mul( mH, tmp4 ), spu_mul( mG, tmp2 ) ), res1.getW() ) ); + return Matrix4( + ( res0 * detInv ), + ( res1 * detInv ), + ( res2 * detInv ), + ( res3 * detInv ) + ); +} + +inline const Matrix4 affineInverse( const Matrix4 & mat ) +{ + Transform3 affineMat; + affineMat.setCol0( mat.getCol0().getXYZ( ) ); + affineMat.setCol1( mat.getCol1().getXYZ( ) ); + affineMat.setCol2( mat.getCol2().getXYZ( ) ); + affineMat.setCol3( mat.getCol3().getXYZ( ) ); + return Matrix4( inverse( affineMat ) ); +} + +inline const Matrix4 orthoInverse( const Matrix4 & mat ) +{ + Transform3 affineMat; + affineMat.setCol0( mat.getCol0().getXYZ( ) ); + affineMat.setCol1( mat.getCol1().getXYZ( ) ); + affineMat.setCol2( mat.getCol2().getXYZ( ) ); + affineMat.setCol3( mat.getCol3().getXYZ( ) ); + return Matrix4( orthoInverse( affineMat ) ); +} + +inline vec_float4 determinant( const Matrix4 & mat ) +{ + vec_float4 dx, dy, dz, dw, mA, mB, mC, mD, mE, mF, mG, mH, mI, mJ, mK, mL, mM, mN, mO, mP, tmp0, tmp1, tmp2, tmp3, tmp4, tmp5; + mA = mat.getCol0().getX(); + mB = mat.getCol0().getY(); + mC = mat.getCol0().getZ(); + mD = mat.getCol0().getW(); + mE = mat.getCol1().getX(); + mF = mat.getCol1().getY(); + mG = mat.getCol1().getZ(); + mH = mat.getCol1().getW(); + mI = mat.getCol2().getX(); + mJ = mat.getCol2().getY(); + mK = mat.getCol2().getZ(); + mL = mat.getCol2().getW(); + mM = mat.getCol3().getX(); + mN = mat.getCol3().getY(); + mO = mat.getCol3().getZ(); + mP = mat.getCol3().getW(); + tmp0 = spu_sub( spu_mul( mK, mD ), spu_mul( mC, mL ) ); + tmp1 = spu_sub( spu_mul( mO, mH ), spu_mul( mG, mP ) ); + tmp2 = spu_sub( spu_mul( mB, mK ), spu_mul( mJ, mC ) ); + tmp3 = spu_sub( spu_mul( mF, mO ), spu_mul( mN, mG ) ); + tmp4 = spu_sub( spu_mul( mJ, mD ), spu_mul( mB, mL ) ); + tmp5 = spu_sub( spu_mul( mN, mH ), spu_mul( mF, mP ) ); + dx = spu_sub( spu_sub( spu_mul( mJ, tmp1 ), spu_mul( mL, tmp3 ) ), spu_mul( mK, tmp5 ) ); + dy = spu_sub( spu_sub( spu_mul( mN, tmp0 ), spu_mul( mP, tmp2 ) ), spu_mul( mO, tmp4 ) ); + dz = spu_sub( spu_add( spu_mul( mD, tmp3 ), spu_mul( mC, tmp5 ) ), spu_mul( mB, tmp1 ) ); + dw = spu_sub( spu_add( spu_mul( mH, tmp2 ), spu_mul( mG, tmp4 ) ), spu_mul( mF, tmp0 ) ); + return spu_add( spu_add( spu_add( spu_mul( mA, dx ), spu_mul( mE, dy ) ), spu_mul( mI, dz ) ), spu_mul( mM, dw ) ); +} + +inline const Matrix4 Matrix4::operator +( const Matrix4 & mat ) const +{ + return Matrix4( + ( mCol0 + mat.mCol0 ), + ( mCol1 + mat.mCol1 ), + ( mCol2 + mat.mCol2 ), + ( mCol3 + mat.mCol3 ) + ); +} + +inline const Matrix4 Matrix4::operator -( const Matrix4 & mat ) const +{ + return Matrix4( + ( mCol0 - mat.mCol0 ), + ( mCol1 - mat.mCol1 ), + ( mCol2 - mat.mCol2 ), + ( mCol3 - mat.mCol3 ) + ); +} + +inline Matrix4 & Matrix4::operator +=( const Matrix4 & mat ) +{ + *this = *this + mat; + return *this; +} + +inline Matrix4 & Matrix4::operator -=( const Matrix4 & mat ) +{ + *this = *this - mat; + return *this; +} + +inline const Matrix4 Matrix4::operator -( ) const +{ + return Matrix4( + ( -mCol0 ), + ( -mCol1 ), + ( -mCol2 ), + ( -mCol3 ) + ); +} + +inline const Matrix4 absPerElem( const Matrix4 & mat ) +{ + return Matrix4( + absPerElem( mat.getCol0() ), + absPerElem( mat.getCol1() ), + absPerElem( mat.getCol2() ), + absPerElem( mat.getCol3() ) + ); +} + +inline const Matrix4 Matrix4::operator *( vec_float4 scalar ) const +{ + return Matrix4( + ( mCol0 * scalar ), + ( mCol1 * scalar ), + ( mCol2 * scalar ), + ( mCol3 * scalar ) + ); +} + +inline Matrix4 & Matrix4::operator *=( vec_float4 scalar ) +{ + *this = *this * scalar; + return *this; +} + +inline const Matrix4 operator *( vec_float4 scalar, const Matrix4 & mat ) +{ + return mat * scalar; +} + +inline const Vector4 Matrix4::operator *( const Vector4 & vec ) const +{ + return Vector4( + spu_add( spu_add( spu_add( spu_mul( mCol0.getX(), vec.getX() ), spu_mul( mCol1.getX(), vec.getY() ) ), spu_mul( mCol2.getX(), vec.getZ() ) ), spu_mul( mCol3.getX(), vec.getW() ) ), + spu_add( spu_add( spu_add( spu_mul( mCol0.getY(), vec.getX() ), spu_mul( mCol1.getY(), vec.getY() ) ), spu_mul( mCol2.getY(), vec.getZ() ) ), spu_mul( mCol3.getY(), vec.getW() ) ), + spu_add( spu_add( spu_add( spu_mul( mCol0.getZ(), vec.getX() ), spu_mul( mCol1.getZ(), vec.getY() ) ), spu_mul( mCol2.getZ(), vec.getZ() ) ), spu_mul( mCol3.getZ(), vec.getW() ) ), + spu_add( spu_add( spu_add( spu_mul( mCol0.getW(), vec.getX() ), spu_mul( mCol1.getW(), vec.getY() ) ), spu_mul( mCol2.getW(), vec.getZ() ) ), spu_mul( mCol3.getW(), vec.getW() ) ) + ); +} + +inline const Vector4 Matrix4::operator *( const Vector3 & vec ) const +{ + return Vector4( + spu_add( spu_add( spu_mul( mCol0.getX(), vec.getX() ), spu_mul( mCol1.getX(), vec.getY() ) ), spu_mul( mCol2.getX(), vec.getZ() ) ), + spu_add( spu_add( spu_mul( mCol0.getY(), vec.getX() ), spu_mul( mCol1.getY(), vec.getY() ) ), spu_mul( mCol2.getY(), vec.getZ() ) ), + spu_add( spu_add( spu_mul( mCol0.getZ(), vec.getX() ), spu_mul( mCol1.getZ(), vec.getY() ) ), spu_mul( mCol2.getZ(), vec.getZ() ) ), + spu_add( spu_add( spu_mul( mCol0.getW(), vec.getX() ), spu_mul( mCol1.getW(), vec.getY() ) ), spu_mul( mCol2.getW(), vec.getZ() ) ) + ); +} + +inline const Vector4 Matrix4::operator *( const Point3 & pnt ) const +{ + return Vector4( + spu_add( spu_add( spu_add( spu_mul( mCol0.getX(), pnt.getX() ), spu_mul( mCol1.getX(), pnt.getY() ) ), spu_mul( mCol2.getX(), pnt.getZ() ) ), mCol3.getX() ), + spu_add( spu_add( spu_add( spu_mul( mCol0.getY(), pnt.getX() ), spu_mul( mCol1.getY(), pnt.getY() ) ), spu_mul( mCol2.getY(), pnt.getZ() ) ), mCol3.getY() ), + spu_add( spu_add( spu_add( spu_mul( mCol0.getZ(), pnt.getX() ), spu_mul( mCol1.getZ(), pnt.getY() ) ), spu_mul( mCol2.getZ(), pnt.getZ() ) ), mCol3.getZ() ), + spu_add( spu_add( spu_add( spu_mul( mCol0.getW(), pnt.getX() ), spu_mul( mCol1.getW(), pnt.getY() ) ), spu_mul( mCol2.getW(), pnt.getZ() ) ), mCol3.getW() ) + ); +} + +inline const Matrix4 Matrix4::operator *( const Matrix4 & mat ) const +{ + return Matrix4( + ( *this * mat.mCol0 ), + ( *this * mat.mCol1 ), + ( *this * mat.mCol2 ), + ( *this * mat.mCol3 ) + ); +} + +inline Matrix4 & Matrix4::operator *=( const Matrix4 & mat ) +{ + *this = *this * mat; + return *this; +} + +inline const Matrix4 Matrix4::operator *( const Transform3 & tfrm ) const +{ + return Matrix4( + ( *this * tfrm.getCol0() ), + ( *this * tfrm.getCol1() ), + ( *this * tfrm.getCol2() ), + ( *this * Point3( tfrm.getCol3() ) ) + ); +} + +inline Matrix4 & Matrix4::operator *=( const Transform3 & tfrm ) +{ + *this = *this * tfrm; + return *this; +} + +inline const Matrix4 mulPerElem( const Matrix4 & mat0, const Matrix4 & mat1 ) +{ + return Matrix4( + mulPerElem( mat0.getCol0(), mat1.getCol0() ), + mulPerElem( mat0.getCol1(), mat1.getCol1() ), + mulPerElem( mat0.getCol2(), mat1.getCol2() ), + mulPerElem( mat0.getCol3(), mat1.getCol3() ) + ); +} + +inline const Matrix4 Matrix4::identity( ) +{ + return Matrix4( + Vector4::xAxis( ), + Vector4::yAxis( ), + Vector4::zAxis( ), + Vector4::wAxis( ) + ); +} + +inline Matrix4 & Matrix4::setUpper3x3( const Matrix3 & mat3 ) +{ + mCol0.setXYZ( mat3.getCol0() ); + mCol1.setXYZ( mat3.getCol1() ); + mCol2.setXYZ( mat3.getCol2() ); + return *this; +} + +inline const Matrix3 Matrix4::getUpper3x3( ) const +{ + return Matrix3( + mCol0.getXYZ( ), + mCol1.getXYZ( ), + mCol2.getXYZ( ) + ); +} + +inline Matrix4 & Matrix4::setTranslation( const Vector3 & translateVec ) +{ + mCol3.setXYZ( translateVec ); + return *this; +} + +inline const Vector3 Matrix4::getTranslation( ) const +{ + return mCol3.getXYZ( ); +} + +inline const Matrix4 Matrix4::rotationX( vec_float4 radians ) +{ + vec_float4 s, c; + sincosf4( radians, &s, &c ); + return Matrix4( + Vector4::xAxis( ), + Vector4( spu_splats(0.0f), c, s, spu_splats(0.0f) ), + Vector4( spu_splats(0.0f), negatef4( s ), c, spu_splats(0.0f) ), + Vector4::wAxis( ) + ); +} + +inline const Matrix4 Matrix4::rotationY( vec_float4 radians ) +{ + vec_float4 s, c; + sincosf4( radians, &s, &c ); + return Matrix4( + Vector4( c, spu_splats(0.0f), negatef4( s ), spu_splats(0.0f) ), + Vector4::yAxis( ), + Vector4( s, spu_splats(0.0f), c, spu_splats(0.0f) ), + Vector4::wAxis( ) + ); +} + +inline const Matrix4 Matrix4::rotationZ( vec_float4 radians ) +{ + vec_float4 s, c; + sincosf4( radians, &s, &c ); + return Matrix4( + Vector4( c, s, spu_splats(0.0f), spu_splats(0.0f) ), + Vector4( negatef4( s ), c, spu_splats(0.0f), spu_splats(0.0f) ), + Vector4::zAxis( ), + Vector4::wAxis( ) + ); +} + +inline const Matrix4 Matrix4::rotationZYX( const Vector3 & radiansXYZ ) +{ + vec_float4 sX, cX, sY, cY, sZ, cZ, tmp0, tmp1; + sincosf4( radiansXYZ.getX(), &sX, &cX ); + sincosf4( radiansXYZ.getY(), &sY, &cY ); + sincosf4( radiansXYZ.getZ(), &sZ, &cZ ); + tmp0 = spu_mul( cZ, sY ); + tmp1 = spu_mul( sZ, sY ); + return Matrix4( + Vector4( spu_mul( cZ, cY ), spu_mul( sZ, cY ), negatef4( sY ), spu_splats(0.0f) ), + Vector4( spu_sub( spu_mul( tmp0, sX ), spu_mul( sZ, cX ) ), spu_add( spu_mul( tmp1, sX ), spu_mul( cZ, cX ) ), spu_mul( cY, sX ), spu_splats(0.0f) ), + Vector4( spu_add( spu_mul( tmp0, cX ), spu_mul( sZ, sX ) ), spu_sub( spu_mul( tmp1, cX ), spu_mul( cZ, sX ) ), spu_mul( cY, cX ), spu_splats(0.0f) ), + Vector4::wAxis( ) + ); +} + +inline const Matrix4 Matrix4::rotation( vec_float4 radians, const Vector3 & unitVec ) +{ + vec_float4 x, y, z, s, c, oneMinusC, xy, yz, zx; + sincosf4( radians, &s, &c ); + x = unitVec.getX(); + y = unitVec.getY(); + z = unitVec.getZ(); + xy = spu_mul( x, y ); + yz = spu_mul( y, z ); + zx = spu_mul( z, x ); + oneMinusC = spu_sub( spu_splats(1.0f), c ); + return Matrix4( + Vector4( spu_add( spu_mul( spu_mul( x, x ), oneMinusC ), c ), spu_add( spu_mul( xy, oneMinusC ), spu_mul( z, s ) ), spu_sub( spu_mul( zx, oneMinusC ), spu_mul( y, s ) ), spu_splats(0.0f) ), + Vector4( spu_sub( spu_mul( xy, oneMinusC ), spu_mul( z, s ) ), spu_add( spu_mul( spu_mul( y, y ), oneMinusC ), c ), spu_add( spu_mul( yz, oneMinusC ), spu_mul( x, s ) ), spu_splats(0.0f) ), + Vector4( spu_add( spu_mul( zx, oneMinusC ), spu_mul( y, s ) ), spu_sub( spu_mul( yz, oneMinusC ), spu_mul( x, s ) ), spu_add( spu_mul( spu_mul( z, z ), oneMinusC ), c ), spu_splats(0.0f) ), + Vector4::wAxis( ) + ); +} + +inline const Matrix4 Matrix4::rotation( const Quat & unitQuat ) +{ + return Matrix4( Transform3::rotation( unitQuat ) ); +} + +inline const Matrix4 Matrix4::scale( const Vector3 & scaleVec ) +{ + return Matrix4( + Vector4( scaleVec.getX(), spu_splats(0.0f), spu_splats(0.0f), spu_splats(0.0f) ), + Vector4( spu_splats(0.0f), scaleVec.getY(), spu_splats(0.0f), spu_splats(0.0f) ), + Vector4( spu_splats(0.0f), spu_splats(0.0f), scaleVec.getZ(), spu_splats(0.0f) ), + Vector4::wAxis( ) + ); +} + +inline const Matrix4 appendScale( const Matrix4 & mat, const Vector3 & scaleVec ) +{ + return Matrix4( + ( mat.getCol0() * scaleVec.getX( ) ), + ( mat.getCol1() * scaleVec.getY( ) ), + ( mat.getCol2() * scaleVec.getZ( ) ), + mat.getCol3() + ); +} + +inline const Matrix4 prependScale( const Vector3 & scaleVec, const Matrix4 & mat ) +{ + Vector4 scale4; + scale4 = Vector4( scaleVec, spu_splats(1.0f) ); + return Matrix4( + mulPerElem( mat.getCol0(), scale4 ), + mulPerElem( mat.getCol1(), scale4 ), + mulPerElem( mat.getCol2(), scale4 ), + mulPerElem( mat.getCol3(), scale4 ) + ); +} + +inline const Matrix4 Matrix4::translation( const Vector3 & translateVec ) +{ + return Matrix4( + Vector4::xAxis( ), + Vector4::yAxis( ), + Vector4::zAxis( ), + Vector4( translateVec, spu_splats(1.0f) ) + ); +} + +inline const Matrix4 Matrix4::lookAt( const Point3 & eyePos, const Point3 & lookAtPos, const Vector3 & upVec ) +{ + Matrix4 m4EyeFrame; + Vector3 v3X, v3Y, v3Z; + v3Y = normalize( upVec ); + v3Z = normalize( ( eyePos - lookAtPos ) ); + v3X = normalize( cross( v3Y, v3Z ) ); + v3Y = cross( v3Z, v3X ); + m4EyeFrame = Matrix4( Vector4( v3X ), Vector4( v3Y ), Vector4( v3Z ), Vector4( eyePos ) ); + return orthoInverse( m4EyeFrame ); +} + +inline const Matrix4 Matrix4::perspective( vec_float4 fovyRadians, vec_float4 aspect, vec_float4 zNear, vec_float4 zFar ) +{ + vec_float4 f, rangeInv; + f = tanf4( spu_sub( spu_splats( _VECTORMATH_PI_OVER_2 ), spu_mul( spu_splats(0.5f), fovyRadians ) ) ); + rangeInv = recipf4( spu_sub( zNear, zFar ) ); + return Matrix4( + Vector4( divf4( f, aspect ), spu_splats(0.0f), spu_splats(0.0f), spu_splats(0.0f) ), + Vector4( spu_splats(0.0f), f, spu_splats(0.0f), spu_splats(0.0f) ), + Vector4( spu_splats(0.0f), spu_splats(0.0f), spu_mul( spu_add( zNear, zFar ), rangeInv ), spu_splats(-1.0f) ), + Vector4( spu_splats(0.0f), spu_splats(0.0f), spu_mul( spu_mul( spu_mul( zNear, zFar ), rangeInv ), spu_splats(2.0f) ), spu_splats(0.0f) ) + ); +} + +inline const Matrix4 Matrix4::frustum( vec_float4 left, vec_float4 right, vec_float4 bottom, vec_float4 top, vec_float4 zNear, vec_float4 zFar ) +{ + vec_float4 sum_rl, sum_tb, sum_nf, inv_rl, inv_tb, inv_nf, n2; + sum_rl = spu_add( right, left ); + sum_tb = spu_add( top, bottom ); + sum_nf = spu_add( zNear, zFar ); + inv_rl = recipf4( spu_sub( right, left ) ); + inv_tb = recipf4( spu_sub( top, bottom ) ); + inv_nf = recipf4( spu_sub( zNear, zFar ) ); + n2 = spu_add( zNear, zNear ); + return Matrix4( + Vector4( spu_mul( n2, inv_rl ), spu_splats(0.0f), spu_splats(0.0f), spu_splats(0.0f) ), + Vector4( spu_splats(0.0f), spu_mul( n2, inv_tb ), spu_splats(0.0f), spu_splats(0.0f) ), + Vector4( spu_mul( sum_rl, inv_rl ), spu_mul( sum_tb, inv_tb ), spu_mul( sum_nf, inv_nf ), spu_splats(-1.0f) ), + Vector4( spu_splats(0.0f), spu_splats(0.0f), spu_mul( spu_mul( n2, inv_nf ), zFar ), spu_splats(0.0f) ) + ); +} + +inline const Matrix4 Matrix4::orthographic( vec_float4 left, vec_float4 right, vec_float4 bottom, vec_float4 top, vec_float4 zNear, vec_float4 zFar ) +{ + vec_float4 sum_rl, sum_tb, sum_nf, inv_rl, inv_tb, inv_nf; + sum_rl = spu_add( right, left ); + sum_tb = spu_add( top, bottom ); + sum_nf = spu_add( zNear, zFar ); + inv_rl = recipf4( spu_sub( right, left ) ); + inv_tb = recipf4( spu_sub( top, bottom ) ); + inv_nf = recipf4( spu_sub( zNear, zFar ) ); + return Matrix4( + Vector4( spu_add( inv_rl, inv_rl ), spu_splats(0.0f), spu_splats(0.0f), spu_splats(0.0f) ), + Vector4( spu_splats(0.0f), spu_add( inv_tb, inv_tb ), spu_splats(0.0f), spu_splats(0.0f) ), + Vector4( spu_splats(0.0f), spu_splats(0.0f), spu_add( inv_nf, inv_nf ), spu_splats(0.0f) ), + Vector4( spu_mul( negatef4( sum_rl ), inv_rl ), spu_mul( negatef4( sum_tb ), inv_tb ), spu_mul( sum_nf, inv_nf ), spu_splats(1.0f) ) + ); +} + +inline const Matrix4 select( const Matrix4 & mat0, const Matrix4 & mat1, vec_uint4 select1 ) +{ + return Matrix4( + select( mat0.getCol0(), mat1.getCol0(), select1 ), + select( mat0.getCol1(), mat1.getCol1(), select1 ), + select( mat0.getCol2(), mat1.getCol2(), select1 ), + select( mat0.getCol3(), mat1.getCol3(), select1 ) + ); +} + +#ifdef _VECTORMATH_DEBUG + +inline void print( const Matrix4 & mat ) +{ + Aos::Matrix4 mat0, mat1, mat2, mat3; + mat.get4Aos( mat0, mat1, mat2, mat3 ); + printf("slot 0:\n"); + print( mat0 ); + printf("slot 1:\n"); + print( mat1 ); + printf("slot 2:\n"); + print( mat2 ); + printf("slot 3:\n"); + print( mat3 ); +} + +inline void print( const Matrix4 & mat, const char * name ) +{ + printf("%s:\n", name); + print( mat ); +} + +#endif + +inline Transform3::Transform3( const Transform3 & tfrm ) +{ + mCol0 = tfrm.mCol0; + mCol1 = tfrm.mCol1; + mCol2 = tfrm.mCol2; + mCol3 = tfrm.mCol3; +} + +inline Transform3::Transform3( vec_float4 scalar ) +{ + mCol0 = Vector3( scalar ); + mCol1 = Vector3( scalar ); + mCol2 = Vector3( scalar ); + mCol3 = Vector3( scalar ); +} + +inline Transform3::Transform3( const Vector3 & _col0, const Vector3 & _col1, const Vector3 & _col2, const Vector3 & _col3 ) +{ + mCol0 = _col0; + mCol1 = _col1; + mCol2 = _col2; + mCol3 = _col3; +} + +inline Transform3::Transform3( const Matrix3 & tfrm, const Vector3 & translateVec ) +{ + this->setUpper3x3( tfrm ); + this->setTranslation( translateVec ); +} + +inline Transform3::Transform3( const Quat & unitQuat, const Vector3 & translateVec ) +{ + this->setUpper3x3( Matrix3( unitQuat ) ); + this->setTranslation( translateVec ); +} + +inline Transform3::Transform3( const Aos::Transform3 & tfrm ) +{ + mCol0 = Vector3( tfrm.getCol0() ); + mCol1 = Vector3( tfrm.getCol1() ); + mCol2 = Vector3( tfrm.getCol2() ); + mCol3 = Vector3( tfrm.getCol3() ); +} + +inline Transform3::Transform3( const Aos::Transform3 & tfrm0, const Aos::Transform3 & tfrm1, const Aos::Transform3 & tfrm2, const Aos::Transform3 & tfrm3 ) +{ + mCol0 = Vector3( tfrm0.getCol0(), tfrm1.getCol0(), tfrm2.getCol0(), tfrm3.getCol0() ); + mCol1 = Vector3( tfrm0.getCol1(), tfrm1.getCol1(), tfrm2.getCol1(), tfrm3.getCol1() ); + mCol2 = Vector3( tfrm0.getCol2(), tfrm1.getCol2(), tfrm2.getCol2(), tfrm3.getCol2() ); + mCol3 = Vector3( tfrm0.getCol3(), tfrm1.getCol3(), tfrm2.getCol3(), tfrm3.getCol3() ); +} + +inline void Transform3::get4Aos( Aos::Transform3 & result0, Aos::Transform3 & result1, Aos::Transform3 & result2, Aos::Transform3 & result3 ) const +{ + Aos::Vector3 tmpV3_0, tmpV3_1, tmpV3_2, tmpV3_3; + mCol0.get4Aos( tmpV3_0, tmpV3_1, tmpV3_2, tmpV3_3 ); + result0.setCol0( tmpV3_0 ); + result1.setCol0( tmpV3_1 ); + result2.setCol0( tmpV3_2 ); + result3.setCol0( tmpV3_3 ); + mCol1.get4Aos( tmpV3_0, tmpV3_1, tmpV3_2, tmpV3_3 ); + result0.setCol1( tmpV3_0 ); + result1.setCol1( tmpV3_1 ); + result2.setCol1( tmpV3_2 ); + result3.setCol1( tmpV3_3 ); + mCol2.get4Aos( tmpV3_0, tmpV3_1, tmpV3_2, tmpV3_3 ); + result0.setCol2( tmpV3_0 ); + result1.setCol2( tmpV3_1 ); + result2.setCol2( tmpV3_2 ); + result3.setCol2( tmpV3_3 ); + mCol3.get4Aos( tmpV3_0, tmpV3_1, tmpV3_2, tmpV3_3 ); + result0.setCol3( tmpV3_0 ); + result1.setCol3( tmpV3_1 ); + result2.setCol3( tmpV3_2 ); + result3.setCol3( tmpV3_3 ); +} + +inline Transform3 & Transform3::setCol0( const Vector3 & _col0 ) +{ + mCol0 = _col0; + return *this; +} + +inline Transform3 & Transform3::setCol1( const Vector3 & _col1 ) +{ + mCol1 = _col1; + return *this; +} + +inline Transform3 & Transform3::setCol2( const Vector3 & _col2 ) +{ + mCol2 = _col2; + return *this; +} + +inline Transform3 & Transform3::setCol3( const Vector3 & _col3 ) +{ + mCol3 = _col3; + return *this; +} + +inline Transform3 & Transform3::setCol( int col, const Vector3 & vec ) +{ + *(&mCol0 + col) = vec; + return *this; +} + +inline Transform3 & Transform3::setRow( int row, const Vector4 & vec ) +{ + mCol0.setElem( row, vec.getElem( 0 ) ); + mCol1.setElem( row, vec.getElem( 1 ) ); + mCol2.setElem( row, vec.getElem( 2 ) ); + mCol3.setElem( row, vec.getElem( 3 ) ); + return *this; +} + +inline Transform3 & Transform3::setElem( int col, int row, vec_float4 val ) +{ + Vector3 tmpV3_0; + tmpV3_0 = this->getCol( col ); + tmpV3_0.setElem( row, val ); + this->setCol( col, tmpV3_0 ); + return *this; +} + +inline vec_float4 Transform3::getElem( int col, int row ) const +{ + return this->getCol( col ).getElem( row ); +} + +inline const Vector3 Transform3::getCol0( ) const +{ + return mCol0; +} + +inline const Vector3 Transform3::getCol1( ) const +{ + return mCol1; +} + +inline const Vector3 Transform3::getCol2( ) const +{ + return mCol2; +} + +inline const Vector3 Transform3::getCol3( ) const +{ + return mCol3; +} + +inline const Vector3 Transform3::getCol( int col ) const +{ + return *(&mCol0 + col); +} + +inline const Vector4 Transform3::getRow( int row ) const +{ + return Vector4( mCol0.getElem( row ), mCol1.getElem( row ), mCol2.getElem( row ), mCol3.getElem( row ) ); +} + +inline Vector3 & Transform3::operator []( int col ) +{ + return *(&mCol0 + col); +} + +inline const Vector3 Transform3::operator []( int col ) const +{ + return *(&mCol0 + col); +} + +inline Transform3 & Transform3::operator =( const Transform3 & tfrm ) +{ + mCol0 = tfrm.mCol0; + mCol1 = tfrm.mCol1; + mCol2 = tfrm.mCol2; + mCol3 = tfrm.mCol3; + return *this; +} + +inline const Transform3 inverse( const Transform3 & tfrm ) +{ + Vector3 tmp0, tmp1, tmp2, inv0, inv1, inv2; + vec_float4 detinv; + tmp0 = cross( tfrm.getCol1(), tfrm.getCol2() ); + tmp1 = cross( tfrm.getCol2(), tfrm.getCol0() ); + tmp2 = cross( tfrm.getCol0(), tfrm.getCol1() ); + detinv = recipf4( dot( tfrm.getCol2(), tmp2 ) ); + inv0 = Vector3( spu_mul( tmp0.getX(), detinv ), spu_mul( tmp1.getX(), detinv ), spu_mul( tmp2.getX(), detinv ) ); + inv1 = Vector3( spu_mul( tmp0.getY(), detinv ), spu_mul( tmp1.getY(), detinv ), spu_mul( tmp2.getY(), detinv ) ); + inv2 = Vector3( spu_mul( tmp0.getZ(), detinv ), spu_mul( tmp1.getZ(), detinv ), spu_mul( tmp2.getZ(), detinv ) ); + return Transform3( + inv0, + inv1, + inv2, + Vector3( ( -( ( inv0 * tfrm.getCol3().getX() ) + ( ( inv1 * tfrm.getCol3().getY() ) + ( inv2 * tfrm.getCol3().getZ() ) ) ) ) ) + ); +} + +inline const Transform3 orthoInverse( const Transform3 & tfrm ) +{ + Vector3 inv0, inv1, inv2; + inv0 = Vector3( tfrm.getCol0().getX(), tfrm.getCol1().getX(), tfrm.getCol2().getX() ); + inv1 = Vector3( tfrm.getCol0().getY(), tfrm.getCol1().getY(), tfrm.getCol2().getY() ); + inv2 = Vector3( tfrm.getCol0().getZ(), tfrm.getCol1().getZ(), tfrm.getCol2().getZ() ); + return Transform3( + inv0, + inv1, + inv2, + Vector3( ( -( ( inv0 * tfrm.getCol3().getX() ) + ( ( inv1 * tfrm.getCol3().getY() ) + ( inv2 * tfrm.getCol3().getZ() ) ) ) ) ) + ); +} + +inline const Transform3 absPerElem( const Transform3 & tfrm ) +{ + return Transform3( + absPerElem( tfrm.getCol0() ), + absPerElem( tfrm.getCol1() ), + absPerElem( tfrm.getCol2() ), + absPerElem( tfrm.getCol3() ) + ); +} + +inline const Vector3 Transform3::operator *( const Vector3 & vec ) const +{ + return Vector3( + spu_add( spu_add( spu_mul( mCol0.getX(), vec.getX() ), spu_mul( mCol1.getX(), vec.getY() ) ), spu_mul( mCol2.getX(), vec.getZ() ) ), + spu_add( spu_add( spu_mul( mCol0.getY(), vec.getX() ), spu_mul( mCol1.getY(), vec.getY() ) ), spu_mul( mCol2.getY(), vec.getZ() ) ), + spu_add( spu_add( spu_mul( mCol0.getZ(), vec.getX() ), spu_mul( mCol1.getZ(), vec.getY() ) ), spu_mul( mCol2.getZ(), vec.getZ() ) ) + ); +} + +inline const Point3 Transform3::operator *( const Point3 & pnt ) const +{ + return Point3( + spu_add( spu_add( spu_add( spu_mul( mCol0.getX(), pnt.getX() ), spu_mul( mCol1.getX(), pnt.getY() ) ), spu_mul( mCol2.getX(), pnt.getZ() ) ), mCol3.getX() ), + spu_add( spu_add( spu_add( spu_mul( mCol0.getY(), pnt.getX() ), spu_mul( mCol1.getY(), pnt.getY() ) ), spu_mul( mCol2.getY(), pnt.getZ() ) ), mCol3.getY() ), + spu_add( spu_add( spu_add( spu_mul( mCol0.getZ(), pnt.getX() ), spu_mul( mCol1.getZ(), pnt.getY() ) ), spu_mul( mCol2.getZ(), pnt.getZ() ) ), mCol3.getZ() ) + ); +} + +inline const Transform3 Transform3::operator *( const Transform3 & tfrm ) const +{ + return Transform3( + ( *this * tfrm.mCol0 ), + ( *this * tfrm.mCol1 ), + ( *this * tfrm.mCol2 ), + Vector3( ( *this * Point3( tfrm.mCol3 ) ) ) + ); +} + +inline Transform3 & Transform3::operator *=( const Transform3 & tfrm ) +{ + *this = *this * tfrm; + return *this; +} + +inline const Transform3 mulPerElem( const Transform3 & tfrm0, const Transform3 & tfrm1 ) +{ + return Transform3( + mulPerElem( tfrm0.getCol0(), tfrm1.getCol0() ), + mulPerElem( tfrm0.getCol1(), tfrm1.getCol1() ), + mulPerElem( tfrm0.getCol2(), tfrm1.getCol2() ), + mulPerElem( tfrm0.getCol3(), tfrm1.getCol3() ) + ); +} + +inline const Transform3 Transform3::identity( ) +{ + return Transform3( + Vector3::xAxis( ), + Vector3::yAxis( ), + Vector3::zAxis( ), + Vector3( spu_splats(0.0f) ) + ); +} + +inline Transform3 & Transform3::setUpper3x3( const Matrix3 & tfrm ) +{ + mCol0 = tfrm.getCol0(); + mCol1 = tfrm.getCol1(); + mCol2 = tfrm.getCol2(); + return *this; +} + +inline const Matrix3 Transform3::getUpper3x3( ) const +{ + return Matrix3( mCol0, mCol1, mCol2 ); +} + +inline Transform3 & Transform3::setTranslation( const Vector3 & translateVec ) +{ + mCol3 = translateVec; + return *this; +} + +inline const Vector3 Transform3::getTranslation( ) const +{ + return mCol3; +} + +inline const Transform3 Transform3::rotationX( vec_float4 radians ) +{ + vec_float4 s, c; + sincosf4( radians, &s, &c ); + return Transform3( + Vector3::xAxis( ), + Vector3( spu_splats(0.0f), c, s ), + Vector3( spu_splats(0.0f), negatef4( s ), c ), + Vector3( spu_splats(0.0f) ) + ); +} + +inline const Transform3 Transform3::rotationY( vec_float4 radians ) +{ + vec_float4 s, c; + sincosf4( radians, &s, &c ); + return Transform3( + Vector3( c, spu_splats(0.0f), negatef4( s ) ), + Vector3::yAxis( ), + Vector3( s, spu_splats(0.0f), c ), + Vector3( spu_splats(0.0f) ) + ); +} + +inline const Transform3 Transform3::rotationZ( vec_float4 radians ) +{ + vec_float4 s, c; + sincosf4( radians, &s, &c ); + return Transform3( + Vector3( c, s, spu_splats(0.0f) ), + Vector3( negatef4( s ), c, spu_splats(0.0f) ), + Vector3::zAxis( ), + Vector3( spu_splats(0.0f) ) + ); +} + +inline const Transform3 Transform3::rotationZYX( const Vector3 & radiansXYZ ) +{ + vec_float4 sX, cX, sY, cY, sZ, cZ, tmp0, tmp1; + sincosf4( radiansXYZ.getX(), &sX, &cX ); + sincosf4( radiansXYZ.getY(), &sY, &cY ); + sincosf4( radiansXYZ.getZ(), &sZ, &cZ ); + tmp0 = spu_mul( cZ, sY ); + tmp1 = spu_mul( sZ, sY ); + return Transform3( + Vector3( spu_mul( cZ, cY ), spu_mul( sZ, cY ), negatef4( sY ) ), + Vector3( spu_sub( spu_mul( tmp0, sX ), spu_mul( sZ, cX ) ), spu_add( spu_mul( tmp1, sX ), spu_mul( cZ, cX ) ), spu_mul( cY, sX ) ), + Vector3( spu_add( spu_mul( tmp0, cX ), spu_mul( sZ, sX ) ), spu_sub( spu_mul( tmp1, cX ), spu_mul( cZ, sX ) ), spu_mul( cY, cX ) ), + Vector3( spu_splats(0.0f) ) + ); +} + +inline const Transform3 Transform3::rotation( vec_float4 radians, const Vector3 & unitVec ) +{ + return Transform3( Matrix3::rotation( radians, unitVec ), Vector3( spu_splats(0.0f) ) ); +} + +inline const Transform3 Transform3::rotation( const Quat & unitQuat ) +{ + return Transform3( Matrix3( unitQuat ), Vector3( spu_splats(0.0f) ) ); +} + +inline const Transform3 Transform3::scale( const Vector3 & scaleVec ) +{ + return Transform3( + Vector3( scaleVec.getX(), spu_splats(0.0f), spu_splats(0.0f) ), + Vector3( spu_splats(0.0f), scaleVec.getY(), spu_splats(0.0f) ), + Vector3( spu_splats(0.0f), spu_splats(0.0f), scaleVec.getZ() ), + Vector3( spu_splats(0.0f) ) + ); +} + +inline const Transform3 appendScale( const Transform3 & tfrm, const Vector3 & scaleVec ) +{ + return Transform3( + ( tfrm.getCol0() * scaleVec.getX( ) ), + ( tfrm.getCol1() * scaleVec.getY( ) ), + ( tfrm.getCol2() * scaleVec.getZ( ) ), + tfrm.getCol3() + ); +} + +inline const Transform3 prependScale( const Vector3 & scaleVec, const Transform3 & tfrm ) +{ + return Transform3( + mulPerElem( tfrm.getCol0(), scaleVec ), + mulPerElem( tfrm.getCol1(), scaleVec ), + mulPerElem( tfrm.getCol2(), scaleVec ), + mulPerElem( tfrm.getCol3(), scaleVec ) + ); +} + +inline const Transform3 Transform3::translation( const Vector3 & translateVec ) +{ + return Transform3( + Vector3::xAxis( ), + Vector3::yAxis( ), + Vector3::zAxis( ), + translateVec + ); +} + +inline const Transform3 select( const Transform3 & tfrm0, const Transform3 & tfrm1, vec_uint4 select1 ) +{ + return Transform3( + select( tfrm0.getCol0(), tfrm1.getCol0(), select1 ), + select( tfrm0.getCol1(), tfrm1.getCol1(), select1 ), + select( tfrm0.getCol2(), tfrm1.getCol2(), select1 ), + select( tfrm0.getCol3(), tfrm1.getCol3(), select1 ) + ); +} + +#ifdef _VECTORMATH_DEBUG + +inline void print( const Transform3 & tfrm ) +{ + Aos::Transform3 mat0, mat1, mat2, mat3; + tfrm.get4Aos( mat0, mat1, mat2, mat3 ); + printf("slot 0:\n"); + print( mat0 ); + printf("slot 1:\n"); + print( mat1 ); + printf("slot 2:\n"); + print( mat2 ); + printf("slot 3:\n"); + print( mat3 ); +} + +inline void print( const Transform3 & tfrm, const char * name ) +{ + printf("%s:\n", name); + print( tfrm ); +} + +#endif + +inline Quat::Quat( const Matrix3 & tfrm ) +{ + vec_float4 trace, radicand, scale, xx, yx, zx, xy, yy, zy, xz, yz, zz, tmpx, tmpy, tmpz, tmpw, qx, qy, qz, qw; + vec_uint4 negTrace, ZgtX, ZgtY, YgtX; + vec_uint4 largestXorY, largestYorZ, largestZorX; + + xx = tfrm.getCol0().getX(); + yx = tfrm.getCol0().getY(); + zx = tfrm.getCol0().getZ(); + xy = tfrm.getCol1().getX(); + yy = tfrm.getCol1().getY(); + zy = tfrm.getCol1().getZ(); + xz = tfrm.getCol2().getX(); + yz = tfrm.getCol2().getY(); + zz = tfrm.getCol2().getZ(); + + trace = spu_add( spu_add( xx, yy ), zz ); + + negTrace = spu_cmpgt( spu_splats(0.0f), trace ); + ZgtX = spu_cmpgt( zz, xx ); + ZgtY = spu_cmpgt( zz, yy ); + YgtX = spu_cmpgt( yy, xx ); + largestXorY = spu_and( negTrace, spu_nand( ZgtX, ZgtY ) ); + largestYorZ = spu_and( negTrace, spu_or( YgtX, ZgtX ) ); + largestZorX = spu_and( negTrace, spu_orc( ZgtY, YgtX ) ); + + zz = spu_sel( zz, negatef4(zz), largestXorY ); + xy = spu_sel( xy, negatef4(xy), largestXorY ); + xx = spu_sel( xx, negatef4(xx), largestYorZ ); + yz = spu_sel( yz, negatef4(yz), largestYorZ ); + yy = spu_sel( yy, negatef4(yy), largestZorX ); + zx = spu_sel( zx, negatef4(zx), largestZorX ); + + radicand = spu_add( spu_add( spu_add( xx, yy ), zz ), spu_splats(1.0f) ); + scale = spu_mul( spu_splats(0.5f), rsqrtf4( radicand ) ); + + tmpx = spu_mul( spu_sub( zy, yz ), scale ); + tmpy = spu_mul( spu_sub( xz, zx ), scale ); + tmpz = spu_mul( spu_sub( yx, xy ), scale ); + tmpw = spu_mul( radicand, scale ); + qx = tmpx; + qy = tmpy; + qz = tmpz; + qw = tmpw; + + qx = spu_sel( qx, tmpw, largestXorY ); + qy = spu_sel( qy, tmpz, largestXorY ); + qz = spu_sel( qz, tmpy, largestXorY ); + qw = spu_sel( qw, tmpx, largestXorY ); + tmpx = qx; + tmpz = qz; + qx = spu_sel( qx, qy, largestYorZ ); + qy = spu_sel( qy, tmpx, largestYorZ ); + qz = spu_sel( qz, qw, largestYorZ ); + qw = spu_sel( qw, tmpz, largestYorZ ); + + mX = qx; + mY = qy; + mZ = qz; + mW = qw; +} + +inline const Matrix3 outer( const Vector3 & tfrm0, const Vector3 & tfrm1 ) +{ + return Matrix3( + ( tfrm0 * tfrm1.getX( ) ), + ( tfrm0 * tfrm1.getY( ) ), + ( tfrm0 * tfrm1.getZ( ) ) + ); +} + +inline const Matrix4 outer( const Vector4 & tfrm0, const Vector4 & tfrm1 ) +{ + return Matrix4( + ( tfrm0 * tfrm1.getX( ) ), + ( tfrm0 * tfrm1.getY( ) ), + ( tfrm0 * tfrm1.getZ( ) ), + ( tfrm0 * tfrm1.getW( ) ) + ); +} + +inline const Vector3 rowMul( const Vector3 & vec, const Matrix3 & mat ) +{ + return Vector3( + spu_add( spu_add( spu_mul( vec.getX(), mat.getCol0().getX() ), spu_mul( vec.getY(), mat.getCol0().getY() ) ), spu_mul( vec.getZ(), mat.getCol0().getZ() ) ), + spu_add( spu_add( spu_mul( vec.getX(), mat.getCol1().getX() ), spu_mul( vec.getY(), mat.getCol1().getY() ) ), spu_mul( vec.getZ(), mat.getCol1().getZ() ) ), + spu_add( spu_add( spu_mul( vec.getX(), mat.getCol2().getX() ), spu_mul( vec.getY(), mat.getCol2().getY() ) ), spu_mul( vec.getZ(), mat.getCol2().getZ() ) ) + ); +} + +inline const Matrix3 crossMatrix( const Vector3 & vec ) +{ + return Matrix3( + Vector3( spu_splats(0.0f), vec.getZ(), negatef4( vec.getY() ) ), + Vector3( negatef4( vec.getZ() ), spu_splats(0.0f), vec.getX() ), + Vector3( vec.getY(), negatef4( vec.getX() ), spu_splats(0.0f) ) + ); +} + +inline const Matrix3 crossMatrixMul( const Vector3 & vec, const Matrix3 & mat ) +{ + return Matrix3( cross( vec, mat.getCol0() ), cross( vec, mat.getCol1() ), cross( vec, mat.getCol2() ) ); +} + +} // namespace Soa +} // namespace Vectormath + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/spu/cpp/quat_aos.h b/Extras/vectormathlibrary/include/vectormath/spu/cpp/quat_aos.h new file mode 100644 index 000000000..a41bc69aa --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/spu/cpp/quat_aos.h @@ -0,0 +1,417 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_QUAT_AOS_CPP_H +#define _VECTORMATH_QUAT_AOS_CPP_H +//----------------------------------------------------------------------------- +// Definitions + +#ifndef _VECTORMATH_INTERNAL_FUNCTIONS +#define _VECTORMATH_INTERNAL_FUNCTIONS + +#endif + +namespace Vectormath { +namespace Aos { + +inline Quat::Quat( float _x, float _y, float _z, float _w ) +{ + mVec128 = (vec_float4){ _x, _y, _z, _w }; +} + +inline Quat::Quat( Vector3 xyz, float _w ) +{ + mVec128 = spu_shuffle( xyz.get128(), spu_promote( _w, 0 ), _VECTORMATH_SHUF_XYZA ); +} + +inline Quat::Quat( Vector4 vec ) +{ + mVec128 = vec.get128(); +} + +inline Quat::Quat( float scalar ) +{ + mVec128 = spu_splats( scalar ); +} + +inline Quat::Quat( vec_float4 vf4 ) +{ + mVec128 = vf4; +} + +inline const Quat Quat::identity( ) +{ + return Quat( _VECTORMATH_UNIT_0001 ); +} + +inline const Quat lerp( float t, Quat quat0, Quat quat1 ) +{ + return ( quat0 + ( ( quat1 - quat0 ) * t ) ); +} + +inline const Quat slerp( float t, Quat unitQuat0, Quat unitQuat1 ) +{ + Quat start; + vec_float4 scales, scale0, scale1, cosAngle, angle, tttt, oneMinusT, angles, sines; + vec_uint4 selectMask; + vec_uchar16 shuffle_xxxx = (vec_uchar16)spu_splats((int)0x00010203); + vec_uchar16 shuffle_yyyy = (vec_uchar16)spu_splats((int)0x04050607); + vec_uchar16 shuffle_zzzz = (vec_uchar16)spu_splats((int)0x08090a0b); + cosAngle = _vmathVfDot4( unitQuat0.get128(), unitQuat1.get128() ); + cosAngle = spu_shuffle( cosAngle, cosAngle, shuffle_xxxx ); + selectMask = (vec_uint4)spu_cmpgt( spu_splats(0.0f), cosAngle ); + cosAngle = spu_sel( cosAngle, negatef4( cosAngle ), selectMask ); + start = Quat( spu_sel( unitQuat0.get128(), negatef4( unitQuat0.get128() ), selectMask ) ); + selectMask = (vec_uint4)spu_cmpgt( spu_splats(_VECTORMATH_SLERP_TOL), cosAngle ); + angle = acosf4( cosAngle ); + tttt = spu_splats(t); + oneMinusT = spu_sub( spu_splats(1.0f), tttt ); + angles = spu_sel( spu_splats(1.0f), oneMinusT, (vec_uint4)spu_maskb(0x0f00) ); + angles = spu_sel( angles, tttt, (vec_uint4)spu_maskb(0x00f0) ); + angles = spu_mul( angles, angle ); + sines = sinf4( angles ); + scales = divf4( sines, spu_shuffle( sines, sines, shuffle_xxxx ) ); + scale0 = spu_sel( oneMinusT, spu_shuffle( scales, scales, shuffle_yyyy ), selectMask ); + scale1 = spu_sel( tttt, spu_shuffle( scales, scales, shuffle_zzzz ), selectMask ); + return Quat( spu_madd( start.get128(), scale0, spu_mul( unitQuat1.get128(), scale1 ) ) ); +} + +inline const Quat squad( float t, Quat unitQuat0, Quat unitQuat1, Quat unitQuat2, Quat unitQuat3 ) +{ + Quat tmp0, tmp1; + tmp0 = slerp( t, unitQuat0, unitQuat3 ); + tmp1 = slerp( t, unitQuat1, unitQuat2 ); + return slerp( ( ( 2.0f * t ) * ( 1.0f - t ) ), tmp0, tmp1 ); +} + +inline vec_float4 Quat::get128( ) const +{ + return mVec128; +} + +inline Quat & Quat::operator =( Quat quat ) +{ + mVec128 = quat.mVec128; + return *this; +} + +inline Quat & Quat::setXYZ( Vector3 vec ) +{ + mVec128 = spu_sel( vec.get128(), mVec128, (vec_uint4)spu_maskb(0x000f) ); + return *this; +} + +inline const Vector3 Quat::getXYZ( ) const +{ + return Vector3( mVec128 ); +} + +inline Quat & Quat::setX( float _x ) +{ + mVec128 = spu_insert( _x, mVec128, 0 ); + return *this; +} + +inline float Quat::getX( ) const +{ + return spu_extract( mVec128, 0 ); +} + +inline Quat & Quat::setY( float _y ) +{ + mVec128 = spu_insert( _y, mVec128, 1 ); + return *this; +} + +inline float Quat::getY( ) const +{ + return spu_extract( mVec128, 1 ); +} + +inline Quat & Quat::setZ( float _z ) +{ + mVec128 = spu_insert( _z, mVec128, 2 ); + return *this; +} + +inline float Quat::getZ( ) const +{ + return spu_extract( mVec128, 2 ); +} + +inline Quat & Quat::setW( float _w ) +{ + mVec128 = spu_insert( _w, mVec128, 3 ); + return *this; +} + +inline float Quat::getW( ) const +{ + return spu_extract( mVec128, 3 ); +} + +inline Quat & Quat::setElem( int idx, float value ) +{ + mVec128 = spu_insert( value, mVec128, idx ); + return *this; +} + +inline float Quat::getElem( int idx ) const +{ + return spu_extract( mVec128, idx ); +} + +inline VecIdx Quat::operator []( int idx ) +{ + return VecIdx( mVec128, idx ); +} + +inline float Quat::operator []( int idx ) const +{ + return spu_extract( mVec128, idx ); +} + +inline const Quat Quat::operator +( Quat quat ) const +{ + return Quat( spu_add( mVec128, quat.mVec128 ) ); +} + +inline const Quat Quat::operator -( Quat quat ) const +{ + return Quat( spu_sub( mVec128, quat.mVec128 ) ); +} + +inline const Quat Quat::operator *( float scalar ) const +{ + return Quat( spu_mul( mVec128, spu_splats(scalar) ) ); +} + +inline Quat & Quat::operator +=( Quat quat ) +{ + *this = *this + quat; + return *this; +} + +inline Quat & Quat::operator -=( Quat quat ) +{ + *this = *this - quat; + return *this; +} + +inline Quat & Quat::operator *=( float scalar ) +{ + *this = *this * scalar; + return *this; +} + +inline const Quat Quat::operator /( float scalar ) const +{ + return Quat( divf4( mVec128, spu_splats(scalar) ) ); +} + +inline Quat & Quat::operator /=( float scalar ) +{ + *this = *this / scalar; + return *this; +} + +inline const Quat Quat::operator -( ) const +{ + return Quat( negatef4( mVec128 ) ); +} + +inline const Quat operator *( float scalar, Quat quat ) +{ + return quat * scalar; +} + +inline float dot( Quat quat0, Quat quat1 ) +{ + return spu_extract( _vmathVfDot4( quat0.get128(), quat1.get128() ), 0 ); +} + +inline float norm( Quat quat ) +{ + return spu_extract( _vmathVfDot4( quat.get128(), quat.get128() ), 0 ); +} + +inline float length( Quat quat ) +{ + return sqrtf( norm( quat ) ); +} + +inline const Quat normalize( Quat quat ) +{ + vec_float4 dot = _vmathVfDot4( quat.get128(), quat.get128() ); + return Quat( spu_mul( quat.get128(), rsqrtf4( dot ) ) ); +} + +inline const Quat Quat::rotation( Vector3 unitVec0, Vector3 unitVec1 ) +{ + Vector3 crossVec; + vec_float4 cosAngle, cosAngleX2Plus2, recipCosHalfAngleX2, cosHalfAngleX2, res; + cosAngle = _vmathVfDot3( unitVec0.get128(), unitVec1.get128() ); + cosAngle = spu_shuffle( cosAngle, cosAngle, (vec_uchar16)spu_splats(0x00010203) ); + cosAngleX2Plus2 = spu_madd( cosAngle, spu_splats(2.0f), spu_splats(2.0f) ); + recipCosHalfAngleX2 = rsqrtf4( cosAngleX2Plus2 ); + cosHalfAngleX2 = spu_mul( recipCosHalfAngleX2, cosAngleX2Plus2 ); + crossVec = cross( unitVec0, unitVec1 ); + res = spu_mul( crossVec.get128(), recipCosHalfAngleX2 ); + res = spu_sel( res, spu_mul( cosHalfAngleX2, spu_splats(0.5f) ), (vec_uint4)spu_maskb(0x000f) ); + return Quat( res ); +} + +inline const Quat Quat::rotation( float radians, Vector3 unitVec ) +{ + vec_float4 s, c, angle, res; + angle = spu_mul( spu_splats(radians), spu_splats(0.5f) ); + sincosf4( angle, &s, &c ); + res = spu_sel( spu_mul( unitVec.get128(), s ), c, (vec_uint4)spu_maskb(0x000f) ); + return Quat( res ); +} + +inline const Quat Quat::rotationX( float radians ) +{ + vec_float4 s, c, angle, res; + angle = spu_mul( spu_splats(radians), spu_splats(0.5f) ); + sincosf4( angle, &s, &c ); + res = spu_sel( spu_splats(0.0f), s, (vec_uint4)spu_maskb(0xf000) ); + res = spu_sel( res, c, (vec_uint4)spu_maskb(0x000f) ); + return Quat( res ); +} + +inline const Quat Quat::rotationY( float radians ) +{ + vec_float4 s, c, angle, res; + angle = spu_mul( spu_splats(radians), spu_splats(0.5f) ); + sincosf4( angle, &s, &c ); + res = spu_sel( spu_splats(0.0f), s, (vec_uint4)spu_maskb(0x0f00) ); + res = spu_sel( res, c, (vec_uint4)spu_maskb(0x000f) ); + return Quat( res ); +} + +inline const Quat Quat::rotationZ( float radians ) +{ + vec_float4 s, c, angle, res; + angle = spu_mul( spu_splats(radians), spu_splats(0.5f) ); + sincosf4( angle, &s, &c ); + res = spu_sel( spu_splats(0.0f), s, (vec_uint4)spu_maskb(0x00f0) ); + res = spu_sel( res, c, (vec_uint4)spu_maskb(0x000f) ); + return Quat( res ); +} + +inline const Quat Quat::operator *( Quat quat ) const +{ + vec_float4 ldata, rdata, qv, tmp0, tmp1, tmp2, tmp3; + vec_float4 product, l_wxyz, r_wxyz, xy, qw; + ldata = mVec128; + rdata = quat.mVec128; + vec_uchar16 shuffle_wwww = (vec_uchar16)spu_splats((int)0x0c0d0e0f); + tmp0 = spu_shuffle( ldata, ldata, _VECTORMATH_SHUF_YZXW ); + tmp1 = spu_shuffle( rdata, rdata, _VECTORMATH_SHUF_ZXYW ); + tmp2 = spu_shuffle( ldata, ldata, _VECTORMATH_SHUF_ZXYW ); + tmp3 = spu_shuffle( rdata, rdata, _VECTORMATH_SHUF_YZXW ); + qv = spu_mul( spu_shuffle( ldata, ldata, shuffle_wwww ), rdata ); + qv = spu_madd( spu_shuffle( rdata, rdata, shuffle_wwww ), ldata, qv ); + qv = spu_madd( tmp0, tmp1, qv ); + qv = spu_nmsub( tmp2, tmp3, qv ); + product = spu_mul( ldata, rdata ); + l_wxyz = spu_rlqwbyte( ldata, 12 ); + r_wxyz = spu_rlqwbyte( rdata, 12 ); + qw = spu_nmsub( l_wxyz, r_wxyz, product ); + xy = spu_madd( l_wxyz, r_wxyz, product ); + qw = spu_sub( qw, spu_rlqwbyte( xy, 8 ) ); + return Quat( spu_sel( qv, qw, (vec_uint4)spu_maskb( 0x000f ) ) ); +} + +inline Quat & Quat::operator *=( Quat quat ) +{ + *this = *this * quat; + return *this; +} + +inline const Vector3 rotate( Quat quat, Vector3 vec ) +{ + vec_float4 qdata, vdata, product, tmp0, tmp1, tmp2, tmp3, wwww, qv, qw, res; + qdata = quat.get128(); + vdata = vec.get128(); + vec_uchar16 shuffle_xxxx = (vec_uchar16)spu_splats((int)0x00010203); + vec_uchar16 shuffle_wwww = (vec_uchar16)spu_splats((int)0x0c0d0e0f); + tmp0 = spu_shuffle( qdata, qdata, _VECTORMATH_SHUF_YZXW ); + tmp1 = spu_shuffle( vdata, vdata, _VECTORMATH_SHUF_ZXYW ); + tmp2 = spu_shuffle( qdata, qdata, _VECTORMATH_SHUF_ZXYW ); + tmp3 = spu_shuffle( vdata, vdata, _VECTORMATH_SHUF_YZXW ); + wwww = spu_shuffle( qdata, qdata, shuffle_wwww ); + qv = spu_mul( wwww, vdata ); + qv = spu_madd( tmp0, tmp1, qv ); + qv = spu_nmsub( tmp2, tmp3, qv ); + product = spu_mul( qdata, vdata ); + qw = spu_madd( spu_rlqwbyte( qdata, 4 ), spu_rlqwbyte( vdata, 4 ), product ); + qw = spu_add( spu_rlqwbyte( product, 8 ), qw ); + tmp1 = spu_shuffle( qv, qv, _VECTORMATH_SHUF_ZXYW ); + tmp3 = spu_shuffle( qv, qv, _VECTORMATH_SHUF_YZXW ); + res = spu_mul( spu_shuffle( qw, qw, shuffle_xxxx ), qdata ); + res = spu_madd( wwww, qv, res ); + res = spu_madd( tmp0, tmp1, res ); + res = spu_nmsub( tmp2, tmp3, res ); + return Vector3( res ); +} + +inline const Quat conj( Quat quat ) +{ + return Quat( spu_xor( quat.get128(), ((vec_float4)(vec_int4){0x80000000,0x80000000,0x80000000,0}) ) ); +} + +inline const Quat select( Quat quat0, Quat quat1, bool select1 ) +{ + return Quat( spu_sel( quat0.get128(), quat1.get128(), spu_splats( (unsigned int)-(select1 > 0) ) ) ); +} + +#ifdef _VECTORMATH_DEBUG + +inline void print( Quat quat ) +{ + union { vec_float4 v; float s[4]; } tmp; + tmp.v = quat.get128(); + printf( "( %f %f %f %f )\n", tmp.s[0], tmp.s[1], tmp.s[2], tmp.s[3] ); +} + +inline void print( Quat quat, const char * name ) +{ + union { vec_float4 v; float s[4]; } tmp; + tmp.v = quat.get128(); + printf( "%s: ( %f %f %f %f )\n", name, tmp.s[0], tmp.s[1], tmp.s[2], tmp.s[3] ); +} + +#endif + +} // namespace Aos +} // namespace Vectormath + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/spu/cpp/quat_soa.h b/Extras/vectormathlibrary/include/vectormath/spu/cpp/quat_soa.h new file mode 100644 index 000000000..88c2884fa --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/spu/cpp/quat_soa.h @@ -0,0 +1,483 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_QUAT_SOA_CPP_H +#define _VECTORMATH_QUAT_SOA_CPP_H +//----------------------------------------------------------------------------- +// Definitions + +#ifndef _VECTORMATH_INTERNAL_FUNCTIONS +#define _VECTORMATH_INTERNAL_FUNCTIONS + +#endif + +namespace Vectormath { +namespace Soa { + +inline Quat::Quat( const Quat & quat ) +{ + mX = quat.mX; + mY = quat.mY; + mZ = quat.mZ; + mW = quat.mW; +} + +inline Quat::Quat( vec_float4 _x, vec_float4 _y, vec_float4 _z, vec_float4 _w ) +{ + mX = _x; + mY = _y; + mZ = _z; + mW = _w; +} + +inline Quat::Quat( const Vector3 & xyz, vec_float4 _w ) +{ + this->setXYZ( xyz ); + this->setW( _w ); +} + +inline Quat::Quat( const Vector4 & vec ) +{ + mX = vec.getX(); + mY = vec.getY(); + mZ = vec.getZ(); + mW = vec.getW(); +} + +inline Quat::Quat( vec_float4 scalar ) +{ + mX = scalar; + mY = scalar; + mZ = scalar; + mW = scalar; +} + +inline Quat::Quat( Aos::Quat quat ) +{ + vec_uchar16 shuffle_xxxx = (vec_uchar16)spu_splats((int)0x00010203); + vec_uchar16 shuffle_yyyy = (vec_uchar16)spu_splats((int)0x04050607); + vec_uchar16 shuffle_zzzz = (vec_uchar16)spu_splats((int)0x08090a0b); + vec_uchar16 shuffle_wwww = (vec_uchar16)spu_splats((int)0x0c0d0e0f); + vec_float4 vec128 = quat.get128(); + mX = spu_shuffle( vec128, vec128, shuffle_xxxx ); + mY = spu_shuffle( vec128, vec128, shuffle_yyyy ); + mZ = spu_shuffle( vec128, vec128, shuffle_zzzz ); + mW = spu_shuffle( vec128, vec128, shuffle_wwww ); +} + +inline Quat::Quat( Aos::Quat quat0, Aos::Quat quat1, Aos::Quat quat2, Aos::Quat quat3 ) +{ + vec_float4 tmp0, tmp1, tmp2, tmp3; + tmp0 = spu_shuffle( quat0.get128(), quat2.get128(), _VECTORMATH_SHUF_XAYB ); + tmp1 = spu_shuffle( quat1.get128(), quat3.get128(), _VECTORMATH_SHUF_XAYB ); + tmp2 = spu_shuffle( quat0.get128(), quat2.get128(), _VECTORMATH_SHUF_ZCWD ); + tmp3 = spu_shuffle( quat1.get128(), quat3.get128(), _VECTORMATH_SHUF_ZCWD ); + mX = spu_shuffle( tmp0, tmp1, _VECTORMATH_SHUF_XAYB ); + mY = spu_shuffle( tmp0, tmp1, _VECTORMATH_SHUF_ZCWD ); + mZ = spu_shuffle( tmp2, tmp3, _VECTORMATH_SHUF_XAYB ); + mW = spu_shuffle( tmp2, tmp3, _VECTORMATH_SHUF_ZCWD ); +} + +inline const Quat Quat::identity( ) +{ + return Quat( spu_splats(0.0f), spu_splats(0.0f), spu_splats(0.0f), spu_splats(1.0f) ); +} + +inline const Quat lerp( vec_float4 t, const Quat & quat0, const Quat & quat1 ) +{ + return ( quat0 + ( ( quat1 - quat0 ) * t ) ); +} + +inline const Quat slerp( vec_float4 t, const Quat & unitQuat0, const Quat & unitQuat1 ) +{ + Quat start; + vec_float4 recipSinAngle, scale0, scale1, cosAngle, angle; + vec_uint4 selectMask; + cosAngle = dot( unitQuat0, unitQuat1 ); + selectMask = (vec_uint4)spu_cmpgt( spu_splats(0.0f), cosAngle ); + cosAngle = spu_sel( cosAngle, negatef4( cosAngle ), selectMask ); + start.setX( spu_sel( unitQuat0.getX(), negatef4( unitQuat0.getX() ), selectMask ) ); + start.setY( spu_sel( unitQuat0.getY(), negatef4( unitQuat0.getY() ), selectMask ) ); + start.setZ( spu_sel( unitQuat0.getZ(), negatef4( unitQuat0.getZ() ), selectMask ) ); + start.setW( spu_sel( unitQuat0.getW(), negatef4( unitQuat0.getW() ), selectMask ) ); + selectMask = (vec_uint4)spu_cmpgt( spu_splats(_VECTORMATH_SLERP_TOL), cosAngle ); + angle = acosf4( cosAngle ); + recipSinAngle = recipf4( sinf4( angle ) ); + scale0 = spu_sel( spu_sub( spu_splats(1.0f), t ), spu_mul( sinf4( spu_mul( spu_sub( spu_splats(1.0f), t ), angle ) ), recipSinAngle ), selectMask ); + scale1 = spu_sel( t, spu_mul( sinf4( spu_mul( t, angle ) ), recipSinAngle ), selectMask ); + return ( ( start * scale0 ) + ( unitQuat1 * scale1 ) ); +} + +inline const Quat squad( vec_float4 t, const Quat & unitQuat0, const Quat & unitQuat1, const Quat & unitQuat2, const Quat & unitQuat3 ) +{ + Quat tmp0, tmp1; + tmp0 = slerp( t, unitQuat0, unitQuat3 ); + tmp1 = slerp( t, unitQuat1, unitQuat2 ); + return slerp( spu_mul( spu_mul( spu_splats(2.0f), t ), spu_sub( spu_splats(1.0f), t ) ), tmp0, tmp1 ); +} + +inline void Quat::get4Aos( Aos::Quat & result0, Aos::Quat & result1, Aos::Quat & result2, Aos::Quat & result3 ) const +{ + vec_float4 tmp0, tmp1, tmp2, tmp3; + tmp0 = spu_shuffle( mX, mZ, _VECTORMATH_SHUF_XAYB ); + tmp1 = spu_shuffle( mY, mW, _VECTORMATH_SHUF_XAYB ); + tmp2 = spu_shuffle( mX, mZ, _VECTORMATH_SHUF_ZCWD ); + tmp3 = spu_shuffle( mY, mW, _VECTORMATH_SHUF_ZCWD ); + result0 = Aos::Quat( spu_shuffle( tmp0, tmp1, _VECTORMATH_SHUF_XAYB ) ); + result1 = Aos::Quat( spu_shuffle( tmp0, tmp1, _VECTORMATH_SHUF_ZCWD ) ); + result2 = Aos::Quat( spu_shuffle( tmp2, tmp3, _VECTORMATH_SHUF_XAYB ) ); + result3 = Aos::Quat( spu_shuffle( tmp2, tmp3, _VECTORMATH_SHUF_ZCWD ) ); +} + +inline Quat & Quat::operator =( const Quat & quat ) +{ + mX = quat.mX; + mY = quat.mY; + mZ = quat.mZ; + mW = quat.mW; + return *this; +} + +inline Quat & Quat::setXYZ( const Vector3 & vec ) +{ + mX = vec.getX(); + mY = vec.getY(); + mZ = vec.getZ(); + return *this; +} + +inline const Vector3 Quat::getXYZ( ) const +{ + return Vector3( mX, mY, mZ ); +} + +inline Quat & Quat::setX( vec_float4 _x ) +{ + mX = _x; + return *this; +} + +inline vec_float4 Quat::getX( ) const +{ + return mX; +} + +inline Quat & Quat::setY( vec_float4 _y ) +{ + mY = _y; + return *this; +} + +inline vec_float4 Quat::getY( ) const +{ + return mY; +} + +inline Quat & Quat::setZ( vec_float4 _z ) +{ + mZ = _z; + return *this; +} + +inline vec_float4 Quat::getZ( ) const +{ + return mZ; +} + +inline Quat & Quat::setW( vec_float4 _w ) +{ + mW = _w; + return *this; +} + +inline vec_float4 Quat::getW( ) const +{ + return mW; +} + +inline Quat & Quat::setElem( int idx, vec_float4 value ) +{ + *(&mX + idx) = value; + return *this; +} + +inline vec_float4 Quat::getElem( int idx ) const +{ + return *(&mX + idx); +} + +inline Quat::vec_float4_t & Quat::operator []( int idx ) +{ + return *(&mX + idx); +} + +inline vec_float4 Quat::operator []( int idx ) const +{ + return *(&mX + idx); +} + +inline const Quat Quat::operator +( const Quat & quat ) const +{ + return Quat( + spu_add( mX, quat.mX ), + spu_add( mY, quat.mY ), + spu_add( mZ, quat.mZ ), + spu_add( mW, quat.mW ) + ); +} + +inline const Quat Quat::operator -( const Quat & quat ) const +{ + return Quat( + spu_sub( mX, quat.mX ), + spu_sub( mY, quat.mY ), + spu_sub( mZ, quat.mZ ), + spu_sub( mW, quat.mW ) + ); +} + +inline const Quat Quat::operator *( vec_float4 scalar ) const +{ + return Quat( + spu_mul( mX, scalar ), + spu_mul( mY, scalar ), + spu_mul( mZ, scalar ), + spu_mul( mW, scalar ) + ); +} + +inline Quat & Quat::operator +=( const Quat & quat ) +{ + *this = *this + quat; + return *this; +} + +inline Quat & Quat::operator -=( const Quat & quat ) +{ + *this = *this - quat; + return *this; +} + +inline Quat & Quat::operator *=( vec_float4 scalar ) +{ + *this = *this * scalar; + return *this; +} + +inline const Quat Quat::operator /( vec_float4 scalar ) const +{ + return Quat( + divf4( mX, scalar ), + divf4( mY, scalar ), + divf4( mZ, scalar ), + divf4( mW, scalar ) + ); +} + +inline Quat & Quat::operator /=( vec_float4 scalar ) +{ + *this = *this / scalar; + return *this; +} + +inline const Quat Quat::operator -( ) const +{ + return Quat( + negatef4( mX ), + negatef4( mY ), + negatef4( mZ ), + negatef4( mW ) + ); +} + +inline const Quat operator *( vec_float4 scalar, const Quat & quat ) +{ + return quat * scalar; +} + +inline vec_float4 dot( const Quat & quat0, const Quat & quat1 ) +{ + vec_float4 result; + result = spu_mul( quat0.getX(), quat1.getX() ); + result = spu_add( result, spu_mul( quat0.getY(), quat1.getY() ) ); + result = spu_add( result, spu_mul( quat0.getZ(), quat1.getZ() ) ); + result = spu_add( result, spu_mul( quat0.getW(), quat1.getW() ) ); + return result; +} + +inline vec_float4 norm( const Quat & quat ) +{ + vec_float4 result; + result = spu_mul( quat.getX(), quat.getX() ); + result = spu_add( result, spu_mul( quat.getY(), quat.getY() ) ); + result = spu_add( result, spu_mul( quat.getZ(), quat.getZ() ) ); + result = spu_add( result, spu_mul( quat.getW(), quat.getW() ) ); + return result; +} + +inline vec_float4 length( const Quat & quat ) +{ + return sqrtf4( norm( quat ) ); +} + +inline const Quat normalize( const Quat & quat ) +{ + vec_float4 lenSqr, lenInv; + lenSqr = norm( quat ); + lenInv = rsqrtf4( lenSqr ); + return Quat( + spu_mul( quat.getX(), lenInv ), + spu_mul( quat.getY(), lenInv ), + spu_mul( quat.getZ(), lenInv ), + spu_mul( quat.getW(), lenInv ) + ); +} + +inline const Quat Quat::rotation( const Vector3 & unitVec0, const Vector3 & unitVec1 ) +{ + vec_float4 cosHalfAngleX2, recipCosHalfAngleX2; + cosHalfAngleX2 = sqrtf4( spu_mul( spu_splats(2.0f), spu_add( spu_splats(1.0f), dot( unitVec0, unitVec1 ) ) ) ); + recipCosHalfAngleX2 = recipf4( cosHalfAngleX2 ); + return Quat( ( cross( unitVec0, unitVec1 ) * recipCosHalfAngleX2 ), spu_mul( cosHalfAngleX2, spu_splats(0.5f) ) ); +} + +inline const Quat Quat::rotation( vec_float4 radians, const Vector3 & unitVec ) +{ + vec_float4 s, c, angle; + angle = spu_mul( radians, spu_splats(0.5f) ); + sincosf4( angle, &s, &c ); + return Quat( ( unitVec * s ), c ); +} + +inline const Quat Quat::rotationX( vec_float4 radians ) +{ + vec_float4 s, c, angle; + angle = spu_mul( radians, spu_splats(0.5f) ); + sincosf4( angle, &s, &c ); + return Quat( s, spu_splats(0.0f), spu_splats(0.0f), c ); +} + +inline const Quat Quat::rotationY( vec_float4 radians ) +{ + vec_float4 s, c, angle; + angle = spu_mul( radians, spu_splats(0.5f) ); + sincosf4( angle, &s, &c ); + return Quat( spu_splats(0.0f), s, spu_splats(0.0f), c ); +} + +inline const Quat Quat::rotationZ( vec_float4 radians ) +{ + vec_float4 s, c, angle; + angle = spu_mul( radians, spu_splats(0.5f) ); + sincosf4( angle, &s, &c ); + return Quat( spu_splats(0.0f), spu_splats(0.0f), s, c ); +} + +inline const Quat Quat::operator *( const Quat & quat ) const +{ + return Quat( + spu_sub( spu_add( spu_add( spu_mul( mW, quat.mX ), spu_mul( mX, quat.mW ) ), spu_mul( mY, quat.mZ ) ), spu_mul( mZ, quat.mY ) ), + spu_sub( spu_add( spu_add( spu_mul( mW, quat.mY ), spu_mul( mY, quat.mW ) ), spu_mul( mZ, quat.mX ) ), spu_mul( mX, quat.mZ ) ), + spu_sub( spu_add( spu_add( spu_mul( mW, quat.mZ ), spu_mul( mZ, quat.mW ) ), spu_mul( mX, quat.mY ) ), spu_mul( mY, quat.mX ) ), + spu_sub( spu_sub( spu_sub( spu_mul( mW, quat.mW ), spu_mul( mX, quat.mX ) ), spu_mul( mY, quat.mY ) ), spu_mul( mZ, quat.mZ ) ) + ); +} + +inline Quat & Quat::operator *=( const Quat & quat ) +{ + *this = *this * quat; + return *this; +} + +inline const Vector3 rotate( const Quat & quat, const Vector3 & vec ) +{ + vec_float4 tmpX, tmpY, tmpZ, tmpW; + tmpX = spu_sub( spu_add( spu_mul( quat.getW(), vec.getX() ), spu_mul( quat.getY(), vec.getZ() ) ), spu_mul( quat.getZ(), vec.getY() ) ); + tmpY = spu_sub( spu_add( spu_mul( quat.getW(), vec.getY() ), spu_mul( quat.getZ(), vec.getX() ) ), spu_mul( quat.getX(), vec.getZ() ) ); + tmpZ = spu_sub( spu_add( spu_mul( quat.getW(), vec.getZ() ), spu_mul( quat.getX(), vec.getY() ) ), spu_mul( quat.getY(), vec.getX() ) ); + tmpW = spu_add( spu_add( spu_mul( quat.getX(), vec.getX() ), spu_mul( quat.getY(), vec.getY() ) ), spu_mul( quat.getZ(), vec.getZ() ) ); + return Vector3( + spu_add( spu_sub( spu_add( spu_mul( tmpW, quat.getX() ), spu_mul( tmpX, quat.getW() ) ), spu_mul( tmpY, quat.getZ() ) ), spu_mul( tmpZ, quat.getY() ) ), + spu_add( spu_sub( spu_add( spu_mul( tmpW, quat.getY() ), spu_mul( tmpY, quat.getW() ) ), spu_mul( tmpZ, quat.getX() ) ), spu_mul( tmpX, quat.getZ() ) ), + spu_add( spu_sub( spu_add( spu_mul( tmpW, quat.getZ() ), spu_mul( tmpZ, quat.getW() ) ), spu_mul( tmpX, quat.getY() ) ), spu_mul( tmpY, quat.getX() ) ) + ); +} + +inline const Quat conj( const Quat & quat ) +{ + return Quat( negatef4( quat.getX() ), negatef4( quat.getY() ), negatef4( quat.getZ() ), quat.getW() ); +} + +inline const Quat select( const Quat & quat0, const Quat & quat1, vec_uint4 select1 ) +{ + return Quat( + spu_sel( quat0.getX(), quat1.getX(), select1 ), + spu_sel( quat0.getY(), quat1.getY(), select1 ), + spu_sel( quat0.getZ(), quat1.getZ(), select1 ), + spu_sel( quat0.getW(), quat1.getW(), select1 ) + ); +} + +#ifdef _VECTORMATH_DEBUG + +inline void print( const Quat & quat ) +{ + Aos::Quat vec0, vec1, vec2, vec3; + quat.get4Aos( vec0, vec1, vec2, vec3 ); + printf("slot 0:\n"); + print( vec0 ); + printf("slot 1:\n"); + print( vec1 ); + printf("slot 2:\n"); + print( vec2 ); + printf("slot 3:\n"); + print( vec3 ); +} + +inline void print( const Quat & quat, const char * name ) +{ + Aos::Quat vec0, vec1, vec2, vec3; + printf( "%s:\n", name ); + quat.get4Aos( vec0, vec1, vec2, vec3 ); + printf("slot 0:\n"); + print( vec0 ); + printf("slot 1:\n"); + print( vec1 ); + printf("slot 2:\n"); + print( vec2 ); + printf("slot 3:\n"); + print( vec3 ); +} + +#endif + +} // namespace Soa +} // namespace Vectormath + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/spu/cpp/vec_aos.h b/Extras/vectormathlibrary/include/vectormath/spu/cpp/vec_aos.h new file mode 100644 index 000000000..c983f1817 --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/spu/cpp/vec_aos.h @@ -0,0 +1,1167 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_VEC_AOS_CPP_H +#define _VECTORMATH_VEC_AOS_CPP_H +//----------------------------------------------------------------------------- +// Constants +// for shuffles, words are labeled [x,y,z,w] [a,b,c,d] + +#define _VECTORMATH_SHUF_X 0x00010203 +#define _VECTORMATH_SHUF_Y 0x04050607 +#define _VECTORMATH_SHUF_Z 0x08090a0b +#define _VECTORMATH_SHUF_W 0x0c0d0e0f +#define _VECTORMATH_SHUF_A 0x10111213 +#define _VECTORMATH_SHUF_B 0x14151617 +#define _VECTORMATH_SHUF_C 0x18191a1b +#define _VECTORMATH_SHUF_D 0x1c1d1e1f +#define _VECTORMATH_SHUF_0 0x80808080 +#define _VECTORMATH_SHUF_XYZA (vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_A } +#define _VECTORMATH_SHUF_ZXYW (vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_W } +#define _VECTORMATH_SHUF_YZXW (vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_W } +#define _VECTORMATH_SHUF_WABC (vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_W, _VECTORMATH_SHUF_A, _VECTORMATH_SHUF_B, _VECTORMATH_SHUF_C } +#define _VECTORMATH_SHUF_ZWAB (vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_W, _VECTORMATH_SHUF_A, _VECTORMATH_SHUF_B } +#define _VECTORMATH_SHUF_XYZA (vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_A } +#define _VECTORMATH_SHUF_YZAB (vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_A, _VECTORMATH_SHUF_B } +#define _VECTORMATH_SHUF_ZABC (vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_A, _VECTORMATH_SHUF_B, _VECTORMATH_SHUF_C } +#define _VECTORMATH_UNIT_1000 (vec_float4){ 1.0f, 0.0f, 0.0f, 0.0f } +#define _VECTORMATH_UNIT_0100 (vec_float4){ 0.0f, 1.0f, 0.0f, 0.0f } +#define _VECTORMATH_UNIT_0010 (vec_float4){ 0.0f, 0.0f, 1.0f, 0.0f } +#define _VECTORMATH_UNIT_0001 (vec_float4){ 0.0f, 0.0f, 0.0f, 1.0f } +#define _VECTORMATH_SLERP_TOL 0.999f + +//----------------------------------------------------------------------------- +// Definitions + +#ifndef _VECTORMATH_INTERNAL_FUNCTIONS +#define _VECTORMATH_INTERNAL_FUNCTIONS + +static inline vec_float4 _vmathVfDot3( vec_float4 vec0, vec_float4 vec1 ) +{ + vec_float4 result; + result = spu_mul( vec0, vec1 ); + result = spu_madd( spu_rlqwbyte( vec0, 4 ), spu_rlqwbyte( vec1, 4 ), result ); + return spu_madd( spu_rlqwbyte( vec0, 8 ), spu_rlqwbyte( vec1, 8 ), result ); +} + +static inline vec_float4 _vmathVfDot4( vec_float4 vec0, vec_float4 vec1 ) +{ + vec_float4 result; + result = spu_mul( vec0, vec1 ); + result = spu_madd( spu_rlqwbyte( vec0, 4 ), spu_rlqwbyte( vec1, 4 ), result ); + return spu_add( spu_rlqwbyte( result, 8 ), result ); +} + +static inline vec_float4 _vmathVfCross( vec_float4 vec0, vec_float4 vec1 ) +{ + vec_float4 tmp0, tmp1, tmp2, tmp3, result; + tmp0 = spu_shuffle( vec0, vec0, _VECTORMATH_SHUF_YZXW ); + tmp1 = spu_shuffle( vec1, vec1, _VECTORMATH_SHUF_ZXYW ); + tmp2 = spu_shuffle( vec0, vec0, _VECTORMATH_SHUF_ZXYW ); + tmp3 = spu_shuffle( vec1, vec1, _VECTORMATH_SHUF_YZXW ); + result = spu_mul( tmp0, tmp1 ); + result = spu_nmsub( tmp2, tmp3, result ); + return result; +} + +static inline vec_uint4 _vmathVfToHalfFloatsUnpacked(vec_float4 v) +{ + vec_int4 bexp; + vec_uint4 mant, sign, hfloat; + vec_uint4 notZero, isInf; + const vec_uint4 hfloatInf = spu_splats(0x00007c00u); + const vec_uint4 mergeMant = spu_splats(0x000003ffu); + const vec_uint4 mergeSign = spu_splats(0x00008000u); + + sign = spu_rlmask((vec_uint4)v, -16); + mant = spu_rlmask((vec_uint4)v, -13); + bexp = spu_and(spu_rlmask((vec_int4)v, -23), 0xff); + + notZero = spu_cmpgt(bexp, 112); + isInf = spu_cmpgt(bexp, 142); + + bexp = spu_add(bexp, -112); + bexp = spu_sl(bexp, 10); + + hfloat = spu_sel((vec_uint4)bexp, mant, mergeMant); + hfloat = spu_sel(spu_splats(0u), hfloat, notZero); + hfloat = spu_sel(hfloat, hfloatInf, isInf); + hfloat = spu_sel(hfloat, sign, mergeSign); + + return hfloat; +} + +static inline vec_ushort8 _vmath2VfToHalfFloats(vec_float4 u, vec_float4 v) +{ + vec_uint4 hfloat_u, hfloat_v; + const vec_uchar16 pack = (vec_uchar16){2,3,6,7,10,11,14,15,18,19,22,23,26,27,30,31}; + hfloat_u = _vmathVfToHalfFloatsUnpacked(u); + hfloat_v = _vmathVfToHalfFloatsUnpacked(v); + return (vec_ushort8)spu_shuffle(hfloat_u, hfloat_v, pack); +} + +#endif + +namespace Vectormath { +namespace Aos { + +inline VecIdx::operator float() const +{ + return spu_extract( ref, i ); +} + +inline float VecIdx::operator =( float scalar ) +{ + ref = spu_insert( scalar, ref, i ); + return scalar; +} + +inline float VecIdx::operator =( const VecIdx& scalar ) +{ + return *this = float(scalar); +} + +inline float VecIdx::operator *=( float scalar ) +{ + float tmp = spu_extract( ref, i ) * scalar; + ref = spu_insert( tmp, ref, i ); + return tmp; +} + +inline float VecIdx::operator /=( float scalar ) +{ + float tmp = spu_extract( ref, i ) / scalar; + ref = spu_insert( tmp, ref, i ); + return tmp; +} + +inline float VecIdx::operator +=( float scalar ) +{ + float tmp = spu_extract( ref, i ) + scalar; + ref = spu_insert( tmp, ref, i ); + return tmp; +} + +inline float VecIdx::operator -=( float scalar ) +{ + float tmp = spu_extract( ref, i ) - scalar; + ref = spu_insert( tmp, ref, i ); + return tmp; +} + +inline Vector3::Vector3( float _x, float _y, float _z ) +{ + mVec128 = (vec_float4){ _x, _y, _z, 0.0f }; +} + +inline Vector3::Vector3( Point3 pnt ) +{ + mVec128 = pnt.get128(); +} + +inline Vector3::Vector3( float scalar ) +{ + mVec128 = spu_splats( scalar ); +} + +inline Vector3::Vector3( vec_float4 vf4 ) +{ + mVec128 = vf4; +} + +inline const Vector3 Vector3::xAxis( ) +{ + return Vector3( _VECTORMATH_UNIT_1000 ); +} + +inline const Vector3 Vector3::yAxis( ) +{ + return Vector3( _VECTORMATH_UNIT_0100 ); +} + +inline const Vector3 Vector3::zAxis( ) +{ + return Vector3( _VECTORMATH_UNIT_0010 ); +} + +inline const Vector3 lerp( float t, Vector3 vec0, Vector3 vec1 ) +{ + return ( vec0 + ( ( vec1 - vec0 ) * t ) ); +} + +inline const Vector3 slerp( float t, Vector3 unitVec0, Vector3 unitVec1 ) +{ + vec_float4 scales, scale0, scale1, cosAngle, angle, tttt, oneMinusT, angles, sines; + vec_uint4 selectMask; + vec_uchar16 shuffle_xxxx = (vec_uchar16)spu_splats((int)0x00010203); + vec_uchar16 shuffle_yyyy = (vec_uchar16)spu_splats((int)0x04050607); + vec_uchar16 shuffle_zzzz = (vec_uchar16)spu_splats((int)0x08090a0b); + cosAngle = _vmathVfDot3( unitVec0.get128(), unitVec1.get128() ); + cosAngle = spu_shuffle( cosAngle, cosAngle, shuffle_xxxx ); + selectMask = (vec_uint4)spu_cmpgt( spu_splats(_VECTORMATH_SLERP_TOL), cosAngle ); + angle = acosf4( cosAngle ); + tttt = spu_splats(t); + oneMinusT = spu_sub( spu_splats(1.0f), tttt ); + angles = spu_sel( spu_splats(1.0f), oneMinusT, (vec_uint4)spu_maskb(0x0f00) ); + angles = spu_sel( angles, tttt, (vec_uint4)spu_maskb(0x00f0) ); + angles = spu_mul( angles, angle ); + sines = sinf4( angles ); + scales = divf4( sines, spu_shuffle( sines, sines, shuffle_xxxx ) ); + scale0 = spu_sel( oneMinusT, spu_shuffle( scales, scales, shuffle_yyyy ), selectMask ); + scale1 = spu_sel( tttt, spu_shuffle( scales, scales, shuffle_zzzz ), selectMask ); + return Vector3( spu_madd( unitVec0.get128(), scale0, spu_mul( unitVec1.get128(), scale1 ) ) ); +} + +inline vec_float4 Vector3::get128( ) const +{ + return mVec128; +} + +inline void storeXYZ( Vector3 vec, vec_float4 * quad ) +{ + vec_float4 dstVec = *quad; + vec_uint4 mask = (vec_uint4)spu_maskb(0x000f); + dstVec = spu_sel(vec.get128(), dstVec, mask); + *quad = dstVec; +} + +inline void loadXYZArray( Vector3 & vec0, Vector3 & vec1, Vector3 & vec2, Vector3 & vec3, const vec_float4 * threeQuads ) +{ + vec_float4 xyzx, yzxy, zxyz, xyz1, xyz2, xyz3; + xyzx = threeQuads[0]; + yzxy = threeQuads[1]; + zxyz = threeQuads[2]; + xyz1 = spu_shuffle( xyzx, yzxy, _VECTORMATH_SHUF_WABC ); + xyz2 = spu_shuffle( yzxy, zxyz, _VECTORMATH_SHUF_ZWAB ); + xyz3 = spu_rlqwbyte( zxyz, 4 ); + vec0 = Vector3( xyzx ); + vec1 = Vector3( xyz1 ); + vec2 = Vector3( xyz2 ); + vec3 = Vector3( xyz3 ); +} + +inline void storeXYZArray( Vector3 vec0, Vector3 vec1, Vector3 vec2, Vector3 vec3, vec_float4 * threeQuads ) +{ + vec_float4 xyzx, yzxy, zxyz; + xyzx = spu_shuffle( vec0.get128(), vec1.get128(), _VECTORMATH_SHUF_XYZA ); + yzxy = spu_shuffle( vec1.get128(), vec2.get128(), _VECTORMATH_SHUF_YZAB ); + zxyz = spu_shuffle( vec2.get128(), vec3.get128(), _VECTORMATH_SHUF_ZABC ); + threeQuads[0] = xyzx; + threeQuads[1] = yzxy; + threeQuads[2] = zxyz; +} + +inline void storeHalfFloats( Vector3 vec0, Vector3 vec1, Vector3 vec2, Vector3 vec3, Vector3 vec4, Vector3 vec5, Vector3 vec6, Vector3 vec7, vec_ushort8 * threeQuads ) +{ + vec_float4 xyz0[3]; + vec_float4 xyz1[3]; + storeXYZArray( vec0, vec1, vec2, vec3, xyz0 ); + storeXYZArray( vec4, vec5, vec6, vec7, xyz1 ); + threeQuads[0] = _vmath2VfToHalfFloats(xyz0[0], xyz0[1]); + threeQuads[1] = _vmath2VfToHalfFloats(xyz0[2], xyz1[0]); + threeQuads[2] = _vmath2VfToHalfFloats(xyz1[1], xyz1[2]); +} + +inline Vector3 & Vector3::operator =( Vector3 vec ) +{ + mVec128 = vec.mVec128; + return *this; +} + +inline Vector3 & Vector3::setX( float _x ) +{ + mVec128 = spu_insert( _x, mVec128, 0 ); + return *this; +} + +inline float Vector3::getX( ) const +{ + return spu_extract( mVec128, 0 ); +} + +inline Vector3 & Vector3::setY( float _y ) +{ + mVec128 = spu_insert( _y, mVec128, 1 ); + return *this; +} + +inline float Vector3::getY( ) const +{ + return spu_extract( mVec128, 1 ); +} + +inline Vector3 & Vector3::setZ( float _z ) +{ + mVec128 = spu_insert( _z, mVec128, 2 ); + return *this; +} + +inline float Vector3::getZ( ) const +{ + return spu_extract( mVec128, 2 ); +} + +inline Vector3 & Vector3::setElem( int idx, float value ) +{ + mVec128 = spu_insert( value, mVec128, idx ); + return *this; +} + +inline float Vector3::getElem( int idx ) const +{ + return spu_extract( mVec128, idx ); +} + +inline VecIdx Vector3::operator []( int idx ) +{ + return VecIdx( mVec128, idx ); +} + +inline float Vector3::operator []( int idx ) const +{ + return spu_extract( mVec128, idx ); +} + +inline const Vector3 Vector3::operator +( Vector3 vec ) const +{ + return Vector3( spu_add( mVec128, vec.mVec128 ) ); +} + +inline const Vector3 Vector3::operator -( Vector3 vec ) const +{ + return Vector3( spu_sub( mVec128, vec.mVec128 ) ); +} + +inline const Point3 Vector3::operator +( Point3 pnt ) const +{ + return Point3( spu_add( mVec128, pnt.get128() ) ); +} + +inline const Vector3 Vector3::operator *( float scalar ) const +{ + return Vector3( spu_mul( mVec128, spu_splats(scalar) ) ); +} + +inline Vector3 & Vector3::operator +=( Vector3 vec ) +{ + *this = *this + vec; + return *this; +} + +inline Vector3 & Vector3::operator -=( Vector3 vec ) +{ + *this = *this - vec; + return *this; +} + +inline Vector3 & Vector3::operator *=( float scalar ) +{ + *this = *this * scalar; + return *this; +} + +inline const Vector3 Vector3::operator /( float scalar ) const +{ + return Vector3( divf4( mVec128, spu_splats(scalar) ) ); +} + +inline Vector3 & Vector3::operator /=( float scalar ) +{ + *this = *this / scalar; + return *this; +} + +inline const Vector3 Vector3::operator -( ) const +{ + return Vector3( negatef4( mVec128 ) ); +} + +inline const Vector3 operator *( float scalar, Vector3 vec ) +{ + return vec * scalar; +} + +inline const Vector3 mulPerElem( Vector3 vec0, Vector3 vec1 ) +{ + return Vector3( spu_mul( vec0.get128(), vec1.get128() ) ); +} + +inline const Vector3 divPerElem( Vector3 vec0, Vector3 vec1 ) +{ + return Vector3( divf4( vec0.get128(), vec1.get128() ) ); +} + +inline const Vector3 recipPerElem( Vector3 vec ) +{ + return Vector3( recipf4( vec.get128() ) ); +} + +inline const Vector3 sqrtPerElem( Vector3 vec ) +{ + return Vector3( sqrtf4( vec.get128() ) ); +} + +inline const Vector3 rsqrtPerElem( Vector3 vec ) +{ + return Vector3( rsqrtf4( vec.get128() ) ); +} + +inline const Vector3 absPerElem( Vector3 vec ) +{ + return Vector3( fabsf4( vec.get128() ) ); +} + +inline const Vector3 copySignPerElem( Vector3 vec0, Vector3 vec1 ) +{ + return Vector3( copysignf4( vec0.get128(), vec1.get128() ) ); +} + +inline const Vector3 maxPerElem( Vector3 vec0, Vector3 vec1 ) +{ + return Vector3( fmaxf4( vec0.get128(), vec1.get128() ) ); +} + +inline float maxElem( Vector3 vec ) +{ + vec_float4 result; + result = fmaxf4( spu_promote( spu_extract( vec.get128(), 1 ), 0 ), vec.get128() ); + result = fmaxf4( spu_promote( spu_extract( vec.get128(), 2 ), 0 ), result ); + return spu_extract( result, 0 ); +} + +inline const Vector3 minPerElem( Vector3 vec0, Vector3 vec1 ) +{ + return Vector3( fminf4( vec0.get128(), vec1.get128() ) ); +} + +inline float minElem( Vector3 vec ) +{ + vec_float4 result; + result = fminf4( spu_promote( spu_extract( vec.get128(), 1 ), 0 ), vec.get128() ); + result = fminf4( spu_promote( spu_extract( vec.get128(), 2 ), 0 ), result ); + return spu_extract( result, 0 ); +} + +inline float sum( Vector3 vec ) +{ + return + spu_extract( vec.get128(), 0 ) + + spu_extract( vec.get128(), 1 ) + + spu_extract( vec.get128(), 2 ); +} + +inline float dot( Vector3 vec0, Vector3 vec1 ) +{ + return spu_extract( _vmathVfDot3( vec0.get128(), vec1.get128() ), 0 ); +} + +inline float lengthSqr( Vector3 vec ) +{ + return spu_extract( _vmathVfDot3( vec.get128(), vec.get128() ), 0 ); +} + +inline float length( Vector3 vec ) +{ + return sqrtf( lengthSqr( vec ) ); +} + +inline const Vector3 normalize( Vector3 vec ) +{ + vec_float4 dot = _vmathVfDot3( vec.get128(), vec.get128() ); + dot = spu_shuffle( dot, dot, (vec_uchar16)spu_splats(0x00010203) ); + return Vector3( spu_mul( vec.get128(), rsqrtf4( dot ) ) ); +} + +inline const Vector3 cross( Vector3 vec0, Vector3 vec1 ) +{ + return Vector3( _vmathVfCross( vec0.get128(), vec1.get128() ) ); +} + +inline const Vector3 select( Vector3 vec0, Vector3 vec1, bool select1 ) +{ + return Vector3( spu_sel( vec0.get128(), vec1.get128(), spu_splats( (unsigned int)-(select1 > 0) ) ) ); +} + +#ifdef _VECTORMATH_DEBUG + +inline void print( Vector3 vec ) +{ + union { vec_float4 v; float s[4]; } tmp; + tmp.v = vec.get128(); + printf( "( %f %f %f )\n", tmp.s[0], tmp.s[1], tmp.s[2] ); +} + +inline void print( Vector3 vec, const char * name ) +{ + union { vec_float4 v; float s[4]; } tmp; + tmp.v = vec.get128(); + printf( "%s: ( %f %f %f )\n", name, tmp.s[0], tmp.s[1], tmp.s[2] ); +} + +#endif + +inline Vector4::Vector4( float _x, float _y, float _z, float _w ) +{ + mVec128 = (vec_float4){ _x, _y, _z, _w }; +} + +inline Vector4::Vector4( Vector3 xyz, float _w ) +{ + mVec128 = spu_shuffle( xyz.get128(), spu_promote( _w, 0 ), _VECTORMATH_SHUF_XYZA ); +} + +inline Vector4::Vector4( Vector3 vec ) +{ + mVec128 = spu_sel( vec.get128(), spu_splats(0.0f), (vec_uint4)spu_maskb(0x000f) ); +} + +inline Vector4::Vector4( Point3 pnt ) +{ + mVec128 = spu_sel( pnt.get128(), spu_splats(1.0f), (vec_uint4)spu_maskb(0x000f) ); +} + +inline Vector4::Vector4( Quat quat ) +{ + mVec128 = quat.get128(); +} + +inline Vector4::Vector4( float scalar ) +{ + mVec128 = spu_splats( scalar ); +} + +inline Vector4::Vector4( vec_float4 vf4 ) +{ + mVec128 = vf4; +} + +inline const Vector4 Vector4::xAxis( ) +{ + return Vector4( _VECTORMATH_UNIT_1000 ); +} + +inline const Vector4 Vector4::yAxis( ) +{ + return Vector4( _VECTORMATH_UNIT_0100 ); +} + +inline const Vector4 Vector4::zAxis( ) +{ + return Vector4( _VECTORMATH_UNIT_0010 ); +} + +inline const Vector4 Vector4::wAxis( ) +{ + return Vector4( _VECTORMATH_UNIT_0001 ); +} + +inline const Vector4 lerp( float t, Vector4 vec0, Vector4 vec1 ) +{ + return ( vec0 + ( ( vec1 - vec0 ) * t ) ); +} + +inline const Vector4 slerp( float t, Vector4 unitVec0, Vector4 unitVec1 ) +{ + vec_float4 scales, scale0, scale1, cosAngle, angle, tttt, oneMinusT, angles, sines; + vec_uint4 selectMask; + vec_uchar16 shuffle_xxxx = (vec_uchar16)spu_splats((int)0x00010203); + vec_uchar16 shuffle_yyyy = (vec_uchar16)spu_splats((int)0x04050607); + vec_uchar16 shuffle_zzzz = (vec_uchar16)spu_splats((int)0x08090a0b); + cosAngle = _vmathVfDot4( unitVec0.get128(), unitVec1.get128() ); + cosAngle = spu_shuffle( cosAngle, cosAngle, shuffle_xxxx ); + selectMask = (vec_uint4)spu_cmpgt( spu_splats(_VECTORMATH_SLERP_TOL), cosAngle ); + angle = acosf4( cosAngle ); + tttt = spu_splats(t); + oneMinusT = spu_sub( spu_splats(1.0f), tttt ); + angles = spu_sel( spu_splats(1.0f), oneMinusT, (vec_uint4)spu_maskb(0x0f00) ); + angles = spu_sel( angles, tttt, (vec_uint4)spu_maskb(0x00f0) ); + angles = spu_mul( angles, angle ); + sines = sinf4( angles ); + scales = divf4( sines, spu_shuffle( sines, sines, shuffle_xxxx ) ); + scale0 = spu_sel( oneMinusT, spu_shuffle( scales, scales, shuffle_yyyy ), selectMask ); + scale1 = spu_sel( tttt, spu_shuffle( scales, scales, shuffle_zzzz ), selectMask ); + return Vector4( spu_madd( unitVec0.get128(), scale0, spu_mul( unitVec1.get128(), scale1 ) ) ); +} + +inline vec_float4 Vector4::get128( ) const +{ + return mVec128; +} + +inline void storeHalfFloats( Vector4 vec0, Vector4 vec1, Vector4 vec2, Vector4 vec3, vec_ushort8 * twoQuads ) +{ + twoQuads[0] = _vmath2VfToHalfFloats(vec0.get128(), vec1.get128()); + twoQuads[1] = _vmath2VfToHalfFloats(vec2.get128(), vec3.get128()); +} + +inline Vector4 & Vector4::operator =( Vector4 vec ) +{ + mVec128 = vec.mVec128; + return *this; +} + +inline Vector4 & Vector4::setXYZ( Vector3 vec ) +{ + mVec128 = spu_sel( vec.get128(), mVec128, (vec_uint4)spu_maskb(0x000f) ); + return *this; +} + +inline const Vector3 Vector4::getXYZ( ) const +{ + return Vector3( mVec128 ); +} + +inline Vector4 & Vector4::setX( float _x ) +{ + mVec128 = spu_insert( _x, mVec128, 0 ); + return *this; +} + +inline float Vector4::getX( ) const +{ + return spu_extract( mVec128, 0 ); +} + +inline Vector4 & Vector4::setY( float _y ) +{ + mVec128 = spu_insert( _y, mVec128, 1 ); + return *this; +} + +inline float Vector4::getY( ) const +{ + return spu_extract( mVec128, 1 ); +} + +inline Vector4 & Vector4::setZ( float _z ) +{ + mVec128 = spu_insert( _z, mVec128, 2 ); + return *this; +} + +inline float Vector4::getZ( ) const +{ + return spu_extract( mVec128, 2 ); +} + +inline Vector4 & Vector4::setW( float _w ) +{ + mVec128 = spu_insert( _w, mVec128, 3 ); + return *this; +} + +inline float Vector4::getW( ) const +{ + return spu_extract( mVec128, 3 ); +} + +inline Vector4 & Vector4::setElem( int idx, float value ) +{ + mVec128 = spu_insert( value, mVec128, idx ); + return *this; +} + +inline float Vector4::getElem( int idx ) const +{ + return spu_extract( mVec128, idx ); +} + +inline VecIdx Vector4::operator []( int idx ) +{ + return VecIdx( mVec128, idx ); +} + +inline float Vector4::operator []( int idx ) const +{ + return spu_extract( mVec128, idx ); +} + +inline const Vector4 Vector4::operator +( Vector4 vec ) const +{ + return Vector4( spu_add( mVec128, vec.mVec128 ) ); +} + +inline const Vector4 Vector4::operator -( Vector4 vec ) const +{ + return Vector4( spu_sub( mVec128, vec.mVec128 ) ); +} + +inline const Vector4 Vector4::operator *( float scalar ) const +{ + return Vector4( spu_mul( mVec128, spu_splats(scalar) ) ); +} + +inline Vector4 & Vector4::operator +=( Vector4 vec ) +{ + *this = *this + vec; + return *this; +} + +inline Vector4 & Vector4::operator -=( Vector4 vec ) +{ + *this = *this - vec; + return *this; +} + +inline Vector4 & Vector4::operator *=( float scalar ) +{ + *this = *this * scalar; + return *this; +} + +inline const Vector4 Vector4::operator /( float scalar ) const +{ + return Vector4( divf4( mVec128, spu_splats(scalar) ) ); +} + +inline Vector4 & Vector4::operator /=( float scalar ) +{ + *this = *this / scalar; + return *this; +} + +inline const Vector4 Vector4::operator -( ) const +{ + return Vector4( negatef4( mVec128 ) ); +} + +inline const Vector4 operator *( float scalar, Vector4 vec ) +{ + return vec * scalar; +} + +inline const Vector4 mulPerElem( Vector4 vec0, Vector4 vec1 ) +{ + return Vector4( spu_mul( vec0.get128(), vec1.get128() ) ); +} + +inline const Vector4 divPerElem( Vector4 vec0, Vector4 vec1 ) +{ + return Vector4( divf4( vec0.get128(), vec1.get128() ) ); +} + +inline const Vector4 recipPerElem( Vector4 vec ) +{ + return Vector4( recipf4( vec.get128() ) ); +} + +inline const Vector4 sqrtPerElem( Vector4 vec ) +{ + return Vector4( sqrtf4( vec.get128() ) ); +} + +inline const Vector4 rsqrtPerElem( Vector4 vec ) +{ + return Vector4( rsqrtf4( vec.get128() ) ); +} + +inline const Vector4 absPerElem( Vector4 vec ) +{ + return Vector4( fabsf4( vec.get128() ) ); +} + +inline const Vector4 copySignPerElem( Vector4 vec0, Vector4 vec1 ) +{ + return Vector4( copysignf4( vec0.get128(), vec1.get128() ) ); +} + +inline const Vector4 maxPerElem( Vector4 vec0, Vector4 vec1 ) +{ + return Vector4( fmaxf4( vec0.get128(), vec1.get128() ) ); +} + +inline float maxElem( Vector4 vec ) +{ + vec_float4 result; + result = fmaxf4( spu_promote( spu_extract( vec.get128(), 1 ), 0 ), vec.get128() ); + result = fmaxf4( spu_promote( spu_extract( vec.get128(), 2 ), 0 ), result ); + result = fmaxf4( spu_promote( spu_extract( vec.get128(), 3 ), 0 ), result ); + return spu_extract( result, 0 ); +} + +inline const Vector4 minPerElem( Vector4 vec0, Vector4 vec1 ) +{ + return Vector4( fminf4( vec0.get128(), vec1.get128() ) ); +} + +inline float minElem( Vector4 vec ) +{ + vec_float4 result; + result = fminf4( spu_promote( spu_extract( vec.get128(), 1 ), 0 ), vec.get128() ); + result = fminf4( spu_promote( spu_extract( vec.get128(), 2 ), 0 ), result ); + result = fminf4( spu_promote( spu_extract( vec.get128(), 3 ), 0 ), result ); + return spu_extract( result, 0 ); +} + +inline float sum( Vector4 vec ) +{ + return + spu_extract( vec.get128(), 0 ) + + spu_extract( vec.get128(), 1 ) + + spu_extract( vec.get128(), 2 ) + + spu_extract( vec.get128(), 3 ); +} + +inline float dot( Vector4 vec0, Vector4 vec1 ) +{ + return spu_extract( _vmathVfDot4( vec0.get128(), vec1.get128() ), 0 ); +} + +inline float lengthSqr( Vector4 vec ) +{ + return spu_extract( _vmathVfDot4( vec.get128(), vec.get128() ), 0 ); +} + +inline float length( Vector4 vec ) +{ + return sqrtf( lengthSqr( vec ) ); +} + +inline const Vector4 normalize( Vector4 vec ) +{ + vec_float4 dot = _vmathVfDot4( vec.get128(), vec.get128() ); + return Vector4( spu_mul( vec.get128(), rsqrtf4( dot ) ) ); +} + +inline const Vector4 select( Vector4 vec0, Vector4 vec1, bool select1 ) +{ + return Vector4( spu_sel( vec0.get128(), vec1.get128(), spu_splats( (unsigned int)-(select1 > 0) ) ) ); +} + +#ifdef _VECTORMATH_DEBUG + +inline void print( Vector4 vec ) +{ + union { vec_float4 v; float s[4]; } tmp; + tmp.v = vec.get128(); + printf( "( %f %f %f %f )\n", tmp.s[0], tmp.s[1], tmp.s[2], tmp.s[3] ); +} + +inline void print( Vector4 vec, const char * name ) +{ + union { vec_float4 v; float s[4]; } tmp; + tmp.v = vec.get128(); + printf( "%s: ( %f %f %f %f )\n", name, tmp.s[0], tmp.s[1], tmp.s[2], tmp.s[3] ); +} + +#endif + +inline Point3::Point3( float _x, float _y, float _z ) +{ + mVec128 = (vec_float4){ _x, _y, _z, 0.0f }; +} + +inline Point3::Point3( Vector3 vec ) +{ + mVec128 = vec.get128(); +} + +inline Point3::Point3( float scalar ) +{ + mVec128 = spu_splats( scalar ); +} + +inline Point3::Point3( vec_float4 vf4 ) +{ + mVec128 = vf4; +} + +inline const Point3 lerp( float t, Point3 pnt0, Point3 pnt1 ) +{ + return ( pnt0 + ( ( pnt1 - pnt0 ) * t ) ); +} + +inline vec_float4 Point3::get128( ) const +{ + return mVec128; +} + +inline void storeXYZ( Point3 pnt, vec_float4 * quad ) +{ + vec_float4 dstVec = *quad; + vec_uint4 mask = (vec_uint4)spu_maskb(0x000f); + dstVec = spu_sel(pnt.get128(), dstVec, mask); + *quad = dstVec; +} + +inline void loadXYZArray( Point3 & pnt0, Point3 & pnt1, Point3 & pnt2, Point3 & pnt3, const vec_float4 * threeQuads ) +{ + vec_float4 xyzx, yzxy, zxyz, xyz1, xyz2, xyz3; + xyzx = threeQuads[0]; + yzxy = threeQuads[1]; + zxyz = threeQuads[2]; + xyz1 = spu_shuffle( xyzx, yzxy, _VECTORMATH_SHUF_WABC ); + xyz2 = spu_shuffle( yzxy, zxyz, _VECTORMATH_SHUF_ZWAB ); + xyz3 = spu_rlqwbyte( zxyz, 4 ); + pnt0 = Point3( xyzx ); + pnt1 = Point3( xyz1 ); + pnt2 = Point3( xyz2 ); + pnt3 = Point3( xyz3 ); +} + +inline void storeXYZArray( Point3 pnt0, Point3 pnt1, Point3 pnt2, Point3 pnt3, vec_float4 * threeQuads ) +{ + vec_float4 xyzx, yzxy, zxyz; + xyzx = spu_shuffle( pnt0.get128(), pnt1.get128(), _VECTORMATH_SHUF_XYZA ); + yzxy = spu_shuffle( pnt1.get128(), pnt2.get128(), _VECTORMATH_SHUF_YZAB ); + zxyz = spu_shuffle( pnt2.get128(), pnt3.get128(), _VECTORMATH_SHUF_ZABC ); + threeQuads[0] = xyzx; + threeQuads[1] = yzxy; + threeQuads[2] = zxyz; +} + +inline void storeHalfFloats( Point3 pnt0, Point3 pnt1, Point3 pnt2, Point3 pnt3, Point3 pnt4, Point3 pnt5, Point3 pnt6, Point3 pnt7, vec_ushort8 * threeQuads ) +{ + vec_float4 xyz0[3]; + vec_float4 xyz1[3]; + storeXYZArray( pnt0, pnt1, pnt2, pnt3, xyz0 ); + storeXYZArray( pnt4, pnt5, pnt6, pnt7, xyz1 ); + threeQuads[0] = _vmath2VfToHalfFloats(xyz0[0], xyz0[1]); + threeQuads[1] = _vmath2VfToHalfFloats(xyz0[2], xyz1[0]); + threeQuads[2] = _vmath2VfToHalfFloats(xyz1[1], xyz1[2]); +} + +inline Point3 & Point3::operator =( Point3 pnt ) +{ + mVec128 = pnt.mVec128; + return *this; +} + +inline Point3 & Point3::setX( float _x ) +{ + mVec128 = spu_insert( _x, mVec128, 0 ); + return *this; +} + +inline float Point3::getX( ) const +{ + return spu_extract( mVec128, 0 ); +} + +inline Point3 & Point3::setY( float _y ) +{ + mVec128 = spu_insert( _y, mVec128, 1 ); + return *this; +} + +inline float Point3::getY( ) const +{ + return spu_extract( mVec128, 1 ); +} + +inline Point3 & Point3::setZ( float _z ) +{ + mVec128 = spu_insert( _z, mVec128, 2 ); + return *this; +} + +inline float Point3::getZ( ) const +{ + return spu_extract( mVec128, 2 ); +} + +inline Point3 & Point3::setElem( int idx, float value ) +{ + mVec128 = spu_insert( value, mVec128, idx ); + return *this; +} + +inline float Point3::getElem( int idx ) const +{ + return spu_extract( mVec128, idx ); +} + +inline VecIdx Point3::operator []( int idx ) +{ + return VecIdx( mVec128, idx ); +} + +inline float Point3::operator []( int idx ) const +{ + return spu_extract( mVec128, idx ); +} + +inline const Vector3 Point3::operator -( Point3 pnt ) const +{ + return Vector3( spu_sub( mVec128, pnt.mVec128 ) ); +} + +inline const Point3 Point3::operator +( Vector3 vec ) const +{ + return Point3( spu_add( mVec128, vec.get128() ) ); +} + +inline const Point3 Point3::operator -( Vector3 vec ) const +{ + return Point3( spu_sub( mVec128, vec.get128() ) ); +} + +inline Point3 & Point3::operator +=( Vector3 vec ) +{ + *this = *this + vec; + return *this; +} + +inline Point3 & Point3::operator -=( Vector3 vec ) +{ + *this = *this - vec; + return *this; +} + +inline const Point3 mulPerElem( Point3 pnt0, Point3 pnt1 ) +{ + return Point3( spu_mul( pnt0.get128(), pnt1.get128() ) ); +} + +inline const Point3 divPerElem( Point3 pnt0, Point3 pnt1 ) +{ + return Point3( divf4( pnt0.get128(), pnt1.get128() ) ); +} + +inline const Point3 recipPerElem( Point3 pnt ) +{ + return Point3( recipf4( pnt.get128() ) ); +} + +inline const Point3 sqrtPerElem( Point3 pnt ) +{ + return Point3( sqrtf4( pnt.get128() ) ); +} + +inline const Point3 rsqrtPerElem( Point3 pnt ) +{ + return Point3( rsqrtf4( pnt.get128() ) ); +} + +inline const Point3 absPerElem( Point3 pnt ) +{ + return Point3( fabsf4( pnt.get128() ) ); +} + +inline const Point3 copySignPerElem( Point3 pnt0, Point3 pnt1 ) +{ + return Point3( copysignf4( pnt0.get128(), pnt1.get128() ) ); +} + +inline const Point3 maxPerElem( Point3 pnt0, Point3 pnt1 ) +{ + return Point3( fmaxf4( pnt0.get128(), pnt1.get128() ) ); +} + +inline float maxElem( Point3 pnt ) +{ + vec_float4 result; + result = fmaxf4( spu_promote( spu_extract( pnt.get128(), 1 ), 0 ), pnt.get128() ); + result = fmaxf4( spu_promote( spu_extract( pnt.get128(), 2 ), 0 ), result ); + return spu_extract( result, 0 ); +} + +inline const Point3 minPerElem( Point3 pnt0, Point3 pnt1 ) +{ + return Point3( fminf4( pnt0.get128(), pnt1.get128() ) ); +} + +inline float minElem( Point3 pnt ) +{ + vec_float4 result; + result = fminf4( spu_promote( spu_extract( pnt.get128(), 1 ), 0 ), pnt.get128() ); + result = fminf4( spu_promote( spu_extract( pnt.get128(), 2 ), 0 ), result ); + return spu_extract( result, 0 ); +} + +inline float sum( Point3 pnt ) +{ + return + spu_extract( pnt.get128(), 0 ) + + spu_extract( pnt.get128(), 1 ) + + spu_extract( pnt.get128(), 2 ); +} + +inline const Point3 scale( Point3 pnt, float scaleVal ) +{ + return mulPerElem( pnt, Point3( scaleVal ) ); +} + +inline const Point3 scale( Point3 pnt, Vector3 scaleVec ) +{ + return mulPerElem( pnt, Point3( scaleVec ) ); +} + +inline float projection( Point3 pnt, Vector3 unitVec ) +{ + return spu_extract( _vmathVfDot3( pnt.get128(), unitVec.get128() ), 0 ); +} + +inline float distSqrFromOrigin( Point3 pnt ) +{ + return lengthSqr( Vector3( pnt ) ); +} + +inline float distFromOrigin( Point3 pnt ) +{ + return length( Vector3( pnt ) ); +} + +inline float distSqr( Point3 pnt0, Point3 pnt1 ) +{ + return lengthSqr( ( pnt1 - pnt0 ) ); +} + +inline float dist( Point3 pnt0, Point3 pnt1 ) +{ + return length( ( pnt1 - pnt0 ) ); +} + +inline const Point3 select( Point3 pnt0, Point3 pnt1, bool select1 ) +{ + return Point3( spu_sel( pnt0.get128(), pnt1.get128(), spu_splats( (unsigned int)-(select1 > 0) ) ) ); +} + +#ifdef _VECTORMATH_DEBUG + +inline void print( Point3 pnt ) +{ + union { vec_float4 v; float s[4]; } tmp; + tmp.v = pnt.get128(); + printf( "( %f %f %f )\n", tmp.s[0], tmp.s[1], tmp.s[2] ); +} + +inline void print( Point3 pnt, const char * name ) +{ + union { vec_float4 v; float s[4]; } tmp; + tmp.v = pnt.get128(); + printf( "%s: ( %f %f %f )\n", name, tmp.s[0], tmp.s[1], tmp.s[2] ); +} + +#endif + +} // namespace Aos +} // namespace Vectormath + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/spu/cpp/vec_soa.h b/Extras/vectormathlibrary/include/vectormath/spu/cpp/vec_soa.h new file mode 100644 index 000000000..1ac657732 --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/spu/cpp/vec_soa.h @@ -0,0 +1,1439 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_VEC_SOA_CPP_H +#define _VECTORMATH_VEC_SOA_CPP_H +//----------------------------------------------------------------------------- +// Constants +// for shuffles, words are labeled [x,y,z,w] [a,b,c,d] + +#define _VECTORMATH_SHUF_X 0x00010203 +#define _VECTORMATH_SHUF_Y 0x04050607 +#define _VECTORMATH_SHUF_Z 0x08090a0b +#define _VECTORMATH_SHUF_W 0x0c0d0e0f +#define _VECTORMATH_SHUF_A 0x10111213 +#define _VECTORMATH_SHUF_B 0x14151617 +#define _VECTORMATH_SHUF_C 0x18191a1b +#define _VECTORMATH_SHUF_D 0x1c1d1e1f +#define _VECTORMATH_SHUF_0 0x80808080 +#define _VECTORMATH_SHUF_XAYB ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_A, _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_B }) +#define _VECTORMATH_SHUF_ZCWD ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_C, _VECTORMATH_SHUF_W, _VECTORMATH_SHUF_D }) +#define _VECTORMATH_SHUF_ZBW0 ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_B, _VECTORMATH_SHUF_W, _VECTORMATH_SHUF_0 }) +#define _VECTORMATH_SHUF_XCY0 ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_C, _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_0 }) +#define _VECTORMATH_SHUF_ZDW0 ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_D, _VECTORMATH_SHUF_W, _VECTORMATH_SHUF_0 }) +#define _VECTORMATH_SHUF_XAZC ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_A, _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_C }) +#define _VECTORMATH_SHUF_ZDXB ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_D, _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_B }) +#define _VECTORMATH_SHUF_YBWD ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_B, _VECTORMATH_SHUF_W, _VECTORMATH_SHUF_D }) +#define _VECTORMATH_SHUF_XDZB ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_D, _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_B }) +#define _VECTORMATH_SHUF_YAWC ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_A, _VECTORMATH_SHUF_W, _VECTORMATH_SHUF_C }) +#define _VECTORMATH_SHUF_ZBXD ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_Z, _VECTORMATH_SHUF_B, _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_D }) +#define _VECTORMATH_SHUF_XYCD ((vec_uchar16)(vec_uint4){ _VECTORMATH_SHUF_X, _VECTORMATH_SHUF_Y, _VECTORMATH_SHUF_C, _VECTORMATH_SHUF_D }) +#define _VECTORMATH_SLERP_TOL 0.999f + +//----------------------------------------------------------------------------- +// Definitions + +#ifndef _VECTORMATH_INTERNAL_FUNCTIONS +#define _VECTORMATH_INTERNAL_FUNCTIONS + +#endif + +namespace Vectormath { +namespace Soa { + +inline Vector3::Vector3( const Vector3 & vec ) +{ + mX = vec.mX; + mY = vec.mY; + mZ = vec.mZ; +} + +inline Vector3::Vector3( vec_float4 _x, vec_float4 _y, vec_float4 _z ) +{ + mX = _x; + mY = _y; + mZ = _z; +} + +inline Vector3::Vector3( const Point3 & pnt ) +{ + mX = pnt.getX(); + mY = pnt.getY(); + mZ = pnt.getZ(); +} + +inline Vector3::Vector3( vec_float4 scalar ) +{ + mX = scalar; + mY = scalar; + mZ = scalar; +} + +inline Vector3::Vector3( Aos::Vector3 vec ) +{ + vec_uchar16 shuffle_xxxx = (vec_uchar16)spu_splats((int)0x00010203); + vec_uchar16 shuffle_yyyy = (vec_uchar16)spu_splats((int)0x04050607); + vec_uchar16 shuffle_zzzz = (vec_uchar16)spu_splats((int)0x08090a0b); + vec_float4 vec128 = vec.get128(); + mX = spu_shuffle( vec128, vec128, shuffle_xxxx ); + mY = spu_shuffle( vec128, vec128, shuffle_yyyy ); + mZ = spu_shuffle( vec128, vec128, shuffle_zzzz ); +} + +inline Vector3::Vector3( Aos::Vector3 vec0, Aos::Vector3 vec1, Aos::Vector3 vec2, Aos::Vector3 vec3 ) +{ + vec_float4 tmp0, tmp1, tmp2, tmp3; + tmp0 = spu_shuffle( vec0.get128(), vec2.get128(), _VECTORMATH_SHUF_XAYB ); + tmp1 = spu_shuffle( vec1.get128(), vec3.get128(), _VECTORMATH_SHUF_XAYB ); + tmp2 = spu_shuffle( vec0.get128(), vec2.get128(), _VECTORMATH_SHUF_ZCWD ); + tmp3 = spu_shuffle( vec1.get128(), vec3.get128(), _VECTORMATH_SHUF_ZCWD ); + mX = spu_shuffle( tmp0, tmp1, _VECTORMATH_SHUF_XAYB ); + mY = spu_shuffle( tmp0, tmp1, _VECTORMATH_SHUF_ZCWD ); + mZ = spu_shuffle( tmp2, tmp3, _VECTORMATH_SHUF_XAYB ); +} + +inline const Vector3 Vector3::xAxis( ) +{ + return Vector3( spu_splats(1.0f), spu_splats(0.0f), spu_splats(0.0f) ); +} + +inline const Vector3 Vector3::yAxis( ) +{ + return Vector3( spu_splats(0.0f), spu_splats(1.0f), spu_splats(0.0f) ); +} + +inline const Vector3 Vector3::zAxis( ) +{ + return Vector3( spu_splats(0.0f), spu_splats(0.0f), spu_splats(1.0f) ); +} + +inline const Vector3 lerp( vec_float4 t, const Vector3 & vec0, const Vector3 & vec1 ) +{ + return ( vec0 + ( ( vec1 - vec0 ) * t ) ); +} + +inline const Vector3 slerp( vec_float4 t, const Vector3 & unitVec0, const Vector3 & unitVec1 ) +{ + vec_float4 recipSinAngle, scale0, scale1, cosAngle, angle; + vec_uint4 selectMask; + cosAngle = dot( unitVec0, unitVec1 ); + selectMask = (vec_uint4)spu_cmpgt( spu_splats(_VECTORMATH_SLERP_TOL), cosAngle ); + angle = acosf4( cosAngle ); + recipSinAngle = recipf4( sinf4( angle ) ); + scale0 = spu_sel( spu_sub( spu_splats(1.0f), t ), spu_mul( sinf4( spu_mul( spu_sub( spu_splats(1.0f), t ), angle ) ), recipSinAngle ), selectMask ); + scale1 = spu_sel( t, spu_mul( sinf4( spu_mul( t, angle ) ), recipSinAngle ), selectMask ); + return ( ( unitVec0 * scale0 ) + ( unitVec1 * scale1 ) ); +} + +inline void Vector3::get4Aos( Aos::Vector3 & result0, Aos::Vector3 & result1, Aos::Vector3 & result2, Aos::Vector3 & result3 ) const +{ + vec_float4 tmp0, tmp1; + tmp0 = spu_shuffle( mX, mZ, _VECTORMATH_SHUF_XAYB ); + tmp1 = spu_shuffle( mX, mZ, _VECTORMATH_SHUF_ZCWD ); + result0 = Aos::Vector3( spu_shuffle( tmp0, mY, _VECTORMATH_SHUF_XAYB ) ); + result1 = Aos::Vector3( spu_shuffle( tmp0, mY, _VECTORMATH_SHUF_ZBW0 ) ); + result2 = Aos::Vector3( spu_shuffle( tmp1, mY, _VECTORMATH_SHUF_XCY0 ) ); + result3 = Aos::Vector3( spu_shuffle( tmp1, mY, _VECTORMATH_SHUF_ZDW0 ) ); +} + +inline void loadXYZArray( Vector3 & vec, const vec_float4 * threeQuads ) +{ + vec_float4 xyxy, yzyz, zxzx, xyzx, yzxy, zxyz; + xyzx = threeQuads[0]; + yzxy = threeQuads[1]; + zxyz = threeQuads[2]; + xyxy = spu_shuffle( xyzx, yzxy, _VECTORMATH_SHUF_XYCD ); + zxzx = spu_shuffle( zxyz, xyzx, _VECTORMATH_SHUF_XYCD ); + yzyz = spu_shuffle( yzxy, zxyz, _VECTORMATH_SHUF_XYCD ); + vec.setX( spu_shuffle( xyxy, zxzx, _VECTORMATH_SHUF_XDZB ) ); + vec.setY( spu_shuffle( xyxy, yzyz, _VECTORMATH_SHUF_YAWC ) ); + vec.setZ( spu_shuffle( zxzx, yzyz, _VECTORMATH_SHUF_ZBXD ) ); +} + +inline void storeXYZArray( const Vector3 & vec, vec_float4 * threeQuads ) +{ + vec_float4 xyzx, yzxy, zxyz, xyxy, zxzx, yzyz; + xyxy = spu_shuffle( vec.getX(), vec.getY(), _VECTORMATH_SHUF_XAZC ); + zxzx = spu_shuffle( vec.getZ(), vec.getX(), _VECTORMATH_SHUF_ZDXB ); + yzyz = spu_shuffle( vec.getY(), vec.getZ(), _VECTORMATH_SHUF_YBWD ); + xyzx = spu_shuffle( xyxy, zxzx, _VECTORMATH_SHUF_XYCD ); + yzxy = spu_shuffle( yzyz, xyxy, _VECTORMATH_SHUF_XYCD ); + zxyz = spu_shuffle( zxzx, yzyz, _VECTORMATH_SHUF_XYCD ); + threeQuads[0] = xyzx; + threeQuads[1] = yzxy; + threeQuads[2] = zxyz; +} + +inline void storeHalfFloats( const Vector3 & vec0, const Vector3 & vec1, vec_ushort8 * threeQuads ) +{ + vec_float4 xyz0[3]; + vec_float4 xyz1[3]; + storeXYZArray( vec0, xyz0 ); + storeXYZArray( vec1, xyz1 ); + threeQuads[0] = _vmath2VfToHalfFloats(xyz0[0], xyz0[1]); + threeQuads[1] = _vmath2VfToHalfFloats(xyz0[2], xyz1[0]); + threeQuads[2] = _vmath2VfToHalfFloats(xyz1[1], xyz1[2]); +} + +inline Vector3 & Vector3::operator =( const Vector3 & vec ) +{ + mX = vec.mX; + mY = vec.mY; + mZ = vec.mZ; + return *this; +} + +inline Vector3 & Vector3::setX( vec_float4 _x ) +{ + mX = _x; + return *this; +} + +inline vec_float4 Vector3::getX( ) const +{ + return mX; +} + +inline Vector3 & Vector3::setY( vec_float4 _y ) +{ + mY = _y; + return *this; +} + +inline vec_float4 Vector3::getY( ) const +{ + return mY; +} + +inline Vector3 & Vector3::setZ( vec_float4 _z ) +{ + mZ = _z; + return *this; +} + +inline vec_float4 Vector3::getZ( ) const +{ + return mZ; +} + +inline Vector3 & Vector3::setElem( int idx, vec_float4 value ) +{ + *(&mX + idx) = value; + return *this; +} + +inline vec_float4 Vector3::getElem( int idx ) const +{ + return *(&mX + idx); +} + +inline Vector3::vec_float4_t & Vector3::operator []( int idx ) +{ + return *(&mX + idx); +} + +inline vec_float4 Vector3::operator []( int idx ) const +{ + return *(&mX + idx); +} + +inline const Vector3 Vector3::operator +( const Vector3 & vec ) const +{ + return Vector3( + spu_add( mX, vec.mX ), + spu_add( mY, vec.mY ), + spu_add( mZ, vec.mZ ) + ); +} + +inline const Vector3 Vector3::operator -( const Vector3 & vec ) const +{ + return Vector3( + spu_sub( mX, vec.mX ), + spu_sub( mY, vec.mY ), + spu_sub( mZ, vec.mZ ) + ); +} + +inline const Point3 Vector3::operator +( const Point3 & pnt ) const +{ + return Point3( + spu_add( mX, pnt.getX() ), + spu_add( mY, pnt.getY() ), + spu_add( mZ, pnt.getZ() ) + ); +} + +inline const Vector3 Vector3::operator *( vec_float4 scalar ) const +{ + return Vector3( + spu_mul( mX, scalar ), + spu_mul( mY, scalar ), + spu_mul( mZ, scalar ) + ); +} + +inline Vector3 & Vector3::operator +=( const Vector3 & vec ) +{ + *this = *this + vec; + return *this; +} + +inline Vector3 & Vector3::operator -=( const Vector3 & vec ) +{ + *this = *this - vec; + return *this; +} + +inline Vector3 & Vector3::operator *=( vec_float4 scalar ) +{ + *this = *this * scalar; + return *this; +} + +inline const Vector3 Vector3::operator /( vec_float4 scalar ) const +{ + return Vector3( + divf4( mX, scalar ), + divf4( mY, scalar ), + divf4( mZ, scalar ) + ); +} + +inline Vector3 & Vector3::operator /=( vec_float4 scalar ) +{ + *this = *this / scalar; + return *this; +} + +inline const Vector3 Vector3::operator -( ) const +{ + return Vector3( + negatef4( mX ), + negatef4( mY ), + negatef4( mZ ) + ); +} + +inline const Vector3 operator *( vec_float4 scalar, const Vector3 & vec ) +{ + return vec * scalar; +} + +inline const Vector3 mulPerElem( const Vector3 & vec0, const Vector3 & vec1 ) +{ + return Vector3( + spu_mul( vec0.getX(), vec1.getX() ), + spu_mul( vec0.getY(), vec1.getY() ), + spu_mul( vec0.getZ(), vec1.getZ() ) + ); +} + +inline const Vector3 divPerElem( const Vector3 & vec0, const Vector3 & vec1 ) +{ + return Vector3( + divf4( vec0.getX(), vec1.getX() ), + divf4( vec0.getY(), vec1.getY() ), + divf4( vec0.getZ(), vec1.getZ() ) + ); +} + +inline const Vector3 recipPerElem( const Vector3 & vec ) +{ + return Vector3( + recipf4( vec.getX() ), + recipf4( vec.getY() ), + recipf4( vec.getZ() ) + ); +} + +inline const Vector3 sqrtPerElem( const Vector3 & vec ) +{ + return Vector3( + sqrtf4( vec.getX() ), + sqrtf4( vec.getY() ), + sqrtf4( vec.getZ() ) + ); +} + +inline const Vector3 rsqrtPerElem( const Vector3 & vec ) +{ + return Vector3( + rsqrtf4( vec.getX() ), + rsqrtf4( vec.getY() ), + rsqrtf4( vec.getZ() ) + ); +} + +inline const Vector3 absPerElem( const Vector3 & vec ) +{ + return Vector3( + fabsf4( vec.getX() ), + fabsf4( vec.getY() ), + fabsf4( vec.getZ() ) + ); +} + +inline const Vector3 copySignPerElem( const Vector3 & vec0, const Vector3 & vec1 ) +{ + return Vector3( + copysignf4( vec0.getX(), vec1.getX() ), + copysignf4( vec0.getY(), vec1.getY() ), + copysignf4( vec0.getZ(), vec1.getZ() ) + ); +} + +inline const Vector3 maxPerElem( const Vector3 & vec0, const Vector3 & vec1 ) +{ + return Vector3( + fmaxf4( vec0.getX(), vec1.getX() ), + fmaxf4( vec0.getY(), vec1.getY() ), + fmaxf4( vec0.getZ(), vec1.getZ() ) + ); +} + +inline vec_float4 maxElem( const Vector3 & vec ) +{ + vec_float4 result; + result = fmaxf4( vec.getX(), vec.getY() ); + result = fmaxf4( vec.getZ(), result ); + return result; +} + +inline const Vector3 minPerElem( const Vector3 & vec0, const Vector3 & vec1 ) +{ + return Vector3( + fminf4( vec0.getX(), vec1.getX() ), + fminf4( vec0.getY(), vec1.getY() ), + fminf4( vec0.getZ(), vec1.getZ() ) + ); +} + +inline vec_float4 minElem( const Vector3 & vec ) +{ + vec_float4 result; + result = fminf4( vec.getX(), vec.getY() ); + result = fminf4( vec.getZ(), result ); + return result; +} + +inline vec_float4 sum( const Vector3 & vec ) +{ + vec_float4 result; + result = spu_add( vec.getX(), vec.getY() ); + result = spu_add( result, vec.getZ() ); + return result; +} + +inline vec_float4 dot( const Vector3 & vec0, const Vector3 & vec1 ) +{ + vec_float4 result; + result = spu_mul( vec0.getX(), vec1.getX() ); + result = spu_add( result, spu_mul( vec0.getY(), vec1.getY() ) ); + result = spu_add( result, spu_mul( vec0.getZ(), vec1.getZ() ) ); + return result; +} + +inline vec_float4 lengthSqr( const Vector3 & vec ) +{ + vec_float4 result; + result = spu_mul( vec.getX(), vec.getX() ); + result = spu_add( result, spu_mul( vec.getY(), vec.getY() ) ); + result = spu_add( result, spu_mul( vec.getZ(), vec.getZ() ) ); + return result; +} + +inline vec_float4 length( const Vector3 & vec ) +{ + return sqrtf4( lengthSqr( vec ) ); +} + +inline const Vector3 normalize( const Vector3 & vec ) +{ + vec_float4 lenSqr, lenInv; + lenSqr = lengthSqr( vec ); + lenInv = rsqrtf4( lenSqr ); + return Vector3( + spu_mul( vec.getX(), lenInv ), + spu_mul( vec.getY(), lenInv ), + spu_mul( vec.getZ(), lenInv ) + ); +} + +inline const Vector3 cross( const Vector3 & vec0, const Vector3 & vec1 ) +{ + return Vector3( + spu_sub( spu_mul( vec0.getY(), vec1.getZ() ), spu_mul( vec0.getZ(), vec1.getY() ) ), + spu_sub( spu_mul( vec0.getZ(), vec1.getX() ), spu_mul( vec0.getX(), vec1.getZ() ) ), + spu_sub( spu_mul( vec0.getX(), vec1.getY() ), spu_mul( vec0.getY(), vec1.getX() ) ) + ); +} + +inline const Vector3 select( const Vector3 & vec0, const Vector3 & vec1, vec_uint4 select1 ) +{ + return Vector3( + spu_sel( vec0.getX(), vec1.getX(), select1 ), + spu_sel( vec0.getY(), vec1.getY(), select1 ), + spu_sel( vec0.getZ(), vec1.getZ(), select1 ) + ); +} + +#ifdef _VECTORMATH_DEBUG + +inline void print( const Vector3 & vec ) +{ + Aos::Vector3 vec0, vec1, vec2, vec3; + vec.get4Aos( vec0, vec1, vec2, vec3 ); + printf("slot 0:\n"); + print( vec0 ); + printf("slot 1:\n"); + print( vec1 ); + printf("slot 2:\n"); + print( vec2 ); + printf("slot 3:\n"); + print( vec3 ); +} + +inline void print( const Vector3 & vec, const char * name ) +{ + Aos::Vector3 vec0, vec1, vec2, vec3; + printf( "%s:\n", name ); + vec.get4Aos( vec0, vec1, vec2, vec3 ); + printf("slot 0:\n"); + print( vec0 ); + printf("slot 1:\n"); + print( vec1 ); + printf("slot 2:\n"); + print( vec2 ); + printf("slot 3:\n"); + print( vec3 ); +} + +#endif + +inline Vector4::Vector4( const Vector4 & vec ) +{ + mX = vec.mX; + mY = vec.mY; + mZ = vec.mZ; + mW = vec.mW; +} + +inline Vector4::Vector4( vec_float4 _x, vec_float4 _y, vec_float4 _z, vec_float4 _w ) +{ + mX = _x; + mY = _y; + mZ = _z; + mW = _w; +} + +inline Vector4::Vector4( const Vector3 & xyz, vec_float4 _w ) +{ + this->setXYZ( xyz ); + this->setW( _w ); +} + +inline Vector4::Vector4( const Vector3 & vec ) +{ + mX = vec.getX(); + mY = vec.getY(); + mZ = vec.getZ(); + mW = spu_splats(0.0f); +} + +inline Vector4::Vector4( const Point3 & pnt ) +{ + mX = pnt.getX(); + mY = pnt.getY(); + mZ = pnt.getZ(); + mW = spu_splats(1.0f); +} + +inline Vector4::Vector4( const Quat & quat ) +{ + mX = quat.getX(); + mY = quat.getY(); + mZ = quat.getZ(); + mW = quat.getW(); +} + +inline Vector4::Vector4( vec_float4 scalar ) +{ + mX = scalar; + mY = scalar; + mZ = scalar; + mW = scalar; +} + +inline Vector4::Vector4( Aos::Vector4 vec ) +{ + vec_uchar16 shuffle_xxxx = (vec_uchar16)spu_splats((int)0x00010203); + vec_uchar16 shuffle_yyyy = (vec_uchar16)spu_splats((int)0x04050607); + vec_uchar16 shuffle_zzzz = (vec_uchar16)spu_splats((int)0x08090a0b); + vec_uchar16 shuffle_wwww = (vec_uchar16)spu_splats((int)0x0c0d0e0f); + vec_float4 vec128 = vec.get128(); + mX = spu_shuffle( vec128, vec128, shuffle_xxxx ); + mY = spu_shuffle( vec128, vec128, shuffle_yyyy ); + mZ = spu_shuffle( vec128, vec128, shuffle_zzzz ); + mW = spu_shuffle( vec128, vec128, shuffle_wwww ); +} + +inline Vector4::Vector4( Aos::Vector4 vec0, Aos::Vector4 vec1, Aos::Vector4 vec2, Aos::Vector4 vec3 ) +{ + vec_float4 tmp0, tmp1, tmp2, tmp3; + tmp0 = spu_shuffle( vec0.get128(), vec2.get128(), _VECTORMATH_SHUF_XAYB ); + tmp1 = spu_shuffle( vec1.get128(), vec3.get128(), _VECTORMATH_SHUF_XAYB ); + tmp2 = spu_shuffle( vec0.get128(), vec2.get128(), _VECTORMATH_SHUF_ZCWD ); + tmp3 = spu_shuffle( vec1.get128(), vec3.get128(), _VECTORMATH_SHUF_ZCWD ); + mX = spu_shuffle( tmp0, tmp1, _VECTORMATH_SHUF_XAYB ); + mY = spu_shuffle( tmp0, tmp1, _VECTORMATH_SHUF_ZCWD ); + mZ = spu_shuffle( tmp2, tmp3, _VECTORMATH_SHUF_XAYB ); + mW = spu_shuffle( tmp2, tmp3, _VECTORMATH_SHUF_ZCWD ); +} + +inline const Vector4 Vector4::xAxis( ) +{ + return Vector4( spu_splats(1.0f), spu_splats(0.0f), spu_splats(0.0f), spu_splats(0.0f) ); +} + +inline const Vector4 Vector4::yAxis( ) +{ + return Vector4( spu_splats(0.0f), spu_splats(1.0f), spu_splats(0.0f), spu_splats(0.0f) ); +} + +inline const Vector4 Vector4::zAxis( ) +{ + return Vector4( spu_splats(0.0f), spu_splats(0.0f), spu_splats(1.0f), spu_splats(0.0f) ); +} + +inline const Vector4 Vector4::wAxis( ) +{ + return Vector4( spu_splats(0.0f), spu_splats(0.0f), spu_splats(0.0f), spu_splats(1.0f) ); +} + +inline const Vector4 lerp( vec_float4 t, const Vector4 & vec0, const Vector4 & vec1 ) +{ + return ( vec0 + ( ( vec1 - vec0 ) * t ) ); +} + +inline const Vector4 slerp( vec_float4 t, const Vector4 & unitVec0, const Vector4 & unitVec1 ) +{ + vec_float4 recipSinAngle, scale0, scale1, cosAngle, angle; + vec_uint4 selectMask; + cosAngle = dot( unitVec0, unitVec1 ); + selectMask = (vec_uint4)spu_cmpgt( spu_splats(_VECTORMATH_SLERP_TOL), cosAngle ); + angle = acosf4( cosAngle ); + recipSinAngle = recipf4( sinf4( angle ) ); + scale0 = spu_sel( spu_sub( spu_splats(1.0f), t ), spu_mul( sinf4( spu_mul( spu_sub( spu_splats(1.0f), t ), angle ) ), recipSinAngle ), selectMask ); + scale1 = spu_sel( t, spu_mul( sinf4( spu_mul( t, angle ) ), recipSinAngle ), selectMask ); + return ( ( unitVec0 * scale0 ) + ( unitVec1 * scale1 ) ); +} + +inline void Vector4::get4Aos( Aos::Vector4 & result0, Aos::Vector4 & result1, Aos::Vector4 & result2, Aos::Vector4 & result3 ) const +{ + vec_float4 tmp0, tmp1, tmp2, tmp3; + tmp0 = spu_shuffle( mX, mZ, _VECTORMATH_SHUF_XAYB ); + tmp1 = spu_shuffle( mY, mW, _VECTORMATH_SHUF_XAYB ); + tmp2 = spu_shuffle( mX, mZ, _VECTORMATH_SHUF_ZCWD ); + tmp3 = spu_shuffle( mY, mW, _VECTORMATH_SHUF_ZCWD ); + result0 = Aos::Vector4( spu_shuffle( tmp0, tmp1, _VECTORMATH_SHUF_XAYB ) ); + result1 = Aos::Vector4( spu_shuffle( tmp0, tmp1, _VECTORMATH_SHUF_ZCWD ) ); + result2 = Aos::Vector4( spu_shuffle( tmp2, tmp3, _VECTORMATH_SHUF_XAYB ) ); + result3 = Aos::Vector4( spu_shuffle( tmp2, tmp3, _VECTORMATH_SHUF_ZCWD ) ); +} + +inline void storeHalfFloats( const Vector4 & vec, vec_ushort8 * twoQuads ) +{ + Aos::Vector4 v0, v1, v2, v3; + vec.get4Aos( v0, v1, v2, v3 ); + twoQuads[0] = _vmath2VfToHalfFloats(v0.get128(), v1.get128()); + twoQuads[1] = _vmath2VfToHalfFloats(v2.get128(), v3.get128()); +} + +inline Vector4 & Vector4::operator =( const Vector4 & vec ) +{ + mX = vec.mX; + mY = vec.mY; + mZ = vec.mZ; + mW = vec.mW; + return *this; +} + +inline Vector4 & Vector4::setXYZ( const Vector3 & vec ) +{ + mX = vec.getX(); + mY = vec.getY(); + mZ = vec.getZ(); + return *this; +} + +inline const Vector3 Vector4::getXYZ( ) const +{ + return Vector3( mX, mY, mZ ); +} + +inline Vector4 & Vector4::setX( vec_float4 _x ) +{ + mX = _x; + return *this; +} + +inline vec_float4 Vector4::getX( ) const +{ + return mX; +} + +inline Vector4 & Vector4::setY( vec_float4 _y ) +{ + mY = _y; + return *this; +} + +inline vec_float4 Vector4::getY( ) const +{ + return mY; +} + +inline Vector4 & Vector4::setZ( vec_float4 _z ) +{ + mZ = _z; + return *this; +} + +inline vec_float4 Vector4::getZ( ) const +{ + return mZ; +} + +inline Vector4 & Vector4::setW( vec_float4 _w ) +{ + mW = _w; + return *this; +} + +inline vec_float4 Vector4::getW( ) const +{ + return mW; +} + +inline Vector4 & Vector4::setElem( int idx, vec_float4 value ) +{ + *(&mX + idx) = value; + return *this; +} + +inline vec_float4 Vector4::getElem( int idx ) const +{ + return *(&mX + idx); +} + +inline Vector4::vec_float4_t & Vector4::operator []( int idx ) +{ + return *(&mX + idx); +} + +inline vec_float4 Vector4::operator []( int idx ) const +{ + return *(&mX + idx); +} + +inline const Vector4 Vector4::operator +( const Vector4 & vec ) const +{ + return Vector4( + spu_add( mX, vec.mX ), + spu_add( mY, vec.mY ), + spu_add( mZ, vec.mZ ), + spu_add( mW, vec.mW ) + ); +} + +inline const Vector4 Vector4::operator -( const Vector4 & vec ) const +{ + return Vector4( + spu_sub( mX, vec.mX ), + spu_sub( mY, vec.mY ), + spu_sub( mZ, vec.mZ ), + spu_sub( mW, vec.mW ) + ); +} + +inline const Vector4 Vector4::operator *( vec_float4 scalar ) const +{ + return Vector4( + spu_mul( mX, scalar ), + spu_mul( mY, scalar ), + spu_mul( mZ, scalar ), + spu_mul( mW, scalar ) + ); +} + +inline Vector4 & Vector4::operator +=( const Vector4 & vec ) +{ + *this = *this + vec; + return *this; +} + +inline Vector4 & Vector4::operator -=( const Vector4 & vec ) +{ + *this = *this - vec; + return *this; +} + +inline Vector4 & Vector4::operator *=( vec_float4 scalar ) +{ + *this = *this * scalar; + return *this; +} + +inline const Vector4 Vector4::operator /( vec_float4 scalar ) const +{ + return Vector4( + divf4( mX, scalar ), + divf4( mY, scalar ), + divf4( mZ, scalar ), + divf4( mW, scalar ) + ); +} + +inline Vector4 & Vector4::operator /=( vec_float4 scalar ) +{ + *this = *this / scalar; + return *this; +} + +inline const Vector4 Vector4::operator -( ) const +{ + return Vector4( + negatef4( mX ), + negatef4( mY ), + negatef4( mZ ), + negatef4( mW ) + ); +} + +inline const Vector4 operator *( vec_float4 scalar, const Vector4 & vec ) +{ + return vec * scalar; +} + +inline const Vector4 mulPerElem( const Vector4 & vec0, const Vector4 & vec1 ) +{ + return Vector4( + spu_mul( vec0.getX(), vec1.getX() ), + spu_mul( vec0.getY(), vec1.getY() ), + spu_mul( vec0.getZ(), vec1.getZ() ), + spu_mul( vec0.getW(), vec1.getW() ) + ); +} + +inline const Vector4 divPerElem( const Vector4 & vec0, const Vector4 & vec1 ) +{ + return Vector4( + divf4( vec0.getX(), vec1.getX() ), + divf4( vec0.getY(), vec1.getY() ), + divf4( vec0.getZ(), vec1.getZ() ), + divf4( vec0.getW(), vec1.getW() ) + ); +} + +inline const Vector4 recipPerElem( const Vector4 & vec ) +{ + return Vector4( + recipf4( vec.getX() ), + recipf4( vec.getY() ), + recipf4( vec.getZ() ), + recipf4( vec.getW() ) + ); +} + +inline const Vector4 sqrtPerElem( const Vector4 & vec ) +{ + return Vector4( + sqrtf4( vec.getX() ), + sqrtf4( vec.getY() ), + sqrtf4( vec.getZ() ), + sqrtf4( vec.getW() ) + ); +} + +inline const Vector4 rsqrtPerElem( const Vector4 & vec ) +{ + return Vector4( + rsqrtf4( vec.getX() ), + rsqrtf4( vec.getY() ), + rsqrtf4( vec.getZ() ), + rsqrtf4( vec.getW() ) + ); +} + +inline const Vector4 absPerElem( const Vector4 & vec ) +{ + return Vector4( + fabsf4( vec.getX() ), + fabsf4( vec.getY() ), + fabsf4( vec.getZ() ), + fabsf4( vec.getW() ) + ); +} + +inline const Vector4 copySignPerElem( const Vector4 & vec0, const Vector4 & vec1 ) +{ + return Vector4( + copysignf4( vec0.getX(), vec1.getX() ), + copysignf4( vec0.getY(), vec1.getY() ), + copysignf4( vec0.getZ(), vec1.getZ() ), + copysignf4( vec0.getW(), vec1.getW() ) + ); +} + +inline const Vector4 maxPerElem( const Vector4 & vec0, const Vector4 & vec1 ) +{ + return Vector4( + fmaxf4( vec0.getX(), vec1.getX() ), + fmaxf4( vec0.getY(), vec1.getY() ), + fmaxf4( vec0.getZ(), vec1.getZ() ), + fmaxf4( vec0.getW(), vec1.getW() ) + ); +} + +inline vec_float4 maxElem( const Vector4 & vec ) +{ + vec_float4 result; + result = fmaxf4( vec.getX(), vec.getY() ); + result = fmaxf4( vec.getZ(), result ); + result = fmaxf4( vec.getW(), result ); + return result; +} + +inline const Vector4 minPerElem( const Vector4 & vec0, const Vector4 & vec1 ) +{ + return Vector4( + fminf4( vec0.getX(), vec1.getX() ), + fminf4( vec0.getY(), vec1.getY() ), + fminf4( vec0.getZ(), vec1.getZ() ), + fminf4( vec0.getW(), vec1.getW() ) + ); +} + +inline vec_float4 minElem( const Vector4 & vec ) +{ + vec_float4 result; + result = fminf4( vec.getX(), vec.getY() ); + result = fminf4( vec.getZ(), result ); + result = fminf4( vec.getW(), result ); + return result; +} + +inline vec_float4 sum( const Vector4 & vec ) +{ + vec_float4 result; + result = spu_add( vec.getX(), vec.getY() ); + result = spu_add( result, vec.getZ() ); + result = spu_add( result, vec.getW() ); + return result; +} + +inline vec_float4 dot( const Vector4 & vec0, const Vector4 & vec1 ) +{ + vec_float4 result; + result = spu_mul( vec0.getX(), vec1.getX() ); + result = spu_add( result, spu_mul( vec0.getY(), vec1.getY() ) ); + result = spu_add( result, spu_mul( vec0.getZ(), vec1.getZ() ) ); + result = spu_add( result, spu_mul( vec0.getW(), vec1.getW() ) ); + return result; +} + +inline vec_float4 lengthSqr( const Vector4 & vec ) +{ + vec_float4 result; + result = spu_mul( vec.getX(), vec.getX() ); + result = spu_add( result, spu_mul( vec.getY(), vec.getY() ) ); + result = spu_add( result, spu_mul( vec.getZ(), vec.getZ() ) ); + result = spu_add( result, spu_mul( vec.getW(), vec.getW() ) ); + return result; +} + +inline vec_float4 length( const Vector4 & vec ) +{ + return sqrtf4( lengthSqr( vec ) ); +} + +inline const Vector4 normalize( const Vector4 & vec ) +{ + vec_float4 lenSqr, lenInv; + lenSqr = lengthSqr( vec ); + lenInv = rsqrtf4( lenSqr ); + return Vector4( + spu_mul( vec.getX(), lenInv ), + spu_mul( vec.getY(), lenInv ), + spu_mul( vec.getZ(), lenInv ), + spu_mul( vec.getW(), lenInv ) + ); +} + +inline const Vector4 select( const Vector4 & vec0, const Vector4 & vec1, vec_uint4 select1 ) +{ + return Vector4( + spu_sel( vec0.getX(), vec1.getX(), select1 ), + spu_sel( vec0.getY(), vec1.getY(), select1 ), + spu_sel( vec0.getZ(), vec1.getZ(), select1 ), + spu_sel( vec0.getW(), vec1.getW(), select1 ) + ); +} + +#ifdef _VECTORMATH_DEBUG + +inline void print( const Vector4 & vec ) +{ + Aos::Vector4 vec0, vec1, vec2, vec3; + vec.get4Aos( vec0, vec1, vec2, vec3 ); + printf("slot 0:\n"); + print( vec0 ); + printf("slot 1:\n"); + print( vec1 ); + printf("slot 2:\n"); + print( vec2 ); + printf("slot 3:\n"); + print( vec3 ); +} + +inline void print( const Vector4 & vec, const char * name ) +{ + Aos::Vector4 vec0, vec1, vec2, vec3; + printf( "%s:\n", name ); + vec.get4Aos( vec0, vec1, vec2, vec3 ); + printf("slot 0:\n"); + print( vec0 ); + printf("slot 1:\n"); + print( vec1 ); + printf("slot 2:\n"); + print( vec2 ); + printf("slot 3:\n"); + print( vec3 ); +} + +#endif + +inline Point3::Point3( const Point3 & pnt ) +{ + mX = pnt.mX; + mY = pnt.mY; + mZ = pnt.mZ; +} + +inline Point3::Point3( vec_float4 _x, vec_float4 _y, vec_float4 _z ) +{ + mX = _x; + mY = _y; + mZ = _z; +} + +inline Point3::Point3( const Vector3 & vec ) +{ + mX = vec.getX(); + mY = vec.getY(); + mZ = vec.getZ(); +} + +inline Point3::Point3( vec_float4 scalar ) +{ + mX = scalar; + mY = scalar; + mZ = scalar; +} + +inline Point3::Point3( Aos::Point3 pnt ) +{ + vec_uchar16 shuffle_xxxx = (vec_uchar16)spu_splats((int)0x00010203); + vec_uchar16 shuffle_yyyy = (vec_uchar16)spu_splats((int)0x04050607); + vec_uchar16 shuffle_zzzz = (vec_uchar16)spu_splats((int)0x08090a0b); + vec_float4 vec128 = pnt.get128(); + mX = spu_shuffle( vec128, vec128, shuffle_xxxx ); + mY = spu_shuffle( vec128, vec128, shuffle_yyyy ); + mZ = spu_shuffle( vec128, vec128, shuffle_zzzz ); +} + +inline Point3::Point3( Aos::Point3 pnt0, Aos::Point3 pnt1, Aos::Point3 pnt2, Aos::Point3 pnt3 ) +{ + vec_float4 tmp0, tmp1, tmp2, tmp3; + tmp0 = spu_shuffle( pnt0.get128(), pnt2.get128(), _VECTORMATH_SHUF_XAYB ); + tmp1 = spu_shuffle( pnt1.get128(), pnt3.get128(), _VECTORMATH_SHUF_XAYB ); + tmp2 = spu_shuffle( pnt0.get128(), pnt2.get128(), _VECTORMATH_SHUF_ZCWD ); + tmp3 = spu_shuffle( pnt1.get128(), pnt3.get128(), _VECTORMATH_SHUF_ZCWD ); + mX = spu_shuffle( tmp0, tmp1, _VECTORMATH_SHUF_XAYB ); + mY = spu_shuffle( tmp0, tmp1, _VECTORMATH_SHUF_ZCWD ); + mZ = spu_shuffle( tmp2, tmp3, _VECTORMATH_SHUF_XAYB ); +} + +inline const Point3 lerp( vec_float4 t, const Point3 & pnt0, const Point3 & pnt1 ) +{ + return ( pnt0 + ( ( pnt1 - pnt0 ) * t ) ); +} + +inline void Point3::get4Aos( Aos::Point3 & result0, Aos::Point3 & result1, Aos::Point3 & result2, Aos::Point3 & result3 ) const +{ + vec_float4 tmp0, tmp1; + tmp0 = spu_shuffle( mX, mZ, _VECTORMATH_SHUF_XAYB ); + tmp1 = spu_shuffle( mX, mZ, _VECTORMATH_SHUF_ZCWD ); + result0 = Aos::Point3( spu_shuffle( tmp0, mY, _VECTORMATH_SHUF_XAYB ) ); + result1 = Aos::Point3( spu_shuffle( tmp0, mY, _VECTORMATH_SHUF_ZBW0 ) ); + result2 = Aos::Point3( spu_shuffle( tmp1, mY, _VECTORMATH_SHUF_XCY0 ) ); + result3 = Aos::Point3( spu_shuffle( tmp1, mY, _VECTORMATH_SHUF_ZDW0 ) ); +} + +inline void loadXYZArray( Point3 & vec, const vec_float4 * threeQuads ) +{ + vec_float4 xyxy, yzyz, zxzx, xyzx, yzxy, zxyz; + xyzx = threeQuads[0]; + yzxy = threeQuads[1]; + zxyz = threeQuads[2]; + xyxy = spu_shuffle( xyzx, yzxy, _VECTORMATH_SHUF_XYCD ); + zxzx = spu_shuffle( zxyz, xyzx, _VECTORMATH_SHUF_XYCD ); + yzyz = spu_shuffle( yzxy, zxyz, _VECTORMATH_SHUF_XYCD ); + vec.setX( spu_shuffle( xyxy, zxzx, _VECTORMATH_SHUF_XDZB ) ); + vec.setY( spu_shuffle( xyxy, yzyz, _VECTORMATH_SHUF_YAWC ) ); + vec.setZ( spu_shuffle( zxzx, yzyz, _VECTORMATH_SHUF_ZBXD ) ); +} + +inline void storeXYZArray( const Point3 & vec, vec_float4 * threeQuads ) +{ + vec_float4 xyzx, yzxy, zxyz, xyxy, zxzx, yzyz; + xyxy = spu_shuffle( vec.getX(), vec.getY(), _VECTORMATH_SHUF_XAZC ); + zxzx = spu_shuffle( vec.getZ(), vec.getX(), _VECTORMATH_SHUF_ZDXB ); + yzyz = spu_shuffle( vec.getY(), vec.getZ(), _VECTORMATH_SHUF_YBWD ); + xyzx = spu_shuffle( xyxy, zxzx, _VECTORMATH_SHUF_XYCD ); + yzxy = spu_shuffle( yzyz, xyxy, _VECTORMATH_SHUF_XYCD ); + zxyz = spu_shuffle( zxzx, yzyz, _VECTORMATH_SHUF_XYCD ); + threeQuads[0] = xyzx; + threeQuads[1] = yzxy; + threeQuads[2] = zxyz; +} + +inline void storeHalfFloats( const Point3 & pnt0, const Point3 & pnt1, vec_ushort8 * threeQuads ) +{ + vec_float4 xyz0[3]; + vec_float4 xyz1[3]; + storeXYZArray( pnt0, xyz0 ); + storeXYZArray( pnt1, xyz1 ); + threeQuads[0] = _vmath2VfToHalfFloats(xyz0[0], xyz0[1]); + threeQuads[1] = _vmath2VfToHalfFloats(xyz0[2], xyz1[0]); + threeQuads[2] = _vmath2VfToHalfFloats(xyz1[1], xyz1[2]); +} + +inline Point3 & Point3::operator =( const Point3 & pnt ) +{ + mX = pnt.mX; + mY = pnt.mY; + mZ = pnt.mZ; + return *this; +} + +inline Point3 & Point3::setX( vec_float4 _x ) +{ + mX = _x; + return *this; +} + +inline vec_float4 Point3::getX( ) const +{ + return mX; +} + +inline Point3 & Point3::setY( vec_float4 _y ) +{ + mY = _y; + return *this; +} + +inline vec_float4 Point3::getY( ) const +{ + return mY; +} + +inline Point3 & Point3::setZ( vec_float4 _z ) +{ + mZ = _z; + return *this; +} + +inline vec_float4 Point3::getZ( ) const +{ + return mZ; +} + +inline Point3 & Point3::setElem( int idx, vec_float4 value ) +{ + *(&mX + idx) = value; + return *this; +} + +inline vec_float4 Point3::getElem( int idx ) const +{ + return *(&mX + idx); +} + +inline Point3::vec_float4_t & Point3::operator []( int idx ) +{ + return *(&mX + idx); +} + +inline vec_float4 Point3::operator []( int idx ) const +{ + return *(&mX + idx); +} + +inline const Vector3 Point3::operator -( const Point3 & pnt ) const +{ + return Vector3( + spu_sub( mX, pnt.mX ), + spu_sub( mY, pnt.mY ), + spu_sub( mZ, pnt.mZ ) + ); +} + +inline const Point3 Point3::operator +( const Vector3 & vec ) const +{ + return Point3( + spu_add( mX, vec.getX() ), + spu_add( mY, vec.getY() ), + spu_add( mZ, vec.getZ() ) + ); +} + +inline const Point3 Point3::operator -( const Vector3 & vec ) const +{ + return Point3( + spu_sub( mX, vec.getX() ), + spu_sub( mY, vec.getY() ), + spu_sub( mZ, vec.getZ() ) + ); +} + +inline Point3 & Point3::operator +=( const Vector3 & vec ) +{ + *this = *this + vec; + return *this; +} + +inline Point3 & Point3::operator -=( const Vector3 & vec ) +{ + *this = *this - vec; + return *this; +} + +inline const Point3 mulPerElem( const Point3 & pnt0, const Point3 & pnt1 ) +{ + return Point3( + spu_mul( pnt0.getX(), pnt1.getX() ), + spu_mul( pnt0.getY(), pnt1.getY() ), + spu_mul( pnt0.getZ(), pnt1.getZ() ) + ); +} + +inline const Point3 divPerElem( const Point3 & pnt0, const Point3 & pnt1 ) +{ + return Point3( + divf4( pnt0.getX(), pnt1.getX() ), + divf4( pnt0.getY(), pnt1.getY() ), + divf4( pnt0.getZ(), pnt1.getZ() ) + ); +} + +inline const Point3 recipPerElem( const Point3 & pnt ) +{ + return Point3( + recipf4( pnt.getX() ), + recipf4( pnt.getY() ), + recipf4( pnt.getZ() ) + ); +} + +inline const Point3 sqrtPerElem( const Point3 & pnt ) +{ + return Point3( + sqrtf4( pnt.getX() ), + sqrtf4( pnt.getY() ), + sqrtf4( pnt.getZ() ) + ); +} + +inline const Point3 rsqrtPerElem( const Point3 & pnt ) +{ + return Point3( + rsqrtf4( pnt.getX() ), + rsqrtf4( pnt.getY() ), + rsqrtf4( pnt.getZ() ) + ); +} + +inline const Point3 absPerElem( const Point3 & pnt ) +{ + return Point3( + fabsf4( pnt.getX() ), + fabsf4( pnt.getY() ), + fabsf4( pnt.getZ() ) + ); +} + +inline const Point3 copySignPerElem( const Point3 & pnt0, const Point3 & pnt1 ) +{ + return Point3( + copysignf4( pnt0.getX(), pnt1.getX() ), + copysignf4( pnt0.getY(), pnt1.getY() ), + copysignf4( pnt0.getZ(), pnt1.getZ() ) + ); +} + +inline const Point3 maxPerElem( const Point3 & pnt0, const Point3 & pnt1 ) +{ + return Point3( + fmaxf4( pnt0.getX(), pnt1.getX() ), + fmaxf4( pnt0.getY(), pnt1.getY() ), + fmaxf4( pnt0.getZ(), pnt1.getZ() ) + ); +} + +inline vec_float4 maxElem( const Point3 & pnt ) +{ + vec_float4 result; + result = fmaxf4( pnt.getX(), pnt.getY() ); + result = fmaxf4( pnt.getZ(), result ); + return result; +} + +inline const Point3 minPerElem( const Point3 & pnt0, const Point3 & pnt1 ) +{ + return Point3( + fminf4( pnt0.getX(), pnt1.getX() ), + fminf4( pnt0.getY(), pnt1.getY() ), + fminf4( pnt0.getZ(), pnt1.getZ() ) + ); +} + +inline vec_float4 minElem( const Point3 & pnt ) +{ + vec_float4 result; + result = fminf4( pnt.getX(), pnt.getY() ); + result = fminf4( pnt.getZ(), result ); + return result; +} + +inline vec_float4 sum( const Point3 & pnt ) +{ + vec_float4 result; + result = spu_add( pnt.getX(), pnt.getY() ); + result = spu_add( result, pnt.getZ() ); + return result; +} + +inline const Point3 scale( const Point3 & pnt, vec_float4 scaleVal ) +{ + return mulPerElem( pnt, Point3( scaleVal ) ); +} + +inline const Point3 scale( const Point3 & pnt, const Vector3 & scaleVec ) +{ + return mulPerElem( pnt, Point3( scaleVec ) ); +} + +inline vec_float4 projection( const Point3 & pnt, const Vector3 & unitVec ) +{ + vec_float4 result; + result = spu_mul( pnt.getX(), unitVec.getX() ); + result = spu_add( result, spu_mul( pnt.getY(), unitVec.getY() ) ); + result = spu_add( result, spu_mul( pnt.getZ(), unitVec.getZ() ) ); + return result; +} + +inline vec_float4 distSqrFromOrigin( const Point3 & pnt ) +{ + return lengthSqr( Vector3( pnt ) ); +} + +inline vec_float4 distFromOrigin( const Point3 & pnt ) +{ + return length( Vector3( pnt ) ); +} + +inline vec_float4 distSqr( const Point3 & pnt0, const Point3 & pnt1 ) +{ + return lengthSqr( ( pnt1 - pnt0 ) ); +} + +inline vec_float4 dist( const Point3 & pnt0, const Point3 & pnt1 ) +{ + return length( ( pnt1 - pnt0 ) ); +} + +inline const Point3 select( const Point3 & pnt0, const Point3 & pnt1, vec_uint4 select1 ) +{ + return Point3( + spu_sel( pnt0.getX(), pnt1.getX(), select1 ), + spu_sel( pnt0.getY(), pnt1.getY(), select1 ), + spu_sel( pnt0.getZ(), pnt1.getZ(), select1 ) + ); +} + +#ifdef _VECTORMATH_DEBUG + +inline void print( const Point3 & pnt ) +{ + Aos::Point3 vec0, vec1, vec2, vec3; + pnt.get4Aos( vec0, vec1, vec2, vec3 ); + printf("slot 0:\n"); + print( vec0 ); + printf("slot 1:\n"); + print( vec1 ); + printf("slot 2:\n"); + print( vec2 ); + printf("slot 3:\n"); + print( vec3 ); +} + +inline void print( const Point3 & pnt, const char * name ) +{ + Aos::Point3 vec0, vec1, vec2, vec3; + printf( "%s:\n", name ); + pnt.get4Aos( vec0, vec1, vec2, vec3 ); + printf("slot 0:\n"); + print( vec0 ); + printf("slot 1:\n"); + print( vec1 ); + printf("slot 2:\n"); + print( vec2 ); + printf("slot 3:\n"); + print( vec3 ); +} + +#endif + +} // namespace Soa +} // namespace Vectormath + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/spu/cpp/vecidx_aos.h b/Extras/vectormathlibrary/include/vectormath/spu/cpp/vecidx_aos.h new file mode 100644 index 000000000..f5309153d --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/spu/cpp/vecidx_aos.h @@ -0,0 +1,64 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_VECIDX_AOS_H +#define _VECTORMATH_VECIDX_AOS_H + +#include + +namespace Vectormath { +namespace Aos { + +//----------------------------------------------------------------------------- +// VecIdx +// Used in setting elements of Vector3, Vector4, Point3, or Quat with the +// subscripting operator. +// + +class VecIdx +{ +private: + typedef vec_float4 vec_float4_t; + vec_float4_t &ref __attribute__ ((aligned(16))); + int i __attribute__ ((aligned(16))); +public: + inline VecIdx( vec_float4& vec, int idx ): ref(vec) { i = idx; } + inline operator float() const; + inline float operator =( float scalar ); + inline float operator =( const VecIdx& scalar ); + inline float operator *=( float scalar ); + inline float operator /=( float scalar ); + inline float operator +=( float scalar ); + inline float operator -=( float scalar ); +}; + +} // namespace Aos +} // namespace Vectormath + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/spu/cpp/vectormath_aos.h b/Extras/vectormathlibrary/include/vectormath/spu/cpp/vectormath_aos.h new file mode 100644 index 000000000..dd583790b --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/spu/cpp/vectormath_aos.h @@ -0,0 +1,1851 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_AOS_CPP_H +#define _VECTORMATH_AOS_CPP_H + +#include +#include +#include "floatInVec.h" +#include "boolInVec.h" +#include "stdio.h" +#include "vecidx_aos.h" + +#ifdef _VECTORMATH_DEBUG +#endif + +namespace Vectormath { + +namespace Aos { + +//----------------------------------------------------------------------------- +// Forward Declarations +// + +class Vector3; +class Vector4; +class Point3; +class Quat; +class Matrix3; +class Matrix4; +class Transform3; + +// A 3-D vector in array-of-structures format +// +class Vector3 +{ + vec_float4 mVec128; + +public: + // Default constructor; does no initialization + // + inline Vector3( ) { }; + + // Construct a 3-D vector from x, y, and z elements + // + inline Vector3( float x, float y, float z ); + + // Copy elements from a 3-D point into a 3-D vector + // + explicit inline Vector3( Point3 pnt ); + + // Set all elements of a 3-D vector to the same scalar value + // + explicit inline Vector3( float scalar ); + + // Set vector float data in a 3-D vector + // + explicit inline Vector3( vec_float4 vf4 ); + + // Get vector float data from a 3-D vector + // + inline vec_float4 get128( ) const; + + // Assign one 3-D vector to another + // + inline Vector3 & operator =( Vector3 vec ); + + // Set the x element of a 3-D vector + // + inline Vector3 & setX( float x ); + + // Set the y element of a 3-D vector + // + inline Vector3 & setY( float y ); + + // Set the z element of a 3-D vector + // + inline Vector3 & setZ( float z ); + + // Get the x element of a 3-D vector + // + inline float getX( ) const; + + // Get the y element of a 3-D vector + // + inline float getY( ) const; + + // Get the z element of a 3-D vector + // + inline float getZ( ) const; + + // Set an x, y, or z element of a 3-D vector by index + // + inline Vector3 & setElem( int idx, float value ); + + // Get an x, y, or z element of a 3-D vector by index + // + inline float getElem( int idx ) const; + + // Subscripting operator to set or get an element + // + inline VecIdx operator []( int idx ); + + // Subscripting operator to get an element + // + inline float operator []( int idx ) const; + + // Add two 3-D vectors + // + inline const Vector3 operator +( Vector3 vec ) const; + + // Subtract a 3-D vector from another 3-D vector + // + inline const Vector3 operator -( Vector3 vec ) const; + + // Add a 3-D vector to a 3-D point + // + inline const Point3 operator +( Point3 pnt ) const; + + // Multiply a 3-D vector by a scalar + // + inline const Vector3 operator *( float scalar ) const; + + // Divide a 3-D vector by a scalar + // + inline const Vector3 operator /( float scalar ) const; + + // Perform compound assignment and addition with a 3-D vector + // + inline Vector3 & operator +=( Vector3 vec ); + + // Perform compound assignment and subtraction by a 3-D vector + // + inline Vector3 & operator -=( Vector3 vec ); + + // Perform compound assignment and multiplication by a scalar + // + inline Vector3 & operator *=( float scalar ); + + // Perform compound assignment and division by a scalar + // + inline Vector3 & operator /=( float scalar ); + + // Negate all elements of a 3-D vector + // + inline const Vector3 operator -( ) const; + + // Construct x axis + // + static inline const Vector3 xAxis( ); + + // Construct y axis + // + static inline const Vector3 yAxis( ); + + // Construct z axis + // + static inline const Vector3 zAxis( ); + +}; + +// Multiply a 3-D vector by a scalar +// +inline const Vector3 operator *( float scalar, Vector3 vec ); + +// Multiply two 3-D vectors per element +// +inline const Vector3 mulPerElem( Vector3 vec0, Vector3 vec1 ); + +// Divide two 3-D vectors per element +// NOTE: +// Floating-point behavior matches standard library function divf4. +// +inline const Vector3 divPerElem( Vector3 vec0, Vector3 vec1 ); + +// Compute the reciprocal of a 3-D vector per element +// NOTE: +// Floating-point behavior matches standard library function recipf4. +// +inline const Vector3 recipPerElem( Vector3 vec ); + +// Compute the square root of a 3-D vector per element +// NOTE: +// Floating-point behavior matches standard library function sqrtf4. +// +inline const Vector3 sqrtPerElem( Vector3 vec ); + +// Compute the reciprocal square root of a 3-D vector per element +// NOTE: +// Floating-point behavior matches standard library function rsqrtf4. +// +inline const Vector3 rsqrtPerElem( Vector3 vec ); + +// Compute the absolute value of a 3-D vector per element +// +inline const Vector3 absPerElem( Vector3 vec ); + +// Copy sign from one 3-D vector to another, per element +// +inline const Vector3 copySignPerElem( Vector3 vec0, Vector3 vec1 ); + +// Maximum of two 3-D vectors per element +// +inline const Vector3 maxPerElem( Vector3 vec0, Vector3 vec1 ); + +// Minimum of two 3-D vectors per element +// +inline const Vector3 minPerElem( Vector3 vec0, Vector3 vec1 ); + +// Maximum element of a 3-D vector +// +inline float maxElem( Vector3 vec ); + +// Minimum element of a 3-D vector +// +inline float minElem( Vector3 vec ); + +// Compute the sum of all elements of a 3-D vector +// +inline float sum( Vector3 vec ); + +// Compute the dot product of two 3-D vectors +// +inline float dot( Vector3 vec0, Vector3 vec1 ); + +// Compute the square of the length of a 3-D vector +// +inline float lengthSqr( Vector3 vec ); + +// Compute the length of a 3-D vector +// +inline float length( Vector3 vec ); + +// Normalize a 3-D vector +// NOTE: +// The result is unpredictable when all elements of vec are at or near zero. +// +inline const Vector3 normalize( Vector3 vec ); + +// Compute cross product of two 3-D vectors +// +inline const Vector3 cross( Vector3 vec0, Vector3 vec1 ); + +// Outer product of two 3-D vectors +// +inline const Matrix3 outer( Vector3 vec0, Vector3 vec1 ); + +// Pre-multiply a row vector by a 3x3 matrix +// NOTE: +// Slower than column post-multiply. +// +inline const Vector3 rowMul( Vector3 vec, const Matrix3 & mat ); + +// Cross-product matrix of a 3-D vector +// +inline const Matrix3 crossMatrix( Vector3 vec ); + +// Create cross-product matrix and multiply +// NOTE: +// Faster than separately creating a cross-product matrix and multiplying. +// +inline const Matrix3 crossMatrixMul( Vector3 vec, const Matrix3 & mat ); + +// Linear interpolation between two 3-D vectors +// NOTE: +// Does not clamp t between 0 and 1. +// +inline const Vector3 lerp( float t, Vector3 vec0, Vector3 vec1 ); + +// Spherical linear interpolation between two 3-D vectors +// NOTE: +// The result is unpredictable if the vectors point in opposite directions. +// Does not clamp t between 0 and 1. +// +inline const Vector3 slerp( float t, Vector3 unitVec0, Vector3 unitVec1 ); + +// Conditionally select between two 3-D vectors +// NOTE: +// This function uses a conditional select instruction to avoid a branch. +// +inline const Vector3 select( Vector3 vec0, Vector3 vec1, bool select1 ); + +// Store x, y, and z elements of a 3-D vector in the first three words of a quadword. +// The value of the fourth word (the word with the highest address) remains unchanged +// +inline void storeXYZ( Vector3 vec, vec_float4 * quad ); + +// Load four three-float 3-D vectors, stored in three quadwords +// +inline void loadXYZArray( Vector3 & vec0, Vector3 & vec1, Vector3 & vec2, Vector3 & vec3, const vec_float4 * threeQuads ); + +// Store four 3-D vectors in three quadwords +// +inline void storeXYZArray( Vector3 vec0, Vector3 vec1, Vector3 vec2, Vector3 vec3, vec_float4 * threeQuads ); + +// Store eight 3-D vectors as half-floats +// +inline void storeHalfFloats( Vector3 vec0, Vector3 vec1, Vector3 vec2, Vector3 vec3, Vector3 vec4, Vector3 vec5, Vector3 vec6, Vector3 vec7, vec_ushort8 * threeQuads ); + +#ifdef _VECTORMATH_DEBUG + +// Print a 3-D vector +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( Vector3 vec ); + +// Print a 3-D vector and an associated string identifier +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( Vector3 vec, const char * name ); + +#endif + +// A 4-D vector in array-of-structures format +// +class Vector4 +{ + vec_float4 mVec128; + +public: + // Default constructor; does no initialization + // + inline Vector4( ) { }; + + // Construct a 4-D vector from x, y, z, and w elements + // + inline Vector4( float x, float y, float z, float w ); + + // Construct a 4-D vector from a 3-D vector and a scalar + // + inline Vector4( Vector3 xyz, float w ); + + // Copy x, y, and z from a 3-D vector into a 4-D vector, and set w to 0 + // + explicit inline Vector4( Vector3 vec ); + + // Copy x, y, and z from a 3-D point into a 4-D vector, and set w to 1 + // + explicit inline Vector4( Point3 pnt ); + + // Copy elements from a quaternion into a 4-D vector + // + explicit inline Vector4( Quat quat ); + + // Set all elements of a 4-D vector to the same scalar value + // + explicit inline Vector4( float scalar ); + + // Set vector float data in a 4-D vector + // + explicit inline Vector4( vec_float4 vf4 ); + + // Get vector float data from a 4-D vector + // + inline vec_float4 get128( ) const; + + // Assign one 4-D vector to another + // + inline Vector4 & operator =( Vector4 vec ); + + // Set the x, y, and z elements of a 4-D vector + // NOTE: + // This function does not change the w element. + // + inline Vector4 & setXYZ( Vector3 vec ); + + // Get the x, y, and z elements of a 4-D vector + // + inline const Vector3 getXYZ( ) const; + + // Set the x element of a 4-D vector + // + inline Vector4 & setX( float x ); + + // Set the y element of a 4-D vector + // + inline Vector4 & setY( float y ); + + // Set the z element of a 4-D vector + // + inline Vector4 & setZ( float z ); + + // Set the w element of a 4-D vector + // + inline Vector4 & setW( float w ); + + // Get the x element of a 4-D vector + // + inline float getX( ) const; + + // Get the y element of a 4-D vector + // + inline float getY( ) const; + + // Get the z element of a 4-D vector + // + inline float getZ( ) const; + + // Get the w element of a 4-D vector + // + inline float getW( ) const; + + // Set an x, y, z, or w element of a 4-D vector by index + // + inline Vector4 & setElem( int idx, float value ); + + // Get an x, y, z, or w element of a 4-D vector by index + // + inline float getElem( int idx ) const; + + // Subscripting operator to set or get an element + // + inline VecIdx operator []( int idx ); + + // Subscripting operator to get an element + // + inline float operator []( int idx ) const; + + // Add two 4-D vectors + // + inline const Vector4 operator +( Vector4 vec ) const; + + // Subtract a 4-D vector from another 4-D vector + // + inline const Vector4 operator -( Vector4 vec ) const; + + // Multiply a 4-D vector by a scalar + // + inline const Vector4 operator *( float scalar ) const; + + // Divide a 4-D vector by a scalar + // + inline const Vector4 operator /( float scalar ) const; + + // Perform compound assignment and addition with a 4-D vector + // + inline Vector4 & operator +=( Vector4 vec ); + + // Perform compound assignment and subtraction by a 4-D vector + // + inline Vector4 & operator -=( Vector4 vec ); + + // Perform compound assignment and multiplication by a scalar + // + inline Vector4 & operator *=( float scalar ); + + // Perform compound assignment and division by a scalar + // + inline Vector4 & operator /=( float scalar ); + + // Negate all elements of a 4-D vector + // + inline const Vector4 operator -( ) const; + + // Construct x axis + // + static inline const Vector4 xAxis( ); + + // Construct y axis + // + static inline const Vector4 yAxis( ); + + // Construct z axis + // + static inline const Vector4 zAxis( ); + + // Construct w axis + // + static inline const Vector4 wAxis( ); + +}; + +// Multiply a 4-D vector by a scalar +// +inline const Vector4 operator *( float scalar, Vector4 vec ); + +// Multiply two 4-D vectors per element +// +inline const Vector4 mulPerElem( Vector4 vec0, Vector4 vec1 ); + +// Divide two 4-D vectors per element +// NOTE: +// Floating-point behavior matches standard library function divf4. +// +inline const Vector4 divPerElem( Vector4 vec0, Vector4 vec1 ); + +// Compute the reciprocal of a 4-D vector per element +// NOTE: +// Floating-point behavior matches standard library function recipf4. +// +inline const Vector4 recipPerElem( Vector4 vec ); + +// Compute the square root of a 4-D vector per element +// NOTE: +// Floating-point behavior matches standard library function sqrtf4. +// +inline const Vector4 sqrtPerElem( Vector4 vec ); + +// Compute the reciprocal square root of a 4-D vector per element +// NOTE: +// Floating-point behavior matches standard library function rsqrtf4. +// +inline const Vector4 rsqrtPerElem( Vector4 vec ); + +// Compute the absolute value of a 4-D vector per element +// +inline const Vector4 absPerElem( Vector4 vec ); + +// Copy sign from one 4-D vector to another, per element +// +inline const Vector4 copySignPerElem( Vector4 vec0, Vector4 vec1 ); + +// Maximum of two 4-D vectors per element +// +inline const Vector4 maxPerElem( Vector4 vec0, Vector4 vec1 ); + +// Minimum of two 4-D vectors per element +// +inline const Vector4 minPerElem( Vector4 vec0, Vector4 vec1 ); + +// Maximum element of a 4-D vector +// +inline float maxElem( Vector4 vec ); + +// Minimum element of a 4-D vector +// +inline float minElem( Vector4 vec ); + +// Compute the sum of all elements of a 4-D vector +// +inline float sum( Vector4 vec ); + +// Compute the dot product of two 4-D vectors +// +inline float dot( Vector4 vec0, Vector4 vec1 ); + +// Compute the square of the length of a 4-D vector +// +inline float lengthSqr( Vector4 vec ); + +// Compute the length of a 4-D vector +// +inline float length( Vector4 vec ); + +// Normalize a 4-D vector +// NOTE: +// The result is unpredictable when all elements of vec are at or near zero. +// +inline const Vector4 normalize( Vector4 vec ); + +// Outer product of two 4-D vectors +// +inline const Matrix4 outer( Vector4 vec0, Vector4 vec1 ); + +// Linear interpolation between two 4-D vectors +// NOTE: +// Does not clamp t between 0 and 1. +// +inline const Vector4 lerp( float t, Vector4 vec0, Vector4 vec1 ); + +// Spherical linear interpolation between two 4-D vectors +// NOTE: +// The result is unpredictable if the vectors point in opposite directions. +// Does not clamp t between 0 and 1. +// +inline const Vector4 slerp( float t, Vector4 unitVec0, Vector4 unitVec1 ); + +// Conditionally select between two 4-D vectors +// NOTE: +// This function uses a conditional select instruction to avoid a branch. +// +inline const Vector4 select( Vector4 vec0, Vector4 vec1, bool select1 ); + +// Store four 4-D vectors as half-floats +// +inline void storeHalfFloats( Vector4 vec0, Vector4 vec1, Vector4 vec2, Vector4 vec3, vec_ushort8 * twoQuads ); + +#ifdef _VECTORMATH_DEBUG + +// Print a 4-D vector +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( Vector4 vec ); + +// Print a 4-D vector and an associated string identifier +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( Vector4 vec, const char * name ); + +#endif + +// A 3-D point in array-of-structures format +// +class Point3 +{ + vec_float4 mVec128; + +public: + // Default constructor; does no initialization + // + inline Point3( ) { }; + + // Construct a 3-D point from x, y, and z elements + // + inline Point3( float x, float y, float z ); + + // Copy elements from a 3-D vector into a 3-D point + // + explicit inline Point3( Vector3 vec ); + + // Set all elements of a 3-D point to the same scalar value + // + explicit inline Point3( float scalar ); + + // Set vector float data in a 3-D point + // + explicit inline Point3( vec_float4 vf4 ); + + // Get vector float data from a 3-D point + // + inline vec_float4 get128( ) const; + + // Assign one 3-D point to another + // + inline Point3 & operator =( Point3 pnt ); + + // Set the x element of a 3-D point + // + inline Point3 & setX( float x ); + + // Set the y element of a 3-D point + // + inline Point3 & setY( float y ); + + // Set the z element of a 3-D point + // + inline Point3 & setZ( float z ); + + // Get the x element of a 3-D point + // + inline float getX( ) const; + + // Get the y element of a 3-D point + // + inline float getY( ) const; + + // Get the z element of a 3-D point + // + inline float getZ( ) const; + + // Set an x, y, or z element of a 3-D point by index + // + inline Point3 & setElem( int idx, float value ); + + // Get an x, y, or z element of a 3-D point by index + // + inline float getElem( int idx ) const; + + // Subscripting operator to set or get an element + // + inline VecIdx operator []( int idx ); + + // Subscripting operator to get an element + // + inline float operator []( int idx ) const; + + // Subtract a 3-D point from another 3-D point + // + inline const Vector3 operator -( Point3 pnt ) const; + + // Add a 3-D point to a 3-D vector + // + inline const Point3 operator +( Vector3 vec ) const; + + // Subtract a 3-D vector from a 3-D point + // + inline const Point3 operator -( Vector3 vec ) const; + + // Perform compound assignment and addition with a 3-D vector + // + inline Point3 & operator +=( Vector3 vec ); + + // Perform compound assignment and subtraction by a 3-D vector + // + inline Point3 & operator -=( Vector3 vec ); + +}; + +// Multiply two 3-D points per element +// +inline const Point3 mulPerElem( Point3 pnt0, Point3 pnt1 ); + +// Divide two 3-D points per element +// NOTE: +// Floating-point behavior matches standard library function divf4. +// +inline const Point3 divPerElem( Point3 pnt0, Point3 pnt1 ); + +// Compute the reciprocal of a 3-D point per element +// NOTE: +// Floating-point behavior matches standard library function recipf4. +// +inline const Point3 recipPerElem( Point3 pnt ); + +// Compute the square root of a 3-D point per element +// NOTE: +// Floating-point behavior matches standard library function sqrtf4. +// +inline const Point3 sqrtPerElem( Point3 pnt ); + +// Compute the reciprocal square root of a 3-D point per element +// NOTE: +// Floating-point behavior matches standard library function rsqrtf4. +// +inline const Point3 rsqrtPerElem( Point3 pnt ); + +// Compute the absolute value of a 3-D point per element +// +inline const Point3 absPerElem( Point3 pnt ); + +// Copy sign from one 3-D point to another, per element +// +inline const Point3 copySignPerElem( Point3 pnt0, Point3 pnt1 ); + +// Maximum of two 3-D points per element +// +inline const Point3 maxPerElem( Point3 pnt0, Point3 pnt1 ); + +// Minimum of two 3-D points per element +// +inline const Point3 minPerElem( Point3 pnt0, Point3 pnt1 ); + +// Maximum element of a 3-D point +// +inline float maxElem( Point3 pnt ); + +// Minimum element of a 3-D point +// +inline float minElem( Point3 pnt ); + +// Compute the sum of all elements of a 3-D point +// +inline float sum( Point3 pnt ); + +// Apply uniform scale to a 3-D point +// +inline const Point3 scale( Point3 pnt, float scaleVal ); + +// Apply non-uniform scale to a 3-D point +// +inline const Point3 scale( Point3 pnt, Vector3 scaleVec ); + +// Scalar projection of a 3-D point on a unit-length 3-D vector +// +inline float projection( Point3 pnt, Vector3 unitVec ); + +// Compute the square of the distance of a 3-D point from the coordinate-system origin +// +inline float distSqrFromOrigin( Point3 pnt ); + +// Compute the distance of a 3-D point from the coordinate-system origin +// +inline float distFromOrigin( Point3 pnt ); + +// Compute the square of the distance between two 3-D points +// +inline float distSqr( Point3 pnt0, Point3 pnt1 ); + +// Compute the distance between two 3-D points +// +inline float dist( Point3 pnt0, Point3 pnt1 ); + +// Linear interpolation between two 3-D points +// NOTE: +// Does not clamp t between 0 and 1. +// +inline const Point3 lerp( float t, Point3 pnt0, Point3 pnt1 ); + +// Conditionally select between two 3-D points +// NOTE: +// This function uses a conditional select instruction to avoid a branch. +// +inline const Point3 select( Point3 pnt0, Point3 pnt1, bool select1 ); + +// Store x, y, and z elements of a 3-D point in the first three words of a quadword. +// The value of the fourth word (the word with the highest address) remains unchanged +// +inline void storeXYZ( Point3 pnt, vec_float4 * quad ); + +// Load four three-float 3-D points, stored in three quadwords +// +inline void loadXYZArray( Point3 & pnt0, Point3 & pnt1, Point3 & pnt2, Point3 & pnt3, const vec_float4 * threeQuads ); + +// Store four 3-D points in three quadwords +// +inline void storeXYZArray( Point3 pnt0, Point3 pnt1, Point3 pnt2, Point3 pnt3, vec_float4 * threeQuads ); + +// Store eight 3-D points as half-floats +// +inline void storeHalfFloats( Point3 pnt0, Point3 pnt1, Point3 pnt2, Point3 pnt3, Point3 pnt4, Point3 pnt5, Point3 pnt6, Point3 pnt7, vec_ushort8 * threeQuads ); + +#ifdef _VECTORMATH_DEBUG + +// Print a 3-D point +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( Point3 pnt ); + +// Print a 3-D point and an associated string identifier +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( Point3 pnt, const char * name ); + +#endif + +// A quaternion in array-of-structures format +// +class Quat +{ + vec_float4 mVec128; + +public: + // Default constructor; does no initialization + // + inline Quat( ) { }; + + // Construct a quaternion from x, y, z, and w elements + // + inline Quat( float x, float y, float z, float w ); + + // Construct a quaternion from a 3-D vector and a scalar + // + inline Quat( Vector3 xyz, float w ); + + // Copy elements from a 4-D vector into a quaternion + // + explicit inline Quat( Vector4 vec ); + + // Convert a rotation matrix to a unit-length quaternion + // + explicit inline Quat( const Matrix3 & rotMat ); + + // Set all elements of a quaternion to the same scalar value + // + explicit inline Quat( float scalar ); + + // Set vector float data in a quaternion + // + explicit inline Quat( vec_float4 vf4 ); + + // Get vector float data from a quaternion + // + inline vec_float4 get128( ) const; + + // Assign one quaternion to another + // + inline Quat & operator =( Quat quat ); + + // Set the x, y, and z elements of a quaternion + // NOTE: + // This function does not change the w element. + // + inline Quat & setXYZ( Vector3 vec ); + + // Get the x, y, and z elements of a quaternion + // + inline const Vector3 getXYZ( ) const; + + // Set the x element of a quaternion + // + inline Quat & setX( float x ); + + // Set the y element of a quaternion + // + inline Quat & setY( float y ); + + // Set the z element of a quaternion + // + inline Quat & setZ( float z ); + + // Set the w element of a quaternion + // + inline Quat & setW( float w ); + + // Get the x element of a quaternion + // + inline float getX( ) const; + + // Get the y element of a quaternion + // + inline float getY( ) const; + + // Get the z element of a quaternion + // + inline float getZ( ) const; + + // Get the w element of a quaternion + // + inline float getW( ) const; + + // Set an x, y, z, or w element of a quaternion by index + // + inline Quat & setElem( int idx, float value ); + + // Get an x, y, z, or w element of a quaternion by index + // + inline float getElem( int idx ) const; + + // Subscripting operator to set or get an element + // + inline VecIdx operator []( int idx ); + + // Subscripting operator to get an element + // + inline float operator []( int idx ) const; + + // Add two quaternions + // + inline const Quat operator +( Quat quat ) const; + + // Subtract a quaternion from another quaternion + // + inline const Quat operator -( Quat quat ) const; + + // Multiply two quaternions + // + inline const Quat operator *( Quat quat ) const; + + // Multiply a quaternion by a scalar + // + inline const Quat operator *( float scalar ) const; + + // Divide a quaternion by a scalar + // + inline const Quat operator /( float scalar ) const; + + // Perform compound assignment and addition with a quaternion + // + inline Quat & operator +=( Quat quat ); + + // Perform compound assignment and subtraction by a quaternion + // + inline Quat & operator -=( Quat quat ); + + // Perform compound assignment and multiplication by a quaternion + // + inline Quat & operator *=( Quat quat ); + + // Perform compound assignment and multiplication by a scalar + // + inline Quat & operator *=( float scalar ); + + // Perform compound assignment and division by a scalar + // + inline Quat & operator /=( float scalar ); + + // Negate all elements of a quaternion + // + inline const Quat operator -( ) const; + + // Construct an identity quaternion + // + static inline const Quat identity( ); + + // Construct a quaternion to rotate between two unit-length 3-D vectors + // NOTE: + // The result is unpredictable if unitVec0 and unitVec1 point in opposite directions. + // + static inline const Quat rotation( Vector3 unitVec0, Vector3 unitVec1 ); + + // Construct a quaternion to rotate around a unit-length 3-D vector + // + static inline const Quat rotation( float radians, Vector3 unitVec ); + + // Construct a quaternion to rotate around the x axis + // + static inline const Quat rotationX( float radians ); + + // Construct a quaternion to rotate around the y axis + // + static inline const Quat rotationY( float radians ); + + // Construct a quaternion to rotate around the z axis + // + static inline const Quat rotationZ( float radians ); + +}; + +// Multiply a quaternion by a scalar +// +inline const Quat operator *( float scalar, Quat quat ); + +// Compute the conjugate of a quaternion +// +inline const Quat conj( Quat quat ); + +// Use a unit-length quaternion to rotate a 3-D vector +// +inline const Vector3 rotate( Quat unitQuat, Vector3 vec ); + +// Compute the dot product of two quaternions +// +inline float dot( Quat quat0, Quat quat1 ); + +// Compute the norm of a quaternion +// +inline float norm( Quat quat ); + +// Compute the length of a quaternion +// +inline float length( Quat quat ); + +// Normalize a quaternion +// NOTE: +// The result is unpredictable when all elements of quat are at or near zero. +// +inline const Quat normalize( Quat quat ); + +// Linear interpolation between two quaternions +// NOTE: +// Does not clamp t between 0 and 1. +// +inline const Quat lerp( float t, Quat quat0, Quat quat1 ); + +// Spherical linear interpolation between two quaternions +// NOTE: +// Interpolates along the shortest path between orientations. +// Does not clamp t between 0 and 1. +// +inline const Quat slerp( float t, Quat unitQuat0, Quat unitQuat1 ); + +// Spherical quadrangle interpolation +// +inline const Quat squad( float t, Quat unitQuat0, Quat unitQuat1, Quat unitQuat2, Quat unitQuat3 ); + +// Conditionally select between two quaternions +// NOTE: +// This function uses a conditional select instruction to avoid a branch. +// +inline const Quat select( Quat quat0, Quat quat1, bool select1 ); + +#ifdef _VECTORMATH_DEBUG + +// Print a quaternion +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( Quat quat ); + +// Print a quaternion and an associated string identifier +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( Quat quat, const char * name ); + +#endif + +// A 3x3 matrix in array-of-structures format +// +class Matrix3 +{ + Vector3 mCol0; + Vector3 mCol1; + Vector3 mCol2; + +public: + // Default constructor; does no initialization + // + inline Matrix3( ) { }; + + // Copy a 3x3 matrix + // + inline Matrix3( const Matrix3 & mat ); + + // Construct a 3x3 matrix containing the specified columns + // + inline Matrix3( Vector3 col0, Vector3 col1, Vector3 col2 ); + + // Construct a 3x3 rotation matrix from a unit-length quaternion + // + explicit inline Matrix3( Quat unitQuat ); + + // Set all elements of a 3x3 matrix to the same scalar value + // + explicit inline Matrix3( float scalar ); + + // Assign one 3x3 matrix to another + // + inline Matrix3 & operator =( const Matrix3 & mat ); + + // Set column 0 of a 3x3 matrix + // + inline Matrix3 & setCol0( Vector3 col0 ); + + // Set column 1 of a 3x3 matrix + // + inline Matrix3 & setCol1( Vector3 col1 ); + + // Set column 2 of a 3x3 matrix + // + inline Matrix3 & setCol2( Vector3 col2 ); + + // Get column 0 of a 3x3 matrix + // + inline const Vector3 getCol0( ) const; + + // Get column 1 of a 3x3 matrix + // + inline const Vector3 getCol1( ) const; + + // Get column 2 of a 3x3 matrix + // + inline const Vector3 getCol2( ) const; + + // Set the column of a 3x3 matrix referred to by the specified index + // + inline Matrix3 & setCol( int col, Vector3 vec ); + + // Set the row of a 3x3 matrix referred to by the specified index + // + inline Matrix3 & setRow( int row, Vector3 vec ); + + // Get the column of a 3x3 matrix referred to by the specified index + // + inline const Vector3 getCol( int col ) const; + + // Get the row of a 3x3 matrix referred to by the specified index + // + inline const Vector3 getRow( int row ) const; + + // Subscripting operator to set or get a column + // + inline Vector3 & operator []( int col ); + + // Subscripting operator to get a column + // + inline const Vector3 operator []( int col ) const; + + // Set the element of a 3x3 matrix referred to by column and row indices + // + inline Matrix3 & setElem( int col, int row, float val ); + + // Get the element of a 3x3 matrix referred to by column and row indices + // + inline float getElem( int col, int row ) const; + + // Add two 3x3 matrices + // + inline const Matrix3 operator +( const Matrix3 & mat ) const; + + // Subtract a 3x3 matrix from another 3x3 matrix + // + inline const Matrix3 operator -( const Matrix3 & mat ) const; + + // Negate all elements of a 3x3 matrix + // + inline const Matrix3 operator -( ) const; + + // Multiply a 3x3 matrix by a scalar + // + inline const Matrix3 operator *( float scalar ) const; + + // Multiply a 3x3 matrix by a 3-D vector + // + inline const Vector3 operator *( Vector3 vec ) const; + + // Multiply two 3x3 matrices + // + inline const Matrix3 operator *( const Matrix3 & mat ) const; + + // Perform compound assignment and addition with a 3x3 matrix + // + inline Matrix3 & operator +=( const Matrix3 & mat ); + + // Perform compound assignment and subtraction by a 3x3 matrix + // + inline Matrix3 & operator -=( const Matrix3 & mat ); + + // Perform compound assignment and multiplication by a scalar + // + inline Matrix3 & operator *=( float scalar ); + + // Perform compound assignment and multiplication by a 3x3 matrix + // + inline Matrix3 & operator *=( const Matrix3 & mat ); + + // Construct an identity 3x3 matrix + // + static inline const Matrix3 identity( ); + + // Construct a 3x3 matrix to rotate around the x axis + // + static inline const Matrix3 rotationX( float radians ); + + // Construct a 3x3 matrix to rotate around the y axis + // + static inline const Matrix3 rotationY( float radians ); + + // Construct a 3x3 matrix to rotate around the z axis + // + static inline const Matrix3 rotationZ( float radians ); + + // Construct a 3x3 matrix to rotate around the x, y, and z axes + // + static inline const Matrix3 rotationZYX( Vector3 radiansXYZ ); + + // Construct a 3x3 matrix to rotate around a unit-length 3-D vector + // + static inline const Matrix3 rotation( float radians, Vector3 unitVec ); + + // Construct a rotation matrix from a unit-length quaternion + // + static inline const Matrix3 rotation( Quat unitQuat ); + + // Construct a 3x3 matrix to perform scaling + // + static inline const Matrix3 scale( Vector3 scaleVec ); + +}; +// Multiply a 3x3 matrix by a scalar +// +inline const Matrix3 operator *( float scalar, const Matrix3 & mat ); + +// Append (post-multiply) a scale transformation to a 3x3 matrix +// NOTE: +// Faster than creating and multiplying a scale transformation matrix. +// +inline const Matrix3 appendScale( const Matrix3 & mat, Vector3 scaleVec ); + +// Prepend (pre-multiply) a scale transformation to a 3x3 matrix +// NOTE: +// Faster than creating and multiplying a scale transformation matrix. +// +inline const Matrix3 prependScale( Vector3 scaleVec, const Matrix3 & mat ); + +// Multiply two 3x3 matrices per element +// +inline const Matrix3 mulPerElem( const Matrix3 & mat0, const Matrix3 & mat1 ); + +// Compute the absolute value of a 3x3 matrix per element +// +inline const Matrix3 absPerElem( const Matrix3 & mat ); + +// Transpose of a 3x3 matrix +// +inline const Matrix3 transpose( const Matrix3 & mat ); + +// Compute the inverse of a 3x3 matrix +// NOTE: +// Result is unpredictable when the determinant of mat is equal to or near 0. +// +inline const Matrix3 inverse( const Matrix3 & mat ); + +// Determinant of a 3x3 matrix +// +inline float determinant( const Matrix3 & mat ); + +// Conditionally select between two 3x3 matrices +// NOTE: +// This function uses a conditional select instruction to avoid a branch. +// +inline const Matrix3 select( const Matrix3 & mat0, const Matrix3 & mat1, bool select1 ); + +#ifdef _VECTORMATH_DEBUG + +// Print a 3x3 matrix +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Matrix3 & mat ); + +// Print a 3x3 matrix and an associated string identifier +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Matrix3 & mat, const char * name ); + +#endif + +// A 4x4 matrix in array-of-structures format +// +class Matrix4 +{ + Vector4 mCol0; + Vector4 mCol1; + Vector4 mCol2; + Vector4 mCol3; + +public: + // Default constructor; does no initialization + // + inline Matrix4( ) { }; + + // Copy a 4x4 matrix + // + inline Matrix4( const Matrix4 & mat ); + + // Construct a 4x4 matrix containing the specified columns + // + inline Matrix4( Vector4 col0, Vector4 col1, Vector4 col2, Vector4 col3 ); + + // Construct a 4x4 matrix from a 3x4 transformation matrix + // + explicit inline Matrix4( const Transform3 & mat ); + + // Construct a 4x4 matrix from a 3x3 matrix and a 3-D vector + // + inline Matrix4( const Matrix3 & mat, Vector3 translateVec ); + + // Construct a 4x4 matrix from a unit-length quaternion and a 3-D vector + // + inline Matrix4( Quat unitQuat, Vector3 translateVec ); + + // Set all elements of a 4x4 matrix to the same scalar value + // + explicit inline Matrix4( float scalar ); + + // Assign one 4x4 matrix to another + // + inline Matrix4 & operator =( const Matrix4 & mat ); + + // Set the upper-left 3x3 submatrix + // NOTE: + // This function does not change the bottom row elements. + // + inline Matrix4 & setUpper3x3( const Matrix3 & mat3 ); + + // Get the upper-left 3x3 submatrix of a 4x4 matrix + // + inline const Matrix3 getUpper3x3( ) const; + + // Set translation component + // NOTE: + // This function does not change the bottom row elements. + // + inline Matrix4 & setTranslation( Vector3 translateVec ); + + // Get the translation component of a 4x4 matrix + // + inline const Vector3 getTranslation( ) const; + + // Set column 0 of a 4x4 matrix + // + inline Matrix4 & setCol0( Vector4 col0 ); + + // Set column 1 of a 4x4 matrix + // + inline Matrix4 & setCol1( Vector4 col1 ); + + // Set column 2 of a 4x4 matrix + // + inline Matrix4 & setCol2( Vector4 col2 ); + + // Set column 3 of a 4x4 matrix + // + inline Matrix4 & setCol3( Vector4 col3 ); + + // Get column 0 of a 4x4 matrix + // + inline const Vector4 getCol0( ) const; + + // Get column 1 of a 4x4 matrix + // + inline const Vector4 getCol1( ) const; + + // Get column 2 of a 4x4 matrix + // + inline const Vector4 getCol2( ) const; + + // Get column 3 of a 4x4 matrix + // + inline const Vector4 getCol3( ) const; + + // Set the column of a 4x4 matrix referred to by the specified index + // + inline Matrix4 & setCol( int col, Vector4 vec ); + + // Set the row of a 4x4 matrix referred to by the specified index + // + inline Matrix4 & setRow( int row, Vector4 vec ); + + // Get the column of a 4x4 matrix referred to by the specified index + // + inline const Vector4 getCol( int col ) const; + + // Get the row of a 4x4 matrix referred to by the specified index + // + inline const Vector4 getRow( int row ) const; + + // Subscripting operator to set or get a column + // + inline Vector4 & operator []( int col ); + + // Subscripting operator to get a column + // + inline const Vector4 operator []( int col ) const; + + // Set the element of a 4x4 matrix referred to by column and row indices + // + inline Matrix4 & setElem( int col, int row, float val ); + + // Get the element of a 4x4 matrix referred to by column and row indices + // + inline float getElem( int col, int row ) const; + + // Add two 4x4 matrices + // + inline const Matrix4 operator +( const Matrix4 & mat ) const; + + // Subtract a 4x4 matrix from another 4x4 matrix + // + inline const Matrix4 operator -( const Matrix4 & mat ) const; + + // Negate all elements of a 4x4 matrix + // + inline const Matrix4 operator -( ) const; + + // Multiply a 4x4 matrix by a scalar + // + inline const Matrix4 operator *( float scalar ) const; + + // Multiply a 4x4 matrix by a 4-D vector + // + inline const Vector4 operator *( Vector4 vec ) const; + + // Multiply a 4x4 matrix by a 3-D vector + // + inline const Vector4 operator *( Vector3 vec ) const; + + // Multiply a 4x4 matrix by a 3-D point + // + inline const Vector4 operator *( Point3 pnt ) const; + + // Multiply two 4x4 matrices + // + inline const Matrix4 operator *( const Matrix4 & mat ) const; + + // Multiply a 4x4 matrix by a 3x4 transformation matrix + // + inline const Matrix4 operator *( const Transform3 & tfrm ) const; + + // Perform compound assignment and addition with a 4x4 matrix + // + inline Matrix4 & operator +=( const Matrix4 & mat ); + + // Perform compound assignment and subtraction by a 4x4 matrix + // + inline Matrix4 & operator -=( const Matrix4 & mat ); + + // Perform compound assignment and multiplication by a scalar + // + inline Matrix4 & operator *=( float scalar ); + + // Perform compound assignment and multiplication by a 4x4 matrix + // + inline Matrix4 & operator *=( const Matrix4 & mat ); + + // Perform compound assignment and multiplication by a 3x4 transformation matrix + // + inline Matrix4 & operator *=( const Transform3 & tfrm ); + + // Construct an identity 4x4 matrix + // + static inline const Matrix4 identity( ); + + // Construct a 4x4 matrix to rotate around the x axis + // + static inline const Matrix4 rotationX( float radians ); + + // Construct a 4x4 matrix to rotate around the y axis + // + static inline const Matrix4 rotationY( float radians ); + + // Construct a 4x4 matrix to rotate around the z axis + // + static inline const Matrix4 rotationZ( float radians ); + + // Construct a 4x4 matrix to rotate around the x, y, and z axes + // + static inline const Matrix4 rotationZYX( Vector3 radiansXYZ ); + + // Construct a 4x4 matrix to rotate around a unit-length 3-D vector + // + static inline const Matrix4 rotation( float radians, Vector3 unitVec ); + + // Construct a rotation matrix from a unit-length quaternion + // + static inline const Matrix4 rotation( Quat unitQuat ); + + // Construct a 4x4 matrix to perform scaling + // + static inline const Matrix4 scale( Vector3 scaleVec ); + + // Construct a 4x4 matrix to perform translation + // + static inline const Matrix4 translation( Vector3 translateVec ); + + // Construct viewing matrix based on eye position, position looked at, and up direction + // + static inline const Matrix4 lookAt( Point3 eyePos, Point3 lookAtPos, Vector3 upVec ); + + // Construct a perspective projection matrix + // + static inline const Matrix4 perspective( float fovyRadians, float aspect, float zNear, float zFar ); + + // Construct a perspective projection matrix based on frustum + // + static inline const Matrix4 frustum( float left, float right, float bottom, float top, float zNear, float zFar ); + + // Construct an orthographic projection matrix + // + static inline const Matrix4 orthographic( float left, float right, float bottom, float top, float zNear, float zFar ); + +}; +// Multiply a 4x4 matrix by a scalar +// +inline const Matrix4 operator *( float scalar, const Matrix4 & mat ); + +// Append (post-multiply) a scale transformation to a 4x4 matrix +// NOTE: +// Faster than creating and multiplying a scale transformation matrix. +// +inline const Matrix4 appendScale( const Matrix4 & mat, Vector3 scaleVec ); + +// Prepend (pre-multiply) a scale transformation to a 4x4 matrix +// NOTE: +// Faster than creating and multiplying a scale transformation matrix. +// +inline const Matrix4 prependScale( Vector3 scaleVec, const Matrix4 & mat ); + +// Multiply two 4x4 matrices per element +// +inline const Matrix4 mulPerElem( const Matrix4 & mat0, const Matrix4 & mat1 ); + +// Compute the absolute value of a 4x4 matrix per element +// +inline const Matrix4 absPerElem( const Matrix4 & mat ); + +// Transpose of a 4x4 matrix +// +inline const Matrix4 transpose( const Matrix4 & mat ); + +// Compute the inverse of a 4x4 matrix +// NOTE: +// Result is unpredictable when the determinant of mat is equal to or near 0. +// +inline const Matrix4 inverse( const Matrix4 & mat ); + +// Compute the inverse of a 4x4 matrix, which is expected to be an affine matrix +// NOTE: +// This can be used to achieve better performance than a general inverse when the specified 4x4 matrix meets the given restrictions. The result is unpredictable when the determinant of mat is equal to or near 0. +// +inline const Matrix4 affineInverse( const Matrix4 & mat ); + +// Compute the inverse of a 4x4 matrix, which is expected to be an affine matrix with an orthogonal upper-left 3x3 submatrix +// NOTE: +// This can be used to achieve better performance than a general inverse when the specified 4x4 matrix meets the given restrictions. +// +inline const Matrix4 orthoInverse( const Matrix4 & mat ); + +// Determinant of a 4x4 matrix +// +inline float determinant( const Matrix4 & mat ); + +// Conditionally select between two 4x4 matrices +// NOTE: +// This function uses a conditional select instruction to avoid a branch. +// +inline const Matrix4 select( const Matrix4 & mat0, const Matrix4 & mat1, bool select1 ); + +#ifdef _VECTORMATH_DEBUG + +// Print a 4x4 matrix +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Matrix4 & mat ); + +// Print a 4x4 matrix and an associated string identifier +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Matrix4 & mat, const char * name ); + +#endif + +// A 3x4 transformation matrix in array-of-structures format +// +class Transform3 +{ + Vector3 mCol0; + Vector3 mCol1; + Vector3 mCol2; + Vector3 mCol3; + +public: + // Default constructor; does no initialization + // + inline Transform3( ) { }; + + // Copy a 3x4 transformation matrix + // + inline Transform3( const Transform3 & tfrm ); + + // Construct a 3x4 transformation matrix containing the specified columns + // + inline Transform3( Vector3 col0, Vector3 col1, Vector3 col2, Vector3 col3 ); + + // Construct a 3x4 transformation matrix from a 3x3 matrix and a 3-D vector + // + inline Transform3( const Matrix3 & tfrm, Vector3 translateVec ); + + // Construct a 3x4 transformation matrix from a unit-length quaternion and a 3-D vector + // + inline Transform3( Quat unitQuat, Vector3 translateVec ); + + // Set all elements of a 3x4 transformation matrix to the same scalar value + // + explicit inline Transform3( float scalar ); + + // Assign one 3x4 transformation matrix to another + // + inline Transform3 & operator =( const Transform3 & tfrm ); + + // Set the upper-left 3x3 submatrix + // + inline Transform3 & setUpper3x3( const Matrix3 & mat3 ); + + // Get the upper-left 3x3 submatrix of a 3x4 transformation matrix + // + inline const Matrix3 getUpper3x3( ) const; + + // Set translation component + // + inline Transform3 & setTranslation( Vector3 translateVec ); + + // Get the translation component of a 3x4 transformation matrix + // + inline const Vector3 getTranslation( ) const; + + // Set column 0 of a 3x4 transformation matrix + // + inline Transform3 & setCol0( Vector3 col0 ); + + // Set column 1 of a 3x4 transformation matrix + // + inline Transform3 & setCol1( Vector3 col1 ); + + // Set column 2 of a 3x4 transformation matrix + // + inline Transform3 & setCol2( Vector3 col2 ); + + // Set column 3 of a 3x4 transformation matrix + // + inline Transform3 & setCol3( Vector3 col3 ); + + // Get column 0 of a 3x4 transformation matrix + // + inline const Vector3 getCol0( ) const; + + // Get column 1 of a 3x4 transformation matrix + // + inline const Vector3 getCol1( ) const; + + // Get column 2 of a 3x4 transformation matrix + // + inline const Vector3 getCol2( ) const; + + // Get column 3 of a 3x4 transformation matrix + // + inline const Vector3 getCol3( ) const; + + // Set the column of a 3x4 transformation matrix referred to by the specified index + // + inline Transform3 & setCol( int col, Vector3 vec ); + + // Set the row of a 3x4 transformation matrix referred to by the specified index + // + inline Transform3 & setRow( int row, Vector4 vec ); + + // Get the column of a 3x4 transformation matrix referred to by the specified index + // + inline const Vector3 getCol( int col ) const; + + // Get the row of a 3x4 transformation matrix referred to by the specified index + // + inline const Vector4 getRow( int row ) const; + + // Subscripting operator to set or get a column + // + inline Vector3 & operator []( int col ); + + // Subscripting operator to get a column + // + inline const Vector3 operator []( int col ) const; + + // Set the element of a 3x4 transformation matrix referred to by column and row indices + // + inline Transform3 & setElem( int col, int row, float val ); + + // Get the element of a 3x4 transformation matrix referred to by column and row indices + // + inline float getElem( int col, int row ) const; + + // Multiply a 3x4 transformation matrix by a 3-D vector + // + inline const Vector3 operator *( Vector3 vec ) const; + + // Multiply a 3x4 transformation matrix by a 3-D point + // + inline const Point3 operator *( Point3 pnt ) const; + + // Multiply two 3x4 transformation matrices + // + inline const Transform3 operator *( const Transform3 & tfrm ) const; + + // Perform compound assignment and multiplication by a 3x4 transformation matrix + // + inline Transform3 & operator *=( const Transform3 & tfrm ); + + // Construct an identity 3x4 transformation matrix + // + static inline const Transform3 identity( ); + + // Construct a 3x4 transformation matrix to rotate around the x axis + // + static inline const Transform3 rotationX( float radians ); + + // Construct a 3x4 transformation matrix to rotate around the y axis + // + static inline const Transform3 rotationY( float radians ); + + // Construct a 3x4 transformation matrix to rotate around the z axis + // + static inline const Transform3 rotationZ( float radians ); + + // Construct a 3x4 transformation matrix to rotate around the x, y, and z axes + // + static inline const Transform3 rotationZYX( Vector3 radiansXYZ ); + + // Construct a 3x4 transformation matrix to rotate around a unit-length 3-D vector + // + static inline const Transform3 rotation( float radians, Vector3 unitVec ); + + // Construct a rotation matrix from a unit-length quaternion + // + static inline const Transform3 rotation( Quat unitQuat ); + + // Construct a 3x4 transformation matrix to perform scaling + // + static inline const Transform3 scale( Vector3 scaleVec ); + + // Construct a 3x4 transformation matrix to perform translation + // + static inline const Transform3 translation( Vector3 translateVec ); + +}; +// Append (post-multiply) a scale transformation to a 3x4 transformation matrix +// NOTE: +// Faster than creating and multiplying a scale transformation matrix. +// +inline const Transform3 appendScale( const Transform3 & tfrm, Vector3 scaleVec ); + +// Prepend (pre-multiply) a scale transformation to a 3x4 transformation matrix +// NOTE: +// Faster than creating and multiplying a scale transformation matrix. +// +inline const Transform3 prependScale( Vector3 scaleVec, const Transform3 & tfrm ); + +// Multiply two 3x4 transformation matrices per element +// +inline const Transform3 mulPerElem( const Transform3 & tfrm0, const Transform3 & tfrm1 ); + +// Compute the absolute value of a 3x4 transformation matrix per element +// +inline const Transform3 absPerElem( const Transform3 & tfrm ); + +// Inverse of a 3x4 transformation matrix +// NOTE: +// Result is unpredictable when the determinant of the left 3x3 submatrix is equal to or near 0. +// +inline const Transform3 inverse( const Transform3 & tfrm ); + +// Compute the inverse of a 3x4 transformation matrix, expected to have an orthogonal upper-left 3x3 submatrix +// NOTE: +// This can be used to achieve better performance than a general inverse when the specified 3x4 transformation matrix meets the given restrictions. +// +inline const Transform3 orthoInverse( const Transform3 & tfrm ); + +// Conditionally select between two 3x4 transformation matrices +// NOTE: +// This function uses a conditional select instruction to avoid a branch. +// +inline const Transform3 select( const Transform3 & tfrm0, const Transform3 & tfrm1, bool select1 ); + +#ifdef _VECTORMATH_DEBUG + +// Print a 3x4 transformation matrix +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Transform3 & tfrm ); + +// Print a 3x4 transformation matrix and an associated string identifier +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Transform3 & tfrm, const char * name ); + +#endif + +} // namespace Aos +} // namespace Vectormath + +#include "vec_aos.h" +#include "quat_aos.h" +#include "mat_aos.h" + +#endif diff --git a/Extras/vectormathlibrary/include/vectormath/spu/cpp/vectormath_soa.h b/Extras/vectormathlibrary/include/vectormath/spu/cpp/vectormath_soa.h new file mode 100644 index 000000000..31b8f8304 --- /dev/null +++ b/Extras/vectormathlibrary/include/vectormath/spu/cpp/vectormath_soa.h @@ -0,0 +1,1921 @@ +/* + Copyright (C) 2006, 2007 Sony Computer Entertainment 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. + * Neither the name of the Sony Computer Entertainment Inc nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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 _VECTORMATH_SOA_CPP_H +#define _VECTORMATH_SOA_CPP_H + +#include +#include +#include "floatInVec.h" +#include "boolInVec.h" +#include "stdio.h" +#include "vectormath_aos.h" + +#ifdef _VECTORMATH_DEBUG +#endif + +namespace Vectormath { + +namespace Soa { + +//----------------------------------------------------------------------------- +// Forward Declarations +// + +class Vector3; +class Vector4; +class Point3; +class Quat; +class Matrix3; +class Matrix4; +class Transform3; + +// A set of four 3-D vectors in structure-of-arrays format +// +class Vector3 +{ + typedef vec_float4 vec_float4_t; + vec_float4 mX; + vec_float4 mY; + vec_float4 mZ; + +public: + // Default constructor; does no initialization + // + inline Vector3( ) { }; + + // Copy a 3-D vector + // + inline Vector3( const Vector3 & vec ); + + // Construct a 3-D vector from x, y, and z elements + // + inline Vector3( vec_float4 x, vec_float4 y, vec_float4 z ); + + // Copy elements from a 3-D point into a 3-D vector + // + explicit inline Vector3( const Point3 & pnt ); + + // Set all elements of a 3-D vector to the same scalar value + // + explicit inline Vector3( vec_float4 scalar ); + + // Replicate an AoS 3-D vector + // + inline Vector3( Aos::Vector3 vec ); + + // Insert four AoS 3-D vectors + // + inline Vector3( Aos::Vector3 vec0, Aos::Vector3 vec1, Aos::Vector3 vec2, Aos::Vector3 vec3 ); + + // Extract four AoS 3-D vectors + // + inline void get4Aos( Aos::Vector3 & result0, Aos::Vector3 & result1, Aos::Vector3 & result2, Aos::Vector3 & result3 ) const; + + // Assign one 3-D vector to another + // + inline Vector3 & operator =( const Vector3 & vec ); + + // Set the x element of a 3-D vector + // + inline Vector3 & setX( vec_float4 x ); + + // Set the y element of a 3-D vector + // + inline Vector3 & setY( vec_float4 y ); + + // Set the z element of a 3-D vector + // + inline Vector3 & setZ( vec_float4 z ); + + // Get the x element of a 3-D vector + // + inline vec_float4 getX( ) const; + + // Get the y element of a 3-D vector + // + inline vec_float4 getY( ) const; + + // Get the z element of a 3-D vector + // + inline vec_float4 getZ( ) const; + + // Set an x, y, or z element of a 3-D vector by index + // + inline Vector3 & setElem( int idx, vec_float4 value ); + + // Get an x, y, or z element of a 3-D vector by index + // + inline vec_float4 getElem( int idx ) const; + + // Subscripting operator to set or get an element + // + inline vec_float4_t & operator []( int idx ); + + // Subscripting operator to get an element + // + inline vec_float4 operator []( int idx ) const; + + // Add two 3-D vectors + // + inline const Vector3 operator +( const Vector3 & vec ) const; + + // Subtract a 3-D vector from another 3-D vector + // + inline const Vector3 operator -( const Vector3 & vec ) const; + + // Add a 3-D vector to a 3-D point + // + inline const Point3 operator +( const Point3 & pnt ) const; + + // Multiply a 3-D vector by a scalar + // + inline const Vector3 operator *( vec_float4 scalar ) const; + + // Divide a 3-D vector by a scalar + // + inline const Vector3 operator /( vec_float4 scalar ) const; + + // Perform compound assignment and addition with a 3-D vector + // + inline Vector3 & operator +=( const Vector3 & vec ); + + // Perform compound assignment and subtraction by a 3-D vector + // + inline Vector3 & operator -=( const Vector3 & vec ); + + // Perform compound assignment and multiplication by a scalar + // + inline Vector3 & operator *=( vec_float4 scalar ); + + // Perform compound assignment and division by a scalar + // + inline Vector3 & operator /=( vec_float4 scalar ); + + // Negate all elements of a 3-D vector + // + inline const Vector3 operator -( ) const; + + // Construct x axis + // + static inline const Vector3 xAxis( ); + + // Construct y axis + // + static inline const Vector3 yAxis( ); + + // Construct z axis + // + static inline const Vector3 zAxis( ); + +}; + +// Multiply a 3-D vector by a scalar +// +inline const Vector3 operator *( vec_float4 scalar, const Vector3 & vec ); + +// Multiply two 3-D vectors per element +// +inline const Vector3 mulPerElem( const Vector3 & vec0, const Vector3 & vec1 ); + +// Divide two 3-D vectors per element +// NOTE: +// Floating-point behavior matches standard library function divf4. +// +inline const Vector3 divPerElem( const Vector3 & vec0, const Vector3 & vec1 ); + +// Compute the reciprocal of a 3-D vector per element +// NOTE: +// Floating-point behavior matches standard library function recipf4. +// +inline const Vector3 recipPerElem( const Vector3 & vec ); + +// Compute the square root of a 3-D vector per element +// NOTE: +// Floating-point behavior matches standard library function sqrtf4. +// +inline const Vector3 sqrtPerElem( const Vector3 & vec ); + +// Compute the reciprocal square root of a 3-D vector per element +// NOTE: +// Floating-point behavior matches standard library function rsqrtf4. +// +inline const Vector3 rsqrtPerElem( const Vector3 & vec ); + +// Compute the absolute value of a 3-D vector per element +// +inline const Vector3 absPerElem( const Vector3 & vec ); + +// Copy sign from one 3-D vector to another, per element +// +inline const Vector3 copySignPerElem( const Vector3 & vec0, const Vector3 & vec1 ); + +// Maximum of two 3-D vectors per element +// +inline const Vector3 maxPerElem( const Vector3 & vec0, const Vector3 & vec1 ); + +// Minimum of two 3-D vectors per element +// +inline const Vector3 minPerElem( const Vector3 & vec0, const Vector3 & vec1 ); + +// Maximum element of a 3-D vector +// +inline vec_float4 maxElem( const Vector3 & vec ); + +// Minimum element of a 3-D vector +// +inline vec_float4 minElem( const Vector3 & vec ); + +// Compute the sum of all elements of a 3-D vector +// +inline vec_float4 sum( const Vector3 & vec ); + +// Compute the dot product of two 3-D vectors +// +inline vec_float4 dot( const Vector3 & vec0, const Vector3 & vec1 ); + +// Compute the square of the length of a 3-D vector +// +inline vec_float4 lengthSqr( const Vector3 & vec ); + +// Compute the length of a 3-D vector +// +inline vec_float4 length( const Vector3 & vec ); + +// Normalize a 3-D vector +// NOTE: +// The result is unpredictable when all elements of vec are at or near zero. +// +inline const Vector3 normalize( const Vector3 & vec ); + +// Compute cross product of two 3-D vectors +// +inline const Vector3 cross( const Vector3 & vec0, const Vector3 & vec1 ); + +// Outer product of two 3-D vectors +// +inline const Matrix3 outer( const Vector3 & vec0, const Vector3 & vec1 ); + +// Pre-multiply a row vector by a 3x3 matrix +// +inline const Vector3 rowMul( const Vector3 & vec, const Matrix3 & mat ); + +// Cross-product matrix of a 3-D vector +// +inline const Matrix3 crossMatrix( const Vector3 & vec ); + +// Create cross-product matrix and multiply +// NOTE: +// Faster than separately creating a cross-product matrix and multiplying. +// +inline const Matrix3 crossMatrixMul( const Vector3 & vec, const Matrix3 & mat ); + +// Linear interpolation between two 3-D vectors +// NOTE: +// Does not clamp t between 0 and 1. +// +inline const Vector3 lerp( vec_float4 t, const Vector3 & vec0, const Vector3 & vec1 ); + +// Spherical linear interpolation between two 3-D vectors +// NOTE: +// The result is unpredictable if the vectors point in opposite directions. +// Does not clamp t between 0 and 1. +// +inline const Vector3 slerp( vec_float4 t, const Vector3 & unitVec0, const Vector3 & unitVec1 ); + +// Conditionally select between two 3-D vectors +// NOTE: +// This function uses a conditional select instruction to avoid a branch. +// +inline const Vector3 select( const Vector3 & vec0, const Vector3 & vec1, vec_uint4 select1 ); + +// Load four three-float 3-D vectors, stored in three quadwords +// +inline void loadXYZArray( Vector3 & vec, const vec_float4 * threeQuads ); + +// Store four slots of an SoA 3-D vector in three quadwords +// +inline void storeXYZArray( const Vector3 & vec, vec_float4 * threeQuads ); + +// Store eight slots of two SoA 3-D vectors as half-floats +// +inline void storeHalfFloats( const Vector3 & vec0, const Vector3 & vec1, vec_ushort8 * threeQuads ); + +#ifdef _VECTORMATH_DEBUG + +// Print a 3-D vector +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Vector3 & vec ); + +// Print a 3-D vector and an associated string identifier +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Vector3 & vec, const char * name ); + +#endif + +// A set of four 4-D vectors in structure-of-arrays format +// +class Vector4 +{ + typedef vec_float4 vec_float4_t; + vec_float4 mX; + vec_float4 mY; + vec_float4 mZ; + vec_float4 mW; + +public: + // Default constructor; does no initialization + // + inline Vector4( ) { }; + + // Copy a 4-D vector + // + inline Vector4( const Vector4 & vec ); + + // Construct a 4-D vector from x, y, z, and w elements + // + inline Vector4( vec_float4 x, vec_float4 y, vec_float4 z, vec_float4 w ); + + // Construct a 4-D vector from a 3-D vector and a scalar + // + inline Vector4( const Vector3 & xyz, vec_float4 w ); + + // Copy x, y, and z from a 3-D vector into a 4-D vector, and set w to 0 + // + explicit inline Vector4( const Vector3 & vec ); + + // Copy x, y, and z from a 3-D point into a 4-D vector, and set w to 1 + // + explicit inline Vector4( const Point3 & pnt ); + + // Copy elements from a quaternion into a 4-D vector + // + explicit inline Vector4( const Quat & quat ); + + // Set all elements of a 4-D vector to the same scalar value + // + explicit inline Vector4( vec_float4 scalar ); + + // Replicate an AoS 4-D vector + // + inline Vector4( Aos::Vector4 vec ); + + // Insert four AoS 4-D vectors + // + inline Vector4( Aos::Vector4 vec0, Aos::Vector4 vec1, Aos::Vector4 vec2, Aos::Vector4 vec3 ); + + // Extract four AoS 4-D vectors + // + inline void get4Aos( Aos::Vector4 & result0, Aos::Vector4 & result1, Aos::Vector4 & result2, Aos::Vector4 & result3 ) const; + + // Assign one 4-D vector to another + // + inline Vector4 & operator =( const Vector4 & vec ); + + // Set the x, y, and z elements of a 4-D vector + // NOTE: + // This function does not change the w element. + // + inline Vector4 & setXYZ( const Vector3 & vec ); + + // Get the x, y, and z elements of a 4-D vector + // + inline const Vector3 getXYZ( ) const; + + // Set the x element of a 4-D vector + // + inline Vector4 & setX( vec_float4 x ); + + // Set the y element of a 4-D vector + // + inline Vector4 & setY( vec_float4 y ); + + // Set the z element of a 4-D vector + // + inline Vector4 & setZ( vec_float4 z ); + + // Set the w element of a 4-D vector + // + inline Vector4 & setW( vec_float4 w ); + + // Get the x element of a 4-D vector + // + inline vec_float4 getX( ) const; + + // Get the y element of a 4-D vector + // + inline vec_float4 getY( ) const; + + // Get the z element of a 4-D vector + // + inline vec_float4 getZ( ) const; + + // Get the w element of a 4-D vector + // + inline vec_float4 getW( ) const; + + // Set an x, y, z, or w element of a 4-D vector by index + // + inline Vector4 & setElem( int idx, vec_float4 value ); + + // Get an x, y, z, or w element of a 4-D vector by index + // + inline vec_float4 getElem( int idx ) const; + + // Subscripting operator to set or get an element + // + inline vec_float4_t & operator []( int idx ); + + // Subscripting operator to get an element + // + inline vec_float4 operator []( int idx ) const; + + // Add two 4-D vectors + // + inline const Vector4 operator +( const Vector4 & vec ) const; + + // Subtract a 4-D vector from another 4-D vector + // + inline const Vector4 operator -( const Vector4 & vec ) const; + + // Multiply a 4-D vector by a scalar + // + inline const Vector4 operator *( vec_float4 scalar ) const; + + // Divide a 4-D vector by a scalar + // + inline const Vector4 operator /( vec_float4 scalar ) const; + + // Perform compound assignment and addition with a 4-D vector + // + inline Vector4 & operator +=( const Vector4 & vec ); + + // Perform compound assignment and subtraction by a 4-D vector + // + inline Vector4 & operator -=( const Vector4 & vec ); + + // Perform compound assignment and multiplication by a scalar + // + inline Vector4 & operator *=( vec_float4 scalar ); + + // Perform compound assignment and division by a scalar + // + inline Vector4 & operator /=( vec_float4 scalar ); + + // Negate all elements of a 4-D vector + // + inline const Vector4 operator -( ) const; + + // Construct x axis + // + static inline const Vector4 xAxis( ); + + // Construct y axis + // + static inline const Vector4 yAxis( ); + + // Construct z axis + // + static inline const Vector4 zAxis( ); + + // Construct w axis + // + static inline const Vector4 wAxis( ); + +}; + +// Multiply a 4-D vector by a scalar +// +inline const Vector4 operator *( vec_float4 scalar, const Vector4 & vec ); + +// Multiply two 4-D vectors per element +// +inline const Vector4 mulPerElem( const Vector4 & vec0, const Vector4 & vec1 ); + +// Divide two 4-D vectors per element +// NOTE: +// Floating-point behavior matches standard library function divf4. +// +inline const Vector4 divPerElem( const Vector4 & vec0, const Vector4 & vec1 ); + +// Compute the reciprocal of a 4-D vector per element +// NOTE: +// Floating-point behavior matches standard library function recipf4. +// +inline const Vector4 recipPerElem( const Vector4 & vec ); + +// Compute the square root of a 4-D vector per element +// NOTE: +// Floating-point behavior matches standard library function sqrtf4. +// +inline const Vector4 sqrtPerElem( const Vector4 & vec ); + +// Compute the reciprocal square root of a 4-D vector per element +// NOTE: +// Floating-point behavior matches standard library function rsqrtf4. +// +inline const Vector4 rsqrtPerElem( const Vector4 & vec ); + +// Compute the absolute value of a 4-D vector per element +// +inline const Vector4 absPerElem( const Vector4 & vec ); + +// Copy sign from one 4-D vector to another, per element +// +inline const Vector4 copySignPerElem( const Vector4 & vec0, const Vector4 & vec1 ); + +// Maximum of two 4-D vectors per element +// +inline const Vector4 maxPerElem( const Vector4 & vec0, const Vector4 & vec1 ); + +// Minimum of two 4-D vectors per element +// +inline const Vector4 minPerElem( const Vector4 & vec0, const Vector4 & vec1 ); + +// Maximum element of a 4-D vector +// +inline vec_float4 maxElem( const Vector4 & vec ); + +// Minimum element of a 4-D vector +// +inline vec_float4 minElem( const Vector4 & vec ); + +// Compute the sum of all elements of a 4-D vector +// +inline vec_float4 sum( const Vector4 & vec ); + +// Compute the dot product of two 4-D vectors +// +inline vec_float4 dot( const Vector4 & vec0, const Vector4 & vec1 ); + +// Compute the square of the length of a 4-D vector +// +inline vec_float4 lengthSqr( const Vector4 & vec ); + +// Compute the length of a 4-D vector +// +inline vec_float4 length( const Vector4 & vec ); + +// Normalize a 4-D vector +// NOTE: +// The result is unpredictable when all elements of vec are at or near zero. +// +inline const Vector4 normalize( const Vector4 & vec ); + +// Outer product of two 4-D vectors +// +inline const Matrix4 outer( const Vector4 & vec0, const Vector4 & vec1 ); + +// Linear interpolation between two 4-D vectors +// NOTE: +// Does not clamp t between 0 and 1. +// +inline const Vector4 lerp( vec_float4 t, const Vector4 & vec0, const Vector4 & vec1 ); + +// Spherical linear interpolation between two 4-D vectors +// NOTE: +// The result is unpredictable if the vectors point in opposite directions. +// Does not clamp t between 0 and 1. +// +inline const Vector4 slerp( vec_float4 t, const Vector4 & unitVec0, const Vector4 & unitVec1 ); + +// Conditionally select between two 4-D vectors +// NOTE: +// This function uses a conditional select instruction to avoid a branch. +// +inline const Vector4 select( const Vector4 & vec0, const Vector4 & vec1, vec_uint4 select1 ); + +// Store four slots of an SoA 4-D vector as half-floats +// +inline void storeHalfFloats( const Vector4 & vec, vec_ushort8 * twoQuads ); + +#ifdef _VECTORMATH_DEBUG + +// Print a 4-D vector +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Vector4 & vec ); + +// Print a 4-D vector and an associated string identifier +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Vector4 & vec, const char * name ); + +#endif + +// A set of four 3-D points in structure-of-arrays format +// +class Point3 +{ + typedef vec_float4 vec_float4_t; + vec_float4 mX; + vec_float4 mY; + vec_float4 mZ; + +public: + // Default constructor; does no initialization + // + inline Point3( ) { }; + + // Copy a 3-D point + // + inline Point3( const Point3 & pnt ); + + // Construct a 3-D point from x, y, and z elements + // + inline Point3( vec_float4 x, vec_float4 y, vec_float4 z ); + + // Copy elements from a 3-D vector into a 3-D point + // + explicit inline Point3( const Vector3 & vec ); + + // Set all elements of a 3-D point to the same scalar value + // + explicit inline Point3( vec_float4 scalar ); + + // Replicate an AoS 3-D point + // + inline Point3( Aos::Point3 pnt ); + + // Insert four AoS 3-D points + // + inline Point3( Aos::Point3 pnt0, Aos::Point3 pnt1, Aos::Point3 pnt2, Aos::Point3 pnt3 ); + + // Extract four AoS 3-D points + // + inline void get4Aos( Aos::Point3 & result0, Aos::Point3 & result1, Aos::Point3 & result2, Aos::Point3 & result3 ) const; + + // Assign one 3-D point to another + // + inline Point3 & operator =( const Point3 & pnt ); + + // Set the x element of a 3-D point + // + inline Point3 & setX( vec_float4 x ); + + // Set the y element of a 3-D point + // + inline Point3 & setY( vec_float4 y ); + + // Set the z element of a 3-D point + // + inline Point3 & setZ( vec_float4 z ); + + // Get the x element of a 3-D point + // + inline vec_float4 getX( ) const; + + // Get the y element of a 3-D point + // + inline vec_float4 getY( ) const; + + // Get the z element of a 3-D point + // + inline vec_float4 getZ( ) const; + + // Set an x, y, or z element of a 3-D point by index + // + inline Point3 & setElem( int idx, vec_float4 value ); + + // Get an x, y, or z element of a 3-D point by index + // + inline vec_float4 getElem( int idx ) const; + + // Subscripting operator to set or get an element + // + inline vec_float4_t & operator []( int idx ); + + // Subscripting operator to get an element + // + inline vec_float4 operator []( int idx ) const; + + // Subtract a 3-D point from another 3-D point + // + inline const Vector3 operator -( const Point3 & pnt ) const; + + // Add a 3-D point to a 3-D vector + // + inline const Point3 operator +( const Vector3 & vec ) const; + + // Subtract a 3-D vector from a 3-D point + // + inline const Point3 operator -( const Vector3 & vec ) const; + + // Perform compound assignment and addition with a 3-D vector + // + inline Point3 & operator +=( const Vector3 & vec ); + + // Perform compound assignment and subtraction by a 3-D vector + // + inline Point3 & operator -=( const Vector3 & vec ); + +}; + +// Multiply two 3-D points per element +// +inline const Point3 mulPerElem( const Point3 & pnt0, const Point3 & pnt1 ); + +// Divide two 3-D points per element +// NOTE: +// Floating-point behavior matches standard library function divf4. +// +inline const Point3 divPerElem( const Point3 & pnt0, const Point3 & pnt1 ); + +// Compute the reciprocal of a 3-D point per element +// NOTE: +// Floating-point behavior matches standard library function recipf4. +// +inline const Point3 recipPerElem( const Point3 & pnt ); + +// Compute the square root of a 3-D point per element +// NOTE: +// Floating-point behavior matches standard library function sqrtf4. +// +inline const Point3 sqrtPerElem( const Point3 & pnt ); + +// Compute the reciprocal square root of a 3-D point per element +// NOTE: +// Floating-point behavior matches standard library function rsqrtf4. +// +inline const Point3 rsqrtPerElem( const Point3 & pnt ); + +// Compute the absolute value of a 3-D point per element +// +inline const Point3 absPerElem( const Point3 & pnt ); + +// Copy sign from one 3-D point to another, per element +// +inline const Point3 copySignPerElem( const Point3 & pnt0, const Point3 & pnt1 ); + +// Maximum of two 3-D points per element +// +inline const Point3 maxPerElem( const Point3 & pnt0, const Point3 & pnt1 ); + +// Minimum of two 3-D points per element +// +inline const Point3 minPerElem( const Point3 & pnt0, const Point3 & pnt1 ); + +// Maximum element of a 3-D point +// +inline vec_float4 maxElem( const Point3 & pnt ); + +// Minimum element of a 3-D point +// +inline vec_float4 minElem( const Point3 & pnt ); + +// Compute the sum of all elements of a 3-D point +// +inline vec_float4 sum( const Point3 & pnt ); + +// Apply uniform scale to a 3-D point +// +inline const Point3 scale( const Point3 & pnt, vec_float4 scaleVal ); + +// Apply non-uniform scale to a 3-D point +// +inline const Point3 scale( const Point3 & pnt, const Vector3 & scaleVec ); + +// Scalar projection of a 3-D point on a unit-length 3-D vector +// +inline vec_float4 projection( const Point3 & pnt, const Vector3 & unitVec ); + +// Compute the square of the distance of a 3-D point from the coordinate-system origin +// +inline vec_float4 distSqrFromOrigin( const Point3 & pnt ); + +// Compute the distance of a 3-D point from the coordinate-system origin +// +inline vec_float4 distFromOrigin( const Point3 & pnt ); + +// Compute the square of the distance between two 3-D points +// +inline vec_float4 distSqr( const Point3 & pnt0, const Point3 & pnt1 ); + +// Compute the distance between two 3-D points +// +inline vec_float4 dist( const Point3 & pnt0, const Point3 & pnt1 ); + +// Linear interpolation between two 3-D points +// NOTE: +// Does not clamp t between 0 and 1. +// +inline const Point3 lerp( vec_float4 t, const Point3 & pnt0, const Point3 & pnt1 ); + +// Conditionally select between two 3-D points +// NOTE: +// This function uses a conditional select instruction to avoid a branch. +// +inline const Point3 select( const Point3 & pnt0, const Point3 & pnt1, vec_uint4 select1 ); + +// Load four three-float 3-D points, stored in three quadwords +// +inline void loadXYZArray( Point3 & pnt, const vec_float4 * threeQuads ); + +// Store four slots of an SoA 3-D point in three quadwords +// +inline void storeXYZArray( const Point3 & pnt, vec_float4 * threeQuads ); + +// Store eight slots of two SoA 3-D points as half-floats +// +inline void storeHalfFloats( const Point3 & pnt0, const Point3 & pnt1, vec_ushort8 * threeQuads ); + +#ifdef _VECTORMATH_DEBUG + +// Print a 3-D point +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Point3 & pnt ); + +// Print a 3-D point and an associated string identifier +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Point3 & pnt, const char * name ); + +#endif + +// A set of four quaternions in structure-of-arrays format +// +class Quat +{ + typedef vec_float4 vec_float4_t; + vec_float4 mX; + vec_float4 mY; + vec_float4 mZ; + vec_float4 mW; + +public: + // Default constructor; does no initialization + // + inline Quat( ) { }; + + // Copy a quaternion + // + inline Quat( const Quat & quat ); + + // Construct a quaternion from x, y, z, and w elements + // + inline Quat( vec_float4 x, vec_float4 y, vec_float4 z, vec_float4 w ); + + // Construct a quaternion from a 3-D vector and a scalar + // + inline Quat( const Vector3 & xyz, vec_float4 w ); + + // Copy elements from a 4-D vector into a quaternion + // + explicit inline Quat( const Vector4 & vec ); + + // Convert a rotation matrix to a unit-length quaternion + // + explicit inline Quat( const Matrix3 & rotMat ); + + // Set all elements of a quaternion to the same scalar value + // + explicit inline Quat( vec_float4 scalar ); + + // Replicate an AoS quaternion + // + inline Quat( Aos::Quat quat ); + + // Insert four AoS quaternions + // + inline Quat( Aos::Quat quat0, Aos::Quat quat1, Aos::Quat quat2, Aos::Quat quat3 ); + + // Extract four AoS quaternions + // + inline void get4Aos( Aos::Quat & result0, Aos::Quat & result1, Aos::Quat & result2, Aos::Quat & result3 ) const; + + // Assign one quaternion to another + // + inline Quat & operator =( const Quat & quat ); + + // Set the x, y, and z elements of a quaternion + // NOTE: + // This function does not change the w element. + // + inline Quat & setXYZ( const Vector3 & vec ); + + // Get the x, y, and z elements of a quaternion + // + inline const Vector3 getXYZ( ) const; + + // Set the x element of a quaternion + // + inline Quat & setX( vec_float4 x ); + + // Set the y element of a quaternion + // + inline Quat & setY( vec_float4 y ); + + // Set the z element of a quaternion + // + inline Quat & setZ( vec_float4 z ); + + // Set the w element of a quaternion + // + inline Quat & setW( vec_float4 w ); + + // Get the x element of a quaternion + // + inline vec_float4 getX( ) const; + + // Get the y element of a quaternion + // + inline vec_float4 getY( ) const; + + // Get the z element of a quaternion + // + inline vec_float4 getZ( ) const; + + // Get the w element of a quaternion + // + inline vec_float4 getW( ) const; + + // Set an x, y, z, or w element of a quaternion by index + // + inline Quat & setElem( int idx, vec_float4 value ); + + // Get an x, y, z, or w element of a quaternion by index + // + inline vec_float4 getElem( int idx ) const; + + // Subscripting operator to set or get an element + // + inline vec_float4_t & operator []( int idx ); + + // Subscripting operator to get an element + // + inline vec_float4 operator []( int idx ) const; + + // Add two quaternions + // + inline const Quat operator +( const Quat & quat ) const; + + // Subtract a quaternion from another quaternion + // + inline const Quat operator -( const Quat & quat ) const; + + // Multiply two quaternions + // + inline const Quat operator *( const Quat & quat ) const; + + // Multiply a quaternion by a scalar + // + inline const Quat operator *( vec_float4 scalar ) const; + + // Divide a quaternion by a scalar + // + inline const Quat operator /( vec_float4 scalar ) const; + + // Perform compound assignment and addition with a quaternion + // + inline Quat & operator +=( const Quat & quat ); + + // Perform compound assignment and subtraction by a quaternion + // + inline Quat & operator -=( const Quat & quat ); + + // Perform compound assignment and multiplication by a quaternion + // + inline Quat & operator *=( const Quat & quat ); + + // Perform compound assignment and multiplication by a scalar + // + inline Quat & operator *=( vec_float4 scalar ); + + // Perform compound assignment and division by a scalar + // + inline Quat & operator /=( vec_float4 scalar ); + + // Negate all elements of a quaternion + // + inline const Quat operator -( ) const; + + // Construct an identity quaternion + // + static inline const Quat identity( ); + + // Construct a quaternion to rotate between two unit-length 3-D vectors + // NOTE: + // The result is unpredictable if unitVec0 and unitVec1 point in opposite directions. + // + static inline const Quat rotation( const Vector3 & unitVec0, const Vector3 & unitVec1 ); + + // Construct a quaternion to rotate around a unit-length 3-D vector + // + static inline const Quat rotation( vec_float4 radians, const Vector3 & unitVec ); + + // Construct a quaternion to rotate around the x axis + // + static inline const Quat rotationX( vec_float4 radians ); + + // Construct a quaternion to rotate around the y axis + // + static inline const Quat rotationY( vec_float4 radians ); + + // Construct a quaternion to rotate around the z axis + // + static inline const Quat rotationZ( vec_float4 radians ); + +}; + +// Multiply a quaternion by a scalar +// +inline const Quat operator *( vec_float4 scalar, const Quat & quat ); + +// Compute the conjugate of a quaternion +// +inline const Quat conj( const Quat & quat ); + +// Use a unit-length quaternion to rotate a 3-D vector +// +inline const Vector3 rotate( const Quat & unitQuat, const Vector3 & vec ); + +// Compute the dot product of two quaternions +// +inline vec_float4 dot( const Quat & quat0, const Quat & quat1 ); + +// Compute the norm of a quaternion +// +inline vec_float4 norm( const Quat & quat ); + +// Compute the length of a quaternion +// +inline vec_float4 length( const Quat & quat ); + +// Normalize a quaternion +// NOTE: +// The result is unpredictable when all elements of quat are at or near zero. +// +inline const Quat normalize( const Quat & quat ); + +// Linear interpolation between two quaternions +// NOTE: +// Does not clamp t between 0 and 1. +// +inline const Quat lerp( vec_float4 t, const Quat & quat0, const Quat & quat1 ); + +// Spherical linear interpolation between two quaternions +// NOTE: +// Interpolates along the shortest path between orientations. +// Does not clamp t between 0 and 1. +// +inline const Quat slerp( vec_float4 t, const Quat & unitQuat0, const Quat & unitQuat1 ); + +// Spherical quadrangle interpolation +// +inline const Quat squad( vec_float4 t, const Quat & unitQuat0, const Quat & unitQuat1, const Quat & unitQuat2, const Quat & unitQuat3 ); + +// Conditionally select between two quaternions +// NOTE: +// This function uses a conditional select instruction to avoid a branch. +// +inline const Quat select( const Quat & quat0, const Quat & quat1, vec_uint4 select1 ); + +#ifdef _VECTORMATH_DEBUG + +// Print a quaternion +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Quat & quat ); + +// Print a quaternion and an associated string identifier +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Quat & quat, const char * name ); + +#endif + +// A set of four 3x3 matrices in structure-of-arrays format +// +class Matrix3 +{ + Vector3 mCol0; + Vector3 mCol1; + Vector3 mCol2; + +public: + // Default constructor; does no initialization + // + inline Matrix3( ) { }; + + // Copy a 3x3 matrix + // + inline Matrix3( const Matrix3 & mat ); + + // Construct a 3x3 matrix containing the specified columns + // + inline Matrix3( const Vector3 & col0, const Vector3 & col1, const Vector3 & col2 ); + + // Construct a 3x3 rotation matrix from a unit-length quaternion + // + explicit inline Matrix3( const Quat & unitQuat ); + + // Set all elements of a 3x3 matrix to the same scalar value + // + explicit inline Matrix3( vec_float4 scalar ); + + // Replicate an AoS 3x3 matrix + // + inline Matrix3( const Aos::Matrix3 & mat ); + + // Insert four AoS 3x3 matrices + // + inline Matrix3( const Aos::Matrix3 & mat0, const Aos::Matrix3 & mat1, const Aos::Matrix3 & mat2, const Aos::Matrix3 & mat3 ); + + // Extract four AoS 3x3 matrices + // + inline void get4Aos( Aos::Matrix3 & result0, Aos::Matrix3 & result1, Aos::Matrix3 & result2, Aos::Matrix3 & result3 ) const; + + // Assign one 3x3 matrix to another + // + inline Matrix3 & operator =( const Matrix3 & mat ); + + // Set column 0 of a 3x3 matrix + // + inline Matrix3 & setCol0( const Vector3 & col0 ); + + // Set column 1 of a 3x3 matrix + // + inline Matrix3 & setCol1( const Vector3 & col1 ); + + // Set column 2 of a 3x3 matrix + // + inline Matrix3 & setCol2( const Vector3 & col2 ); + + // Get column 0 of a 3x3 matrix + // + inline const Vector3 getCol0( ) const; + + // Get column 1 of a 3x3 matrix + // + inline const Vector3 getCol1( ) const; + + // Get column 2 of a 3x3 matrix + // + inline const Vector3 getCol2( ) const; + + // Set the column of a 3x3 matrix referred to by the specified index + // + inline Matrix3 & setCol( int col, const Vector3 & vec ); + + // Set the row of a 3x3 matrix referred to by the specified index + // + inline Matrix3 & setRow( int row, const Vector3 & vec ); + + // Get the column of a 3x3 matrix referred to by the specified index + // + inline const Vector3 getCol( int col ) const; + + // Get the row of a 3x3 matrix referred to by the specified index + // + inline const Vector3 getRow( int row ) const; + + // Subscripting operator to set or get a column + // + inline Vector3 & operator []( int col ); + + // Subscripting operator to get a column + // + inline const Vector3 operator []( int col ) const; + + // Set the element of a 3x3 matrix referred to by column and row indices + // + inline Matrix3 & setElem( int col, int row, vec_float4 val ); + + // Get the element of a 3x3 matrix referred to by column and row indices + // + inline vec_float4 getElem( int col, int row ) const; + + // Add two 3x3 matrices + // + inline const Matrix3 operator +( const Matrix3 & mat ) const; + + // Subtract a 3x3 matrix from another 3x3 matrix + // + inline const Matrix3 operator -( const Matrix3 & mat ) const; + + // Negate all elements of a 3x3 matrix + // + inline const Matrix3 operator -( ) const; + + // Multiply a 3x3 matrix by a scalar + // + inline const Matrix3 operator *( vec_float4 scalar ) const; + + // Multiply a 3x3 matrix by a 3-D vector + // + inline const Vector3 operator *( const Vector3 & vec ) const; + + // Multiply two 3x3 matrices + // + inline const Matrix3 operator *( const Matrix3 & mat ) const; + + // Perform compound assignment and addition with a 3x3 matrix + // + inline Matrix3 & operator +=( const Matrix3 & mat ); + + // Perform compound assignment and subtraction by a 3x3 matrix + // + inline Matrix3 & operator -=( const Matrix3 & mat ); + + // Perform compound assignment and multiplication by a scalar + // + inline Matrix3 & operator *=( vec_float4 scalar ); + + // Perform compound assignment and multiplication by a 3x3 matrix + // + inline Matrix3 & operator *=( const Matrix3 & mat ); + + // Construct an identity 3x3 matrix + // + static inline const Matrix3 identity( ); + + // Construct a 3x3 matrix to rotate around the x axis + // + static inline const Matrix3 rotationX( vec_float4 radians ); + + // Construct a 3x3 matrix to rotate around the y axis + // + static inline const Matrix3 rotationY( vec_float4 radians ); + + // Construct a 3x3 matrix to rotate around the z axis + // + static inline const Matrix3 rotationZ( vec_float4 radians ); + + // Construct a 3x3 matrix to rotate around the x, y, and z axes + // + static inline const Matrix3 rotationZYX( const Vector3 & radiansXYZ ); + + // Construct a 3x3 matrix to rotate around a unit-length 3-D vector + // + static inline const Matrix3 rotation( vec_float4 radians, const Vector3 & unitVec ); + + // Construct a rotation matrix from a unit-length quaternion + // + static inline const Matrix3 rotation( const Quat & unitQuat ); + + // Construct a 3x3 matrix to perform scaling + // + static inline const Matrix3 scale( const Vector3 & scaleVec ); + +}; +// Multiply a 3x3 matrix by a scalar +// +inline const Matrix3 operator *( vec_float4 scalar, const Matrix3 & mat ); + +// Append (post-multiply) a scale transformation to a 3x3 matrix +// NOTE: +// Faster than creating and multiplying a scale transformation matrix. +// +inline const Matrix3 appendScale( const Matrix3 & mat, const Vector3 & scaleVec ); + +// Prepend (pre-multiply) a scale transformation to a 3x3 matrix +// NOTE: +// Faster than creating and multiplying a scale transformation matrix. +// +inline const Matrix3 prependScale( const Vector3 & scaleVec, const Matrix3 & mat ); + +// Multiply two 3x3 matrices per element +// +inline const Matrix3 mulPerElem( const Matrix3 & mat0, const Matrix3 & mat1 ); + +// Compute the absolute value of a 3x3 matrix per element +// +inline const Matrix3 absPerElem( const Matrix3 & mat ); + +// Transpose of a 3x3 matrix +// +inline const Matrix3 transpose( const Matrix3 & mat ); + +// Compute the inverse of a 3x3 matrix +// NOTE: +// Result is unpredictable when the determinant of mat is equal to or near 0. +// +inline const Matrix3 inverse( const Matrix3 & mat ); + +// Determinant of a 3x3 matrix +// +inline vec_float4 determinant( const Matrix3 & mat ); + +// Conditionally select between two 3x3 matrices +// NOTE: +// This function uses a conditional select instruction to avoid a branch. +// +inline const Matrix3 select( const Matrix3 & mat0, const Matrix3 & mat1, vec_uint4 select1 ); + +#ifdef _VECTORMATH_DEBUG + +// Print a 3x3 matrix +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Matrix3 & mat ); + +// Print a 3x3 matrix and an associated string identifier +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Matrix3 & mat, const char * name ); + +#endif + +// A set of four 4x4 matrices in structure-of-arrays format +// +class Matrix4 +{ + Vector4 mCol0; + Vector4 mCol1; + Vector4 mCol2; + Vector4 mCol3; + +public: + // Default constructor; does no initialization + // + inline Matrix4( ) { }; + + // Copy a 4x4 matrix + // + inline Matrix4( const Matrix4 & mat ); + + // Construct a 4x4 matrix containing the specified columns + // + inline Matrix4( const Vector4 & col0, const Vector4 & col1, const Vector4 & col2, const Vector4 & col3 ); + + // Construct a 4x4 matrix from a 3x4 transformation matrix + // + explicit inline Matrix4( const Transform3 & mat ); + + // Construct a 4x4 matrix from a 3x3 matrix and a 3-D vector + // + inline Matrix4( const Matrix3 & mat, const Vector3 & translateVec ); + + // Construct a 4x4 matrix from a unit-length quaternion and a 3-D vector + // + inline Matrix4( const Quat & unitQuat, const Vector3 & translateVec ); + + // Set all elements of a 4x4 matrix to the same scalar value + // + explicit inline Matrix4( vec_float4 scalar ); + + // Replicate an AoS 4x4 matrix + // + inline Matrix4( const Aos::Matrix4 & mat ); + + // Insert four AoS 4x4 matrices + // + inline Matrix4( const Aos::Matrix4 & mat0, const Aos::Matrix4 & mat1, const Aos::Matrix4 & mat2, const Aos::Matrix4 & mat3 ); + + // Extract four AoS 4x4 matrices + // + inline void get4Aos( Aos::Matrix4 & result0, Aos::Matrix4 & result1, Aos::Matrix4 & result2, Aos::Matrix4 & result3 ) const; + + // Assign one 4x4 matrix to another + // + inline Matrix4 & operator =( const Matrix4 & mat ); + + // Set the upper-left 3x3 submatrix + // NOTE: + // This function does not change the bottom row elements. + // + inline Matrix4 & setUpper3x3( const Matrix3 & mat3 ); + + // Get the upper-left 3x3 submatrix of a 4x4 matrix + // + inline const Matrix3 getUpper3x3( ) const; + + // Set translation component + // NOTE: + // This function does not change the bottom row elements. + // + inline Matrix4 & setTranslation( const Vector3 & translateVec ); + + // Get the translation component of a 4x4 matrix + // + inline const Vector3 getTranslation( ) const; + + // Set column 0 of a 4x4 matrix + // + inline Matrix4 & setCol0( const Vector4 & col0 ); + + // Set column 1 of a 4x4 matrix + // + inline Matrix4 & setCol1( const Vector4 & col1 ); + + // Set column 2 of a 4x4 matrix + // + inline Matrix4 & setCol2( const Vector4 & col2 ); + + // Set column 3 of a 4x4 matrix + // + inline Matrix4 & setCol3( const Vector4 & col3 ); + + // Get column 0 of a 4x4 matrix + // + inline const Vector4 getCol0( ) const; + + // Get column 1 of a 4x4 matrix + // + inline const Vector4 getCol1( ) const; + + // Get column 2 of a 4x4 matrix + // + inline const Vector4 getCol2( ) const; + + // Get column 3 of a 4x4 matrix + // + inline const Vector4 getCol3( ) const; + + // Set the column of a 4x4 matrix referred to by the specified index + // + inline Matrix4 & setCol( int col, const Vector4 & vec ); + + // Set the row of a 4x4 matrix referred to by the specified index + // + inline Matrix4 & setRow( int row, const Vector4 & vec ); + + // Get the column of a 4x4 matrix referred to by the specified index + // + inline const Vector4 getCol( int col ) const; + + // Get the row of a 4x4 matrix referred to by the specified index + // + inline const Vector4 getRow( int row ) const; + + // Subscripting operator to set or get a column + // + inline Vector4 & operator []( int col ); + + // Subscripting operator to get a column + // + inline const Vector4 operator []( int col ) const; + + // Set the element of a 4x4 matrix referred to by column and row indices + // + inline Matrix4 & setElem( int col, int row, vec_float4 val ); + + // Get the element of a 4x4 matrix referred to by column and row indices + // + inline vec_float4 getElem( int col, int row ) const; + + // Add two 4x4 matrices + // + inline const Matrix4 operator +( const Matrix4 & mat ) const; + + // Subtract a 4x4 matrix from another 4x4 matrix + // + inline const Matrix4 operator -( const Matrix4 & mat ) const; + + // Negate all elements of a 4x4 matrix + // + inline const Matrix4 operator -( ) const; + + // Multiply a 4x4 matrix by a scalar + // + inline const Matrix4 operator *( vec_float4 scalar ) const; + + // Multiply a 4x4 matrix by a 4-D vector + // + inline const Vector4 operator *( const Vector4 & vec ) const; + + // Multiply a 4x4 matrix by a 3-D vector + // + inline const Vector4 operator *( const Vector3 & vec ) const; + + // Multiply a 4x4 matrix by a 3-D point + // + inline const Vector4 operator *( const Point3 & pnt ) const; + + // Multiply two 4x4 matrices + // + inline const Matrix4 operator *( const Matrix4 & mat ) const; + + // Multiply a 4x4 matrix by a 3x4 transformation matrix + // + inline const Matrix4 operator *( const Transform3 & tfrm ) const; + + // Perform compound assignment and addition with a 4x4 matrix + // + inline Matrix4 & operator +=( const Matrix4 & mat ); + + // Perform compound assignment and subtraction by a 4x4 matrix + // + inline Matrix4 & operator -=( const Matrix4 & mat ); + + // Perform compound assignment and multiplication by a scalar + // + inline Matrix4 & operator *=( vec_float4 scalar ); + + // Perform compound assignment and multiplication by a 4x4 matrix + // + inline Matrix4 & operator *=( const Matrix4 & mat ); + + // Perform compound assignment and multiplication by a 3x4 transformation matrix + // + inline Matrix4 & operator *=( const Transform3 & tfrm ); + + // Construct an identity 4x4 matrix + // + static inline const Matrix4 identity( ); + + // Construct a 4x4 matrix to rotate around the x axis + // + static inline const Matrix4 rotationX( vec_float4 radians ); + + // Construct a 4x4 matrix to rotate around the y axis + // + static inline const Matrix4 rotationY( vec_float4 radians ); + + // Construct a 4x4 matrix to rotate around the z axis + // + static inline const Matrix4 rotationZ( vec_float4 radians ); + + // Construct a 4x4 matrix to rotate around the x, y, and z axes + // + static inline const Matrix4 rotationZYX( const Vector3 & radiansXYZ ); + + // Construct a 4x4 matrix to rotate around a unit-length 3-D vector + // + static inline const Matrix4 rotation( vec_float4 radians, const Vector3 & unitVec ); + + // Construct a rotation matrix from a unit-length quaternion + // + static inline const Matrix4 rotation( const Quat & unitQuat ); + + // Construct a 4x4 matrix to perform scaling + // + static inline const Matrix4 scale( const Vector3 & scaleVec ); + + // Construct a 4x4 matrix to perform translation + // + static inline const Matrix4 translation( const Vector3 & translateVec ); + + // Construct viewing matrix based on eye position, position looked at, and up direction + // + static inline const Matrix4 lookAt( const Point3 & eyePos, const Point3 & lookAtPos, const Vector3 & upVec ); + + // Construct a perspective projection matrix + // + static inline const Matrix4 perspective( vec_float4 fovyRadians, vec_float4 aspect, vec_float4 zNear, vec_float4 zFar ); + + // Construct a perspective projection matrix based on frustum + // + static inline const Matrix4 frustum( vec_float4 left, vec_float4 right, vec_float4 bottom, vec_float4 top, vec_float4 zNear, vec_float4 zFar ); + + // Construct an orthographic projection matrix + // + static inline const Matrix4 orthographic( vec_float4 left, vec_float4 right, vec_float4 bottom, vec_float4 top, vec_float4 zNear, vec_float4 zFar ); + +}; +// Multiply a 4x4 matrix by a scalar +// +inline const Matrix4 operator *( vec_float4 scalar, const Matrix4 & mat ); + +// Append (post-multiply) a scale transformation to a 4x4 matrix +// NOTE: +// Faster than creating and multiplying a scale transformation matrix. +// +inline const Matrix4 appendScale( const Matrix4 & mat, const Vector3 & scaleVec ); + +// Prepend (pre-multiply) a scale transformation to a 4x4 matrix +// NOTE: +// Faster than creating and multiplying a scale transformation matrix. +// +inline const Matrix4 prependScale( const Vector3 & scaleVec, const Matrix4 & mat ); + +// Multiply two 4x4 matrices per element +// +inline const Matrix4 mulPerElem( const Matrix4 & mat0, const Matrix4 & mat1 ); + +// Compute the absolute value of a 4x4 matrix per element +// +inline const Matrix4 absPerElem( const Matrix4 & mat ); + +// Transpose of a 4x4 matrix +// +inline const Matrix4 transpose( const Matrix4 & mat ); + +// Compute the inverse of a 4x4 matrix +// NOTE: +// Result is unpredictable when the determinant of mat is equal to or near 0. +// +inline const Matrix4 inverse( const Matrix4 & mat ); + +// Compute the inverse of a 4x4 matrix, which is expected to be an affine matrix +// NOTE: +// This can be used to achieve better performance than a general inverse when the specified 4x4 matrix meets the given restrictions. The result is unpredictable when the determinant of mat is equal to or near 0. +// +inline const Matrix4 affineInverse( const Matrix4 & mat ); + +// Compute the inverse of a 4x4 matrix, which is expected to be an affine matrix with an orthogonal upper-left 3x3 submatrix +// NOTE: +// This can be used to achieve better performance than a general inverse when the specified 4x4 matrix meets the given restrictions. +// +inline const Matrix4 orthoInverse( const Matrix4 & mat ); + +// Determinant of a 4x4 matrix +// +inline vec_float4 determinant( const Matrix4 & mat ); + +// Conditionally select between two 4x4 matrices +// NOTE: +// This function uses a conditional select instruction to avoid a branch. +// +inline const Matrix4 select( const Matrix4 & mat0, const Matrix4 & mat1, vec_uint4 select1 ); + +#ifdef _VECTORMATH_DEBUG + +// Print a 4x4 matrix +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Matrix4 & mat ); + +// Print a 4x4 matrix and an associated string identifier +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Matrix4 & mat, const char * name ); + +#endif + +// A set of four 3x4 transformation matrices in structure-of-arrays format +// +class Transform3 +{ + Vector3 mCol0; + Vector3 mCol1; + Vector3 mCol2; + Vector3 mCol3; + +public: + // Default constructor; does no initialization + // + inline Transform3( ) { }; + + // Copy a 3x4 transformation matrix + // + inline Transform3( const Transform3 & tfrm ); + + // Construct a 3x4 transformation matrix containing the specified columns + // + inline Transform3( const Vector3 & col0, const Vector3 & col1, const Vector3 & col2, const Vector3 & col3 ); + + // Construct a 3x4 transformation matrix from a 3x3 matrix and a 3-D vector + // + inline Transform3( const Matrix3 & tfrm, const Vector3 & translateVec ); + + // Construct a 3x4 transformation matrix from a unit-length quaternion and a 3-D vector + // + inline Transform3( const Quat & unitQuat, const Vector3 & translateVec ); + + // Set all elements of a 3x4 transformation matrix to the same scalar value + // + explicit inline Transform3( vec_float4 scalar ); + + // Replicate an AoS 3x4 transformation matrix + // + inline Transform3( const Aos::Transform3 & tfrm ); + + // Insert four AoS 3x4 transformation matrices + // + inline Transform3( const Aos::Transform3 & tfrm0, const Aos::Transform3 & tfrm1, const Aos::Transform3 & tfrm2, const Aos::Transform3 & tfrm3 ); + + // Extract four AoS 3x4 transformation matrices + // + inline void get4Aos( Aos::Transform3 & result0, Aos::Transform3 & result1, Aos::Transform3 & result2, Aos::Transform3 & result3 ) const; + + // Assign one 3x4 transformation matrix to another + // + inline Transform3 & operator =( const Transform3 & tfrm ); + + // Set the upper-left 3x3 submatrix + // + inline Transform3 & setUpper3x3( const Matrix3 & mat3 ); + + // Get the upper-left 3x3 submatrix of a 3x4 transformation matrix + // + inline const Matrix3 getUpper3x3( ) const; + + // Set translation component + // + inline Transform3 & setTranslation( const Vector3 & translateVec ); + + // Get the translation component of a 3x4 transformation matrix + // + inline const Vector3 getTranslation( ) const; + + // Set column 0 of a 3x4 transformation matrix + // + inline Transform3 & setCol0( const Vector3 & col0 ); + + // Set column 1 of a 3x4 transformation matrix + // + inline Transform3 & setCol1( const Vector3 & col1 ); + + // Set column 2 of a 3x4 transformation matrix + // + inline Transform3 & setCol2( const Vector3 & col2 ); + + // Set column 3 of a 3x4 transformation matrix + // + inline Transform3 & setCol3( const Vector3 & col3 ); + + // Get column 0 of a 3x4 transformation matrix + // + inline const Vector3 getCol0( ) const; + + // Get column 1 of a 3x4 transformation matrix + // + inline const Vector3 getCol1( ) const; + + // Get column 2 of a 3x4 transformation matrix + // + inline const Vector3 getCol2( ) const; + + // Get column 3 of a 3x4 transformation matrix + // + inline const Vector3 getCol3( ) const; + + // Set the column of a 3x4 transformation matrix referred to by the specified index + // + inline Transform3 & setCol( int col, const Vector3 & vec ); + + // Set the row of a 3x4 transformation matrix referred to by the specified index + // + inline Transform3 & setRow( int row, const Vector4 & vec ); + + // Get the column of a 3x4 transformation matrix referred to by the specified index + // + inline const Vector3 getCol( int col ) const; + + // Get the row of a 3x4 transformation matrix referred to by the specified index + // + inline const Vector4 getRow( int row ) const; + + // Subscripting operator to set or get a column + // + inline Vector3 & operator []( int col ); + + // Subscripting operator to get a column + // + inline const Vector3 operator []( int col ) const; + + // Set the element of a 3x4 transformation matrix referred to by column and row indices + // + inline Transform3 & setElem( int col, int row, vec_float4 val ); + + // Get the element of a 3x4 transformation matrix referred to by column and row indices + // + inline vec_float4 getElem( int col, int row ) const; + + // Multiply a 3x4 transformation matrix by a 3-D vector + // + inline const Vector3 operator *( const Vector3 & vec ) const; + + // Multiply a 3x4 transformation matrix by a 3-D point + // + inline const Point3 operator *( const Point3 & pnt ) const; + + // Multiply two 3x4 transformation matrices + // + inline const Transform3 operator *( const Transform3 & tfrm ) const; + + // Perform compound assignment and multiplication by a 3x4 transformation matrix + // + inline Transform3 & operator *=( const Transform3 & tfrm ); + + // Construct an identity 3x4 transformation matrix + // + static inline const Transform3 identity( ); + + // Construct a 3x4 transformation matrix to rotate around the x axis + // + static inline const Transform3 rotationX( vec_float4 radians ); + + // Construct a 3x4 transformation matrix to rotate around the y axis + // + static inline const Transform3 rotationY( vec_float4 radians ); + + // Construct a 3x4 transformation matrix to rotate around the z axis + // + static inline const Transform3 rotationZ( vec_float4 radians ); + + // Construct a 3x4 transformation matrix to rotate around the x, y, and z axes + // + static inline const Transform3 rotationZYX( const Vector3 & radiansXYZ ); + + // Construct a 3x4 transformation matrix to rotate around a unit-length 3-D vector + // + static inline const Transform3 rotation( vec_float4 radians, const Vector3 & unitVec ); + + // Construct a rotation matrix from a unit-length quaternion + // + static inline const Transform3 rotation( const Quat & unitQuat ); + + // Construct a 3x4 transformation matrix to perform scaling + // + static inline const Transform3 scale( const Vector3 & scaleVec ); + + // Construct a 3x4 transformation matrix to perform translation + // + static inline const Transform3 translation( const Vector3 & translateVec ); + +}; +// Append (post-multiply) a scale transformation to a 3x4 transformation matrix +// NOTE: +// Faster than creating and multiplying a scale transformation matrix. +// +inline const Transform3 appendScale( const Transform3 & tfrm, const Vector3 & scaleVec ); + +// Prepend (pre-multiply) a scale transformation to a 3x4 transformation matrix +// NOTE: +// Faster than creating and multiplying a scale transformation matrix. +// +inline const Transform3 prependScale( const Vector3 & scaleVec, const Transform3 & tfrm ); + +// Multiply two 3x4 transformation matrices per element +// +inline const Transform3 mulPerElem( const Transform3 & tfrm0, const Transform3 & tfrm1 ); + +// Compute the absolute value of a 3x4 transformation matrix per element +// +inline const Transform3 absPerElem( const Transform3 & tfrm ); + +// Inverse of a 3x4 transformation matrix +// NOTE: +// Result is unpredictable when the determinant of the left 3x3 submatrix is equal to or near 0. +// +inline const Transform3 inverse( const Transform3 & tfrm ); + +// Compute the inverse of a 3x4 transformation matrix, expected to have an orthogonal upper-left 3x3 submatrix +// NOTE: +// This can be used to achieve better performance than a general inverse when the specified 3x4 transformation matrix meets the given restrictions. +// +inline const Transform3 orthoInverse( const Transform3 & tfrm ); + +// Conditionally select between two 3x4 transformation matrices +// NOTE: +// This function uses a conditional select instruction to avoid a branch. +// +inline const Transform3 select( const Transform3 & tfrm0, const Transform3 & tfrm1, vec_uint4 select1 ); + +#ifdef _VECTORMATH_DEBUG + +// Print a 3x4 transformation matrix +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Transform3 & tfrm ); + +// Print a 3x4 transformation matrix and an associated string identifier +// NOTE: +// Function is only defined when _VECTORMATH_DEBUG is defined. +// +inline void print( const Transform3 & tfrm, const char * name ); + +#endif + +} // namespace Soa +} // namespace Vectormath + +#include "vec_soa.h" +#include "quat_soa.h" +#include "mat_soa.h" + +#endif diff --git a/Extras/vectormathlibrary/other/rs6000/si2vmx.h b/Extras/vectormathlibrary/other/rs6000/si2vmx.h new file mode 100644 index 000000000..71fdf5878 --- /dev/null +++ b/Extras/vectormathlibrary/other/rs6000/si2vmx.h @@ -0,0 +1,2054 @@ +/* This file contains a set of functions and macros that map the specific + SPU intrinsic to the PPU/VMX system. */ + +/* (C) Copyright + Sony Computer Entertainment, Inc., + 2001,2002,2003,2004,2005,2006. + + This file is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your option) + any later version. + + This file is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with this file; see the file COPYING. If not, write to the Free + Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. */ + +/* As a special exception, if you include this header file into source files + compiled by GCC, this header file does not by itself cause the resulting + executable to be covered by the GNU General Public License. This exception + does not however invalidate any other reasons why the executable file might be + covered by the GNU General Public License. */ + +#ifndef _SI2VMX_H_ +#define _SI2VMX_H_ 1 + +#ifndef __SPU__ + +#include +#include + + +/* Specify a default halt action for spu_hcmpeq and spu_hcmpgt intrinsics. + * Users can override the action by defining it prior to including this + * header file. + */ +#ifndef SPU_HALT_ACTION +#define SPU_HALT_ACTION abort() +#endif + +/* Specify a default stop action for the spu_stop intrinsic. + * Users can override the action by defining it prior to including this + * header file. + */ +#ifndef SPU_STOP_ACTION +#define SPU_STOP_ACTION abort() +#endif + + +/* Specify a default action for unsupported intrinsic. + * Users can override the action by defining it prior to including this + * header file. + */ +#ifndef SPU_UNSUPPORTED_ACTION +#define SPU_UNSUPPORTED_ACTION abort() +#endif + + +/* Casting intrinsics - from scalar to quadword + */ + +static __inline qword si_from_uchar(unsigned char c) { + union { + qword q; + unsigned char c[16]; + } x; + x.c[3] = c; + return (x.q); +} + +static __inline qword si_from_char(signed char c) { + union { + qword q; + signed char c[16]; + } x; + x.c[3] = c; + return (x.q); +} + +static __inline qword si_from_ushort(unsigned short s) { + union { + qword q; + unsigned short s[8]; + } x; + x.s[1] = s; + return (x.q); +} + +static __inline qword si_from_short(short s) { + union { + qword q; + short s[8]; + } x; + x.s[1] = s; + return (x.q); +} + + +static __inline qword si_from_uint(unsigned int i) { + union { + qword q; + unsigned int i[4]; + } x; + x.i[0] = i; + return (x.q); +} + +static __inline qword si_from_int(int i) { + union { + qword q; + int i[4]; + } x; + x.i[0] = i; + return (x.q); +} + +static __inline qword si_from_ullong(unsigned long long l) { + union { + qword q; + unsigned long long l[2]; + } x; + x.l[0] = l; + return (x.q); +} + +static __inline qword si_from_llong(long long l) { + union { + qword q; + long long l[2]; + } x; + x.l[0] = l; + return (x.q); +} + +static __inline qword si_from_float(float f) { + union { + qword q; + float f[4]; + } x; + x.f[0] = f; + return (x.q); +} + +static __inline qword si_from_double(double d) { + union { + qword q; + double d[2]; + } x; + x.d[0] = d; + return (x.q); +} + +static __inline qword si_from_ptr(void *ptr) { + union { + qword q; + void *p; + } x; + x.p = ptr; + return (x.q); +} + + +/* Casting intrinsics - from quadword to scalar + */ +static __inline unsigned char si_to_uchar(qword q) { + union { + qword q; + unsigned char c[16]; + } x; + x.q = q; + return (x.c[3]); +} + +static __inline signed char si_to_char(qword q) { + union { + qword q; + signed char c[16]; + } x; + x.q = q; + return (x.c[3]); +} + +static __inline unsigned short si_to_ushort(qword q) { + union { + qword q; + unsigned short s[8]; + } x; + x.q = q; + return (x.s[1]); +} + +static __inline short si_to_short(qword q) { + union { + qword q; + short s[8]; + } x; + x.q = q; + return (x.s[1]); +} + +static __inline unsigned int si_to_uint(qword q) { + union { + qword q; + unsigned int i[4]; + } x; + x.q = q; + return (x.i[0]); +} + +static __inline int si_to_int(qword q) { + union { + qword q; + int i[4]; + } x; + x.q = q; + return (x.i[0]); +} + +static __inline unsigned long long si_to_ullong(qword q) { + union { + qword q; + unsigned long long l[2]; + } x; + x.q = q; + return (x.l[0]); +} + +static __inline long long si_to_llong(qword q) { + union { + qword q; + long long l[2]; + } x; + x.q = q; + return (x.l[0]); +} + +static __inline float si_to_float(qword q) { + union { + qword q; + float f[4]; + } x; + x.q = q; + return (x.f[0]); +} + +static __inline double si_to_double(qword q) { + union { + qword q; + double d[2]; + } x; + x.q = q; + return (x.d[0]); +} + +static __inline void * si_to_ptr(qword q) { + union { + qword q; + void *p; + } x; + x.q = q; + return (x.p); +} + + +/* Absolute difference + */ +static __inline qword si_absdb(qword a, qword b) +{ + vec_uchar16 ac, bc, dc; + + ac = (vec_uchar16)(a); + bc = (vec_uchar16)(b); + dc = vec_sel(vec_sub(bc, ac), vec_sub(ac, bc), vec_cmpgt(ac, bc)); + + return ((qword)(dc)); +} + +/* Add intrinsics + */ +#define si_a(_a, _b) ((qword)(vec_add((vec_uint4)(_a), (vec_uint4)(_b)))) + +#define si_ah(_a, _b) ((qword)(vec_add((vec_ushort8)(_a), (vec_ushort8)(_b)))) + +static __inline qword si_ai(qword a, int b) +{ + return ((qword)(vec_add((vec_int4)(a), + vec_splat((vec_int4)(si_from_int(b)), 0)))); +} + + +static __inline qword si_ahi(qword a, short b) +{ + return ((qword)(vec_add((vec_short8)(a), + vec_splat((vec_short8)(si_from_short(b)), 1)))); +} + + +#define si_fa(_a, _b) ((qword)(vec_add((vec_float4)(_a), (vec_float4)(_b)))) + + +static __inline qword si_dfa(qword a, qword b) +{ + union { + vec_double2 v; + double d[2]; + } ad, bd, dd; + + ad.v = (vec_double2)(a); + bd.v = (vec_double2)(b); + dd.d[0] = ad.d[0] + bd.d[0]; + dd.d[1] = ad.d[1] + bd.d[1]; + + return ((qword)(dd.v)); +} + +/* Add word extended + */ +#define si_addx(_a, _b, _c) ((qword)(vec_add(vec_add((vec_uint4)(_a), (vec_uint4)(_b)), \ + vec_and((vec_uint4)(_c), vec_splat_u32(1))))) + + +/* Bit-wise AND + */ +#define si_and(_a, _b) ((qword)(vec_and((vec_uint4)(_a), (vec_uint4)(_b)))) + + +static __inline qword si_andbi(qword a, signed char b) +{ + return ((qword)(vec_and((vec_char16)(a), + vec_splat((vec_char16)(si_from_char(b)), 3)))); +} + +static __inline qword si_andhi(qword a, signed short b) +{ + return ((qword)(vec_and((vec_short8)(a), + vec_splat((vec_short8)(si_from_short(b)), 1)))); +} + + +static __inline qword si_andi(qword a, signed int b) +{ + return ((qword)(vec_and((vec_int4)(a), + vec_splat((vec_int4)(si_from_int(b)), 0)))); +} + + +/* Bit-wise AND with complement + */ +#define si_andc(_a, _b) ((qword)(vec_andc((vec_uchar16)(_a), (vec_uchar16)(_b)))) + + +/* Average byte vectors + */ +#define si_avgb(_a, _b) ((qword)(vec_avg((vec_uchar16)(_a), (vec_uchar16)(_b)))) + + +/* Branch indirect and set link on external data + */ +#define si_bisled(_func) /* not mappable */ +#define si_bisledd(_func) /* not mappable */ +#define si_bislede(_func) /* not mappable */ + + +/* Borrow generate + */ +#define si_bg(_a, _b) ((qword)(vec_subc((vec_uint4)(_b), (vec_uint4)(_a)))) + +#define si_bgx(_a, _b, _c) ((qword)(vec_and(vec_or(vec_cmpgt((vec_uint4)(_b), (vec_uint4)(_a)), \ + vec_and(vec_cmpeq((vec_uint4)(_b), (vec_uint4)(_a)), \ + (vec_uint4)(_c))), vec_splat_u32(1)))) + +/* Compare absolute equal + */ +static __inline qword si_fcmeq(qword a, qword b) +{ + vec_float4 msb = (vec_float4)((vec_uint4){0x80000000, 0x80000000, 0x80000000, 0x80000000}); + + return ((qword)(vec_cmpeq(vec_andc((vec_float4)(a), msb), + vec_andc((vec_float4)(b), msb)))); +} + +static __inline qword si_dfcmeq(qword a, qword b) +{ + vec_uint4 sign_mask= (vec_uint4) { 0x7FFFFFFF, 0xFFFFFFFF, 0x7FFFFFFF, 0xFFFFFFFF }; + vec_uint4 nan_mask = (vec_uint4) { 0x7FF00000, 0x00000000, 0x7FF00000, 0x00000000 }; + vec_uchar16 hihi_promote = (vec_uchar16) { 0,1,2,3, 16,17,18,19, 8,9,10,11, 24,25,26,27}; + + vec_uint4 biteq; + vec_uint4 aabs; + vec_uint4 babs; + vec_uint4 a_gt; + vec_uint4 ahi_inf; + vec_uint4 anan; + vec_uint4 result; + + union { + vec_uchar16 v; + int i[4]; + } x; + + /* Shift 4 bytes */ + x.i[3] = 4 << 3; + + /* Mask out sign bits */ + aabs = vec_and((vec_uint4)a,sign_mask); + babs = vec_and((vec_uint4)b,sign_mask); + + /* A) Check for bit equality, store in high word */ + biteq = (vec_uint4) vec_cmpeq((vec_uint4)aabs,(vec_uint4)babs); + biteq = vec_and(biteq,(vec_uint4)vec_slo((vec_uchar16)biteq,x.v)); + + /* + B) Check if a is NaN, store in high word + + B1) If the high word is greater than max_exp (indicates a NaN) + B2) If the low word is greater than 0 + */ + a_gt = (vec_uint4)vec_cmpgt(aabs,nan_mask); + + /* B3) Check if the high word is equal to the inf exponent */ + ahi_inf = (vec_uint4)vec_cmpeq(aabs,nan_mask); + + /* anan = B1[hi] or (B2[lo] and B3[hi]) */ + anan = (vec_uint4)vec_or(a_gt,vec_and((vec_uint4)vec_slo((vec_uchar16)a_gt,x.v),ahi_inf)); + + /* result = A and not B */ + result = vec_andc(biteq, anan); + + /* Promote high words to 64 bits and return */ + return ((qword)(vec_perm((vec_uchar16)result, (vec_uchar16)result, hihi_promote))); +} + + +/* Compare absolute greater than + */ +static __inline qword si_fcmgt(qword a, qword b) +{ + vec_float4 msb = (vec_float4)((vec_uint4){0x80000000, 0x80000000, 0x80000000, 0x80000000}); + + return ((qword)(vec_cmpgt(vec_andc((vec_float4)(a), msb), + vec_andc((vec_float4)(b), msb)))); +} + +static __inline qword si_dfcmgt(qword a, qword b) +{ + vec_uchar16 splat_hi = (vec_uchar16) { 0,1,2,3, 0,1,2,3, 8,9,10,11, 8,9,10,11 }; + vec_uint4 nan_mask = (vec_uint4) { 0x7FF00000, 0x0, 0x7FF00000, 0x0 }; + vec_uint4 sign_mask = (vec_uint4) { 0x7FFFFFFF, 0xFFFFFFFF, 0x7FFFFFFF, 0xFFFFFFFF }; + + union { + vec_uchar16 v; + int i[4]; + } x; + + /* Shift 4 bytes */ + x.i[3] = 4 << 3; + + // absolute value of a,b + vec_uint4 aabs = vec_and((vec_uint4)a, sign_mask); + vec_uint4 babs = vec_and((vec_uint4)b, sign_mask); + + // check if a is nan + vec_uint4 a_inf = (vec_uint4)vec_cmpeq(aabs, nan_mask); + vec_uint4 a_nan = (vec_uint4)vec_cmpgt(aabs, nan_mask); + a_nan = vec_or(a_nan, vec_and((vec_uint4)vec_slo((vec_uchar16)a_nan,x.v),a_inf)); + a_nan = (vec_uint4)vec_perm((vec_uchar16)a_nan, (vec_uchar16)a_nan, splat_hi); + + // check if b is nan + vec_uint4 b_inf = (vec_uint4)vec_cmpeq(babs, nan_mask); + vec_uint4 b_nan = (vec_uint4)vec_cmpgt(babs, nan_mask); + b_nan = vec_or(b_nan, vec_and((vec_uint4)vec_slo((vec_uchar16)b_nan,x.v),b_inf)); + b_nan = (vec_uint4)vec_perm((vec_uchar16)b_nan, (vec_uchar16)b_nan, splat_hi); + + // A) Check if the exponents are different + vec_uint4 gt_hi = (vec_uint4)vec_cmpgt(aabs,babs); + + // B) Check if high word equal, and low word greater + vec_uint4 gt_lo = (vec_uint4)vec_cmpgt((vec_uint4)aabs, (vec_uint4)babs); + vec_uint4 eq = (vec_uint4)vec_cmpeq(aabs, babs); + vec_uint4 eqgt = vec_and(eq,vec_slo(gt_lo,x.v)); + + // If either A or B is true, return true (unless NaNs detected) + vec_uint4 r = vec_or(gt_hi, eqgt); + + // splat the high words of the comparison step + r = (vec_uint4)vec_perm((vec_uchar16)r,(vec_uchar16)r,splat_hi); + + // correct for NaNs in input + return ((qword)vec_andc(r,vec_or(a_nan,b_nan))); +} + + +/* Compare equal + */ +static __inline qword si_ceqb(qword a, qword b) +{ + return ((qword)(vec_cmpeq((vec_uchar16)(a), (vec_uchar16)(b)))); +} + +static __inline qword si_ceqh(qword a, qword b) +{ + return ((qword)(vec_cmpeq((vec_ushort8)(a), (vec_ushort8)(b)))); +} + +static __inline qword si_ceq(qword a, qword b) +{ + return ((qword)(vec_cmpeq((vec_uint4)(a), (vec_uint4)(b)))); +} + +static __inline qword si_fceq(qword a, qword b) +{ + return ((qword)(vec_cmpeq((vec_float4)(a), (vec_float4)(b)))); +} + +static __inline qword si_ceqbi(qword a, signed char b) +{ + return ((qword)(vec_cmpeq((vec_char16)(a), + vec_splat((vec_char16)(si_from_char(b)), 3)))); +} + +static __inline qword si_ceqhi(qword a, signed short b) +{ + return ((qword)(vec_cmpeq((vec_short8)(a), + vec_splat((vec_short8)(si_from_short(b)), 1)))); +} + +static __inline qword si_ceqi(qword a, signed int b) +{ + return ((qword)(vec_cmpeq((vec_int4)(a), + vec_splat((vec_int4)(si_from_int(b)), 0)))); +} + +static __inline qword si_dfceq(qword a, qword b) +{ + vec_uint4 sign_mask= (vec_uint4) { 0x7FFFFFFF, 0xFFFFFFFF, 0x7FFFFFFF, 0xFFFFFFFF }; + vec_uint4 nan_mask = (vec_uint4) { 0x7FF00000, 0x00000000, 0x7FF00000, 0x00000000 }; + vec_uchar16 hihi_promote = (vec_uchar16) { 0,1,2,3, 16,17,18,19, 8,9,10,11, 24,25,26,27}; + + vec_uint4 biteq; + vec_uint4 aabs; + vec_uint4 babs; + vec_uint4 a_gt; + vec_uint4 ahi_inf; + vec_uint4 anan; + vec_uint4 iszero; + vec_uint4 result; + + union { + vec_uchar16 v; + int i[4]; + } x; + + /* Shift 4 bytes */ + x.i[3] = 4 << 3; + + /* A) Check for bit equality, store in high word */ + biteq = (vec_uint4) vec_cmpeq((vec_uint4)a,(vec_uint4)b); + biteq = vec_and(biteq,(vec_uint4)vec_slo((vec_uchar16)biteq,x.v)); + + /* Mask out sign bits */ + aabs = vec_and((vec_uint4)a,sign_mask); + babs = vec_and((vec_uint4)b,sign_mask); + + /* + B) Check if a is NaN, store in high word + + B1) If the high word is greater than max_exp (indicates a NaN) + B2) If the low word is greater than 0 + */ + a_gt = (vec_uint4)vec_cmpgt(aabs,nan_mask); + + /* B3) Check if the high word is equal to the inf exponent */ + ahi_inf = (vec_uint4)vec_cmpeq(aabs,nan_mask); + + /* anan = B1[hi] or (B2[lo] and B3[hi]) */ + anan = (vec_uint4)vec_or(a_gt,vec_and((vec_uint4)vec_slo((vec_uchar16)a_gt,x.v),ahi_inf)); + + /* C) Check for 0 = -0 special case */ + iszero =(vec_uint4)vec_cmpeq((vec_uint4)vec_or(aabs,babs),(vec_uint4)vec_splat_u32(0)); + iszero = vec_and(iszero,(vec_uint4)vec_slo((vec_uchar16)iszero,x.v)); + + /* result = (A or C) and not B */ + result = vec_or(biteq,iszero); + result = vec_andc(result, anan); + + /* Promote high words to 64 bits and return */ + return ((qword)(vec_perm((vec_uchar16)result, (vec_uchar16)result, hihi_promote))); +} + + +/* Compare greater than + */ +static __inline qword si_cgtb(qword a, qword b) +{ + return ((qword)(vec_cmpgt((vec_char16)(a), (vec_char16)(b)))); +} + +static __inline qword si_cgth(qword a, qword b) +{ + return ((qword)(vec_cmpgt((vec_short8)(a), (vec_short8)(b)))); +} + +static __inline qword si_cgt(qword a, qword b) +{ + return ((qword)(vec_cmpgt((vec_int4)(a), (vec_int4)(b)))); +} + +static __inline qword si_clgtb(qword a, qword b) +{ + return ((qword)(vec_cmpgt((vec_uchar16)(a), (vec_uchar16)(b)))); +} + +static __inline qword si_clgth(qword a, qword b) +{ + return ((qword)(vec_cmpgt((vec_ushort8)(a), (vec_ushort8)(b)))); +} + +static __inline qword si_clgt(qword a, qword b) +{ + return ((qword)(vec_cmpgt((vec_uint4)(a), (vec_uint4)(b)))); +} + +static __inline qword si_fcgt(qword a, qword b) +{ + return ((qword)(vec_cmpgt((vec_float4)(a), (vec_float4)(b)))); +} + +static __inline qword si_dfcgt(qword a, qword b) +{ + vec_uchar16 splat_hi = (vec_uchar16) { 0,1,2,3, 0,1,2,3, 8,9,10,11, 8,9,10,11 }; + vec_uchar16 borrow_shuffle = (vec_uchar16) { 4,5,6,7, 192,192,192,192, 12,13,14,15, 192,192,192,192 }; + vec_uint4 nan_mask = (vec_uint4) { 0x7FF00000, 0x0, 0x7FF00000, 0x0 }; + vec_uint4 sign_mask = (vec_uint4) { 0x7FFFFFFF, 0xFFFFFFFF, 0x7FFFFFFF, 0xFFFFFFFF }; + + union { + vec_uchar16 v; + int i[4]; + } x; + + /* Shift 4 bytes */ + x.i[3] = 4 << 3; + + // absolute value of a,b + vec_uint4 aabs = vec_and((vec_uint4)a, sign_mask); + vec_uint4 babs = vec_and((vec_uint4)b, sign_mask); + + // check if a is nan + vec_uint4 a_inf = (vec_uint4)vec_cmpeq(aabs, nan_mask); + vec_uint4 a_nan = (vec_uint4)vec_cmpgt(aabs, nan_mask); + a_nan = vec_or(a_nan, vec_and((vec_uint4)vec_slo((vec_uchar16)a_nan,x.v),a_inf)); + a_nan = (vec_uint4)vec_perm((vec_uchar16)a_nan, (vec_uchar16)a_nan, splat_hi); + + // check if b is nan + vec_uint4 b_inf = (vec_uint4)vec_cmpeq(babs, nan_mask); + vec_uint4 b_nan = (vec_uint4)vec_cmpgt(babs, nan_mask); + b_nan = vec_or(b_nan, vec_and((vec_uint4)vec_slo((vec_uchar16)b_nan,x.v),b_inf)); + b_nan = (vec_uint4)vec_perm((vec_uchar16)b_nan, (vec_uchar16)b_nan, splat_hi); + + // sign of a + vec_uint4 asel = (vec_uint4)vec_sra((vec_int4)(a), (vec_uint4)vec_splat(((vec_uint4)si_from_int(31)), 0)); + asel = (vec_uint4)vec_perm((vec_uchar16)asel,(vec_uchar16)asel,splat_hi); + + // sign of b + vec_uint4 bsel = (vec_uint4)vec_sra((vec_int4)(b), (vec_uint4)vec_splat(((vec_uint4)si_from_int(31)), 0)); + bsel = (vec_uint4)vec_perm((vec_uchar16)bsel,(vec_uchar16)bsel,splat_hi); + + // negative a + vec_uint4 abor = vec_subc((vec_uint4)vec_splat_u32(0), aabs); + vec_uchar16 pat = vec_sel(((vec_uchar16){0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15}), vec_sr(borrow_shuffle, vec_splat_u8(3)), vec_sra(borrow_shuffle, vec_splat_u8(7))); + abor = (vec_uint4)(vec_perm(vec_perm((vec_uchar16)abor, (vec_uchar16)abor, borrow_shuffle),((vec_uchar16){0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x80, 0x80, 0x80}),pat)); + vec_uint4 aneg = vec_add(vec_add(vec_splat_u32(0), vec_nor(aabs, aabs)), vec_and(abor, vec_splat_u32(1))); + + // pick the one we want + vec_int4 aval = (vec_int4)vec_sel((vec_uchar16)aabs, (vec_uchar16)aneg, (vec_uchar16)asel); + + // negative b + vec_uint4 bbor = vec_subc((vec_uint4)vec_splat_u32(0), babs); + bbor = (vec_uint4)(vec_perm(vec_perm((vec_uchar16)bbor, (vec_uchar16)bbor, borrow_shuffle),((vec_uchar16){0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x80, 0x80, 0x80}),pat)); + vec_uint4 bneg = vec_add(vec_nor(babs, babs), vec_and(bbor, vec_splat_u32(1))); + + // pick the one we want + vec_int4 bval=(vec_int4)vec_sel((vec_uchar16)babs, (vec_uchar16)bneg, (vec_uchar16)bsel); + + // A) Check if the exponents are different + vec_uint4 gt_hi = (vec_uint4)vec_cmpgt(aval,bval); + + // B) Check if high word equal, and low word greater + vec_uint4 gt_lo = (vec_uint4)vec_cmpgt((vec_uint4)aval, (vec_uint4)bval); + vec_uint4 eq = (vec_uint4)vec_cmpeq(aval, bval); + vec_uint4 eqgt = vec_and(eq,vec_slo(gt_lo,x.v)); + + // If either A or B is true, return true (unless NaNs detected) + vec_uint4 r = vec_or(gt_hi, eqgt); + + // splat the high words of the comparison step + r = (vec_uint4)vec_perm((vec_uchar16)r,(vec_uchar16)r,splat_hi); + + // correct for NaNs in input + return ((qword)vec_andc(r,vec_or(a_nan,b_nan))); +} + +static __inline qword si_cgtbi(qword a, signed char b) +{ + return ((qword)(vec_cmpgt((vec_char16)(a), + vec_splat((vec_char16)(si_from_char(b)), 3)))); +} + +static __inline qword si_cgthi(qword a, signed short b) +{ + return ((qword)(vec_cmpgt((vec_short8)(a), + vec_splat((vec_short8)(si_from_short(b)), 1)))); +} + +static __inline qword si_cgti(qword a, signed int b) +{ + return ((qword)(vec_cmpgt((vec_int4)(a), + vec_splat((vec_int4)(si_from_int(b)), 0)))); +} + +static __inline qword si_clgtbi(qword a, unsigned char b) +{ + return ((qword)(vec_cmpgt((vec_uchar16)(a), + vec_splat((vec_uchar16)(si_from_uchar(b)), 3)))); +} + +static __inline qword si_clgthi(qword a, unsigned short b) +{ + return ((qword)(vec_cmpgt((vec_ushort8)(a), + vec_splat((vec_ushort8)(si_from_ushort(b)), 1)))); +} + +static __inline qword si_clgti(qword a, unsigned int b) +{ + return ((qword)(vec_cmpgt((vec_uint4)(a), + vec_splat((vec_uint4)(si_from_uint(b)), 0)))); +} + +static __inline qword si_dftsv(qword a, char b) +{ + vec_uchar16 splat_hi = (vec_uchar16) { 0,1,2,3, 0,1,2,3, 8,9,10,11, 8,9,10,11 }; + vec_uint4 sign_mask = (vec_uint4) { 0x7FFFFFFF, 0xFFFFFFFF, 0x7FFFFFFF, 0xFFFFFFFF }; + vec_uint4 result = (vec_uint4){0}; + vec_uint4 sign = (vec_uint4)vec_sra((vec_int4)(a), (vec_uint4)vec_splat(((vec_uint4)si_from_int(31)), 0)); + sign = (vec_uint4)vec_perm((vec_uchar16)sign,(vec_uchar16)sign,splat_hi); + vec_uint4 aabs = vec_and((vec_uint4)a,sign_mask); + + union { + vec_uchar16 v; + int i[4]; + } x; + + /* Shift 4 bytes */ + x.i[3] = 4 << 3; + + /* Nan or +inf or -inf */ + if (b & 0x70) + { + vec_uint4 nan_mask = (vec_uint4) { 0x7FF00000, 0x0, 0x7FF00000, 0x0 }; + vec_uint4 a_inf = (vec_uint4)vec_cmpeq(aabs, nan_mask); + /* NaN */ + if (b & 0x40) + { + vec_uint4 a_nan = (vec_uint4)vec_cmpgt(aabs, nan_mask); + a_nan = vec_or(a_nan, vec_and((vec_uint4)vec_slo((vec_uchar16)a_nan,x.v),a_inf)); + a_nan = (vec_uint4)vec_perm((vec_uchar16)a_nan, (vec_uchar16)a_nan, splat_hi); + result = vec_or(result, a_nan); + } + /* inf */ + if (b & 0x30) + { + a_inf = vec_and((vec_uint4)vec_slo((vec_uchar16)a_inf,x.v), a_inf); + a_inf = (vec_uint4)vec_perm((vec_uchar16)a_inf, (vec_uchar16)a_inf, splat_hi); + /* +inf */ + if (b & 0x20) + result = vec_or(vec_andc(a_inf, sign), result); + /* -inf */ + if (b & 0x10) + result = vec_or(vec_and(a_inf, sign), result); + } + } + /* 0 or denorm */ + if (b & 0xF) + { + vec_uint4 iszero =(vec_uint4)vec_cmpeq(aabs,(vec_uint4)vec_splat_u32(0)); + iszero = vec_and(iszero,(vec_uint4)vec_slo((vec_uchar16)iszero,x.v)); + /* denorm */ + if (b & 0x3) + { + vec_uint4 denorm_mask = (vec_uint4){0xFFFFF, 0xFFFFF, 0xFFFFF, 0xFFFFF}; + vec_uint4 isdenorm = vec_nor((vec_uint4)vec_cmpgt(aabs, denorm_mask), iszero); + isdenorm = (vec_uint4)vec_perm((vec_uchar16)isdenorm, (vec_uchar16)isdenorm, splat_hi); + /* +denorm */ + if (b & 0x2) + result = vec_or(vec_andc(isdenorm, sign), result); + /* -denorm */ + if (b & 0x1) + result = vec_or(vec_and(isdenorm, sign), result); + } + /* 0 */ + if (b & 0xC) + { + iszero = (vec_uint4)vec_perm((vec_uchar16)iszero, (vec_uchar16)iszero, splat_hi); + /* +0 */ + if (b & 0x8) + result = vec_or(vec_andc(iszero, sign), result); + /* -0 */ + if (b & 0x4) + result = vec_or(vec_and(iszero, sign), result); + } + } + return ((qword)result); +} + + +/* Carry generate + */ +#define si_cg(_a, _b) ((qword)(vec_addc((vec_uint4)(_a), (vec_uint4)(_b)))) + +#define si_cgx(_a, _b, _c) ((qword)(vec_or(vec_addc((vec_uint4)(_a), (vec_uint4)(_b)), \ + vec_addc(vec_add((vec_uint4)(_a), (vec_uint4)(_b)), \ + vec_and((vec_uint4)(_c), vec_splat_u32(1)))))) + + +/* Count ones for bytes + */ +static __inline qword si_cntb(qword a) +{ + vec_uchar16 nib_cnt = (vec_uchar16){0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4}; + vec_uchar16 four = { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 }; + vec_uchar16 av; + + av = (vec_uchar16)(a); + + return ((qword)(vec_add(vec_perm(nib_cnt, nib_cnt, av), + vec_perm(nib_cnt, nib_cnt, vec_sr (av, four))))); +} + +/* Count ones for bytes + */ +static __inline qword si_clz(qword a) +{ + vec_uchar16 av; + vec_uchar16 cnt_hi, cnt_lo, cnt, tmp1, tmp2, tmp3; + vec_uchar16 four = vec_splat_u8(4); + vec_uchar16 nib_cnt = (vec_uchar16){4, 3, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}; + vec_uchar16 eight = vec_splat_u8(8); + vec_uchar16 sixteen = (vec_uchar16){16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16}; + vec_uchar16 twentyfour = (vec_uchar16){24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24}; + + av = (vec_uchar16)(a); + + cnt_hi = vec_perm(nib_cnt, nib_cnt, vec_sr(av, four)); + cnt_lo = vec_perm(nib_cnt, nib_cnt, av); + + cnt = vec_add(cnt_hi, vec_and(cnt_lo, vec_cmpeq(cnt_hi, four))); + + tmp1 = (vec_uchar16)vec_sl((vec_uint4)(cnt), (vec_uint4)(eight)); + tmp2 = (vec_uchar16)vec_sl((vec_uint4)(cnt), (vec_uint4)(sixteen)); + tmp3 = (vec_uchar16)vec_sl((vec_uint4)(cnt), (vec_uint4)(twentyfour)); + + cnt = vec_add(cnt, vec_and(tmp1, vec_cmpeq(cnt, eight))); + cnt = vec_add(cnt, vec_and(tmp2, vec_cmpeq(cnt, sixteen))); + cnt = vec_add(cnt, vec_and(tmp3, vec_cmpeq(cnt, twentyfour))); + + return (qword)((vec_sr((vec_uint4)(cnt), (vec_uint4)(twentyfour)))); +} + +/* Convert to float + */ +#define si_cuflt(_a, _b) ((qword)(vec_ctf((vec_uint4)(_a), _b))) +#define si_csflt(_a, _b) ((qword)(vec_ctf((vec_int4)(_a), _b))) + +/* Convert to signed int + */ +#define si_cflts(_a, _b) ((qword)(vec_cts((vec_float4)(_a), _b))) + +/* Convert to unsigned int + */ +#define si_cfltu(_a, _b) ((qword)(vec_ctu((vec_float4)(_a), _b))) + +/* Synchronize + */ +#define si_dsync() /* do nothing */ +#define si_sync() /* do nothing */ +#define si_syncc() /* do nothing */ + + +/* Equivalence + */ +static __inline qword si_eqv(qword a, qword b) +{ + vec_uchar16 d; + + d = vec_xor((vec_uchar16)(a), (vec_uchar16)(b)); + return ((qword)(vec_nor(d, d))); +} + +/* Extend + */ +static __inline qword si_xsbh(qword a) +{ + vec_char16 av; + + av = (vec_char16)(a); + return ((qword)(vec_unpackh(vec_perm(av, av, ((vec_uchar16){1, 3, 5, 7, 9,11,13,15, + 0, 0, 0, 0, 0, 0, 0, 0}))))); +} + +static __inline qword si_xshw(qword a) +{ + vec_short8 av; + + av = (vec_short8)(a); + return ((qword)(vec_unpackh(vec_perm(av, av, ((vec_uchar16){2, 3, 6, 7, + 10,11,14,15, + 0, 0, 0, 0, + 0, 0, 0, 0}))))); +} + +static __inline qword si_xswd(qword a) +{ + vec_int4 av; + + av = (vec_int4)(a); + return ((qword)(vec_perm(av, vec_sra(av, ((vec_uint4){31,31,31,31})), + ((vec_uchar16){20, 21, 22, 23, + 4, 5, 6, 7, + 28, 29, 30, 31, + 12, 13, 14, 15})))); +} + +static __inline qword si_fesd(qword a) +{ + union { + double d[2]; + vec_double2 vd; + } out; + union { + float f[4]; + vec_float4 vf; + } in; + + in.vf = (vec_float4)(a); + out.d[0] = (double)(in.f[0]); + out.d[1] = (double)(in.f[2]); + return ((qword)(out.vd)); +} + +/* Gather + */ +static __inline qword si_gbb(qword a) +{ + vec_uchar16 bits; + vec_uint4 bytes; + + bits = vec_sl(vec_and((vec_uchar16)(a), vec_splat_u8(1)), ((vec_uchar16){7, 6, 5, 4, 3, 2, 1, 0, + 7, 6, 5, 4, 3, 2, 1, 0})); + bytes = (vec_uint4)vec_sum2s((vec_int4)(vec_sum4s(bits, ((vec_uint4){0}))), ((vec_int4){0})); + + return ((qword)(vec_perm(bytes, bytes, ((vec_uchar16){0, 0, 7,15, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0})))); +} + + +static __inline qword si_gbh(qword a) +{ + vec_ushort8 bits; + vec_uint4 bytes; + + bits = vec_sl(vec_and((vec_ushort8)(a), vec_splat_u16(1)), ((vec_ushort8){7, 6, 5, 4, 3, 2, 1, 0})); + + bytes = (vec_uint4)vec_sums((vec_int4)(vec_sum4s((vec_short8)(bits), (vec_int4){0})), (vec_int4){0}); + + return ((qword)(vec_sld(bytes, bytes, 12))); +} + +static __inline qword si_gb(qword a) +{ + vec_uint4 bits; + vec_uint4 bytes; + + bits = vec_sl(vec_and((vec_uint4)(a), vec_splat_u32(1)), ((vec_uint4){3, 2, 1, 0})); + bytes = (vec_uint4)vec_sums((vec_int4)(bits), ((vec_int4){0})); + return ((qword)(vec_sld(bytes, bytes, 12))); +} + + +/* Compare and halt + */ +static __inline void si_heq(qword a, qword b) +{ + union { + vector unsigned int v; + unsigned int i[4]; + } aa, bb; + + aa.v = (vector unsigned int)(a); + bb.v = (vector unsigned int)(b); + + if (aa.i[0] == bb.i[0]) { SPU_HALT_ACTION; }; +} + +static __inline void si_heqi(qword a, unsigned int b) +{ + union { + vector unsigned int v; + unsigned int i[4]; + } aa; + + aa.v = (vector unsigned int)(a); + + if (aa.i[0] == b) { SPU_HALT_ACTION; }; +} + +static __inline void si_hgt(qword a, qword b) +{ + union { + vector signed int v; + signed int i[4]; + } aa, bb; + + aa.v = (vector signed int)(a); + bb.v = (vector signed int)(b); + + if (aa.i[0] > bb.i[0]) { SPU_HALT_ACTION; }; +} + +static __inline void si_hgti(qword a, signed int b) +{ + union { + vector signed int v; + signed int i[4]; + } aa; + + aa.v = (vector signed int)(a); + + if (aa.i[0] > b) { SPU_HALT_ACTION; }; +} + +static __inline void si_hlgt(qword a, qword b) +{ + union { + vector unsigned int v; + unsigned int i[4]; + } aa, bb; + + aa.v = (vector unsigned int)(a); + bb.v = (vector unsigned int)(b); + + if (aa.i[0] > bb.i[0]) { SPU_HALT_ACTION; }; +} + +static __inline void si_hlgti(qword a, unsigned int b) +{ + union { + vector unsigned int v; + unsigned int i[4]; + } aa; + + aa.v = (vector unsigned int)(a); + + if (aa.i[0] > b) { SPU_HALT_ACTION; }; +} + + +/* Multiply and Add + */ +static __inline qword si_mpya(qword a, qword b, qword c) +{ + return ((qword)(vec_msum(vec_and((vec_short8)(a), + ((vec_short8){0, -1, 0, -1, 0, -1, 0, -1})), + (vec_short8)(b), (vec_int4)(c)))); +} + +static __inline qword si_fma(qword a, qword b, qword c) +{ + return ((qword)(vec_madd((vec_float4)(a), (vec_float4)(b), (vec_float4)(c)))); +} + +static __inline qword si_dfma(qword a, qword b, qword c) +{ + union { + vec_double2 v; + double d[2]; + } aa, bb, cc, dd; + + aa.v = (vec_double2)(a); + bb.v = (vec_double2)(b); + cc.v = (vec_double2)(c); + dd.d[0] = aa.d[0] * bb.d[0] + cc.d[0]; + dd.d[1] = aa.d[1] * bb.d[1] + cc.d[1]; + return ((qword)(dd.v)); +} + +/* Form Mask + */ +#define si_fsmbi(_a) si_fsmb(si_from_int(_a)) + +static __inline qword si_fsmb(qword a) +{ + vec_char16 mask; + vec_ushort8 in; + + in = (vec_ushort8)(a); + mask = (vec_char16)(vec_perm(in, in, ((vec_uchar16){2, 2, 2, 2, 2, 2, 2, 2, + 3, 3, 3, 3, 3, 3, 3, 3}))); + return ((qword)(vec_sra(vec_sl(mask, ((vec_uchar16){0, 1, 2, 3, 4, 5, 6, 7, + 0, 1, 2, 3, 4, 5, 6, 7})), + vec_splat_u8(7)))); +} + + +static __inline qword si_fsmh(qword a) +{ + vec_uchar16 in; + vec_short8 mask; + + in = (vec_uchar16)(a); + mask = (vec_short8)(vec_splat(in, 3)); + return ((qword)(vec_sra(vec_sl(mask, ((vec_ushort8){0, 1, 2, 3, 4, 5, 6, 7})), + vec_splat_u16(15)))); +} + +static __inline qword si_fsm(qword a) +{ + vec_uchar16 in; + vec_int4 mask; + + in = (vec_uchar16)(a); + mask = (vec_int4)(vec_splat(in, 3)); + return ((qword)(vec_sra(vec_sl(mask, ((vec_uint4){28, 29, 30, 31})), + ((vec_uint4){31,31,31,31})))); +} + +/* Move from/to registers + */ +#define si_fscrrd() ((qword)((vec_uint4){0})) +#define si_fscrwr(_a) + +#define si_mfspr(_reg) ((qword)((vec_uint4){0})) +#define si_mtspr(_reg, _a) + +/* Multiply High High Add + */ +static __inline qword si_mpyhha(qword a, qword b, qword c) +{ + return ((qword)(vec_add(vec_mule((vec_short8)(a), (vec_short8)(b)), (vec_int4)(c)))); +} + +static __inline qword si_mpyhhau(qword a, qword b, qword c) +{ + return ((qword)(vec_add(vec_mule((vec_ushort8)(a), (vec_ushort8)(b)), (vec_uint4)(c)))); +} + +/* Multiply Subtract + */ +static __inline qword si_fms(qword a, qword b, qword c) +{ + return ((qword)(vec_madd((vec_float4)(a), (vec_float4)(b), + vec_sub(((vec_float4){0.0f}), (vec_float4)(c))))); +} + +static __inline qword si_dfms(qword a, qword b, qword c) +{ + union { + vec_double2 v; + double d[2]; + } aa, bb, cc, dd; + + aa.v = (vec_double2)(a); + bb.v = (vec_double2)(b); + cc.v = (vec_double2)(c); + dd.d[0] = aa.d[0] * bb.d[0] - cc.d[0]; + dd.d[1] = aa.d[1] * bb.d[1] - cc.d[1]; + return ((qword)(dd.v)); +} + +/* Multiply + */ +static __inline qword si_fm(qword a, qword b) +{ + return ((qword)(vec_madd((vec_float4)(a), (vec_float4)(b), ((vec_float4){0.0f})))); +} + +static __inline qword si_dfm(qword a, qword b) +{ + union { + vec_double2 v; + double d[2]; + } aa, bb, dd; + + aa.v = (vec_double2)(a); + bb.v = (vec_double2)(b); + dd.d[0] = aa.d[0] * bb.d[0]; + dd.d[1] = aa.d[1] * bb.d[1]; + return ((qword)(dd.v)); +} + +/* Multiply High + */ +static __inline qword si_mpyh(qword a, qword b) +{ + vec_uint4 sixteen = (vec_uint4){16, 16, 16, 16}; + + return ((qword)(vec_sl(vec_mule((vec_short8)(a), (vec_short8)(vec_sl((vec_uint4)(b), sixteen))), sixteen))); +} + + +/* Multiply High High + */ +static __inline qword si_mpyhh(qword a, qword b) +{ + return ((qword)(vec_mule((vec_short8)(a), (vec_short8)(b)))); +} + +static __inline qword si_mpyhhu(qword a, qword b) +{ + return ((qword)(vec_mule((vec_ushort8)(a), (vec_ushort8)(b)))); +} + +/* Multiply Odd + */ +static __inline qword si_mpy(qword a, qword b) +{ + return ((qword)(vec_mulo((vec_short8)(a), (vec_short8)(b)))); +} + +static __inline qword si_mpyu(qword a, qword b) +{ + return ((qword)(vec_mulo((vec_ushort8)(a), (vec_ushort8)(b)))); +} + +static __inline qword si_mpyi(qword a, short b) +{ + return ((qword)(vec_mulo((vec_short8)(a), + vec_splat((vec_short8)(si_from_short(b)), 1)))); +} + +static __inline qword si_mpyui(qword a, unsigned short b) +{ + return ((qword)(vec_mulo((vec_ushort8)(a), + vec_splat((vec_ushort8)(si_from_ushort(b)), 1)))); +} + +/* Multiply and Shift Right + */ +static __inline qword si_mpys(qword a, qword b) +{ + return ((qword)(vec_sra(vec_mulo((vec_short8)(a), (vec_short8)(b)), ((vec_uint4){16,16,16,16})))); +} + +/* Nand + */ +static __inline qword si_nand(qword a, qword b) +{ + vec_uchar16 d; + + d = vec_and((vec_uchar16)(a), (vec_uchar16)(b)); + return ((qword)(vec_nor(d, d))); +} + +/* Negative Multiply Add + */ +static __inline qword si_dfnma(qword a, qword b, qword c) +{ + union { + vec_double2 v; + double d[2]; + } aa, bb, cc, dd; + + aa.v = (vec_double2)(a); + bb.v = (vec_double2)(b); + cc.v = (vec_double2)(c); + dd.d[0] = -cc.d[0] - aa.d[0] * bb.d[0]; + dd.d[1] = -cc.d[1] - aa.d[1] * bb.d[1]; + return ((qword)(dd.v)); +} + +/* Negative Multiply and Subtract + */ +static __inline qword si_fnms(qword a, qword b, qword c) +{ + return ((qword)(vec_nmsub((vec_float4)(a), (vec_float4)(b), (vec_float4)(c)))); +} + +static __inline qword si_dfnms(qword a, qword b, qword c) +{ + union { + vec_double2 v; + double d[2]; + } aa, bb, cc, dd; + + aa.v = (vec_double2)(a); + bb.v = (vec_double2)(b); + cc.v = (vec_double2)(c); + dd.d[0] = cc.d[0] - aa.d[0] * bb.d[0]; + dd.d[1] = cc.d[1] - aa.d[1] * bb.d[1]; + return ((qword)(dd.v)); +} + +/* Nor + */ +static __inline qword si_nor(qword a, qword b) +{ + return ((qword)(vec_nor((vec_uchar16)(a), (vec_uchar16)(b)))); +} + +/* Or + */ +static __inline qword si_or(qword a, qword b) +{ + return ((qword)(vec_or((vec_uchar16)(a), (vec_uchar16)(b)))); +} + +static __inline qword si_orbi(qword a, unsigned char b) +{ + return ((qword)(vec_or((vec_uchar16)(a), + vec_splat((vec_uchar16)(si_from_uchar(b)), 3)))); +} + +static __inline qword si_orhi(qword a, unsigned short b) +{ + return ((qword)(vec_or((vec_ushort8)(a), + vec_splat((vec_ushort8)(si_from_ushort(b)), 1)))); +} + +static __inline qword si_ori(qword a, unsigned int b) +{ + return ((qword)(vec_or((vec_uint4)(a), + vec_splat((vec_uint4)(si_from_uint(b)), 0)))); +} + +/* Or Complement + */ +static __inline qword si_orc(qword a, qword b) +{ + return ((qword)(vec_or((vec_uchar16)(a), vec_nor((vec_uchar16)(b), (vec_uchar16)(b))))); +} + + +/* Or Across + */ +static __inline qword si_orx(qword a) +{ + vec_uchar16 tmp; + tmp = (vec_uchar16)(a); + tmp = vec_or(tmp, vec_sld(tmp, tmp, 8)); + tmp = vec_or(tmp, vec_sld(tmp, tmp, 4)); + return ((qword)(vec_and(tmp, ((vec_uchar16){0xFF,0xFF,0xFF,0xFF, 0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00})))); +} + + +/* Estimates + */ +static __inline qword si_frest(qword a) +{ + return ((qword)(vec_re((vec_float4)(a)))); +} + +static __inline qword si_frsqest(qword a) +{ + return ((qword)(vec_rsqrte((vec_float4)(a)))); +} + +#define si_fi(_a, _d) (_d) + +/* Channel Read and Write + */ +#define si_rdch(_channel) ((qword)(vec_splat_u8(0))) /* not mappable */ +#define si_rchcnt(_channel) ((qword)(vec_splat_u8(0))) /* not mappable */ +#define si_wrch(_channel, _a) /* not mappable */ + +/* Rotate Left + */ +static __inline qword si_roth(qword a, qword b) +{ + return ((qword)(vec_rl((vec_ushort8)(a), (vec_ushort8)(b)))); +} + +static __inline qword si_rot(qword a, qword b) +{ + return ((qword)(vec_rl((vec_uint4)(a), (vec_uint4)(b)))); +} + +static __inline qword si_rothi(qword a, int b) +{ + return ((qword)(vec_rl((vec_ushort8)(a), + vec_splat((vec_ushort8)(si_from_int(b)), 1)))); +} + +static __inline qword si_roti(qword a, int b) +{ + return ((qword)(vec_rl((vec_uint4)(a), + vec_splat((vec_uint4)(si_from_int(b)), 0)))); +} + +/* Rotate Left with Mask + */ +static __inline qword si_rothm(qword a, qword b) +{ + vec_ushort8 neg_b; + vec_ushort8 mask; + + neg_b = (vec_ushort8)vec_sub(vec_splat_s16(0), (vec_short8)(b)); + mask = vec_sra(vec_sl(neg_b, vec_splat_u16(11)), vec_splat_u16(15)); + return ((qword)(vec_andc(vec_sr((vec_ushort8)(a), neg_b), mask))); +} + +static __inline qword si_rotm(qword a, qword b) +{ + vec_uint4 neg_b; + vec_uint4 mask; + + neg_b = (vec_uint4)vec_sub(vec_splat_s32(0), (vec_int4)(b)); + mask = vec_sra(vec_sl(neg_b, ((vec_uint4){26,26,26,26})), ((vec_uint4){31,31,31,31})); + return ((qword)(vec_andc(vec_sr((vec_uint4)(a), neg_b), mask))); +} + +static __inline qword si_rothmi(qword a, int b) +{ + vec_ushort8 neg_b; + vec_ushort8 mask; + + neg_b = vec_splat((vec_ushort8)(si_from_int(-b)), 1); + mask = vec_sra(vec_sl(neg_b, vec_splat_u16(11)), vec_splat_u16(15)); + return ((qword)(vec_andc(vec_sr((vec_ushort8)(a), neg_b), mask))); +} + +static __inline qword si_rotmi(qword a, int b) +{ + vec_uint4 neg_b; + vec_uint4 mask; + + neg_b = vec_splat((vec_uint4)(si_from_int(-b)), 0); + mask = vec_sra(vec_sl(neg_b, ((vec_uint4){26,26,26,26})), ((vec_uint4){31,31,31,31})); + return ((qword)(vec_andc(vec_sr((vec_uint4)(a), neg_b), mask))); +} + + +/* Rotate Left Algebraic with Mask + */ +static __inline qword si_rotmah(qword a, qword b) +{ + vec_ushort8 neg_b; + vec_ushort8 mask; + + neg_b = (vec_ushort8)vec_sub(vec_splat_s16(0), (vec_short8)(b)); + mask = vec_sra(vec_sl(neg_b, vec_splat_u16(11)), vec_splat_u16(15)); + return ((qword)(vec_sra((vec_short8)(a), (vec_ushort8)vec_or(neg_b, mask)))); +} + +static __inline qword si_rotma(qword a, qword b) +{ + vec_uint4 neg_b; + vec_uint4 mask; + + neg_b = (vec_uint4)vec_sub(vec_splat_s32(0), (vec_int4)(b)); + mask = vec_sra(vec_sl(neg_b, ((vec_uint4){26,26,26,26})), ((vec_uint4){31,31,31,31})); + return ((qword)(vec_sra((vec_int4)(a), (vec_uint4)vec_or(neg_b, mask)))); +} + + +static __inline qword si_rotmahi(qword a, int b) +{ + vec_ushort8 neg_b; + vec_ushort8 mask; + + neg_b = vec_splat((vec_ushort8)(si_from_int(-b)), 1); + mask = vec_sra(vec_sl(neg_b, vec_splat_u16(11)), vec_splat_u16(15)); + return ((qword)(vec_sra((vec_short8)(a), (vec_ushort8)vec_or(neg_b, mask)))); +} + +static __inline qword si_rotmai(qword a, int b) +{ + vec_uint4 neg_b; + vec_uint4 mask; + + neg_b = vec_splat((vec_uint4)(si_from_int(-b)), 0); + mask = vec_sra(vec_sl(neg_b, ((vec_uint4){26,26,26,26})), ((vec_uint4){31,31,31,31})); + return ((qword)(vec_sra((vec_int4)(a), (vec_uint4)vec_or(neg_b, mask)))); +} + + +/* Rotate Left Quadword by Bytes with Mask + */ +static __inline qword si_rotqmbyi(qword a, int count) +{ + union { + vec_uchar16 v; + int i[4]; + } x; + vec_uchar16 mask; + + count = 0 - count; + x.i[3] = count << 3; + mask = (count & 0x10) ? vec_splat_u8(0) : vec_splat_u8(-1); + + return ((qword)(vec_and(vec_sro((vec_uchar16)(a), x.v), mask))); +} + + +static __inline qword si_rotqmby(qword a, qword count) +{ + union { + vec_uchar16 v; + int i[4]; + } x; + int cnt; + vec_uchar16 mask; + + x.v = (vec_uchar16)(count); + x.i[0] = cnt = (0 - x.i[0]) << 3; + + x.v = vec_splat(x.v, 3); + mask = (cnt & 0x80) ? vec_splat_u8(0) : vec_splat_u8(-1); + + return ((qword)(vec_and(vec_sro((vec_uchar16)(a), x.v), mask))); +} + + +/* Rotate Left Quadword by Bytes + */ +static __inline qword si_rotqbyi(qword a, int count) +{ + union { + vec_uchar16 v; + int i[4]; + } left, right; + + count <<= 3; + left.i[3] = count; + right.i[3] = 0 - count; + return ((qword)(vec_or(vec_slo((vec_uchar16)(a), left.v), vec_sro((vec_uchar16)(a), right.v)))); +} + +static __inline qword si_rotqby(qword a, qword count) +{ + vec_uchar16 left, right; + + left = vec_sl(vec_splat((vec_uchar16)(count), 3), vec_splat_u8(3)); + right = vec_sub(vec_splat_u8(0), left); + return ((qword)(vec_or(vec_slo((vec_uchar16)(a), left), vec_sro((vec_uchar16)(a), right)))); +} + +/* Rotate Left Quadword by Bytes Bit Count + */ +static __inline qword si_rotqbybi(qword a, qword count) +{ + vec_uchar16 left, right; + + left = vec_splat((vec_uchar16)(count), 3); + right = vec_sub(vec_splat_u8(7), left); + return ((qword)(vec_or(vec_slo((vec_uchar16)(a), left), vec_sro((vec_uchar16)(a), right)))); +} + + +/* Rotate Left Quadword by Bytes Bit Count + */ +static __inline qword si_rotqbii(qword a, int count) +{ + vec_uchar16 x, y; + vec_uchar16 result; + + x = vec_splat((vec_uchar16)(si_from_int(count & 7)), 3); + y = (vec_uchar16)(vec_sr((vec_uint4)vec_sro((vec_uchar16)(a), ((vec_uchar16)((vec_uint4){0,0,0,120}))), + (vec_uint4)vec_sub(vec_splat_u8(8), x))); + result = vec_or(vec_sll((qword)(a), x), y); + return ((qword)(result)); +} + +static __inline qword si_rotqbi(qword a, qword count) +{ + vec_uchar16 x, y; + vec_uchar16 result; + + x = vec_and(vec_splat((vec_uchar16)(count), 3), vec_splat_u8(7)); + y = (vec_uchar16)(vec_sr((vec_uint4)vec_sro((vec_uchar16)(a), ((vec_uchar16)((vec_uint4){0,0,0,120}))), + (vec_uint4)vec_sub(vec_splat_u8(8), x))); + + result = vec_or(vec_sll((qword)(a), x), y); + return ((qword)(result)); +} + + +/* Rotate Left Quadword and Mask by Bits + */ +static __inline qword si_rotqmbii(qword a, int count) +{ + return ((qword)(vec_srl((vec_uchar16)(a), vec_splat((vec_uchar16)(si_from_int(0 - count)), 3)))); +} + +static __inline qword si_rotqmbi(qword a, qword count) +{ + return ((qword)(vec_srl((vec_uchar16)(a), vec_sub(vec_splat_u8(0), vec_splat((vec_uchar16)(count), 3))))); +} + + +/* Rotate Left Quadword and Mask by Bytes with Bit Count + */ +static __inline qword si_rotqmbybi(qword a, qword count) +{ + union { + vec_uchar16 v; + int i[4]; + } x; + int cnt; + vec_uchar16 mask; + + x.v = (vec_uchar16)(count); + x.i[0] = cnt = 0 - (x.i[0] & ~7); + x.v = vec_splat(x.v, 3); + mask = (cnt & 0x80) ? vec_splat_u8(0) : vec_splat_u8(-1); + + return ((qword)(vec_and(vec_sro((vec_uchar16)(a), x.v), mask))); +} + + + + +/* Round Double to Float + */ +static __inline qword si_frds(qword a) +{ + union { + vec_float4 v; + float f[4]; + } d; + union { + vec_double2 v; + double d[2]; + } in; + + in.v = (vec_double2)(a); + d.v = (vec_float4){0.0f}; + d.f[0] = (float)in.d[0]; + d.f[2] = (float)in.d[1]; + + return ((qword)(d.v)); +} + +/* Select Bits + */ +static __inline qword si_selb(qword a, qword b, qword c) +{ + return ((qword)(vec_sel((vec_uchar16)(a), (vec_uchar16)(b), (vec_uchar16)(c)))); +} + + +/* Shuffle Bytes + */ +static __inline qword si_shufb(qword a, qword b, qword pattern) +{ + vec_uchar16 pat; + + pat = vec_sel(((vec_uchar16){0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15}), + vec_sr((vec_uchar16)(pattern), vec_splat_u8(3)), + vec_sra((vec_uchar16)(pattern), vec_splat_u8(7))); + return ((qword)(vec_perm(vec_perm(a, b, pattern), + ((vec_uchar16){0, 0, 0, 0, 0, 0, 0, 0, + 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x80, 0x80, 0x80}), + pat))); +} + + +/* Shift Left + */ +static __inline qword si_shlh(qword a, qword b) +{ + vec_ushort8 mask; + + mask = (vec_ushort8)vec_sra(vec_sl((vec_ushort8)(b), vec_splat_u16(11)), vec_splat_u16(15)); + return ((qword)(vec_andc(vec_sl((vec_ushort8)(a), (vec_ushort8)(b)), mask))); +} + +static __inline qword si_shl(qword a, qword b) +{ + vec_uint4 mask; + + mask = (vec_uint4)vec_sra(vec_sl((vec_uint4)(b), ((vec_uint4){26,26,26,26})), ((vec_uint4){31,31,31,31})); + return ((qword)(vec_andc(vec_sl((vec_uint4)(a), (vec_uint4)(b)), mask))); +} + + +static __inline qword si_shlhi(qword a, unsigned int b) +{ + vec_ushort8 mask; + vec_ushort8 bv; + + bv = vec_splat((vec_ushort8)(si_from_int(b)), 1); + mask = (vec_ushort8)vec_sra(vec_sl(bv, vec_splat_u16(11)), vec_splat_u16(15)); + return ((qword)(vec_andc(vec_sl((vec_ushort8)(a), bv), mask))); +} + +static __inline qword si_shli(qword a, unsigned int b) +{ + vec_uint4 bv; + vec_uint4 mask; + + bv = vec_splat((vec_uint4)(si_from_uint(b)), 0); + mask = (vec_uint4)vec_sra(vec_sl(bv, ((vec_uint4){26,26,26,26})), ((vec_uint4){31,31,31,31})); + return ((qword)(vec_andc(vec_sl((vec_uint4)(a), bv), mask))); +} + + +/* Shift Left Quadword + */ +static __inline qword si_shlqbii(qword a, unsigned int count) +{ + vec_uchar16 x; + + x = vec_splat((vec_uchar16)(si_from_uint(count)), 3); + return ((qword)(vec_sll((vec_uchar16)(a), x))); +} + +static __inline qword si_shlqbi(qword a, qword count) +{ + vec_uchar16 x; + + x = vec_splat((vec_uchar16)(count), 3); + return ((qword)(vec_sll((vec_uchar16)(a), x))); +} + + +/* Shift Left Quadword by Bytes + */ +static __inline qword si_shlqbyi(qword a, unsigned int count) +{ + union { + vec_uchar16 v; + int i[4]; + } x; + vec_uchar16 mask; + + x.i[3] = count << 3; + mask = (count & 0x10) ? vec_splat_u8(0) : vec_splat_u8(-1); + return ((qword)(vec_and(vec_slo((vec_uchar16)(a), x.v), mask))); +} + +static __inline qword si_shlqby(qword a, qword count) +{ + union { + vec_uchar16 v; + unsigned int i[4]; + } x; + unsigned int cnt; + vec_uchar16 mask; + + x.v = vec_sl(vec_splat((vec_uchar16)(count), 3), vec_splat_u8(3)); + cnt = x.i[0]; + mask = (cnt & 0x80) ? vec_splat_u8(0) : vec_splat_u8(-1); + return ((qword)(vec_and(vec_slo((vec_uchar16)(a), x.v), mask))); +} + +/* Shift Left Quadword by Bytes with Bit Count + */ +static __inline qword si_shlqbybi(qword a, qword count) +{ + union { + vec_uchar16 v; + int i[4]; + } x; + unsigned int cnt; + vec_uchar16 mask; + + x.v = vec_splat((vec_uchar16)(count), 3); + cnt = x.i[0]; + mask = (cnt & 0x80) ? vec_splat_u8(0) : vec_splat_u8(-1); + return ((qword)(vec_and(vec_slo((vec_uchar16)(a), x.v), mask))); +} + + +/* Stop and Signal + */ +#define si_stop(_type) SPU_STOP_ACTION +#define si_stopd(a, b, c) SPU_STOP_ACTION + + +/* Subtract + */ +static __inline qword si_sfh(qword a, qword b) +{ + return ((qword)(vec_sub((vec_ushort8)(b), (vec_ushort8)(a)))); +} + +static __inline qword si_sf(qword a, qword b) +{ + return ((qword)(vec_sub((vec_uint4)(b), (vec_uint4)(a)))); +} + +static __inline qword si_fs(qword a, qword b) +{ + return ((qword)(vec_sub((vec_float4)(a), (vec_float4)(b)))); +} + +static __inline qword si_dfs(qword a, qword b) +{ + union { + vec_double2 v; + double d[2]; + } aa, bb, dd; + + aa.v = (vec_double2)(a); + bb.v = (vec_double2)(b); + dd.d[0] = aa.d[0] - bb.d[0]; + dd.d[1] = aa.d[1] - bb.d[1]; + return ((qword)(dd.v)); +} + +static __inline qword si_sfhi(qword a, short b) +{ + return ((qword)(vec_sub(vec_splat((vec_short8)(si_from_short(b)), 1), + (vec_short8)(a)))); +} + +static __inline qword si_sfi(qword a, int b) +{ + return ((qword)(vec_sub(vec_splat((vec_int4)(si_from_int(b)), 0), + (vec_int4)(a)))); +} + +/* Subtract word extended + */ +#define si_sfx(_a, _b, _c) ((qword)(vec_add(vec_add((vec_uint4)(_b), \ + vec_nor((vec_uint4)(_a), (vec_uint4)(_a))), \ + vec_and((vec_uint4)(_c), vec_splat_u32(1))))) + + +/* Sum Bytes into Shorts + */ +static __inline qword si_sumb(qword a, qword b) +{ + vec_uint4 zero = (vec_uint4){0}; + vec_ushort8 sum_a, sum_b; + + sum_a = (vec_ushort8)vec_sum4s((vec_uchar16)(a), zero); + sum_b = (vec_ushort8)vec_sum4s((vec_uchar16)(b), zero); + + return ((qword)(vec_perm(sum_a, sum_b, ((vec_uchar16){18, 19, 2, 3, 22, 23, 6, 7, + 26, 27, 10, 11, 30, 31, 14, 15})))); +} + +/* Exclusive OR + */ +static __inline qword si_xor(qword a, qword b) +{ + return ((qword)(vec_xor((vec_uchar16)(a), (vec_uchar16)(b)))); +} + +static __inline qword si_xorbi(qword a, unsigned char b) +{ + return ((qword)(vec_xor((vec_uchar16)(a), + vec_splat((vec_uchar16)(si_from_uchar(b)), 3)))); +} + +static __inline qword si_xorhi(qword a, unsigned short b) +{ + return ((qword)(vec_xor((vec_ushort8)(a), + vec_splat((vec_ushort8)(si_from_ushort(b)), 1)))); +} + +static __inline qword si_xori(qword a, unsigned int b) +{ + return ((qword)(vec_xor((vec_uint4)(a), + vec_splat((vec_uint4)(si_from_uint(b)), 0)))); +} + + +/* Generate Controls for Sub-Quadword Insertion + */ +static __inline qword si_cbd(qword a, int imm) +{ + union { + vec_uint4 v; + unsigned char c[16]; + } shmask; + + shmask.v = ((vec_uint4){0x10111213, 0x14151617, 0x18191A1B, 0x1C1D1E1F}); + shmask.c[(si_to_uint(a) + (unsigned int)(imm)) & 0xF] = 0x03; + return ((qword)(shmask.v)); +} + +static __inline qword si_cdd(qword a, int imm) +{ + union { + vec_uint4 v; + unsigned long long ll[2]; + } shmask; + + shmask.v = ((vec_uint4){0x10111213, 0x14151617, 0x18191A1B, 0x1C1D1E1F}); + shmask.ll[((si_to_uint(a) + (unsigned int)(imm)) >> 3) & 0x1] = 0x0001020304050607ULL; + return ((qword)(shmask.v)); +} + +static __inline qword si_chd(qword a, int imm) +{ + union { + vec_uint4 v; + unsigned short s[8]; + } shmask; + + shmask.v = ((vec_uint4){0x10111213, 0x14151617, 0x18191A1B, 0x1C1D1E1F}); + shmask.s[((si_to_uint(a) + (unsigned int)(imm)) >> 1) & 0x7] = 0x0203; + return ((qword)(shmask.v)); +} + +static __inline qword si_cwd(qword a, int imm) +{ + union { + vec_uint4 v; + unsigned int i[4]; + } shmask; + + shmask.v = ((vec_uint4){0x10111213, 0x14151617, 0x18191A1B, 0x1C1D1E1F}); + shmask.i[((si_to_uint(a) + (unsigned int)(imm)) >> 2) & 0x3] = 0x00010203; + return ((qword)(shmask.v)); +} + +static __inline qword si_cbx(qword a, qword b) +{ + union { + vec_uint4 v; + unsigned char c[16]; + } shmask; + + shmask.v = ((vec_uint4){0x10111213, 0x14151617, 0x18191A1B, 0x1C1D1E1F}); + shmask.c[si_to_uint((qword)(vec_add((vec_uint4)(a), (vec_uint4)(b)))) & 0xF] = 0x03; + return ((qword)(shmask.v)); +} + + +static __inline qword si_cdx(qword a, qword b) +{ + union { + vec_uint4 v; + unsigned long long ll[2]; + } shmask; + + shmask.v = ((vec_uint4){0x10111213, 0x14151617, 0x18191A1B, 0x1C1D1E1F}); + shmask.ll[(si_to_uint((qword)(vec_add((vec_uint4)(a), (vec_uint4)(b)))) >> 3) & 0x1] = 0x0001020304050607ULL; + return ((qword)(shmask.v)); +} + +static __inline qword si_chx(qword a, qword b) +{ + union { + vec_uint4 v; + unsigned short s[8]; + } shmask; + + shmask.v = ((vec_uint4){0x10111213, 0x14151617, 0x18191A1B, 0x1C1D1E1F}); + shmask.s[(si_to_uint((qword)(vec_add((vec_uint4)(a), (vec_uint4)(b)))) >> 1) & 0x7] = 0x0203; + return ((qword)(shmask.v)); +} + +static __inline qword si_cwx(qword a, qword b) +{ + union { + vec_uint4 v; + unsigned int i[4]; + } shmask; + + shmask.v = ((vec_uint4){0x10111213, 0x14151617, 0x18191A1B, 0x1C1D1E1F}); + shmask.i[(si_to_uint((qword)(vec_add((vec_uint4)(a), (vec_uint4)(b)))) >> 2) & 0x3] = 0x00010203; + return ((qword)(shmask.v)); +} + + +/* Constant Formation + */ +static __inline qword si_il(signed short imm) +{ + return ((qword)(vec_splat((vec_int4)(si_from_int((signed int)(imm))), 0))); +} + + +static __inline qword si_ila(unsigned int imm) +{ + return ((qword)(vec_splat((vec_uint4)(si_from_uint(imm)), 0))); +} + +static __inline qword si_ilh(signed short imm) +{ + return ((qword)(vec_splat((vec_short8)(si_from_short(imm)), 1))); +} + +static __inline qword si_ilhu(signed short imm) +{ + return ((qword)(vec_splat((vec_uint4)(si_from_uint((unsigned int)(imm) << 16)), 0))); +} + +static __inline qword si_iohl(qword a, unsigned short imm) +{ + return ((qword)(vec_or((vec_uint4)(a), vec_splat((vec_uint4)(si_from_uint((unsigned int)(imm))), 0)))); +} + +/* No Operation + */ +#define si_lnop() /* do nothing */ +#define si_nop() /* do nothing */ + + +/* Memory Load and Store + */ +static __inline qword si_lqa(unsigned int imm) +{ + return ((qword)(vec_ld(0, (vector unsigned char *)(imm)))); +} + +static __inline qword si_lqd(qword a, unsigned int imm) +{ + return ((qword)(vec_ld(si_to_uint(a) & ~0xF, (vector unsigned char *)(imm)))); +} + +static __inline qword si_lqr(unsigned int imm) +{ + return ((qword)(vec_ld(0, (vector unsigned char *)(imm)))); +} + +static __inline qword si_lqx(qword a, qword b) +{ + return ((qword)(vec_ld(si_to_uint((qword)(vec_add((vec_uint4)(a), (vec_uint4)(b)))), (vector unsigned char *)(0)))); +} + +static __inline void si_stqa(qword a, unsigned int imm) +{ + vec_st((vec_uchar16)(a), 0, (vector unsigned char *)(imm)); +} + +static __inline void si_stqd(qword a, qword b, unsigned int imm) +{ + vec_st((vec_uchar16)(a), si_to_uint(b) & ~0xF, (vector unsigned char *)(imm)); +} + +static __inline void si_stqr(qword a, unsigned int imm) +{ + vec_st((vec_uchar16)(a), 0, (vector unsigned char *)(imm)); +} + +static __inline void si_stqx(qword a, qword b, qword c) +{ + vec_st((vec_uchar16)(a), + si_to_uint((qword)(vec_add((vec_uint4)(b), (vec_uint4)(c)))), + (vector unsigned char *)(0)); +} + +#endif /* !__SPU__ */ +#endif /* !_SI2VMX_H_ */ + diff --git a/Extras/vectormathlibrary/other/rs6000/spu2vmx.h b/Extras/vectormathlibrary/other/rs6000/spu2vmx.h new file mode 100644 index 000000000..a1cb78991 --- /dev/null +++ b/Extras/vectormathlibrary/other/rs6000/spu2vmx.h @@ -0,0 +1,2418 @@ +/* (C) Copyright + Sony Computer Entertainment, Inc., + 2001,2002,2003,2004,2005,2006. + + This file is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your option) + any later version. + + This file is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with this file; see the file COPYING. If not, write to the Free + Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. */ + +/* As a special exception, if you include this header file into source files + compiled by GCC, this header file does not by itself cause the resulting + executable to be covered by the GNU General Public License. This exception + does not however invalidate any other reasons why the executable file might be + covered by the GNU General Public License. */ + +#ifndef _SPU2VMX_H_ +#define _SPU2VMX_H_ 1 + +#ifdef __cplusplus + +#ifndef __SPU__ + +#include + +/* spu_absd (absolute difference) + * ======== + */ +static __inline vec_uchar16 spu_absd(vec_uchar16 a, vec_uchar16 b) +{ + return ((vec_uchar16)(si_absdb((qword)(a), (qword)(b)))); + +} + + +/* spu_add + * ======= + */ +static __inline vec_uint4 spu_add(vec_uint4 a, vec_uint4 b) +{ + return ((vec_uint4)(si_a((qword)(a), (qword)(b)))); +} + +static __inline vec_int4 spu_add(vec_int4 a, vec_int4 b) +{ + return ((vec_int4)(si_a((qword)(a), (qword)(b)))); +} + +static __inline vec_ushort8 spu_add(vec_ushort8 a, vec_ushort8 b) +{ + return ((vec_ushort8)(si_ah((qword)(a), (qword)(b)))); +} + +static __inline vec_short8 spu_add(vec_short8 a, vec_short8 b) +{ + return ((vec_short8)(si_ah((qword)(a), (qword)(b)))); +} + +static __inline vec_uint4 spu_add(vec_uint4 a, unsigned int b) +{ + return ((vec_uint4)(si_ai((qword)(a), (int)(b)))); +} + +static __inline vec_int4 spu_add(vec_int4 a, int b) +{ + return ((vec_int4)(si_ai((qword)(a), b))); +} + +static __inline vec_ushort8 spu_add(vec_ushort8 a, unsigned short b) +{ + return ((vec_ushort8)(si_ahi((qword)(a), (short)(b)))); +} + +static __inline vec_short8 spu_add(vec_short8 a, short b) +{ + return ((vec_short8)(si_ahi((qword)(a), b))); +} + +static __inline vec_float4 spu_add(vec_float4 a, vec_float4 b) +{ + return ((vec_float4)(si_fa((qword)(a), (qword)(b)))); +} + +static __inline vec_double2 spu_add(vec_double2 a, vec_double2 b) +{ + return ((vec_double2)(si_dfa((qword)(a), (qword)(b)))); +} + + +/* spu_addx + * ======== + */ +static __inline vec_uint4 spu_addx(vec_uint4 a, vec_uint4 b, vec_uint4 c) +{ + return ((vec_uint4)(si_addx((qword)(a), (qword)(b), (qword)(c)))); +} + +static __inline vec_int4 spu_addx(vec_int4 a, vec_int4 b, vec_int4 c) +{ + return ((vec_int4)(si_addx((qword)(a), (qword)(b), (qword)(c)))); +} + + +/* spu_and + * ======= + */ +static __inline vec_uchar16 spu_and(vec_uchar16 a, vec_uchar16 b) +{ + return ((vec_uchar16)(si_and((qword)(a), (qword)(b)))); +} + +static __inline vec_char16 spu_and(vec_char16 a, vec_char16 b) +{ + return ((vec_char16)(si_and((qword)(a), (qword)(b)))); +} + +static __inline vec_ushort8 spu_and(vec_ushort8 a, vec_ushort8 b) +{ + return ((vec_ushort8)(si_and((qword)(a), (qword)(b)))); +} + +static __inline vec_short8 spu_and(vec_short8 a, vec_short8 b) +{ + return ((vec_short8)(si_and((qword)(a), (qword)(b)))); +} + +static __inline vec_uint4 spu_and(vec_uint4 a, vec_uint4 b) +{ + return ((vec_uint4)(si_and((qword)(a), (qword)(b)))); +} + +static __inline vec_int4 spu_and(vec_int4 a, vec_int4 b) +{ + return ((vec_int4)(si_and((qword)(a), (qword)(b)))); +} + +static __inline vec_float4 spu_and(vec_float4 a, vec_float4 b) +{ + return ((vec_float4)(si_and((qword)(a), (qword)(b)))); +} + +static __inline vec_ullong2 spu_and(vec_ullong2 a, vec_ullong2 b) +{ + return ((vec_ullong2)(si_and((qword)(a), (qword)(b)))); +} + +static __inline vec_llong2 spu_and(vec_llong2 a, vec_llong2 b) +{ + return ((vec_llong2)(si_and((qword)(a), (qword)(b)))); +} + +static __inline vec_double2 spu_and(vec_double2 a, vec_double2 b) +{ + return ((vec_double2)(si_and((qword)(a), (qword)(b)))); +} + +static __inline vec_uchar16 spu_and(vec_uchar16 a, unsigned char b) +{ + return ((vec_uchar16)(si_andbi((qword)(a), (signed char)(b)))); +} + + +static __inline vec_char16 spu_and(vec_char16 a, signed char b) +{ + return ((vec_char16)(si_andbi((qword)(a), b))); +} + +static __inline vec_ushort8 spu_and(vec_ushort8 a, unsigned short b) +{ + return ((vec_ushort8)(si_andhi((qword)(a), (signed short)(b)))); +} + +static __inline vec_short8 spu_and(vec_short8 a, signed short b) +{ + return ((vec_short8)(si_andhi((qword)(a), b))); +} + +static __inline vec_uint4 spu_and(vec_uint4 a, unsigned int b) +{ + return ((vec_uint4)(si_andi((qword)(a), (signed int)(b)))); +} + +static __inline vec_int4 spu_and(vec_int4 a, signed int b) +{ + return ((vec_int4)(si_andi((qword)(a), b))); +} + + +/* spu_andc + * ======== + */ +#define spu_andc(_a, _b) vec_andc(_a, _b) + + +/* spu_avg + * ======= + */ +#define spu_avg(_a, _b) vec_avg(_a, _b) + + +/* spu_bisled + * spu_bisled_d + * spu_bisled_e + * ============ + */ +#define spu_bisled(_func) /* not mappable */ +#define spu_bisled_d(_func) /* not mappable */ +#define spu_bisled_e(_func) /* not mappable */ + +/* spu_cmpabseq + * ============ + */ +static __inline vec_uint4 spu_cmpabseq(vec_float4 a, vec_float4 b) +{ + return ((vec_uint4)(si_fcmeq((qword)(a), (qword)(b)))); + +} + +static __inline vec_ullong2 spu_cmpabseq(vec_double2 a, vec_double2 b) +{ + return ((vec_ullong2)(si_dfcmeq((qword)(a), (qword)(b)))); +} + + +/* spu_cmpabsgt + * ============ + */ +static __inline vec_uint4 spu_cmpabsgt(vec_float4 a, vec_float4 b) +{ + return ((vec_uint4)(si_fcmgt((qword)(a), (qword)(b)))); +} + +static __inline vec_ullong2 spu_cmpabsgt(vec_double2 a, vec_double2 b) +{ + return ((vec_ullong2)(si_dfcmgt((qword)(a), (qword)(b)))); +} + + +/* spu_cmpeq + * ======== + */ +static __inline vec_uchar16 spu_cmpeq(vec_uchar16 a, vec_uchar16 b) +{ + return ((vec_uchar16)(si_ceqb((qword)(a), (qword)(b)))); +} + +static __inline vec_uchar16 spu_cmpeq(vec_char16 a, vec_char16 b) +{ + return ((vec_uchar16)(si_ceqb((qword)(a), (qword)(b)))); +} + +static __inline vec_ushort8 spu_cmpeq(vec_ushort8 a, vec_ushort8 b) +{ + return ((vec_ushort8)(si_ceqh((qword)(a), (qword)(b)))); +} + +static __inline vec_ushort8 spu_cmpeq(vec_short8 a, vec_short8 b) +{ + return ((vec_ushort8)(si_ceqh((qword)(a), (qword)(b)))); +} + +static __inline vec_uint4 spu_cmpeq(vec_uint4 a, vec_uint4 b) +{ + return ((vec_uint4)(si_ceq((qword)(a), (qword)(b)))); +} + +static __inline vec_uint4 spu_cmpeq(vec_int4 a, vec_int4 b) +{ + return ((vec_uint4)(si_ceq((qword)(a), (qword)(b)))); +} + +static __inline vec_uint4 spu_cmpeq(vec_float4 a, vec_float4 b) +{ + return ((vec_uint4)(si_fceq((qword)(a), (qword)(b)))); +} + +static __inline vec_uchar16 spu_cmpeq(vec_uchar16 a, unsigned char b) +{ + return ((vec_uchar16)(si_ceqbi((qword)(a), (signed char)(b)))); +} + +static __inline vec_uchar16 spu_cmpeq(vec_char16 a, signed char b) +{ + return ((vec_uchar16)(si_ceqbi((qword)(a), b))); +} + +static __inline vec_ushort8 spu_cmpeq(vec_ushort8 a, unsigned short b) +{ + return ((vec_ushort8)(si_ceqhi((qword)(a), (signed short)(b)))); +} + +static __inline vec_ushort8 spu_cmpeq(vec_short8 a, signed short b) +{ + return ((vec_ushort8)(si_ceqhi((qword)(a), b))); +} + +static __inline vec_uint4 spu_cmpeq(vec_uint4 a, unsigned int b) +{ + return ((vec_uint4)(si_ceqi((qword)(a), (signed int)(b)))); +} + +static __inline vec_uint4 spu_cmpeq(vec_int4 a, signed int b) +{ + return ((vec_uint4)(si_ceqi((qword)(a), b))); +} + +static __inline vec_ullong2 spu_cmpeq(vec_double2 a, vec_double2 b) +{ + return ((vec_ullong2)(si_dfceq((qword)(a), (qword)(b)))); +} + + +/* spu_cmpgt + * ======== + */ +static __inline vec_uchar16 spu_cmpgt(vec_uchar16 a, vec_uchar16 b) +{ + return ((vec_uchar16)(si_clgtb((qword)(a), (qword)(b)))); +} + +static __inline vec_uchar16 spu_cmpgt(vec_char16 a, vec_char16 b) +{ + return ((vec_uchar16)(si_cgtb((qword)(a), (qword)(b)))); +} + +static __inline vec_ushort8 spu_cmpgt(vec_ushort8 a, vec_ushort8 b) +{ + return ((vec_ushort8)(si_clgth((qword)(a), (qword)(b)))); +} + +static __inline vec_ushort8 spu_cmpgt(vec_short8 a, vec_short8 b) +{ + return ((vec_ushort8)(si_cgth((qword)(a), (qword)(b)))); +} + +static __inline vec_uint4 spu_cmpgt(vec_uint4 a, vec_uint4 b) +{ + return ((vec_uint4)(si_clgt((qword)(a), (qword)(b)))); +} + +static __inline vec_uint4 spu_cmpgt(vec_int4 a, vec_int4 b) +{ + return ((vec_uint4)(si_cgt((qword)(a), (qword)(b)))); +} + +static __inline vec_uint4 spu_cmpgt(vec_float4 a, vec_float4 b) +{ + return ((vec_uint4)(si_fcgt((qword)(a), (qword)(b)))); +} + +static __inline vec_uchar16 spu_cmpgt(vec_uchar16 a, unsigned char b) +{ + return ((vec_uchar16)(si_clgtbi((qword)(a), b))); +} + +static __inline vec_uchar16 spu_cmpgt(vec_char16 a, signed char b) +{ + return ((vec_uchar16)(si_cgtbi((qword)(a), b))); +} + +static __inline vec_ushort8 spu_cmpgt(vec_ushort8 a, unsigned short b) +{ + return ((vec_ushort8)(si_clgthi((qword)(a), b))); +} + +static __inline vec_ushort8 spu_cmpgt(vec_short8 a, signed short b) +{ + return ((vec_ushort8)(si_cgthi((qword)(a), b))); +} + +static __inline vec_uint4 spu_cmpgt(vec_uint4 a, unsigned int b) +{ + return ((vec_uint4)(si_clgti((qword)(a), b))); +} + +static __inline vec_uint4 spu_cmpgt(vec_int4 a, signed int b) +{ + return ((vec_uint4)(si_cgti((qword)(a), b))); +} + +static __inline vec_ullong2 spu_cmpgt(vec_double2 a, vec_double2 b) +{ + return ((vec_ullong2)(si_dfcgt((qword)(a), (qword)(b)))); +} + + +/* spu_cntb + * ======== + */ +static __inline vec_uchar16 spu_cntb(vec_uchar16 a) +{ + return ((vec_uchar16)(si_cntb((qword)(a)))); +} + + +static __inline vec_uchar16 spu_cntb(vec_char16 a) +{ + return ((vec_uchar16)(si_cntb((qword)(a)))); +} + +/* spu_cntlz + * ========= + */ +static __inline vec_uint4 spu_cntlz(vec_uint4 a) +{ + return ((vec_uint4)(si_clz((qword)(a)))); +} + +static __inline vec_uint4 spu_cntlz(vec_int4 a) +{ + return ((vec_uint4)(si_clz((qword)(a)))); +} + +static __inline vec_uint4 spu_cntlz(vec_float4 a) +{ + return ((vec_uint4)(si_clz((qword)(a)))); +} + +/* spu_testsv + * ========== + */ +static __inline vec_ullong2 spu_testsv(vec_double2 a, char b) +{ + return ((vec_ullong2)(si_dftsv((qword)(a), b))); +} + +/* spu_convtf + * ========== + */ +#define spu_convtf(_a, _b) (vec_ctf(_a, _b)) + +/* spu_convts + * ========== + */ +#define spu_convts(_a, _b) (vec_cts(_a, _b)) + +/* spu_convtu + * ========== + */ +#define spu_convtu(_a, _b) (vec_ctu(_a, _b)) + + +/* spu_dsync + * ======== + */ +#define spu_dsync() + +/* spu_eqv + * ======= + */ +static __inline vec_uchar16 spu_eqv(vec_uchar16 a, vec_uchar16 b) +{ + return ((vec_uchar16)(si_eqv((qword)(a), (qword)(b)))); +} + +static __inline vec_char16 spu_eqv(vec_char16 a, vec_char16 b) +{ + return ((vec_char16)(si_eqv((qword)(a), (qword)(b)))); +} + +static __inline vec_ushort8 spu_eqv(vec_ushort8 a, vec_ushort8 b) +{ + return ((vec_ushort8)(si_eqv((qword)(a), (qword)(b)))); +} + +static __inline vec_short8 spu_eqv(vec_short8 a, vec_short8 b) +{ + return ((vec_short8)(si_eqv((qword)(a), (qword)(b)))); +} + +static __inline vec_uint4 spu_eqv(vec_uint4 a, vec_uint4 b) +{ + return ((vec_uint4)(si_eqv((qword)(a), (qword)(b)))); +} + +static __inline vec_int4 spu_eqv(vec_int4 a, vec_int4 b) +{ + return ((vec_int4)(si_eqv((qword)(a), (qword)(b)))); +} + +static __inline vec_float4 spu_eqv(vec_float4 a, vec_float4 b) +{ + return ((vec_float4)(si_eqv((qword)(a), (qword)(b)))); +} + +static __inline vec_ullong2 spu_eqv(vec_ullong2 a, vec_ullong2 b) +{ + return ((vec_ullong2)(si_eqv((qword)(a), (qword)(b)))); +} + +static __inline vec_llong2 spu_eqv(vec_llong2 a, vec_llong2 b) +{ + return ((vec_llong2)(si_eqv((qword)(a), (qword)(b)))); +} + +static __inline vec_double2 spu_eqv(vec_double2 a, vec_double2 b) +{ + return ((vec_double2)(si_eqv((qword)(a), (qword)(b)))); +} + +/* spu_extend + * ======== + */ +static __inline vec_short8 spu_extend(vec_char16 a) +{ + return ((vec_short8)(si_xsbh((qword)(a)))); +} + + +static __inline vec_int4 spu_extend(vec_short8 a) +{ + return ((vec_int4)(si_xshw((qword)(a)))); +} + +static __inline vec_llong2 spu_extend(vec_int4 a) +{ + return ((vec_llong2)(si_xswd((qword)(a)))); +} + + +static __inline vec_double2 spu_extend(vec_float4 a) +{ + return ((vec_double2)(si_fesd((qword)(a)))); +} + + +/* spu_extract + * ======== + */ +static __inline unsigned char spu_extract(vec_uchar16 a, int element) +{ + union { + vec_uchar16 v; + unsigned char c[16]; + } in; + + in.v = a; + return (in.c[element & 15]); +} + +static __inline signed char spu_extract(vec_char16 a, int element) +{ + union { + vec_char16 v; + signed char c[16]; + } in; + + in.v = a; + return (in.c[element & 15]); +} + +static __inline unsigned short spu_extract(vec_ushort8 a, int element) +{ + union { + vec_ushort8 v; + unsigned short s[8]; + } in; + + in.v = a; + return (in.s[element & 7]); +} + +static __inline signed short spu_extract(vec_short8 a, int element) +{ + union { + vec_short8 v; + signed short s[8]; + } in; + + in.v = a; + return (in.s[element & 7]); +} + +static __inline unsigned int spu_extract(vec_uint4 a, int element) +{ + union { + vec_uint4 v; + unsigned int i[4]; + } in; + + in.v = a; + return (in.i[element & 3]); +} + +static __inline signed int spu_extract(vec_int4 a, int element) +{ + union { + vec_int4 v; + signed int i[4]; + } in; + + in.v = a; + return (in.i[element & 3]); +} + +static __inline float spu_extract(vec_float4 a, int element) +{ + union { + vec_float4 v; + float f[4]; + } in; + + in.v = a; + return (in.f[element & 3]); +} + +static __inline unsigned long long spu_extract(vec_ullong2 a, int element) +{ + union { + vec_ullong2 v; + unsigned long long l[2]; + } in; + + in.v = a; + return (in.l[element & 1]); +} + +static __inline signed long long spu_extract(vec_llong2 a, int element) +{ + union { + vec_llong2 v; + signed long long l[2]; + } in; + + in.v = a; + return (in.l[element & 1]); +} + +static __inline double spu_extract(vec_double2 a, int element) +{ + union { + vec_double2 v; + double d[2]; + } in; + + in.v = a; + return (in.d[element & 1]); +} + +/* spu_gather + * ======== + */ +static __inline vec_uint4 spu_gather(vec_uchar16 a) +{ + return ((vec_uint4)(si_gbb((qword)(a)))); +} + + +static __inline vec_uint4 spu_gather(vec_char16 a) +{ + return ((vec_uint4)(si_gbb((qword)(a)))); +} + +static __inline vec_uint4 spu_gather(vec_ushort8 a) +{ + return ((vec_uint4)(si_gbh((qword)(a)))); +} + +static __inline vec_uint4 spu_gather(vec_short8 a) +{ + return ((vec_uint4)(si_gbh((qword)(a)))); +} + + +static __inline vec_uint4 spu_gather(vec_uint4 a) +{ + return ((vec_uint4)(si_gb((qword)(a)))); +} + +static __inline vec_uint4 spu_gather(vec_int4 a) +{ + return ((vec_uint4)(si_gb((qword)(a)))); +} + +static __inline vec_uint4 spu_gather(vec_float4 a) +{ + return ((vec_uint4)(si_gb((qword)(a)))); +} + +/* spu_genb + * ======== + */ +static __inline vec_uint4 spu_genb(vec_uint4 a, vec_uint4 b) +{ + return ((vec_uint4)(si_bg((qword)(b), (qword)(a)))); +} + +static __inline vec_int4 spu_genb(vec_int4 a, vec_int4 b) +{ + return ((vec_int4)(si_bg((qword)(b), (qword)(a)))); +} + +/* spu_genbx + * ========= + */ +static __inline vec_uint4 spu_genbx(vec_uint4 a, vec_uint4 b, vec_uint4 c) +{ + return ((vec_uint4)(si_bgx((qword)(b), (qword)(a), (qword)(c)))); +} + +static __inline vec_int4 spu_genbx(vec_int4 a, vec_int4 b, vec_int4 c) +{ + return ((vec_int4)(si_bgx((qword)(b), (qword)(a), (qword)(c)))); +} + + +/* spu_genc + * ======== + */ +static __inline vec_uint4 spu_genc(vec_uint4 a, vec_uint4 b) +{ + return ((vec_uint4)(si_cg((qword)(a), (qword)(b)))); +} + +static __inline vec_int4 spu_genc(vec_int4 a, vec_int4 b) +{ + return ((vec_int4)(si_cg((qword)(a), (qword)(b)))); +} + +/* spu_gencx + * ========= + */ +static __inline vec_uint4 spu_gencx(vec_uint4 a, vec_uint4 b, vec_uint4 c) +{ + return ((vec_uint4)(si_cgx((qword)(a), (qword)(b), (qword)(c)))); +} + +static __inline vec_int4 spu_gencx(vec_int4 a, vec_int4 b, vec_int4 c) +{ + return ((vec_int4)(si_cgx((qword)(a), (qword)(b), (qword)(c)))); +} + + +/* spu_hcmpeq + * ======== + */ +#define spu_hcmpeq(_a, _b) if (_a == _b) { SPU_HALT_ACTION; }; + + +/* spu_hcmpgt + * ======== + */ +#define spu_hcmpgt(_a, _b) if (_a > _b) { SPU_HALT_ACTION; }; + + +/* spu_idisable + * ============ + */ +#define spu_idisable() SPU_UNSUPPORTED_ACTION + + +/* spu_ienable + * =========== + */ +#define spu_ienable() SPU_UNSUPPORTED_ACTION + + +/* spu_insert + * ======== + */ +static __inline vec_uchar16 spu_insert(unsigned char a, vec_uchar16 b, int element) +{ + union { + vec_uchar16 v; + unsigned char c[16]; + } in; + + in.v = b; + in.c[element & 15] = a; + return (in.v); +} + +static __inline vec_char16 spu_insert(signed char a, vec_char16 b, int element) +{ + return ((vec_char16)spu_insert((unsigned char)(a), (vec_uchar16)(b), element)); +} + +static __inline vec_ushort8 spu_insert(unsigned short a, vec_ushort8 b, int element) +{ + union { + vec_ushort8 v; + unsigned short s[8]; + } in; + + in.v = b; + in.s[element & 7] = a; + return (in.v); +} + +static __inline vec_short8 spu_insert(signed short a, vec_short8 b, int element) +{ + return ((vec_short8)spu_insert((unsigned short)(a), (vec_ushort8)(b), element)); +} + +static __inline vec_uint4 spu_insert(unsigned int a, vec_uint4 b, int element) +{ + union { + vec_uint4 v; + unsigned int i[4]; + } in; + + in.v = b; + in.i[element & 3] = a; + return (in.v); +} + +static __inline vec_int4 spu_insert(signed int a, vec_int4 b, int element) +{ + return ((vec_int4)spu_insert((unsigned int)(a), (vec_uint4)(b), element)); +} + +static __inline vec_float4 spu_insert(float a, vec_float4 b, int element) +{ + union { + vec_float4 v; + float f[4]; + } in; + + in.v = b; + in.f[element & 3] = a; + return (in.v); +} + +static __inline vec_ullong2 spu_insert(unsigned long long a, vec_ullong2 b, int element) +{ + union { + vec_ullong2 v; + unsigned long long l[2]; + } in; + + in.v = b; + in.l[element & 1] = a; + return (in.v); +} + +static __inline vec_llong2 spu_insert(signed long long a, vec_llong2 b, int element) +{ + return ((vec_llong2)spu_insert((unsigned long long)(a), (vec_ullong2)(b), element)); +} + +static __inline vec_double2 spu_insert(double a, vec_double2 b, int element) +{ + union { + vec_double2 v; + double d[2]; + } in; + + in.v = b; + in.d[element & 1] = a; + return (in.v); +} + + +/* spu_madd + * ======== + */ +static __inline vec_int4 spu_madd(vec_short8 a, vec_short8 b, vec_int4 c) +{ + return ((vec_int4)(si_mpya((qword)(a), (qword)(b), (qword)(c)))); +} + +static __inline vec_float4 spu_madd(vec_float4 a, vec_float4 b, vec_float4 c) +{ + return ((vec_float4)(si_fma((qword)(a), (qword)(b), (qword)(c)))); +} + +static __inline vec_double2 spu_madd(vec_double2 a, vec_double2 b, vec_double2 c) +{ + return ((vec_double2)(si_dfma((qword)(a), (qword)(b), (qword)(c)))); +} + + +/* spu_maskb + * ======== + */ +#define spu_maskb(_a) (vec_uchar16)(si_fsmb(si_from_int((int)(_a)))) + +/* spu_maskh + * ======== + */ +#define spu_maskh(_a) (vec_ushort8)(si_fsmh(si_from_int((int)(_a)))) + + +/* spu_maskw + * ======== + */ +#define spu_maskw(_a) (vec_uint4)(si_fsm(si_from_int((int)(_a)))) + + +/* spu_mfcdma32 + * ======== + */ +#define spu_mfcdma32(_ls, _ea, _size, _tagid, _cmd) + + +/* spu_mfcdma64 + * ======== + */ +#define spu_mfcdma64(_ls, _eahi, _ealow, _size, _tagid, _cmd) + +/* spu_mfcstat + * ======== + */ +#define spu_mfcstat(_type) 0xFFFFFFFF + + + +/* spu_mffpscr + * =========== + */ +#define spu_mffpscr() (vec_uint4)(si_fscrrd()) + + +/* spu_mfspr + * ======== + */ + +#define spu_mfspr(_reg) si_to_uint(si_mfspr(_reg)) + + + +/* spu_mhhadd + * ========== + */ +static __inline vec_int4 spu_mhhadd(vec_short8 a, vec_short8 b, vec_int4 c) +{ + return ((vec_int4)(si_mpyhha((qword)(a), (qword)(b), (qword)(c)))); +} + + +static __inline vec_uint4 spu_mhhadd(vec_ushort8 a, vec_ushort8 b, vec_uint4 c) +{ + return ((vec_uint4)(si_mpyhhau((qword)(a), (qword)(b), (qword)(c)))); +} + + +/* spu_msub + * ======== + */ +static __inline vec_float4 spu_msub(vec_float4 a, vec_float4 b, vec_float4 c) +{ + return ((vec_float4)(si_fms((qword)(a), (qword)(b), (qword)(c)))); +} + +static __inline vec_double2 spu_msub(vec_double2 a, vec_double2 b, vec_double2 c) +{ + return ((vec_double2)(si_dfms((qword)(a), (qword)(b), (qword)(c)))); +} + + +/* spu_mtfpscr + * =========== + */ +#define spu_mtfpscr(_a) + + +/* spu_mtspr + * ======== + */ +#define spu_mtspr(_reg, _a) + + +/* spu_mul + * ======== + */ +static __inline vec_float4 spu_mul(vec_float4 a, vec_float4 b) +{ + return ((vec_float4)(si_fm((qword)(a), (qword)(b)))); +} + +static __inline vec_double2 spu_mul(vec_double2 a, vec_double2 b) +{ + return ((vec_double2)(si_dfm((qword)(a), (qword)(b)))); +} + + +/* spu_mulh + * ======== + */ +static __inline vec_int4 spu_mulh(vec_short8 a, vec_short8 b) +{ + return ((vec_int4)(si_mpyh((qword)(a), (qword)(b)))); +} + +/* spu_mule + * ========= + */ +#define spu_mule(_a, _b) vec_mule(_a, _b) + + + +/* spu_mulo + * ======== + */ +static __inline vec_int4 spu_mulo(vec_short8 a, vec_short8 b) +{ + return ((vec_int4)(si_mpy((qword)(a), (qword)(b)))); +} + + +static __inline vec_uint4 spu_mulo(vec_ushort8 a, vec_ushort8 b) +{ + return ((vec_uint4)(si_mpyu((qword)(a), (qword)(b)))); +} + + +static __inline vec_int4 spu_mulo(vec_short8 a, short b) +{ + return ((vec_int4)(si_mpyi((qword)(a), b))); +} + +static __inline vec_uint4 spu_mulo(vec_ushort8 a, unsigned short b) +{ + return ((vec_uint4)(si_mpyui((qword)(a), b))); +} + + +/* spu_mulsr + * ========= + */ +static __inline vec_int4 spu_mulsr(vec_short8 a, vec_short8 b) +{ + return ((vec_int4)(si_mpys((qword)(a), (qword)(b)))); +} + + +/* spu_nand + * ======== + */ +static __inline vec_uchar16 spu_nand(vec_uchar16 a, vec_uchar16 b) +{ + return ((vec_uchar16)(si_nand((qword)(a), (qword)(b)))); +} + +static __inline vec_char16 spu_nand(vec_char16 a, vec_char16 b) +{ + return ((vec_char16)(si_nand((qword)(a), (qword)(b)))); +} + +static __inline vec_ushort8 spu_nand(vec_ushort8 a, vec_ushort8 b) +{ + return ((vec_ushort8)(si_nand((qword)(a), (qword)(b)))); +} + +static __inline vec_short8 spu_nand(vec_short8 a, vec_short8 b) +{ + return ((vec_short8)(si_nand((qword)(a), (qword)(b)))); +} + +static __inline vec_uint4 spu_nand(vec_uint4 a, vec_uint4 b) +{ + return ((vec_uint4)(si_nand((qword)(a), (qword)(b)))); +} + +static __inline vec_int4 spu_nand(vec_int4 a, vec_int4 b) +{ + return ((vec_int4)(si_nand((qword)(a), (qword)(b)))); +} + +static __inline vec_float4 spu_nand(vec_float4 a, vec_float4 b) +{ + return ((vec_float4)(si_nand((qword)(a), (qword)(b)))); +} + +static __inline vec_ullong2 spu_nand(vec_ullong2 a, vec_ullong2 b) +{ + return ((vec_ullong2)(si_nand((qword)(a), (qword)(b)))); +} + +static __inline vec_llong2 spu_nand(vec_llong2 a, vec_llong2 b) +{ + return ((vec_llong2)(si_nand((qword)(a), (qword)(b)))); +} + +static __inline vec_double2 spu_nand(vec_double2 a, vec_double2 b) +{ + return ((vec_double2)(si_nand((qword)(a), (qword)(b)))); +} + + +/* spu_nmadd + * ========= + */ +static __inline vec_double2 spu_nmadd(vec_double2 a, vec_double2 b, vec_double2 c) +{ + return ((vec_double2)(si_dfnma((qword)(a), (qword)(b), (qword)(c)))); +} + + +/* spu_nmsub + * ========= + */ +static __inline vec_float4 spu_nmsub(vec_float4 a, vec_float4 b, vec_float4 c) +{ + return ((vec_float4)(si_fnms((qword)(a), (qword)(b), (qword)(c)))); +} + +static __inline vec_double2 spu_nmsub(vec_double2 a, vec_double2 b, vec_double2 c) +{ + return ((vec_double2)(si_dfnms((qword)(a), (qword)(b), (qword)(c)))); +} + + +/* spu_nor + * ======= + */ +#define spu_nor(_a, _b) vec_nor(_a, _b) + + +/* spu_or + * ====== + */ +static __inline vec_uchar16 spu_or(vec_uchar16 a, vec_uchar16 b) +{ + return ((vec_uchar16)(si_or((qword)(a), (qword)(b)))); +} + +static __inline vec_char16 spu_or(vec_char16 a, vec_char16 b) +{ + return ((vec_char16)(si_or((qword)(a), (qword)(b)))); +} + +static __inline vec_ushort8 spu_or(vec_ushort8 a, vec_ushort8 b) +{ + return ((vec_ushort8)(si_or((qword)(a), (qword)(b)))); +} + +static __inline vec_short8 spu_or(vec_short8 a, vec_short8 b) +{ + return ((vec_short8)(si_or((qword)(a), (qword)(b)))); +} + +static __inline vec_uint4 spu_or(vec_uint4 a, vec_uint4 b) +{ + return ((vec_uint4)(si_or((qword)(a), (qword)(b)))); +} + +static __inline vec_int4 spu_or(vec_int4 a, vec_int4 b) +{ + return ((vec_int4)(si_or((qword)(a), (qword)(b)))); +} + +static __inline vec_float4 spu_or(vec_float4 a, vec_float4 b) +{ + return ((vec_float4)(si_or((qword)(a), (qword)(b)))); +} + +static __inline vec_ullong2 spu_or(vec_ullong2 a, vec_ullong2 b) +{ + return ((vec_ullong2)(si_or((qword)(a), (qword)(b)))); +} + +static __inline vec_llong2 spu_or(vec_llong2 a, vec_llong2 b) +{ + return ((vec_llong2)(si_or((qword)(a), (qword)(b)))); +} + +static __inline vec_double2 spu_or(vec_double2 a, vec_double2 b) +{ + return ((vec_double2)(si_or((qword)(a), (qword)(b)))); +} + + +static __inline vec_uchar16 spu_or(vec_uchar16 a, unsigned char b) +{ + return ((vec_uchar16)(si_orbi((qword)(a), b))); +} + +static __inline vec_char16 spu_or(vec_char16 a, signed char b) +{ + return ((vec_char16)(si_orbi((qword)(a), (unsigned char)(b)))); +} + +static __inline vec_ushort8 spu_or(vec_ushort8 a, unsigned short b) +{ + return ((vec_ushort8)(si_orhi((qword)(a), b))); +} + +static __inline vec_short8 spu_or(vec_short8 a, signed short b) +{ + return ((vec_short8)(si_orhi((qword)(a), (unsigned short)(b)))); +} + +static __inline vec_uint4 spu_or(vec_uint4 a, unsigned int b) +{ + return ((vec_uint4)(si_ori((qword)(a), b))); +} + +static __inline vec_int4 spu_or(vec_int4 a, signed int b) +{ + return ((vec_int4)(si_ori((qword)(a), (unsigned int)(b)))); +} + + +/* spu_orc + * ======= + */ +#define spu_orc(_a, _b) vec_or(_a, vec_nor(_b, _b)) + + +/* spu_orx + * ======= + */ +static __inline vec_uint4 spu_orx(vec_uint4 a) +{ + return ((vec_uint4)(si_orx((qword)(a)))); +} + +static __inline vec_int4 spu_orx(vec_int4 a) +{ + return ((vec_int4)(si_orx((qword)(a)))); +} + + +/* spu_promote + * =========== + */ +static __inline vec_uchar16 spu_promote(unsigned char a, int element) +{ + union { + vec_uchar16 v; + unsigned char c[16]; + } in; + + in.c[element & 15] = a; + return (in.v); +} + +static __inline vec_char16 spu_promote(signed char a, int element) +{ + union { + vec_char16 v; + signed char c[16]; + } in; + + in.c[element & 15] = a; + return (in.v); +} + +static __inline vec_ushort8 spu_promote(unsigned short a, int element) +{ + union { + vec_ushort8 v; + unsigned short s[8]; + } in; + + in.s[element & 7] = a; + return (in.v); +} + +static __inline vec_short8 spu_promote(signed short a, int element) +{ + union { + vec_short8 v; + signed short s[8]; + } in; + + in.s[element & 7] = a; + return (in.v); +} + +static __inline vec_uint4 spu_promote(unsigned int a, int element) +{ + union { + vec_uint4 v; + unsigned int i[4]; + } in; + + in.i[element & 3] = a; + return (in.v); +} + +static __inline vec_int4 spu_promote(signed int a, int element) +{ + union { + vec_int4 v; + signed int i[4]; + } in; + + in.i[element & 3] = a; + return (in.v); +} + +static __inline vec_float4 spu_promote(float a, int element) +{ + union { + vec_float4 v; + float f[4]; + } in; + + in.f[element & 3] = a; + return (in.v); +} + +static __inline vec_ullong2 spu_promote(unsigned long long a, int element) +{ + union { + vec_ullong2 v; + unsigned long long l[2]; + } in; + + in.l[element & 1] = a; + return (in.v); +} + +static __inline vec_llong2 spu_promote(signed long long a, int element) +{ + union { + vec_llong2 v; + signed long long l[2]; + } in; + + in.l[element & 1] = a; + return (in.v); +} + +static __inline vec_double2 spu_promote(double a, int element) +{ + union { + vec_double2 v; + double d[2]; + } in; + + in.d[element & 1] = a; + return (in.v); +} + +/* spu_re + * ====== + */ +#define spu_re(_a) vec_re(_a) + + +/* spu_readch + * ========== + */ +#define spu_readch(_channel) 0 /* not mappable */ + + +/* spu_readchcnt + * ============= + */ +#define spu_readchcnt(_channel) 0 /* not mappable */ + + +/* spu_readchqw + * ============ + */ +#define spu_readchqw(_channel) __extension__ ({ vec_uint4 result = { 0, 0, 0, 0 }; result; }) + +/* spu_rl + * ====== + */ +static __inline vec_ushort8 spu_rl(vec_ushort8 a, vec_short8 b) +{ + return ((vec_ushort8)(si_roth((qword)(a), (qword)(b)))); +} + +static __inline vec_short8 spu_rl(vec_short8 a, vec_short8 b) +{ + return ((vec_short8)(si_roth((qword)(a), (qword)(b)))); +} + +static __inline vec_uint4 spu_rl(vec_uint4 a, vec_int4 b) +{ + return ((vec_uint4)(si_rot((qword)(a), (qword)(b)))); +} + +static __inline vec_int4 spu_rl(vec_int4 a, vec_int4 b) +{ + return ((vec_int4)(si_rot((qword)(a), (qword)(b)))); +} + +static __inline vec_ushort8 spu_rl(vec_ushort8 a, int b) +{ + return ((vec_ushort8)(si_rothi((qword)(a), b))); +} + +static __inline vec_short8 spu_rl(vec_short8 a, int b) +{ + return ((vec_short8)(si_rothi((qword)(a), b))); +} + +static __inline vec_uint4 spu_rl(vec_uint4 a, int b) +{ + return ((vec_uint4)(si_roti((qword)(a), b))); +} + +static __inline vec_int4 spu_rl(vec_int4 a, int b) +{ + return ((vec_int4)(si_roti((qword)(a), b))); +} + + +/* spu_rlmask + * ========== + */ +static __inline vec_ushort8 spu_rlmask(vec_ushort8 a, vec_short8 b) +{ + return ((vec_ushort8)(si_rothm((qword)(a), (qword)(b)))); +} + +static __inline vec_short8 spu_rlmask(vec_short8 a, vec_short8 b) +{ + return ((vec_short8)(si_rothm((qword)(a), (qword)(b)))); +} + +static __inline vec_uint4 spu_rlmask(vec_uint4 a, vec_int4 b) +{ + return ((vec_uint4)(si_rotm((qword)(a), (qword)(b)))); +} + +static __inline vec_int4 spu_rlmask(vec_int4 a, vec_int4 b) +{ + return ((vec_int4)(si_rotm((qword)(a), (qword)(b)))); +} + +static __inline vec_ushort8 spu_rlmask(vec_ushort8 a, int b) +{ + return ((vec_ushort8)(si_rothmi((qword)(a), b))); +} + +static __inline vec_short8 spu_rlmask(vec_short8 a, int b) +{ + return ((vec_short8)(si_rothmi((qword)(a), b))); +} + + +static __inline vec_uint4 spu_rlmask(vec_uint4 a, int b) +{ + return ((vec_uint4)(si_rotmi((qword)(a), b))); +} + +static __inline vec_int4 spu_rlmask(vec_int4 a, int b) +{ + return ((vec_int4)(si_rotmi((qword)(a), b))); +} + +/* spu_rlmaska + * =========== + */ +static __inline vec_short8 spu_rlmaska(vec_short8 a, vec_short8 b) +{ + return ((vec_short8)(si_rotmah((qword)(a), (qword)(b)))); +} + +static __inline vec_ushort8 spu_rlmaska(vec_ushort8 a, vec_short8 b) +{ + return ((vec_ushort8)(si_rotmah((qword)(a), (qword)(b)))); +} + + +static __inline vec_int4 spu_rlmaska(vec_int4 a, vec_int4 b) +{ + return ((vec_int4)(si_rotma((qword)(a), (qword)(b)))); +} + +static __inline vec_uint4 spu_rlmaska(vec_uint4 a, vec_int4 b) +{ + return ((vec_uint4)(si_rotma((qword)(a), (qword)(b)))); +} + +static __inline vec_ushort8 spu_rlmaska(vec_ushort8 a, int b) +{ + return ((vec_ushort8)(si_rotmahi((qword)(a), b))); +} + +static __inline vec_short8 spu_rlmaska(vec_short8 a, int b) +{ + return ((vec_short8)(si_rotmahi((qword)(a), b))); +} + +static __inline vec_uint4 spu_rlmaska(vec_uint4 a, int b) +{ + return ((vec_uint4)(si_rotmai((qword)(a), b))); +} + +static __inline vec_int4 spu_rlmaska(vec_int4 a, int b) +{ + return ((vec_int4)(si_rotmai((qword)(a), b))); +} + + +/* spu_rlmaskqw + * ============ + */ +static __inline vec_uchar16 spu_rlmaskqw(vec_uchar16 a, int count) +{ + return ((vec_uchar16)(si_rotqmbi((qword)(a), si_from_int(count)))); +} + +static __inline vec_char16 spu_rlmaskqw(vec_char16 a, int count) +{ + return ((vec_char16)(si_rotqmbi((qword)(a), si_from_int(count)))); +} + +static __inline vec_ushort8 spu_rlmaskqw(vec_ushort8 a, int count) +{ + return ((vec_ushort8)(si_rotqmbi((qword)(a), si_from_int(count)))); +} + +static __inline vec_short8 spu_rlmaskqw(vec_short8 a, int count) +{ + return ((vec_short8)(si_rotqmbi((qword)(a), si_from_int(count)))); +} + +static __inline vec_uint4 spu_rlmaskqw(vec_uint4 a, int count) +{ + return ((vec_uint4)(si_rotqmbi((qword)(a), si_from_int(count)))); +} + +static __inline vec_int4 spu_rlmaskqw(vec_int4 a, int count) +{ + return ((vec_int4)(si_rotqmbi((qword)(a), si_from_int(count)))); +} + +static __inline vec_float4 spu_rlmaskqw(vec_float4 a, int count) +{ + return ((vec_float4)(si_rotqmbi((qword)(a), si_from_int(count)))); +} + +static __inline vec_ullong2 spu_rlmaskqw(vec_ullong2 a, int count) +{ + return ((vec_ullong2)(si_rotqmbi((qword)(a), si_from_int(count)))); +} + +static __inline vec_llong2 spu_rlmaskqw(vec_llong2 a, int count) +{ + return ((vec_llong2)(si_rotqmbi((qword)(a), si_from_int(count)))); +} + +static __inline vec_double2 spu_rlmaskqw(vec_double2 a, int count) +{ + return ((vec_double2)(si_rotqmbi((qword)(a), si_from_int(count)))); +} + +/* spu_rlmaskqwbyte + * ================ + */ +static __inline vec_uchar16 spu_rlmaskqwbyte(vec_uchar16 a, int count) +{ + return ((vec_uchar16)(si_rotqmby((qword)(a), si_from_int(count)))); +} + +static __inline vec_char16 spu_rlmaskqwbyte(vec_char16 a, int count) +{ + return ((vec_char16)(si_rotqmby((qword)(a), si_from_int(count)))); +} + +static __inline vec_ushort8 spu_rlmaskqwbyte(vec_ushort8 a, int count) +{ + return ((vec_ushort8)(si_rotqmby((qword)(a), si_from_int(count)))); +} + +static __inline vec_short8 spu_rlmaskqwbyte(vec_short8 a, int count) +{ + return ((vec_short8)(si_rotqmby((qword)(a), si_from_int(count)))); +} + +static __inline vec_uint4 spu_rlmaskqwbyte(vec_uint4 a, int count) +{ + return ((vec_uint4)(si_rotqmby((qword)(a), si_from_int(count)))); +} + +static __inline vec_int4 spu_rlmaskqwbyte(vec_int4 a, int count) +{ + return ((vec_int4)(si_rotqmby((qword)(a), si_from_int(count)))); +} + +static __inline vec_float4 spu_rlmaskqwbyte(vec_float4 a, int count) +{ + return ((vec_float4)(si_rotqmby((qword)(a), si_from_int(count)))); +} + +static __inline vec_ullong2 spu_rlmaskqwbyte(vec_ullong2 a, int count) +{ + return ((vec_ullong2)(si_rotqmby((qword)(a), si_from_int(count)))); +} + +static __inline vec_llong2 spu_rlmaskqwbyte(vec_llong2 a, int count) +{ + return ((vec_llong2)(si_rotqmby((qword)(a), si_from_int(count)))); +} + +static __inline vec_double2 spu_rlmaskqwbyte(vec_double2 a, int count) +{ + return ((vec_double2)(si_rotqmby((qword)(a), si_from_int(count)))); +} + +/* spu_rlmaskqwbytebc + * ================== + */ +static __inline vec_uchar16 spu_rlmaskqwbytebc(vec_uchar16 a, int count) +{ + return ((vec_uchar16)(si_rotqmbybi((qword)(a), si_from_int(count)))); +} + +static __inline vec_char16 spu_rlmaskqwbytebc(vec_char16 a, int count) +{ + return ((vec_char16)(si_rotqmbybi((qword)(a), si_from_int(count)))); +} + +static __inline vec_ushort8 spu_rlmaskqwbytebc(vec_ushort8 a, int count) +{ + return ((vec_ushort8)(si_rotqmbybi((qword)(a), si_from_int(count)))); +} + +static __inline vec_short8 spu_rlmaskqwbytebc(vec_short8 a, int count) +{ + return ((vec_short8)(si_rotqmbybi((qword)(a), si_from_int(count)))); +} + +static __inline vec_uint4 spu_rlmaskqwbytebc(vec_uint4 a, int count) +{ + return ((vec_uint4)(si_rotqmbybi((qword)(a), si_from_int(count)))); +} + +static __inline vec_int4 spu_rlmaskqwbytebc(vec_int4 a, int count) +{ + return ((vec_int4)(si_rotqmbybi((qword)(a), si_from_int(count)))); +} + +static __inline vec_float4 spu_rlmaskqwbytebc(vec_float4 a, int count) +{ + return ((vec_float4)(si_rotqmbybi((qword)(a), si_from_int(count)))); +} + +static __inline vec_ullong2 spu_rlmaskqwbytebc(vec_ullong2 a, int count) +{ + return ((vec_ullong2)(si_rotqmbybi((qword)(a), si_from_int(count)))); +} + +static __inline vec_llong2 spu_rlmaskqwbytebc(vec_llong2 a, int count) +{ + return ((vec_llong2)(si_rotqmbybi((qword)(a), si_from_int(count)))); +} + +static __inline vec_double2 spu_rlmaskqwbytebc(vec_double2 a, int count) +{ + return ((vec_double2)(si_rotqmbybi((qword)(a), si_from_int(count)))); +} + + +/* spu_rlqwbyte + * ============ + */ +static __inline vec_uchar16 spu_rlqwbyte(vec_uchar16 a, int count) +{ + return ((vec_uchar16)(si_rotqby((qword)(a), si_from_int(count)))); +} + +static __inline vec_char16 spu_rlqwbyte(vec_char16 a, int count) +{ + return ((vec_char16)(si_rotqby((qword)(a), si_from_int(count)))); +} + +static __inline vec_ushort8 spu_rlqwbyte(vec_ushort8 a, int count) +{ + return ((vec_ushort8)(si_rotqby((qword)(a), si_from_int(count)))); +} + +static __inline vec_short8 spu_rlqwbyte(vec_short8 a, int count) +{ + return ((vec_short8)(si_rotqby((qword)(a), si_from_int(count)))); +} + +static __inline vec_uint4 spu_rlqwbyte(vec_uint4 a, int count) +{ + return ((vec_uint4)(si_rotqby((qword)(a), si_from_int(count)))); +} + +static __inline vec_int4 spu_rlqwbyte(vec_int4 a, int count) +{ + return ((vec_int4)(si_rotqby((qword)(a), si_from_int(count)))); +} + +static __inline vec_float4 spu_rlqwbyte(vec_float4 a, int count) +{ + return ((vec_float4)(si_rotqby((qword)(a), si_from_int(count)))); +} + +static __inline vec_ullong2 spu_rlqwbyte(vec_ullong2 a, int count) +{ + return ((vec_ullong2)(si_rotqby((qword)(a), si_from_int(count)))); +} + +static __inline vec_llong2 spu_rlqwbyte(vec_llong2 a, int count) +{ + return ((vec_llong2)(si_rotqby((qword)(a), si_from_int(count)))); +} + +static __inline vec_double2 spu_rlqwbyte(vec_double2 a, int count) +{ + return ((vec_double2)(si_rotqby((qword)(a), si_from_int(count)))); +} + + +/* spu_rlqwbytebc + * ============== + */ +static __inline vec_uchar16 spu_rlqwbytebc(vec_uchar16 a, int count) +{ + return ((vec_uchar16)(si_rotqbybi((qword)(a), si_from_int(count)))); +} + +static __inline vec_char16 spu_rlqwbytebc(vec_char16 a, int count) +{ + return ((vec_char16)(si_rotqbybi((qword)(a), si_from_int(count)))); +} + +static __inline vec_ushort8 spu_rlqwbytebc(vec_ushort8 a, int count) +{ + return ((vec_ushort8)(si_rotqbybi((qword)(a), si_from_int(count)))); +} + +static __inline vec_short8 spu_rlqwbytebc(vec_short8 a, int count) +{ + return ((vec_short8)(si_rotqbybi((qword)(a), si_from_int(count)))); +} + +static __inline vec_uint4 spu_rlqwbytebc(vec_uint4 a, int count) +{ + return ((vec_uint4)(si_rotqbybi((qword)(a), si_from_int(count)))); +} + +static __inline vec_int4 spu_rlqwbytebc(vec_int4 a, int count) +{ + return ((vec_int4)(si_rotqbybi((qword)(a), si_from_int(count)))); +} + +static __inline vec_float4 spu_rlqwbytebc(vec_float4 a, int count) +{ + return ((vec_float4)(si_rotqbybi((qword)(a), si_from_int(count)))); +} + +static __inline vec_ullong2 spu_rlqwbytebc(vec_ullong2 a, int count) +{ + return ((vec_ullong2)(si_rotqbybi((qword)(a), si_from_int(count)))); +} + +static __inline vec_llong2 spu_rlqwbytebc(vec_llong2 a, int count) +{ + return ((vec_llong2)(si_rotqbybi((qword)(a), si_from_int(count)))); +} + +static __inline vec_double2 spu_rlqwbytebc(vec_double2 a, int count) +{ + return ((vec_double2)(si_rotqbybi((qword)(a), si_from_int(count)))); +} + +/* spu_rlqw + * ======== + */ +static __inline vec_uchar16 spu_rlqw(vec_uchar16 a, int count) +{ + return ((vec_uchar16)(si_rotqbi((qword)(a), si_from_int(count)))); +} + +static __inline vec_char16 spu_rlqw(vec_char16 a, int count) +{ + return ((vec_char16)(si_rotqbi((qword)(a), si_from_int(count)))); +} + +static __inline vec_ushort8 spu_rlqw(vec_ushort8 a, int count) +{ + return ((vec_ushort8)(si_rotqbi((qword)(a), si_from_int(count)))); +} + +static __inline vec_short8 spu_rlqw(vec_short8 a, int count) +{ + return ((vec_short8)(si_rotqbi((qword)(a), si_from_int(count)))); +} + +static __inline vec_uint4 spu_rlqw(vec_uint4 a, int count) +{ + return ((vec_uint4)(si_rotqbi((qword)(a), si_from_int(count)))); +} + +static __inline vec_int4 spu_rlqw(vec_int4 a, int count) +{ + return ((vec_int4)(si_rotqbi((qword)(a), si_from_int(count)))); +} + +static __inline vec_float4 spu_rlqw(vec_float4 a, int count) +{ + return ((vec_float4)(si_rotqbi((qword)(a), si_from_int(count)))); +} + +static __inline vec_ullong2 spu_rlqw(vec_ullong2 a, int count) +{ + return ((vec_ullong2)(si_rotqbi((qword)(a), si_from_int(count)))); +} + +static __inline vec_llong2 spu_rlqw(vec_llong2 a, int count) +{ + return ((vec_llong2)(si_rotqbi((qword)(a), si_from_int(count)))); +} + +static __inline vec_double2 spu_rlqw(vec_double2 a, int count) +{ + return ((vec_double2)(si_rotqbi((qword)(a), si_from_int(count)))); +} + +/* spu_roundtf + * =========== + */ +static __inline vec_float4 spu_roundtf(vec_double2 a) +{ + return ((vec_float4)(si_frds((qword)(a)))); +} + + +/* spu_rsqrte + * ========== + */ +#define spu_rsqrte(_a) vec_rsqrte(_a) + + +/* spu_sel + * ======= + */ +static __inline vec_uchar16 spu_sel(vec_uchar16 a, vec_uchar16 b, vec_uchar16 pattern) +{ + return ((vec_uchar16)(si_selb((qword)(a), (qword)(b), (qword)(pattern)))); +} + +static __inline vec_char16 spu_sel(vec_char16 a, vec_char16 b, vec_uchar16 pattern) +{ + return ((vec_char16)(si_selb((qword)(a), (qword)(b), (qword)(pattern)))); +} + +static __inline vec_ushort8 spu_sel(vec_ushort8 a, vec_ushort8 b, vec_ushort8 pattern) +{ + return ((vec_ushort8)(si_selb((qword)(a), (qword)(b), (qword)(pattern)))); +} + +static __inline vec_short8 spu_sel(vec_short8 a, vec_short8 b, vec_ushort8 pattern) +{ + return ((vec_short8)(si_selb((qword)(a), (qword)(b), (qword)(pattern)))); +} + +static __inline vec_uint4 spu_sel(vec_uint4 a, vec_uint4 b, vec_uint4 pattern) +{ + return ((vec_uint4)(si_selb((qword)(a), (qword)(b), (qword)(pattern)))); +} + +static __inline vec_int4 spu_sel(vec_int4 a, vec_int4 b, vec_uint4 pattern) +{ + return ((vec_int4)(si_selb((qword)(a), (qword)(b), (qword)(pattern)))); +} + +static __inline vec_float4 spu_sel(vec_float4 a, vec_float4 b, vec_uint4 pattern) +{ + return ((vec_float4)(si_selb((qword)(a), (qword)(b), (qword)(pattern)))); +} + +static __inline vec_ullong2 spu_sel(vec_ullong2 a, vec_ullong2 b, vec_ullong2 pattern) +{ + return ((vec_ullong2)(si_selb((qword)(a), (qword)(b), (qword)(pattern)))); +} + +static __inline vec_llong2 spu_sel(vec_llong2 a, vec_llong2 b, vec_ullong2 pattern) +{ + return ((vec_llong2)(si_selb((qword)(a), (qword)(b), (qword)(pattern)))); +} + +static __inline vec_double2 spu_sel(vec_double2 a, vec_double2 b, vec_ullong2 pattern) +{ + return ((vec_double2)(si_selb((qword)(a), (qword)(b), (qword)(pattern)))); +} + + + +/* spu_shuffle + * =========== + */ +static __inline vec_uchar16 spu_shuffle(vec_uchar16 a, vec_uchar16 b, vec_uchar16 pattern) +{ + return ((vec_uchar16)(si_shufb((qword)(a), (qword)(b), (qword)(pattern)))); +} + +static __inline vec_char16 spu_shuffle(vec_char16 a, vec_char16 b, vec_uchar16 pattern) +{ + return ((vec_char16)(si_shufb((qword)(a), (qword)(b), (qword)(pattern)))); +} + +static __inline vec_ushort8 spu_shuffle(vec_ushort8 a, vec_ushort8 b, vec_uchar16 pattern) +{ + return ((vec_ushort8)(si_shufb((qword)(a), (qword)(b), (qword)(pattern)))); +} + +static __inline vec_short8 spu_shuffle(vec_short8 a, vec_short8 b, vec_uchar16 pattern) +{ + return ((vec_short8)(si_shufb((qword)(a), (qword)(b), (qword)(pattern)))); +} + +static __inline vec_uint4 spu_shuffle(vec_uint4 a, vec_uint4 b, vec_uchar16 pattern) +{ + return ((vec_uint4)(si_shufb((qword)(a), (qword)(b), (qword)(pattern)))); +} + +static __inline vec_int4 spu_shuffle(vec_int4 a, vec_int4 b, vec_uchar16 pattern) +{ + return ((vec_int4)(si_shufb((qword)(a), (qword)(b), (qword)(pattern)))); +} + +static __inline vec_float4 spu_shuffle(vec_float4 a, vec_float4 b, vec_uchar16 pattern) +{ + return ((vec_float4)(si_shufb((qword)(a), (qword)(b), (qword)(pattern)))); +} + +static __inline vec_ullong2 spu_shuffle(vec_ullong2 a, vec_ullong2 b, vec_uchar16 pattern) +{ + return ((vec_ullong2)(si_shufb((qword)(a), (qword)(b), (qword)(pattern)))); +} + +static __inline vec_llong2 spu_shuffle(vec_llong2 a, vec_llong2 b, vec_uchar16 pattern) +{ + return ((vec_llong2)(si_shufb((qword)(a), (qword)(b), (qword)(pattern)))); +} + +static __inline vec_double2 spu_shuffle(vec_double2 a, vec_double2 b, vec_uchar16 pattern) +{ + return ((vec_double2)(si_shufb((qword)(a), (qword)(b), (qword)(pattern)))); +} + + +/* spu_sl + * ====== + */ +static __inline vec_ushort8 spu_sl(vec_ushort8 a, vec_ushort8 b) +{ + return ((vec_ushort8)(si_shlh((qword)(a), (qword)(b)))); +} + +static __inline vec_short8 spu_sl(vec_short8 a, vec_ushort8 b) +{ + return ((vec_short8)(si_shlh((qword)(a), (qword)(b)))); +} + +static __inline vec_uint4 spu_sl(vec_uint4 a, vec_uint4 b) +{ + return ((vec_uint4)(si_shl((qword)(a), (qword)(b)))); +} + +static __inline vec_int4 spu_sl(vec_int4 a, vec_uint4 b) +{ + return ((vec_int4)(si_shl((qword)(a), (qword)(b)))); +} + +static __inline vec_ushort8 spu_sl(vec_ushort8 a, unsigned int b) +{ + return ((vec_ushort8)(si_shlhi((qword)(a), b))); +} + +static __inline vec_short8 spu_sl(vec_short8 a, unsigned int b) +{ + return ((vec_short8)(si_shlhi((qword)(a), b))); +} + +static __inline vec_uint4 spu_sl(vec_uint4 a, unsigned int b) +{ + return ((vec_uint4)(si_shli((qword)(a), b))); +} + +static __inline vec_int4 spu_sl(vec_int4 a, unsigned int b) +{ + return ((vec_int4)(si_shli((qword)(a), b))); +} + + +/* spu_slqw + * ======== + */ +static __inline vec_uchar16 spu_slqw(vec_uchar16 a, unsigned int count) +{ + return ((vec_uchar16)(si_shlqbi((qword)(a), si_from_uint(count)))); +} + +static __inline vec_char16 spu_slqw(vec_char16 a, unsigned int count) +{ + return ((vec_char16)(si_shlqbi((qword)(a), si_from_uint(count)))); +} + +static __inline vec_ushort8 spu_slqw(vec_ushort8 a, unsigned int count) +{ + return ((vec_ushort8)(si_shlqbi((qword)(a), si_from_uint(count)))); +} + +static __inline vec_short8 spu_slqw(vec_short8 a, unsigned int count) +{ + return ((vec_short8)(si_shlqbi((qword)(a), si_from_uint(count)))); +} + +static __inline vec_uint4 spu_slqw(vec_uint4 a, unsigned int count) +{ + return ((vec_uint4)(si_shlqbi((qword)(a), si_from_uint(count)))); +} + +static __inline vec_int4 spu_slqw(vec_int4 a, unsigned int count) +{ + return ((vec_int4)(si_shlqbi((qword)(a), si_from_uint(count)))); +} + +static __inline vec_float4 spu_slqw(vec_float4 a, unsigned int count) +{ + return ((vec_float4)(si_shlqbi((qword)(a), si_from_uint(count)))); +} + +static __inline vec_ullong2 spu_slqw(vec_ullong2 a, unsigned int count) +{ + return ((vec_ullong2)(si_shlqbi((qword)(a), si_from_uint(count)))); +} + +static __inline vec_llong2 spu_slqw(vec_llong2 a, unsigned int count) +{ + return ((vec_llong2)(si_shlqbi((qword)(a), si_from_uint(count)))); +} + +static __inline vec_double2 spu_slqw(vec_double2 a, unsigned int count) +{ + return ((vec_double2)(si_shlqbi((qword)(a), si_from_uint(count)))); +} + +/* spu_slqwbyte + * ============ + */ +static __inline vec_uchar16 spu_slqwbyte(vec_uchar16 a, unsigned int count) +{ + return ((vec_uchar16)(si_shlqby((qword)(a), si_from_uint(count)))); +} + +static __inline vec_char16 spu_slqwbyte(vec_char16 a, unsigned int count) +{ + return ((vec_char16)(si_shlqby((qword)(a), si_from_uint(count)))); +} + +static __inline vec_ushort8 spu_slqwbyte(vec_ushort8 a, unsigned int count) +{ + return ((vec_ushort8)(si_shlqby((qword)(a), si_from_uint(count)))); +} + +static __inline vec_short8 spu_slqwbyte(vec_short8 a, unsigned int count) +{ + return ((vec_short8)(si_shlqby((qword)(a), si_from_uint(count)))); +} + +static __inline vec_uint4 spu_slqwbyte(vec_uint4 a, unsigned int count) +{ + return ((vec_uint4)(si_shlqby((qword)(a), si_from_uint(count)))); +} + +static __inline vec_int4 spu_slqwbyte(vec_int4 a, unsigned int count) +{ + return ((vec_int4)(si_shlqby((qword)(a), si_from_uint(count)))); +} + +static __inline vec_float4 spu_slqwbyte(vec_float4 a, unsigned int count) +{ + return ((vec_float4)(si_shlqby((qword)(a), si_from_uint(count)))); +} + +static __inline vec_ullong2 spu_slqwbyte(vec_ullong2 a, unsigned int count) +{ + return ((vec_ullong2)(si_shlqby((qword)(a), si_from_uint(count)))); +} + +static __inline vec_llong2 spu_slqwbyte(vec_llong2 a, unsigned int count) +{ + return ((vec_llong2)(si_shlqby((qword)(a), si_from_uint(count)))); +} + +static __inline vec_double2 spu_slqwbyte(vec_double2 a, unsigned int count) +{ + return ((vec_double2)(si_shlqby((qword)(a), si_from_uint(count)))); +} + +/* spu_slqwbytebc + * ============== + */ +static __inline vec_uchar16 spu_slqwbytebc(vec_uchar16 a, unsigned int count) +{ + return ((vec_uchar16)(si_shlqbybi((qword)(a), si_from_uint(count)))); +} + +static __inline vec_char16 spu_slqwbytebc(vec_char16 a, unsigned int count) +{ + return ((vec_char16)(si_shlqbybi((qword)(a), si_from_uint(count)))); +} + +static __inline vec_ushort8 spu_slqwbytebc(vec_ushort8 a, unsigned int count) +{ + return ((vec_ushort8)(si_shlqbybi((qword)(a), si_from_uint(count)))); +} + +static __inline vec_short8 spu_slqwbytebc(vec_short8 a, unsigned int count) +{ + return ((vec_short8)(si_shlqbybi((qword)(a), si_from_uint(count)))); +} + +static __inline vec_uint4 spu_slqwbytebc(vec_uint4 a, unsigned int count) +{ + return ((vec_uint4)(si_shlqbybi((qword)(a), si_from_uint(count)))); +} + +static __inline vec_int4 spu_slqwbytebc(vec_int4 a, unsigned int count) +{ + return ((vec_int4)(si_shlqbybi((qword)(a), si_from_uint(count)))); +} + +static __inline vec_float4 spu_slqwbytebc(vec_float4 a, unsigned int count) +{ + return ((vec_float4)(si_shlqbybi((qword)(a), si_from_uint(count)))); +} + +static __inline vec_ullong2 spu_slqwbytebc(vec_ullong2 a, unsigned int count) +{ + return ((vec_ullong2)(si_shlqbybi((qword)(a), si_from_uint(count)))); +} + +static __inline vec_llong2 spu_slqwbytebc(vec_llong2 a, unsigned int count) +{ + return ((vec_llong2)(si_shlqbybi((qword)(a), si_from_uint(count)))); +} + +static __inline vec_double2 spu_slqwbytebc(vec_double2 a, unsigned int count) +{ + return ((vec_double2)(si_shlqbybi((qword)(a), si_from_uint(count)))); +} + +/* spu_splats + * ========== + */ +static __inline vec_uchar16 spu_splats(unsigned char a) +{ + union { + vec_uchar16 v; + unsigned char c[16]; + } in; + + in.c[0] = a; + return (vec_splat(in.v, 0)); +} + +static __inline vec_char16 spu_splats(signed char a) +{ + return ((vec_char16)spu_splats((unsigned char)(a))); +} + +static __inline vec_ushort8 spu_splats(unsigned short a) +{ + union { + vec_ushort8 v; + unsigned short s[8]; + } in; + + in.s[0] = a; + return (vec_splat(in.v, 0)); +} + +static __inline vec_short8 spu_splats(signed short a) +{ + return ((vec_short8)spu_splats((unsigned short)(a))); +} + +static __inline vec_uint4 spu_splats(unsigned int a) +{ + union { + vec_uint4 v; + unsigned int i[4]; + } in; + + in.i[0] = a; + return (vec_splat(in.v, 0)); +} + +static __inline vec_int4 spu_splats(signed int a) +{ + return ((vec_int4)spu_splats((unsigned int)(a))); +} + +static __inline vec_float4 spu_splats(float a) +{ + union { + vec_float4 v; + float f[4]; + } in; + + in.f[0] = a; + return (vec_splat(in.v, 0)); +} + +static __inline vec_ullong2 spu_splats(unsigned long long a) +{ + union { + vec_ullong2 v; + unsigned long long l[2]; + } in; + + in.l[0] = a; + in.l[1] = a; + return (in.v); +} + +static __inline vec_llong2 spu_splats(signed long long a) +{ + return ((vec_llong2)spu_splats((unsigned long long)(a))); +} + +static __inline vec_double2 spu_splats(double a) +{ + union { + vec_double2 v; + double d[2]; + } in; + + in.d[0] = a; + in.d[1] = a; + return (in.v); +} + + +/* spu_stop + * ======== + */ +#define spu_stop(_type) si_stop(_type) + + +/* spu_sub + * ======= + */ +static __inline vec_ushort8 spu_sub(vec_ushort8 a, vec_ushort8 b) +{ + return ((vec_ushort8)(si_sfh((qword)(b), (qword)(a)))); +} + +static __inline vec_short8 spu_sub(vec_short8 a, vec_short8 b) +{ + return ((vec_short8)(si_sfh((qword)(b), (qword)(a)))); +} + +static __inline vec_uint4 spu_sub(vec_uint4 a, vec_uint4 b) +{ + return ((vec_uint4)(si_sf((qword)(b), (qword)(a)))); +} + +static __inline vec_int4 spu_sub(vec_int4 a, vec_int4 b) +{ + return ((vec_int4)(si_sf((qword)(b), (qword)(a)))); +} + +static __inline vec_float4 spu_sub(vec_float4 a, vec_float4 b) +{ + return ((vec_float4)(si_fs((qword)(a), (qword)(b)))); +} + +static __inline vec_double2 spu_sub(vec_double2 a, vec_double2 b) +{ + return ((vec_double2)(si_dfs((qword)(a), (qword)(b)))); +} + +static __inline vec_uint4 spu_sub(unsigned int a, vec_uint4 b) +{ + return ((vec_uint4)(si_sfi((qword)b, (int)a))); +} + +static __inline vec_int4 spu_sub(signed int a, vec_int4 b) +{ + return ((vec_int4)(si_sfi((qword)b, (int)a))); +} + +static __inline vec_ushort8 spu_sub(unsigned short a, vec_ushort8 b) +{ + return ((vec_ushort8)(si_sfhi((qword)b, (short)a))); +} + +static __inline vec_short8 spu_sub(signed short a, vec_short8 b) +{ + return ((vec_short8)(si_sfhi((qword)b, (short)a))); +} + +/* spu_subx + * ======== + */ +static __inline vec_uint4 spu_subx(vec_uint4 a, vec_uint4 b, vec_uint4 c) +{ + return ((vec_uint4)(si_sfx((qword)(b), (qword)(a), (qword)(c)))); +} + +static __inline vec_int4 spu_subx(vec_int4 a, vec_int4 b, vec_int4 c) +{ + return ((vec_int4)(si_sfx((qword)(b), (qword)(a), (qword)(c)))); +} + +/* spu_sumb + * ======== + */ +static __inline vec_ushort8 spu_sumb(vec_uchar16 a, vec_uchar16 b) +{ + return ((vec_ushort8)(si_sumb((qword)(a), (qword)(b)))); +} + + +/* spu_sync + * spu_sync_c + * ======== + */ +#define spu_sync() /* do nothing */ + +#define spu_sync_c() /* do nothing */ + + +/* spu_writech + * =========== + */ +#define spu_writech(_channel, _a) /* not mappable */ + +/* spu_writechqw + * ============= + */ +#define spu_writechqw(_channel, _a) /* not mappable */ + + +/* spu_xor + * ======= + */ +static __inline vec_uchar16 spu_xor(vec_uchar16 a, vec_uchar16 b) +{ + return ((vec_uchar16)(si_xor((qword)(a), (qword)(b)))); +} + +static __inline vec_char16 spu_xor(vec_char16 a, vec_char16 b) +{ + return ((vec_char16)(si_xor((qword)(a), (qword)(b)))); +} + +static __inline vec_ushort8 spu_xor(vec_ushort8 a, vec_ushort8 b) +{ + return ((vec_ushort8)(si_xor((qword)(a), (qword)(b)))); +} + +static __inline vec_short8 spu_xor(vec_short8 a, vec_short8 b) +{ + return ((vec_short8)(si_xor((qword)(a), (qword)(b)))); +} + +static __inline vec_uint4 spu_xor(vec_uint4 a, vec_uint4 b) +{ + return ((vec_uint4)(si_xor((qword)(a), (qword)(b)))); +} + +static __inline vec_int4 spu_xor(vec_int4 a, vec_int4 b) +{ + return ((vec_int4)(si_xor((qword)(a), (qword)(b)))); +} + +static __inline vec_float4 spu_xor(vec_float4 a, vec_float4 b) +{ + return ((vec_float4)(si_xor((qword)(a), (qword)(b)))); +} + +static __inline vec_ullong2 spu_xor(vec_ullong2 a, vec_ullong2 b) +{ + return ((vec_ullong2)(si_xor((qword)(a), (qword)(b)))); +} + +static __inline vec_llong2 spu_xor(vec_llong2 a, vec_llong2 b) +{ + return ((vec_llong2)(si_xor((qword)(a), (qword)(b)))); +} + +static __inline vec_double2 spu_xor(vec_double2 a, vec_double2 b) +{ + return ((vec_double2)(si_xor((qword)(a), (qword)(b)))); +} + +static __inline vec_uchar16 spu_xor(vec_uchar16 a, unsigned char b) +{ + return ((vec_uchar16)(si_xorbi((qword)(a), b))); +} + +static __inline vec_char16 spu_xor(vec_char16 a, signed char b) +{ + return ((vec_char16)(si_xorbi((qword)(a), (unsigned char)(b)))); +} + +static __inline vec_ushort8 spu_xor(vec_ushort8 a, unsigned short b) +{ + return ((vec_ushort8)(si_xorhi((qword)(a), b))); +} + +static __inline vec_short8 spu_xor(vec_short8 a, signed short b) +{ + return ((vec_short8)(si_xorhi((qword)(a), (unsigned short)(b)))); +} + +static __inline vec_uint4 spu_xor(vec_uint4 a, unsigned int b) +{ + return ((vec_uint4)(si_xori((qword)(a), b))); +} + +static __inline vec_int4 spu_xor(vec_int4 a, signed int b) +{ + return ((vec_int4)(si_xori((qword)(a), (unsigned int)(b)))); +} + +#endif /* !__SPU__ */ +#endif /* __cplusplus */ +#endif /* !_SPU2VMX_H_ */ diff --git a/Extras/vectormathlibrary/other/rs6000/vec_types.h b/Extras/vectormathlibrary/other/rs6000/vec_types.h new file mode 100644 index 000000000..497257b85 --- /dev/null +++ b/Extras/vectormathlibrary/other/rs6000/vec_types.h @@ -0,0 +1,55 @@ +/* (C) Copyright + Sony Computer Entertainment, Inc., + 2001,2002,2003,2004,2005,2006. + + This file is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your option) + any later version. + + This file is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with this file; see the file COPYING. If not, write to the Free + Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. */ + +/* As a special exception, if you include this header file into source files + compiled by GCC, this header file does not by itself cause the resulting + executable to be covered by the GNU General Public License. This exception + does not however invalidate any other reasons why the executable file might be + covered by the GNU General Public License. */ + +/* Single token vector data types for the PowerPC SIMD/Vector Multi-media + eXtension */ + +#ifndef _VEC_TYPES_H_ +#define _VEC_TYPES_H_ 1 + +#define qword __vector unsigned char + +#define vec_uchar16 __vector unsigned char +#define vec_char16 __vector signed char +#define vec_bchar16 __vector bool char + +#define vec_ushort8 __vector unsigned short +#define vec_short8 __vector signed short +#define vec_bshort8 __vector bool short + +#define vec_pixel8 __vector pixel + +#define vec_uint4 __vector unsigned int +#define vec_int4 __vector signed int +#define vec_bint4 __vector bool int + +#define vec_float4 __vector float + +#define vec_ullong2 __vector bool char +#define vec_llong2 __vector bool short + +#define vec_double2 __vector bool int + +#endif /* _VEC_TYPES_H_ */